Rocket.rs как преобразовать JSON в объект?

Изучаю данный пример: https://github.com/letsgetrusty/rsty-stack-example Это TODO List.

https://github.com/letsgetrusty/rsty-stack-example/blob/main/todo_api/src/main.rs#L20 - конкретное место.

  1. Хочу изменить функцию async add_task, чтоб данные она брала из тела запроса, который должен прийти в формате JSON.

  2. Хочу изменить передачу полученного аргумента task в другую функцию db.add_task(title), чтоб подавать туда уже сам объект структуры, а не Json<T>.

  3. Функция db.add_task(task) будет брать данные и сохранять в БД. Об этом я знаю.

Как сделать преобразование из JSON в объект? Прошу подробных деталей, с rocket опыта нет. Или может быть я не с того конца начал и можно сделать иначе?

Сейчас я сделал 1 пункт и застрял на 2 пункте:

use rocket::serde::{Deserialize, json::Json};

#[derive(Deserialize)]
#[serde(crate = "rocket::serde")]
struct Task<'r> {
    title: &'r str,
    description: &'r str,
    complete: bool,
    warning_at: &'r str,
}

#[post("/task/new", data = "<task>")]
async fn add_task(task: Json<Task<'_>>, db: &State<DB>) {
    let task = db
        .add_task(task) // Как передать task, в качестве объекта структуры Task
        .await
        .map_err(|_| std::io::Error::new(ErrorKind::Other, "Unable to create task."))?;

    Ok(Json(task))
}

Ответы (0 шт):