From ad4eaada4107f6f496f722a906d670a4afa3a97c Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Mon, 21 Aug 2017 17:23:27 -0700 Subject: [PATCH] Use 'serde_json::from_async_reader' in json example --- Cargo.toml | 2 +- examples/json.rs | 42 ++++++------------------------------------ 2 files changed, 7 insertions(+), 37 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 588d3e4..98482f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ regex = "0.2" [dev-dependencies] serde = "1.0" serde_derive = "1.0" -serde_json = "1.0" +serde_json = { git = "https://github.com/mehcode/json", branch = "async_reader", features = ["tokio"] } error-chain = "0.11.0-rc.2" [profile.release] diff --git a/examples/json.rs b/examples/json.rs index 96f191d..82a3f22 100644 --- a/examples/json.rs +++ b/examples/json.rs @@ -2,38 +2,16 @@ extern crate salt; extern crate futures; -extern crate tokio_io; extern crate serde; #[macro_use] extern crate serde_json; -#[macro_use] -extern crate error_chain; - #[macro_use] extern crate serde_derive; -mod errors { - error_chain! { - foreign_links { - Io(::std::io::Error); - Json(::serde_json::Error); - } - } -} - -use tokio_io::io; use futures::future; use salt::prelude::*; -use errors::Error; - -// TODO: Contribute this as serde_json::from_async_reader -// fn json_from_async_reader<'a, T: serde::de::Deserialize<'a>, R: io::AsyncRead>(reader: R) -> T { -// io::read_to_end(reader, Vec::new()).from_err::().and_then(|(_, buffer)| { -// future::done(serde_json::from_slice(&buffer)).from_err() -// }) -// } #[derive(Debug, Deserialize)] struct RequestBody { @@ -41,22 +19,14 @@ struct RequestBody { name: String, } -fn index(ctx: Context) -> impl Future { - // TODO: Use serde_json::from_async_reader(..) when available - // serde_json::from_async_reader(ctx).map(|(_, body: RequestBody)| { - - io::read_to_end(ctx, Vec::new()).from_err().and_then(|(_, buffer)| { - future::done(serde_json::from_slice(&buffer)).from_err() - }).map(|body: RequestBody| { - // TODO: Add a Responder so we can do: - // Decide if we should have `Json` in a `salt_contrib` or not - // Response::with(Json(json!( ... ))) - // Response::with(Json( ... )) - - Response::with(serde_json::to_string(&json!({ +fn index<'a>(ctx: Context) -> impl Future + 'a { + serde_json::from_async_reader(ctx).and_then(|(_, body): (_, RequestBody)| { + future::done(serde_json::to_string(&json!({ "id": 20u8, "name": body.name, - }))).with_header(header::ContentType::json()) + }))) + }).map(|s| { + Response::with(s).with_header(header::ContentType::json()) }) }