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 =>
|
RefRenderStyle::Bare =>
|
||||||
base,
|
base,
|
||||||
RefRenderStyle::Qualified =>
|
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?
|
// ^ 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 {
|
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 {
|
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![
|
item(seq![
|
||||||
"fn ", fname.clone(), anglebrackets![
|
"fn ", fname.clone(), anglebrackets![
|
||||||
"'de",
|
"'de",
|
||||||
"_Value: preserves::value::NestedValue",
|
seq![ctxt.m.any_type(), ": preserves::value::NestedValue"],
|
||||||
"R: _support::Reader<'de, _Value>"],
|
seq!["R: _support::Reader<'de, ", ctxt.m.any_type(), ">"]],
|
||||||
"(r: &mut R) -> ",
|
"(r: &mut R) -> ",
|
||||||
"std::result::Result<",
|
"std::result::Result<",
|
||||||
names::render_constructor(n), ty.generic_arg(ctxt.m),
|
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![
|
item(seq![
|
||||||
"impl", anglebrackets!["'de",
|
"impl", anglebrackets![
|
||||||
"_Value: preserves::value::NestedValue",
|
"'de",
|
||||||
"R: _support::Reader<'de, _Value>"], " ",
|
seq![ctxt.m.any_type(), ": preserves::value::NestedValue"],
|
||||||
"_support::Deserialize", anglebrackets!["'de", "_Value", "R"], " ",
|
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![
|
"for ", names::render_constructor(n), ty.generic_arg(ctxt.m), " ", codeblock![
|
||||||
seq!["fn deserialize(r: &mut R) -> ",
|
seq!["fn deserialize(r: &mut R) -> ",
|
||||||
"std::result::Result<Self, _support::ParseError> ",
|
"std::result::Result<Self, _support::ParseError> ",
|
||||||
|
|
|
@ -195,8 +195,8 @@ impl TField {
|
||||||
fn render(&self, ctxt: &ModuleContext, box_needed: bool) -> impl Emittable {
|
fn render(&self, ctxt: &ModuleContext, box_needed: bool) -> impl Emittable {
|
||||||
match self {
|
match self {
|
||||||
TField::Unit => seq!["()"],
|
TField::Unit => seq!["()"],
|
||||||
TField::Any => seq!["_Value"],
|
TField::Any => seq![ctxt.any_type()],
|
||||||
TField::Embedded => seq!["_Value::Embedded"],
|
TField::Embedded => seq![ctxt.any_type(), "::Embedded"],
|
||||||
TField::Array(t) => seq!["std::vec::Vec<", t.render(ctxt, false), ">"],
|
TField::Array(t) => seq!["std::vec::Vec<", t.render(ctxt, false), ">"],
|
||||||
TField::Set(t) => seq!["preserves::value::Set<", t.render(ctxt, false), ">"],
|
TField::Set(t) => seq!["preserves::value::Set<", t.render(ctxt, false), ">"],
|
||||||
TField::Map(k, v) => seq!["preserves::value::Map",
|
TField::Map(k, v) => seq!["preserves::value::Map",
|
||||||
|
@ -267,7 +267,8 @@ impl TSimple {
|
||||||
impl TDefinition {
|
impl TDefinition {
|
||||||
pub fn generic_decl(&self, ctxt: &ModuleContext) -> Item {
|
pub fn generic_decl(&self, ctxt: &ModuleContext) -> Item {
|
||||||
if self.has_embedded(ctxt.bundle) {
|
if self.has_embedded(ctxt.bundle) {
|
||||||
ctxt.generic_decls()
|
item(anglebrackets![
|
||||||
|
seq![ctxt.any_type(), ": preserves::value::NestedValue"]])
|
||||||
} else {
|
} else {
|
||||||
item("")
|
item("")
|
||||||
}
|
}
|
||||||
|
@ -275,7 +276,12 @@ impl TDefinition {
|
||||||
|
|
||||||
pub fn generic_decl_with_defaults(&self, ctxt: &ModuleContext) -> Item {
|
pub fn generic_decl_with_defaults(&self, ctxt: &ModuleContext) -> Item {
|
||||||
if self.has_embedded(ctxt.bundle) {
|
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 {
|
} else {
|
||||||
item("")
|
item("")
|
||||||
}
|
}
|
||||||
|
@ -283,7 +289,7 @@ impl TDefinition {
|
||||||
|
|
||||||
pub fn generic_arg(&self, ctxt: &ModuleContext) -> Item {
|
pub fn generic_arg(&self, ctxt: &ModuleContext) -> Item {
|
||||||
if self.has_embedded(ctxt.bundle) {
|
if self.has_embedded(ctxt.bundle) {
|
||||||
ctxt.generic_arg()
|
item(anglebrackets![ctxt.any_type()])
|
||||||
} else {
|
} else {
|
||||||
item("")
|
item("")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue