// ISC License (ISC)
//
// Copyright (c) 2016, Zeyla Hellyer <zey@zey.moe>
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
// RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
// CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

use serde::de::DeserializeOwned;
use serde_json;
#[cfg(feature = "reqwest")]
use ::std::io::Read;
use ::Result;

#[cfg(feature = "hyper")]
use hyper::Chunk;

#[cfg(feature = "reqwest")]
pub fn from_reader<R, T>(reader: R) -> Result<T>
    where R: Read, T: DeserializeOwned {
    serde_json::from_reader(reader).map_err(From::from)
}

#[cfg(feature = "hyper")]
pub fn from_chunk<T: DeserializeOwned>(chunk: Chunk) -> Result<T> {
    serde_json::from_slice(&chunk).map_err(From::from)
}
