Skip to main content

tuf/pouf/
mod.rs

1//! Structures and functions to aid in various TUF data pouf formats.
2
3pub(crate) mod pouf1;
4pub use pouf1::Pouf1;
5
6use serde::de::DeserializeOwned;
7use serde::ser::Serialize;
8
9use crate::Result;
10
11/// The format used for data interchange, serialization, and deserialization.
12pub trait Pouf: Sync {
13    /// The type of data that is contained in the `signed` portion of metadata.
14    type RawData: Serialize + DeserializeOwned + PartialEq;
15
16    /// The data pouf's extension.
17    fn extension() -> &'static str;
18
19    /// A function that canonicalizes data to allow for deterministic signatures.
20    fn canonicalize(raw_data: &Self::RawData) -> Result<Vec<u8>>;
21
22    /// Deserialize from `RawData`.
23    fn deserialize<T>(raw_data: &Self::RawData) -> Result<T>
24    where
25        T: DeserializeOwned;
26
27    /// Serialize into `RawData`.
28    fn serialize<T>(data: &T) -> Result<Self::RawData>
29    where
30        T: Serialize;
31
32    /// Read a struct from a stream.
33    fn from_slice<T>(slice: &[u8]) -> Result<T>
34    where
35        T: DeserializeOwned;
36}