Add associative map constraints and range refinement

This commit is contained in:
2026-08-14 06:26:15 +09:00
parent 8198b615a8
commit cc6ab40807
52 changed files with 8951 additions and 6918 deletions
+6 -2
View File
@@ -41,10 +41,10 @@ engine.bind_global(
A user source can then refer to `Service` without importing it.
```dcdl
Service & {
{
name = "api";
port = 9443;
}
} as Service
```
## HostValue
@@ -60,6 +60,7 @@ HostValue =
Bool
Array(Vec<HostValue>)
ArrayConstraint { item, constraints, default }
MapConstraint { value, constraints, default }
Object(Vec<HostField>)
Abstract { constraints, default }
```
@@ -69,6 +70,9 @@ When a host value is bound, the engine internalizes it into `RuntimeValue` and a
`HostValue::array_of(item)` builds an array constraint with a required element schema.
There is no host API for an unconstrained abstract array.
`HostValue::map_of(value)` builds a map constraint whose arbitrary object field values must satisfy `value`.
`BTreeMap<String, T>` and, with `std`, `HashMap<String, T>` implement `DecodalSchema`, `DecodalDecode`, and `IntoHostValue` using this representation.
## Abstract host objects
A host-provided schema object is represented as a concrete object structure whose fields may contain abstract values.