pub struct StatusList { /* private fields */ }sd-jwt only.Expand description
A status list (Token Status List §4): one status of bits bits per referenced token,
packed into a byte array from the least significant bit up, ZLIB-compressed and
base64url-encoded as lst in JSON.
§Examples
use identity_kit::sd_jwt_vc::{StatusList, StatusType};
use serde_json::json;
// Token Status List §4.1: 16 statuses of 1 bit.
let list: StatusList = serde_json::from_value(json!({ "bits": 1, "lst": "eNrbuRgAAhcBXQ" }))?;
assert_eq!(list.as_bytes(), &[0xb9, 0xa3]);
assert_eq!(list.get(0), Some(StatusType::INVALID));
assert_eq!(list.get(1), Some(StatusType::VALID));
assert_eq!(list.get(15), Some(StatusType::INVALID));
assert_eq!(list.get(16), None);
let mut rebuilt = StatusList::new(1, 16)?;
for index in [0, 3, 4, 5, 7, 8, 9, 13, 15] {
rebuilt.set(index, StatusType::INVALID)?;
}
assert_eq!(rebuilt.as_bytes(), list.as_bytes());Implementations§
Source§impl StatusList
impl StatusList
Sourcepub const MAX_BYTES: usize
pub const MAX_BYTES: usize
The largest decompressed list Deserialize accepts: 16 MiB, room for 16 million
8-bit statuses.
Sourcepub fn new(bits: u8, size: usize) -> Result<Self, StatusListError>
pub fn new(bits: u8, size: usize) -> Result<Self, StatusListError>
An all-VALID list of size statuses of bits bits each.
§Errors
StatusListError::InvalidBits unless bits is 1, 2, 4 or 8.
Sourcepub fn from_bytes(bits: u8, bytes: Vec<u8>) -> Result<Self, StatusListError>
pub fn from_bytes(bits: u8, bytes: Vec<u8>) -> Result<Self, StatusListError>
A list over the uncompressed byte array bytes.
§Errors
StatusListError::InvalidBits unless bits is 1, 2, 4 or 8.
Sourcepub fn with_aggregation_uri(self, uri: impl Into<String>) -> Self
pub fn with_aggregation_uri(self, uri: impl Into<String>) -> Self
This list with aggregation_uri.
Sourcepub fn aggregation_uri(&self) -> Option<&str>
pub fn aggregation_uri(&self) -> Option<&str>
The aggregation_uri, if any.
Sourcepub fn get(&self, index: u64) -> Option<StatusType>
pub fn get(&self, index: u64) -> Option<StatusType>
The status at index, or None beyond the end of the list.
Sourcepub fn set(
&mut self,
index: u64,
status: StatusType,
) -> Result<(), StatusListError>
pub fn set( &mut self, index: u64, status: StatusType, ) -> Result<(), StatusListError>
Sets the status at index.
§Errors
StatusListError::IndexOutOfRange or StatusListError::InvalidStatusValue when
the value does not fit in bits.
Sourcepub fn to_lst(&self) -> String
pub fn to_lst(&self) -> String
The ZLIB-compressed byte array, base64url-encoded: the lst member.
Sourcepub fn from_lst(
bits: u8,
lst: &str,
max_bytes: usize,
) -> Result<Self, StatusListError>
pub fn from_lst( bits: u8, lst: &str, max_bytes: usize, ) -> Result<Self, StatusListError>
Decodes lst, refusing a list that decompresses to more than max_bytes.
§Errors
StatusListError::InvalidBits, StatusListError::Compression or
StatusListError::TooLarge.
Trait Implementations§
Source§impl Clone for StatusList
impl Clone for StatusList
Source§impl Debug for StatusList
impl Debug for StatusList
Source§impl<'de> Deserialize<'de> for StatusList
impl<'de> Deserialize<'de> for StatusList
Source§fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
Decodes lst with StatusList::MAX_BYTES as the limit.
impl Eq for StatusList
Source§impl PartialEq for StatusList
impl PartialEq for StatusList
Source§impl Serialize for StatusList
impl Serialize for StatusList
impl StructuralPartialEq for StatusList
Auto Trait Implementations§
impl Freeze for StatusList
impl RefUnwindSafe for StatusList
impl Send for StatusList
impl Sync for StatusList
impl Unpin for StatusList
impl UnsafeUnpin for StatusList
impl UnwindSafe for StatusList
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.