cache_fn/
options.rs

1use serde::{Deserialize, Serialize};
2use std::time::Duration;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct CacheOptions {
6    pub worker: String,
7    pub api_key: String,
8    #[serde(with = "duration_millis")]
9    pub revalidate: Option<Duration>,
10    pub tags: Vec<String>,
11    pub should_cache: Option<bool>,
12}
13
14impl Default for CacheOptions {
15    fn default() -> Self {
16        CacheOptions {
17            worker: String::from(""),
18            api_key: String::from(""),
19            revalidate: Some(Duration::from_secs(604800)), // 1 week default
20            tags: Vec::new(),
21            should_cache: None,
22        }
23    }
24}
25
26mod duration_millis {
27    use serde::{Deserializer, Serializer};
28    use std::time::Duration;
29
30    pub fn serialize<S>(duration: &Option<Duration>, serializer: S) -> Result<S::Ok, S::Error>
31    where
32        S: Serializer,
33    {
34        match duration {
35            Some(d) => serializer.serialize_u64(d.as_millis() as u64),
36            None => serializer.serialize_none(),
37        }
38    }
39
40    pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Duration>, D::Error>
41    where
42        D: Deserializer<'de>,
43    {
44        let millis: Option<u64> = serde::Deserialize::deserialize(deserializer)?;
45        Ok(millis.map(Duration::from_millis))
46    }
47}