diff --git a/smithy-build/src/main/java/software/amazon/smithy/build/plugins/IDLPlugin.java b/smithy-build/src/main/java/software/amazon/smithy/build/plugins/IDLPlugin.java new file mode 100644 index 00000000000..195bd0041b4 --- /dev/null +++ b/smithy-build/src/main/java/software/amazon/smithy/build/plugins/IDLPlugin.java @@ -0,0 +1,46 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +package software.amazon.smithy.build.plugins; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; +import software.amazon.smithy.build.PluginContext; +import software.amazon.smithy.build.SmithyBuildPlugin; +import software.amazon.smithy.model.shapes.SmithyIdlModelSerializer; + +public class IDLPlugin implements SmithyBuildPlugin { + private static final String NAME = "idl"; + + @Override + public String getName() { + return NAME; + } + + @Override + public void execute(PluginContext context) { + boolean includePrelude = context.getSettings().getBooleanMemberOrDefault("includePreludeShapes"); + SmithyIdlModelSerializer.Builder builder = SmithyIdlModelSerializer.builder() + .basePath(context.getFileManifest().getBaseDir()); + if (includePrelude) { + builder.serializePrelude(); + } + Map serialized = builder.build().serialize(context.getModel()); + try { + Files.createDirectories(context.getFileManifest().getBaseDir()); + for (Map.Entry entry : serialized.entrySet()) { + context.getFileManifest().writeFile(entry.getKey(), entry.getValue()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean requiresValidModel() { + return false; + } +} diff --git a/smithy-build/src/main/resources/META-INF/services/software.amazon.smithy.build.SmithyBuildPlugin b/smithy-build/src/main/resources/META-INF/services/software.amazon.smithy.build.SmithyBuildPlugin index 877981b575f..abd745c0a44 100644 --- a/smithy-build/src/main/resources/META-INF/services/software.amazon.smithy.build.SmithyBuildPlugin +++ b/smithy-build/src/main/resources/META-INF/services/software.amazon.smithy.build.SmithyBuildPlugin @@ -3,3 +3,4 @@ software.amazon.smithy.build.plugins.ModelPlugin software.amazon.smithy.build.plugins.SourcesPlugin software.amazon.smithy.build.plugins.NullabilityReportPlugin software.amazon.smithy.build.plugins.RunPlugin +software.amazon.smithy.build.plugins.IDLPlugin