1use serde::{Deserialize, Serialize};
10
11use super::ColumnType;
12
13#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
14pub enum RangeSubtype {
15 Integer,
16 BigInteger,
17 Numeric,
18 Date,
19 Timestamp,
20 TimestampTz,
21}
22
23impl RangeSubtype {
24 #[must_use]
25 pub const fn range_name(self) -> &'static str {
26 match self {
27 Self::Integer => "int4range",
28 Self::BigInteger => "int8range",
29 Self::Numeric => "numrange",
30 Self::Date => "daterange",
31 Self::Timestamp => "tsrange",
32 Self::TimestampTz => "tstzrange",
33 }
34 }
35
36 #[must_use]
37 pub const fn multirange_name(self) -> &'static str {
38 match self {
39 Self::Integer => "int4multirange",
40 Self::BigInteger => "int8multirange",
41 Self::Numeric => "nummultirange",
42 Self::Date => "datemultirange",
43 Self::Timestamp => "tsmultirange",
44 Self::TimestampTz => "tstzmultirange",
45 }
46 }
47
48 #[must_use]
49 pub const fn scalar_type(self) -> ColumnType {
50 match self {
51 Self::Integer => ColumnType::Integer,
52 Self::BigInteger => ColumnType::BigInteger,
53 Self::Numeric => ColumnType::Numeric {
54 precision: None,
55 scale: None,
56 },
57 Self::Date => ColumnType::Date,
58 Self::Timestamp => ColumnType::Timestamp,
59 Self::TimestampTz => ColumnType::TimestampTz,
60 }
61 }
62}