1use serde::de::{self, Deserializer, Visitor};
 2use std::fmt;
 3
 4/// Deserializes a non-empty string array.
 5pub fn non_empty_string_vec<'de, D>(deserializer: D) -> Result<Vec<String>, D::Error>
 6where
 7    D: Deserializer<'de>,
 8{
 9    struct NonEmptyStringVecVisitor;
10
11    impl<'de> Visitor<'de> for NonEmptyStringVecVisitor {
12        type Value = Vec<String>;
13
14        fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
15            formatter.write_str("a list of non-empty strings")
16        }
17
18        fn visit_seq<V>(self, mut seq: V) -> Result<Vec<String>, V::Error>
19        where
20            V: de::SeqAccess<'de>,
21        {
22            let mut vec = Vec::new();
23            while let Some(value) = seq.next_element::<String>()? {
24                if value.is_empty() {
25                    return Err(de::Error::invalid_value(
26                        de::Unexpected::Str(&value),
27                        &"a non-empty string",
28                    ));
29                }
30                vec.push(value);
31            }
32            Ok(vec)
33        }
34    }
35
36    deserializer.deserialize_seq(NonEmptyStringVecVisitor)
37}