pub struct Version { /* private fields */ }Expand description
Represents the version string from a DBC file.
DBC files can specify a version in the format “major.minor.patch”, where minor and patch are optional. This struct stores the parsed version components.
§Examples
use dbc_rs::Version;
let version = Version::builder()
.major(1)
.minor(0)
.build()?;Implementations§
Source§impl Version
impl Version
Sourcepub fn builder() -> VersionBuilder
pub fn builder() -> VersionBuilder
Create a new builder for constructing a Version
§Examples
use dbc_rs::Version;
let v1 = Version::builder().major(1).build()?;
let v2 = Version::builder().major(1).minor(0).build()?;
let v3 = Version::builder().major(1).minor(2).patch(3).build()?;Examples found in repository?
examples/create_dbc.rs (line 5)
3fn main() -> Result<(), dbc_rs::Error> {
4 // Create version "1.0" using builder
5 let version = Version::builder().major(1).minor(0).build()?;
6
7 // Create nodes: ECM and TCM using builder
8 let nodes = Nodes::builder().add_node("ECM").add_node("TCM").build()?;
9
10 // Create signals for Engine message using the builder pattern
11 let rpm_signal = Signal::builder()
12 .name("RPM")
13 .start_bit(0)
14 .length(16)
15 .byte_order(ByteOrder::LittleEndian)
16 .unsigned(true)
17 .factor(0.25)
18 .offset(0.0)
19 .min(0.0)
20 .max(8000.0)
21 .unit("rpm")
22 .receivers(Receivers::None)
23 .build()?;
24
25 let temp_signal = Signal::builder()
26 .name("Temp")
27 .start_bit(16)
28 .length(8)
29 .byte_order(ByteOrder::LittleEndian)
30 .unsigned(false)
31 .factor(1.0)
32 .offset(-40.0)
33 .min(-40.0)
34 .max(215.0)
35 .unit("°C")
36 .receivers(Receivers::None)
37 .build()?;
38
39 // Create signals for Brake message
40 let pressure_signal = Signal::builder()
41 .name("Pressure")
42 .start_bit(0)
43 .length(16)
44 .byte_order(ByteOrder::BigEndian)
45 .unsigned(true)
46 .factor(0.1)
47 .offset(0.0)
48 .min(0.0)
49 .max(1000.0)
50 .unit("bar")
51 .receivers(Receivers::None)
52 .build()?;
53
54 // Create Engine message (ID 256, DLC 8, sender ECM) using the builder pattern
55 let engine_message = Message::builder()
56 .id(256)
57 .name("Engine")
58 .dlc(8)
59 .sender("ECM")
60 .add_signal(rpm_signal)
61 .add_signal(temp_signal)
62 .build()?;
63
64 // Create Brake message (ID 512, DLC 4, sender TCM) using the builder pattern
65 let brake_message = Message::builder()
66 .id(512)
67 .name("Brake")
68 .dlc(4)
69 .sender("TCM")
70 .add_signal(pressure_signal)
71 .build()?;
72
73 // Create DBC with all components using the builder pattern
74 let dbc = Dbc::builder()
75 .version(version)
76 .nodes(nodes)
77 .add_message(engine_message)
78 .add_message(brake_message)
79 .build()?;
80
81 // Verify the created DBC
82 println!("Created DBC with version: {}", dbc.version().to_string());
83 println!("Nodes: {}", dbc.nodes().to_string());
84 println!("Messages: {}", dbc.messages().len());
85
86 for msg in dbc.messages() {
87 println!(
88 " Message {} (ID: {}, DLC: {}, Sender: {})",
89 msg.name(),
90 msg.id(),
91 msg.dlc(),
92 msg.sender()
93 );
94 for sig in msg.signals() {
95 println!(
96 " Signal {}: {}|{}@{} (factor: {}, offset: {}) [{:.1}|{:.1}] \"{}\"",
97 sig.name(),
98 sig.start_bit(),
99 sig.length(),
100 if sig.byte_order() == ByteOrder::LittleEndian {
101 "0"
102 } else {
103 "1"
104 },
105 sig.factor(),
106 sig.offset(),
107 sig.min(),
108 sig.max(),
109 sig.unit().unwrap_or("")
110 );
111 }
112 }
113
114 // The DBC object is now ready to use
115 // You can access messages, signals, and other data through the getter methods
116
117 Ok(())
118}Sourcepub fn to_string(&self) -> String
pub fn to_string(&self) -> String
Format version as a string (e.g., “1.2.3” or “1.0”)
Examples found in repository?
examples/create_dbc.rs (line 82)
3fn main() -> Result<(), dbc_rs::Error> {
4 // Create version "1.0" using builder
5 let version = Version::builder().major(1).minor(0).build()?;
6
7 // Create nodes: ECM and TCM using builder
8 let nodes = Nodes::builder().add_node("ECM").add_node("TCM").build()?;
9
10 // Create signals for Engine message using the builder pattern
11 let rpm_signal = Signal::builder()
12 .name("RPM")
13 .start_bit(0)
14 .length(16)
15 .byte_order(ByteOrder::LittleEndian)
16 .unsigned(true)
17 .factor(0.25)
18 .offset(0.0)
19 .min(0.0)
20 .max(8000.0)
21 .unit("rpm")
22 .receivers(Receivers::None)
23 .build()?;
24
25 let temp_signal = Signal::builder()
26 .name("Temp")
27 .start_bit(16)
28 .length(8)
29 .byte_order(ByteOrder::LittleEndian)
30 .unsigned(false)
31 .factor(1.0)
32 .offset(-40.0)
33 .min(-40.0)
34 .max(215.0)
35 .unit("°C")
36 .receivers(Receivers::None)
37 .build()?;
38
39 // Create signals for Brake message
40 let pressure_signal = Signal::builder()
41 .name("Pressure")
42 .start_bit(0)
43 .length(16)
44 .byte_order(ByteOrder::BigEndian)
45 .unsigned(true)
46 .factor(0.1)
47 .offset(0.0)
48 .min(0.0)
49 .max(1000.0)
50 .unit("bar")
51 .receivers(Receivers::None)
52 .build()?;
53
54 // Create Engine message (ID 256, DLC 8, sender ECM) using the builder pattern
55 let engine_message = Message::builder()
56 .id(256)
57 .name("Engine")
58 .dlc(8)
59 .sender("ECM")
60 .add_signal(rpm_signal)
61 .add_signal(temp_signal)
62 .build()?;
63
64 // Create Brake message (ID 512, DLC 4, sender TCM) using the builder pattern
65 let brake_message = Message::builder()
66 .id(512)
67 .name("Brake")
68 .dlc(4)
69 .sender("TCM")
70 .add_signal(pressure_signal)
71 .build()?;
72
73 // Create DBC with all components using the builder pattern
74 let dbc = Dbc::builder()
75 .version(version)
76 .nodes(nodes)
77 .add_message(engine_message)
78 .add_message(brake_message)
79 .build()?;
80
81 // Verify the created DBC
82 println!("Created DBC with version: {}", dbc.version().to_string());
83 println!("Nodes: {}", dbc.nodes().to_string());
84 println!("Messages: {}", dbc.messages().len());
85
86 for msg in dbc.messages() {
87 println!(
88 " Message {} (ID: {}, DLC: {}, Sender: {})",
89 msg.name(),
90 msg.id(),
91 msg.dlc(),
92 msg.sender()
93 );
94 for sig in msg.signals() {
95 println!(
96 " Signal {}: {}|{}@{} (factor: {}, offset: {}) [{:.1}|{:.1}] \"{}\"",
97 sig.name(),
98 sig.start_bit(),
99 sig.length(),
100 if sig.byte_order() == ByteOrder::LittleEndian {
101 "0"
102 } else {
103 "1"
104 },
105 sig.factor(),
106 sig.offset(),
107 sig.min(),
108 sig.max(),
109 sig.unit().unwrap_or("")
110 );
111 }
112 }
113
114 // The DBC object is now ready to use
115 // You can access messages, signals, and other data through the getter methods
116
117 Ok(())
118}Sourcepub fn to_dbc_string(&self) -> String
pub fn to_dbc_string(&self) -> String
Format version in DBC file format (e.g., VERSION "1.0")
Useful for debugging and visualization of the version in DBC format.
§Examples
use dbc_rs::Version;
let version = Version::builder().major(1).minor(0).build()?;
assert_eq!(version.to_dbc_string(), "VERSION \"1.0\"");Trait Implementations§
Auto Trait Implementations§
impl Freeze for Version
impl RefUnwindSafe for Version
impl Send for Version
impl Sync for Version
impl Unpin for Version
impl UnwindSafe for Version
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more