pub struct RequestIds {
pub request_id: String,
pub correlation_id: String,
}transport only.Expand description
The pair of IDs every OCPI request and response carries.
For debugging issues, OCPI implementations are required to include unique IDs via HTTP headers in every request/response.
The distinction matters at a hub:
When a Hub forwards a request to a party, the request to this party SHALL contain a new unique value in the X-Request-ID HTTP header, not a copy … the request SHALL contain the same X-Correlation-ID HTTP header.
RequestIds::forwarded does exactly that, so a hub cannot get it backwards.
use ocpi_kit::transport::RequestIds;
let incoming = RequestIds::generate();
let forwarded = incoming.forwarded();
assert_ne!(incoming.request_id, forwarded.request_id);
assert_eq!(incoming.correlation_id, forwarded.correlation_id);Spec: 2.3.0 §transport_and_format_unique_messageg_ids
Fields§
§request_id: StringUnique per request hop.
correlation_id: StringUnique per logical exchange, preserved across hub hops.
Implementations§
Source§impl RequestIds
impl RequestIds
Sourcepub fn generate() -> Self
pub fn generate() -> Self
A fresh pair of UUIDs.
It is advised to used GUID/UUID as values for X-Request-ID and X-Correlation-ID.
Sourcepub fn forwarded(&self) -> Self
pub fn forwarded(&self) -> Self
The IDs a hub must use when forwarding this request: a new request ID, the same correlation ID.
Sourcepub fn from_headers_or_generate(headers: &HeaderMap) -> Self
pub fn from_headers_or_generate(headers: &HeaderMap) -> Self
Reads the pair from a header map, generating whichever half is missing.
A missing ID is a spec violation on the peer’s side, but refusing the request over it would be worse than carrying on with a generated one; the server echoes what it used.
Sourcepub fn from_headers(headers: &HeaderMap) -> Option<Self>
pub fn from_headers(headers: &HeaderMap) -> Option<Self>
Reads the pair from a header map, or None if either is absent.
Trait Implementations§
Source§impl Clone for RequestIds
impl Clone for RequestIds
Source§fn clone(&self) -> RequestIds
fn clone(&self) -> RequestIds
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RequestIds
impl Debug for RequestIds
Source§impl Display for RequestIds
impl Display for RequestIds
impl Eq for RequestIds
Source§impl Hash for RequestIds
impl Hash for RequestIds
Source§impl PartialEq for RequestIds
impl PartialEq for RequestIds
impl StructuralPartialEq for RequestIds
Auto Trait Implementations§
impl Freeze for RequestIds
impl RefUnwindSafe for RequestIds
impl Send for RequestIds
impl Sync for RequestIds
impl Unpin for RequestIds
impl UnsafeUnpin for RequestIds
impl UnwindSafe for RequestIds
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.