matrix_sdk_crypto_ffi/
users.rs1use matrix_sdk_crypto::{types::CrossSigningKey, UserIdentity as SdkUserIdentity};
2
3use crate::CryptoStoreError;
4
5#[derive(uniffi::Enum)]
8pub enum UserIdentity {
9 Own {
11 user_id: String,
13 trusts_our_own_device: bool,
15 master_key: String,
17 user_signing_key: String,
19 self_signing_key: String,
21 has_verification_violation: bool,
23 },
24 Other {
26 user_id: String,
28 master_key: String,
30 self_signing_key: String,
32 has_verification_violation: bool,
34 },
35}
36
37impl UserIdentity {
38 pub(crate) async fn from_rust(i: SdkUserIdentity) -> Result<Self, CryptoStoreError> {
39 Ok(match i {
40 SdkUserIdentity::Own(i) => {
41 let master: CrossSigningKey = i.master_key().as_ref().to_owned();
42 let user_signing: CrossSigningKey = i.user_signing_key().as_ref().to_owned();
43 let self_signing: CrossSigningKey = i.self_signing_key().as_ref().to_owned();
44
45 UserIdentity::Own {
46 user_id: i.user_id().to_string(),
47 trusts_our_own_device: i.trusts_our_own_device().await?,
48 master_key: serde_json::to_string(&master)?,
49 user_signing_key: serde_json::to_string(&user_signing)?,
50 self_signing_key: serde_json::to_string(&self_signing)?,
51 has_verification_violation: i.has_verification_violation(),
52 }
53 }
54 SdkUserIdentity::Other(i) => {
55 let master: CrossSigningKey = i.master_key().as_ref().to_owned();
56 let self_signing: CrossSigningKey = i.self_signing_key().as_ref().to_owned();
57
58 UserIdentity::Other {
59 user_id: i.user_id().to_string(),
60 master_key: serde_json::to_string(&master)?,
61 self_signing_key: serde_json::to_string(&self_signing)?,
62 has_verification_violation: i.has_verification_violation(),
63 }
64 }
65 })
66 }
67}