Skip to main content

RoutingScenario

Enum RoutingScenario 

Source
#[non_exhaustive]
pub enum RoutingScenario { Direct, BroadcastPush { hub: PartyRef, }, OpenRoutingRequest, GetAllViaHub { hub: PartyRef, }, }
Available on crate feature transport only.
Expand description

One of the five routing arrangements the specification tabulates.

Each variant knows how to fill the headers for both the request and the response, in both directions across a hub. This is the whole of §transport_and_format_message_routing’s “Overview of required/optional routing headers for different scenarios” in one type.

use ocpi_kit::transport::RoutingScenario;
use ocpi_kit::types::PartyRef;

let cpo = PartyRef::new("NL", "TNM").unwrap();
let msp = PartyRef::new("DE", "ABC").unwrap();
let hub = PartyRef::new("NL", "HUB").unwrap();

// A broadcast push addresses the hub, not the eventual receivers.
let scenario = RoutingScenario::BroadcastPush { hub: hub.clone() };
let request = scenario.request_headers(&cpo, None);
assert_eq!(request.to, Some(hub));
assert_eq!(request.from, cpo);

Spec: 2.3.0 §transport_and_format_message_routing

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Direct

Requesting platform to receiving platform, directly or through a hub that just relays.

TOFROM
requestreceiving partyrequesting party
responserequesting partyreceiving party
§

BroadcastPush

A push to every connected party with the opposite role, fanned out by the hub.

TOFROM
requester → hubhubrequesting party
hub → requesterrequesting partyhub
hub → receiverreceiving partyhub
receiver → hubhubreceiving party

GET SHALL NOT be used in combination with Broadcast Push.

Fields

§hub: PartyRef

The hub that fans the message out.

§

OpenRoutingRequest

The requester does not know the destination; the hub decides from the content.

TOFROM
requester → hubomittedrequesting party
hub → receiverreceiving partyrequesting party
receiver → hubrequesting partyreceiving party
hub → requesterrequesting partyreceiving party

Open Routing Requests are possible for GET (Not GET ALL), POST, PUT, PATCH and DELETE.

§

GetAllViaHub

A GET on a Sender interface implemented by the hub, merging several parties’ objects.

TOFROM
requester → hubhubrequesting party
hub → requesterrequesting partyhub

Fields

§hub: PartyRef

The hub that merges the objects.

Implementations§

Source§

impl RoutingScenario

Source

pub fn request_headers( &self, requester: &PartyRef, receiver: Option<&PartyRef>, ) -> RoutingHeaders

The headers of the request the requesting party sends.

receiver is the destination party; it is ignored by the scenarios that address the hub or omit the to headers entirely, and may be None there.

Source

pub fn response_headers( &self, requester: &PartyRef, receiver: Option<&PartyRef>, ) -> RoutingHeaders

The headers of the response the requesting party will receive.

receiver is the party that actually answered, which the hub knows even when the requester did not.

Source

pub fn forwarded_request_headers( &self, requester: &PartyRef, receiver: &PartyRef, ) -> Option<RoutingHeaders>

The headers the hub puts on the request it forwards to the receiving party.

Returns None for GetAllViaHub, where the hub answers from its own merged view and forwards nothing verbatim.

Source

pub const fn allows_get(&self) -> bool

Whether a GET may use this scenario.

GET SHALL NOT be used in combination with Broadcast Push. If the requesting party wants to GET information of which it does not know the receiving party, an Open Routing Request MUST be used.

Source

pub const fn allows_write(&self) -> bool

Whether a write (POST, PUT, PATCH, DELETE) may use this scenario.

A GET All is by definition a read.

Trait Implementations§

Source§

impl Clone for RoutingScenario

Source§

fn clone(&self) -> RoutingScenario

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 RoutingScenario

Source§

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

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

impl Eq for RoutingScenario

Source§

impl PartialEq for RoutingScenario

Source§

fn eq(&self, other: &RoutingScenario) -> 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 RoutingScenario

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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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> 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> 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, <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.
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