PreDomain

This commit is contained in:
Tony Garnock-Jones 2021-07-02 07:49:13 +02:00
parent 23943f8b14
commit 8b7baec26b
3 changed files with 11 additions and 5 deletions

View File

@ -11,7 +11,7 @@ pub mod value;
#[cfg(test)] #[cfg(test)]
mod dom { mod dom {
use super::value::{ use super::value::{
Value, IOValue, IOResult, NestedValue, PlainValue, Domain, Value, IOValue, IOResult, NestedValue, PlainValue, PreDomain, Domain,
PackedWriter, PackedWriter,
}; };
@ -21,7 +21,8 @@ mod dom {
Two, Two,
} }
impl Domain for Dom { impl Domain for Dom {}
impl PreDomain for Dom {
fn from_preserves(v: IOValue) -> IOResult<Self> { fn from_preserves(v: IOValue) -> IOResult<Self> {
panic!("Cannot decode IOValue to Dom: {:?}", v); panic!("Cannot decode IOValue to Dom: {:?}", v);
} }

View File

@ -22,6 +22,7 @@ pub use repr::IOValue;
pub use repr::Map; pub use repr::Map;
pub use repr::NestedValue; pub use repr::NestedValue;
pub use repr::PlainValue; pub use repr::PlainValue;
pub use repr::PreDomain;
pub use repr::RcValue; pub use repr::RcValue;
pub use repr::Record; pub use repr::Record;
pub use repr::Set; pub use repr::Set;

View File

@ -21,12 +21,15 @@ use super::IOResult;
use super::signed_integer::SignedInteger; use super::signed_integer::SignedInteger;
use crate::error::{Error, ExpectedKind, Received}; 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<Self>; fn from_preserves(v: IOValue) -> IOResult<Self>;
fn as_preserves(&self) -> IOValue; fn as_preserves(&self) -> IOValue;
} }
impl<D: Domain> Domain for Arc<D> { pub trait Domain: PreDomain + Clone {}
impl<D: PreDomain> Domain for Arc<D> {}
impl<D: PreDomain> PreDomain for Arc<D> {
fn from_preserves(v: IOValue) -> IOResult<Self> { fn from_preserves(v: IOValue) -> IOResult<Self> {
Ok(Arc::new(D::from_preserves(v)?)) Ok(Arc::new(D::from_preserves(v)?))
} }
@ -1109,7 +1112,8 @@ impl<'de, Dom: Domain> serde::Deserialize<'de> for ArcValue<Dom> {
pub struct IOValue(Arc<AnnotatedValue<IOValue, IOValue>>); pub struct IOValue(Arc<AnnotatedValue<IOValue, IOValue>>);
pub type UnwrappedIOValue = Value<IOValue, IOValue>; pub type UnwrappedIOValue = Value<IOValue, IOValue>;
impl Domain for IOValue { impl Domain for IOValue {}
impl PreDomain for IOValue {
fn from_preserves(v: IOValue) -> IOResult<Self> { fn from_preserves(v: IOValue) -> IOResult<Self> {
Ok(v) Ok(v)
} }