lexical_util/
options.rs

1//! Shared traits for the options API.
2
3#[cfg(feature = "write")]
4use crate::constants::FormattedSize;
5
6// TRAITS
7// ------
8
9/// Shared trait for all writer options.
10#[cfg(feature = "write")]
11pub trait WriteOptions: Default {
12    /// Determine if the options are valid.
13    fn is_valid(&self) -> bool;
14
15    /// Get an upper bound on the buffer size.
16    fn buffer_size<T: FormattedSize, const FORMAT: u128>(&self) -> usize;
17}
18
19/// Shared trait for all parser options.
20#[cfg(feature = "parse")]
21pub trait ParseOptions: Default {
22    /// Determine if the options are valid.
23    fn is_valid(&self) -> bool;
24}
25
26// PRE-DEFINED CONSTANTS
27// ---------------------
28
29// The following constants have the following signifiers:
30//  ${X}_LITERAL - Applies to all literal values for that language.
31//  ${X}_STRING - Applies to all string values for that language.
32//  ${X} - Applies to all values for that language.
33//  ${X}_(NAN|INF|INFINITY) - Applies to only a single special value.
34//  IF it's not defined, all values are the default.
35
36macro_rules! literal {
37    ($name:ident, $value:ident) => {
38        pub const $name: Option<&[u8]> = $value;
39    };
40    ($name:ident, $value:literal) => {
41        pub const $name: Option<&[u8]> = Some($value);
42    };
43}
44
45literal!(RUST_LITERAL, None);
46// RUST_STRING
47literal!(PYTHON_LITERAL, None);
48// PYTHON_STRING
49literal!(CXX_LITERAL_NAN, b"NAN");
50literal!(CXX_LITERAL_INF, b"INFINITY");
51literal!(CXX_LITERAL_INFINITY, b"INFINITY");
52// CXX_STRING
53literal!(C_LITERAL_NAN, b"NAN");
54literal!(C_LITERAL_INF, b"INFINITY");
55literal!(C_LITERAL_INFINITY, b"INFINITY");
56// RUBY_LITERAL
57literal!(RUBY_LITERAL_NAN, b"NaN");
58literal!(RUBY_LITERAL_INF, b"Infinity");
59literal!(RUBY_STRING_NONE, None);
60// C_STRING
61literal!(SWIFT_LITERAL, None);
62// SWIFT_STRING
63literal!(GO_LITERAL, None);
64// GO_STRING
65literal!(HASKELL_LITERAL, None);
66literal!(HASKELL_STRING_INF, b"Infinity");
67literal!(HASKELL_STRING_INFINITY, b"Infinity");
68literal!(JAVASCRIPT_INF, b"Infinity");
69literal!(JAVASCRIPT_INFINITY, b"Infinity");
70literal!(PERL_LITERAL, None);
71// PERL_STRING
72literal!(PHP_LITERAL_NAN, b"NAN");
73literal!(PHP_LITERAL_INF, b"INF");
74literal!(PHP_LITERAL_INFINITY, b"INF");
75// PHP_STRING
76literal!(JAVA_LITERAL, None);
77literal!(JAVA_STRING_INF, b"Infinity");
78literal!(JAVA_STRING_INFINITY, b"Infinity");
79literal!(R_LITERAL_INF, b"Inf");
80literal!(R_LITERAL_INFINITY, b"Inf");
81// R_STRING
82literal!(KOTLIN_LITERAL, None);
83literal!(KOTLIN_STRING_INF, b"Infinity");
84literal!(KOTLIN_STRING_INFINITY, b"Infinity");
85literal!(JULIA_LITERAL_INF, b"Inf");
86literal!(JULIA_LITERAL_INFINITY, b"Inf");
87// JULIA_STRING
88literal!(CSHARP_LITERAL, None);
89literal!(CSHARP_STRING_INF, b"Infinity");
90literal!(CSHARP_STRING_INFINITY, b"Infinity");
91literal!(KAWA, None);
92literal!(GAMBITC, None);
93literal!(GUILE, None);
94literal!(CLOJURE_LITERAL, None);
95literal!(CLOJURE_STRING_INF, b"Infinity");
96literal!(CLOJURE_STRING_INFINITY, b"Infinity");
97literal!(ERLANG_LITERAL_NAN, b"nan");
98literal!(ERLANG_STRING, None);
99literal!(ELM_LITERAL, None);
100literal!(ELM_STRING_NAN, None);
101literal!(ELM_STRING_INF, b"Infinity");
102literal!(ELM_STRING_INFINITY, b"Infinity");
103literal!(SCALA_LITERAL, None);
104literal!(SCALA_STRING_INF, b"Infinity");
105literal!(SCALA_STRING_INFINITY, b"Infinity");
106literal!(ELIXIR, None);
107literal!(FORTRAN_LITERAL, None);
108// FORTRAN_STRING
109literal!(D_LITERAL, None);
110// D_STRING
111literal!(COFFEESCRIPT_INF, b"Infinity");
112literal!(COFFEESCRIPT_INFINITY, b"Infinity");
113literal!(COBOL, None);
114literal!(FSHARP_LITERAL_NAN, b"nan");
115literal!(FSHARP_LITERAL_INF, b"infinity");
116literal!(FSHARP_LITERAL_INFINITY, b"infinity");
117// FSHARP_STRING
118literal!(VB_LITERAL, None);
119literal!(VB_STRING_INF, None);
120literal!(VB_STRING_INFINITY, None);
121literal!(OCAML_LITERAL_NAN, b"nan");
122literal!(OCAML_LITERAL_INF, b"infinity");
123literal!(OCAML_LITERAL_INFINITY, b"infinity");
124// OCAML_STRING
125literal!(OBJECTIVEC, None);
126literal!(REASONML_LITERAL_NAN, b"nan");
127literal!(REASONML_LITERAL_INF, b"infinity");
128literal!(REASONML_LITERAL_INFINITY, b"infinity");
129// REASONML_STRING
130literal!(MATLAB_LITERAL_INF, b"inf");
131literal!(MATLAB_LITERAL_INFINITY, b"Inf");
132// MATLAB_STRING
133literal!(ZIG_LITERAL, None);
134// ZIG_STRING
135literal!(SAGE_LITERAL_INF, b"infinity");
136literal!(SAGE_LITERAL_INFINITY, b"Infinity");
137// SAGE_STRING
138literal!(JSON, None);
139literal!(TOML, None);
140literal!(YAML, None);
141literal!(XML_INF, None);
142literal!(XML_INFINITY, None);
143literal!(SQLITE, None);
144literal!(POSTGRESQL, None);
145literal!(MYSQL, None);
146literal!(MONGODB_INF, b"Infinity");
147literal!(MONGODB_INFINITY, b"Infinity");