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
//! OI4 / DIN SPEC 91406 Digital Nameplate (DNP) encoding / decoding / validation.
//!
//! Features:
//! - std (default): Enables std::error::Error integration; implies `alloc`.
//! - alloc: Provides heap-backed APIs (e.g. `encode` -> String, `decode`).
//! - strict: Enforces uppercase hex escapes and forbids unescaped reserved ASCII.
//!
//! Encoding rules summary:
//! * Unreserved characters (ALPHA / DIGIT / '-' / '.' / '_' / '~') stay literal.
//! * Every other ASCII byte (including the comma itself) MUST be represented as `,XX` (uppercase hex) when produced by the encoder.
//! * Non-ASCII Unicode stays verbatim (its UTF-8 bytes are not individually re-escaped), unless future spec revisions say otherwise.
//! * Decoder (default mode) accepts lowercase hex in escape triplets; encoder always outputs uppercase.
//! * Strict mode tightens validation (see feature `strict`).
//!
//! No panics on valid usage; no unsafe in production code.
//!
//! ```rust
//! use oi4_dnp_encoding::encode;
//! # #[cfg(feature="alloc")]
//! # {
//! let s = "Hello World!"; // space & exclamation must be escaped
//! let enc = encode(s);
//! assert_eq!(enc, "Hello,20World,21");
//! # }
//! ```
extern crate alloc;
// internal hex helpers
pub use cratedecode;
pub use crateencode;
pub use crate;
pub use crate;
pub use crate;