pub struct ReceiversBuilder { /* private fields */ }Expand description
Builder for creating Receivers programmatically.
This builder allows you to construct receiver configurations for signals when building DBC files programmatically.
§Examples
use dbc_rs::{ReceiversBuilder, SignalBuilder, ByteOrder};
// Broadcast receiver
let broadcast = ReceiversBuilder::new().broadcast().build()?;
// Specific nodes
let specific = ReceiversBuilder::new()
.add_node("TCM")
.add_node("BCM")
.build()?;
// No receivers
let none = ReceiversBuilder::new().none().build()?;
// Use with signal builder
let signal = SignalBuilder::new()
.name("RPM")
.start_bit(0)
.length(16)
.byte_order(ByteOrder::BigEndian)
.unsigned(true)
.factor(0.25)
.offset(0.0)
.min(0.0)
.max(8000.0)
.receivers(specific)
.build()?;§Feature Requirements
This builder requires the alloc feature to be enabled.
Implementations§
Source§impl ReceiversBuilder
impl ReceiversBuilder
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new ReceiversBuilder with default settings (no receivers).
§Examples
use dbc_rs::ReceiversBuilder;
let builder = ReceiversBuilder::new();
let receivers = builder.build()?;
assert_eq!(receivers.len(), 0);Sourcepub fn broadcast(self) -> Self
pub fn broadcast(self) -> Self
Sets the receiver to broadcast (* in DBC format).
This clears any previously set nodes and sets the receiver to broadcast mode.
§Examples
use dbc_rs::ReceiversBuilder;
let receivers = ReceiversBuilder::new()
.add_node("TCM") // This will be cleared
.broadcast()
.build()?;
assert_eq!(receivers, dbc_rs::Receivers::Broadcast);Sourcepub fn none(self) -> Self
pub fn none(self) -> Self
Sets the receiver to none (no explicit receivers).
This clears any previously set nodes and sets the receiver to none mode.
§Examples
use dbc_rs::ReceiversBuilder;
let receivers = ReceiversBuilder::new()
.add_node("TCM") // This will be cleared
.none()
.build()?;
assert_eq!(receivers, dbc_rs::Receivers::None);Sourcepub fn add_node(self, node: impl AsRef<str>) -> Self
pub fn add_node(self, node: impl AsRef<str>) -> Self
Adds a single receiver node.
This automatically clears broadcast and none modes, switching to specific nodes mode.
§Arguments
node- The node name (anything that implementsAsRef<str>)
§Examples
use dbc_rs::ReceiversBuilder;
let receivers = ReceiversBuilder::new()
.add_node("TCM")
.add_node("BCM")
.build()?;
assert_eq!(receivers.len(), 2);
assert!(receivers.contains("TCM"));Sourcepub fn add_nodes<I, S>(self, nodes: I) -> Self
pub fn add_nodes<I, S>(self, nodes: I) -> Self
Adds multiple receiver nodes from an iterator.
This automatically clears broadcast and none modes, switching to specific nodes mode.
§Arguments
nodes- An iterator of node names (each item must implementAsRef<str>)
§Examples
use dbc_rs::ReceiversBuilder;
// From a slice
let receivers = ReceiversBuilder::new()
.add_nodes(&["TCM", "BCM", "ECM"])
.build()?;
assert_eq!(receivers.len(), 3);
// From a vector
let node_vec = vec!["Node1", "Node2"];
let receivers2 = ReceiversBuilder::new()
.add_nodes(node_vec.iter())
.build()?;
assert_eq!(receivers2.len(), 2);Sourcepub fn clear(self) -> Self
pub fn clear(self) -> Self
Clears all receiver nodes and resets to default state (none).
§Examples
use dbc_rs::ReceiversBuilder;
let receivers = ReceiversBuilder::new()
.add_node("TCM")
.add_node("BCM")
.clear()
.add_node("ECM")
.build()?;
assert_eq!(receivers.len(), 1);
assert!(receivers.contains("ECM"));
assert!(!receivers.contains("TCM"));Sourcepub fn build(self) -> Result<Receivers<'static>>
pub fn build(self) -> Result<Receivers<'static>>
Builds the Receivers from the builder configuration.
§Returns
Returns Ok(Receivers) if successful, or Err(Error::Signal) if:
- More than 64 receiver nodes are specified (exceeds maximum limit)
§Examples
use dbc_rs::ReceiversBuilder;
// Broadcast
let broadcast = ReceiversBuilder::new().broadcast().build()?;
// Specific nodes
let nodes = ReceiversBuilder::new()
.add_node("TCM")
.add_node("BCM")
.build()?;
// None (default)
let none = ReceiversBuilder::new().build()?;§Errors
use dbc_rs::ReceiversBuilder;
// Too many nodes (limit is 64)
let mut builder = ReceiversBuilder::new();
for i in 0..65 {
builder = builder.add_node(format!("Node{i}"));
}
assert!(builder.build().is_err());