bitwarden_core/
uniffi_support.rs

1//! This module contains custom type converters for Uniffi.
2
3use std::num::NonZeroU32;
4
5use bitwarden_crypto::CryptoError;
6use uuid::Uuid;
7
8use crate::key_management::SignedSecurityState;
9
10uniffi::use_remote_type!(bitwarden_crypto::NonZeroU32);
11
12type DateTime = chrono::DateTime<chrono::Utc>;
13uniffi::custom_type!(DateTime, std::time::SystemTime, { remote });
14
15uniffi::custom_type!(Uuid, String, {
16    remote,
17    try_lift: |val| Uuid::parse_str(val.as_str()).map_err(|e| e.into()),
18    lower: |obj| obj.to_string(),
19});
20
21// Uniffi doesn't emit unused types, this is a dummy record to ensure that the custom type
22// converters are emitted
23#[allow(dead_code)]
24#[derive(uniffi::Record)]
25struct UniffiConverterDummyRecord {
26    uuid: Uuid,
27    date: DateTime,
28}
29
30uniffi::custom_type!(SignedSecurityState, String, {
31    try_lift: |val| {
32        val.parse().map_err(|e| {
33            CryptoError::EncodingError(e).into()
34        })
35    },
36    lower: |obj| obj.into(),
37});