Skip to main content

bitwarden_core/key_management/
v2_encrypted_migrations_grace_period_start.rs

1use chrono::{DateTime, Utc};
2
3/// Records when the user first became eligible for v2 encrypted migrations.
4#[cfg_attr(
5    feature = "wasm",
6    derive(tsify::Tsify),
7    tsify(into_wasm_abi, from_wasm_abi)
8)]
9#[derive(serde::Serialize, serde::Deserialize, Clone, Debug, PartialEq, Eq)]
10#[serde(transparent)]
11pub struct V2EncryptedMigrationsGracePeriodStart(
12    #[cfg_attr(feature = "wasm", tsify(type = "DateTime<Utc>"))] pub DateTime<Utc>,
13);
14
15#[cfg(feature = "wasm")]
16impl TryFrom<wasm_bindgen::JsValue> for V2EncryptedMigrationsGracePeriodStart {
17    type Error = serde_wasm_bindgen::Error;
18
19    fn try_from(value: wasm_bindgen::JsValue) -> Result<Self, Self::Error> {
20        serde_wasm_bindgen::from_value(value)
21    }
22}
23
24#[cfg(feature = "uniffi")]
25uniffi::custom_newtype!(V2EncryptedMigrationsGracePeriodStart, DateTime<Utc>);
26
27#[cfg(test)]
28mod tests {
29    use super::*;
30
31    #[test]
32    fn serializes_as_an_rfc3339_string() {
33        let start = "2026-08-27T12:34:56.789Z".parse().unwrap();
34        let value = V2EncryptedMigrationsGracePeriodStart(start);
35
36        let serialized = serde_json::to_value(&value).unwrap();
37        assert_eq!(serialized, serde_json::json!("2026-08-27T12:34:56.789Z"));
38
39        let deserialized = serde_json::from_value(serialized).unwrap();
40        assert_eq!(value, deserialized);
41    }
42}