pub enum GenericValue {
Show 17 variants
Null,
Bool(bool),
SmallInt(i16),
Int(i32),
BigInt(i64),
Float(f32),
Double(f64),
Decimal(Decimal),
String(String),
Uuid(Uuid),
Date(NaiveDate),
Time(NaiveTime),
Timestamp(NaiveDateTime),
TimestampTz(DateTime<Utc>),
Bytes(Vec<u8>),
Array(Vec<GenericValue>),
Map(BTreeMap<String, GenericValue>),
}Expand description
The canonical value vocabulary every layer trades in — the middle type between a source and a sink.
A source maps its native types into these variants; a sink maps them out
to its own representation. The set is deliberately fine-grained — numerics are
split by width, temporals are split into date/time/timestamp/timestamptz — so
no semantic information is lost in transit: a date arrives at a sink as a
Date, not an opaque string a future sink would have to guess
at. Text-family Postgres types (text/varchar/citext/enum) share the one
String shape because they don’t differ as values; their
indexing differs, and that lives in the field’s FlussoType.
Serde is derived and format-agnostic on purpose. The derive is externally
tagged ({"Date":"2024-01-01"}, {"BigInt":5}), so serialize → deserialize
is a lossless identity — a Date round-trips back a Date, never collapsing
to a string. That lets a queue persist or transport a value in whatever format
it likes and hand it back unchanged: it goes in as a GenericValue and comes
out as the same GenericValue. Core picks no format (no JSON here); the
concrete encoding is the consumer’s choice.
Variants§
Null
Bool(bool)
SmallInt(i16)
smallint / int2.
Int(i32)
integer / int4.
BigInt(i64)
bigint / int8.
Float(f32)
real / float4.
Double(f64)
double precision / float8.
Decimal(Decimal)
numeric / decimal — exact.
String(String)
Any text-family value (text/varchar/citext/enum).
Uuid(Uuid)
uuid.
Date(NaiveDate)
date — no time, no zone.
Time(NaiveTime)
time — no date, no zone.
Timestamp(NaiveDateTime)
timestamp — date + time, no zone.
TimestampTz(DateTime<Utc>)
timestamptz — an instant, normalized to UTC.
Bytes(Vec<u8>)
bytea.
Array(Vec<GenericValue>)
Map(BTreeMap<String, GenericValue>)
Implementations§
Source§impl GenericValue
impl GenericValue
Sourcepub fn is_bindable_scalar(&self) -> bool
pub fn is_bindable_scalar(&self) -> bool
Whether this value can stand as a single SQL parameter, key, or literal:
true for every scalar variant, false for Null and the composite
Array/Map. The one home for that rule — the Postgres source applies
it when binding params, building keys, and inlining literals. Written as
an exhaustive match so a new variant cannot be added without classifying
it here.
Trait Implementations§
Source§impl Clone for GenericValue
impl Clone for GenericValue
Source§fn clone(&self) -> GenericValue
fn clone(&self) -> GenericValue
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more