junobuild_shared/
serializers.rs

1use ciborium::{from_reader, into_writer};
2use serde::{Deserialize, Serialize};
3use std::borrow::Cow;
4
5/// Serializes a given value into a borrowed byte slice.
6///
7/// # Arguments
8/// * `value` - A reference to the value to serialize.
9///
10/// # Returns
11/// A `Cow<'_, [u8]>` representing the serialized data.
12///
13/// # Panics
14/// Panics if serialization fails.
15pub fn serialize_to_bytes<T: Serialize>(value: &T) -> Cow<'_, [u8]> {
16    let mut bytes = vec![];
17    into_writer(value, &mut bytes).expect("Failed to serialize to bytes");
18    Cow::Owned(bytes)
19}
20
21/// Serializes a given value into an owned byte vector.
22///
23/// # Arguments
24/// * `value` - A reference to the value to serialize.
25///
26/// # Returns
27/// A `Vec<u8>` representing the serialized data.
28///
29/// # Panics
30/// Panics if serialization fails.
31pub fn serialize_into_bytes<T: Serialize>(value: &T) -> Vec<u8> {
32    let mut bytes = vec![];
33    into_writer(value, &mut bytes).expect("Failed to serialize to bytes");
34    bytes
35}
36
37/// Deserializes a value from a byte array.
38///
39/// # Arguments
40/// * `bytes` - A `Cow<'_, [u8]>` representing the bytes to deserialize from.
41///
42/// # Returns
43/// The deserialized value of type `T`.
44///
45/// # Panics
46/// Panics if deserialization fails.
47pub fn deserialize_from_bytes<T: for<'a> Deserialize<'a>>(bytes: Cow<'_, [u8]>) -> T {
48    from_reader(&*bytes).expect("Failed to deserialize from bytes")
49}
50
51/// Provides a default deserialization value for boolean fields, defaulting to `true`.
52///
53/// This function is a workaround for handling default values when deserializing with Serde,
54/// particularly useful in scenarios where boolean fields need to default to `true` instead
55/// of the usual `false` when not explicitly provided in the input.
56///
57/// # Returns
58/// Returns `Some(true)`, indicating the default value to use.
59pub fn deserialize_default_as_true() -> Option<bool> {
60    // https://github.com/serde-rs/serde/issues/1030#issuecomment-522278006
61
62    Some(true)
63}