federation-api: Make some types non-exhaustive
This commit is contained in:
parent
c798ef1fad
commit
18c507bf49
@ -1,6 +1,7 @@
|
|||||||
//! [GET /_matrix/federation/v1/event_auth/{roomId}/{eventId}](https://matrix.org/docs/spec/server_server/r0.1.4#get-matrix-federation-v1-event-auth-roomid-eventid)
|
//! [GET /_matrix/federation/v1/event_auth/{roomId}/{eventId}](https://matrix.org/docs/spec/server_server/r0.1.4#get-matrix-federation-v1-event-auth-roomid-eventid)
|
||||||
|
|
||||||
use ruma_api::ruma_api;
|
use ruma_api::ruma_api;
|
||||||
|
use ruma_common::Raw;
|
||||||
use ruma_events::pdu::Pdu;
|
use ruma_events::pdu::Pdu;
|
||||||
use ruma_identifiers::{EventId, RoomId};
|
use ruma_identifiers::{EventId, RoomId};
|
||||||
|
|
||||||
@ -14,19 +15,35 @@ ruma_api! {
|
|||||||
requires_authentication: true,
|
requires_authentication: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
request: {
|
request: {
|
||||||
/// The room ID to get the auth chain for.
|
/// The room ID to get the auth chain for.
|
||||||
#[ruma_api(path)]
|
#[ruma_api(path)]
|
||||||
pub room_id: RoomId,
|
pub room_id: &'a RoomId,
|
||||||
|
|
||||||
/// The event ID to get the auth chain for.
|
/// The event ID to get the auth chain for.
|
||||||
#[ruma_api(path)]
|
#[ruma_api(path)]
|
||||||
pub event_id: EventId,
|
pub event_id: &'a EventId,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
response: {
|
response: {
|
||||||
/// The full set of authorization events that make up the state of the room,
|
/// The full set of authorization events that make up the state of the room,
|
||||||
/// and their authorization events, recursively.
|
/// and their authorization events, recursively.
|
||||||
pub auth_chain: Vec<Raw<Pdu>>,
|
pub auth_chain: Vec<Raw<Pdu>>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> Request<'a> {
|
||||||
|
/// Creates a new `Request` with the given room id and event id.
|
||||||
|
pub fn new(room_id: &'a RoomId, event_id: &'a EventId) -> Self {
|
||||||
|
Self { room_id, event_id }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Response {
|
||||||
|
/// Creates a new `Response` with the given auth chain.
|
||||||
|
pub fn new(auth_chain: Vec<Raw<Pdu>>) -> Self {
|
||||||
|
Self { auth_chain }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -17,6 +17,7 @@ ruma_api! {
|
|||||||
requires_authentication: true,
|
requires_authentication: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
request: {
|
request: {
|
||||||
/// The room ID to backfill.
|
/// The room ID to backfill.
|
||||||
#[ruma_api(path)]
|
#[ruma_api(path)]
|
||||||
@ -31,6 +32,7 @@ ruma_api! {
|
|||||||
pub limit: UInt,
|
pub limit: UInt,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
response: {
|
response: {
|
||||||
/// The `server_name` of the homeserver sending this transaction.
|
/// The `server_name` of the homeserver sending this transaction.
|
||||||
pub origin: ServerNameBox,
|
pub origin: ServerNameBox,
|
||||||
|
@ -16,12 +16,14 @@ ruma_api! {
|
|||||||
requires_authentication: true,
|
requires_authentication: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
request: {
|
request: {
|
||||||
/// The user ID to retrieve devices for. Must be a user local to the receiving homeserver.
|
/// The user ID to retrieve devices for. Must be a user local to the receiving homeserver.
|
||||||
#[ruma_api(path)]
|
#[ruma_api(path)]
|
||||||
pub user_id: &'a UserId,
|
pub user_id: &'a UserId,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
response: {
|
response: {
|
||||||
/// The user ID devices were requested for.
|
/// The user ID devices were requested for.
|
||||||
pub user_id: UserId,
|
pub user_id: UserId,
|
||||||
@ -36,8 +38,25 @@ ruma_api! {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 and stream id.
|
||||||
|
///
|
||||||
|
/// The device list will be empty.
|
||||||
|
pub fn new(user_id: UserId, stream_id: UInt) -> Self {
|
||||||
|
Self { user_id, stream_id, devices: Vec::new() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Information about a user's device.
|
/// Information about a user's device.
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
|
#[non_exhaustive]
|
||||||
pub struct UserDevice {
|
pub struct UserDevice {
|
||||||
/// The device ID.
|
/// The device ID.
|
||||||
pub device_id: DeviceIdBox,
|
pub device_id: DeviceIdBox,
|
||||||
@ -50,16 +69,9 @@ pub struct UserDevice {
|
|||||||
pub device_display_name: Option<String>,
|
pub device_display_name: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Request<'a> {
|
impl UserDevice {
|
||||||
/// Creates a new `Request` with the given user id
|
/// Creates a new `UserDevice` with the given device id and keys.
|
||||||
pub fn new(user_id: &'a UserId) -> Self {
|
pub fn new(device_id: DeviceIdBox, keys: DeviceKeys) -> Self {
|
||||||
Self { user_id }
|
Self { device_id, keys, device_display_name: None }
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,13 +13,22 @@ pub mod get_server_version;
|
|||||||
|
|
||||||
/// Public key of the homeserver for verifying digital signatures.
|
/// Public key of the homeserver for verifying digital signatures.
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
|
#[non_exhaustive]
|
||||||
pub struct VerifyKey {
|
pub struct VerifyKey {
|
||||||
/// The Unpadded Base64 encoded key.
|
/// The Unpadded Base64 encoded key.
|
||||||
pub key: String,
|
pub key: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl VerifyKey {
|
||||||
|
/// Creates a new `VerifyKey` from the given key.
|
||||||
|
pub fn new(key: String) -> Self {
|
||||||
|
Self { key }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A key the server used to use, but stopped using.
|
/// A key the server used to use, but stopped using.
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
|
#[non_exhaustive]
|
||||||
pub struct OldVerifyKey {
|
pub struct OldVerifyKey {
|
||||||
/// Timestamp when this key expired.
|
/// Timestamp when this key expired.
|
||||||
#[serde(with = "ruma_serde::time::ms_since_unix_epoch")]
|
#[serde(with = "ruma_serde::time::ms_since_unix_epoch")]
|
||||||
@ -28,10 +37,17 @@ pub struct OldVerifyKey {
|
|||||||
pub key: String,
|
pub key: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spec is wrong, all fields are required (see
|
impl OldVerifyKey {
|
||||||
// https://github.com/matrix-org/matrix-doc/issues/2508)
|
/// Creates a new `OldVerifyKey` with the given expiry time and key.
|
||||||
|
pub fn new(expired_ts: SystemTime, key: String) -> Self {
|
||||||
|
Self { expired_ts, key }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spec is wrong, all fields are required (see https://github.com/matrix-org/matrix-doc/issues/2508)
|
||||||
/// Queried server key, signed by the notary server.
|
/// Queried server key, signed by the notary server.
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
|
#[non_exhaustive]
|
||||||
pub struct ServerKey {
|
pub struct ServerKey {
|
||||||
/// DNS name of the homeserver.
|
/// DNS name of the homeserver.
|
||||||
pub server_name: ServerNameBox,
|
pub server_name: ServerNameBox,
|
||||||
@ -47,3 +63,18 @@ pub struct ServerKey {
|
|||||||
#[serde(with = "ruma_serde::time::ms_since_unix_epoch")]
|
#[serde(with = "ruma_serde::time::ms_since_unix_epoch")]
|
||||||
pub valid_until_ts: SystemTime,
|
pub valid_until_ts: SystemTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ServerKey {
|
||||||
|
/// Creates a new `ServerKey` with the given server name and validity timestamp.
|
||||||
|
///
|
||||||
|
/// All other fields will be empty.
|
||||||
|
pub fn new(server_name: ServerNameBox, valid_until_ts: SystemTime) -> Self {
|
||||||
|
Self {
|
||||||
|
server_name,
|
||||||
|
verify_keys: BTreeMap::new(),
|
||||||
|
old_verify_keys: BTreeMap::new(),
|
||||||
|
signatures: BTreeMap::new(),
|
||||||
|
valid_until_ts,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -13,11 +13,34 @@ ruma_api! {
|
|||||||
requires_authentication: false,
|
requires_authentication: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
#[non_exhaustive]
|
||||||
request: {}
|
request: {}
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
response: {
|
response: {
|
||||||
/// Queried server key, signed by the notary server.
|
/// Queried server key, signed by the notary server.
|
||||||
#[ruma_api(body)]
|
#[ruma_api(body)]
|
||||||
pub server_key: ServerKey,
|
pub server_key: ServerKey,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Request {
|
||||||
|
/// Creates an empty `Request`.
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Response {
|
||||||
|
/// Creates a new `Response` with the given server key.
|
||||||
|
pub fn new(server_key: ServerKey) -> Self {
|
||||||
|
Self { server_key }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<ServerKey> for Response {
|
||||||
|
fn from(server_key: ServerKey) -> Self {
|
||||||
|
Self::new(server_key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user