use crate::client::Client;
use crate::crypto::shared_secretbox;
use crate::immutable_data;
use crate::nfs::NfsFuture;
use crate::utils::FutureExt;
use futures::{future, Future};
use maidsafe_utilities::serialisation::{deserialise, serialise};
use safe_nd::{IDataAddress, XorName};
use self_encryption::DataMap;
pub fn get(
client: &impl Client,
address: IDataAddress,
encryption_key: Option<shared_secretbox::Key>,
) -> Box<NfsFuture<DataMap>> {
immutable_data::get_value(client, address, encryption_key)
.map_err(From::from)
.and_then(move |content| deserialise(&content).map_err(From::from))
.into_box()
}
pub fn put(
client: &impl Client,
data_map: &DataMap,
published: bool,
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, published, encryption_key)
})
.and_then(move |data| {
let name = *data.name();
client2.put_idata(data).map(move |_| name)
})
.map_err(From::from)
.into_box()
}