Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jan 11 14:30

    dependabot-preview[bot] on cargo

    (compare)

  • Jan 11 14:30
    dependabot-preview[bot] commented #519
  • Jan 11 14:30
    dependabot-preview[bot] closed #519
  • Jan 11 14:30
    msrd0 commented #519
  • Jan 11 14:27
    msrd0 edited #511
  • Jan 11 14:26
    codecov[bot] commented #511
  • Jan 11 14:26
    msrd0 synchronize #511
  • Jan 11 08:31
    dependabot-preview[bot] labeled #519
  • Jan 11 08:31
    dependabot-preview[bot] opened #519
  • Jan 11 08:31

    dependabot-preview[bot] on cargo

    Update tokio-tungstenite requir… (compare)

  • Jan 08 22:00
    krallin commented #518
  • Jan 08 17:56
    msrd0 closed #518
  • Jan 08 17:56
    msrd0 commented #518
  • Jan 08 17:54
    krallin opened #518
  • Dec 30 2020 13:39
    dependabot-preview[bot] commented #515
  • Dec 30 2020 13:39
    msrd0 commented #515
  • Dec 30 2020 13:37
    dependabot-preview[bot] commented #517
  • Dec 30 2020 13:37

    dependabot-preview[bot] on cargo

    (compare)

  • Dec 30 2020 13:37
    dependabot-preview[bot] closed #517
  • Dec 30 2020 13:37
    msrd0 commented #517
Judson Lester
@nyarly
A) specifically, the pipelines provided to a router are effectively the "default" pipelines for each route. They'll be wrapped around anything that uses one of the request family of route drawing methods.
This is different in behavior to being a wrapper around the whole router because there are several methods that allow you to route _without_pipelines
That all makes some sense to me. If it were my design, I'd wrap things in pipelines explicitly, and there'd be an easier way to wrap the top level router. I'm not sure I can make a stronger argument for that than "aesthetics."
Judson Lester
@nyarly
The pipeline stuff gets a little more complicated - there's these PipelineHandleChains which are BorrowBags so that we can ensure the lifetimes of the data in the pipeline definitions.
BorrowBags exist to make a collection of disparate things share a (longer) lifetime, right?
Where it gets weird is that a PLHC is a collection of Pipelines, which are themselves collections of Middleware,
(well... there's some construct going on in there, and Pilelines -> PipelineInstances and NewMiddlewareChain -> MiddlewareChain but that confuses the issue)
When a pipeline gets called during a request, we instantiate what amounts to a list of lists, and then do a depth first walk with the (state, request) pair, and then walk back with the result.
Judson Lester
@nyarly
I mean really, it's all function composition, not list walking, and the weirdest part (which I'm still trying to get my head around) is how PipelineHandleChains compose with MiddlewareChains since both convert a cadr-style list into function composition, with (state,request) running down the side.
Finally, I don't understand why it has to be, but the MiddlewareChain itself is declared unsafe
So my primary research question now is: could the PLHC refer directly to Middleware - or some new middleware-type that's available to be implemented directly, but there's an adapter for old style Middleware
Judson Lester
@nyarly
Step one being: could that produce a related composition?
Judson Lester
@nyarly
IIRC, many of these types aren't public - Middleware is, and PLHC is. But I wonder if we could simplify there and not break anything.
Judson Lester
@nyarly
Okay, for sure pipelinechains of middlewarechains are equivalent to a single MWchain composed by concatenation.
So I think it should be refactorable.
Unless anyone understands different?
Stefan Schindler
@dns2utf8
Hello folks,
I am writing a verification tool that needs to fetch some data over HTTPS when the user pushes a button in the WebUI. Can I do that in gotham? Can I do that in a normal POST handler?
Dominic
@msrd0:msrd0.de
[m]
So you're basically asking for a web server that replies to POST requests? You can definitely do that with gotham
Alex Hansen
@sezna
Hey, sorry for being absent for a while, I moved and had some stuff. @msrd0_gitlab I see your ping about the next release now, if you want to chat about it.
Judson Lester
@nyarly
Has anyone been using the async-trait crate with Gotham?
Alex Hansen
@sezna
i haven't, are you encountering an issue with it?
Judson Lester
@nyarly
No, but as I've been investigating pipeline/middleware space, it seems like a natural fit for implementing Handler structs.
Might be a call for a new trait like AsyncHandler or something that has a blanket Handler implementation
Dominic
@msrd0:msrd0.de
[m]
I don't remember what that ping was about, can't be that important
Judson Lester
@nyarly
analogous to how async fn transforms async fn -> Result to (something like) fn -> Pin<Box<Future<Result>>>
Dominic
@msrd0:msrd0.de
[m]
iirc async-trait is just a convenience macro, so using it or not should be independent from gotham?
Alex Hansen
@sezna
correct, it just parses the async/await syntax on your function so you can define a trait with async syntax
should work fine
Denis Lisov
@tanriol
Note that in the current state of Rust async trait adds a level of Boxing, AFAIK.
Judson Lester
@nyarly
Isn't that every async though?
Or is async just Pin<Future<T>>?
Dominic
@msrd0:msrd0.de
[m]
no that's just a limitation of traits where you cannot return impl Future
afaik async fn foo() -> Result translates to fn foo() -> impl Future<Output = Result> with no boxing involved, and the concrete type being inferred by the compiler (and which is also some autogenerated private type)
Stefan Schindler
@dns2utf8
@msrd0:msrd0.de and all:
Sorry for the late reply. What I want is the webserver responding to a post request by making another get request
So my scenario is this:
Client --{POST}--> GothamServer --{GET}--> some other server with the information I need to answer the client
Dominic
@msrd0:msrd0.de
[m]
yes that's certainly possible. gotham would be the part that communicates with the client, and then you'd use a client library like reqwest or surf to make your get request inside the handler
Rodrigo Batista
@rodrigodevelms
Hi folks. Gothan ready to build a ERP system?
Alex Hansen
@sezna
Sure. It's a capable web framework. I suspect for an ERP system, you'll be spending more of your time in database and UI code than in your web server code.
Jan Mazur
@mzr
Hi. I have an already established connection (AsyncRead + AsyncWrite). Based on some initial data received I would like to either proceed with a custom logic or plug it into gotham to handle http. Is that possible with gotham? Could you point me into right direction how to do that?
tanriol
@tanriol:matrix.org
[m]
@mzr: Probably not out of the box. I'd suggest looking at bind_server (source) to see (a) if it would be enough, (b) how it's dont internally.
Chris Emerson
@jugglerchris
Hi. Is there a convenient way to run tests with an sqlite in-memory database? I could pass ":memory:" to Repo::new(), but it's not obvious how to run the diesel migrations.
Marwan Rabbâa
@waghanza
Hi,
Their is something I don't understand in Cargo.lock, should not in fix / expose feature from hyper ? I have no rust skill but hyper is in 0.14 so we need to fix version in Cargo.toml
the-benchmarker/web-frameworks#3690
Dominic
@msrd0:msrd0.de
[m]
@waghanza: gotham re-exports the hyper crate, so I strongly advise you use gotham::hyper and don't depend on your own version of hyper
@jugglerchris: I don't think the diesel middleware currently supports this, so for now your best bet is probably to create a temporary file and use that as the database. Feel free to open an issue/PR to improve this
Marwan Rabbâa
@waghanza
@msrd0:msrd0.de May I ask yo to review above PR, please
Chris Emerson
@jugglerchris
@msrd0:msrd0.de Thanks - a temporary file is fine but slightly unsatisfying - but no biggie.
Chris Emerson
@jugglerchris
Next question... what do people use for the session middleware backend? I guess it's probably not much effort wrapping a gotham_middleware_diesel table, but I guess I'd expect someone to have done so already. :-) (In the absence of a pre-existing one the MemoryBackendwill realistically be fine for my one-off application for a child's distributed birthday party)
Dominic
@msrd0:msrd0.de
[m]
it looks like travis currently refuses to run on our repository - does anyone know why that is?