diff --git a/implementations/rust/preserves-schema/src/compiler/mod.rs b/implementations/rust/preserves-schema/src/compiler/mod.rs index ab4d8a3..a777683 100644 --- a/implementations/rust/preserves-schema/src/compiler/mod.rs +++ b/implementations/rust/preserves-schema/src/compiler/mod.rs @@ -102,7 +102,7 @@ pub fn compile(config: &CompilerConfig) -> Result<(), std::io::Error> { m.define_type(item(seq!["pub type _Ptr = ", match &v.embedded_type { EmbeddedTypeName::False => item("preserves::value::IOValue".to_owned()), - EmbeddedTypeName::Ref(r) => m.render_ref(&**r), + EmbeddedTypeName::Ref(r) => item(seq!["std::sync::Arc", anglebrackets![m.render_ref(&**r)]]), }, ";"])); m.define_type(item(seq!["pub type _Any = preserves::value::ArcValue<_Ptr>;"])); diff --git a/implementations/rust/preserves-schema/src/compiler/unparsers.rs b/implementations/rust/preserves-schema/src/compiler/unparsers.rs index f2839d1..278d6ba 100644 --- a/implementations/rust/preserves-schema/src/compiler/unparsers.rs +++ b/implementations/rust/preserves-schema/src/compiler/unparsers.rs @@ -133,7 +133,7 @@ fn simple_pattern_unparser( } } SimplePattern::Embedded { .. } => - item(seq!["preserves::value::Value::Domain(", src.as_ref().unwrap().to_owned(), ").wrap()"]), + item(seq!["preserves::value::Value::Domain(", src.as_ref().unwrap().to_owned(), ".clone()).wrap()"]), SimplePattern::Lit { value } => item(seq![parens![ctxt.m.define_literal(value)], ".clone()"]), SimplePattern::Seqof { pattern } => {