无法获取 Rocket 的 EventStream!使用借用的价值观

Taz*_*ngo 5 rust rust-rocket

这是一个与火箭箱相关的非常具体的问题。我不确定这是板条箱的问题还是我只是做了一些明显错误的事情。我在生命周期和宏方面不是最好的。

\n

我正在尝试设置 SSE 连接,并且希望宏借用传递到函数中的值。

\n

我最初按照他们的教程设置 SSE,并编写了以下代码......

\n
#[get("/my/stream")]\npub fn my_stream(config: &State<config::Config>, _pool: &State<Pool<Sqlite>>) -> EventStream![] {\n    EventStream! {\n        let mut id = 0;\n        let mut interval = time::interval(Duration::from_secs(1));\n        loop {\n            yield Event::data("test data").event("test").id(id.to_string());\n            interval.tick().await;\n            id += 1;\n        }\n    } \n}\n
Run Code Online (Sandbox Code Playgroud)\n

这编译并工作得很好,但是当我尝试做一些简单的事情并借用 config 或 _pool 时,它会抱怨宏中的生命周期。编译器非常清晰,并且与他们文档中的内容相匹配。所以我将生命周期添加到返回值中。

\n
#[get("/my/stream")]\npub fn my_stream(config: & State<config::Config>, _pool: &State<Pool<Sqlite>>) -> EventStream![Event + '_] {\n    EventStream! {\n        let _test = config.database.clone();\n        let mut id = 0;\n        let mut interval = time::interval(Duration::from_secs(1));\n        loop {\n            yield Event::data("test data").event("test").id(id.to_string());\n            interval.tick().await;\n            id += 1;\n        }\n    } \n}\n
Run Code Online (Sandbox Code Playgroud)\n

然而,一旦我这样做,它就会抱怨事件不是一个特征......?我浏览了他们的来源,我不认为事件是一种特征。我做错了什么以及为什么?我收到的最后一个错误是...

\n
 pub fn my_stream(config: & State<config::Config>, _pool: &State<Pool<Sqlite>>) -> EventStream![Event + '_] {\n   |                                                                                                ^^^^^ not a trait\n   |\nhelp: `+` is used to constrain a "trait object" type with lifetimes or auto-traits; structs and enums can't be bound in that way\n  --> src/api/mod.rs:24:104\n
Run Code Online (Sandbox Code Playgroud)\n
This is the output of cargo tree --depth 1\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 clap v2.27.1\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 rocket v0.5.0-rc.1\n\xe2\x94\x82   [build-dependencies]\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 serde v1.0.130\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 serde_json v1.0.66\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 sqlx v0.5.9\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tokio v1.9.0\n
Run Code Online (Sandbox Code Playgroud)\n