use std::mem;
use futures::Future;
use {Error, Request, Service};
use dispatch::PrimitiveDispatch;
#[derive(Clone, Debug)]
pub struct Storage {
service: Service,
}
impl Storage {
pub fn new(service: Service) -> Self {
Self { service }
}
pub fn into_inner(self) -> Service {
self.service
}
pub fn read(&self, collection: &str, key: &str) -> impl Future<Item = Vec<u8>, Error = Error> {
let (dispatch, future) = PrimitiveDispatch::pair();
self.service.call(Request::new(0, &(collection, key)).unwrap(), dispatch)
.map(|sender| {
mem::drop(sender);
})
.and_then(|()| future)
}
pub fn write(&self, collection: &str, key: &str, data: &[u8], indexes: &[&str]) ->
impl Future<Item = (), Error = Error>
{
let data: &str = unsafe { mem::transmute(data) };
let (dispatch, future) = PrimitiveDispatch::pair();
self.service.call(Request::new(1, &(collection, key, data, indexes)).unwrap(), dispatch)
.map(|sender| {
mem::drop(sender);
})
.and_then(|()| future)
}
}