blob: 1d59dbfb0054405cfde1d51e269a6637123df194 [file] [log] [blame]
//! Structured values.
mod fill;
mod impls;
mod internal;
#[cfg(test)]
pub(in kv) mod test;
pub use self::fill::{Fill, Slot};
pub use kv::Error;
use self::internal::{Inner, Primitive, Visitor};
/// A type that can be converted into a [`Value`](struct.Value.html).
pub trait ToValue {
/// Perform the conversion.
fn to_value(&self) -> Value;
}
impl<'a, T> ToValue for &'a T
where
T: ToValue + ?Sized,
{
fn to_value(&self) -> Value {
(**self).to_value()
}
}
impl<'v> ToValue for Value<'v> {
fn to_value(&self) -> Value {
Value { inner: self.inner }
}
}
/// A value in a structured key-value pair.
pub struct Value<'v> {
inner: Inner<'v>,
}
impl<'v> Value<'v> {
/// Get a value from an internal primitive.
fn from_primitive<T>(value: T) -> Self
where
T: Into<Primitive<'v>>,
{
Value {
inner: Inner::Primitive(value.into()),
}
}
/// Visit the value using an internal visitor.
fn visit<'a>(&'a self, visitor: &mut dyn Visitor<'a>) -> Result<(), Error> {
self.inner.visit(visitor)
}
}