Borrow strings and identifiers in more endpoints

This commit is contained in:
Jonas Platte 2020-08-08 16:50:37 +02:00
parent 6f805d2584
commit a74dddd93b
No known key found for this signature in database
GPG Key ID: 7D261D771D915378
6 changed files with 27 additions and 23 deletions

View File

@ -2,6 +2,7 @@
use std::{collections::BTreeMap, fmt::Debug}; use std::{collections::BTreeMap, fmt::Debug};
use ruma_api::Outgoing;
use ruma_events::Algorithm; use ruma_events::Algorithm;
use ruma_identifiers::{DeviceId, DeviceKeyId, UserId}; use ruma_identifiers::{DeviceId, DeviceKeyId, UserId};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -69,21 +70,24 @@ pub enum OneTimeKey {
} }
/// A cross signing key. /// A cross signing key.
#[derive(Clone, Debug, Serialize, Deserialize)] #[derive(Clone, Debug, Outgoing, Serialize)]
pub struct CrossSigningKey { pub struct CrossSigningKey<'a> {
/// The ID of the user the key belongs to. /// The ID of the user the key belongs to.
pub user_id: UserId, pub user_id: &'a UserId,
/// What the key is used for. /// What the key is used for.
pub usage: Vec<KeyUsage>, pub usage: &'a [KeyUsage],
/// The public key. The object must have exactly one property. /// The public key. The object must have exactly one property.
pub keys: BTreeMap<String, String>, pub keys: BTreeMap<String, String>,
/// Signatures of the key. Only optional for master key. /// Signatures of the key. Only optional for master key.
#[serde(skip_serializing_if = "BTreeMap::is_empty")] #[serde(skip_serializing_if = "BTreeMap::is_empty")]
pub signatures: BTreeMap<UserId, BTreeMap<String, String>>, pub signatures: BTreeMap<UserId, BTreeMap<String, String>>,
} }
/// The usage of a cross signing key. /// The usage of a cross signing key.
#[derive(Clone, Copy, Debug, Serialize, Deserialize)] #[derive(Clone, Copy, Debug, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub enum KeyUsage { pub enum KeyUsage {
/// Master key. /// Master key.

View File

@ -17,21 +17,21 @@ ruma_api! {
/// The desired start point of the list. /// The desired start point of the list.
/// Should be the next_batch field from a response to an earlier call to /sync. /// Should be the next_batch field from a response to an earlier call to /sync.
#[ruma_api(query)] #[ruma_api(query)]
pub from: String, pub from: &'a str,
/// The desired end point of the list. /// The desired end point of the list.
/// Should be the next_batch field from a recent call to /sync - typically the most recent such call. /// Should be the next_batch field from a recent call to /sync - typically the most recent such call.
#[ruma_api(query)] #[ruma_api(query)]
pub to: String, pub to: &'a str,
} }
response: { response: {
/// The Matrix User IDs of all users who updated their device identity keys. /// The Matrix User IDs of all users who updated their device identity keys.
pub changed: Vec<UserId>, pub changed: &'a [UserId],
/// The Matrix User IDs of all users who may have left all the end-to-end /// The Matrix User IDs of all users who may have left all the end-to-end
/// encrypted rooms they previously shared with the user. /// encrypted rooms they previously shared with the user.
pub left: Vec<UserId> pub left: &'a [UserId],
} }
error: crate::Error error: crate::Error

View File

@ -38,7 +38,7 @@ ruma_api! {
/// ensure its response contains the keys advertised by the notification /// ensure its response contains the keys advertised by the notification
/// in that sync. /// in that sync.
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub token: Option<String>, pub token: Option<&'a str>,
} }
response: { response: {

View File

@ -22,17 +22,17 @@ ruma_api! {
/// The user's master key. /// The user's master key.
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub master_key: Option<CrossSigningKey>, pub master_key: Option<CrossSigningKey<'a>>,
/// The user's self-signing key. Must be signed with the accompanied master, or by the /// The user's self-signing key. Must be signed with the accompanied master, or by the
/// user's most recently uploaded master key if no master key is included in the request. /// user's most recently uploaded master key if no master key is included in the request.
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub self_signing_key: Option<CrossSigningKey>, pub self_signing_key: Option<CrossSigningKey<'a>>,
/// The user's user-signing key. Must be signed with the accompanied master, or by the /// The user's user-signing key. Must be signed with the accompanied master, or by the
/// user's most recently uploaded master key if no master key is included in the request. /// user's most recently uploaded master key if no master key is included in the request.
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub user_signing_key: Option<CrossSigningKey>, pub user_signing_key: Option<CrossSigningKey<'a>>,
} }
response: {} response: {}

View File

@ -26,7 +26,7 @@ ruma_api! {
/// A request identifier unique to the access token used to send the request. /// A request identifier unique to the access token used to send the request.
#[ruma_api(path)] #[ruma_api(path)]
pub txn_id: String, pub txn_id: &'a str,
/// A map of users to devices to a content for a message event to be /// A map of users to devices to a content for a message event to be
/// sent to the user's device. Individual message events can be sent /// sent to the user's device. Individual message events can be sent

View File

@ -1,9 +1,9 @@
//! [POST /_matrix/client/r0/user_directory/search](https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-user-directory-search) //! [POST /_matrix/client/r0/user_directory/search](https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-user-directory-search)
use js_int::{uint, UInt}; use js_int::{uint, UInt};
use ruma_api::ruma_api; use ruma_api::{ruma_api, Outgoing};
use ruma_identifiers::UserId; use ruma_identifiers::UserId;
use serde::{Deserialize, Serialize}; use serde::Serialize;
ruma_api! { ruma_api! {
metadata: { metadata: {
@ -17,7 +17,7 @@ ruma_api! {
request: { request: {
/// The term to search for. /// The term to search for.
pub search_term: String, pub search_term: &'a str,
/// The maximum number of results to return. /// The maximum number of results to return.
/// ///
@ -28,7 +28,7 @@ ruma_api! {
response: { response: {
/// Ordered by rank and then whether or not profile info is available. /// Ordered by rank and then whether or not profile info is available.
pub results: Vec<User>, pub results: &'a [User<'a>],
/// Indicates if the result list has been truncated by the limit. /// Indicates if the result list has been truncated by the limit.
pub limited: bool, pub limited: bool,
@ -46,16 +46,16 @@ fn is_default_limit(limit: &UInt) -> bool {
} }
/// User data as result of a search. /// User data as result of a search.
#[derive(Clone, Debug, Deserialize, Serialize)] #[derive(Clone, Debug, Outgoing, Serialize)]
pub struct User { pub struct User<'a> {
/// The user's matrix user ID. /// The user's matrix user ID.
pub user_id: UserId, pub user_id: &'a UserId,
/// The display name of the user, if one exists. /// The display name of the user, if one exists.
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>, pub display_name: Option<&'a str>,
/// The avatar url, as an MXC, if one exists. /// The avatar url, as an MXC, if one exists.
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>, pub avatar_url: Option<&'a str>,
} }