kal/command_fragment/try_from_argument_value/impls/
vec.rs

1use crate::{
2    CommaSeparated, CommandArgumentValue, SpaceSeparated, TryFromArgumentValue,
3    TryFromArgumentValueError,
4};
5
6macro_rules! try_into_vec {
7    ($value:expr, $strict:expr, $($split:tt)*) => {
8        match $value {
9            CommandArgumentValue::String(inner) => inner
10                .$($split)*
11                .map(|s| T::try_from_argument_value(CommandArgumentValue::String(s.trim().to_string()), false))
12                .collect::<Result<_, _>>(),
13            value => Ok(vec![T::try_from_argument_value(value, $strict)?]),
14        }
15    };
16}
17
18impl<T: TryFromArgumentValue> TryFromArgumentValue for SpaceSeparated<T> {
19    fn try_from_argument_value(
20        value: CommandArgumentValue,
21        strict: bool,
22    ) -> Result<Self, TryFromArgumentValueError> {
23        try_into_vec! {
24            value,
25            strict,
26            split_ascii_whitespace()
27        }
28        .map(SpaceSeparated)
29    }
30}
31impl<T: TryFromArgumentValue> TryFromArgumentValue for CommaSeparated<T> {
32    fn try_from_argument_value(
33        value: CommandArgumentValue,
34        strict: bool,
35    ) -> Result<Self, TryFromArgumentValueError> {
36        try_into_vec! {
37            value,
38            strict,
39            split(',')
40        }
41        .map(CommaSeparated)
42    }
43}