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 now first-class fields. is_valid() checks
all six for mutual distinctness and printability so that a collision between
the repetition separator and any other delimiter 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 (default *; UNA byte 7, ISO 9735-4 §3.1).
Some DVGW gas-market profiles and other non-default EDIFACT implementations
use a non-standard repetition separator. This field is always populated
from the UNA (or defaults to b'*' when no UNA is present) 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 in
the printable ASCII range 0x21–0x7E.
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 b'*' 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 in the
printable ASCII range 0x21–0x7E and mutually distinct (10 pairwise
checks).
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
ASCII and distinct from the five mandatory characters and from the
configured repetition separator value.
Bytes outside 0x21–0x7E (for mandatory chars) or a non-space value
outside that range (for repetition_sep) are rejected because high-bytes
(>= 0x80) 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
Source§fn eq(&self, other: &ServiceStringAdvice) -> bool
fn eq(&self, other: &ServiceStringAdvice) -> bool
self and other values to be equal, and is used by ==.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