diff --git a/src/device_id.rs b/src/device_id.rs new file mode 100644 index 00000000..b0026e74 --- /dev/null +++ b/src/device_id.rs @@ -0,0 +1,24 @@ +//! Matrix device identifiers. + +use crate::generate_localpart; + +/// A Matrix device ID. +/// +/// Device identifiers in Matrix are completely opaque character sequences. This type alias is +/// provided simply for its semantic value. +pub type DeviceId = String; + +/// Generates a random `DeviceId`, suitable for assignment to a new device. +pub fn generate() -> DeviceId { + generate_localpart(8).to_string() +} + +#[cfg(test)] +mod tests { + use super::generate; + + #[test] + fn generate_device_id() { + assert_eq!(generate().len(), 8); + } +} diff --git a/src/lib.rs b/src/lib.rs index a02bd9b8..e5661731 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -38,11 +38,14 @@ use url::Url; pub use url::Host; +#[doc(inline)] +pub use crate::device_id::DeviceId; pub use crate::{ error::Error, event_id::EventId, room_alias_id::RoomAliasId, room_id::RoomId, room_id_or_room_alias_id::RoomIdOrAliasId, room_version_id::RoomVersionId, user_id::UserId, }; +pub mod device_id; #[cfg(feature = "diesel")] mod diesel_integration; mod error;