From ac8567731d2a02354eca3594bf4ca087fa933e3b Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 17 Sep 2021 12:19:26 +0200 Subject: [PATCH] DRY for _Value --- .../preserves-schema/src/compiler/context.rs | 26 ++----------------- .../preserves-schema/src/compiler/readers.rs | 13 +++++----- .../preserves-schema/src/compiler/types.rs | 16 ++++++++---- 3 files changed, 20 insertions(+), 35 deletions(-) diff --git a/implementations/rust/preserves-schema/src/compiler/context.rs b/implementations/rust/preserves-schema/src/compiler/context.rs index 23f325e..c609ffc 100644 --- a/implementations/rust/preserves-schema/src/compiler/context.rs +++ b/implementations/rust/preserves-schema/src/compiler/context.rs @@ -170,7 +170,7 @@ impl<'m, 'b> ModuleContext<'m, 'b> { RefRenderStyle::Bare => base, RefRenderStyle::Qualified => - if q { item(seq![base, anglebrackets!["_Value"]]) } else { base }, + if q { item(seq![base, anglebrackets![self.any_type()]]) } else { base }, } } @@ -184,30 +184,8 @@ impl<'m, 'b> ModuleContext<'m, 'b> { // ^ TODO: should the "false" be configurable? } - pub fn generic_decls(&self) -> Item { - item(anglebrackets!["_Value: preserves::value::NestedValue"]) - } - - pub fn generic_static_decls(&self) -> Item { - item(anglebrackets!["_Value: preserves::value::NestedValue + 'static"]) - } - - pub fn generic_decls_with_defaults(&self) -> Item { - item(anglebrackets![ - seq!["_Value: preserves::value::NestedValue = ", - if self.schema.embedded_type == EmbeddedTypeName::False { - "preserves::value::IOValue" - } else { - "_Any" - }]]) - } - - pub fn generic_arg(&self) -> Item { - item("<_Value>") - } - pub fn language_type(&self) -> Item { - item(seq![self.language_base_type(), self.generic_arg()]) + item(seq![self.language_base_type(), anglebrackets![self.any_type()]]) } pub fn language_base_type(&self) -> Item { diff --git a/implementations/rust/preserves-schema/src/compiler/readers.rs b/implementations/rust/preserves-schema/src/compiler/readers.rs index 39f93a9..1cf4519 100644 --- a/implementations/rust/preserves-schema/src/compiler/readers.rs +++ b/implementations/rust/preserves-schema/src/compiler/readers.rs @@ -103,8 +103,8 @@ pub fn gen_definition_reader(m: &mut ModuleContext, n: &str, d: &Definition) { item(seq![ "fn ", fname.clone(), anglebrackets![ "'de", - "_Value: preserves::value::NestedValue", - "R: _support::Reader<'de, _Value>"], + seq![ctxt.m.any_type(), ": preserves::value::NestedValue"], + seq!["R: _support::Reader<'de, ", ctxt.m.any_type(), ">"]], "(r: &mut R) -> ", "std::result::Result<", names::render_constructor(n), ty.generic_arg(ctxt.m), @@ -141,10 +141,11 @@ pub fn gen_definition_reader(m: &mut ModuleContext, n: &str, d: &Definition) { } item(seq![ - "impl", anglebrackets!["'de", - "_Value: preserves::value::NestedValue", - "R: _support::Reader<'de, _Value>"], " ", - "_support::Deserialize", anglebrackets!["'de", "_Value", "R"], " ", + "impl", anglebrackets![ + "'de", + seq![ctxt.m.any_type(), ": preserves::value::NestedValue"], + seq!["R: _support::Reader<'de, ", ctxt.m.any_type(), ">"]], " ", + "_support::Deserialize", anglebrackets!["'de", ctxt.m.any_type(), "R"], " ", "for ", names::render_constructor(n), ty.generic_arg(ctxt.m), " ", codeblock![ seq!["fn deserialize(r: &mut R) -> ", "std::result::Result ", diff --git a/implementations/rust/preserves-schema/src/compiler/types.rs b/implementations/rust/preserves-schema/src/compiler/types.rs index b5904f9..5fcc89d 100644 --- a/implementations/rust/preserves-schema/src/compiler/types.rs +++ b/implementations/rust/preserves-schema/src/compiler/types.rs @@ -195,8 +195,8 @@ impl TField { fn render(&self, ctxt: &ModuleContext, box_needed: bool) -> impl Emittable { match self { TField::Unit => seq!["()"], - TField::Any => seq!["_Value"], - TField::Embedded => seq!["_Value::Embedded"], + TField::Any => seq![ctxt.any_type()], + TField::Embedded => seq![ctxt.any_type(), "::Embedded"], TField::Array(t) => seq!["std::vec::Vec<", t.render(ctxt, false), ">"], TField::Set(t) => seq!["preserves::value::Set<", t.render(ctxt, false), ">"], TField::Map(k, v) => seq!["preserves::value::Map", @@ -267,7 +267,8 @@ impl TSimple { impl TDefinition { pub fn generic_decl(&self, ctxt: &ModuleContext) -> Item { if self.has_embedded(ctxt.bundle) { - ctxt.generic_decls() + item(anglebrackets![ + seq![ctxt.any_type(), ": preserves::value::NestedValue"]]) } else { item("") } @@ -275,7 +276,12 @@ impl TDefinition { pub fn generic_decl_with_defaults(&self, ctxt: &ModuleContext) -> Item { if self.has_embedded(ctxt.bundle) { - ctxt.generic_decls_with_defaults() + item(anglebrackets![ + seq![ctxt.any_type(), ": preserves::value::NestedValue = ", + match ctxt.schema.embedded_type { + EmbeddedTypeName::False => "preserves::value::IOValue", + EmbeddedTypeName::Ref(_) => "_Any", + }]]) } else { item("") } @@ -283,7 +289,7 @@ impl TDefinition { pub fn generic_arg(&self, ctxt: &ModuleContext) -> Item { if self.has_embedded(ctxt.bundle) { - ctxt.generic_arg() + item(anglebrackets![ctxt.any_type()]) } else { item("") }