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#[bitwarden_ffi::wasm_record]
5#[derive(serde::Serialize, serde::Deserialize, Clone, Debug, PartialEq, Eq)]
6#[serde(transparent)]
7pub struct V2EncryptedMigrationsGracePeriodStart(
8    #[cfg_attr(feature = "wasm", tsify(type = "DateTime<Utc>"))] pub DateTime<Utc>,
9);
10
11#[cfg(feature = "wasm")]
12impl TryFrom<wasm_bindgen::JsValue> for V2EncryptedMigrationsGracePeriodStart {
13    type Error = serde_wasm_bindgen::Error;
14
15    fn try_from(value: wasm_bindgen::JsValue) -> Result<Self, Self::Error> {
16        serde_wasm_bindgen::from_value(value)
17    }
18}
19
20#[cfg(feature = "uniffi")]
21uniffi::custom_newtype!(V2EncryptedMigrationsGracePeriodStart, DateTime<Utc>);
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn serializes_as_an_rfc3339_string() {
29        let start = "2026-08-27T12:34:56.789Z".parse().unwrap();
30        let value = V2EncryptedMigrationsGracePeriodStart(start);
31
32        let serialized = serde_json::to_value(&value).unwrap();
33        assert_eq!(serialized, serde_json::json!("2026-08-27T12:34:56.789Z"));
34
35        let deserialized = serde_json::from_value(serialized).unwrap();
36        assert_eq!(value, deserialized);
37    }
38}