ruma_common/identifiers/
space_child_order.rs

1//! `m.space.child` order.
2
3use ruma_macros::IdDst;
4
5/// The order of an [`m.space.child`] event.
6///
7/// Space child orders in Matrix are opaque character sequences consisting of ASCII characters
8/// within the range `\x20` (space) and `\x7E` (~), inclusive. Their length must must not exceed 50
9/// characters.
10///
11/// [`m.space.child`]: https://spec.matrix.org/latest/client-server-api/#mspacechild
12#[repr(transparent)]
13#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, IdDst)]
14#[ruma_id(validate = ruma_identifiers_validation::space_child_order::validate)]
15pub struct SpaceChildOrder(str);
16
17#[cfg(test)]
18mod tests {
19    use std::iter::repeat_n;
20
21    use ruma_identifiers_validation::Error;
22
23    use super::SpaceChildOrder;
24
25    #[test]
26    fn validate_space_child_order() {
27        // Valid string.
28        SpaceChildOrder::parse("aaa").unwrap();
29
30        // String too long.
31        let order = repeat_n('a', 60).collect::<String>();
32        assert_eq!(SpaceChildOrder::parse(&order), Err(Error::MaximumLengthExceeded));
33
34        // Invalid character.
35        assert_eq!(SpaceChildOrder::parse("🔝"), Err(Error::InvalidCharacters));
36    }
37}