kal/command_fragment/try_from_argument_value/impls/
vec.rs1use 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}