musli_core/en/mod.rs
1//! Traits for generically dealing with an encoding framework.
2//!
3//! The central traits are [Encode] and [Encoder].
4//!
5//! A type implementing [Encode] can use an [Encoder] to encode itself. This
6//! also comes with a derive allowing you to derive high performance encoding
7//! associated with native Rust types.
8//!
9//! Note that using derives directly from `musli_core` requires you to use the
10//! `#[musli(crate = musli_core)]` attribute.
11//!
12//! # Examples
13//!
14//! ```
15//! use musli_core::Encode;
16//!
17//! #[derive(Encode)]
18//! #[musli(crate = musli_core)]
19//! pub struct Person<'a> {
20//! name: &'a str,
21//! age: u32,
22//! }
23//! ```
24
25/// Derive which automatically implements the [`Encode` trait].
26///
27/// See the [`derives` module] for detailed documentation.
28///
29/// [`derives` module]: <https://docs.rs/musli/latest/musli/_help/derives/index.html>
30/// [`Encode` trait]: <https://docs.rs/musli/latest/musli/trait.Encode.html>
31///
32/// # Examples
33///
34/// ```
35/// use musli::Encode;
36///
37/// #[derive(Encode)]
38/// struct MyType {
39/// data: [u8; 128],
40/// }
41/// ```
42///
43/// When using through `musli_core`, the crate needs to be specified:
44///
45/// ```
46/// use musli_core::Encode;
47///
48/// #[derive(Encode)]
49/// #[musli(crate = musli_core)]
50/// struct MyType {
51/// data: [u8; 128],
52/// }
53/// ```
54#[doc(inline)]
55pub use musli_macros::Encode;
56
57#[doc(inline)]
58pub use self::__traits::*;
59
60mod encode;
61mod encode_bytes;
62mod encode_packed;
63mod encode_trace;
64mod encoder;
65mod entries_encoder;
66mod entry_encoder;
67mod map_encoder;
68mod sequence_encoder;
69mod variant_encoder;
70
71#[doc(hidden)]
72pub mod __traits {
73 pub use super::encode::Encode;
74 pub use super::encode_bytes::EncodeBytes;
75 pub use super::encode_packed::EncodePacked;
76 pub use super::encode_trace::EncodeTrace;
77 pub use super::encoder::{Encoder, TryFastEncode};
78 pub use super::entries_encoder::EntriesEncoder;
79 pub use super::entry_encoder::EntryEncoder;
80 pub use super::map_encoder::MapEncoder;
81 pub use super::sequence_encoder::SequenceEncoder;
82 pub use super::variant_encoder::VariantEncoder;
83}
84
85#[doc(hidden)]
86pub mod utils;