pub struct ReaderConfig {
pub max_segment_bytes: usize,
pub max_segments: Option<usize>,
pub max_input_bytes: Option<u64>,
pub max_messages: Option<usize>,
pub service_string_advice: Option<ServiceStringAdvice>,
}Expand description
Configuration for reader-based EDIFACT parsers.
Pass to from_reader_with_config or from_bufread_stream_with_config to
override default limits.
§Example
use edifact_rs::{ReaderConfig, from_reader_with_config};
let cfg = ReaderConfig::default().max_segment_bytes(4_096);
let segments: Vec<_> = from_reader_with_config(b"BGM+220+1+9'".as_ref(), cfg)
.collect::<Result<_, _>>()
.unwrap();
assert_eq!(segments[0].tag, "BGM");Fields§
§max_segment_bytes: usizeMaximum allowed segment byte length (excluding the segment terminator).
If a segment accumulates more bytes than this limit without a terminator
the parser returns EdifactError::SegmentTooLong. This prevents
unbounded allocation when processing malformed or adversarially crafted
input streams.
Default: 65 536 bytes (64 KiB). Real-world EDIFACT segments are almost always below 4 KiB; consider using a tighter limit for untrusted inputs.
max_segments: Option<usize>Maximum number of segments the input may contain.
A segment beyond this budget yields EdifactError::LimitExceeded.
Input that ends exactly at the limit is not a violation.
Default: None (unlimited).
max_input_bytes: Option<u64>Maximum number of input bytes the interchange may occupy.
A segment whose end offset passes this budget yields
EdifactError::LimitExceeded instead of the segment, so no data
beyond the cap is ever handed to the caller. Combine with
max_segment_bytes for defence in depth against oversized input.
Default: None (unlimited).
max_messages: Option<usize>Maximum number of EDIFACT messages (UNH/UNT pairs) the input may contain.
A segment belonging to a message beyond this budget yields
EdifactError::LimitExceeded.
Default: None (unlimited).
service_string_advice: Option<ServiceStringAdvice>Service characters to use instead of reading them from the input.
None — the default — discovers them the way ISO 9735-1 says a receiver
should: from a leading UNA if there is one, otherwise the §5.1 defaults
with the repetition separator resolved from UNB S001 DE 0002.
Set this when the input is a fragment that carries neither: a single
message lifted out of an interchange has no UNA and no UNB, so nothing
in it records the delimiters its interchange declared, and parsing it with
the defaults silently mis-splits every value.
Default: None.
Implementations§
Source§impl ReaderConfig
impl ReaderConfig
Sourcepub fn max_segment_bytes(self, limit: usize) -> Self
pub fn max_segment_bytes(self, limit: usize) -> Self
Set the maximum segment byte length and return self.
Sourcepub fn max_segments(self, limit: usize) -> Self
pub fn max_segments(self, limit: usize) -> Self
Set the maximum number of segments to yield and return self.
Sourcepub fn max_input_bytes(self, limit: u64) -> Self
pub fn max_input_bytes(self, limit: u64) -> Self
Set the maximum total input bytes to consume and return self.
Sourcepub fn max_messages(self, limit: usize) -> Self
pub fn max_messages(self, limit: usize) -> Self
Set the maximum number of EDIFACT messages (UNH/UNT pairs) to yield and return self.
Sourcepub fn with_service_string_advice(self, ssa: ServiceStringAdvice) -> Self
pub fn with_service_string_advice(self, ssa: ServiceStringAdvice) -> Self
Parse with these service characters instead of discovering them.
§Example
use edifact_rs::{ReaderConfig, ServiceStringAdvice, from_bytes_with_config};
// A message lifted out of an interchange whose UNA declared `;` and `~`.
let ssa = ServiceStringAdvice::from_bytes(b"UNA:;.? ~")?;
let config = ReaderConfig::default().with_service_string_advice(ssa);
let segments: Vec<_> = from_bytes_with_config(b"BGM;220;PO-4711~", config)
.collect::<Result<Vec<_>, _>>()?;
assert_eq!(segments[0].element_str(1), Some("PO-4711"));Trait Implementations§
Source§impl Clone for ReaderConfig
impl Clone for ReaderConfig
Source§fn clone(&self) -> ReaderConfig
fn clone(&self) -> ReaderConfig
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 ReaderConfig
Source§impl Debug for ReaderConfig
impl Debug for ReaderConfig
Auto Trait Implementations§
impl Freeze for ReaderConfig
impl RefUnwindSafe for ReaderConfig
impl Send for ReaderConfig
impl Sync for ReaderConfig
impl Unpin for ReaderConfig
impl UnsafeUnpin for ReaderConfig
impl UnwindSafe for ReaderConfig
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