diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 32 |
1 files changed, 20 insertions, 12 deletions
@@ -1,3 +1,5 @@ +mod errors; + extern crate lopdf; use std::path::Path; @@ -5,37 +7,43 @@ use std::str; use lopdf::{Document, Object}; -pub fn get_urls_from_pdf<P: AsRef<Path>>(path: P) { - let doc = Document::load(path).unwrap(); +use errors::Result; + +pub fn get_urls_from_pdf<P: AsRef<Path>>(path: P) -> Result<()> { + let doc = Document::load(path)?; for (_, obj) in doc.objects { - match obj { + return match obj { Object::Dictionary(d) => { for (k, v) in d.iter() { - let key = str::from_utf8(&k).unwrap(); + let key = str::from_utf8(&k)?; if key == "A" { - for (k, v) in v.as_dict().unwrap() { - let key = str::from_utf8(&k).unwrap(); + let url_objects = v.as_dict()?; + + for (k, v) in url_objects { + let key = str::from_utf8(&k)?; if key == "URI" { - match v { + return match v { Object::String(s, _) => { - println!("{}", str::from_utf8(s).unwrap()); + println!("{}", str::from_utf8(s)?); - () + Ok(()) }, - _ => (), + _ => Ok(()), } } } } } - () + Ok(()) }, - _ => (), + _ => Ok(()), } } + + Ok(()) } |