core_crypto_ffi/
database_key.rs1use core_crypto_keystore::Connection as Database;
2#[cfg(target_family = "wasm")]
3use wasm_bindgen::prelude::*;
4
5use crate::{CoreCryptoError, CoreCryptoResult};
6
7#[derive(Debug, derive_more::From, derive_more::Into)]
10#[cfg_attr(target_family = "wasm", wasm_bindgen)]
11#[cfg_attr(not(target_family = "wasm"), derive(derive_more::Deref, derive_more::Constructor))]
12pub struct DatabaseKey(core_crypto_keystore::DatabaseKey);
13
14#[cfg(not(target_family = "wasm"))]
15uniffi::custom_type!(DatabaseKey, Vec<u8>, {
16 lower: |key| key.0.to_vec(),
17 try_lift: |vec| {
18 core_crypto_keystore::DatabaseKey::try_from(vec.as_slice())
19 .map(DatabaseKey)
20 .map_err(CoreCryptoError::generic())
21 .map_err(Into::into)
22 }
23});
24
25#[cfg_attr(target_family = "wasm", wasm_bindgen(js_name = "migrateDatabaseKeyTypeToBytes"))]
28#[cfg_attr(not(target_family = "wasm"), uniffi::export)]
29pub async fn migrate_db_key_type_to_bytes(name: &str, old_key: &str, new_key: &DatabaseKey) -> CoreCryptoResult<()> {
30 Database::migrate_db_key_type_to_bytes(name, old_key, &new_key.0)
31 .await
32 .map_err(CoreCryptoError::generic())
33}
34
35#[cfg(target_family = "wasm")]
36#[wasm_bindgen]
37impl DatabaseKey {
38 #[wasm_bindgen(constructor)]
39 pub fn new(buf: &[u8]) -> Result<DatabaseKey, wasm_bindgen::JsError> {
40 let key = core_crypto_keystore::DatabaseKey::try_from(buf).map_err(CoreCryptoError::generic())?;
41 Ok(DatabaseKey(key))
42 }
43}