serde_valid_literal/
literal.rs1#[derive(Debug, Clone, PartialEq, PartialOrd)]
2pub enum Literal {
3 Bool(bool),
4 Number(crate::Number),
5 String(&'static str),
6 Char(char),
7 Null,
8}
9
10impl std::convert::From<bool> for Literal {
11 fn from(item: bool) -> Self {
12 Literal::Bool(item)
13 }
14}
15
16impl<T> std::convert::From<T> for Literal
17where
18 T: Into<crate::Number>,
19{
20 fn from(item: T) -> Self {
21 Literal::Number(item.into())
22 }
23}
24
25impl std::convert::From<&'static str> for Literal {
26 fn from(item: &'static str) -> Self {
27 Literal::String(item)
28 }
29}
30
31impl std::convert::From<char> for Literal {
32 fn from(item: char) -> Self {
33 Literal::Char(item)
34 }
35}
36
37impl<T> std::convert::From<Option<T>> for Literal
38where
39 Literal: From<T>,
40{
41 fn from(item: Option<T>) -> Self {
42 match item {
43 Some(value) => std::convert::From::from(value),
44 None => Literal::Null,
45 }
46 }
47}
48
49impl std::fmt::Display for Literal {
50 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
51 match self {
52 Literal::Bool(value) => write!(f, "{value}"),
53 Literal::Number(value) => write!(f, "{value}"),
54 Literal::String(value) => write!(f, "{value}"),
55 Literal::Char(value) => write!(f, "{value}"),
56 Literal::Null => write!(f, "null"),
57 }
58 }
59}