44 */
55package software .amazon .smithy .python .codegen .types ;
66
7- import java . util . Collection ;
8- import java . util . Set ;
7+ import static software . amazon . smithy . python . codegen . types . CreateSyntheticService . SYNTHETIC_SERVICE_ID ;
8+
99import software .amazon .smithy .build .PluginContext ;
1010import software .amazon .smithy .build .SmithyBuildPlugin ;
1111import software .amazon .smithy .codegen .core .directed .CodegenDirector ;
12- import software .amazon .smithy .model .Model ;
13- import software .amazon .smithy .model .loader .Prelude ;
14- import software .amazon .smithy .model .shapes .OperationShape ;
15- import software .amazon .smithy .model .shapes .ServiceShape ;
16- import software .amazon .smithy .model .shapes .Shape ;
17- import software .amazon .smithy .model .shapes .ShapeId ;
18- import software .amazon .smithy .model .shapes .ShapeType ;
19- import software .amazon .smithy .model .shapes .StructureShape ;
20- import software .amazon .smithy .model .traits .ErrorTrait ;
21- import software .amazon .smithy .model .traits .InputTrait ;
22- import software .amazon .smithy .model .traits .MixinTrait ;
23- import software .amazon .smithy .model .traits .OutputTrait ;
2412import software .amazon .smithy .model .transform .ModelTransformer ;
2513import software .amazon .smithy .python .codegen .GenerationContext ;
2614import software .amazon .smithy .python .codegen .PythonSettings ;
2715import software .amazon .smithy .python .codegen .integrations .PythonIntegration ;
2816import software .amazon .smithy .python .codegen .writer .PythonWriter ;
2917
3018public final class PythonTypeCodegenPlugin implements SmithyBuildPlugin {
31- private static final String SYNTHETIC_NAMESPACE = "smithy.synthetic" ;
32- private static final ShapeId SYNTHETIC_SERVICE_ID = ShapeId .fromParts (SYNTHETIC_NAMESPACE , "TypesGenService" );
33- private static final ShapeId SYNTHETIC_OPERATION_ID = ShapeId .fromParts (SYNTHETIC_NAMESPACE , "TypesGenOperation" );
34- private static final ShapeId SYNTHETIC_INPUT_ID = ShapeId .fromParts (SYNTHETIC_NAMESPACE , "TypesGenOperationInput" );
35- private static final Set <ShapeType > GENERATED_TYPES = Set .of (
36- ShapeType .STRUCTURE ,
37- ShapeType .UNION ,
38- ShapeType .ENUM ,
39- ShapeType .INT_ENUM );
4019
4120 @ Override
4221 public String getName () {
@@ -54,7 +33,9 @@ public void execute(PluginContext context) {
5433
5534 var model = context .getModel ();
5635 if (typeSettings .service ().isEmpty ()) {
57- model = addSyntheticService (model , typeSettings .selector ().select (model ), typeSettings );
36+ var transformer =
37+ new CreateSyntheticService (typeSettings .selector (), typeSettings .generateInputsAndOutputs ());
38+ model = transformer .transform (ModelTransformer .create (), model );
5839 }
5940
6041 runner .settings (pythonSettings );
@@ -66,42 +47,4 @@ public void execute(PluginContext context) {
6647 runner .performDefaultCodegenTransforms ();
6748 runner .run ();
6849 }
69-
70- private Model addSyntheticService (Model model , Collection <Shape > shapes , PythonTypeCodegenSettings settings ) {
71- StructureShape .Builder inputBuilder = StructureShape .builder ()
72- .id (SYNTHETIC_INPUT_ID )
73- .addTrait (new InputTrait ());
74-
75- OperationShape .Builder operationBuilder = OperationShape .builder ()
76- .id (SYNTHETIC_OPERATION_ID )
77- .input (SYNTHETIC_INPUT_ID );
78-
79- ServiceShape .Builder serviceBuilder = ServiceShape .builder ()
80- .id (SYNTHETIC_SERVICE_ID );
81-
82- var index = 0 ;
83- for (Shape shape : shapes ) {
84- if (!GENERATED_TYPES .contains (shape .getType ())
85- || shape .hasTrait (MixinTrait .class )
86- || Prelude .isPreludeShape (shape )) {
87- continue ;
88- }
89-
90- if (!settings .generateInputsAndOutputs ()
91- && (shape .hasTrait (InputTrait .class ) || shape .hasTrait (OutputTrait .class ))) {
92- continue ;
93- }
94-
95- if (shape .hasTrait (ErrorTrait .class )) {
96- operationBuilder .addError (shape .getId ());
97- } else {
98- inputBuilder .addMember ("member" + index , shape .getId ());
99- index ++;
100- }
101- }
102-
103- var service = serviceBuilder .addOperation (SYNTHETIC_OPERATION_ID ).build ();
104- ModelTransformer transformer = ModelTransformer .create ();
105- return transformer .replaceShapes (model , Set .of (inputBuilder .build (), operationBuilder .build (), service ));
106- }
10750}
0 commit comments