Skip to main content

SessionContext

Struct SessionContext 

Source
pub struct SessionContext { /* private fields */ }
Expand description

Per-partner session context — identity, trust configuration, and correlation metadata required by every send/receive operation in asx.

§Cardinality and Lifetime

SessionContext is scoped to one trading-partner relationship and represents a reusable, long-lived object — not a per-message allocation. Typical lifecycle patterns:

Deployment styleRecommended granularity
Single fixed partner (e.g. one supplier)One SessionContext per process; share via Arc.
Multiple partners (hub/spoke)One SessionContext per partner; keyed by partner_id.
Short-lived CLI / batchOne SessionContext per batch run; Clone is O(1).

Using a new SessionContext for every outbound message is valid but wasteful — it pays session-ID generation and cert-validation costs on every call. Prefer reusing and, when certificates rotate, call rotate_cert_handle in place rather than rebuilding.

§Observability Impact

The session_id is emitted on every span, metric label, and error context produced during message processing. Using inconsistent or randomly generated session_id values per message will fragment observability data in your monitoring backend and make per-partner dashboards unusable. Choose a stable, human-readable ID such as "partner-acme-prod".

§Cloning

Clone is O(1) — all heavy data (certificates, trust anchors) is behind Arc and is not deep-copied. Clones share the same CertHandle lineage until rotate_cert_handle is called on one of them.

§Construction

Prefer SessionContext::builder for incremental construction, or SessionContext::new for the minimal three-field shorthand.

Implementations§

Source§

impl SessionContext

Source

pub fn builder( session_id: impl Into<String>, partner_id: impl Into<String>, ) -> SessionContextBuilder

Start building a SessionContext incrementally.

Source

pub fn new( session_id: impl Into<String>, partner_id: impl Into<String>, profile_name: impl Into<String>, ) -> Result<Self>

Source

pub fn with_cert_handle(self, cert_handle: CertHandle) -> Result<Self>

Validate and set the session’s certificate/trust configuration (builder method).

This is the primary way to attach certificate material when constructing a session. For rotation on an already-live session, prefer rotate_cert_handle which takes &mut self.

Both the trust-anchor parse cache and the X.509 store cache are reset so that the new handle’s anchors are parsed fresh on first use.

Source

pub fn rotate_cert_handle(&mut self, cert_handle: CertHandle) -> Result<()>

Atomically rotate the certificate/trust configuration on a live session.

Unlike with_cert_handle, this takes &mut self and therefore works on an already-constructed session without rebuilding it. The session_id, partner_id, profile, reliability queues, and event subscriptions are preserved.

Any in-flight verification calls that were already dispatched continue using the previous Arc<CertHandle> snapshot until they complete; newly accepted messages see the updated configuration immediately.

§Errors

Returns InvalidInput if cert_handle fails the same validation as with_cert_handle.

Source

pub fn with_effective_policy_snapshot_json( self, snapshot_json: impl Into<String>, ) -> Result<Self>

Source

pub fn effective_policy_snapshot_json(&self) -> Option<&str>

Source

pub fn strict_runtime_bootstrap_validated(&self) -> bool

Return whether this session is explicitly marked as startup-validated for strict-runtime protocol entry point enforcement.

Source

pub fn test_only_mark_strict_runtime_bootstrap_validated(self) -> Self

Mark this session as startup-validated without running startup validation.

Test scaffolding only. It is gated behind the testing feature, which raises a compile_error! in release builds, so it cannot reach a production binary — the same guarantee that covers crate::as4::InsecureBypassAs4Verifier.

Production code marks a session by presenting the token that crate::presets::StrictRuntimeBootstrap mints.

Source

pub fn session_id(&self) -> &str

Source

pub fn partner_id(&self) -> &str

Source

pub fn profile_name(&self) -> &str

Source

pub fn cert_handle(&self) -> &CertHandle

Source

pub fn correlation_scope(&self) -> &CorrelationScope

Source

pub fn with_incoming_traceparent(self, traceparent: Option<&str>) -> Self

Attach an inbound W3C Trace Context traceparent header value to this session so that every ScopedAsxEvent emitted during processing carries the upstream trace identifier.

Typically called by the embedder’s HTTP handler after parsing the inbound request with as2_ingress_from_http or as4_ingress_from_http:

let ingress = as4_ingress_from_http(http_request)?;
let session = SessionContext::new("s1", "partner", "strict")?
    .with_incoming_traceparent(ingress.traceparent.as_deref());

Passing None is a no-op (leaves any previously set value unchanged because inbound absence of the header should not clear a manually set value).

Source

pub fn for_testing( session_id: impl Into<String>, partner_id: impl Into<String>, ) -> Self

Construct a minimal SessionContext for unit tests.

Uses OcspMode::Disabled and soft-fail to avoid network I/O in tests. Prefer this over manually building SessionContext with new() in test code.

Trait Implementations§

Source§

impl Clone for SessionContext

Source§

fn clone(&self) -> SessionContext

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 SessionContext

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Eq for SessionContext

Source§

impl PartialEq for SessionContext

Source§

fn eq(&self, other: &SessionContext) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for SessionContext

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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 = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more