Dependencies updated: - cc: 1.2.29 -> 1.2.31 - chrono-tz: 0.10.3 -> 0.10.4 - clap: 4.5.40 -> 4.5.42 - clap_builder: 4.5.40 -> 4.5.42 - clap_derive: 4.5.40 -> 4.5.41 - phf: 0.11.3 -> 0.12.1 - phf_shared: 0.11.3 -> 0.12.1 - rand: 0.9.1 -> 0.9.2 - rb-sys: 0.9.116 -> 0.9.117 - rb-sys-build: 0.9.116 -> 0.9.117 - redox_syscall: 0.5.13 -> 0.5.17 - rustix: 1.0.7 -> 1.0.8 - serde_json: 1.0.140 -> 1.0.142 - windows-targets: 0.53.2 -> 0.53.3 - winnow: 0.7.11 -> 0.7.12 Removed obsolete build dependencies: - chrono-tz-build, parse-zoneinfo, phf_codegen, phf_generator, rand_core Updated in: main, ffi, java, python, ruby, and wasm bindings Added *.sln to .gitignore to exclude Visual Studio solution files Also fix python publishing pipeline by removing non-existent dependency. Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
Regorus Java
Regorus is
- Rego-Rus(t) - A fast, light-weight Rego interpreter written in Rust.
- Rigorous - A rigorous enforcer of well-defined Rego semantics.
See main Regorus page for more details about the project.
Building
Due to operational overhead we don't publish Java bindings to Maven Central currently (see https://github.com/microsoft/regorus/issues/237) and you need to build from source to use it.
In order to build Regorus Java for a target platform, you need to install Rust target for that platform first:
$ rustup target add aarch64-apple-darwin
Afterwards, you can build native library for that target using:
$ cargo build --release --target aarch64-apple-darwin
You will then have a native library at target/aarch64-apple-darwin/release/libregorus_java.dylib depending on your target.
You then need to build Java bindings using:
$ mvn package
And you will have a JAR at ./target/regorus-java-0.1.5.jar.
Usage
You can use Regorus Java bindings as:
import com.microsoft.regorus.Engine;
public class Test {
public static void main(String[] args) {
try (Engine engine = new Engine()) {
engine.addPolicy(
"hello.rego",
"package test\nmessage = concat(\", \", [input.message, data.message])"
);
engine.addDataJson("{\"message\":\"World!\"}");
engine.setInputJson("{\"message\":\"Hello\"}");
String resJson = engine.evalQuery("data.test.message");
System.out.println(resJson);
}
}
}
You need to ensure artifacts built in previous section are in Java's classpath.
For example with java CLI:
$ java -Djava.library.path=../../target/aarch64-apple-darwin/release/ -cp target/regorus-java-0.1.5.jar Test.java
should gave you the output:
{"result":[{"expressions":[{"value":"Hello, World!","text":"data.test.message","location":{"row":1,"col":1}}]}]}