Convert diffserv from a string to a nice enum.

Co-authored-by: Dave Taht <davet@taht.net>
This commit is contained in:
Herbert Wolverson 2023-01-17 20:00:10 +00:00
parent 87aaddd82b
commit 7ea5ab3cd8

View File

@ -30,7 +30,7 @@ pub struct TcCake {
struct TcCakeOptions {
rtt: u64,
bandwidth: String,
diffserv: String,
diffserv: DiffServ,
flowmode: String,
ack_filter: String,
nat: bool,
@ -66,6 +66,27 @@ pub struct TcCakeTin {
flow_quantum: u16,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
enum DiffServ { BestEffort, DiffServ3, DiffServ4, DiffServ8, Unknown }
impl Default for DiffServ {
fn default() -> Self {
Self::Unknown
}
}
impl DiffServ {
fn from_str(s: &str) -> Self {
match s.to_lowercase().as_str() {
"besteffort" => Self::BestEffort,
"diffserv3" => Self::DiffServ3,
"diffserv4" => Self::DiffServ4,
"diffserv8" => Self::DiffServ8,
_ => Self::Unknown,
}
}
}
impl TcCake {
pub(crate) fn from_json(map: &serde_json::Map<std::string::String, Value>) -> Result<Self> {
let mut result = Self::default();
@ -115,7 +136,7 @@ impl TcCakeOptions {
for (key, value) in map.iter() {
match key.as_str() {
"bandwidth" => result.bandwidth = value.as_str().unwrap().to_string(),
"diffserv" => result.diffserv = value.as_str().unwrap().to_string(),
"diffserv" => result.diffserv = DiffServ::from_str(value.as_str().unwrap()),
"flowmode" => result.flowmode = value.as_str().unwrap().to_string(),
"nat" => result.nat = value.as_bool().unwrap(),
"wash" => result.wash = value.as_bool().unwrap(),