Add from_parts constructors for DeviceKeyId and ServerKeyId
This commit is contained in:
parent
1f056b4ba7
commit
a183a6c801
@ -4,6 +4,10 @@ Breaking changes:
|
|||||||
|
|
||||||
* Update strum dependency to 0.19
|
* Update strum dependency to 0.19
|
||||||
|
|
||||||
|
Improvements:
|
||||||
|
|
||||||
|
* Add `DeviceKeyId::from_parts` and `ServerKeyId::from_parts`
|
||||||
|
|
||||||
# 0.17.4
|
# 0.17.4
|
||||||
|
|
||||||
Bug fixes:
|
Bug fixes:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Identifiers for device keys for end-to-end encryption.
|
//! Identifiers for device keys for end-to-end encryption.
|
||||||
|
|
||||||
use std::{num::NonZeroU8, str::FromStr};
|
use std::{convert::TryInto, num::NonZeroU8, str::FromStr};
|
||||||
|
|
||||||
use ruma_identifiers_validation::{key_algorithms::DeviceKeyAlgorithm, Error};
|
use ruma_identifiers_validation::{key_algorithms::DeviceKeyAlgorithm, Error};
|
||||||
|
|
||||||
@ -14,6 +14,23 @@ pub struct DeviceKeyId {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl DeviceKeyId {
|
impl DeviceKeyId {
|
||||||
|
/// Create a `DeviceKeyId` from a `DeviceKeyAlgorithm` and a `DeviceId`.
|
||||||
|
pub fn from_parts(algorithm: DeviceKeyAlgorithm, device_id: &DeviceId) -> Self {
|
||||||
|
let algorithm: &str = algorithm.as_ref();
|
||||||
|
let device_id: &str = device_id.as_ref();
|
||||||
|
|
||||||
|
let mut res = String::with_capacity(algorithm.len() + 1 + device_id.len());
|
||||||
|
res.push_str(algorithm);
|
||||||
|
res.push_str(":");
|
||||||
|
res.push_str(device_id);
|
||||||
|
|
||||||
|
let colon_idx =
|
||||||
|
NonZeroU8::new(algorithm.len().try_into().expect("no algorithm name len > 255"))
|
||||||
|
.expect("no empty algorithm name");
|
||||||
|
|
||||||
|
DeviceKeyId { full_id: res.into(), colon_idx }
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns key algorithm of the device key ID.
|
/// Returns key algorithm of the device key ID.
|
||||||
pub fn algorithm(&self) -> DeviceKeyAlgorithm {
|
pub fn algorithm(&self) -> DeviceKeyAlgorithm {
|
||||||
DeviceKeyAlgorithm::from_str(&self.full_id[..self.colon_idx.get() as usize]).unwrap()
|
DeviceKeyAlgorithm::from_str(&self.full_id[..self.colon_idx.get() as usize]).unwrap()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Identifiers for homeserver signing keys used for federation.
|
//! Identifiers for homeserver signing keys used for federation.
|
||||||
|
|
||||||
use std::{num::NonZeroU8, str::FromStr};
|
use std::{convert::TryInto, num::NonZeroU8, str::FromStr};
|
||||||
|
|
||||||
use ruma_identifiers_validation::{key_algorithms::ServerKeyAlgorithm, Error};
|
use ruma_identifiers_validation::{key_algorithms::ServerKeyAlgorithm, Error};
|
||||||
|
|
||||||
@ -12,6 +12,22 @@ pub struct ServerKeyId {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ServerKeyId {
|
impl ServerKeyId {
|
||||||
|
/// Create a `ServerKeyId` from a `ServerKeyAlgorithm` and a `ServerId`.
|
||||||
|
pub fn from_parts(algorithm: ServerKeyAlgorithm, version: &str) -> Self {
|
||||||
|
let algorithm: &str = algorithm.as_ref();
|
||||||
|
|
||||||
|
let mut res = String::with_capacity(algorithm.len() + 1 + version.len());
|
||||||
|
res.push_str(algorithm);
|
||||||
|
res.push_str(":");
|
||||||
|
res.push_str(version);
|
||||||
|
|
||||||
|
let colon_idx =
|
||||||
|
NonZeroU8::new(algorithm.len().try_into().expect("no algorithm name len > 255"))
|
||||||
|
.expect("no empty algorithm name");
|
||||||
|
|
||||||
|
ServerKeyId { full_id: res.into(), colon_idx }
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns key algorithm of the server key ID.
|
/// Returns key algorithm of the server key ID.
|
||||||
pub fn algorithm(&self) -> ServerKeyAlgorithm {
|
pub fn algorithm(&self) -> ServerKeyAlgorithm {
|
||||||
ServerKeyAlgorithm::from_str(&self.full_id[..self.colon_idx.get() as usize]).unwrap()
|
ServerKeyAlgorithm::from_str(&self.full_id[..self.colon_idx.get() as usize]).unwrap()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user