1use serde::{Deserialize, Serialize};
2use std::fmt;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub enum LogicalType {
7 Boolean,
9 Int64,
11 Float64,
13 Utf8,
15 DateTime,
17}
18
19impl fmt::Display for LogicalType {
20 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21 let name = match self {
22 LogicalType::Boolean => "boolean",
23 LogicalType::Int64 => "int64",
24 LogicalType::Float64 => "float64",
25 LogicalType::Utf8 => "utf8",
26 LogicalType::DateTime => "datetime",
27 };
28 f.write_str(name)
29 }
30}
31
32#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
34pub enum TypeState {
35 Unresolved,
37 Known(LogicalType),
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
43pub enum Cardinality {
44 Single,
46 OrderedMany,
48 UnorderedMany,
50}
51
52#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
54pub enum Nullability {
55 Unspecified,
57 Nullable,
59 NotNull,
61}