package org.shedlang.compiler.config; import org.shedlang.compiler.config.errors.ConfigError; import org.shedlang.compiler.config.json.Json5ObjectWithSource; import org.shedlang.compiler.parser.SourceParser; import org.shedlang.compiler.sources.FileFragmentSource; import org.shedlang.compiler.sources.SourceTexts; import org.shedlang.compiler.tokeniser.UnexpectedTokenException; import org.shedlang.compiler.types.NamespaceName; import java.text.MessageFormat; public record BinConfig(String name, NamespaceName mainNamespace) { public static BinConfig fromJson5(Json5ObjectWithSource object) { var name = object.getString("name").value(); var mainNamespaceString = object.getString("mainNamespace"); try { var sourceText = SourceTexts.string(mainNamespaceString.value()); var mainNamespace = SourceParser.parseNamespaceName(sourceText); return new BinConfig(name, mainNamespace); } catch (UnexpectedTokenException exception) { throw new ConfigError( MessageFormat.format( "Invalid namespace name.\n{0}\n\n{1}", exception.getMessage(), exception.source().describe() ), new FileFragmentSource(mainNamespaceString.sourceRange()) ); } } }