ruma_identifiers/
device_id.rs1#[cfg(feature = "rand")]
2use crate::generate_localpart;
3
4#[repr(transparent)]
27#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
28pub struct DeviceId(str);
29
30opaque_identifier!(DeviceId);
31
32impl DeviceId {
33 #[cfg(feature = "rand")]
35 pub fn new() -> Box<Self> {
36 Self::from_owned(generate_localpart(8))
37 }
38}
39
40#[cfg(all(test, feature = "rand"))]
41mod tests {
42 use super::DeviceId;
43
44 #[test]
45 fn generate_device_id() {
46 assert_eq!(DeviceId::new().as_str().len(), 8);
47 }
48
49 #[test]
50 fn create_device_id_from_str() {
51 let ref_id: &DeviceId = "abcdefgh".into();
52 assert_eq!(ref_id.as_str(), "abcdefgh");
53 }
54
55 #[test]
56 fn create_boxed_device_id_from_str() {
57 let box_id: Box<DeviceId> = "12345678".into();
58 assert_eq!(box_id.as_str(), "12345678");
59 }
60
61 #[test]
62 fn create_device_id_from_box() {
63 let box_str: Box<str> = "ijklmnop".into();
64 let device_id: Box<DeviceId> = DeviceId::from_owned(box_str);
65 assert_eq!(device_id.as_str(), "ijklmnop");
66 }
67}