rcfe 0.1.2

An asynchronous etcd v3 client library for Rust built on gRPC.
Documentation
use rcfe_core::{
    ByteSequence,
    error::Error,
    etcdserverpb::RangeResponse,
    etcdserverpb::kv_client::KvClient,
    kv::KVClient,
    options::{get::GetOptions, kv::KVOptions},
};
use tonic::{Response, transport::Channel};
use rcfe_core::etcdserverpb::{DeleteRangeResponse, PutResponse};
use rcfe_core::options::delete::DeleteOptions;
use rcfe_core::options::put::PutOptions;

#[derive(Clone)]
pub struct DefaultKVClient {
    options: KVOptions,
    inner: KvClient<Channel>,
}

impl DefaultKVClient {
    pub fn new(opts: KVOptions) -> Self {
        DefaultKVClient {
            options: opts.clone(),
            inner: KvClient::new(opts.channel()),
        }
    }
}

#[tonic::async_trait]
impl KVClient for DefaultKVClient {
    async fn delete_with_options(&mut self, key: ByteSequence, options: DeleteOptions) -> Result<Response<DeleteRangeResponse>, Error> {
        let request = options.to_request(&key);
        Ok(self.inner.delete_range(request).await?)
    }

    async fn put_with_options(&mut self, key: ByteSequence, value: ByteSequence, options: PutOptions) -> Result<Response<PutResponse>, Error> {
        let request = options.to_request(&key, &value);
        Ok(self.inner.put(request).await?)
    }

    async fn get_with_options(
        &mut self,
        key: ByteSequence,
        options: GetOptions,
    ) -> Result<Response<RangeResponse>, Error> {
        let request = options.to_request(&key);
        Ok(self.inner.range(request).await?)
    }

    fn get_options(&self) -> &KVOptions {
        &self.options
    }
}