diff options
-rw-r--r-- | license-generator/aquatic-prime/src/lib.rs | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/license-generator/aquatic-prime/src/lib.rs b/license-generator/aquatic-prime/src/lib.rs index 8c734fd..319d2dc 100644 --- a/license-generator/aquatic-prime/src/lib.rs +++ b/license-generator/aquatic-prime/src/lib.rs @@ -10,12 +10,24 @@ extern crate serde; extern crate serde_derive; mod errors { + use plist; + error_chain! { + foreign_links { + FromUtf8(::std::string::FromUtf8Error); + + Plist(plist::Error); + } + errors { PublicKeyIncorrectNumBits(bits: i32) { description("public key has incorrect bit size") display("public key has incorrect bit size: '{}'", bits) } + + InvalidLicenseData { + display("license data must be a dictionary") + } } } } @@ -91,18 +103,26 @@ impl<'a> AquaticPrime<'a> { // Get input as `Plist` let mut xml_for_plist = Vec::with_capacity(600); - plist::serde::serialize_to_xml(&mut xml_for_plist, &input_data).unwrap(); + plist::serde::serialize_to_xml(&mut xml_for_plist, &input_data)?; let xml_for_hash_map = xml_for_plist.clone(); - let plist_data = Plist::read(Cursor::new(&xml_for_plist)).unwrap(); + let plist_data = Plist::read(Cursor::new(&xml_for_plist))?; - let mut plist_dict = plist_data.as_dictionary().unwrap().to_owned(); + let mut plist_dict = plist_data + .as_dictionary() + .ok_or(ErrorKind::InvalidLicenseData)? + .to_owned(); // Get input as HashMap to send to `sign()` - let data: HashMap<String, String> = plist::serde::deserialize(Cursor::new(&xml_for_hash_map)).unwrap(); - - let signature = self.sign(data).unwrap(); - plist_dict.insert("Signature".to_owned(), Plist::Data(signature.into_bytes())); + let data: HashMap<String, String> = plist::serde::deserialize( + Cursor::new(&xml_for_hash_map) + )?; + + let signature = self.sign(data)?; + plist_dict.insert( + "Signature".to_owned(), + Plist::Data(signature.into_bytes()) + ); // Generate plist XML string let mut plist_xml = Cursor::new(Vec::with_capacity(600)); @@ -111,11 +131,11 @@ impl<'a> AquaticPrime<'a> { let mut writer = plist::xml::EventWriter::new(&mut plist_xml); for item in Plist::Dictionary(plist_dict).into_events() { - writer.write(&item).unwrap(); + writer.write(&item)?; } } - Ok(String::from_utf8(plist_xml.into_inner()).unwrap()) + Ok(String::from_utf8(plist_xml.into_inner())?) } } |