net_agent/
config.rs

1use std::fmt::Debug;
2use std::fmt::Formatter;
3
4use serde::Deserialize;
5use serde::Serialize;
6use tabled::Tabled;
7use toml::to_string;
8
9use net_config::NetConfig;
10#[allow(unused_imports)]
11use std::env;
12
13#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, NetConfig)]
14pub struct Config {
15    device_name: String,
16    number_packages: Option<u64>,
17    buffer_size: i32,
18    output_directory: String,
19}
20
21impl Config {
22    pub fn cli_builder() -> ConfigBuilder {
23        ConfigBuilder::default()
24    }
25
26    pub fn get_device_name(&self) -> &str {
27        &self.device_name
28    }
29
30    pub fn get_number_packages(&self) -> Option<u64> {
31        self.number_packages
32    }
33
34    pub fn get_buffer_size(&self) -> i32 {
35        self.buffer_size
36    }
37
38    pub fn get_output_directory(&self) -> &str {
39        &self.output_directory
40    }
41}
42
43#[derive(Debug, Default)]
44pub struct ConfigBuilder {
45    device_name: Option<String>,
46    number_packages: Option<u64>,
47    buffer_size: Option<i32>,
48    output_directory: Option<String>,
49}
50
51impl ConfigBuilder {
52    pub fn with_device_name(mut self, device_name: String) -> Self {
53        self.device_name = Some(device_name);
54        self
55    }
56
57    pub fn with_number_packages(mut self, number_packages: u64) -> Self {
58        self.number_packages = Some(number_packages);
59        self
60    }
61
62    pub fn with_buffer_size(mut self, buffer_size: i32) -> Self {
63        self.buffer_size = Some(buffer_size);
64        self
65    }
66
67    pub fn with_output_directory(mut self, output_directory: String) -> Self {
68        self.output_directory = Some(output_directory);
69        self
70    }
71
72    pub fn build(self) -> Config {
73        Config {
74            device_name: self.device_name.unwrap(),
75            number_packages: self.number_packages,
76            buffer_size: self.buffer_size.unwrap(),
77            output_directory: self.output_directory.unwrap(),
78        }
79    }
80}
81
82impl Tabled for Config {
83    const LENGTH: usize = 4;
84
85    fn fields(&self) -> Vec<std::borrow::Cow<'_, str>> {
86        vec![
87            self.device_name.as_str().into(),
88            self.number_packages.map(|n| n.to_string()).unwrap_or_else(|| "Infinite".to_string()).into(),
89            self.buffer_size.to_string().into(),
90            self.output_directory.as_str().into(),
91        ]
92    }
93
94    fn headers() -> Vec<std::borrow::Cow<'static, str>> {
95        vec![
96            "Device Name".into(),
97            "Number of Packages".into(),
98            "Buffer Size".into(),
99            "Output Directory".into(),
100        ]
101    }
102}