-
Notifications
You must be signed in to change notification settings - Fork 35
Open
Description
Often I get compile errors when the compiler cannot deduce the type when using try_stream!
:
error[E0698]: type inside `async fn` body must be known in this context
--> src/server.rs:213:18
|
213 | let stream = try_stream! {
| __________________^
214 | | while let Some(chunk) = body.data().await {
215 | | let chunk = chunk?;
216 | | trace!("Body: {:?}", &chunk);
... |
219 | | }
220 | | };
| |_____^ cannot infer type for type parameter `E` declared on the enum `Result`
This can be resolved by moving the code into a function that returns the appropriate generic type. However, is it also possible to put a type annotation somewhere? (impl T
doesn't seem to work for annotating the type of a local variable.)
Activity
carllerche commentedon Aug 6, 2020
I don't see you yielding anywhere in this example.
carllerche commentedon Aug 6, 2020
Unfortunately, "terrible compilation errors" is going to be a limitation of this crate & the macro strategy. Doing better on the compilation error front will require rustc to provide stream generators.
Sorry :(
dbrgn commentedon Aug 6, 2020
Sorry, the yield was in the part that was omitted in the error message 🙂
Sure, that's fine, I just wondered whether there's an easy way to annotate the return type, so that I won't have to create a helper function. But helper functions work just fine.
stream
andtry_stream
functions #74rodrigorc commentedon Sep 28, 2022
I managed to annotate the return type by writing this:
Not the prettiest code, but it gets the job done and looks better than the auxiliary function.
I've checked the generated assembly and it has zero cost.