From b24c7c209e5e091f9d8ca4d596b5a3a29e669e4f Mon Sep 17 00:00:00 2001 From: David LeGare Date: Mon, 9 Jan 2017 10:37:34 -0600 Subject: Add From impls for Plist Add the most common/reasonable conversions from primitive and std types to Plist variants. There's a bit of uncertainty with `Vec` and `&[u8]` where it's not obvious whether they should convert to `Plist::Array` or `Plist::Data`. I've opted for `Plist::Data`, but converting to `Plist::Array` would also be reasonable. --- src/lib.rs | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index d036d52..8e0f601 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -267,6 +267,132 @@ impl Plist { } } +impl From> for Plist { + fn from(from: Vec) -> Plist { Plist::Array(from) } +} + +impl<'a> From<&'a Vec> for Plist { + fn from(from: &'a Vec) -> Plist { Plist::Array(from.clone()) } +} + +impl<'a, T> From<&'a [T]> for Plist where &'a T: Into { + fn from(from: &'a [T]) -> Plist { + Plist::Array(from.iter().map(Into::into).collect()) + } +} + +impl From> for Plist { + fn from(from: BTreeMap) -> Plist { Plist::Dictionary(from) } +} + +impl<'a> From<&'a BTreeMap> for Plist { + fn from(from: &'a BTreeMap) -> Plist { Plist::Dictionary(from.clone()) } +} + +impl From for Plist { + fn from(from: bool) -> Plist { Plist::Boolean(from) } +} + +impl<'a> From<&'a bool> for Plist { + fn from(from: &'a bool) -> Plist { Plist::Boolean(*from) } +} + +impl From> for Plist { + fn from(from: Vec) -> Plist { Plist::Data(from) } +} + +impl<'a> From<&'a Vec> for Plist { + fn from(from: &'a Vec) -> Plist { Plist::Data(from.clone()) } +} + +impl From> for Plist { + fn from(from: DateTime) -> Plist { Plist::Date(from) } +} + +impl<'a> From<&'a DateTime> for Plist { + fn from(from: &'a DateTime) -> Plist { Plist::Date(from.clone()) } +} + +impl From for Plist { + fn from(from: f64) -> Plist { Plist::Real(from) } +} + +impl From for Plist { + fn from(from: f32) -> Plist { Plist::Real(from as f64) } +} + +impl From for Plist { + fn from(from: i64) -> Plist { Plist::Integer(from) } +} + +impl From for Plist { + fn from(from: i32) -> Plist { Plist::Integer(from as i64) } +} + +impl From for Plist { + fn from(from: i16) -> Plist { Plist::Integer(from as i64) } +} + +impl From for Plist { + fn from(from: i8) -> Plist { Plist::Integer(from as i64) } +} + +impl From for Plist { + fn from(from: u32) -> Plist { Plist::Integer(from as i64) } +} + +impl From for Plist { + fn from(from: u16) -> Plist { Plist::Integer(from as i64) } +} + +impl From for Plist { + fn from(from: u8) -> Plist { Plist::Integer(from as i64) } +} + +impl<'a> From<&'a f64> for Plist { + fn from(from: &'a f64) -> Plist { Plist::Real(*from) } +} + +impl<'a> From<&'a f32> for Plist { + fn from(from: &'a f32) -> Plist { Plist::Real(*from as f64) } +} + +impl<'a> From<&'a i64> for Plist { + fn from(from: &'a i64) -> Plist { Plist::Integer(*from) } +} + +impl<'a> From<&'a i32> for Plist { + fn from(from: &'a i32) -> Plist { Plist::Integer(*from as i64) } +} + +impl<'a> From<&'a i16> for Plist { + fn from(from: &'a i16) -> Plist { Plist::Integer(*from as i64) } +} + +impl<'a> From<&'a i8> for Plist { + fn from(from: &'a i8) -> Plist { Plist::Integer(*from as i64) } +} + +impl<'a> From<&'a u32> for Plist { + fn from(from: &'a u32) -> Plist { Plist::Integer(*from as i64) } +} + +impl<'a> From<&'a u16> for Plist { + fn from(from: &'a u16) -> Plist { Plist::Integer(*from as i64) } +} + +impl<'a> From<&'a u8> for Plist { + fn from(from: &'a u8) -> Plist { Plist::Integer(*from as i64) } +} + +impl From for Plist { + fn from(from: String) -> Plist { Plist::String(from) } +} + +impl<'a> From<&'a str> for Plist { + fn from(from: &'a str) -> Plist { Plist::String(from.into()) } +} + /// An encoding of a plist as a flat structure. /// /// Output by the event readers. -- cgit v1.2.3