package org.shedlang.compiler.backends; import org.shedlang.compiler.backends.paths.TargetDir; import org.shedlang.compiler.backends.targets.ShedTarget; import org.shedlang.compiler.config.ProfileConfig; import org.shedlang.compiler.config.ProjectConfig; import org.shedlang.compiler.shid.ShidNamespace; import org.shedlang.compiler.shid.ShidSerializer; import org.shedlang.compiler.typechecker.TypeInfos; import java.io.IOException; import java.nio.file.Files; import java.util.List; import java.util.Optional; public class ShidTextBackend implements Backend { public static final BackendFactory FACTORY = new BackendFactory() { @Override public String name() { return "shid-text"; } @Override public Optional backendForTarget(ShedTarget target) { if (target == ShedTarget.SHID_TEXT) { return Optional.of(ShidTextBackend.INSTANCE); } else { return Optional.empty(); } } }; public static final ShidTextBackend INSTANCE = new ShidTextBackend(); private ShidTextBackend() { } @Override public void compile( ProjectConfig config, ProfileConfig profileConfig, List namespaces, TypeInfos typeInfos, TargetDir targetDir ) throws IOException { for (var namespace : namespaces) { var builder = new StringBuilder(); ShidSerializer.serializeBlock(namespace.body(), builder); var instructionsString = builder.toString(); var path = targetDir.namespace(namespace.namespaceName()) .withExtension(".shid-text"); Files.createDirectories(path.getParent()); Files.writeString(path, instructionsString); } } @Override public String targetName() { return "shid-text"; } }