atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git

Blame: bindings/matrix-sdk-crypto-ffi/src/device.rs

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
use std::collections::HashMap;
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
use matrix_sdk_crypto::Device as InnerDevice;
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
/// An E2EE capable Matrix device.
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
#[derive(uniffi::Record)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
pub struct Device {
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
    /// The device owner.
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
    pub user_id: String,
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
    /// The unique ID of the device.
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
    pub device_id: String,
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
    /// The published public identity keys of the devices
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
    ///
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
    /// A map from the key type (e.g. curve25519) to the base64 encoded key.
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
    pub keys: HashMap<String, String>,
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
    /// The supported algorithms of the device.
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
    pub algorithms: Vec<String>,
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
    /// The human readable name of the device.
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
    pub display_name: Option<String>,
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
    /// A flag indicating if the device has been blocked, blocked devices don't
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
    /// receive any room keys from us.
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
    pub is_blocked: bool,
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
    /// Is the device locally trusted
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
    pub locally_trusted: bool,
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
    /// Is our cross signing identity trusted and does the identity trust the
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
    /// device.
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
    pub cross_signing_trusted: bool,
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
    /// The first time this device was seen in local timestamp, milliseconds
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
    /// since epoch.
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
    pub first_time_seen_ts: u64,
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
    /// Whether or not the device is a dehydrated device.
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
    pub dehydrated: bool,
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
impl From<InnerDevice> for Device {
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
    fn from(d: InnerDevice) -> Self {
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
        Device {
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
            user_id: d.user_id().to_string(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
            device_id: d.device_id().to_string(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
            keys: d.keys().iter().map(|(k, v)| (k.to_string(), v.to_base64())).collect(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
            algorithms: d.algorithms().iter().map(|a| a.to_string()).collect(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
            display_name: d.display_name().map(|d| d.to_owned()),
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
            is_blocked: d.is_blacklisted(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
            locally_trusted: d.is_locally_trusted(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
            cross_signing_trusted: d.is_cross_signing_trusted(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
            first_time_seen_ts: d.first_time_seen_ts().0.into(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
            dehydrated: d.is_dehydrated(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
        }
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC50
}