Skip to main content

JsonCell

Struct JsonCell 

Source
pub struct JsonCell(/* private fields */);
Expand description

One cell of a query result row, carried as the JSON text the server sent.

serde_json::Value has no arbitrary-precision number: a JSON number that does not fit an i64/u64 is parsed through f64, so a DECIMAL(38,2) carrying 22 significant digits loses everything past the 17th before a caller ever sees it. Holding the token text decides nothing at parse time — the digits the server wrote are the digits that come back out.

Serializing re-emits that text verbatim, so a cell round-trips to the server’s own bytes: a number stays an unquoted JSON number rather than turning into a string.

serde_json is the only supported format. The underlying RawValue captures and re-emits text through a private newtype that other serde formats do not recognise, so deserializing a cell from YAML fails and serializing one to YAML writes the JSON text as a string. Go through to_value when a cell has to reach a non-JSON format, accepting the rounding that costs.

Implementations§

Source§

impl JsonCell

Source

pub fn from_json_text(text: String) -> Result<Self, Error>

Adopt text — one complete JSON value — as a cell.

Errors when text is not a single well-formed JSON value. The text is stored as given and re-emitted byte for byte on serialize.

Source

pub fn null() -> Self

The JSON null cell.

Source

pub fn as_json_str(&self) -> &str

The cell’s JSON text, exactly as it arrived.

This is the lossless view: for a number it is every digit the server wrote, whatever its width.

Source

pub fn kind(&self) -> JsonCellKind

Which JSON type this cell holds.

Read off the first byte, which a well-formed JSON value always has and which is enough to tell the six types apart.

Source

pub fn is_null(&self) -> bool

True when the cell is JSON null.

Source

pub fn as_str(&self) -> Option<Cow<'_, str>>

The contents of a JSON string cell, unescaped. None for every other kind — including a number, whose text is available from as_json_str.

Borrows out of the stored text for a string with no escape sequence, which is the common case; only an escaped string is decoded into an owned String. Reading one string column down a large result therefore allocates per escaped value rather than per row.

Source

pub fn as_array(&self) -> Option<Vec<JsonCell>>

The elements of a JSON array cell, each still carried as text. None for every other kind.

Elements keep their own digits: descending into an array does not go through a value tree.

Source

pub fn to_value(&self) -> Value

Parse the cell into a value tree.

Rounds a number too wide for an f64 — the loss this type exists to avoid — so prefer as_json_str wherever the text will do, and reach for this only when a caller genuinely needs serde_json::Value.

§Panics

If the stored text is not valid JSON, which a cell cannot hold: every constructor goes through RawValue, which validates. A failure here is a broken invariant, not a bad cell. It panics rather than substituting Value::Null, which would be indistinguishable from a cell that really is null.

Trait Implementations§

Source§

impl Clone for JsonCell

Source§

fn clone(&self) -> JsonCell

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for JsonCell

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for JsonCell

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for JsonCell

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for JsonCell

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<Value> for JsonCell

Source§

fn from(value: Value) -> Self

Build a cell from a value tree. Whatever precision the tree already lost stays lost; this is for constructing cells from literals, not for recovering them.

Source§

impl PartialEq for JsonCell

Cells are equal when their JSON text is. Text equality is stricter than value equality — 1.0 and 1.00 are different cells — which is the point: this type’s contract is the bytes, and two different texts are two different things to anything reading them.

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for JsonCell

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more