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}