#protocols #client #gel #model #low-level #applications

gel-protocol

Low-level protocol implementation for Gel database client. For applications, use gel-tokio. Formerly published as edgedb-protocol

1 unstable release

new 0.6.1 Jan 14, 2025

#1633 in Database interfaces


Used in gel-tokio

MIT/Apache

375KB
10K SLoC

Gel Rust Binding: Protocol Crate

This crate contains data model types and internal protocol implementation for the Gel client.

License

Licensed under either of

at your option.


lib.rs:

(Website reference) The Gel protocol for Gel-Rust.

Gel types used for data modeling can be seen on the [model] crate, in which the Value enum provides the quickest overview of all the possible types encountered using the client. Many of the variants hold Rust standard library types while others contain types defined in this protocol. Some types such as Duration appear to be standard library types but are unique to the Gel protocol.

Other parts of this crate pertain to the rest of the Gel protocol (e.g. client + server message formats), plus various traits for working with the client such as:

  • QueryArg: a single argument for a query
  • QueryArgs: a tuple of query arguments
  • Queryable: for the Queryable derive macro
  • [QueryResult]: single result from a query (scalars and tuples)

The Value enum:

pub enum Value {
Nothing,
Uuid(Uuid),
Str(String),
Bytes(Bytes),
Int16(i16),
Int32(i32),
Int64(i64),
Float32(f32),
Float64(f64),
BigInt(BigInt),
ConfigMemory(ConfigMemory),
Decimal(Decimal),
Bool(bool),
Datetime(Datetime),
LocalDatetime(LocalDatetime),
LocalDate(LocalDate),
LocalTime(LocalTime),
Duration(Duration),
RelativeDuration(RelativeDuration),
DateDuration(DateDuration),
Json(Json),
Set(Vec<Value>),
Object {
shape: ObjectShape,
fields: Vec<Option<Value>>,
},
SparseObject(SparseObject),
Tuple(Vec<Value>),
NamedTuple {
shape: NamedTupleShape,
fields: Vec<Value>,
},
Array(Vec<Value>),
Enum(EnumValue),
Range(Range<Box<Value>>),
}

Dependencies

~3–9.5MB
~108K SLoC