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
121
122
123
124
125
126
127
128
129
130
131
use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Utc};
use time::{Date, OffsetDateTime, PrimitiveDateTime, Time};
use uuid::Uuid;

/// This enum represents a [Null](Value::Null)'s type
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum NullType {
    /// String representation
    String,
    /// Choice representation
    Choice,
    /// i64 representation
    I64,
    /// i32 representation
    I32,
    /// i16 representation
    I16,
    /// Bool representation
    Bool,
    /// f64 representation
    F64,
    /// f32 representation
    F32,
    /// binary representation
    Binary,
    /// Naive Time representation
    ChronoNaiveTime,
    /// Naive Date representation
    ChronoNaiveDate,
    /// Naive DateTime representation
    ChronoNaiveDateTime,
    /// Chrono timezone aware date time representation
    ChronoDateTime,
    /// time's date representation
    TimeDate,
    /// time's time representation
    TimeTime,
    /// time's offset datetime representation
    TimeOffsetDateTime,
    /// time's primitive datetime representation
    TimePrimitiveDateTime,
    /// Uuid representation
    Uuid,
    /// Uuid in hyphenated representation
    UuidHyphenated,
    /// Uuid in simple text representation
    UuidSimple,
    /// serde_json's Value representation
    JsonValue,
    /// Mac address representation
    #[cfg(feature = "postgres-only")]
    MacAddress,
    /// IP network presentation
    #[cfg(feature = "postgres-only")]
    IpNetwork,
    /// Bit vec representation
    #[cfg(feature = "postgres-only")]
    BitVec,
}

/**
This enum represents a value
 */
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum Value<'a> {
    /// null representation
    Null(NullType),
    /// Representation of an identifier, e.g. a column.
    /// This variant will not be escaped, so do not
    /// pass unchecked data to it.
    Ident(&'a str),
    /// Representation of a column name with
    /// an optional table name
    Column {
        /// Name of the table
        table_name: Option<&'a str>,
        /// Name of the column
        column_name: &'a str,
    },
    /// Representation of choices
    Choice(&'a str),
    /// String representation
    String(&'a str),
    /// i64 representation
    I64(i64),
    /// i32 representation
    I32(i32),
    /// i16 representation
    I16(i16),
    /// Bool representation
    Bool(bool),
    /// f64 representation
    F64(f64),
    /// f32 representation
    F32(f32),
    /// binary representation
    Binary(&'a [u8]),
    /// chrono's Naive Time representation
    ChronoNaiveTime(NaiveTime),
    /// chrono's Naive Date representation
    ChronoNaiveDate(NaiveDate),
    /// chrono's Naive DateTime representation
    ChronoNaiveDateTime(NaiveDateTime),
    /// chrono's Timezone aware datetime
    ChronoDateTime(DateTime<Utc>),
    /// time's date representation
    TimeDate(Date),
    /// time's time representation
    TimeTime(Time),
    /// time's offset datetime representation
    TimeOffsetDateTime(OffsetDateTime),
    /// time's primitive datetime representation
    TimePrimitiveDateTime(PrimitiveDateTime),
    /// Uuid representation
    Uuid(Uuid),
    /// Uuid in hyphenated representation
    UuidHyphenated(Uuid),
    /// Uuid in simple text representation
    UuidSimple(Uuid),
    /// serde_json's Value representation
    JsonValue(&'a serde_json::Value),
    /// Mac address representation
    #[cfg(feature = "postgres-only")]
    MacAddress(mac_address::MacAddress),
    /// IP network presentation
    #[cfg(feature = "postgres-only")]
    IpNetwork(ipnetwork::IpNetwork),
    /// Bit vec representation
    #[cfg(feature = "postgres-only")]
    BitVec(&'a bit_vec::BitVec),
}