matrix-rust-sdk/src/crypto/device.rs

72 lines
1.9 KiB
Rust
Raw Normal View History

// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use std::collections::HashMap;
use ruma_client_api::r0::keys::{DeviceKeys, KeyAlgorithm};
use ruma_events::Algorithm;
#[derive(Debug)]
pub struct Device {
user_id: String,
device_id: String,
algorithms: Vec<Algorithm>,
keys: HashMap<KeyAlgorithm, String>,
display_name: Option<String>,
deleted: bool,
trust_state: TrustState,
}
#[derive(Debug)]
pub enum TrustState {
Verified,
BlackListed,
Ignored,
Unset,
}
impl Device {
pub fn id(&self) -> &str {
&self.device_id
}
pub fn user_id(&self) -> &str {
&self.user_id
}
}
impl From<&DeviceKeys> for Device {
fn from(device_keys: &DeviceKeys) -> Self {
let mut keys = HashMap::new();
for (key_id, key) in device_keys.keys.iter() {
let key_id = key_id.0;
keys.insert(key_id, key.clone());
}
Device {
user_id: device_keys.user_id.to_string(),
device_id: device_keys.device_id.clone(),
algorithms: device_keys.algorithms.clone(),
keys,
display_name: device_keys
.unsigned
.as_ref()
.map(|d| d.device_display_name.clone()),
deleted: false,
trust_state: TrustState::Unset,
}
}
}