diff --git a/implementations/rust/preserves/src/lib.rs b/implementations/rust/preserves/src/lib.rs index 54338eb..54c8ca1 100644 --- a/implementations/rust/preserves/src/lib.rs +++ b/implementations/rust/preserves/src/lib.rs @@ -11,7 +11,7 @@ pub mod value; #[cfg(test)] mod dom { use super::value::{ - Value, IOValue, IOResult, NestedValue, PlainValue, Domain, + Value, IOValue, IOResult, NestedValue, PlainValue, PreDomain, Domain, PackedWriter, }; @@ -21,7 +21,8 @@ mod dom { Two, } - impl Domain for Dom { + impl Domain for Dom {} + impl PreDomain for Dom { fn from_preserves(v: IOValue) -> IOResult { panic!("Cannot decode IOValue to Dom: {:?}", v); } diff --git a/implementations/rust/preserves/src/value/mod.rs b/implementations/rust/preserves/src/value/mod.rs index c612d18..6c20177 100644 --- a/implementations/rust/preserves/src/value/mod.rs +++ b/implementations/rust/preserves/src/value/mod.rs @@ -22,6 +22,7 @@ pub use repr::IOValue; pub use repr::Map; pub use repr::NestedValue; pub use repr::PlainValue; +pub use repr::PreDomain; pub use repr::RcValue; pub use repr::Record; pub use repr::Set; diff --git a/implementations/rust/preserves/src/value/repr.rs b/implementations/rust/preserves/src/value/repr.rs index ecb5a77..a470090 100644 --- a/implementations/rust/preserves/src/value/repr.rs +++ b/implementations/rust/preserves/src/value/repr.rs @@ -21,12 +21,15 @@ use super::IOResult; use super::signed_integer::SignedInteger; use crate::error::{Error, ExpectedKind, Received}; -pub trait Domain: Sized + Debug + Clone + Eq + Hash + Ord { +pub trait PreDomain: Sized + Debug + Eq + Hash + Ord { fn from_preserves(v: IOValue) -> IOResult; fn as_preserves(&self) -> IOValue; } -impl Domain for Arc { +pub trait Domain: PreDomain + Clone {} + +impl Domain for Arc {} +impl PreDomain for Arc { fn from_preserves(v: IOValue) -> IOResult { Ok(Arc::new(D::from_preserves(v)?)) } @@ -1109,7 +1112,8 @@ impl<'de, Dom: Domain> serde::Deserialize<'de> for ArcValue { pub struct IOValue(Arc>); pub type UnwrappedIOValue = Value; -impl Domain for IOValue { +impl Domain for IOValue {} +impl PreDomain for IOValue { fn from_preserves(v: IOValue) -> IOResult { Ok(v) }