use crate::error::{AsynError, AsynResult, AsynStatus};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DataBits {
Five,
Six,
Seven,
Eight,
}
impl Default for DataBits {
fn default() -> Self {
DataBits::Eight
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Parity {
None,
Odd,
Even,
}
impl Default for Parity {
fn default() -> Self {
Parity::None
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StopBits {
One,
Two,
}
impl Default for StopBits {
fn default() -> Self {
StopBits::One
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FlowControl {
None,
Hardware,
Software,
}
impl Default for FlowControl {
fn default() -> Self {
FlowControl::None
}
}
#[derive(Debug, Clone)]
pub struct SerialConfig {
pub device: String,
pub baud: u32,
pub data_bits: DataBits,
pub parity: Parity,
pub stop_bits: StopBits,
pub flow_control: FlowControl,
}
impl SerialConfig {
pub fn parse(spec: &str) -> AsynResult<Self> {
let device = spec.trim().to_string();
if device.is_empty() {
return Err(AsynError::Status {
status: AsynStatus::Error,
message: "empty serial device path".into(),
});
}
Ok(Self {
device,
baud: 9600,
data_bits: DataBits::default(),
parity: Parity::default(),
stop_bits: StopBits::default(),
flow_control: FlowControl::default(),
})
}
}