use super::BitTimingBuilder;
use crate::{BitTiming, Result};
impl BitTimingBuilder {
pub fn build(self) -> Result<BitTiming> {
match (self.baudrate, self.btr1, self.btr2) {
(Some(baudrate), Some(btr1), Some(btr2)) => {
Ok(BitTiming::with_btr(baudrate, btr1, btr2))
}
(Some(baudrate), _, _) => Ok(BitTiming::with_baudrate(baudrate)),
_ => Ok(BitTiming::new()),
}
}
}
#[cfg(test)]
mod tests {
use super::BitTimingBuilder;
#[test]
fn test_build_empty() {
let bt = BitTimingBuilder::new().build().unwrap();
assert!(bt.is_empty());
}
#[test]
fn test_build_with_baudrate() {
let bt = BitTimingBuilder::new().baudrate(250000).build().unwrap();
assert_eq!(bt.baudrate(), Some(250000));
assert_eq!(bt.btr1(), None);
}
#[test]
fn test_build_with_all_values() {
let bt = BitTimingBuilder::new().baudrate(1000000).btr1(5).btr2(10).build().unwrap();
assert_eq!(bt.baudrate(), Some(1000000));
assert_eq!(bt.btr1(), Some(5));
assert_eq!(bt.btr2(), Some(10));
}
#[test]
fn test_build_btr_without_baudrate_ignored() {
let bt = BitTimingBuilder::new().btr1(1).btr2(2).build().unwrap();
assert!(bt.is_empty());
}
#[test]
fn test_build_partial_btr() {
let bt = BitTimingBuilder::new().baudrate(500000).btr1(1).build().unwrap();
assert_eq!(bt.baudrate(), Some(500000));
assert_eq!(bt.btr1(), None);
}
}