diff --git a/implementations/rust/preserves/src/lib.rs b/implementations/rust/preserves/src/lib.rs index 38aeb2e..8d65a80 100644 --- a/implementations/rust/preserves/src/lib.rs +++ b/implementations/rust/preserves/src/lib.rs @@ -21,7 +21,7 @@ mod dom { fn dom_as_preserves(v: &Dom) -> io::Result { Ok(match v { - Dom::One => Value::ByteString(vec![255, 255, 255, 255]), + Dom::One => Value::bytestring(vec![255, 255, 255, 255]), Dom::Two => Value::symbol(&format!("Dom::{:?}", v)), }) } diff --git a/implementations/rust/preserves/src/value/repr.rs b/implementations/rust/preserves/src/value/repr.rs index 88e8034..7e90787 100644 --- a/implementations/rust/preserves/src/value/repr.rs +++ b/implementations/rust/preserves/src/value/repr.rs @@ -39,6 +39,10 @@ pub trait NestedValue: Sized + Debug + Clone + Eq + Hash + Ord { Value::symbol(n).wrap() } + fn bytestring<'a, V: Into>>(v: V) -> Self { + Value::bytestring(v).wrap() + } + fn wrap(anns: Annotations, v: Value) -> Self; fn annotations(&self) -> &Annotations; @@ -655,6 +659,10 @@ impl, D: Embeddable> Value { self.as_string().ok_or_else(|| self.expected(ExpectedKind::String)) } + pub fn bytestring<'a, V: Into>>(v: V) -> Self { + Value::ByteString(v.into().into_owned()) + } + pub fn is_bytestring(&self) -> bool { self.as_bytestring().is_some() }