Skip to main content

ping_core/
codec.rs

1//! CBOR encode/decode for wire types.
2
3use crate::{Error, Result};
4use serde::{de::DeserializeOwned, Serialize};
5
6pub fn encode<T: Serialize>(value: &T) -> Result<Vec<u8>> {
7    let mut out = Vec::with_capacity(256);
8    ciborium::ser::into_writer(value, &mut out).map_err(Error::codec)?;
9    Ok(out)
10}
11
12pub fn decode<T: DeserializeOwned>(bytes: &[u8]) -> Result<T> {
13    ciborium::de::from_reader(bytes).map_err(Error::codec)
14}
15
16pub fn sha256(input: &[u8]) -> [u8; 32] {
17    use sha2::{Digest, Sha256};
18    let mut h = Sha256::new();
19    h.update(input);
20    h.finalize().into()
21}