exhaustiveSwitch function
String
exhaustiveSwitch(
{ - required SumTypeSpec spec,
- required bool implement,
})
Implementation
String exhaustiveSwitch({
required SumTypeSpec spec,
required bool implement,
}) =>
function(
type: "\$T",
name: "iswitch",
typeParams: [const TypeParamSpec(name: "\$T")],
namedParams: [
for (final caseSpec in spec.cases)
param(
type: [
"required \$T Function(",
if (caseSpec.type.requiresPayload) caseSpec.type.name,
")",
].join(),
name: caseSpec.name,
),
],
body: implement
? [
for (final caseSpec in spec.cases) ...[
"if (this.${caseSpec.name} != null) {",
"return ${caseSpec.name}(",
if (caseSpec.type.requiresPayload) "this.${caseSpec.name}!",
"); } else"
],
"{ throw StateError(\"an instance of \$${spec.sumTypeName} has no case selected\"); }",
]
: null,
);