pub enum Value {
String(Tag, String),
Char(Tag, char),
Bool(Tag, bool),
Num(Tag, Num),
Empty(Tag, Empty),
Dict(Tag, Dict),
Array(Tag, Vec<Value>),
}
Expand description
An enum representing all possible figment value variants.
Note that Value
implements From<T>
for all reasonable T
:
use figment::value::Value;
let v = Value::from("hello");
assert_eq!(v.as_str(), Some("hello"));
Variants
String(Tag, String)
A string.
Char(Tag, char)
A character.
Bool(Tag, bool)
A boolean.
Num(Tag, Num)
A numeric value.
Empty(Tag, Empty)
A value with no value.
Dict(Tag, Dict)
A dictionary: a map from String
to Value
.
Array(Tag, Vec<Value>)
A sequence/array/vector.
Implementations
sourceimpl Value
impl Value
sourcepub fn serialize<T: Serialize>(value: T) -> Result<Self, Error>
pub fn serialize<T: Serialize>(value: T) -> Result<Self, Error>
Serialize a Value
from any T: Serialize
.
use figment::value::{Value, Empty};
let value = Value::serialize(10i8).unwrap();
assert_eq!(value.to_i128(), Some(10));
let value = Value::serialize(()).unwrap();
assert_eq!(value, Empty::Unit.into());
let value = Value::serialize(vec![4, 5, 6]).unwrap();
assert_eq!(value, vec![4, 5, 6].into());
sourcepub fn deserialize<'de, T: Deserialize<'de>>(&self) -> Result<T, Error>
pub fn deserialize<'de, T: Deserialize<'de>>(&self) -> Result<T, Error>
Deserialize self
into any deserializable T
.
use figment::value::Value;
let value = Value::from("hello");
let string: String = value.deserialize().unwrap();
assert_eq!(string, "hello");
sourcepub fn find(self, path: &str) -> Option<Value>
pub fn find(self, path: &str) -> Option<Value>
Looks up and returns the value at path path
, where path
is of the
form a.b.c
where a
, b
, and c
are keys to dictionaries. If the
key is empty, simply returns self
. If the key is not empty and self
or any of the values for non-leaf keys in the path are not dictionaries,
returns None
.
This method consumes self
. See Value::find_ref()
for a
non-consuming variant.
Example
use figment::{value::Value, util::map};
let value = Value::from(map! {
"apple" => map! {
"bat" => map! {
"pie" => 4usize,
},
"cake" => map! {
"pumpkin" => 10usize,
}
}
});
assert!(value.clone().find("apple").is_some());
assert!(value.clone().find("apple.bat").is_some());
assert!(value.clone().find("apple.cake").is_some());
assert_eq!(value.clone().find("apple.bat.pie").unwrap().to_u128(), Some(4));
assert_eq!(value.clone().find("apple.cake.pumpkin").unwrap().to_u128(), Some(10));
assert!(value.clone().find("apple.pie").is_none());
assert!(value.clone().find("pineapple").is_none());
sourcepub fn find_ref<'a>(&'a self, path: &str) -> Option<&'a Value>
pub fn find_ref<'a>(&'a self, path: &str) -> Option<&'a Value>
Exactly like Value::find()
but does not consume self
,
returning a reference to the found value, if any, instead.
Example
use figment::{value::Value, util::map};
let value = Value::from(map! {
"apple" => map! {
"bat" => map! {
"pie" => 4usize,
},
"cake" => map! {
"pumpkin" => 10usize,
}
}
});
assert!(value.find_ref("apple").is_some());
assert!(value.find_ref("apple.bat").is_some());
assert!(value.find_ref("apple.cake").is_some());
assert_eq!(value.find_ref("apple.bat.pie").unwrap().to_u128(), Some(4));
assert_eq!(value.find_ref("apple.cake.pumpkin").unwrap().to_u128(), Some(10));
assert!(value.find_ref("apple.pie").is_none());
assert!(value.find_ref("pineapple").is_none());
sourcepub fn tag(&self) -> Tag
pub fn tag(&self) -> Tag
Returns the Tag
applied to this value.
use figment::{Figment, Profile, value::Value, util::map};
let map: Value = Figment::from(("key", "value")).extract().unwrap();
let value = map.find_ref("key").expect("value");
assert_eq!(value.as_str(), Some("value"));
assert!(!value.tag().is_default());
assert_eq!(value.tag().profile(), Some(Profile::Global));
let map: Value = Figment::from(("key", map!["key2" => 123])).extract().unwrap();
let value = map.find_ref("key.key2").expect("value");
assert_eq!(value.to_i128(), Some(123));
assert!(!value.tag().is_default());
assert_eq!(value.tag().profile(), Some(Profile::Global));
sourcepub fn as_str(self: &Value) -> Option<&str>
pub fn as_str(self: &Value) -> Option<&str>
Converts self
into a &str
if self
is a Value::String
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.as_str();
sourcepub fn into_string(self: Value) -> Option<String>
pub fn into_string(self: Value) -> Option<String>
Converts self
into a String
if self
is a Value::String
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.into_string();
sourcepub fn to_char(self: &Value) -> Option<char>
pub fn to_char(self: &Value) -> Option<char>
Converts self
into a char
if self
is a Value::Char
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.to_char();
sourcepub fn to_bool(self: &Value) -> Option<bool>
pub fn to_bool(self: &Value) -> Option<bool>
Converts self
into a bool
if self
is a Value::Bool
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.to_bool();
sourcepub fn to_num(self: &Value) -> Option<Num>
pub fn to_num(self: &Value) -> Option<Num>
Converts self
into a Num
if self
is a Value::Num
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.to_num();
sourcepub fn to_empty(self: &Value) -> Option<Empty>
pub fn to_empty(self: &Value) -> Option<Empty>
Converts self
into a Empty
if self
is a Value::Empty
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.to_empty();
sourcepub fn as_dict(self: &Value) -> Option<&Dict>
pub fn as_dict(self: &Value) -> Option<&Dict>
Converts self
into a &Dict
if self
is a Value::Dict
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.as_dict();
sourcepub fn into_dict(self: Value) -> Option<Dict>
pub fn into_dict(self: Value) -> Option<Dict>
Converts self
into a Dict
if self
is a Value::Dict
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.into_dict();
sourcepub fn as_array(self: &Value) -> Option<&[Value]>
pub fn as_array(self: &Value) -> Option<&[Value]>
Converts self
into a &[Value]
if self
is a Value::Array
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.as_array();
sourcepub fn into_array(self: Value) -> Option<Vec<Value>>
pub fn into_array(self: Value) -> Option<Vec<Value>>
Converts self
into a Vec<Value>
if self
is a Value::Array
.
Example
use figment::value::Value;
let value: Value = 123.into();
let converted = value.into_array();
sourcepub fn to_u128(&self) -> Option<u128>
pub fn to_u128(&self) -> Option<u128>
Converts self
into a u128
if self
is an unsigned Value::Num
variant.
Example
use figment::value::Value;
let value: Value = 123u8.into();
let converted = value.to_u128();
assert_eq!(converted, Some(123));
sourcepub fn to_i128(&self) -> Option<i128>
pub fn to_i128(&self) -> Option<i128>
Converts self
into an i128
if self
is an signed Value::Num
variant.
Example
use figment::value::Value;
let value: Value = 123i8.into();
let converted = value.to_i128();
assert_eq!(converted, Some(123));
let value: Value = Value::from(5000i64);
assert_eq!(value.to_i128(), Some(5000i128));
sourcepub fn to_actual(&self) -> Actual
pub fn to_actual(&self) -> Actual
Converts self
into the corresponding Actual
.
See also Num::to_actual()
and Empty::to_actual()
, which are
called internally by this method.
Example
use figment::{value::Value, error::Actual};
assert_eq!(Value::from('a').to_actual(), Actual::Char('a'));
assert_eq!(Value::from(&[1, 2, 3]).to_actual(), Actual::Seq);
Trait Implementations
sourceimpl<'de> Deserialize<'de> for Value
impl<'de> Deserialize<'de> for Value
sourcefn deserialize<D: Deserializer<'de>>(de: D) -> Result<Value, D::Error>
fn deserialize<D: Deserializer<'de>>(de: D) -> Result<Value, D::Error>
sourceimpl<'de> Deserializer<'de> for &Value
impl<'de> Deserializer<'de> for &Value
type Error = Error
type Error = Error
sourcefn deserialize_any<V>(self, v: V) -> Result<V::Value>where
V: Visitor<'de>,
fn deserialize_any<V>(self, v: V) -> Result<V::Value>where
V: Visitor<'de>,
Deserializer
to figure out how to drive the visitor based
on what data type is in the input. Read moresourcefn deserialize_option<V>(self, visitor: V) -> Result<V::Value>where
V: Visitor<'de>,
fn deserialize_option<V>(self, visitor: V) -> Result<V::Value>where
V: Visitor<'de>,
Deserialize
type is expecting an optional value. Read moresourcefn deserialize_enum<V: Visitor<'de>>(
self,
_: &'static str,
_: &'static [&'static str],
v: V
) -> Result<V::Value>
fn deserialize_enum<V: Visitor<'de>>(
self,
_: &'static str,
_: &'static [&'static str],
v: V
) -> Result<V::Value>
Deserialize
type is expecting an enum value with a
particular name and possible variants. Read moresourcefn deserialize_newtype_struct<V: Visitor<'de>>(
self,
_name: &'static str,
visitor: V
) -> Result<V::Value>
fn deserialize_newtype_struct<V: Visitor<'de>>(
self,
_name: &'static str,
visitor: V
) -> Result<V::Value>
Deserialize
type is expecting a newtype struct with a
particular name. Read moresourcefn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a bool
value.sourcefn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a u8
value.sourcefn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a u16
value.sourcefn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a u32
value.sourcefn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a u64
value.sourcefn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting an i8
value.sourcefn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting an i16
value.sourcefn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting an i32
value.sourcefn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting an i64
value.sourcefn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a f32
value.sourcefn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a f64
value.sourcefn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a char
value.sourcefn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a string value and does
not benefit from taking ownership of buffered data owned by the
Deserializer
. Read moresourcefn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a string value and would
benefit from taking ownership of buffered data owned by the
Deserializer
. Read moresourcefn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a sequence of values.sourcefn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a byte array and does not
benefit from taking ownership of buffered data owned by the
Deserializer
. Read moresourcefn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a byte array and would
benefit from taking ownership of buffered data owned by the
Deserializer
. Read moresourcefn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a map of key-value pairs.sourcefn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a unit value.sourcefn deserialize_struct<V>(
self,
name: &'static str,
fields: &'static [&'static str],
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_struct<V>(
self,
name: &'static str,
fields: &'static [&'static str],
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a struct with a particular
name and fields. Read moresourcefn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type needs to deserialize a value whose type
doesn’t matter because it is ignored. Read moresourcefn deserialize_unit_struct<V>(
self,
name: &'static str,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_unit_struct<V>(
self,
name: &'static str,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a unit struct with a
particular name. Read moresourcefn deserialize_tuple_struct<V>(
self,
name: &'static str,
len: usize,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_tuple_struct<V>(
self,
name: &'static str,
len: usize,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a tuple struct with a
particular name and number of fields. Read moresourcefn deserialize_tuple<V>(
self,
len: usize,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_tuple<V>(
self,
len: usize,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a sequence of values and
knows how many values there are without looking at the serialized data. Read moresourcefn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting the name of a struct
field or the discriminant of an enum variant. Read moresourcefn deserialize_i128<V>(
self,
visitor: V
) -> Result<<V as Visitor<'de>>::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i128<V>(
self,
visitor: V
) -> Result<<V as Visitor<'de>>::Value, Self::Error>where
V: Visitor<'de>,
sourcefn deserialize_u128<V>(
self,
visitor: V
) -> Result<<V as Visitor<'de>>::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u128<V>(
self,
visitor: V
) -> Result<<V as Visitor<'de>>::Value, Self::Error>where
V: Visitor<'de>,
sourcefn is_human_readable(&self) -> bool
fn is_human_readable(&self) -> bool
Deserialize
implementations should expect to
deserialize their human-readable form. Read more