Skip to main content

ClientEvent

Enum ClientEvent 

Source
pub enum ClientEvent {
    PositiveResponse {
        sid: u8,
        data: Vec<u8, 256>,
    },
    NegativeResponse {
        sid: u8,
        nrc: u8,
    },
    ResponsePending {
        sid: u8,
    },
    Timeout {
        sid: u8,
    },
    PeriodicData {
        did: u8,
        data: Vec<u8, 256>,
    },
    Unsolicited {
        data: Vec<u8, 256>,
    },
}
Expand description

An observable event emitted by the UDS client.

Events accumulate in the client’s event queue across ticks and are drained by the caller via drain_events(). Each event corresponds to a completed or failed request exchange.

The caller decides what to do with each event - the client never retries, escalates, or takes corrective action autonomously.

Variants§

§

PositiveResponse

A positive response was received for the given service.

sid is the request SID (not the response SID). data contains the response payload bytes after the response SID.

Fields

§sid: u8
§data: Vec<u8, 256>
§

NegativeResponse

A negative response was received.

sid is the request SID. nrc is the Negative Response Code byte.

Fields

§sid: u8
§nrc: u8
§

ResponsePending

A 0x78 Response Pending NRC was received.

The client has switched to the P2* extended timeout and is still waiting for the final response. This event is emitted once per 0x78 received - the caller can observe how many were received before the final response.

Fields

§sid: u8
§

Timeout

No response was received within the P2 or P2* timeout.

The pending request has been discarded. The caller must decide whether to retry.

Fields

§sid: u8
§

PeriodicData

A periodic data response arrived from the server.

[periodic_data_identifier (1 byte), data_record (n bytes)]

No SID prefix is present - did is the first byte of the frame, which is the low byte of the periodic DID identifier. data contains the data record bytes that followed.

Only emitted for DID low bytes registered via subscribe_periodic

Fields

§did: u8

Low byte of the periodic DID identifier.

§data: Vec<u8, 256>

Data record bytes

§

Unsolicited

A response arrived with no matching pending request.

This can occur under fault injection (reordered or delayed responses arriving after a timeout) or if the server sends an unsolicited response.

Fields

§data: Vec<u8, 256>

Trait Implementations§

Source§

impl Clone for ClientEvent

Source§

fn clone(&self) -> ClientEvent

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 ClientEvent

Source§

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

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

impl Eq for ClientEvent

Source§

impl PartialEq for ClientEvent

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for ClientEvent

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