Skip to main content

dpp_domain/
lib.rs

1//! `dpp-domain` — EU Digital Product Passport domain types and port traits.
2//!
3//! This crate is the dependency root of the DPP workspace. Every other crate
4//! depends on this one. It depends only on `dpp-rules` (pure regulatory rules).
5//!
6//! No I/O, no async, no HTTP, no database drivers — pure domain logic only.
7
8pub mod access;
9pub mod catalog;
10pub mod compliance;
11pub mod domain;
12pub mod ports;
13pub mod schemas;
14#[cfg(test)]
15mod test_support;
16
17pub use catalog::{CatalogError, RegulatoryStatus, SectorCatalog, SectorDescriptor};
18
19pub use domain::{
20    error::DppError,
21    gtin::{Gln, GlnError, Gtin, GtinError, gs1_check_digit},
22    identity::{
23        Audience, Disclosure, PASSPORT_FIELD_DISCLOSURE, PassportCredential,
24        PassportCredentialSubject, SignedCredential,
25    },
26    lint::{LintFinding, LintResult, LintSeverity, lint_sector_data},
27    passport::{
28        FacilitySnapshot, ManufacturerInfo, MaterialEntry, Passport, PassportId, PassportView,
29        ProductCategory,
30    },
31    product_identity::ProductIdentity,
32    sector::{
33        AluminiumData, BatteryChemistry, BatteryData, BatteryType, CarbonFootprint,
34        CarbonFootprintClass, CarbonFootprintClassError, ConstructionData, DetergentData,
35        ElectronicsData, EnergyEfficiencyClass, ExpectedLifetime, FibreEntry, FurnitureData,
36        HarmfulEvents, LifecycleStage, MaterialComposition, ProductionRoute, RepairCriterion,
37        RepairabilityScore, Sector, SectorData, StateOfHealth, SteelData, SurfactantEntry,
38        SvhcSubstance, SystemBoundary, TextileData, ToyData, TyreData, UnsoldGoodsDestination,
39        UnsoldGoodsReason, UnsoldGoodsReport, redact_sector_data, validate_fibre_composition,
40        validate_surfactants, validate_svhc_substances,
41    },
42    status::PassportStatus,
43    transfer::{
44        OperatorRole, ResponsibleOperator, TransferChain, TransferError, TransferReason,
45        TransferRecord, TransferStatus,
46    },
47};
48
49pub use domain::field_error::{FieldError, ValidationErrors};
50
51#[cfg(not(target_arch = "wasm32"))]
52pub use domain::validation::{
53    BatchValidationItem, SectorValidator, SectorValidatorRegistry, batch_errors,
54    validate_raw_sector_data, validate_sector_data, validate_sector_data_batch,
55    validate_sector_data_with_registry,
56};
57
58pub use ports::archive::{
59    ArchivePort, ArchiveReceipt, ArchiveStatus, ArchiveVerification, GhostArchive,
60};
61pub use ports::compliance::{
62    ComplianceError, ComplianceErrorKind, ComplianceFinding, ComplianceRegistry, ComplianceResult,
63    ComplianceStatus, ComplianceStrategy, gate_determination,
64};
65pub use ports::registry_sync::{
66    GhostRegistrySync, RegistrationRequest, RegistryIdentifiers, RegistryRecord, RegistryStatus,
67    RegistrySyncPort,
68};
69
70pub use compliance::passthrough_registry::PassthroughRegistry;
71
72/// Compile-checks this crate's README examples.
73///
74/// A README example is a public claim about the API, and nothing else in the
75/// build compiles one. Without this, a README can advertise a function that
76/// does not exist — which is exactly what happened before this harness landed.
77#[cfg(doctest)]
78#[doc = include_str!("../README.md")]
79struct ReadmeDoctests;