1use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
8#[serde(rename_all = "kebab-case")]
9pub enum TldrCacheAction {
10 Cloned,
12 Updated,
14}
15
16#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
18#[serde(rename_all = "camelCase")]
19pub struct TldrCacheUpdate {
20 pub action: TldrCacheAction,
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub cache_dir: Option<String>,
25 #[serde(skip_serializing_if = "Option::is_none")]
27 pub client: Option<String>,
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub output: Option<String>,
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub revision: Option<String>,
34}
35
36#[cfg(test)]
37mod tests {
38 use serde_json::json;
39
40 use super::{TldrCacheAction, TldrCacheUpdate};
41
42 #[test]
43 fn cache_update_uses_a_stable_camel_case_shape() {
44 let update = TldrCacheUpdate {
45 action: TldrCacheAction::Cloned,
46 cache_dir: Some("/cache/mant/tldr-pages".to_owned()),
47 client: None,
48 output: None,
49 revision: Some("abc123".to_owned()),
50 };
51
52 assert_eq!(
53 serde_json::to_value(update).expect("serialize update"),
54 json!({
55 "action": "cloned",
56 "cacheDir": "/cache/mant/tldr-pages",
57 "revision": "abc123"
58 })
59 );
60 }
61}