use chrono::{DateTime, Utc};
use crate::table::Row;
mod from;
mod into;
pub(crate) const ARRAY_VALUE_KEY: &str = "!ARRAY_VALUE";
#[derive(Debug, Clone)]
pub enum Value {
Int(i64),
Bool(bool),
String(String),
#[doc(hidden)]
OldStringEnum(String),
Binary(Vec<u8>),
Table(Vec<Row<'static>>),
#[doc(hidden)]
OldMixed,
#[doc(hidden)]
OldDateTime,
Timestamp(DateTime<Utc>),
Float(f32),
Double(f64),
#[doc(hidden)]
Reserved4,
Link(Link),
LinkList(Vec<Link>),
BackLink(Backlink),
None,
}
impl Value {
pub fn is_none(&self) -> bool {
matches!(self, Value::None)
}
}
#[derive(Debug, Clone, Hash, Eq, PartialEq)]
pub struct Link {
pub target_table_number: usize,
pub row_number: usize,
}
impl Link {
pub fn new(target_table_number: usize, row_number: usize) -> Self {
Self {
target_table_number,
row_number,
}
}
}
#[derive(Debug, Clone, Hash, Eq, PartialEq)]
pub struct Backlink {
pub origin_table_number: usize,
pub origin_column_number: usize,
pub row_numbers: Vec<usize>,
}
impl Backlink {
pub fn new(
origin_table_number: usize,
origin_column_number: usize,
row_numbers: Vec<usize>,
) -> Self {
Self {
origin_table_number,
origin_column_number,
row_numbers,
}
}
}