1#![allow(unused_qualifications)]
6
7#[doc(inline)]
8pub use ruma_identifiers_validation::{
9 error::{
10 Error as IdParseError, MatrixIdError, MatrixToError, MatrixUriError, MxcUriError,
11 VoipVersionIdError,
12 },
13 KeyName, ID_MAX_BYTES,
14};
15use serde::de::{self, Deserializer, Unexpected};
16
17#[doc(inline)]
18pub use self::{
19 base64_public_key::{Base64PublicKey, OwnedBase64PublicKey},
20 base64_public_key_or_device_id::{Base64PublicKeyOrDeviceId, OwnedBase64PublicKeyOrDeviceId},
21 client_secret::{ClientSecret, OwnedClientSecret},
22 crypto_algorithms::{
23 DeviceKeyAlgorithm, EventEncryptionAlgorithm, KeyDerivationAlgorithm, OneTimeKeyAlgorithm,
24 SigningKeyAlgorithm,
25 },
26 device_id::{DeviceId, OwnedDeviceId},
27 event_id::{EventId, OwnedEventId},
28 key_id::{
29 AnyKeyName, CrossSigningKeyId, CrossSigningOrDeviceSigningKeyId, DeviceKeyId,
30 DeviceSigningKeyId, KeyAlgorithm, KeyId, OneTimeKeyId, OwnedCrossSigningKeyId,
31 OwnedCrossSigningOrDeviceSigningKeyId, OwnedDeviceKeyId, OwnedDeviceSigningKeyId,
32 OwnedKeyId, OwnedOneTimeKeyId, OwnedServerSigningKeyId, OwnedSigningKeyId,
33 ServerSigningKeyId, SigningKeyId,
34 },
35 matrix_uri::{MatrixToUri, MatrixUri},
36 mxc_uri::{MxcUri, OwnedMxcUri},
37 one_time_key_name::{OneTimeKeyName, OwnedOneTimeKeyName},
38 room_alias_id::{OwnedRoomAliasId, RoomAliasId},
39 room_id::{OwnedRoomId, RoomId},
40 room_or_alias_id::{OwnedRoomOrAliasId, RoomOrAliasId},
41 room_version_id::RoomVersionId,
42 server_name::{OwnedServerName, ServerName},
43 server_signing_key_version::{OwnedServerSigningKeyVersion, ServerSigningKeyVersion},
44 session_id::{OwnedSessionId, SessionId},
45 signatures::{
46 CrossSigningOrDeviceSignatures, DeviceSignatures, EntitySignatures, ServerSignatures,
47 Signatures,
48 },
49 space_child_order::{OwnedSpaceChildOrder, SpaceChildOrder},
50 transaction_id::{OwnedTransactionId, TransactionId},
51 user_id::{OwnedUserId, UserId},
52 voip_id::{OwnedVoipId, VoipId},
53 voip_version_id::VoipVersionId,
54};
55
56pub mod matrix_uri;
57pub mod user_id;
58
59mod base64_public_key;
60mod base64_public_key_or_device_id;
61mod client_secret;
62mod crypto_algorithms;
63mod device_id;
64mod event_id;
65mod key_id;
66mod mxc_uri;
67mod one_time_key_name;
68mod room_alias_id;
69mod room_id;
70mod room_or_alias_id;
71mod room_version_id;
72mod server_name;
73mod server_signing_key_version;
74mod session_id;
75mod signatures;
76mod space_child_order;
77mod transaction_id;
78mod voip_id;
79mod voip_version_id;
80
81#[cfg(feature = "rand")]
83fn generate_localpart(length: usize) -> Box<str> {
84 use rand::Rng as _;
85 rand::thread_rng()
86 .sample_iter(&rand::distributions::Alphanumeric)
87 .map(char::from)
88 .take(length)
89 .collect::<String>()
90 .into_boxed_str()
91}
92
93fn deserialize_id<'de, D, T>(deserializer: D, expected_str: &str) -> Result<T, D::Error>
97where
98 D: Deserializer<'de>,
99 T: for<'a> TryFrom<&'a str>,
100{
101 crate::serde::deserialize_cow_str(deserializer).and_then(|v| {
102 T::try_from(&v).map_err(|_| de::Error::invalid_value(Unexpected::Str(&v), &expected_str))
103 })
104}
105
106#[macro_export]
108macro_rules! device_id {
109 ($s:expr) => {
110 <&$crate::DeviceId as ::std::convert::From<_>>::from($s)
111 };
112}
113
114#[macro_export]
116macro_rules! owned_device_id {
117 ($s:expr) => {
118 <$crate::OwnedDeviceId as ::std::convert::From<_>>::from($s)
119 };
120}
121
122#[doc(hidden)]
123pub mod __private_macros {
124 pub use ruma_macros::{
125 base64_public_key, event_id, mxc_uri, room_alias_id, room_id, room_version_id, server_name,
126 server_signing_key_version, user_id,
127 };
128}
129
130#[macro_export]
132macro_rules! event_id {
133 ($s:literal) => {
134 $crate::__private_macros::event_id!($crate, $s)
135 };
136}
137
138#[macro_export]
140macro_rules! owned_event_id {
141 ($s:literal) => {
142 $crate::event_id!($s).to_owned()
143 };
144}
145
146#[macro_export]
148macro_rules! room_alias_id {
149 ($s:literal) => {
150 $crate::__private_macros::room_alias_id!($crate, $s)
151 };
152}
153
154#[macro_export]
156macro_rules! owned_room_alias_id {
157 ($s:literal) => {
158 $crate::room_alias_id!($s).to_owned()
159 };
160}
161
162#[macro_export]
164macro_rules! room_id {
165 ($s:literal) => {
166 $crate::__private_macros::room_id!($crate, $s)
167 };
168}
169
170#[macro_export]
172macro_rules! owned_room_id {
173 ($s:literal) => {
174 $crate::room_id!($s).to_owned()
175 };
176}
177
178#[macro_export]
180macro_rules! room_version_id {
181 ($s:literal) => {
182 $crate::__private_macros::room_version_id!($crate, $s)
183 };
184}
185
186#[macro_export]
188macro_rules! server_signing_key_version {
189 ($s:literal) => {
190 $crate::__private_macros::server_signing_key_version!($crate, $s)
191 };
192}
193
194#[macro_export]
196macro_rules! owned_server_signing_key_version {
197 ($s:literal) => {
198 $crate::server_signing_key_version!($s).to_owned()
199 };
200}
201
202#[macro_export]
204macro_rules! server_name {
205 ($s:literal) => {
206 $crate::__private_macros::server_name!($crate, $s)
207 };
208}
209
210#[macro_export]
212macro_rules! owned_server_name {
213 ($s:literal) => {
214 $crate::server_name!($s).to_owned()
215 };
216}
217
218#[macro_export]
220macro_rules! session_id {
221 ($s:literal) => {{
222 const SESSION_ID: &$crate::SessionId = match $crate::SessionId::_priv_const_new($s) {
223 Ok(id) => id,
224 Err(e) => panic!("{}", e),
225 };
226
227 SESSION_ID
228 }};
229}
230
231#[macro_export]
233macro_rules! owned_session_id {
234 ($s:literal) => {
235 $crate::session_id!($s).to_owned()
236 };
237}
238
239#[macro_export]
241macro_rules! mxc_uri {
242 ($s:literal) => {
243 $crate::__private_macros::mxc_uri!($crate, $s)
244 };
245}
246
247#[macro_export]
249macro_rules! owned_mxc_uri {
250 ($s:literal) => {
251 $crate::mxc_uri!($s).to_owned()
252 };
253}
254
255#[macro_export]
257macro_rules! user_id {
258 ($s:literal) => {
259 $crate::__private_macros::user_id!($crate, $s)
260 };
261}
262
263#[macro_export]
265macro_rules! owned_user_id {
266 ($s:literal) => {
267 $crate::user_id!($s).to_owned()
268 };
269}
270
271#[macro_export]
273macro_rules! base64_public_key {
274 ($s:literal) => {
275 $crate::__private_macros::base64_public_key!($crate, $s)
276 };
277}
278
279#[macro_export]
281macro_rules! owned_base64_public_key {
282 ($s:literal) => {
283 $crate::base64_public_key!($s).to_owned()
284 };
285}