47 lines
1.3 KiB
Rust
47 lines
1.3 KiB
Rust
use std::{error::Error, fmt, str::FromStr};
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
pub struct ManagerConfig {
|
|
pub name: String,
|
|
pub frequency: u32,
|
|
pub chains: u64,
|
|
pub chain_len: u64,
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub struct ParseManagerConfigErr;
|
|
|
|
impl Error for ParseManagerConfigErr {}
|
|
|
|
impl fmt::Display for ParseManagerConfigErr {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
write!(f, "parse manager config err")
|
|
}
|
|
}
|
|
|
|
impl FromStr for ManagerConfig {
|
|
type Err = ParseManagerConfigErr;
|
|
|
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
let splits: Vec<&str> = s.split(',').collect();
|
|
|
|
if let [name, frequency, chains, chain_len] = splits[..] {
|
|
let name: String = name.parse().map_err(|_| ParseManagerConfigErr)?;
|
|
let frequency: u32 = frequency.parse().map_err(|_| ParseManagerConfigErr)?;
|
|
let chains: u64 = chains.parse().map_err(|_| ParseManagerConfigErr)?;
|
|
let chain_len: u64 = chain_len.parse().map_err(|_| ParseManagerConfigErr)?;
|
|
|
|
Ok(ManagerConfig {
|
|
name,
|
|
chains,
|
|
chain_len,
|
|
frequency,
|
|
})
|
|
} else {
|
|
Err(ParseManagerConfigErr)
|
|
}
|
|
}
|
|
}
|