Struct ruma_serde::Raw[][src]

pub struct Raw<T> { /* fields omitted */ }
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

impl<T> Raw<T>[src]

pub fn from_json(raw: Box<RawValue>) -> Self[src]

Create a Raw from a boxed RawValue.

pub fn json(&self) -> &RawValue[src]

Access the underlying json value.

pub fn into_json(self) -> Box<RawValue>[src]

Convert self into the underlying json value.

pub fn get_field<'a, U>(&'a self, field_name: &str) -> Result<Option<U>> where
    U: Deserialize<'a>, 
[src]

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>()?;
    // ...
}

pub fn deserialize_as<U>(&self) -> Result<U> where
    U: DeserializeOwned
[src]

Try to deserialize the JSON as a custom type.

impl<T> Raw<T> where
    T: DeserializeOwned
[src]

pub fn deserialize(&self) -> Result<T>[src]

Try to deserialize the JSON as the expected type.

Trait Implementations

impl<T> Clone for Raw<T>[src]

fn clone(&self) -> Self[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl<T> Debug for Raw<T>[src]

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

Formats the value using the given formatter. Read more

impl<'de, T> Deserialize<'de> for Raw<T>[src]

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where
    D: Deserializer<'de>, 
[src]

Deserialize this value from the given Serde deserializer. Read more

impl<T: Serialize> From<&'_ T> for Raw<T>[src]

fn from(val: &T) -> Self[src]

Performs the conversion.

impl<T: Serialize> From<T> for Raw<T>[src]

fn from(val: T) -> Self[src]

Performs the conversion.

impl<T> Serialize for Raw<T>[src]

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
    S: Serializer
[src]

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

impl<T> RefUnwindSafe for Raw<T> where
    T: RefUnwindSafe

impl<T> Send for Raw<T> where
    T: Send

impl<T> Sync for Raw<T> where
    T: Sync

impl<T> Unpin for Raw<T> where
    T: Unpin

impl<T> UnwindSafe for Raw<T> where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

pub fn to_owned(&self) -> T[src]

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

pub fn clone_into(&self, target: &mut T)[src]

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

recently added

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

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

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

Performs the conversion.

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