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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// ----------------------------------------------------------------
// ---------- No null character inside output buffer --------------
// ----------------------------------------------------------------
//
// Error: assertion
//
// `StringLayout::Fixed((allow_no_null = true)` — is accepted
// `StringLayout::LengthPrefix` — is required
// `StringLayout::ZeroEnded` — is required
// ---- input data -----
pub const ASSERTION_NO_ZERO_INSIDE: &str = "zero?";
// -------------%<-------------%<------|------->%------------->%-------------
// ----------------------------------------------------------------
// ---------- No null character inside output buffer --------------
// ----------------------------------------------------------------
//
// Error: assertion
//
// `StringLayout::Fixed((allow_no_null = true)` — is accepted
// `StringLayout::LengthPrefix` — is required
// `StringLayout::ZeroEnded` — is required
// ---- input data -----
pub const ASSERTION_ZERO_INSIDE_STR: &str = "va\x00id";
// -------------%<-------------%<------|------->%------------->%-------------
// --------------------------------------------------
// ---------- Error while writing data --------------
// --------------------------------------------------
//
// Error: io
// ---- input data -----
pub const IO_DATA: &str = "text";
// ---- io break -----
pub const IO_FIXED_FORCE_ZERO_DATA_SIZE: u64 = 0;
pub const IO_FIXED_ALLOW_NO_ZERO_DATA_SIZE: u64 = 0;
pub const IO_PREFIX_U8_DATA_SIZE: u64 = 3;
pub const IO_PREFIX_U16_DATA_SIZE: u64 = 4;
pub const IO_PREFIX_U32_DATA_SIZE: u64 = 5;
pub const IO_PREFIX_U32_7BIT_DATA_SIZE: u64 = 3;
pub const IO_ZERO_ENDED_DATA_SIZE: u64 = 0;
// -------------%<-------------%<------|------->%------------->%-------------
// -----------------------------------------------------------
// ---------- Error while writing padding start --------------
// -----------------------------------------------------------
//
// Error: io
//
// `StringLayout::LengthPrefix` — no padding
// ---- input data -----
pub const IO_FIXED_END: &str = "text";
// ---- io break -----
pub const IO_FIXED_FORCE_ZERO_FIXED_END_SIZE: u64 = 4;
pub const IO_FIXED_ALLOW_NO_ZERO_FIXED_END_SIZE: u64 = 4;
pub const IO_ZERO_ENDED_FIXED_END_SIZE: u64 = 4;
// -------------%<-------------%<------|------->%------------->%-------------
// -----------------------------------------------------
// ---------- Error while writing padding end ----------
// -----------------------------------------------------
//
// Error: io
//
// `StringLayout::LengthPrefix` — no padding/terminating zeros
// ---- input data -----
pub const IO_SUFFIX: &str = "";
// ---- io break -----
pub const IO_ZERO_ENDED_SUFFIX_SIZE: u64 = 0;
pub const IO_FIXED_FORCE_ZERO_SUFFIX_SIZE: u64 = 2;
pub const IO_FIXED_ALLOW_NO_ZERO_SUFFIX_SIZE: u64 = 2;
// -------------%<-------------%<------|------->%------------->%-------------
// -----------------------------------------------------------
// ---------- Error while writing prefix length --------------
// -----------------------------------------------------------
//
// Error: io
//
// `StringLayout::FixedLength` — no prefix length
// `StringLayout::ZeroEnded` — no prefix length
// ---- input data -----
pub const IO_PREFIX: &str = "value";
// ---- io break -----
pub const IO_PREFIX_U8_PREFIX_SIZE: u64 = 0;
pub const IO_PREFIX_U16_PREFIX_SIZE: u64 = 0;
pub const IO_PREFIX_U32_PREFIX_SIZE: u64 = 0;
pub const IO_PREFIX_U32_7BIT_PREFIX_SIZE: u64 = 0;
// -------------%<-------------%<------|------->%------------->%-------------
// -----------------------------------------------------------
// ---------- Error while writing too much data --------------
// -----------------------------------------------------------
//
// Error: assertion
//
// `StringLayout::ZeroEnded` — dynamic length
// `StringLayout::LengthPrefix` (not u8) — same as u8, but harder to handle data
// ---- input data -----
/// A 256 bytes long string to test out-of-bound checks on write.
pub const ASSERTION_TOO_BIG_DATA: &str = include_str!;
// -------------%<-------------%<------|------->%------------->%-------------