Add unstable-exhaustive-types flag to ruma-common

This commit is contained in:
Devin Ragotzy 2020-09-03 14:55:11 -04:00 committed by GitHub
parent 19af16850c
commit a3ae741699
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 25 additions and 21 deletions

View File

@ -21,3 +21,6 @@ strum = { version = "0.19.2", features = ["derive"] }
[dev-dependencies]
matches = "0.1.8"
[features]
unstable-exhaustive-types = []

View File

@ -18,7 +18,7 @@ use serde_json::Value as JsonValue;
/// To create an instance of this type, first create a `PublicRoomsChunkInit` and convert it via
/// `PublicRoomsChunk::from` / `.into()`.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct PublicRoomsChunk {
/// Aliases of the room.
#[serde(default, skip_serializing_if = "Vec::is_empty")]
@ -97,7 +97,7 @@ impl From<PublicRoomsChunkInit> for PublicRoomsChunk {
/// A filter for public rooms lists
#[derive(Clone, Debug, Default, Outgoing, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct Filter<'a> {
/// A string to search for in the room metadata, e.g. name, topic, canonical alias etc.
#[serde(skip_serializing_if = "Option::is_none")]
@ -114,7 +114,7 @@ impl Filter<'_> {
/// Information about which networks/protocols from application services on the
/// homeserver from which to request rooms.
#[derive(Clone, Debug, PartialEq, Eq, Outgoing)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[incoming_derive(Clone, PartialEq, Eq, !Deserialize)]
pub enum RoomNetwork<'a> {
/// Return rooms from the Matrix network.

View File

@ -11,7 +11,7 @@ use serde::Serialize;
/// Identity keys for a device.
#[derive(Clone, Debug, Outgoing, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[incoming_derive(Clone, Serialize)]
pub struct DeviceKeys<'a> {
/// The ID of the user the device belongs to. Must match the user ID used when logging in.
@ -51,7 +51,7 @@ impl<'a> DeviceKeys<'a> {
/// Additional data added to device key information by intermediate servers.
#[derive(Clone, Debug, Default, Outgoing, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[incoming_derive(Clone, Serialize)]
pub struct UnsignedDeviceInfo<'a> {
/// The display name which the user set on the device.

View File

@ -7,7 +7,7 @@ use strum::{Display, EnumString};
/// A description of a user's connectivity and availability for chat.
#[derive(Clone, Copy, Debug, PartialEq, Display, EnumString, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum PresenceState {

View File

@ -19,7 +19,7 @@ pub use self::{
/// For example, some rules may only be applied for messages from a particular sender, a particular
/// room, or by default. The push ruleset contains the entire set of scopes and rules.
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct Ruleset {
/// These rules configure behavior for (unencrypted) messages that match certain patterns.
pub content: Vec<PatternedPushRule>,
@ -58,7 +58,7 @@ impl Ruleset {
/// To create an instance of this type, first create a `PushRuleInit` and convert it via
/// `PushRule::from` / `.into()`.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct PushRule {
/// Actions to determine if and how a notification is delivered for events matching this rule.
pub actions: Vec<Action>,
@ -106,7 +106,7 @@ impl From<PushRuleInit> for PushRule {
/// To create an instance of this type, first create a `ConditionalPushRuleInit` and convert it via
/// `ConditionalPushRule::from` / `.into()`.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct ConditionalPushRule {
/// Actions to determine if and how a notification is delivered for events matching this rule.
pub actions: Vec<Action>,
@ -166,7 +166,7 @@ impl From<ConditionalPushRuleInit> for ConditionalPushRule {
/// To create an instance of this type, first create a `PatternedPushRuleInit` and convert it via
/// `PatternedPushRule::from` / `.into()`.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct PatternedPushRule {
/// Actions to determine if and how a notification is delivered for events matching this rule.
pub actions: Vec<Action>,

View File

@ -8,7 +8,7 @@ use serde_json::value::RawValue as RawJsonValue;
///
/// See https://matrix.org/docs/spec/client_server/r0.6.0#actions for details.
#[derive(Clone, Debug)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub enum Action {
/// Causes matching events to generate a notification.
Notify,
@ -26,7 +26,7 @@ pub enum Action {
/// The `set_tweak` action.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[serde(from = "tweak_serde::Tweak", into = "tweak_serde::Tweak")]
pub enum Tweak {
/// A string representing the sound to be played when this notification arrives.

View File

@ -16,7 +16,7 @@ use super::{
///
/// To create an instance of this type, use one of its `From` implementations.
#[derive(Clone, Debug, Serialize, Deserialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct AnyPushRule {
/// The actions to perform when this rule is matched.
pub actions: Vec<Action>,
@ -94,7 +94,7 @@ impl From<AnyPushRule> for PushRule {
/// An error that happens when `AnyPushRule` cannot
/// be converted into `PatternedPushRule`
#[derive(Debug)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct MissingPatternError;
impl Display for MissingPatternError {
@ -122,7 +122,7 @@ impl TryFrom<AnyPushRule> for PatternedPushRule {
/// An error that happens when `AnyPushRule` cannot
/// be converted into `ConditionalPushRule`
#[derive(Debug)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct MissingConditionsError;
impl Display for MissingConditionsError {

View File

@ -6,7 +6,7 @@ pub use room_member_count_is::{ComparisonOperator, RoomMemberCountIs};
/// A condition that must apply for an associated push rule's action to be taken.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum PushCondition {
/// This is a glob pattern match on a field of the event.

View File

@ -13,7 +13,7 @@ use serde::{Deserialize, Serialize};
/// To create an instance of this type, first create a `ProtocolInit` and convert it via
/// `Protocol::from` / `.into()`.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct Protocol {
/// Fields which may be used to identify a third party user.
pub user_fields: Vec<String>,
@ -65,7 +65,7 @@ impl From<ProtocolInit> for Protocol {
/// To create an instance of this type, first create a `ProtocolInstanceInit` and convert it via
/// `ProtocolInstance::from` / `.into()`.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct ProtocolInstance {
/// A human-readable description for the protocol, such as the name.
pub desc: String,
@ -109,7 +109,7 @@ impl From<ProtocolInstanceInit> for ProtocolInstance {
/// To create an instance of this type, first create a `FieldTypeInit` and convert it via
/// `FieldType::from` / `.into()`.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct FieldType {
/// A regular expression for validation of a field's value.
pub regexp: String,
@ -140,7 +140,7 @@ impl From<FieldTypeInit> for FieldType {
/// A third party network location.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct Location {
/// An alias for a matrix room.
pub alias: RoomAliasId,
@ -181,7 +181,7 @@ impl User {
/// The medium of a third party identifier.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize)]
#[non_exhaustive]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[serde(rename_all = "lowercase")]
pub enum Medium {
/// Email address identifier

View File

@ -20,6 +20,7 @@ unstable-exhaustive-types = [
"ruma-appservice-api/unstable-exhaustive-types",
"ruma-client-api/unstable-exhaustive-types",
"ruma-federation-api/unstable-exhaustive-types",
"ruma-common/unstable-exhaustive-types",
]
unstable-pre-spec = ["ruma-client-api/unstable-pre-spec"]
unstable-synapse-quirks = ["ruma-client-api/unstable-synapse-quirks"]