param_opt/parameter/dataset/
strings.rs

1use std::num::NonZeroUsize;
2
3use serde::Deserialize;
4
5use super::{Parameter, ParameterSpace};
6
7#[derive(Debug, Clone, PartialEq, Deserialize)]
8pub struct Strings {
9    values: Vec<String>,
10}
11
12impl Strings {
13    /// Return [None] if `values` are empty
14    pub fn new(values: Vec<String>) -> Option<Self> {
15        if values.is_empty() {
16            return None;
17        }
18        Some(Self { values })
19    }
20}
21
22impl ParameterSpace for Strings {
23    fn space_size(&self) -> std::num::NonZeroUsize {
24        NonZeroUsize::new(self.values.len()).expect("No values")
25    }
26}
27
28impl Parameter for Strings {
29    type Value = String;
30
31    fn value(&self, index: usize) -> &Self::Value {
32        &self.values[index]
33    }
34}