param_opt/parameter/dataset/
mod.rs

1use std::{fmt, num::NonZeroUsize};
2
3use serde::Deserialize;
4
5use self::strings::Strings;
6
7use super::{Parameter, ParameterSpace};
8
9pub mod strings;
10
11#[derive(Debug, Clone, PartialEq, Deserialize)]
12#[serde(tag = "type", rename_all = "snake_case")]
13pub enum ParameterDataset {
14    Strings(Strings),
15}
16impl ParameterSpace for ParameterDataset {
17    fn space_size(&self) -> NonZeroUsize {
18        match self {
19            ParameterDataset::Strings(x) => ParameterSpace::space_size(x),
20        }
21    }
22}
23impl ParameterDataset {
24    pub fn value(&self, index: usize) -> ParameterValue {
25        match self {
26            ParameterDataset::Strings(x) => ParameterValue::String(Parameter::value(x, index)),
27        }
28    }
29}
30
31#[derive(Debug, Clone, PartialEq)]
32pub enum ParameterValue<'a> {
33    String(&'a str),
34    Int(i64),
35    Float(f64),
36}
37impl<'a> ParameterValue<'a> {
38    pub fn as_string(&'a self) -> Option<&'a str> {
39        match self {
40            ParameterValue::String(s) => Some(s),
41            _ => None,
42        }
43    }
44
45    pub fn as_int(&self) -> Option<i64> {
46        match self {
47            ParameterValue::Int(i) => Some(*i),
48            _ => None,
49        }
50    }
51
52    pub fn as_float(&self) -> Option<f64> {
53        match self {
54            ParameterValue::Float(x) => Some(*x),
55            _ => None,
56        }
57    }
58}
59impl fmt::Display for ParameterValue<'_> {
60    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
61        match self {
62            ParameterValue::String(s) => f.write_str(s),
63            ParameterValue::Int(i) => f.write_str(&i.to_string()),
64            ParameterValue::Float(x) => f.write_str(&x.to_string()),
65        }
66    }
67}