matrix_sdk_crypto_ffi/
users.rs1use matrix_sdk_crypto::{UserIdentity as SdkUserIdentity, types::CrossSigningKey};
2
3use crate::CryptoStoreError;
4
5#[derive(uniffi::Enum)]
7pub enum UserIdentity {
8 Own {
10 user_id: String,
12 trusts_our_own_device: bool,
14 master_key: String,
16 user_signing_key: String,
18 self_signing_key: String,
20 has_verification_violation: bool,
22 },
23 Other {
25 user_id: String,
27 master_key: String,
29 self_signing_key: String,
31 has_verification_violation: bool,
33 },
34}
35
36impl UserIdentity {
37 pub(crate) async fn from_rust(i: SdkUserIdentity) -> Result<Self, CryptoStoreError> {
38 Ok(match i {
39 SdkUserIdentity::Own(i) => {
40 let master: CrossSigningKey = i.master_key().as_ref().to_owned();
41 let user_signing: CrossSigningKey = i.user_signing_key().as_ref().to_owned();
42 let self_signing: CrossSigningKey = i.self_signing_key().as_ref().to_owned();
43
44 UserIdentity::Own {
45 user_id: i.user_id().to_string(),
46 trusts_our_own_device: i.trusts_our_own_device().await?,
47 master_key: serde_json::to_string(&master)?,
48 user_signing_key: serde_json::to_string(&user_signing)?,
49 self_signing_key: serde_json::to_string(&self_signing)?,
50 has_verification_violation: i.has_verification_violation(),
51 }
52 }
53 SdkUserIdentity::Other(i) => {
54 let master: CrossSigningKey = i.master_key().as_ref().to_owned();
55 let self_signing: CrossSigningKey = i.self_signing_key().as_ref().to_owned();
56
57 UserIdentity::Other {
58 user_id: i.user_id().to_string(),
59 master_key: serde_json::to_string(&master)?,
60 self_signing_key: serde_json::to_string(&self_signing)?,
61 has_verification_violation: i.has_verification_violation(),
62 }
63 }
64 })
65 }
66}