pub enum Value<'a> {
None,
Unit,
Bool(bool),
Integer(Integer),
Float(Float),
Bytes(Cow<'a, [u8]>),
String(Cow<'a, str>),
Sequence(Vec<Self>),
Mappings(Vec<(Self, Self)>),
}
Expand description
A Pot encoded value. This type can be used to deserialize to and from Pot without knowing the original data structure.
Variants§
None
A value representing None.
Unit
A value representing a Unit (()
).
Bool(bool)
A boolean value
Integer(Integer)
An integer value.
Float(Float)
A floating point value.
Bytes(Cow<'a, [u8]>)
A value containing arbitrary bytes.
String(Cow<'a, str>)
A string value.
Sequence(Vec<Self>)
A sequence of values.
Mappings(Vec<(Self, Self)>)
A sequence of key-value mappings.
Implementations§
source§impl<'a> Value<'a>
impl<'a> Value<'a>
sourcepub fn from_serialize<T: Serialize>(value: T) -> Self
pub fn from_serialize<T: Serialize>(value: T) -> Self
Creates a Value
from the given serde-compatible type.
use pot::Value;
use serde::Serialize;
#[derive(Serialize, Debug)]
enum Example {
Hello,
World,
}
let original = vec![Example::Hello, Example::World];
let serialized = Value::from_serialize(&original);
assert_eq!(
serialized,
Value::Sequence(vec![
Value::from(String::from("Hello")),
Value::from(String::from("World"))
])
);
sourcepub fn deserialize_as<'de, T: Deserialize<'de>>(
&'de self
) -> Result<T, ValueError>
pub fn deserialize_as<'de, T: Deserialize<'de>>( &'de self ) -> Result<T, ValueError>
Attempts to create an instance of T
from this value.
use pot::Value;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
enum Example {
Hello,
World,
}
let original = vec![Example::Hello, Example::World];
let serialized = Value::from_serialize(&original);
let deserialized: Vec<Example> = serialized.deserialize_as().unwrap();
assert_eq!(deserialized, original);
sourcepub fn from_sequence<IntoIter: IntoIterator<Item = T>, T: Into<Self>>(
sequence: IntoIter
) -> Self
pub fn from_sequence<IntoIter: IntoIterator<Item = T>, T: Into<Self>>( sequence: IntoIter ) -> Self
Returns a new value from an interator of items that can be converted into a value.
let mappings = Value::from_sequence(Vec::<String>::new());
assert!(matches!(mappings, Value::Sequence(_)));
sourcepub fn from_mappings<IntoIter: IntoIterator<Item = (K, V)>, K: Into<Self>, V: Into<Self>>(
mappings: IntoIter
) -> Self
pub fn from_mappings<IntoIter: IntoIterator<Item = (K, V)>, K: Into<Self>, V: Into<Self>>( mappings: IntoIter ) -> Self
Returns a new value from an interator of 2-element tuples representing key-value pairs.
let mappings = Value::from_mappings(HashMap::<String, u32>::new());
assert!(matches!(mappings, Value::Mappings(_)));
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the value contained is considered empty.
// Value::None is always empty.
assert_eq!(Value::None.is_empty(), true);
// All primitive values, including Unit, are always not empty, even if they contain the value 0.
assert_eq!(Value::Unit.is_empty(), false);
assert_eq!(Value::from(false).is_empty(), false);
assert_eq!(Value::from(0_u8).is_empty(), false);
assert_eq!(Value::from(0_f32).is_empty(), false);
// For all other types, having a length of 0 will result in is_empty returning true.
assert_eq!(Value::from(Vec::<u8>::new()).is_empty(), true);
assert_eq!(Value::from(b"").is_empty(), true);
assert_eq!(Value::from(vec![0_u8]).is_empty(), false);
assert_eq!(Value::from("").is_empty(), true);
assert_eq!(Value::from("hi").is_empty(), false);
assert_eq!(Value::Sequence(Vec::new()).is_empty(), true);
assert_eq!(Value::from(vec![Value::None]).is_empty(), false);
assert_eq!(Value::Mappings(Vec::new()).is_empty(), true);
assert_eq!(
Value::from(vec![(Value::None, Value::None)]).is_empty(),
false
);
sourcepub fn as_bool(&self) -> bool
pub fn as_bool(&self) -> bool
Returns the value represented as a value.
// Value::None is always false.
assert_eq!(Value::None.as_bool(), false);
// Value::Unit is always true.
assert_eq!(Value::Unit.as_bool(), true);
// Value::Bool will return the contained value
assert_eq!(Value::from(false).as_bool(), false);
assert_eq!(Value::from(true).as_bool(), true);
// All primitive values return true if the value is non-zero.
assert_eq!(Value::from(0_u8).as_bool(), false);
assert_eq!(Value::from(1_u8).as_bool(), true);
assert_eq!(Value::from(0_f32).as_bool(), false);
assert_eq!(Value::from(1_f32).as_bool(), true);
// For all other types, as_bool() returns the result of `!is_empty()`.
assert_eq!(Value::from(Vec::<u8>::new()).as_bool(), false);
assert_eq!(Value::from(b"").as_bool(), false);
assert_eq!(Value::from(vec![0_u8]).as_bool(), true);
assert_eq!(Value::from("").as_bool(), false);
assert_eq!(Value::from("hi").as_bool(), true);
assert_eq!(Value::Sequence(Vec::new()).as_bool(), false);
assert_eq!(Value::from(vec![Value::None]).as_bool(), true);
assert_eq!(Value::Mappings(Vec::new()).as_bool(), false);
assert_eq!(
Value::from(vec![(Value::None, Value::None)]).as_bool(),
true
);
sourcepub fn as_integer(&self) -> Option<Integer>
pub fn as_integer(&self) -> Option<Integer>
Returns the value as an Integer
. Returns None if the value is not a
Self::Float
or Self::Integer
. Also returns None if the value is
a float, but cannot be losslessly converted to an integer.
sourcepub fn as_float(&self) -> Option<Float>
pub fn as_float(&self) -> Option<Float>
Returns the value as an Float
. Returns None if the value is not a
Self::Float
or Self::Integer
. Also returns None if the value is
an integer, but cannot be losslessly converted to a float.
sourcepub fn as_str(&self) -> Option<&str>
pub fn as_str(&self) -> Option<&str>
Returns the value as a string, or None if the value is not representable
by a string. This will only return a value with variants
Self::String
and Self::Bytes
. Bytes will only be returned if the
contained bytes can be safely interpretted as utf-8.
sourcepub fn as_bytes(&self) -> Option<&[u8]>
pub fn as_bytes(&self) -> Option<&[u8]>
Returns the value’s bytes, or None if the value is not stored as a
representation of bytes. This will only return a value with variants
Self::String
and Self::Bytes
.
sourcepub fn values(&self) -> SequenceIter<'_>
pub fn values(&self) -> SequenceIter<'_>
Returns an interator that iterates over all values contained inside of
this value. Returns an empty iterator if not a Self::Sequence
or
Self::Mappings
. If a Self::Mappings
, only the value portion of
the mapping is returned.
sourcepub fn mappings(&self) -> Iter<'_, (Self, Self)>
pub fn mappings(&self) -> Iter<'_, (Self, Self)>
Returns an interator that iterates over all mappings contained inside of
this value. Returns an empty iterator if not a Self::Sequence
or
Self::Mappings
. If a Self::Sequence
, the key will always be
Self::None
.
sourcepub fn into_static(self) -> Value<'static>
pub fn into_static(self) -> Value<'static>
Converts self
to a static lifetime by cloning any borrowed data.