Возврат объекта JsonValue из веб-сайта actix HttpRequest

Я читаю примеры actix-web, но, поскольку я совсем новичок в Rust, у меня возникают некоторые проблемы с пониманием того, как адаптировать код к моим потребностям.

Учитывая actix-сеть HttpRequestХочу разобрать полезную нагрузку и вернуть JsonValue, Я не могу понять, как изменить эту функцию, чтобы вернуть JsonValue а не HttpResponse,

fn index_mjsonrust(req: &HttpRequest, ) -> Box<Future<Item = HttpResponse, Error = Error>> {
    req.payload()
        .concat2()
        .from_err()
        .and_then(|body| {
            // body is loaded, now we can deserialize json-rust
            let result = json::parse(std::str::from_utf8(&body).unwrap()); // return Result
            let injson: JsonValue = match result {
                Ok(v) => v,
                Err(e) => object!{"err" => e.to_string() },
            };
            Ok(HttpResponse::Ok()
                .content_type("application/json")
                .body(injson.dump()))
        })
        .responder()
}

Будет ли лучше просто вернуть JsonValue а не Future?

1 ответ

Решение

Вы должны конвертировать JsonValue в строку или байты, то вы можете установить его как HttpResponse тело. Вы не можете напрямую вернуть JsonValue вместо поля, потому что процесс чтения тела запроса является асинхронным.

Другие вопросы по тегам