qubit_codec_text/decode/
charset_decode_policy.rs1use crate::MalformedAction;
9
10#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
12pub struct CharsetDecodePolicy {
13 malformed_action: MalformedAction,
15 replacement: char,
17}
18
19impl CharsetDecodePolicy {
20 pub const DEFAULT_REPLACEMENT: char = '\u{fffd}';
22
23 #[must_use]
25 #[inline(always)]
26 pub const fn new(
27 malformed_action: MalformedAction,
28 replacement: char,
29 ) -> Self {
30 Self {
31 malformed_action,
32 replacement,
33 }
34 }
35
36 #[must_use]
38 #[inline(always)]
39 pub const fn replace(replacement: char) -> Self {
40 Self::new(MalformedAction::Replace, replacement)
41 }
42
43 #[must_use]
46 #[inline(always)]
47 pub const fn ignore() -> Self {
48 Self::ignore_with_replacement(Self::DEFAULT_REPLACEMENT)
49 }
50
51 #[must_use]
53 #[inline(always)]
54 pub const fn ignore_with_replacement(replacement: char) -> Self {
55 Self::new(MalformedAction::Ignore, replacement)
56 }
57
58 #[must_use]
61 #[inline(always)]
62 pub const fn report() -> Self {
63 Self::new(MalformedAction::Report, Self::DEFAULT_REPLACEMENT)
64 }
65
66 #[must_use]
68 #[inline(always)]
69 pub const fn malformed_action(self) -> MalformedAction {
70 self.malformed_action
71 }
72
73 #[must_use]
75 #[inline(always)]
76 pub const fn replacement(self) -> char {
77 self.replacement
78 }
79}
80
81impl Default for CharsetDecodePolicy {
82 #[inline(always)]
83 fn default() -> Self {
84 Self::replace(Self::DEFAULT_REPLACEMENT)
85 }
86}