dumpToRecord function
String
dumpToRecord(
- SumTypeSpec spec
)
Implementation
String dumpToRecord(SumTypeSpec spec) => expressionFunction(
type: "\$T",
name: "dump",
typeParams: [const TypeParamSpec(name: "\$T")],
posParams: [
param(
type: [
"\$T Function({",
...spec.cases
.map(
(c) => param(
type:
"${c.type.isDirectlyRecursive ? "\$T" : c.type.name}?",
name: c.name,
),
)
.map(appendComma),
"})",
].join(),
name: "make",
),
],
body: [
"iswitch(",
...spec.cases
.map(
(c) => [
"${c.name}: (",
if (c.type.requiresPayload) c.name,
") => make(${c.name}:",
if (c.type.isDirectlyRecursive)
"${c.name}.dump(make)"
else if (c.type.requiresPayload)
c.name
else
spec.noPayloadTypeInstance,
")",
].join(),
)
.map(appendComma),
")",
],
);