ruma_events/key/verification/
cancel.rs1use ruma_common::{serde::StringEnum, OwnedTransactionId};
6use ruma_macros::EventContent;
7use serde::{Deserialize, Serialize};
8
9use crate::{relation::Reference, PrivOwnedStr};
10
11#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
15#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
16#[ruma_event(type = "m.key.verification.cancel", kind = ToDevice)]
17pub struct ToDeviceKeyVerificationCancelEventContent {
18 pub transaction_id: OwnedTransactionId,
20
21 pub reason: String,
25
26 pub code: CancelCode,
28}
29
30impl ToDeviceKeyVerificationCancelEventContent {
31 pub fn new(transaction_id: OwnedTransactionId, reason: String, code: CancelCode) -> Self {
34 Self { transaction_id, reason, code }
35 }
36}
37
38#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
42#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
43#[ruma_event(type = "m.key.verification.cancel", kind = MessageLike)]
44pub struct KeyVerificationCancelEventContent {
45 pub reason: String,
49
50 pub code: CancelCode,
52
53 #[serde(rename = "m.relates_to")]
55 pub relates_to: Reference,
56}
57
58impl KeyVerificationCancelEventContent {
59 pub fn new(reason: String, code: CancelCode, relates_to: Reference) -> Self {
61 Self { reason, code, relates_to }
62 }
63}
64
65#[doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/doc/string_enum.md"))]
69#[derive(Clone, PartialEq, Eq, StringEnum)]
70#[ruma_enum(rename_all = "m.snake_case")]
71#[non_exhaustive]
72pub enum CancelCode {
73 User,
75
76 Timeout,
80
81 UnknownTransaction,
83
84 UnknownMethod,
89
90 UnexpectedMessage,
94
95 KeyMismatch,
97
98 UserMismatch,
100
101 InvalidMessage,
103
104 Accepted,
108
109 MismatchedCommitment,
111
112 MismatchedSas,
114
115 #[doc(hidden)]
116 _Custom(PrivOwnedStr),
117}
118
119#[cfg(test)]
120mod tests {
121 use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
122
123 use super::CancelCode;
124
125 #[test]
126 fn cancel_codes_serialize_to_display_form() {
127 assert_eq!(to_json_value(&CancelCode::User).unwrap(), json!("m.user"));
128 }
129
130 #[test]
131 fn custom_cancel_codes_serialize_to_display_form() {
132 assert_eq!(to_json_value(CancelCode::from("io.ruma.test")).unwrap(), json!("io.ruma.test"));
133 }
134
135 #[test]
136 fn cancel_codes_deserialize_from_display_form() {
137 assert_eq!(from_json_value::<CancelCode>(json!("m.user")).unwrap(), CancelCode::User);
138 }
139
140 #[test]
141 fn custom_cancel_codes_deserialize_from_display_form() {
142 assert_eq!(
143 from_json_value::<CancelCode>(json!("io.ruma.test")).unwrap(),
144 "io.ruma.test".into()
145 );
146 }
147}