soil_cli/params/
telemetry_params.rs1use clap::Args;
8
9#[derive(Debug, Clone, Args)]
11pub struct TelemetryParams {
12 #[arg(long)]
16 pub no_telemetry: bool,
17
18 #[arg(long = "telemetry-url", value_name = "URL VERBOSITY", value_parser = parse_telemetry_endpoints)]
26 pub telemetry_endpoints: Vec<(String, u8)>,
27}
28
29#[derive(Debug)]
30enum TelemetryParsingError {
31 MissingVerbosity,
32 VerbosityParsingError(std::num::ParseIntError),
33}
34
35impl std::error::Error for TelemetryParsingError {}
36
37impl std::fmt::Display for TelemetryParsingError {
38 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
39 match self {
40 TelemetryParsingError::MissingVerbosity => write!(f, "Verbosity level missing"),
41 TelemetryParsingError::VerbosityParsingError(e) => write!(f, "{}", e),
42 }
43 }
44}
45
46fn parse_telemetry_endpoints(s: &str) -> Result<(String, u8), TelemetryParsingError> {
47 let pos = s.find(' ');
48 match pos {
49 None => Err(TelemetryParsingError::MissingVerbosity),
50 Some(pos_) => {
51 let url = s[..pos_].to_string();
52 let verbosity =
53 s[pos_ + 1..].parse().map_err(TelemetryParsingError::VerbosityParsingError)?;
54 Ok((url, verbosity))
55 },
56 }
57}