Generic Valueness for refs

This commit is contained in:
Tony Garnock-Jones 2022-11-02 13:34:11 +01:00
parent 7225960363
commit a33f96bc1d
1 changed files with 2 additions and 12 deletions

View File

@ -87,7 +87,7 @@ pub fn value<D: Domain, V: Value<D>>(v: &V) -> &dyn Value<D> {
v
}
impl<'a, D: Domain> Value<D> for &'a dyn Value<D> {
impl<'a, D: Domain, V: Value<D> + ?Sized> Value<D> for &'a V {
fn value_class(&self) -> ValueClass { (*self).value_class() }
fn as_boolean(&self) -> Option<bool> { (*self).as_boolean() }
fn as_float(&self) -> Option<f32> { (*self).as_float() }
@ -301,7 +301,7 @@ impl<D: Domain> Value<D> for Float {
fn as_double(&self) -> Option<f64> { Some(self.0 as f64) }
}
impl<'a, D: Domain> Value<D> for &'a str {
impl<D: Domain> Value<D> for str {
fn value_class(&self) -> ValueClass { ValueClass::Atomic(AtomClass::String) }
fn as_string(&self) -> Option<Cow<'_, str>> { Some(Cow::Borrowed(self)) }
}
@ -331,16 +331,6 @@ impl<D: Domain, V: Value<D>> Value<D> for [V] {
}
}
impl<'v, D: Domain, V: Value<D>> Value<D> for &'v [V] {
fn value_class(&self) -> ValueClass { ValueClass::Compound(CompoundClass::Sequence) }
fn is_sequence(&self) -> bool { true }
fn len(&self) -> Option<usize> { Some((self as &[V]).len()) }
fn index(&self, i: usize) -> &dyn Value<D> { &self[i] }
fn iter(&self) -> Option<Box<dyn Iterator<Item = &dyn Value<D>> + '_>> {
Some(Box::new(self[..].iter().map(value)))
}
}
impl<D: Domain> Value<D> for Set<Box<dyn Value<D>>> {
fn value_class(&self) -> ValueClass { ValueClass::Compound(CompoundClass::Set) }
fn is_set(&self) -> bool { true }