pub struct ComponentRef { /* private fields */ }Expand description
Reference to a component data element within a composite data element.
Composites such as C507 (DTM date/time/period) are addressed by the
identifier of their own components (2005, 2380, 2379), which is what
makes code-addressed access — Segment::value_by_code
and #[edifact(element = "2005")] — resolve to the right slot instead of a
hand-counted index.
Fields are private to enforce the one-based position invariant.
Implementations§
Source§impl ComponentRef
impl ComponentRef
Sourcepub const fn new(
position: u8,
data_element: &'static str,
status: Status,
) -> Self
pub const fn new( position: u8, data_element: &'static str, status: Status, ) -> Self
Construct a ComponentRef with compile-time position validation.
position must be ≥ 1 (one-based). In a const context a zero
position is a compile-time error; at runtime it panics.
§Panics
Panics if position == 0.
§Example
use edifact_rs::{ComponentRef, Status};
const DTM_2005: ComponentRef = ComponentRef::new(1, "2005", Status::Mandatory);Sourcepub const fn repeated(
position: u8,
data_element: &'static str,
status: Status,
repeat_count: u8,
) -> Self
pub const fn repeated( position: u8, data_element: &'static str, status: Status, repeat_count: u8, ) -> Self
Declare a component the composite repeats by design.
Several standard composites carry the same data element several times
over: C080 PARTY NAME is 3036 five times followed by 3045, C059 STREET is 3042 four times. Spelling that out as five separate
new entries made the code count as five positions, so
resolve_code reported it
ambiguous and the component could
not be code-addressed at all — a faithful declaration was punished, and
the only way to use named access was to declare the composite
incompletely and disagree with the directory it claims to model.
One repeated entry is one position, so 3036 resolves to occurrence 1
— what “the party name” means in every real message — while the
definition still records that five slots belong to it.
position is the first slot; the next component follows at
position + repeat_count.
§Panics
Panics if position == 0 or repeat_count == 0.
§Example
use edifact_rs::{ComponentRef, ElementRef, SegmentDefinition, SegmentLayout, Status};
// C080 PARTY NAME: 3036 ×5, then 3045 at position 6.
static C080: &[ComponentRef] = &[
ComponentRef::repeated(1, "3036", Status::Mandatory, 5),
ComponentRef::new(6, "3045", Status::Conditional),
];
static NAD_ELEMENTS: &[ElementRef] = &[
ElementRef::new(1, "3035", Status::Mandatory, 1),
ElementRef::composite(4, "C080", Status::Conditional, 1, C080),
];
static NAD: SegmentDefinition = SegmentDefinition::new("NAD", "Name and address", NAD_ELEMENTS);
// Addressable, and it points at the first occurrence.
let path = NAD.resolve_code("3036")?;
assert_eq!((path.element, path.component), (3, Some(0)));Sourcepub const fn repeat_count(&self) -> u8
pub const fn repeat_count(&self) -> u8
How many consecutive slots this component occupies.
1 for a component declared with new.
Sourcepub const fn data_element(&self) -> &'static str
pub const fn data_element(&self) -> &'static str
UN/EDIFACT component data element identifier.
Sourcepub const fn with_repr(self, repr: Repr) -> Self
pub const fn with_repr(self, repr: Repr) -> Self
Attach the directory’s representation, e.g. an..35.
Without one, a definition still resolves identifiers and checks presence;
with one, DirectoryValidator also checks length and character class —
which is what a partner’s translator does before it rejects the file.
§Example
use edifact_rs::{ComponentRef, Repr, Status};
const SENDER: ComponentRef =
ComponentRef::new(1, "0004", Status::Mandatory).with_repr(Repr::an_up_to(35));Sourcepub const fn repr(&self) -> Option<Repr>
pub const fn repr(&self) -> Option<Repr>
The declared representation, if the definition states one.
Sourcepub const fn with_repr_by_syntax_version(
self,
up_to_v3: Repr,
from_v4: Repr,
) -> Self
pub const fn with_repr_by_syntax_version( self, up_to_v3: Repr, from_v4: Repr, ) -> Self
Declare a representation that changed between syntax versions.
The service directory has exactly one such position: S004 DE 0017, the
date of preparation. Version 3 transfers YYMMDD (n6); version 4
widened it to CCYYMMDD (n8) to be year-2000 correct. It is the only
place where version 4 is not a superset of version 3.
Declaring both keeps each version checked exactly. Collapsing them into
n..8 would have accepted a six-digit date in a version 4 interchange
and a seven-digit one in either — validating neither version correctly.
The syntax version comes from UNB S001 DE 0002. When it cannot be
determined — validating a bare message window, say — both are
accepted, because guessing would reject conformant data.
Sourcepub const fn repr_from_v4(&self) -> Option<Repr>
pub const fn repr_from_v4(&self) -> Option<Repr>
The representation used from syntax version 4 onward, when it differs.
Trait Implementations§
Source§impl Clone for ComponentRef
impl Clone for ComponentRef
Source§fn clone(&self) -> ComponentRef
fn clone(&self) -> ComponentRef
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ComponentRef
Auto Trait Implementations§
impl Freeze for ComponentRef
impl RefUnwindSafe for ComponentRef
impl Send for ComponentRef
impl Sync for ComponentRef
impl Unpin for ComponentRef
impl UnsafeUnpin for ComponentRef
impl UnwindSafe for ComponentRef
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more