pub struct InstrumentRef {
pub instrument: String,
pub recorded: RecordedBasis,
}Expand description
One legal instrument recorded on a passport as applicable to it.
§Recorded, never recomputed
The applicable set is fixed when the product is placed on the market —
placedOnMarketDate on the passport is the same moment — and is never
re-derived afterwards. Two reasons, and the second is the load-bearing one:
- The law that governs a product is the law at placing on the market. Recomputing later would silently re-govern a published record by acts adopted after it was issued.
- There is no function to recompute it with. Applicable instruments are
not derivable from the product group — see
RecordedBasis::Operator— so any “refresh” would quietly narrow the set to whatever the catalog happens to know, dropping exactly the entries a human had to supply.
It is therefore a protected field: not patchable, not in the retention-mutable set, and corrected only by superseding the passport with a new version. A mis-recorded legal basis is a fact about a published record, and the way to fix a published record is to publish a corrected one.
§Why there is no timestamp here
An earlier shape carried a per-entry recordedAt. It was redundant —
the whole set is written at issuance, so every entry’s timestamp equalled the
passport’s own createdAt — and a redundant copy of a date is a date that
can disagree with the one it duplicates.
Removing it also sidesteps a live hazard worth knowing about: the access
filter classifies nested keys by name, not by path, using a policy built
from the product group’s schema. The battery schema declares its own
recordedAt as individual-tier data (Annex XIII point 4), so this field’s
timestamp inherited that class and was redacted out of every public battery
projection — leaving a document that no longer deserialised. Any envelope
field whose nested key name collides with a product-group field name will hit
the same thing.
Fields§
§instrument: StringThe instrument’s catalog id, e.g. "battery-reg-2023-1542".
Free-form rather than validated against the catalog, for the same reason
RecordedBasis::Operator exists: an act the catalog does not model is
still an act, and refusing to record it would lose the one piece of
information nothing else can supply.
recorded: RecordedBasisWho asserted that this act applies.
Implementations§
Source§impl InstrumentRef
impl InstrumentRef
Sourcepub fn from_catalog(instrument: impl Into<String>) -> Self
pub fn from_catalog(instrument: impl Into<String>) -> Self
A reference resolved from the instrument catalog.
Sourcepub fn from_operator(instrument: impl Into<String>) -> Self
pub fn from_operator(instrument: impl Into<String>) -> Self
A reference asserted by the economic operator.
Trait Implementations§
Source§impl Clone for InstrumentRef
impl Clone for InstrumentRef
Source§impl Debug for InstrumentRef
impl Debug for InstrumentRef
Source§impl<'de> Deserialize<'de> for InstrumentRef
impl<'de> Deserialize<'de> for InstrumentRef
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for InstrumentRef
Source§impl PartialEq for InstrumentRef
impl PartialEq for InstrumentRef
Source§impl Serialize for InstrumentRef
impl Serialize for InstrumentRef
impl StructuralPartialEq for InstrumentRef
Auto Trait Implementations§
impl Freeze for InstrumentRef
impl RefUnwindSafe for InstrumentRef
impl Send for InstrumentRef
impl Sync for InstrumentRef
impl Unpin for InstrumentRef
impl UnsafeUnpin for InstrumentRef
impl UnwindSafe for InstrumentRef
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.