Repository navigation
How to use library for functions? #259
Copy link
Copy link
Open
Description
How can I convert the "greet" example into a lib please?
This does not work:
import org.projectnessie.cel.EnvOption;
import org.projectnessie.cel.Library;
import org.projectnessie.cel.ProgramOption;
import org.projectnessie.cel.checker.Decls;
import org.projectnessie.cel.interpreter.functions.Overload;
import java.util.List;
import static org.projectnessie.cel.common.types.StringT.stringOf;
public class GreetLib implements Library {
@Override
public List<EnvOption> getCompileOptions() {
return List.of(
EnvOption.declarations(
List.of(
Decls.newVar("i", Decls.String),
Decls.newVar("you", Decls.String),
Decls.newFunction(
"greet",
Decls.newInstanceOverload(
"string_greet_string", List.of(Decls.String, Decls.String), Decls.String)))
)
);
}
@Override
public List<ProgramOption> getProgramOptions() {
return List.of(
ProgramOption.functions(
Overload.binary(
"string_greet_string",
(lhs, rhs) ->
stringOf(String.format("Hello %s! Nice to meet you, I'm %s.\n", rhs,
lhs))))
);
}
} @Test
void merge() throws Exception {
String greeting = ScriptHost
.newBuilder()
.build()
.buildScript("i.greet(you)")
.withLibraries(new GreetLib())
.build()
.execute(String.class, Map.of("i", "alex", "you", "you"));
assertEquals("hello alex", greeting);
}Results in:
org.projectnessie.cel.tools.ScriptExecutionException: no such overload: string.greet[](string)
at org.projectnessie.cel.tools.Script.evaluate(Script.java:59)
at org.projectnessie.cel.tools.Script.execute(Script.java:45)
at com.intuit.pavedroad.apimanagement.exteventingestorapp.rest.services.cel.GreetLibTest.merge(GreetLibTest.java:33)
Reacted by Andre Wachsmuth
Metadata
Metadata
Assignees
Labels
No labels
Activity
alexec commentedon Sep 13, 2022
Looks like it might be a bug:
cel-java/tools/src/main/java/org/projectnessie/cel/tools/ScriptHost.java
Line 138 in c966875
Where is the call to
getProgramOptionsthis func should contain?@snazy thoughts? Is this a bug?
XN137 commentedon Nov 11, 2022
getProgramOptionsis used here:cel-java/core/src/main/java/org/projectnessie/cel/Library.java
Lines 54 to 66 in c966875
which gets used here in
ScriptHost:cel-java/tools/src/main/java/org/projectnessie/cel/tools/ScriptHost.java
Lines 123 to 125 in c966875
also note that we have a test for
ScriptHostwith a custom library here:cel-java/tools/src/test/java/org/projectnessie/cel/tools/ScriptHostTest.java
Lines 116 to 139 in 5749d57
from that example i am guessing you should be using
"greet"instead of"string_greet_string"in yourgetProgramOptions()?if not, feel free to extend the testcase with a failing example and possible fix in a PR please