serde_pod/lib.rs
1//! Реализует простую сериализацию и десериализацию структур, наиболее близкую к их
2//! представлению в памяти.
3//!
4//! # Пример
5//! Читаем заголовок GFF файла (формат Bioware, используемый для хранения данных в
6//! таких играх, как Neverwinter Nights, Neverwinter Nights 2 и Ведьмак):
7//! ```rust
8//! # extern crate byteorder;
9//! # #[macro_use]
10//! # extern crate serde_derive;
11//! # extern crate serde_pod;
12//! # use serde_pod::{from_bytes, Result};
13//! #[derive(Debug, Deserialize, PartialEq)]
14//! struct Signature([u8; 4]);
15//!
16//! #[derive(Debug, Deserialize, PartialEq)]
17//! struct Version([u8; 4]);
18//!
19//! #[derive(Debug, Deserialize, PartialEq)]
20//! struct Section {
21//! offset: u32,
22//! count: u32,
23//! }
24//! #[derive(Debug, Deserialize, PartialEq)]
25//! struct GffHeader {
26//! signature: Signature,
27//! version: Version,
28//! structs: Section,
29//! fields: Section,
30//! labels: Section,
31//! field_data: Section,
32//! field_indices: Section,
33//! list_indices: Section,
34//! }
35//!
36//! # fn main() -> Result<()> {
37//! let header: GffHeader = from_bytes::<byteorder::LE, _>(&[
38//! // Signature
39//! 0x47, 0x55, 0x49, 0x20,
40//! // Version
41//! 0x56, 0x33, 0x2E, 0x32,
42//! // structs
43//! 0x38, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
44//! // fields
45//! 0xEC, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00,
46//! // labels
47//! 0xD0, 0x07, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00,
48//! // field_data
49//! 0x70, 0x09, 0x00, 0x00, 0x1D, 0x02, 0x00, 0x00,
50//! // field_indices
51//! 0x8D, 0x0B, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00,
52//! // list_indices
53//! 0xD9, 0x0D, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
54//! ])?;
55//!
56//! assert_eq!(header, GffHeader {
57//! signature: Signature(*b"GUI "),
58//! version: Version(*b"V3.2"),
59//! structs: Section { offset: 0x38, count: 15 },
60//! fields: Section { offset: 0xEC, count: 147 },
61//! labels: Section { offset: 0x07D0, count: 26 },
62//! field_data: Section { offset: 0x0970, count: 541 },
63//! field_indices: Section { offset: 0x0B8D, count: 588 },
64//! list_indices: Section { offset: 0x0DD9, count: 36 },
65//! });
66//! # Ok(())
67//! # }
68//! ```
69#![deny(missing_docs)]
70extern crate serde;
71extern crate byteorder;
72
73#[cfg(test)]
74#[macro_use]
75extern crate serde_derive;
76#[cfg(test)]
77#[macro_use]
78extern crate quickcheck;
79
80use byteorder::{BE, LE};
81
82pub mod error;
83pub mod ser;
84pub mod de;
85
86/// Сериализатор, записывающий числа в поток в порядке `Big-Endian`
87pub type BESerializer<W> = ser::Serializer<BE, W>;
88/// Сериализатор, записывающий числа в поток в порядке `Little-Endian`
89pub type LESerializer<W> = ser::Serializer<LE, W>;
90
91/// Десериализатор, читающий числа из потока в порядке `Big-Endian`
92pub type BEDeserializer<R> = de::Deserializer<BE, R>;
93/// Десериализатор, читающий числа из потока в порядке `Little-Endian`
94pub type LEDeserializer<R> = de::Deserializer<LE, R>;
95
96pub use error::{Error, Result};
97pub use ser::{to_vec, to_writer};
98pub use de::from_bytes;