dpp-domain
Core domain types, port traits, and schema validation for the Odal Node Digital Product Passport system.
This is the foundational crate. All other dpp-* crates depend on it.
It contains everything that changes when EU regulations change — and nothing else.
When to use this crate
- You need the DPP data model:
Passport,SectorData,TransferChain. - You are implementing a platform adapter (database, HTTP layer) and need the
port trait interfaces:
PassportRepository,IdentityPort,PluginHost, etc. - You want to validate passport data against embedded JSON schemas.
Example
use ;
use SectorCatalog;
use Audience;
use json;
// Sector metadata is data, not code: regime, status, retention and per-field
// disclosure all come from the catalog manifests.
let catalog = new;
let battery = catalog.get.expect;
assert_eq!;
// The disclosure classes declared in that manifest are what the filter applies.
let policy = from_catalog
.expect;
let full = json!;
let public = filter_by_audience;
// State of health is per-item data — withheld from the public audience.
assert_eq!;
assert!;
Relationship to other crates
| Crate | Role |
|---|---|
dpp-crypto |
JWS signing and the keystore — no dependency in either direction |
dpp-vc |
Credentials, did:web and status lists — depends on this crate |
dpp-digital-link |
GS1 Digital Link parsing — depends on this crate |
dpp-aas |
AAS submodel mapping — depends on this crate |
dpp-registry |
EU Central Registry connector — depends on this crate |
dpp-plugin-traits |
Wasm plugin ABI — standalone, no dependency on this crate |
Minimum Rust version
1.96 (MSRV is enforced in CI)
License
Apache-2.0 — see LICENSE