Вернуть объект JsonValue из веб-сайта actix HttpRequest - PullRequest
0 голосов
/ 15 сентября 2018

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

Учитывая actix-web 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 Ответ

0 голосов
/ 15 сентября 2018

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

...