Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpHsJs 254 of 288 menu
◀ ▶

Ответ строкой формата в Rust

Не только тело запроса, но и ответ можно собрать из структуры. Обертка над типом говорит библиотеке записать поля в строку формата и выставить заголовок содержимого.

Нужны те же крейты, что и для разбора тела: пометка над структурой и модуль строки формата. Если зависимости уже есть в проекте, повторно их не добавляют.

Вернем профиль пользователя строкой формата из обработчика чтения:

use axum::{Json, Router, routing::get}; use serde::Serialize; #[derive(Serialize)] struct Profile { name: String, score: i32, } async fn profile() -> Json<Profile> { Json(Profile { name: String::from("ann"), score: 10, }) } #[tokio::main] async fn main() { let app = Router::new().route("/profile", get(profile)); let listener = match tokio::net::TcpListener::bind("127.0.0.1:3000").await { Ok(l) => l, Err(e) => { eprintln!("{}", e); return; } }; match axum::serve(listener, app).await { Ok(()) => {} Err(e) => eprintln!("{}", e), } }

Ответ содержит {"name":"ann","score":10}. Клиент получает готовый объект без ручной сборки текста.

Список значений тоже можно обернуть и отдать одним массивом:

use axum::{Json, Router, routing::get}; use serde::Serialize; #[derive(Serialize)] struct Tag { label: String, } async fn tags() -> Json<Vec<Tag>> { Json(vec![ Tag { label: String::from("a"), }, Tag { label: String::from("b"), }, ]) } #[tokio::main] async fn main() { let app = Router::new().route("/tags", get(tags)); let listener = match tokio::net::TcpListener::bind("127.0.0.1:3000").await { Ok(l) => l, Err(e) => { eprintln!("{}", e); return; } }; match axum::serve(listener, app).await { Ok(()) => {} Err(e) => eprintln!("{}", e), } }

Дан путь:

/status

Верните объект с полем ok типа логического значения true.

Дана структура:

struct Point { x: i32, y: i32, }

Подключите сборку, отдайте точку 1 и 2 и назовите ключи в строке ответа.

Скажите, чем ответ с оберткой над структурой отличается от возврата готовой строки текста.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить