diff options
author | Alex Crichton <alex@alexcrichton.com> | 2018-12-17 17:45:35 -0800 |
---|---|---|
committer | Alex Crichton <alex@alexcrichton.com> | 2018-12-17 17:45:35 -0800 |
commit | c1a369f44762045e65989caa9491e153d1f358e6 (patch) | |
tree | 5fef35e1bd647687cdecda830134d5079d64ea4d /src/value.rs | |
parent | 1ef180d06ed4ec207c41b2595feaca84959e709e (diff) | |
download | milf-rs-c1a369f44762045e65989caa9491e153d1f358e6.tar.gz milf-rs-c1a369f44762045e65989caa9491e153d1f358e6.zip |
Run `cargo fmt`
Diffstat (limited to 'src/value.rs')
-rw-r--r-- | src/value.rs | 301 |
1 files changed, 189 insertions, 112 deletions
diff --git a/src/value.rs b/src/value.rs index 2e42dc3..ee952b6 100644 --- a/src/value.rs +++ b/src/value.rs @@ -1,18 +1,18 @@ //! Definition of a TOML value use std::collections::{BTreeMap, HashMap}; -use std::hash::Hash; use std::fmt; +use std::hash::Hash; use std::ops; use std::str::FromStr; use std::vec; -use serde::ser; use serde::de; use serde::de::IntoDeserializer; +use serde::ser; -pub use datetime::{Datetime, DatetimeParseError}; use datetime::{self, DatetimeFromString}; +pub use datetime::{Datetime, DatetimeParseError}; /// Representation of a TOML value. #[derive(PartialEq, Clone, Debug)] @@ -46,7 +46,8 @@ impl Value { /// This conversion can fail if `T`'s implementation of `Serialize` decides to /// fail, or if `T` contains a map with non-string keys. pub fn try_from<T>(value: T) -> Result<Value, ::ser::Error> - where T: ser::Serialize, + where + T: ser::Serialize, { value.serialize(Serializer) } @@ -61,7 +62,8 @@ impl Value { /// missing from the TOML map or some number is too big to fit in the expected /// primitive type. pub fn try_into<'de, T>(self) -> Result<T, ::de::Error> - where T: de::Deserialize<'de>, + where + T: de::Deserialize<'de>, { de::Deserialize::deserialize(self) } @@ -92,7 +94,10 @@ impl Value { /// Extracts the integer value if it is an integer. pub fn as_integer(&self) -> Option<i64> { - match *self { Value::Integer(i) => Some(i), _ => None } + match *self { + Value::Integer(i) => Some(i), + _ => None, + } } /// Tests whether this value is an integer. @@ -102,7 +107,10 @@ impl Value { /// Extracts the float value if it is a float. pub fn as_float(&self) -> Option<f64> { - match *self { Value::Float(f) => Some(f), _ => None } + match *self { + Value::Float(f) => Some(f), + _ => None, + } } /// Tests whether this value is a float. @@ -112,7 +120,10 @@ impl Value { /// Extracts the boolean value if it is a boolean. pub fn as_bool(&self) -> Option<bool> { - match *self { Value::Boolean(b) => Some(b), _ => None } + match *self { + Value::Boolean(b) => Some(b), + _ => None, + } } /// Tests whether this value is a boolean. @@ -122,7 +133,10 @@ impl Value { /// Extracts the string of this value if it is a string. pub fn as_str(&self) -> Option<&str> { - match *self { Value::String(ref s) => Some(&**s), _ => None } + match *self { + Value::String(ref s) => Some(&**s), + _ => None, + } } /// Tests if this value is a string. @@ -139,7 +153,10 @@ impl Value { /// 1979-05-27T07:32:00Z /// ``` pub fn as_datetime(&self) -> Option<&Datetime> { - match *self { Value::Datetime(ref s) => Some(s), _ => None } + match *self { + Value::Datetime(ref s) => Some(s), + _ => None, + } } /// Tests whether this value is a datetime. @@ -149,12 +166,18 @@ impl Value { /// Extracts the array value if it is an array. pub fn as_array(&self) -> Option<&Vec<Value>> { - match *self { Value::Array(ref s) => Some(s), _ => None } + match *self { + Value::Array(ref s) => Some(s), + _ => None, + } } /// Extracts the array value if it is an array. pub fn as_array_mut(&mut self) -> Option<&mut Vec<Value>> { - match *self { Value::Array(ref mut s) => Some(s), _ => None } + match *self { + Value::Array(ref mut s) => Some(s), + _ => None, + } } /// Tests whether this value is an array. @@ -164,12 +187,18 @@ impl Value { /// Extracts the table value if it is a table. pub fn as_table(&self) -> Option<&Table> { - match *self { Value::Table(ref s) => Some(s), _ => None } + match *self { + Value::Table(ref s) => Some(s), + _ => None, + } } /// Extracts the table value if it is a table. pub fn as_table_mut(&mut self) -> Option<&mut Table> { - match *self { Value::Table(ref mut s) => Some(s), _ => None } + match *self { + Value::Table(ref mut s) => Some(s), + _ => None, + } } /// Tests whether this value is a table. @@ -180,13 +209,13 @@ impl Value { /// Tests whether this and another value have the same type. pub fn same_type(&self, other: &Value) -> bool { match (self, other) { - (&Value::String(..), &Value::String(..)) | - (&Value::Integer(..), &Value::Integer(..)) | - (&Value::Float(..), &Value::Float(..)) | - (&Value::Boolean(..), &Value::Boolean(..)) | - (&Value::Datetime(..), &Value::Datetime(..)) | - (&Value::Array(..), &Value::Array(..)) | - (&Value::Table(..), &Value::Table(..)) => true, + (&Value::String(..), &Value::String(..)) + | (&Value::Integer(..), &Value::Integer(..)) + | (&Value::Float(..), &Value::Float(..)) + | (&Value::Boolean(..), &Value::Boolean(..)) + | (&Value::Datetime(..), &Value::Datetime(..)) + | (&Value::Array(..), &Value::Array(..)) + | (&Value::Table(..), &Value::Table(..)) => true, _ => false, } @@ -206,7 +235,10 @@ impl Value { } } -impl<I> ops::Index<I> for Value where I: Index { +impl<I> ops::Index<I> for Value +where + I: Index, +{ type Output = Value; fn index(&self, index: I) -> &Value { @@ -214,7 +246,10 @@ impl<I> ops::Index<I> for Value where I: Index { } } -impl<I> ops::IndexMut<I> for Value where I: Index { +impl<I> ops::IndexMut<I> for Value +where + I: Index, +{ fn index_mut(&mut self, index: I) -> &mut Value { self.get_mut(index).expect("index not found") } @@ -235,9 +270,7 @@ impl<V: Into<Value>> From<Vec<V>> for Value { impl<S: Into<String>, V: Into<Value>> From<BTreeMap<S, V>> for Value { fn from(val: BTreeMap<S, V>) -> Value { - let table = val.into_iter() - .map(|(s, v)| (s.into(), v.into())) - .collect(); + let table = val.into_iter().map(|(s, v)| (s.into(), v.into())).collect(); Value::Table(table) } @@ -245,9 +278,7 @@ impl<S: Into<String>, V: Into<Value>> From<BTreeMap<S, V>> for Value { impl<S: Into<String> + Hash + Eq, V: Into<Value>> From<HashMap<S, V>> for Value { fn from(val: HashMap<S, V>) -> Value { - let table = val.into_iter() - .map(|(s, v)| (s.into(), v.into())) - .collect(); + let table = val.into_iter().map(|(s, v)| (s.into(), v.into())).collect(); Value::Table(table) } @@ -261,7 +292,7 @@ macro_rules! impl_into_value { Value::$variant(val.into()) } } - } + }; } impl_into_value!(String: String); @@ -340,7 +371,10 @@ impl Index for String { } } -impl<'s, T: ?Sized> Index for &'s T where T: Index { +impl<'s, T: ?Sized> Index for &'s T +where + T: Index, +{ fn index<'a>(&self, val: &'a Value) -> Option<&'a Value> { (**self).index(val) } @@ -352,7 +386,9 @@ impl<'s, T: ?Sized> Index for &'s T where T: Index { impl fmt::Display for Value { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - ::ser::to_string(self).expect("Unable to represent value as string").fmt(f) + ::ser::to_string(self) + .expect("Unable to represent value as string") + .fmt(f) } } @@ -365,7 +401,8 @@ impl FromStr for Value { impl ser::Serialize for Value { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> - where S: ser::Serializer + where + S: ser::Serializer, { use serde::ser::SerializeMap; @@ -381,13 +418,20 @@ impl ser::Serialize for Value { // Be sure to visit non-tables first (and also non // array-of-tables) as all keys must be emitted first. for (k, v) in t { - if !v.is_table() && !v.is_array() || - (v.as_array().map(|a| !a.iter().any(|v| v.is_table())).unwrap_or(false)) { + if !v.is_table() && !v.is_array() + || (v + .as_array() + .map(|a| !a.iter().any(|v| v.is_table())) + .unwrap_or(false)) + { map.serialize_entry(k, v)?; } } for (k, v) in t { - if v.as_array().map(|a| a.iter().any(|v| v.is_table())).unwrap_or(false) { + if v.as_array() + .map(|a| a.iter().any(|v| v.is_table())) + .unwrap_or(false) + { map.serialize_entry(k, v)?; } } @@ -404,7 +448,8 @@ impl ser::Serialize for Value { impl<'de> de::Deserialize<'de> for Value { fn deserialize<D>(deserializer: D) -> Result<Value, D::Error> - where D: de::Deserializer<'de>, + where + D: de::Deserializer<'de>, { struct ValueVisitor; @@ -452,13 +497,15 @@ impl<'de> de::Deserialize<'de> for Value { } fn visit_some<D>(self, deserializer: D) -> Result<Value, D::Error> - where D: de::Deserializer<'de>, + where + D: de::Deserializer<'de>, { de::Deserialize::deserialize(deserializer) } fn visit_seq<V>(self, mut visitor: V) -> Result<Value, V::Error> - where V: de::SeqAccess<'de>, + where + V: de::SeqAccess<'de>, { let mut vec = Vec::new(); while let Some(elem) = visitor.next_element()? { @@ -468,16 +515,15 @@ impl<'de> de::Deserialize<'de> for Value { } fn visit_map<V>(self, mut visitor: V) -> Result<Value, V::Error> - where V: de::MapAccess<'de>, + where + V: de::MapAccess<'de>, { let mut key = String::new(); - let datetime = visitor.next_key_seed(DatetimeOrTable { - key: &mut key, - })?; + let datetime = visitor.next_key_seed(DatetimeOrTable { key: &mut key })?; match datetime { Some(true) => { let date: DatetimeFromString = visitor.next_value()?; - return Ok(Value::Datetime(date.value)) + return Ok(Value::Datetime(date.value)); } None => return Ok(Value::Table(BTreeMap::new())), Some(false) => {} @@ -487,7 +533,7 @@ impl<'de> de::Deserialize<'de> for Value { while let Some(key) = visitor.next_key()? { if map.contains_key(&key) { let msg = format!("duplicate key: `{}`", key); - return Err(de::Error::custom(msg)) + return Err(de::Error::custom(msg)); } map.insert(key, visitor.next_value()?); } @@ -503,7 +549,8 @@ impl<'de> de::Deserializer<'de> for Value { type Error = ::de::Error; fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, ::de::Error> - where V: de::Visitor<'de>, + where + V: de::Visitor<'de>, { match self { Value::Boolean(v) => visitor.visit_bool(v), @@ -548,14 +595,18 @@ impl<'de> de::Deserializer<'de> for Value { { match self { Value::String(variant) => visitor.visit_enum(variant.into_deserializer()), - _ => Err(de::Error::invalid_type(de::Unexpected::UnitVariant, &"string only")), + _ => Err(de::Error::invalid_type( + de::Unexpected::UnitVariant, + &"string only", + )), } } // `None` is interpreted as a missing field so be sure to implement `Some` // as a present field. fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, ::de::Error> - where V: de::Visitor<'de>, + where + V: de::Visitor<'de>, { visitor.visit_some(self) } @@ -563,9 +614,10 @@ impl<'de> de::Deserializer<'de> for Value { fn deserialize_newtype_struct<V>( self, _name: &'static str, - visitor: V + visitor: V, ) -> Result<V::Value, ::de::Error> - where V: de::Visitor<'de> + where + V: de::Visitor<'de>, { visitor.visit_newtype_struct(self) } @@ -592,9 +644,9 @@ impl SeqDeserializer { impl<'de> de::SeqAccess<'de> for SeqDeserializer { type Error = ::de::Error; - fn next_element_seed<T>(&mut self, seed: T) - -> Result<Option<T::Value>, ::de::Error> - where T: de::DeserializeSeed<'de>, + fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, ::de::Error> + where + T: de::DeserializeSeed<'de>, { match self.iter.next() { Some(value) => seed.deserialize(value).map(Some), @@ -628,7 +680,8 @@ impl<'de> de::MapAccess<'de> for MapDeserializer { type Error = ::de::Error; fn next_key_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, ::de::Error> - where T: de::DeserializeSeed<'de>, + where + T: de::DeserializeSeed<'de>, { match self.iter.next() { Some((key, value)) => { @@ -640,7 +693,8 @@ impl<'de> de::MapAccess<'de> for MapDeserializer { } fn next_value_seed<T>(&mut self, seed: T) -> Result<T::Value, ::de::Error> - where T: de::DeserializeSeed<'de>, + where + T: de::DeserializeSeed<'de>, { let (key, res) = match self.value.take() { Some((key, value)) => (key, seed.deserialize(value)), @@ -749,35 +803,39 @@ impl ser::Serializer for Serializer { Err(::ser::Error::UnsupportedType) } - fn serialize_unit_struct(self, _name: &'static str) - -> Result<Value, ::ser::Error> { + fn serialize_unit_struct(self, _name: &'static str) -> Result<Value, ::ser::Error> { Err(::ser::Error::UnsupportedType) } - fn serialize_unit_variant(self, - _name: &'static str, - _variant_index: u32, - _variant: &'static str) - -> Result<Value, ::ser::Error> { + fn serialize_unit_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + ) -> Result<Value, ::ser::Error> { self.serialize_str(_variant) } - fn serialize_newtype_struct<T: ?Sized>(self, - _name: &'static str, - value: &T) - -> Result<Value, ::ser::Error> - where T: ser::Serialize, + fn serialize_newtype_struct<T: ?Sized>( + self, + _name: &'static str, + value: &T, + ) -> Result<Value, ::ser::Error> + where + T: ser::Serialize, { value.serialize(self) } - fn serialize_newtype_variant<T: ?Sized>(self, - _name: &'static str, - _variant_index: u32, - _variant: &'static str, - _value: &T) - -> Result<Value, ::ser::Error> - where T: ser::Serialize, + fn serialize_newtype_variant<T: ?Sized>( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _value: &T, + ) -> Result<Value, ::ser::Error> + where + T: ser::Serialize, { Err(::ser::Error::UnsupportedType) } @@ -787,16 +845,15 @@ impl ser::Serializer for Serializer { } fn serialize_some<T: ?Sized>(self, value: &T) -> Result<Value, ::ser::Error> - where T: ser::Serialize, + where + T: ser::Serialize, { value.serialize(self) } - fn serialize_seq(self, len: Option<usize>) - -> Result<Self::SerializeSeq, ::ser::Error> - { + fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, ::ser::Error> { Ok(SerializeVec { - vec: Vec::with_capacity(len.unwrap_or(0)) + vec: Vec::with_capacity(len.unwrap_or(0)), }) } @@ -804,42 +861,46 @@ impl ser::Serializer for Serializer { self.serialize_seq(Some(len)) } - fn serialize_tuple_struct(self, _name: &'static str, len: usize) - -> Result<Self::SerializeTupleStruct, ::ser::Error> { + fn serialize_tuple_struct( + self, + _name: &'static str, + len: usize, + ) -> Result<Self::SerializeTupleStruct, ::ser::Error> { self.serialize_seq(Some(len)) } - fn serialize_tuple_variant(self, - _name: &'static str, - _variant_index: u32, - _variant: &'static str, - len: usize) - -> Result<Self::SerializeTupleVariant, ::ser::Error> - { + fn serialize_tuple_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + len: usize, + ) -> Result<Self::SerializeTupleVariant, ::ser::Error> { self.serialize_seq(Some(len)) } - fn serialize_map(self, _len: Option<usize>) - -> Result<Self::SerializeMap, ::ser::Error> - { + fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, ::ser::Error> { Ok(SerializeMap { map: BTreeMap::new(), next_key: None, }) } - fn serialize_struct(self, _name: &'static str, len: usize) - -> Result<Self::SerializeStruct, ::ser::Error> { + fn serialize_struct( + self, + _name: &'static str, + len: usize, + ) -> Result<Self::SerializeStruct, ::ser::Error> { self.serialize_map(Some(len)) } - fn serialize_struct_variant(self, - _name: &'static str, - _variant_index: u32, - _variant: &'static str, - _len: usize) - -> Result<Self::SerializeStructVariant, ::ser::Error> - { + fn serialize_struct_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _len: usize, + ) -> Result<Self::SerializeStructVariant, ::ser::Error> { Err(::ser::Error::UnsupportedType) } } @@ -858,7 +919,8 @@ impl ser::SerializeSeq for SerializeVec { type Error = ::ser::Error; fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), ::ser::Error> - where T: ser::Serialize + where + T: ser::Serialize, { self.vec.push(Value::try_from(value)?); Ok(()) @@ -874,7 +936,8 @@ impl ser::SerializeTuple for SerializeVec { type Error = ::ser::Error; fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), ::ser::Error> - where T: ser::Serialize + where + T: ser::Serialize, { ser::SerializeSeq::serialize_element(self, value) } @@ -889,7 +952,8 @@ impl ser::SerializeTupleStruct for SerializeVec { type Error = ::ser::Error; fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), ::ser::Error> - where T: ser::Serialize + where + T: ser::Serialize, { ser::SerializeSeq::serialize_element(self, value) } @@ -904,7 +968,8 @@ impl ser::SerializeTupleVariant for SerializeVec { type Error = ::ser::Error; fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), ::ser::Error> - where T: ser::Serialize + where + T: ser::Serialize, { ser::SerializeSeq::serialize_element(self, value) } @@ -919,7 +984,8 @@ impl ser::SerializeMap for SerializeMap { type Error = ::ser::Error; fn serialize_key<T: ?Sized>(&mut self, key: &T) -> Result<(), ::ser::Error> - where T: ser::Serialize + where + T: ser::Serialize, { match Value::try_from(key)? { Value::String(s) => self.next_key = Some(s), @@ -929,12 +995,15 @@ impl ser::SerializeMap for SerializeMap { } fn serialize_value<T: ?Sized>(&mut self, value: &T) -> Result<(), ::ser::Error> - where T: ser::Serialize + where + T: ser::Serialize, { let key = self.next_key.take(); let key = key.expect("serialize_value called before serialize_key"); match Value::try_from(value) { - Ok(value) => { self.map.insert(key, value); } + Ok(value) => { + self.map.insert(key, value); + } Err(::ser::Error::UnsupportedNone) => {} Err(e) => return Err(e), } @@ -950,8 +1019,13 @@ impl ser::SerializeStruct for SerializeMap { type Ok = Value; type Error = ::ser::Error; - fn serialize_field<T: ?Sized>(&mut self, key: &'static str, value: &T) -> Result<(), ::ser::Error> - where T: ser::Serialize + fn serialize_field<T: ?Sized>( + &mut self, + key: &'static str, + value: &T, + ) -> Result<(), ::ser::Error> + where + T: ser::Serialize, { ser::SerializeMap::serialize_key(self, key)?; ser::SerializeMap::serialize_value(self, value) @@ -970,7 +1044,8 @@ impl<'a, 'de> de::DeserializeSeed<'de> for DatetimeOrTable<'a> { type Value = bool; fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> - where D: de::Deserializer<'de> + where + D: de::Deserializer<'de>, { deserializer.deserialize_any(self) } @@ -984,7 +1059,8 @@ impl<'a, 'de> de::Visitor<'de> for DatetimeOrTable<'a> { } fn visit_str<E>(self, s: &str) -> Result<bool, E> - where E: de::Error, + where + E: de::Error, { if s == datetime::FIELD { Ok(true) @@ -995,7 +1071,8 @@ impl<'a, 'de> de::Visitor<'de> for DatetimeOrTable<'a> { } fn visit_string<E>(self, s: String) -> Result<bool, E> - where E: de::Error, + where + E: de::Error, { if s == datetime::FIELD { Ok(true) |