pub struct Contrl { /* private fields */ }Expand description
A CONTRL message under construction.
Build one with receipt, acknowledgement,
or from_report, then render it with
segments or to_edifact_string.
The message reference defaults to the subject interchange’s control reference,
which keeps a CONTRL traceable to what it answers without the caller having
to invent one; override it with
with_message_reference.
Implementations§
Source§impl Contrl
impl Contrl
Sourcepub fn receipt(interchange: &InterchangeEnvelope) -> Self
pub fn receipt(interchange: &InterchangeEnvelope) -> Self
The receipt message of ISO 9735-4 §5.3.1 — action code 8.
Says only that the interchange arrived. It carries no per-message reporting, because nothing has been checked yet.
Sourcepub fn acknowledgement(subject: &ValidatedInterchange) -> Self
pub fn acknowledgement(subject: &ValidatedInterchange) -> Self
Acknowledge a clean interchange — action code 7 throughout.
Every message is acknowledged implicitly by the UCI, so no UCM is
emitted: §5.3.4 makes explicit acknowledgement of every message redundant
when the interchange level already says so.
Sourcepub fn from_report(
subject: &ValidatedInterchange,
segments: &[Segment<'_>],
report: &ValidationReport,
) -> Self
pub fn from_report( subject: &ValidatedInterchange, segments: &[Segment<'_>], report: &ValidationReport, ) -> Self
Report the outcome of a validation run.
segments is the subject interchange as parsed — it is what turns an
issue’s byte span into the segment position UCS DE 0096 needs, so
findings land at the right place rather than all piling up on the UCI.
§Where a rejection lands
Action code 4 means “this level and all lower levels rejected”, so
putting it on the UCI because one message was bad would reject every
other message in the interchange too. §5.3.2 pairs it with code 7 —
“this level acknowledged, next lower level acknowledged if not
explicitly rejected” — and that is the combination used here:
- A fault in the interchange envelope itself rejects the
UCI, and nothing follows, because everything below is implicitly rejected. - A fault in a group’s
UNG/UNErejects that group’sUCF. - A fault inside a message leaves both above it at
7and rejects only that message’sUCM.
Warnings are reported but reject nothing, which matches the way
ValidationReport already separates the two.
§Grouped interchanges
§5.3.1 makes segment groups 1 and 3 mutually exclusive: a subject that
uses UNG/UNE is reported through UCF, and one that does not is
reported through UCM directly under the UCI. Which shape you get
follows the subject — there is nothing to configure.
Sourcepub fn with_message_reference(self, reference: impl Into<String>) -> Self
pub fn with_message_reference(self, reference: impl Into<String>) -> Self
Set the UNH message reference (DE 0062) of the CONTRL itself.
Defaults to the subject interchange’s control reference.
Sourcepub fn with_interchange_error(self, error: SyntaxError) -> Self
pub fn with_interchange_error(self, error: SyntaxError) -> Self
Record an interchange-level error on the UCI.
Ignored when error is not permitted at the interchange level by
ISO 9735-4 Annex A — a CONTRL carrying a code its level may not use is
one the partner’s translator rejects, which helps nobody.
Sourcepub const fn action(&self) -> Action
pub const fn action(&self) -> Action
The verdict this message carries at the interchange level.
Sourcepub fn message_reference(&self) -> &str
pub fn message_reference(&self) -> &str
The UNH message reference this CONTRL will carry.
Sourcepub fn segments(&self) -> Vec<OwnedSegment>
pub fn segments(&self) -> Vec<OwnedSegment>
Render the message as segments, UNH through UNT.
UNT DE 0074 is computed from what was actually emitted, so the count is
right by construction rather than by the caller remembering to update it.
Sourcepub fn to_bytes(&self) -> Result<Vec<u8>, EdifactError>
pub fn to_bytes(&self) -> Result<Vec<u8>, EdifactError>
Render the message to EDIFACT bytes, without an interchange envelope.
§Errors
Propagates any writer failure.
Sourcepub fn to_edifact_string(&self) -> Result<String, EdifactError>
pub fn to_edifact_string(&self) -> Result<String, EdifactError>
Render the message to an EDIFACT string, without an interchange envelope.
§Errors
As to_bytes, plus EdifactError::InvalidUtf8.
Sourcepub fn to_interchange_bytes(
&self,
syntax_identifier: &str,
syntax_version: &str,
date: &str,
time: &str,
control_reference: &str,
) -> Result<Vec<u8>, EdifactError>
pub fn to_interchange_bytes( &self, syntax_identifier: &str, syntax_version: &str, date: &str, time: &str, control_reference: &str, ) -> Result<Vec<u8>, EdifactError>
Wrap the message in its own interchange and render it.
ISO 9735-4 §5.3 requires a CONTRL to travel in an interchange of its
own and never inside a group, so this is the form to actually send. The
sender and recipient are swapped relative to the subject interchange,
because the reply goes back the way it came.
§Example
let wire = Contrl::acknowledgement(&validated)
.to_interchange_string("UNOC", "3", "260101", "0930", "ACK-1")?;
// The reply is addressed back to the original sender.
assert!(wire.starts_with("UNB+UNOC:3+RECEIVER+SENDER+260101:0930+ACK-1'"));
assert!(wire.ends_with("UNZ+1+ACK-1'"));§Errors
Propagates any writer failure.
Sourcepub fn to_interchange_string(
&self,
syntax_identifier: &str,
syntax_version: &str,
date: &str,
time: &str,
control_reference: &str,
) -> Result<String, EdifactError>
pub fn to_interchange_string( &self, syntax_identifier: &str, syntax_version: &str, date: &str, time: &str, control_reference: &str, ) -> Result<String, EdifactError>
String form of to_interchange_bytes.
§Errors
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Contrl
impl RefUnwindSafe for Contrl
impl Send for Contrl
impl Sync for Contrl
impl Unpin for Contrl
impl UnsafeUnpin for Contrl
impl UnwindSafe for Contrl
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