package org.shedlang.compiler.config; import org.shedlang.compiler.config.json.Json5ObjectWithSource; import java.util.List; public sealed interface GcConfig permits GcBumpConfig, GcMarkAndSweepConfig { GcConfig BUMP = new GcBumpConfig(); GcConfig DEFAULT = GcMarkAndSweepConfig.DEFAULT; static GcConfig fromJson5(Json5ObjectWithSource object) { var name = object.getString("name").value(); return switch (name) { case "bump" -> BUMP; case "mark-and-sweep" -> GcMarkAndSweepConfig.fromJson5(object); default -> throw new IllegalArgumentException("Unrecognised GC name: \"%s\"".formatted(name)); }; } String name(); List runtimeBuildOptions(); }