MessageBuilder

Struct MessageBuilder 

Source
pub struct MessageBuilder { /* private fields */ }

Implementations§

Source§

impl MessageBuilder

Source

pub fn validate(&self) -> Result<()>

Validates the builder configuration without building the final Message.

This performs full validation of all fields:

  • Checks that required fields (id, name, dlc, sender) are set
  • Validates message-level constraints (DLC range, name not empty)
  • Builds and validates all signals (overlap detection, bounds checking)
§Note

This method clones and builds all signals internally for validation. If you only need the final Message, call build() directly.

Source

pub fn build(self) -> Result<Message>

Builds and validates the Message.

Consumes the builder and returns a fully constructed and validated Message.

§Errors

Returns an error if:

  • Any required field (id, name, dlc, sender) is missing
  • Name exceeds maximum length (32 characters)
  • Any signal fails to build or validate
  • Signals overlap in the message payload
  • Signal extends beyond DLC bounds
§Examples
use dbc_rs::{MessageBuilder, SignalBuilder, ByteOrder, ReceiversBuilder};

let signal = SignalBuilder::new()
    .name("RPM")
    .start_bit(0)
    .length(16)
    .byte_order(ByteOrder::LittleEndian)
    .unsigned(true)
    .factor(1.0)
    .offset(0.0)
    .min(0.0)
    .max(8000.0)
    .receivers(ReceiversBuilder::new().none());

let message = MessageBuilder::new()
    .id(0x100)
    .name("EngineData")
    .dlc(8)
    .sender("ECM")
    .add_signal(signal)
    .build()?;

assert_eq!(message.name(), "EngineData");
Source§

impl MessageBuilder

Source

pub fn new() -> Self

Creates a new MessageBuilder with no fields set.

§Examples
use dbc_rs::MessageBuilder;

let builder = MessageBuilder::new();
// Must set id, name, dlc, and sender before building
Source

pub fn id(self, id: u32) -> Self

Sets the CAN message ID (11-bit or 29-bit identifier).

Source

pub fn dlc(self, dlc: u8) -> Self

Sets the Data Length Code (DLC) - the number of data bytes in the message (0-8 for standard CAN, 0-64 for CAN FD).

Source

pub fn name(self, name: impl AsRef<str>) -> Self

Sets the message name.

Source

pub fn sender(self, sender: impl AsRef<str>) -> Self

Sets the sender (transmitter) ECU node name for this message.

Source

pub fn add_signal(self, signal: SignalBuilder) -> Self

Adds a signal to the message.

§Arguments
  • signal - A SignalBuilder to add to this message
§Examples
use dbc_rs::{MessageBuilder, SignalBuilder, ByteOrder};

let signal = SignalBuilder::new()
    .name("EngineSpeed")
    .start_bit(0)
    .length(16)
    .byte_order(ByteOrder::LittleEndian);

let builder = MessageBuilder::new()
    .add_signal(signal);
Source

pub fn add_signals( self, signals: impl IntoIterator<Item = SignalBuilder>, ) -> Self

Adds multiple signals to the message.

§Arguments
  • signals - An iterator of SignalBuilder items to add
§Examples
use dbc_rs::{MessageBuilder, SignalBuilder, ByteOrder};

let signals = vec![
    SignalBuilder::new().name("Signal1").start_bit(0).length(8).byte_order(ByteOrder::LittleEndian),
    SignalBuilder::new().name("Signal2").start_bit(8).length(8).byte_order(ByteOrder::LittleEndian),
];

let builder = MessageBuilder::new()
    .add_signals(signals);
Source

pub fn signals(self, signals: Vec<SignalBuilder>) -> Self

Replaces all signals in the message with the provided signals.

Clears any existing signals and adds the new ones.

§Arguments
  • signals - A vector of SignalBuilder items to set
§Examples
use dbc_rs::{MessageBuilder, SignalBuilder, ByteOrder};

let new_signals = vec![
    SignalBuilder::new().name("NewSignal").start_bit(0).length(8).byte_order(ByteOrder::LittleEndian),
];

let builder = MessageBuilder::new()
    .signals(new_signals);
Source

pub fn clear_signals(self) -> Self

Removes all signals from the message.

§Examples
use dbc_rs::MessageBuilder;

let builder = MessageBuilder::new()
    .clear_signals();

Trait Implementations§

Source§

impl Debug for MessageBuilder

Source§

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

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

impl Default for MessageBuilder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn into(self) -> U

Calls U::from(self).

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

§

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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

Performs the conversion.