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;