1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use crate::de::Deserializer;
use crate::error::Result;
use crate::ser::Serializer;
use alloc::fmt::Write;
use alloc::string::String;
use alloc::vec::Vec;
use serde::{Deserialize, Serialize};

/// deserialize an instance of `T` from NLSD text
pub fn from_str<'de, T>(s: &'de str) -> Result<T>
where
    T: Deserialize<'de>,
{
    let mut deserializer = Deserializer::from_str(s);
    T::deserialize(&mut deserializer)
}

/// deserialize an instance of `T` from NLSD bytes
pub fn from_slice<'de, T>(s: &'de [u8]) -> Result<T>
where
    T: Deserialize<'de>,
{
    from_str(core::str::from_utf8(s)?)
}

/// serialize an instance of `T` to a string
pub fn to_string<T: ?Sized>(value: &T) -> Result<String>
where
    T: Serialize,
{
    let mut writer = String::new();
    to_writer(&mut writer, value)?;
    Ok(writer)
}

/// serialize an instance of `T` to bytes
pub fn to_vec<T: ?Sized>(value: &T) -> Result<Vec<u8>>
where
    T: Serialize,
{
    Ok(to_string(value)?.into_bytes())
}

/// serialize an instance of `T` to a writer
pub fn to_writer<W, T: ?Sized>(writer: W, value: &T) -> Result<()>
where
    W: Write,
    T: Serialize,
{
    let mut ser = Serializer::new(writer);
    value.serialize(&mut ser)?;
    Ok(())
}