Ржавчина: Не удалось отобразить «маршрут»: контекст не является объектом JSON. Передаваемое значение должно быть объектом «ключ-значение»: контекст, структура, например, хэш-карта

#rust #rust-diesel #rust-rocket #tera

Вопрос:

Поэтому я пытаюсь создать веб-приложение, используя rust, rocket и дизельное топливо. Однако код отлично компилируется с предупреждением о некоторых неиспользуемых производных. Но при отрисовке шаблона я получаю следующую ошибку

 GET /api/users:
    => Matched: GET /api/users (user_list_rt)
    => Error: Error rendering Tera template 'user/index'.
    => Error: Failed to render 'user/index': context isn't a JSON object. The value passed needs to be a key-value object: context, struct, hashmap for example.
    => Error: Template 'user/index' failed to render.
    => Outcome: Failure
    => Warning: Responding with 500 Internal Server Error catcher.
    => Response succeeded.
 

Мой код выдает простой запрос на загрузку в diesel

 #[get("/users")]
pub fn user_list_rt(connection: Conn) -> Template {
    use crate::schema::user::dsl::*;
    let user_coll = user.filter(name.is_not_null())
                    .load::<User>(amp;*connection)
                    .expect("Error loading users");
    
    Template::render("user/index", amp;user_coll)
}
 

Структура пользователя

 #[derive(Serialize, Queryable, Deserialize, Debug, Clone)]
pub struct User {
    pub id: i64,
    pub uuid: String,
    pub name: String,
    pub username: String,
    pub email: String,
    pub password: String,
    pub salt: String, 
    pub phone: i64,
    pub wallet: i64,
    pub game_id: String,
    pub verification: i8,
}
 

Я понимаю, что мой user_coll-это вектор пользовательских структур. Но я не могу понять, почему не хватает сериализации производной, чтобы сделать это автоматически, что я упускаю?