pub struct NodesBuilder { /* private fields */ }Expand description
Builder for creating Nodes programmatically.
This builder allows you to construct node lists when building DBC files programmatically. It validates that node names are unique and within limits.
§Examples
use dbc_rs::NodesBuilder;
let nodes = NodesBuilder::new()
.add_node("ECM")
.add_node("TCM")
.add_node("BCM")
.build()?;
assert_eq!(nodes.len(), 3);
assert!(nodes.contains("ECM"));§Validation
The builder validates:
- Maximum of 256 nodes (DoS protection)
- All node names must be unique (case-sensitive)
- Maximum 32 characters per node name
- Maximum number of nodes (implementation limit for DoS protection)
§Feature Requirements
This builder requires the std feature to be enabled.
Implementations§
Source§impl NodesBuilder
impl NodesBuilder
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new NodesBuilder with an empty node list.
§Examples
use dbc_rs::NodesBuilder;
let builder = NodesBuilder::new();
let nodes = builder.build()?;
assert!(nodes.is_empty());Sourcepub fn add_nodes<I, S>(self, nodes: I) -> Self
pub fn add_nodes<I, S>(self, nodes: I) -> Self
Adds multiple nodes from an iterator.
§Arguments
nodes- An iterator of node names (each item must implementAsRef<str>)
§Examples
use dbc_rs::NodesBuilder;
// From a slice
let nodes = NodesBuilder::new()
.add_nodes(&["ECM", "TCM", "BCM"])
.build()?;
assert_eq!(nodes.len(), 3);
// From a vector
let node_vec = vec!["Node1", "Node2"];
let nodes2 = NodesBuilder::new()
.add_nodes(node_vec.iter())
.build()?;
assert_eq!(nodes2.len(), 2);Sourcepub fn clear(self) -> Self
pub fn clear(self) -> Self
Clears all nodes from the builder.
§Examples
use dbc_rs::NodesBuilder;
let nodes = NodesBuilder::new()
.add_node("ECM")
.add_node("TCM")
.clear()
.add_node("BCM")
.build()?;
assert_eq!(nodes.len(), 1);
assert!(nodes.contains("BCM"));
assert!(!nodes.contains("ECM"));Sourcepub fn validate(self) -> Result<Self>
pub fn validate(self) -> Result<Self>
Validates the current builder state without building.
This is useful for checking if the configuration is valid before building. Returns a new builder with validated nodes, or an error if validation fails.
§Returns
Returns Ok(Self) if validation succeeds, or Err(Error::Validation) if:
- Too many nodes are specified (exceeds 256 nodes limit by default)
- Duplicate node names are found (case-sensitive)
- Node name exceeds maximum length (32 characters by default)
§Examples
use dbc_rs::NodesBuilder;
// Valid configuration
let builder = NodesBuilder::new()
.add_node("ECM")
.add_node("TCM");
assert!(builder.validate().is_ok());
// Invalid: duplicate nodes
let builder2 = NodesBuilder::new()
.add_node("ECM")
.add_node("ECM"); // Duplicate
assert!(builder2.validate().is_err());Sourcepub fn build(self) -> Result<Nodes>
pub fn build(self) -> Result<Nodes>
Builds the Nodes from the builder configuration.
This validates the nodes and constructs a Nodes instance.
§Returns
Returns Ok(Nodes) if successful, or Err(Error::Validation) if:
- Too many nodes are specified (exceeds 256 nodes limit by default)
- Duplicate node names are found (case-sensitive)
- Node name exceeds maximum length (32 characters)
§Examples
use dbc_rs::NodesBuilder;
// Build with nodes
let nodes = NodesBuilder::new()
.add_node("ECM")
.add_node("TCM")
.build()?;
assert_eq!(nodes.len(), 2);
// Build empty
let empty = NodesBuilder::new().build()?;
assert!(empty.is_empty());§Errors
use dbc_rs::NodesBuilder;
// Duplicate nodes
let result = NodesBuilder::new()
.add_node("ECM")
.add_node("ECM") // Duplicate
.build();
assert!(result.is_err());