logo
#[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<AnyRoomEvent>>(json)
    .unwrap() // the first Result from serde_json::from_str, will not fail
    .deserialize() // deserialize to the inner type
    .unwrap(); // finally get to the AnyRoomEvent

Implementations

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.

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.

Calls U::from(self).

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

The resulting type after obtaining ownership.

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

🔬 This is a nightly-only experimental API. (toowned_clone_into)

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.