pub struct DbcBuilder { /* private fields */ }Expand description
Builders
Builder for constructing Dbc instances programmatically.
This builder allows you to create DBC files without parsing from a string.
It requires the std feature to be enabled.
§Examples
use dbc_rs::{DbcBuilder, NodesBuilder, MessageBuilder, SignalBuilder, VersionBuilder};
let nodes = NodesBuilder::new()
.add_node("ECM")
.add_node("TCM");
let signal = SignalBuilder::new()
.name("RPM")
.start_bit(0)
.length(16);
let message = MessageBuilder::new()
.id(256)
.name("EngineData")
.dlc(8)
.sender("ECM")
.add_signal(signal);
let dbc = DbcBuilder::new()
.version(VersionBuilder::new().version("1.0"))
.nodes(nodes)
.add_message(message)
.build()?;Implementations§
Source§impl DbcBuilder
impl DbcBuilder
Sourcepub fn validate(self) -> Result<()>
pub fn validate(self) -> Result<()>
Validates the builder without constructing the Dbc.
This method performs all validation checks. Note that this consumes
the builder. If you want to keep the builder after validation, call
build() instead and check the result.
§Examples
use dbc_rs::DbcBuilder;
let builder = DbcBuilder::new();
if builder.validate().is_err() {
// Handle validation error
}Sourcepub fn build(self) -> Result<Dbc>
pub fn build(self) -> Result<Dbc>
Builds the Dbc from the builder.
This method validates all fields and constructs the Dbc instance.
Returns an error if validation fails.
§Examples
use dbc_rs::{DbcBuilder, VersionBuilder, NodesBuilder};
let dbc = DbcBuilder::new()
.version(VersionBuilder::new().version("1.0"))
.nodes(NodesBuilder::new().add_node("ECM"))
.build()?;Source§impl DbcBuilder
impl DbcBuilder
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new empty DbcBuilder.
§Examples
use dbc_rs::{DbcBuilder, VersionBuilder, NodesBuilder, MessageBuilder};
let dbc = DbcBuilder::new()
.version(VersionBuilder::new().version("1.0"))
.nodes(NodesBuilder::new().add_node("ECM"))
.add_message(MessageBuilder::new()
.id(512)
.name("Brake")
.dlc(4)
.sender("ECM"))
.build()?;Sourcepub fn version(self, version: VersionBuilder) -> Self
pub fn version(self, version: VersionBuilder) -> Self
Sets the version for the DBC file.
§Examples
use dbc_rs::{DbcBuilder, VersionBuilder};
let vb = VersionBuilder::new().version("1.0");
let builder = DbcBuilder::new()
.version(vb);Sourcepub fn nodes(self, nodes: NodesBuilder) -> Self
pub fn nodes(self, nodes: NodesBuilder) -> Self
Sets the nodes (ECUs) for the DBC file.
§Examples
use dbc_rs::{DbcBuilder, NodesBuilder};
let builder = DbcBuilder::new()
.nodes(NodesBuilder::new().add_node("ECM"));Sourcepub fn add_message(self, message: MessageBuilder) -> Self
pub fn add_message(self, message: MessageBuilder) -> Self
Adds a message to the DBC file.
§Examples
use dbc_rs::{DbcBuilder, MessageBuilder};
let message = MessageBuilder::new()
.id(256)
.name("EngineData")
.dlc(8)
.sender("ECM");
let builder = DbcBuilder::new()
.add_message(message);Sourcepub fn add_messages(
self,
messages: impl IntoIterator<Item = MessageBuilder>,
) -> Self
pub fn add_messages( self, messages: impl IntoIterator<Item = MessageBuilder>, ) -> Self
Adds multiple messages to the DBC file.
§Examples
use dbc_rs::{DbcBuilder, MessageBuilder};
let msg1 = MessageBuilder::new().id(256).name("Msg1").dlc(8).sender("ECM");
let msg2 = MessageBuilder::new().id(512).name("Msg2").dlc(4).sender("TCM");
let builder = DbcBuilder::new()
.add_messages(vec![msg1, msg2]);Sourcepub fn clear_messages(self) -> Self
pub fn clear_messages(self) -> Self
Clears all messages from the builder.
§Examples
use dbc_rs::DbcBuilder;
let builder = DbcBuilder::new()
.clear_messages();Sourcepub fn add_value_description(
self,
message_id: u32,
signal_name: impl AsRef<str>,
value_descriptions: ValueDescriptionsBuilder,
) -> Self
pub fn add_value_description( self, message_id: u32, signal_name: impl AsRef<str>, value_descriptions: ValueDescriptionsBuilder, ) -> Self
Adds value descriptions for a signal in a message.
Value descriptions (VAL_) map numeric signal values to human-readable text.
§Arguments
message_id- The CAN message ID containing the signalsignal_name- The name of the signalvalue_descriptions- The value descriptions builder
§Examples
use dbc_rs::{DbcBuilder, ValueDescriptionsBuilder};
let value_desc = ValueDescriptionsBuilder::new()
.add_entry(0, "Park")
.add_entry(1, "Drive");
let builder = DbcBuilder::new()
.add_value_description(256, "Gear", value_desc);Sourcepub fn add_global_value_description(
self,
signal_name: impl AsRef<str>,
value_descriptions: ValueDescriptionsBuilder,
) -> Self
pub fn add_global_value_description( self, signal_name: impl AsRef<str>, value_descriptions: ValueDescriptionsBuilder, ) -> Self
Adds global value descriptions for a signal (applies to all messages with this signal).
Global value descriptions (VAL_ with message_id -1) apply to signals with the given name in any message.
§Arguments
signal_name- The name of the signalvalue_descriptions- The value descriptions builder
§Examples
use dbc_rs::{DbcBuilder, ValueDescriptionsBuilder};
let value_desc = ValueDescriptionsBuilder::new()
.add_entry(0, "Off")
.add_entry(1, "On");
let builder = DbcBuilder::new()
.add_global_value_description("Status", value_desc);Sourcepub fn clear_value_descriptions(self) -> Self
pub fn clear_value_descriptions(self) -> Self
Clears all value descriptions from the builder.
§Examples
use dbc_rs::DbcBuilder;
let builder = DbcBuilder::new()
.clear_value_descriptions();Sourcepub fn add_extended_multiplexing(
self,
ext_mux: ExtendedMultiplexingBuilder,
) -> Self
pub fn add_extended_multiplexing( self, ext_mux: ExtendedMultiplexingBuilder, ) -> Self
Adds an extended multiplexing entry to the DBC file.
Extended multiplexing (SG_MUL_VAL_) entries define which multiplexer switch values activate specific multiplexed signals, allowing for range-based activation.
§Examples
use dbc_rs::{DbcBuilder, ExtendedMultiplexingBuilder};
let ext_mux = ExtendedMultiplexingBuilder::new()
.message_id(500)
.signal_name("Signal_A")
.multiplexer_switch("Mux1")
.add_value_range(0, 5);
let builder = DbcBuilder::new()
.add_extended_multiplexing(ext_mux);Sourcepub fn add_extended_multiplexings(
self,
ext_muxes: impl IntoIterator<Item = ExtendedMultiplexingBuilder>,
) -> Self
pub fn add_extended_multiplexings( self, ext_muxes: impl IntoIterator<Item = ExtendedMultiplexingBuilder>, ) -> Self
Adds multiple extended multiplexing entries to the DBC file.
§Examples
use dbc_rs::{DbcBuilder, ExtendedMultiplexingBuilder};
let ext_mux1 = ExtendedMultiplexingBuilder::new()
.message_id(500)
.signal_name("Signal_A")
.multiplexer_switch("Mux1")
.add_value_range(0, 5);
let ext_mux2 = ExtendedMultiplexingBuilder::new()
.message_id(500)
.signal_name("Signal_B")
.multiplexer_switch("Mux1")
.add_value_range(10, 15);
let builder = DbcBuilder::new()
.add_extended_multiplexings(vec![ext_mux1, ext_mux2]);Sourcepub fn clear_extended_multiplexing(self) -> Self
pub fn clear_extended_multiplexing(self) -> Self
Clears all extended multiplexing entries from the builder.
§Examples
use dbc_rs::DbcBuilder;
let builder = DbcBuilder::new()
.clear_extended_multiplexing();Sourcepub fn from_dbc(dbc: &Dbc) -> Self
pub fn from_dbc(dbc: &Dbc) -> Self
Creates a DbcBuilder from an existing Dbc.
This allows you to modify an existing DBC file by creating a builder initialized with all data from the provided DBC.
§Arguments
dbc- The existingDbcto create a builder from
§Examples
use dbc_rs::{Dbc, DbcBuilder, MessageBuilder};
let original = Dbc::parse(r#"VERSION "1.0"\nBU_: ECM\n"#)?;
let modified = DbcBuilder::from_dbc(&original)
.add_message(MessageBuilder::new().id(256).name("Msg").dlc(8).sender("ECM"))
.build()?;