1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
8#[serde(rename_all = "camelCase")]
9pub enum DynamicString {
10 #[serde(rename = "literalString")]
11 Literal(String),
12 #[serde(rename = "path")]
13 Path(String),
14}
15
16impl DynamicString {
17 pub fn literal(value: impl Into<String>) -> Self {
18 Self::Literal(value.into())
19 }
20
21 pub fn path(value: impl Into<String>) -> Self {
22 Self::Path(value.into())
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29 use serde_json::json;
30
31 #[test]
32 fn serializes_literal_string() {
33 let value = DynamicString::literal("hello");
34 let serialized = serde_json::to_value(&value).unwrap();
35 assert_eq!(serialized, json!({ "literalString": "hello" }));
36 }
37
38 #[test]
39 fn serializes_path_string() {
40 let value = DynamicString::path("/user/name");
41 let serialized = serde_json::to_value(&value).unwrap();
42 assert_eq!(serialized, json!({ "path": "/user/name" }));
43 }
44}