use client::Client;
use crypto::shared_secretbox;
use futures::{Future, future};
use immutable_data;
use maidsafe_utilities::serialisation::{deserialise, serialise};
use nfs::NfsFuture;
use routing::XorName;
use self_encryption::DataMap;
use utils::FutureExt;
pub fn get<T: 'static>(
client: &Client<T>,
name: &XorName,
encryption_key: Option<shared_secretbox::Key>,
) -> Box<NfsFuture<DataMap>> {
immutable_data::get_value(client, name, encryption_key)
.map_err(From::from)
.and_then(move |content| deserialise(&content).map_err(From::from))
.into_box()
}
pub fn put<T: 'static>(
client: &Client<T>,
data_map: &DataMap,
encryption_key: Option<shared_secretbox::Key>,
) -> Box<NfsFuture<XorName>> {
let client = client.clone();
let client2 = client.clone();
future::result(serialise(&data_map))
.map_err(From::from)
.and_then(move |encoded| {
immutable_data::create(&client, &encoded, encryption_key)
})
.and_then(move |data| {
let name = *data.name();
client2.put_idata(data).map(move |_| name)
})
.map_err(From::from)
.into_box()
}