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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
pub mod adapter;
mod de;
mod ser;
#[cfg(test)]
mod tests;
pub use de::{DeserializeSeed, Deserializer, DeserializerContext};
pub use ser::{Serializer, SerializerContext};
use std::fmt::Display;
use std::io::{Cursor, Read, Write};
use serde::de::{Expected, Unexpected};
use serde::{Deserialize, Serialize};
use crate::{HaxeError, Result, StreamDeserializer, StreamSerializer};
impl serde::de::Error for HaxeError {
fn custom<T: Display>(msg: T) -> Self {
HaxeError::custom(msg)
}
fn invalid_type(unexp: Unexpected, exp: &dyn Expected) -> Self {
HaxeError::unexpected_input(exp, unexp)
}
fn invalid_value(unexp: Unexpected, exp: &dyn Expected) -> Self {
HaxeError::unexpected_input(exp, unexp)
}
}
impl serde::ser::Error for HaxeError {
fn custom<T: Display>(msg: T) -> Self {
HaxeError::custom(msg)
}
}
pub fn from_reader_with<'de, R: Read, T: Deserialize<'de>>(
reader: R,
ctx: DeserializerContext,
) -> Result<T> {
let mut de = StreamDeserializer::new(reader, ctx);
let value = de.deserialize()?;
de.end()?;
Ok(value)
}
pub fn from_reader<'de, R: Read, T: Deserialize<'de>>(reader: R) -> Result<T> {
from_reader_with(reader, DeserializerContext::new())
}
pub fn from_slice_with<'de, T: Deserialize<'de>>(
bytes: &[u8],
ctx: DeserializerContext,
) -> Result<T> {
from_reader_with(Cursor::new(&bytes), ctx)
}
pub fn from_slice<'de, T: Deserialize<'de>>(bytes: &[u8]) -> Result<T> {
from_reader(Cursor::new(&bytes))
}
pub fn from_str_with<'de, T: Deserialize<'de>>(
string: &str,
ctx: DeserializerContext,
) -> Result<T> {
from_reader_with(Cursor::new(&string), ctx)
}
pub fn from_str<'de, T: Deserialize<'de>>(string: &str) -> Result<T> {
from_reader(Cursor::new(&string))
}
pub fn to_writer_with<W: Write, T: Serialize>(
value: &T,
writer: W,
ctx: SerializerContext,
) -> Result<()> {
StreamSerializer::new(writer, ctx).serialize(value)
}
pub fn to_writer<W: Write, T: Serialize>(value: &T, writer: W) -> Result<()> {
to_writer_with(value, writer, SerializerContext::new())
}
pub fn to_vec_with<T: Serialize>(value: &T, ctx: SerializerContext) -> Result<Vec<u8>> {
let mut ser = StreamSerializer::new(Cursor::new(Vec::new()), ctx);
ser.serialize(value)?;
Ok(ser.into_inner().into_inner())
}
pub fn to_vec<T: Serialize>(value: &T) -> Result<Vec<u8>> {
to_vec_with(value, SerializerContext::new())
}
pub fn to_string_with<T: Serialize>(value: &T, ctx: SerializerContext) -> Result<String> {
let vec = to_vec_with(value, ctx)?;
Ok(String::from_utf8(vec).expect("invalid utf8 data"))
}
pub fn to_string<T: Serialize>(value: &T) -> Result<String> {
to_string_with(value, SerializerContext::new())
}