can_dbc/ast/
numeric_value.rs

1use std::str::FromStr;
2
3use crate::DbcError;
4
5#[derive(Clone, Debug, PartialEq)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub enum NumericValue {
8    Uint(u64),
9    Int(i64),
10    Double(f64),
11}
12
13impl FromStr for NumericValue {
14    type Err = DbcError;
15
16    fn from_str(value: &str) -> Result<Self, Self::Err> {
17        if let Ok(v) = value.parse::<u64>() {
18            Ok(NumericValue::Uint(v))
19        } else if let Ok(v) = value.parse::<i64>() {
20            Ok(NumericValue::Int(v))
21        } else if let Ok(v) = value.parse::<f64>() {
22            Ok(NumericValue::Double(v))
23        } else {
24            Err(DbcError::InvalidNumericValue(value.to_string()))
25        }
26    }
27}