Skip to content

Commit 880d375

Browse files
joewyzmtdowling
authored andcommitted
Add complie method for EndpointRuleSet in RulesEngineBuilder
1 parent 5744e9b commit 880d375

File tree

2 files changed

+21
-8
lines changed
  • client/client-rulesengine/src/main/java/software/amazon/smithy/java/client/rulesengine
  • codegen/plugins/client-codegen/src/main/java/software/amazon/smithy/java/codegen/client/generators

2 files changed

+21
-8
lines changed

client/client-rulesengine/src/main/java/software/amazon/smithy/java/client/rulesengine/RulesEngineBuilder.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
import java.util.ServiceLoader;
1818
import java.util.function.Function;
1919
import software.amazon.smithy.java.context.Context;
20+
import software.amazon.smithy.rulesengine.language.EndpointRuleSet;
21+
import software.amazon.smithy.rulesengine.logic.bdd.NodeReversal;
22+
import software.amazon.smithy.rulesengine.logic.bdd.SiftingOptimization;
23+
import software.amazon.smithy.rulesengine.logic.cfg.Cfg;
2024
import software.amazon.smithy.rulesengine.traits.EndpointBddTrait;
2125

2226
/**
@@ -108,6 +112,20 @@ public Bytecode compile(EndpointBddTrait bdd) {
108112
return new BytecodeCompiler(extensions, bdd, functions, builtinProviders).compile();
109113
}
110114

115+
/**
116+
* Compile BDD rules into a {@link Bytecode}.
117+
*
118+
* @param rules Endpoint Rules to compile.
119+
* @return the compiled program.
120+
*/
121+
public Bytecode compile(EndpointRuleSet rules) {
122+
var cfg = Cfg.from(rules);
123+
var originalTrait = EndpointBddTrait.from(cfg);
124+
var optimizedTrait = SiftingOptimization.builder().cfg(cfg).build().apply(originalTrait);
125+
var reversedTrait = new NodeReversal().apply(optimizedTrait);
126+
return compile(reversedTrait);
127+
}
128+
111129
/**
112130
* Load bytecode from a file path.
113131
*

codegen/plugins/client-codegen/src/main/java/software/amazon/smithy/java/codegen/client/generators/BddFileGenerator.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import software.amazon.smithy.java.codegen.CodeGenerationContext;
1717
import software.amazon.smithy.java.codegen.JavaCodegenSettings;
1818
import software.amazon.smithy.model.shapes.ServiceShape;
19-
import software.amazon.smithy.rulesengine.logic.cfg.Cfg;
2019
import software.amazon.smithy.rulesengine.traits.EndpointBddTrait;
2120
import software.amazon.smithy.rulesengine.traits.EndpointRuleSetTrait;
2221

@@ -40,15 +39,11 @@ public void accept(GenerateServiceDirective<CodeGenerationContext, JavaCodegenSe
4039
}
4140

4241
private Bytecode compileBytecode(ServiceShape serviceShape) {
43-
EndpointBddTrait bddTrait;
42+
var engineBuilder = new RulesEngineBuilder();
4443
if (serviceShape.hasTrait(EndpointBddTrait.ID)) {
45-
bddTrait = serviceShape.expectTrait(EndpointBddTrait.class);
44+
return engineBuilder.compile(serviceShape.expectTrait(EndpointBddTrait.class));
4645
} else {
47-
var endpointRuleSet = serviceShape.expectTrait(EndpointRuleSetTrait.class).getEndpointRuleSet();
48-
var cfg = Cfg.from(endpointRuleSet);
49-
bddTrait = EndpointBddTrait.from(cfg);
46+
return engineBuilder.compile(serviceShape.expectTrait(EndpointRuleSetTrait.class).getEndpointRuleSet());
5047
}
51-
var engineBuilder = new RulesEngineBuilder();
52-
return engineBuilder.compile(bddTrait);
5348
}
5449
}

0 commit comments

Comments
 (0)