usage/spec/
choices.rs

1use kdl::KdlNode;
2use serde::{Deserialize, Serialize};
3
4use crate::error::UsageErr;
5use crate::spec::context::ParsingContext;
6use crate::spec::helpers::NodeHelper;
7
8#[derive(Debug, Default, Clone, Serialize, Deserialize)]
9pub struct SpecChoices {
10    pub choices: Vec<String>,
11}
12
13impl SpecChoices {
14    pub(crate) fn parse(_ctx: &ParsingContext, node: &NodeHelper) -> Result<Self, UsageErr> {
15        let mut config = Self::default();
16        node.ensure_arg_len(1..)?;
17        config.choices = node
18            .args()
19            .map(|e| e.ensure_string())
20            .collect::<Result<_, _>>()?;
21        Ok(config)
22    }
23}
24
25impl From<&SpecChoices> for KdlNode {
26    fn from(arg: &SpecChoices) -> Self {
27        let mut node = KdlNode::new("choices");
28        for choice in &arg.choices {
29            node.push(choice.to_string());
30        }
31        node
32    }
33}