rust #rust-rocket
#Ржавчина #rust-rocket
Вопрос:
Это довольно специфический вопрос, связанный с ракетным ящиком. Я не уверен, является ли это проблемой с ящиком или я просто делаю что-то не так. Я не лучший со временем жизни и макросами.
Я пытаюсь настроить соединение SSE, и я хочу, чтобы макрос заимствовал значения, которые передаются в функцию.
Сначала я следовал их руководству по настройке SSES и написал следующий код…
#[get("/my/stream")]
pub fn my_stream(config: amp;State<config::Config>, _pool: amp;State<Pool<Sqlite>>) -> EventStream![] {
EventStream! {
let mut id = 0;
let mut interval = time::interval(Duration::from_secs(1));
loop {
yield Event::data("test data").event("test").id(id.to_string());
interval.tick().await;
id = 1;
}
}
}
Это компилируется и отлично работает, но когда я пытаюсь сделать что-то простое и заимствую либо config, либо _pool, тогда он жалуется на время жизни в макросе. Компилятор был довольно понятным и соответствовал тому, что у них было в документации. Поэтому я добавил время жизни к возвращаемому значению.
#[get("/my/stream")]
pub fn my_stream(config: amp; State<config::Config>, _pool: amp;State<Pool<Sqlite>>) -> EventStream![Event '_] {
EventStream! {
let _test = config.database.clone();
let mut id = 0;
let mut interval = time::interval(Duration::from_secs(1));
loop {
yield Event::data("test data").event("test").id(id.to_string());
interval.tick().await;
id = 1;
}
}
}
Однако, как только я это делаю, он жалуется, что событие не является признаком …? Я просмотрел их источник и не вижу события как признака. Что я делаю не так и почему? Последняя ошибка, которую я получаю…
pub fn my_stream(config: amp; State<config::Config>, _pool: amp;State<Pool<Sqlite>>) -> EventStream![Event '_] {
| ^^^^^ not a trait
|
help: ` ` is used to constrain a "trait object" type with lifetimes or auto-traits; structs and enums can't be bound in that way
--> src/api/mod.rs:24:104
This is the output of cargo tree --depth 1
├── clap v2.27.1
├── rocket v0.5.0-rc.1
│ [build-dependencies]
├── serde v1.0.130
├── serde_json v1.0.66
├── sqlx v0.5.9
└── tokio v1.9.0
Комментарии:
1.
Event '_
когдаEvent
не является признаком, недопустимый синтаксис, но поскольку он находится внутри макроса, от него зависит, допустимо ли использование или нет. Хотя это определенно выглядит правильно в документации .2. просто любопытно, работает ли это, если вы удалите
_pool
параметр?3. @kmdreko — Удаление пула не заставляет его работать.
4. можете ли вы предоставить свои
Cargo.toml
зависимости и / или выходныеcargo tree --depth 1
данные, чтобы мы могли видеть точные версии, которые вы используете?5. @kmdreko Конечно, я прикрепил вывод дерева грузов -глубина 1 :).