dumpToRecord function

String dumpToRecord(
  1. 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),
        ")",
      ],
    );