ruma_common

Struct KeyId

Source
pub struct KeyId<A: KeyAlgorithm, K: KeyName + ?Sized>(/* private fields */);
Expand description

A key algorithm and key name delimited by a colon.

Examples of the use of this struct are DeviceKeyId, which identifies a Ed25519 or Curve25519 device key, and CrossSigningKeyId, which identifies a user’s cross signing key.

This format of identifier is often used in the signatures field of signed JSON where it is referred to as a “signing key identifier”.

This struct is rarely used directly - instead you should expect to use one of the type aliases that rely on it like CrossSigningKeyId or DeviceSigningKeyId.

§Examples

To parse a colon-separated identifier:

use ruma_common::DeviceKeyId;

let k = DeviceKeyId::parse("ed25519:1").unwrap();
assert_eq!(k.algorithm().as_str(), "ed25519");
assert_eq!(k.key_name(), "1");

To construct a colon-separated identifier from its parts:

use ruma_common::{DeviceKeyAlgorithm, DeviceKeyId};

let k = DeviceKeyId::from_parts(DeviceKeyAlgorithm::Curve25519, "MYDEVICE".into());
assert_eq!(k.as_str(), "curve25519:MYDEVICE");

Implementations§

Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> KeyId<A, K>

Source

pub fn as_str(&self) -> &str

Creates a string slice from this KeyId.

Source

pub fn as_bytes(&self) -> &[u8]

Creates a byte slice from this KeyId.

Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> KeyId<A, K>

Source

pub fn parse(s: impl AsRef<str>) -> Result<OwnedKeyId<A, K>, IdParseError>

Try parsing a &str into an OwnedKeyId.

The same can also be done using FromStr, TryFrom or TryInto. This function is simply more constrained and thus useful in generic contexts.

Source

pub fn parse_box( s: impl AsRef<str> + Into<Box<str>>, ) -> Result<Box<Self>, IdParseError>

Try parsing a &str into a Box<KeyId>.

The same can also be done using FromStr, TryFrom or TryInto. This function is simply more constrained and thus useful in generic contexts.

Source

pub fn parse_rc( s: impl AsRef<str> + Into<Rc<str>>, ) -> Result<Rc<Self>, IdParseError>

Try parsing a &str into an Rc<KeyId>.

Source

pub fn parse_arc( s: impl AsRef<str> + Into<Arc<str>>, ) -> Result<Arc<Self>, IdParseError>

Try parsing a &str into an Arc<KeyId>.

Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> KeyId<A, K>

Source

pub fn from_parts(algorithm: A, key_name: &K) -> OwnedKeyId<A, K>

Creates a new KeyId from an algorithm and key name.

Source

pub fn algorithm(&self) -> A

Returns key algorithm of the key ID - the part that comes before the colon.

§Example
use ruma_common::{DeviceKeyAlgorithm, DeviceKeyId};

let k = DeviceKeyId::parse("ed25519:1").unwrap();
assert_eq!(k.algorithm(), DeviceKeyAlgorithm::Ed25519);
Source

pub fn key_name<'a>(&'a self) -> &'a K
where &'a K: TryFrom<&'a str>,

Returns the key name of the key ID - the part that comes after the colon.

§Example
use ruma_common::{device_id, DeviceKeyId};

let k = DeviceKeyId::parse("ed25519:DEV1").unwrap();
assert_eq!(k.key_name(), device_id!("DEV1"));

Trait Implementations§

Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> AsRef<[u8]> for Box<KeyId<A, K>>

Source§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> AsRef<[u8]> for KeyId<A, K>

Source§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> AsRef<KeyId<A, K>> for KeyId<A, K>

Source§

fn as_ref(&self) -> &KeyId<A, K>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> AsRef<KeyId<A, K>> for OwnedKeyId<A, K>

Source§

fn as_ref(&self) -> &KeyId<A, K>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> AsRef<str> for Box<KeyId<A, K>>

Source§

fn as_ref(&self) -> &str

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> AsRef<str> for KeyId<A, K>

Source§

fn as_ref(&self) -> &str

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> Borrow<KeyId<A, K>> for OwnedKeyId<A, K>

Source§

fn borrow(&self) -> &KeyId<A, K>

Immutably borrows from an owned value. Read more
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> Clone for Box<KeyId<A, K>>

Source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> Debug for KeyId<A, K>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de, A: KeyAlgorithm, K: KeyName + ?Sized> Deserialize<'de> for Box<KeyId<A, K>>

Source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> Display for KeyId<A, K>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> From<&KeyId<A, K>> for Arc<KeyId<A, K>>

Source§

fn from(s: &KeyId<A, K>) -> Arc<KeyId<A, K>>

Converts to this type from the input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> From<&KeyId<A, K>> for Box<KeyId<A, K>>

Source§

fn from(id: &KeyId<A, K>) -> Self

Converts to this type from the input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> From<&KeyId<A, K>> for OwnedKeyId<A, K>

Source§

fn from(id: &KeyId<A, K>) -> OwnedKeyId<A, K>

Converts to this type from the input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> From<&KeyId<A, K>> for Rc<KeyId<A, K>>

Source§

fn from(s: &KeyId<A, K>) -> Rc<KeyId<A, K>>

Converts to this type from the input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> From<&KeyId<A, K>> for String

Source§

fn from(id: &KeyId<A, K>) -> Self

Converts to this type from the input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> From<OwnedKeyId<A, K>> for Box<KeyId<A, K>>

Source§

fn from(a: OwnedKeyId<A, K>) -> Box<KeyId<A, K>>

Converts to this type from the input type.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> FromStr for Box<KeyId<A, K>>

Source§

type Err = Error

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> Hash for KeyId<A, K>

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> Ord for KeyId<A, K>

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<&KeyId<A, K>> for Box<KeyId<A, K>>

Source§

fn eq(&self, other: &&KeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<&KeyId<A, K>> for OwnedKeyId<A, K>

Source§

fn eq(&self, other: &&KeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<&str> for Box<KeyId<A, K>>

Source§

fn eq(&self, other: &&str) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<&str> for KeyId<A, K>

Source§

fn eq(&self, other: &&str) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<Box<KeyId<A, K>>> for &KeyId<A, K>

Source§

fn eq(&self, other: &Box<KeyId<A, K>>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<Box<KeyId<A, K>>> for KeyId<A, K>

Source§

fn eq(&self, other: &Box<KeyId<A, K>>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<KeyId<A, K>> for &str

Source§

fn eq(&self, other: &KeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<KeyId<A, K>> for Box<KeyId<A, K>>

Source§

fn eq(&self, other: &KeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<KeyId<A, K>> for OwnedKeyId<A, K>

Source§

fn eq(&self, other: &KeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<KeyId<A, K>> for String

Source§

fn eq(&self, other: &KeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<KeyId<A, K>> for str

Source§

fn eq(&self, other: &KeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<OwnedKeyId<A, K>> for &KeyId<A, K>

Source§

fn eq(&self, other: &OwnedKeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<OwnedKeyId<A, K>> for Box<KeyId<A, K>>

Source§

fn eq(&self, other: &OwnedKeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<OwnedKeyId<A, K>> for KeyId<A, K>

Source§

fn eq(&self, other: &OwnedKeyId<A, K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<String> for Box<KeyId<A, K>>

Source§

fn eq(&self, other: &String) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<String> for KeyId<A, K>

Source§

fn eq(&self, other: &String) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<str> for Box<KeyId<A, K>>

Source§

fn eq(&self, other: &str) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq<str> for KeyId<A, K>

Source§

fn eq(&self, other: &str) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialEq for KeyId<A, K>

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> PartialOrd for KeyId<A, K>

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> Serialize for KeyId<A, K>

Source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> ToOwned for KeyId<A, K>

Source§

type Owned = OwnedKeyId<A, K>

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> Self::Owned

Creates owned data from borrowed data, usually by cloning. Read more
1.63.0 · Source§

fn clone_into(&self, target: &mut Self::Owned)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<'a, A: KeyAlgorithm, K: KeyName + ?Sized> TryFrom<&'a str> for &'a KeyId<A, K>

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(s: &'a str) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> TryFrom<&str> for Box<KeyId<A, K>>

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(s: &str) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> TryFrom<String> for Box<KeyId<A, K>>

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(s: String) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<A: KeyAlgorithm, K: KeyName + ?Sized> Eq for KeyId<A, K>

Auto Trait Implementations§

§

impl<A, K> Freeze for KeyId<A, K>
where K: ?Sized,

§

impl<A, K> RefUnwindSafe for KeyId<A, K>

§

impl<A, K> Send for KeyId<A, K>
where A: Send, K: Send + ?Sized,

§

impl<A, K> !Sized for KeyId<A, K>

§

impl<A, K> Sync for KeyId<A, K>
where A: Sync, K: Sync + ?Sized,

§

impl<A, K> Unpin for KeyId<A, K>
where A: Unpin, K: Unpin + ?Sized,

§

impl<A, K> UnwindSafe for KeyId<A, K>
where A: UnwindSafe, K: UnwindSafe + ?Sized,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more