A Kotlin library that models, builds, serializes and normalizes UCAST boolean expressions — the JSON-based format also adopted in OPA - Open Policy Agent, see docs.
ucast-lib provides:
- A type-safe model of UCAST expressions (
CompoundExpression,FieldExpression). - A Kotlin DSL for building expressions ergonomically.
- JSON serialization in two dialects: expanded and concise.
- A normalization primitive that converts an arbitrary expression into Disjunctive Normal Form.
Choose the version that matches the Jackson major version used in your project.
| Your Jackson dependency | ucast version to use |
|---|---|
com.fasterxml.jackson (Jackson 2.x) |
0.0.0 |
tools.jackson (Jackson 3.x) |
1.0.0 |
Jackson 3.x projects (tools.jackson)
<dependency>
<groupId>dev.disaverio</groupId>
<artifactId>ucast</artifactId>
<version>1.0.0</version>
</dependency>Jackson 2.x projects (com.fasterxml.jackson)
<dependency>
<groupId>dev.disaverio</groupId>
<artifactId>ucast</artifactId>
<version>0.0.0</version>
</dependency>Jackson 3.x projects (tools.jackson)
dependencies {
implementation("dev.disaverio:ucast:1.0.0")
}Jackson 2.x projects (com.fasterxml.jackson)
dependencies {
implementation("dev.disaverio:ucast:0.0.0")
}import dev.disaverio.ucast.dsl.*
val expr = and {
"age" gte 18
or {
"role" eq "admin"
"department" `in` listOf("eng", "sec")
}
not {
"status" eq "banned"
}
}The two supported syntaxes are documented under src/main/resources/definitions as resources:
- Expanded grammar — JSON Schema available in
ucast-grammar.json. - Concise grammar — sugared form with implicit-AND objects and field shorthand.
Note: the concise dialect is currently emit-only; deserialization supports the expanded form only.
Requires JDK 17+.
mvn clean testApache License 2.0 — see LICENSE.