ssi_multicodec/codec/
mod.rs

1use std::borrow::Cow;
2
3use crate::Error;
4
5pub trait Codec: Sized {
6    const CODEC: u64;
7
8    fn to_bytes(&self) -> Cow<[u8]>;
9
10    fn from_bytes(bytes: &[u8]) -> Result<Self, Error>;
11}
12
13pub trait MultiCodec: Sized {
14    fn to_codec_and_bytes(&self) -> (u64, Cow<[u8]>);
15
16    fn from_codec_and_bytes(codec: u64, bytes: &[u8]) -> Result<Self, Error>;
17}
18
19impl<C: Codec> MultiCodec for C {
20    fn to_codec_and_bytes(&self) -> (u64, Cow<[u8]>) {
21        (Self::CODEC, self.to_bytes())
22    }
23
24    fn from_codec_and_bytes(codec: u64, bytes: &[u8]) -> Result<Self, Error> {
25        if codec == Self::CODEC {
26            Self::from_bytes(bytes)
27        } else {
28            Err(Error::UnexpectedCodec(codec))
29        }
30    }
31}
32
33#[cfg(feature = "ed25519")]
34mod ed25519;
35
36#[cfg(feature = "k256")]
37mod k256;
38
39#[cfg(feature = "p256")]
40mod p256;
41
42#[cfg(feature = "p384")]
43mod p384;
44
45#[cfg(feature = "bls12-381")]
46mod bls12_381;