66 lines
2.0 KiB
Rust
66 lines
2.0 KiB
Rust
//! [GET /_matrix/federation/v1/user/devices/{userId}](https://matrix.org/docs/spec/server_server/r0.1.4#get-matrix-federation-v1-user-devices-userid)
|
|
|
|
use js_int::UInt;
|
|
use ruma_api::ruma_api;
|
|
use ruma_common::encryption::DeviceKeys;
|
|
use ruma_identifiers::{DeviceIdBox, UserId};
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
ruma_api! {
|
|
metadata: {
|
|
description: "Gets information on all of the user's devices.",
|
|
name: "get_devices",
|
|
method: GET,
|
|
path: "/_matrix/federation/v1/user/devices/:user_id",
|
|
rate_limited: false,
|
|
requires_authentication: true,
|
|
}
|
|
|
|
request: {
|
|
/// The user ID to retrieve devices for. Must be a user local to the receiving homeserver.
|
|
#[ruma_api(path)]
|
|
pub user_id: &'a UserId,
|
|
}
|
|
|
|
response: {
|
|
/// The user ID devices were requested for.
|
|
pub user_id: UserId,
|
|
|
|
/// A unique ID for a given user_id which describes the version of the returned device
|
|
/// list. This is matched with the `stream_id` field in `m.device_list_update` EDUs in
|
|
/// order to incrementally update the returned device_list.
|
|
pub stream_id: UInt,
|
|
|
|
/// The user's devices. May be empty.
|
|
pub devices: Vec<UserDevice>,
|
|
}
|
|
}
|
|
|
|
/// Information about a user's device.
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
pub struct UserDevice {
|
|
/// The device ID.
|
|
pub device_id: DeviceIdBox,
|
|
|
|
/// Identity keys for the device.
|
|
pub keys: DeviceKeys,
|
|
|
|
/// Optional display name for the device
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub device_display_name: Option<String>,
|
|
}
|
|
|
|
impl<'a> Request<'a> {
|
|
/// Creates a new `Request` with the given user id
|
|
pub fn new(user_id: &'a UserId) -> Self {
|
|
Self { user_id }
|
|
}
|
|
}
|
|
|
|
impl Response {
|
|
/// Creates a new `Response` with the given user id, stream id and devices.
|
|
pub fn new(user_id: UserId, stream_id: UInt, devices: Vec<UserDevice>) -> Self {
|
|
Self { user_id, stream_id, devices }
|
|
}
|
|
}
|