opensearch_client/common/
string_or_string_array.rs1use serde::{Deserialize, Serialize};
12
13
14
15#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
16#[serde(untagged)]
17pub enum StringOrStringArray {
18 StringValue(String),
19 ArrayValue(Vec<String>),
20}
21
22impl std::fmt::Display for StringOrStringArray {
23 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
24 match self {
25 StringOrStringArray::StringValue(s) => write!(f, "{}", s),
26 StringOrStringArray::ArrayValue(v) => write!(f, "{}", v.join(",")),
27 }
28 }
29}
30
31
32impl StringOrStringArray {
33 pub fn as_vec(&self) -> Vec<String> {
34 match self {
35 StringOrStringArray::StringValue(s) => vec![s.clone()],
36 StringOrStringArray::ArrayValue(v) => v.clone(),
37 }
38 }
39}
40
41impl Default for StringOrStringArray {
42 fn default() -> Self {
43 StringOrStringArray::ArrayValue(Vec::new())
44 }
45}
46
47impl From<String> for StringOrStringArray {
49 fn from(s: String) -> Self {
50 StringOrStringArray::StringValue(s)
51 }
52}
53
54impl From<&str> for StringOrStringArray {
56 fn from(s: &str) -> Self {
57 StringOrStringArray::StringValue(s.to_string())
58 }
59}
60
61impl From<Vec<String>> for StringOrStringArray {
63 fn from(v: Vec<String>) -> Self {
64 StringOrStringArray::ArrayValue(v)
65 }
66}
67
68impl From<Vec<&str>> for StringOrStringArray {
70 fn from(v: Vec<&str>) -> Self {
71 StringOrStringArray::ArrayValue(v.into_iter().map(|s| s.to_string()).collect())
72 }
73}