Skip to main content

Contrl

Struct Contrl 

Source
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

Source

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.

Source

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.

Source

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/UNE rejects that group’s UCF.
  • A fault inside a message leaves both above it at 7 and rejects only that message’s UCM.

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.

Source

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.

Source

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.

Source

pub const fn action(&self) -> Action

The verdict this message carries at the interchange level.

Source

pub fn message_reference(&self) -> &str

The UNH message reference this CONTRL will carry.

Source

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.

Source

pub fn to_bytes(&self) -> Result<Vec<u8>, EdifactError>

Render the message to EDIFACT bytes, without an interchange envelope.

§Errors

Propagates any writer failure.

Source

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.

Source

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.

Source

pub fn to_interchange_string( &self, syntax_identifier: &str, syntax_version: &str, date: &str, time: &str, control_reference: &str, ) -> Result<String, EdifactError>

Trait Implementations§

Source§

impl Clone for Contrl

Source§

fn clone(&self) -> Contrl

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Contrl

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.