client-api: Remove Option in favor of serde(default) for capabilities
This commit is contained in:
parent
fdd326edf7
commit
9359a5b18e
@ -20,6 +20,7 @@ edition = "2018"
|
||||
assign = "1.1.0"
|
||||
http = "0.2.1"
|
||||
js_int = { version = "0.1.9", features = ["serde"] }
|
||||
maplit = "1.0.2"
|
||||
percent-encoding = "2.1.0"
|
||||
ruma-api = { version = "=0.17.0-alpha.1", path = "../ruma-api" }
|
||||
ruma-common = { version = "0.2.0", path = "../ruma-common" }
|
||||
|
@ -1,5 +1,6 @@
|
||||
//! [GET /_matrix/client/r0/capabilities](https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-capabilities)
|
||||
|
||||
use maplit::btreemap;
|
||||
use ruma_api::ruma_api;
|
||||
use ruma_identifiers::RoomVersionId;
|
||||
use serde::{Deserialize, Serialize};
|
||||
@ -52,12 +53,20 @@ impl From<Capabilities> for Response {
|
||||
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
||||
pub struct Capabilities {
|
||||
/// Capability to indicate if the user can change their password.
|
||||
#[serde(rename = "m.change_password", skip_serializing_if = "Option::is_none")]
|
||||
pub change_password: Option<ChangePasswordCapability>,
|
||||
#[serde(
|
||||
rename = "m.change_password",
|
||||
default,
|
||||
skip_serializing_if = "ChangePasswordCapability::is_default"
|
||||
)]
|
||||
pub change_password: ChangePasswordCapability,
|
||||
|
||||
/// The room versions the server supports.
|
||||
#[serde(rename = "m.room_versions", skip_serializing_if = "Option::is_none")]
|
||||
pub room_versions: Option<RoomVersionsCapability>,
|
||||
#[serde(
|
||||
rename = "m.room_versions",
|
||||
default,
|
||||
skip_serializing_if = "RoomVersionsCapability::is_default"
|
||||
)]
|
||||
pub room_versions: RoomVersionsCapability,
|
||||
|
||||
/// Any other custom capabilities that the server supports outside of the specification,
|
||||
/// labeled using the Java package naming convention and stored as arbitrary JSON values.
|
||||
@ -85,6 +94,17 @@ impl ChangePasswordCapability {
|
||||
pub fn new(enabled: bool) -> Self {
|
||||
Self { enabled }
|
||||
}
|
||||
|
||||
/// Returns whether all fields have their default value.
|
||||
pub fn is_default(&self) -> bool {
|
||||
self.enabled
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for ChangePasswordCapability {
|
||||
fn default() -> Self {
|
||||
Self { enabled: true }
|
||||
}
|
||||
}
|
||||
|
||||
/// Information about the m.room_versions capability
|
||||
@ -107,10 +127,30 @@ impl RoomVersionsCapability {
|
||||
) -> Self {
|
||||
Self { default, available }
|
||||
}
|
||||
|
||||
/// Returns whether all fields have their default value.
|
||||
pub fn is_default(&self) -> bool {
|
||||
self.default == RoomVersionId::Version1
|
||||
&& self.available.len() == 1
|
||||
&& self
|
||||
.available
|
||||
.get(&RoomVersionId::Version1)
|
||||
.map(|stability| *stability == RoomVersionStability::Stable)
|
||||
.unwrap_or(false)
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for RoomVersionsCapability {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
default: RoomVersionId::Version1,
|
||||
available: btreemap! { RoomVersionId::Version1 => RoomVersionStability::Stable },
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The stability of a room version
|
||||
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
||||
pub enum RoomVersionStability {
|
||||
/// Support for the given version is stable.
|
||||
|
Loading…
x
Reference in New Issue
Block a user