forked from syndicate-lang/preserves
DRY for _Value
This commit is contained in:
parent
6869a89291
commit
ac8567731d
|
@ -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 {
|
||||
|
|
|
@ -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<Self, _support::ParseError> ",
|
||||
|
|
|
@ -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("")
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue