1use std::collections::HashMap;
23use matrix_sdk_crypto::Device as InnerDevice;
45/// An E2EE capable Matrix device.
6#[derive(uniffi::Record)]
7pub struct Device {
8/// The device owner.
9pub user_id: String,
10/// The unique ID of the device.
11pub device_id: String,
12/// The published public identity keys of the devices
13 ///
14 /// A map from the key type (e.g. curve25519) to the base64 encoded key.
15pub keys: HashMap<String, String>,
16/// The supported algorithms of the device.
17pub algorithms: Vec<String>,
18/// The human readable name of the device.
19pub display_name: Option<String>,
20/// A flag indicating if the device has been blocked, blocked devices don't
21 /// receive any room keys from us.
22pub is_blocked: bool,
23/// Is the device locally trusted
24pub locally_trusted: bool,
25/// Is our cross signing identity trusted and does the identity trust the
26 /// device.
27pub cross_signing_trusted: bool,
28/// The first time this device was seen in local timestamp, milliseconds
29 /// since epoch.
30pub first_time_seen_ts: u64,
31/// Whether or not the device is a dehydrated device.
32pub dehydrated: bool,
33}
3435impl From<InnerDevice> for Device {
36fn from(d: InnerDevice) -> Self {
37 Device {
38 user_id: d.user_id().to_string(),
39 device_id: d.device_id().to_string(),
40 keys: d.keys().iter().map(|(k, v)| (k.to_string(), v.to_base64())).collect(),
41 algorithms: d.algorithms().iter().map(|a| a.to_string()).collect(),
42 display_name: d.display_name().map(|d| d.to_owned()),
43 is_blocked: d.is_blacklisted(),
44 locally_trusted: d.is_locally_trusted(),
45 cross_signing_trusted: d.is_cross_signing_trusted(),
46 first_time_seen_ts: d.first_time_seen_ts().0.into(),
47 dehydrated: d.is_dehydrated(),
48 }
49 }
50}