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}