pub struct ServiceStringAdvice {
pub element_sep: u8,
pub component_sep: u8,
pub release_char: u8,
pub decimal_mark: u8,
pub repetition_sep: u8,
pub segment_term: u8,
}Expand description
EDIFACT service string advice (UNA segment).
Defaults: + (element), : (component), ? (release), . (decimal mark),
* (repetition separator), ' (segment terminator).
All six service characters are first-class fields. is_valid
checks all six for mutual distinctness and for being printable, non-alphanumeric
ASCII, so a collision between the repetition separator and any other delimiter —
or a delimiter that would clash with segment-tag characters — is caught at UNA
parse time.
Fields§
§element_sep: u8Data element separator (default +)
component_sep: u8Component data element separator (default :)
release_char: u8Release character (default ?)
decimal_mark: u8Decimal notation mark (default .; UNA byte 5, ISO 9735-1 §7.1).
Not used by the tokenizer for splitting, but preserved for downstream use.
repetition_sep: u8Repetition separator (UNA byte 7, ISO 9735-4 §3.1).
Defaults to space (0x20), the conventional “not used” sentinel, when no
UNA is present. Some DVGW gas-market profiles and other non-default
EDIFACT implementations declare a real repetition separator here; this
field is always populated from the UNA so that downstream code can access
it without re-parsing the raw UNA bytes.
The tokenizer does not currently split on the repetition separator — that
responsibility belongs to downstream consumers — but is_valid() includes
it in the six-way uniqueness check to catch delimiter collisions early.
segment_term: u8Segment terminator (default ')
Implementations§
Source§impl ServiceStringAdvice
impl ServiceStringAdvice
Sourcepub fn from_bytes(input: &[u8]) -> Result<Self, EdifactError>
pub fn from_bytes(input: &[u8]) -> Result<Self, EdifactError>
Parse a UNA header and validate that all six service characters
(element_sep, component_sep, decimal_mark, release_char,
repetition_sep, and segment_term) are mutually distinct and are
printable, non-alphanumeric ASCII. See is_valid for
the exact rule.
Returns EdifactError::InvalidUna if the invariant is violated.
Falls back to ServiceStringAdvice::default when no UNA is present.
This is the safe, default constructor — always use this for input from
an external source. For trusted or internal use where delimiter uniqueness
is already guaranteed, use from_bytes_unchecked.
Sourcepub fn from_bytes_unchecked(input: &[u8]) -> Self
pub fn from_bytes_unchecked(input: &[u8]) -> Self
Parse a UNA header from the beginning of an EDIFACT interchange without validating delimiter uniqueness or printability.
If no UNA is present, returns ServiceStringAdvice::default.
The repetition_sep field is populated from UNA byte 7 (ISO 9735-4 §3.1)
or defaults to space (0x20, the “not used” sentinel) when no UNA is present.
§When to use
Use this only for trusted internal data (e.g. round-tripping data where the UNA invariant is already guaranteed) or in fuzz/property tests that intentionally explore degenerate delimiter combinations.
For any external or user-provided input, prefer from_bytes
which validates delimiter uniqueness and rejects invalid bytes.
Sourcepub fn is_valid(&self) -> bool
pub fn is_valid(&self) -> bool
Return true if all active service characters are mutually distinct
and printable ASCII.
The five mandatory characters (element_sep, component_sep,
decimal_mark, release_char, segment_term) must all be printable,
non-alphanumeric ASCII (0x21–0x7E, excluding 0-9A-Za-z) and
mutually distinct (10 pairwise checks). Alphanumerics are rejected
because segment tags are written verbatim and cannot be escaped, so a
letter delimiter would make tags containing it unrepresentable.
The repetition_sep field is also validated when it is not a space
(0x20). A space at position 7 of the UNA is the conventional
“absent” sentinel used by interchanges that do not employ repetition
elements (ISO 9735-1 / ISO 9735-4 §3.1), and it is accepted without
a printability or uniqueness check. Any other value must be printable
non-alphanumeric ASCII and distinct from all five mandatory characters.
High bytes (>= 0x80) are rejected because they would incorrectly bisect
multi-byte UTF-8 sequences, and DEL (0x7F) is a non-printable control
character.
Trait Implementations§
Source§impl Clone for ServiceStringAdvice
impl Clone for ServiceStringAdvice
Source§fn clone(&self) -> ServiceStringAdvice
fn clone(&self) -> ServiceStringAdvice
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 ServiceStringAdvice
Source§impl Debug for ServiceStringAdvice
impl Debug for ServiceStringAdvice
Source§impl Default for ServiceStringAdvice
impl Default for ServiceStringAdvice
impl Eq for ServiceStringAdvice
Source§impl PartialEq for ServiceStringAdvice
impl PartialEq for ServiceStringAdvice
impl StructuralPartialEq for ServiceStringAdvice
Auto Trait Implementations§
impl Freeze for ServiceStringAdvice
impl RefUnwindSafe for ServiceStringAdvice
impl Send for ServiceStringAdvice
impl Sync for ServiceStringAdvice
impl Unpin for ServiceStringAdvice
impl UnsafeUnpin for ServiceStringAdvice
impl UnwindSafe for ServiceStringAdvice
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