identifiers: Provide Owned types
				
					
				
			This commit is contained in:
		
							parent
							
								
									a4aa7e0912
								
							
						
					
					
						commit
						b77fee8948
					
				
							
								
								
									
										8
									
								
								.github/workflows/msrv.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/msrv.yml
									
									
									
									
										vendored
									
									
								
							@ -25,6 +25,12 @@ jobs:
 | 
			
		||||
          - name: Check Ruma
 | 
			
		||||
            cmd: msrv-ruma
 | 
			
		||||
 | 
			
		||||
          - name: Check Owned IDs with Box
 | 
			
		||||
            cmd: msrv-owned-id-box
 | 
			
		||||
 | 
			
		||||
          - name: Check Owned IDs with Arc
 | 
			
		||||
            cmd: msrv-owned-id-arc
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repo
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
@ -33,7 +39,7 @@ jobs:
 | 
			
		||||
        uses: actions-rs/toolchain@v1
 | 
			
		||||
        with:
 | 
			
		||||
          profile: minimal
 | 
			
		||||
          toolchain: '1.55'
 | 
			
		||||
          toolchain: "1.55"
 | 
			
		||||
 | 
			
		||||
      # Used to compile xtask
 | 
			
		||||
      - name: Install rust stable toolchain
 | 
			
		||||
 | 
			
		||||
@ -10,25 +10,25 @@ use serde::de::{self, Deserializer, Unexpected};
 | 
			
		||||
 | 
			
		||||
#[doc(inline)]
 | 
			
		||||
pub use self::{
 | 
			
		||||
    client_secret::ClientSecret,
 | 
			
		||||
    client_secret::{ClientSecret, OwnedClientSecret},
 | 
			
		||||
    crypto_algorithms::{DeviceKeyAlgorithm, EventEncryptionAlgorithm, SigningKeyAlgorithm},
 | 
			
		||||
    device_id::DeviceId,
 | 
			
		||||
    device_key_id::DeviceKeyId,
 | 
			
		||||
    event_id::EventId,
 | 
			
		||||
    device_id::{DeviceId, OwnedDeviceId},
 | 
			
		||||
    device_key_id::{DeviceKeyId, OwnedDeviceKeyId},
 | 
			
		||||
    event_id::{EventId, OwnedEventId},
 | 
			
		||||
    key_id::{DeviceSigningKeyId, KeyId, ServerSigningKeyId, SigningKeyId},
 | 
			
		||||
    key_name::KeyName,
 | 
			
		||||
    key_name::{KeyName, OwnedKeyName},
 | 
			
		||||
    matrix_uri::{MatrixToUri, MatrixUri},
 | 
			
		||||
    mxc_uri::MxcUri,
 | 
			
		||||
    room_alias_id::RoomAliasId,
 | 
			
		||||
    room_id::RoomId,
 | 
			
		||||
    room_name::RoomName,
 | 
			
		||||
    room_or_room_alias_id::RoomOrAliasId,
 | 
			
		||||
    mxc_uri::{MxcUri, OwnedMxcUri},
 | 
			
		||||
    room_alias_id::{OwnedRoomAliasId, RoomAliasId},
 | 
			
		||||
    room_id::{OwnedRoomId, RoomId},
 | 
			
		||||
    room_name::{OwnedRoomName, RoomName},
 | 
			
		||||
    room_or_room_alias_id::{OwnedRoomOrAliasId, RoomOrAliasId},
 | 
			
		||||
    room_version_id::RoomVersionId,
 | 
			
		||||
    server_name::ServerName,
 | 
			
		||||
    session_id::SessionId,
 | 
			
		||||
    server_name::{OwnedServerName, ServerName},
 | 
			
		||||
    session_id::{OwnedSessionId, SessionId},
 | 
			
		||||
    signatures::{DeviceSignatures, EntitySignatures, ServerSignatures, Signatures},
 | 
			
		||||
    transaction_id::TransactionId,
 | 
			
		||||
    user_id::UserId,
 | 
			
		||||
    transaction_id::{OwnedTransactionId, TransactionId},
 | 
			
		||||
    user_id::{OwnedUserId, UserId},
 | 
			
		||||
};
 | 
			
		||||
#[doc(inline)]
 | 
			
		||||
pub use ruma_identifiers_validation::error::Error as IdParseError;
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,13 @@ impl ClientSecret {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(ClientSecret, ruma_identifiers_validation::client_secret::validate);
 | 
			
		||||
owned_identifier!(OwnedClientSecret, ClientSecret);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(
 | 
			
		||||
    ClientSecret,
 | 
			
		||||
    OwnedClientSecret,
 | 
			
		||||
    ruma_identifiers_validation::client_secret::validate
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,9 @@ use super::generate_localpart;
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct DeviceId(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier!(DeviceId);
 | 
			
		||||
owned_identifier!(OwnedDeviceId, DeviceId);
 | 
			
		||||
 | 
			
		||||
opaque_identifier!(DeviceId, OwnedDeviceId);
 | 
			
		||||
 | 
			
		||||
impl DeviceId {
 | 
			
		||||
    /// Generates a random `DeviceId`, suitable for assignment to a new device.
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,13 @@ use super::{crypto_algorithms::DeviceKeyAlgorithm, DeviceId};
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct DeviceKeyId(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(DeviceKeyId, ruma_identifiers_validation::device_key_id::validate);
 | 
			
		||||
owned_identifier!(OwnedDeviceKeyId, DeviceKeyId);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(
 | 
			
		||||
    DeviceKeyId,
 | 
			
		||||
    OwnedDeviceKeyId,
 | 
			
		||||
    ruma_identifiers_validation::device_key_id::validate
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
impl DeviceKeyId {
 | 
			
		||||
    /// Create a `DeviceKeyId` from a `DeviceKeyAlgorithm` and a `DeviceId`.
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,13 @@ use super::ServerName;
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct EventId(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(EventId, ruma_identifiers_validation::event_id::validate);
 | 
			
		||||
owned_identifier!(OwnedEventId, EventId);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(
 | 
			
		||||
    EventId,
 | 
			
		||||
    OwnedEventId,
 | 
			
		||||
    ruma_identifiers_validation::event_id::validate
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
impl EventId {
 | 
			
		||||
    /// Attempts to generate an `EventId` for the given origin server with a localpart consisting
 | 
			
		||||
 | 
			
		||||
@ -6,4 +6,6 @@
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct KeyName(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier!(KeyName);
 | 
			
		||||
owned_identifier!(OwnedKeyName, KeyName);
 | 
			
		||||
 | 
			
		||||
opaque_identifier!(KeyName, OwnedKeyName);
 | 
			
		||||
 | 
			
		||||
@ -24,8 +24,100 @@ macro_rules! partial_eq_string {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
macro_rules! owned_identifier {
 | 
			
		||||
    ($owned:ident, $id:ident) => {
 | 
			
		||||
        #[doc = concat!("Owned variant of ", stringify!($id))]
 | 
			
		||||
        ///
 | 
			
		||||
        /// The wrapper type for this type is variable, by default it'll use [`Box`],
 | 
			
		||||
        /// but you can change that by setting "`--cfg=ruma_identifiers_storage=...`" using
 | 
			
		||||
        /// `RUSTFLAGS` or `.cargo/config.toml` (under `[build]` -> `rustflags = ["..."]`)
 | 
			
		||||
        /// to the following;
 | 
			
		||||
        /// - `ruma_identifiers_storage="Arc"` to use [`Arc`](std::sync::Arc) as a wrapper type.
 | 
			
		||||
        #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
        pub struct $owned {
 | 
			
		||||
            #[cfg(not(any(ruma_identifiers_storage = "Arc")))]
 | 
			
		||||
            inner: Box<$id>,
 | 
			
		||||
            #[cfg(ruma_identifiers_storage = "Arc")]
 | 
			
		||||
            inner: std::sync::Arc<$id>,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl AsRef<$id> for $owned {
 | 
			
		||||
            fn as_ref(&self) -> &$id {
 | 
			
		||||
                &*self.inner
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl AsRef<str> for $owned {
 | 
			
		||||
            fn as_ref(&self) -> &str {
 | 
			
		||||
                (*self.inner).as_ref()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl std::ops::Deref for $owned {
 | 
			
		||||
            type Target = $id;
 | 
			
		||||
 | 
			
		||||
            fn deref(&self) -> &Self::Target {
 | 
			
		||||
                &self.inner
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl std::borrow::Borrow<$id> for $owned {
 | 
			
		||||
            fn borrow(&self) -> &$id {
 | 
			
		||||
                self.as_ref()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl From<&'_ $id> for $owned {
 | 
			
		||||
            fn from(id: &$id) -> $owned {
 | 
			
		||||
                $owned { inner: id.into() }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl From<Box<$id>> for $owned {
 | 
			
		||||
            fn from(b: Box<$id>) -> $owned {
 | 
			
		||||
                Self { inner: b.into() }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl From<std::sync::Arc<$id>> for $owned {
 | 
			
		||||
            fn from(a: std::sync::Arc<$id>) -> $owned {
 | 
			
		||||
                Self {
 | 
			
		||||
                    #[cfg(not(any(ruma_identifiers_storage = "Arc")))]
 | 
			
		||||
                    inner: a.as_ref().into(),
 | 
			
		||||
                    #[cfg(ruma_identifiers_storage = "Arc")]
 | 
			
		||||
                    inner: a,
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #[cfg(feature = "serde")]
 | 
			
		||||
        impl serde::Serialize for $owned {
 | 
			
		||||
            fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
 | 
			
		||||
            where
 | 
			
		||||
                S: serde::Serializer,
 | 
			
		||||
            {
 | 
			
		||||
                serializer.serialize_str(self.as_ref().as_str())
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        partial_eq_string!($owned);
 | 
			
		||||
 | 
			
		||||
        impl PartialEq<Box<$id>> for $owned {
 | 
			
		||||
            fn eq(&self, other: &Box<$id>) -> bool {
 | 
			
		||||
                AsRef::<$id>::as_ref(self) == AsRef::<$id>::as_ref(other)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl PartialEq<$owned> for Box<$id> {
 | 
			
		||||
            fn eq(&self, other: &$owned) -> bool {
 | 
			
		||||
                AsRef::<$id>::as_ref(self) == AsRef::<$id>::as_ref(other)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
macro_rules! opaque_identifier_common_impls {
 | 
			
		||||
    ($id:ty) => {
 | 
			
		||||
    ($id:ident, $owned:ident) => {
 | 
			
		||||
        impl $id {
 | 
			
		||||
            pub(super) fn from_borrowed(s: &str) -> &Self {
 | 
			
		||||
                unsafe { std::mem::transmute(s) }
 | 
			
		||||
@ -64,10 +156,20 @@ macro_rules! opaque_identifier_common_impls {
 | 
			
		||||
 | 
			
		||||
        impl Clone for Box<$id> {
 | 
			
		||||
            fn clone(&self) -> Self {
 | 
			
		||||
                (**self).to_owned()
 | 
			
		||||
                (**self).into()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // impl ToOwned for $id {
 | 
			
		||||
        //     type Owned = $owned;
 | 
			
		||||
 | 
			
		||||
        //     fn to_owned(&self) -> Self::Owned {
 | 
			
		||||
        //         Self::from_owned(self.0.into()).into()
 | 
			
		||||
        //     }
 | 
			
		||||
        // }
 | 
			
		||||
 | 
			
		||||
        // TODO swap below with above after codebase has been converted
 | 
			
		||||
        //  to not use `to_owned` as equivalent to "into Box"
 | 
			
		||||
        impl ToOwned for $id {
 | 
			
		||||
            type Owned = Box<$id>;
 | 
			
		||||
 | 
			
		||||
@ -90,7 +192,7 @@ macro_rules! opaque_identifier_common_impls {
 | 
			
		||||
 | 
			
		||||
        impl From<&$id> for Box<$id> {
 | 
			
		||||
            fn from(id: &$id) -> Self {
 | 
			
		||||
                id.to_owned()
 | 
			
		||||
                $id::from_owned(id.0.into())
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -154,13 +256,13 @@ macro_rules! opaque_identifier_common_impls {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        partial_eq_string!($id);
 | 
			
		||||
        partial_eq_string!(Box<$id>);
 | 
			
		||||
        partial_eq_string!(Box<$id>); // todo: Remove when all instances of Box have been converted to Owned
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
macro_rules! opaque_identifier {
 | 
			
		||||
    ($id:ident) => {
 | 
			
		||||
        opaque_identifier_common_impls!($id);
 | 
			
		||||
    ($id:ident, $owned:ident) => {
 | 
			
		||||
        opaque_identifier_common_impls!($id, $owned);
 | 
			
		||||
 | 
			
		||||
        impl<'a> From<&'a str> for &'a $id {
 | 
			
		||||
            fn from(s: &'a str) -> Self {
 | 
			
		||||
@ -206,11 +308,21 @@ macro_rules! opaque_identifier {
 | 
			
		||||
                Box::<str>::deserialize(deserializer).map($id::from_owned)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #[cfg(feature = "serde")]
 | 
			
		||||
        impl<'de> serde::Deserialize<'de> for $owned {
 | 
			
		||||
            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
 | 
			
		||||
            where
 | 
			
		||||
                D: serde::Deserializer<'de>,
 | 
			
		||||
            {
 | 
			
		||||
                Box::<str>::deserialize(deserializer).map($id::from_owned).map(Into::into)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
macro_rules! opaque_identifier_validated {
 | 
			
		||||
    ($id:ident, $validate_id:expr) => {
 | 
			
		||||
    ($id:ident, $owned:ident, $validate_id:expr) => {
 | 
			
		||||
        impl $id {
 | 
			
		||||
            #[rustfmt::skip]
 | 
			
		||||
            doc_concat! {
 | 
			
		||||
@ -249,7 +361,7 @@ macro_rules! opaque_identifier_validated {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        opaque_identifier_common_impls!($id);
 | 
			
		||||
        opaque_identifier_common_impls!($id, $owned);
 | 
			
		||||
 | 
			
		||||
        impl From<Box<$id>> for String {
 | 
			
		||||
            fn from(id: Box<$id>) -> Self {
 | 
			
		||||
@ -273,6 +385,23 @@ macro_rules! opaque_identifier_validated {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #[cfg(feature = "serde")]
 | 
			
		||||
        impl<'de> serde::Deserialize<'de> for $owned {
 | 
			
		||||
            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
 | 
			
		||||
            where
 | 
			
		||||
                D: serde::Deserializer<'de>,
 | 
			
		||||
            {
 | 
			
		||||
                use serde::de::Error;
 | 
			
		||||
 | 
			
		||||
                let s = String::deserialize(deserializer)?;
 | 
			
		||||
 | 
			
		||||
                match $id::parse(s) {
 | 
			
		||||
                    Ok(o) => Ok(o.into()),
 | 
			
		||||
                    Err(e) => Err(D::Error::custom(e)),
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl<'a> std::convert::TryFrom<&'a str> for &'a $id {
 | 
			
		||||
            type Error = crate::IdParseError;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,9 @@ type Result<T, E = MxcUriError> = std::result::Result<T, E>;
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct MxcUri(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier!(MxcUri);
 | 
			
		||||
owned_identifier!(OwnedMxcUri, MxcUri);
 | 
			
		||||
 | 
			
		||||
opaque_identifier!(MxcUri, OwnedMxcUri);
 | 
			
		||||
 | 
			
		||||
impl MxcUri {
 | 
			
		||||
    /// If this is a valid MXC URI, returns the media ID.
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,13 @@ use super::{matrix_uri::UriAction, server_name::ServerName, EventId, MatrixToUri
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct RoomAliasId(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(RoomAliasId, ruma_identifiers_validation::room_alias_id::validate);
 | 
			
		||||
owned_identifier!(OwnedRoomAliasId, RoomAliasId);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(
 | 
			
		||||
    RoomAliasId,
 | 
			
		||||
    OwnedRoomAliasId,
 | 
			
		||||
    ruma_identifiers_validation::room_alias_id::validate
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
impl RoomAliasId {
 | 
			
		||||
    /// Returns the room's alias.
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,9 @@ use super::{matrix_uri::UriAction, EventId, MatrixToUri, MatrixUri, ServerName};
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct RoomId(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(RoomId, ruma_identifiers_validation::room_id::validate);
 | 
			
		||||
owned_identifier!(OwnedRoomId, RoomId);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(RoomId, OwnedRoomId, ruma_identifiers_validation::room_id::validate);
 | 
			
		||||
 | 
			
		||||
impl RoomId {
 | 
			
		||||
    /// Attempts to generate a `RoomId` for the given origin server with a localpart consisting of
 | 
			
		||||
 | 
			
		||||
@ -7,4 +7,10 @@
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct RoomName(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(RoomName, ruma_identifiers_validation::room_name::validate);
 | 
			
		||||
owned_identifier!(OwnedRoomName, RoomName);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(
 | 
			
		||||
    RoomName,
 | 
			
		||||
    OwnedRoomName,
 | 
			
		||||
    ruma_identifiers_validation::room_name::validate
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@ -27,8 +27,11 @@ use super::{server_name::ServerName, RoomAliasId, RoomId};
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct RoomOrAliasId(str);
 | 
			
		||||
 | 
			
		||||
owned_identifier!(OwnedRoomOrAliasId, RoomOrAliasId);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(
 | 
			
		||||
    RoomOrAliasId,
 | 
			
		||||
    OwnedRoomOrAliasId,
 | 
			
		||||
    ruma_identifiers_validation::room_id_or_alias_id::validate
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,13 @@ use std::net::Ipv4Addr;
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct ServerName(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(ServerName, ruma_identifiers_validation::server_name::validate);
 | 
			
		||||
owned_identifier!(OwnedServerName, ServerName);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(
 | 
			
		||||
    ServerName,
 | 
			
		||||
    OwnedServerName,
 | 
			
		||||
    ruma_identifiers_validation::server_name::validate
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
impl ServerName {
 | 
			
		||||
    /// Returns the host of the server name.
 | 
			
		||||
 | 
			
		||||
@ -8,4 +8,10 @@
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct SessionId(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(SessionId, ruma_identifiers_validation::session_id::validate);
 | 
			
		||||
owned_identifier!(OwnedSessionId, SessionId);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(
 | 
			
		||||
    SessionId,
 | 
			
		||||
    OwnedSessionId,
 | 
			
		||||
    ruma_identifiers_validation::session_id::validate
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@ -22,4 +22,6 @@ impl TransactionId {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
opaque_identifier!(TransactionId);
 | 
			
		||||
owned_identifier!(OwnedTransactionId, TransactionId);
 | 
			
		||||
 | 
			
		||||
opaque_identifier!(TransactionId, OwnedTransactionId);
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,9 @@ use super::{matrix_uri::UriAction, IdParseError, MatrixToUri, MatrixUri, ServerN
 | 
			
		||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)]
 | 
			
		||||
pub struct UserId(str);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(UserId, ruma_identifiers_validation::user_id::validate);
 | 
			
		||||
owned_identifier!(OwnedUserId, UserId);
 | 
			
		||||
 | 
			
		||||
opaque_identifier_validated!(UserId, OwnedUserId, ruma_identifiers_validation::user_id::validate);
 | 
			
		||||
 | 
			
		||||
impl UserId {
 | 
			
		||||
    /// Attempts to generate a `UserId` for the given origin server with a localpart consisting of
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,10 @@ pub enum CiCmd {
 | 
			
		||||
    MsrvClient,
 | 
			
		||||
    /// Check ruma crate with default features (msrv)
 | 
			
		||||
    MsrvRuma,
 | 
			
		||||
    /// Check ruma-identifiers with `ruma_identifiers_storage="Box"`
 | 
			
		||||
    MsrvOwnedIdBox,
 | 
			
		||||
    /// Check ruma-identifiers with `ruma_identifiers_storage="Arc"`
 | 
			
		||||
    MsrvOwnedIdArc,
 | 
			
		||||
    /// Run all the tasks that use the stable version
 | 
			
		||||
    Stable,
 | 
			
		||||
    /// Check all crates with all features (stable)
 | 
			
		||||
@ -85,6 +89,8 @@ impl CiTask {
 | 
			
		||||
            Some(CiCmd::MsrvAll) => self.msrv_all()?,
 | 
			
		||||
            Some(CiCmd::MsrvClient) => self.msrv_client()?,
 | 
			
		||||
            Some(CiCmd::MsrvRuma) => self.msrv_ruma()?,
 | 
			
		||||
            Some(CiCmd::MsrvOwnedIdBox) => self.msrv_owned_id_box()?,
 | 
			
		||||
            Some(CiCmd::MsrvOwnedIdArc) => self.msrv_owned_id_arc()?,
 | 
			
		||||
            Some(CiCmd::Stable) => self.stable()?,
 | 
			
		||||
            Some(CiCmd::StableAll) => self.stable_all()?,
 | 
			
		||||
            Some(CiCmd::StableClient) => self.stable_client()?,
 | 
			
		||||
@ -210,6 +216,22 @@ impl CiTask {
 | 
			
		||||
        cmd!("rustup run {NIGHTLY} cargo check -p ruma --features full").run().map_err(Into::into)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Check ruma-common with `ruma_identifiers_storage="Box"`
 | 
			
		||||
    fn msrv_owned_id_box(&self) -> Result<()> {
 | 
			
		||||
        cmd!("rustup run {MSRV} cargo check -p ruma-common")
 | 
			
		||||
            .env("RUSTFLAGS", "--cfg=ruma_identifiers_storage=\"Box\"")
 | 
			
		||||
            .run()
 | 
			
		||||
            .map_err(Into::into)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Check ruma-common with `ruma_identifiers_storage="Arc"`
 | 
			
		||||
    fn msrv_owned_id_arc(&self) -> Result<()> {
 | 
			
		||||
        cmd!("rustup run {MSRV} cargo check -p ruma-common")
 | 
			
		||||
            .env("RUSTFLAGS", "--cfg=ruma_identifiers_storage=\"Arc\"")
 | 
			
		||||
            .run()
 | 
			
		||||
            .map_err(Into::into)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Lint default features with clippy with the nightly version.
 | 
			
		||||
    fn clippy_default(&self) -> Result<()> {
 | 
			
		||||
        cmd!(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user