param_opt/parameter/dataset/
mod.rs1use 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}