diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2016-02-14 17:50:06 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2016-03-11 15:15:02 +0100 |
commit | 19322b667adaefb600ff71d46aa794ca7059190e (patch) | |
tree | 19ea0099346fc461c57c5f89c7e6d1a6cb6ceaa9 /libimaglink | |
parent | a53d36c23df9987e3456cb7c4b814adedeb0a87e (diff) |
Add helper for processing store result
Diffstat (limited to 'libimaglink')
-rw-r--r-- | libimaglink/src/internal.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/libimaglink/src/internal.rs b/libimaglink/src/internal.rs index b87e0783..da37d256 100644 --- a/libimaglink/src/internal.rs +++ b/libimaglink/src/internal.rs @@ -1,4 +1,5 @@ use libimagstore::store::EntryHeader; +use libimagstore::store::Result as StoreResult; use error::{LinkError, LinkErrorKind}; use link::{Link, Links}; @@ -21,3 +22,27 @@ pub fn add_link(header: &mut EntryHeader, link: Link) -> Result<()> { unimplemented!() } +fn process_rw_result(links: StoreResult<Option<Value>>) -> Result<Links> { + if links.is_err() { + let lerr = LinkError::new(LinkErrorKind::EntryHeaderReadError, + Some(Box::new(links.err().unwrap()))); + return Err(lerr); + } + let links = links.unwrap(); + + if links.iter().any(|l| match l { &Value::String(_) => true, _ => false }) { + return Err(LinkError::new(LinkErrorKind::ExistingLinkTypeWrong, None)); + } + + let links : Vec<Link> = links.into_iter() + .map(|link| { + match link { + Value::String(s) => Link::new(s), + _ => unreachable!(), + } + }) + .collect(); + + Ok(Links::new(links)) +} + |