ssi_multicodec/codec/
mod.rs1use 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;