Struct ruma_common::serde::Raw

source ·
#[repr(transparent)]
pub struct Raw<T> { /* private fields */ }
Expand description

A wrapper around Box<RawValue>, to be used in place of any type in the Matrix endpoint definition to allow request and response types to contain that said type represented by the generic argument Ev.

Ruma offers the Raw wrapper to enable passing around JSON text that is only partially validated. This is useful when a client receives events that do not follow the spec perfectly or a server needs to generate reference hashes with the original canonical JSON string. All event structs and enums implement Serialize / Deserialize, Raw should be used to pass around events in a lossless way.


let json = r#"{ "type": "imagine a full event", "content": {...} }"#;

let deser = serde_json::from_str::<Raw<AnyTimelineEvent>>(json)
    .unwrap() // the first Result from serde_json::from_str, will not fail
    .deserialize() // deserialize to the inner type
    .unwrap(); // finally get to the AnyTimelineEvent

Implementations§

Available on crate feature events only.

Try to deserialize the JSON as an event’s content.

Create a Raw by serializing the given T.

Shorthand for serde_json::value::to_raw_value(val).map(Raw::from_json), but specialized to T.

Errors

Fails if Ts Serialize implementation fails.

Create a Raw from a boxed RawValue.

Convert an owned String of JSON data to Raw<T>.

This function is equivalent to serde_json::from_str::<Raw<T>> except that an allocation and copy is avoided if both of the following are true:

  • the input has no leading or trailing whitespace, and
  • the input has capacity equal to its length.

Access the underlying json value.

Convert self into the underlying json value.

Try to access a given field inside this Raw, assuming it contains an object.

Returns Err(_) when the contained value is not an object, or the field exists but is fails to deserialize to the expected type.

Returns Ok(None) when the field doesn’t exist or is null.

Example
if raw_event.get_field::<String>("type")?.as_deref() == Some("org.custom.matrix.event") {
    let event = raw_event.deserialize_as::<CustomMatrixEvent>()?;
    // ...
}

Try to deserialize the JSON as the expected type.

Try to deserialize the JSON as a custom type.

Turns Raw<T> into Raw<U> without changing the underlying JSON.

This is useful for turning raw specific event types into raw event enum types.

Turns &Raw<T> into &Raw<U> without changing the underlying JSON.

This is useful for turning raw specific event types into raw event enum types.

Trait Implementations§

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
Deserialize this value from the given Serde deserializer. Read more
Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

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

Calls U::from(self).

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

The alignment of pointer.
The type for initializers.
Initializes a with the given initializer. Read more
Dereferences the given pointer. Read more
Mutably dereferences the given pointer. Read more
Drops the object pointed to by the given pointer. Read more
The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more