diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2018-02-22 11:04:38 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2018-02-22 14:15:29 +0100 |
commit | 841317452e3d0ceaf080a339ea8cdddde8fe3028 (patch) | |
tree | 6a343af65572cea974744ed90f73537b9c0bded8 | |
parent | d70e9361619cdeccb728eec8f9470498f8ebb84a (diff) |
store: Deduplicate code.
-rw-r--r-- | store/src/lib.rs | 81 |
1 files changed, 26 insertions, 55 deletions
diff --git a/store/src/lib.rs b/store/src/lib.rs index f722292b..026757e5 100644 --- a/store/src/lib.rs +++ b/store/src/lib.rs @@ -116,6 +116,24 @@ impl fmt::Debug for Store { } impl Store { + /// Establishes a connection to the backend. + fn connect(c: &Context) -> Result<(Core, node::Client)> { + let descriptor = descriptor(c); + let core = Core::new()?; + let handle = core.handle(); + + let mut rpc_system + = match descriptor.connect(&handle) { + Ok(r) => r, + Err(e) => return Err(e.into()), + }; + + let client: node::Client = rpc_system.bootstrap(Side::Server); + handle.spawn(rpc_system.map_err(|_e| ())); + + Ok((core, client)) + } + /// Opens a store. /// /// Opens a store with the given name. If the store does not @@ -128,20 +146,9 @@ impl Store { /// Opening the store with a different network policy is /// forbidden. pub fn open(c: &Context, name: &str) -> Result<Self> { - let descriptor = descriptor(c); - let mut core = tokio_core::reactor::Core::new()?; - let handle = core.handle(); - - let mut rpc_system - = match descriptor.connect(&handle) { - Ok(r) => r, - Err(e) => return Err(e.into()), - }; + let (mut core, client) = Self::connect(c)?; - let store: node::Client = rpc_system.bootstrap(Side::Server); - handle.spawn(rpc_system.map_err(|_e| ())); - - let mut request = store.open_request(); + let mut request = client.open_request(); request.get().set_domain(c.domain()); request.get().set_network_policy(c.network_policy().into()); request.get().set_ephemeral(c.ephemeral()); @@ -157,20 +164,8 @@ impl Store { /// Lists all stores with the given prefix. pub fn list(c: &Context, domain_prefix: &str) -> Result<StoreIter> { - let descriptor = descriptor(c); - let mut core = Core::new()?; - let handle = core.handle(); - - let mut rpc_system - = match descriptor.connect(&handle) { - Ok(r) => r, - Err(e) => return Err(e.into()), - }; - - let node: node::Client = rpc_system.bootstrap(Side::Server); - handle.spawn(rpc_system.map_err(|_e| ())); - - let mut request = node.iter_request(); + let (mut core, client) = Self::connect(c)?; + let mut request = client.iter_request(); request.get().set_domain_prefix(domain_prefix); let iter = make_request!(&mut core, request)?; Ok(StoreIter{core: Rc::new(RefCell::new(core)), iter: iter}) @@ -178,40 +173,16 @@ impl Store { /// Lists all keys in the common key pool. pub fn list_keys(c: &Context) -> Result<KeyIter> { - let descriptor = descriptor(c); - let mut core = Core::new()?; - let handle = core.handle(); - - let mut rpc_system - = match descriptor.connect(&handle) { - Ok(r) => r, - Err(e) => return Err(e.into()), - }; - - let node: node::Client = rpc_system.bootstrap(Side::Server); - handle.spawn(rpc_system.map_err(|_e| ())); - - let request = node.iter_keys_request(); + let (mut core, client) = Self::connect(c)?; + let request = client.iter_keys_request(); let iter = make_request!(&mut core, request)?; Ok(KeyIter{core: Rc::new(RefCell::new(core)), iter: iter}) } /// Lists all log entries. pub fn server_log(c: &Context) -> Result<LogIter> { - let descriptor = descriptor(c); - let mut core = Core::new()?; - let handle = core.handle(); - - let mut rpc_system - = match descriptor.connect(&handle) { - Ok(r) => r, - Err(e) => return Err(e.into()), - }; - - let node: node::Client = rpc_system.bootstrap(Side::Server); - handle.spawn(rpc_system.map_err(|_e| ())); - - let request = node.log_request(); + let (mut core, client) = Self::connect(c)?; + let request = client.log_request(); let iter = make_request!(&mut core, request)?; Ok(LogIter{core: Rc::new(RefCell::new(core)), iter: iter}) } |