pub struct Raw<T> { /* private fields */ }Expand description
A wrapper around Box<RawValue> with a generic parameter for the expected Rust type.
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 structs and enums representing event types implement Deserialize, therefore they can be
used with Raw. Since Raw does not change the JSON string, it 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 AnyTimelineEventImplementations§
Source§impl<T> Raw<T>
impl<T> Raw<T>
Sourcepub fn new(val: &T) -> Result<Raw<T>, Error>where
T: Serialize,
Available on crate feature events only.
pub fn new(val: &T) -> Result<Raw<T>, Error>where
T: Serialize,
events only.Sourcepub fn from_json(json: Box<RawValue>) -> Raw<T>
Available on crate feature events only.
pub fn from_json(json: Box<RawValue>) -> Raw<T>
events only.Create a Raw from a boxed RawValue.
Sourcepub fn from_json_string(json: String) -> Result<Raw<T>, Error>
Available on crate feature events only.
pub fn from_json_string(json: String) -> Result<Raw<T>, Error>
events only.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.
Sourcepub fn json(&self) -> &RawValue
Available on crate feature events only.
pub fn json(&self) -> &RawValue
events only.Access the underlying json value.
Sourcepub fn into_json(self) -> Box<RawValue>
Available on crate feature events only.
pub fn into_json(self) -> Box<RawValue>
events only.Convert self into the underlying json value.
Sourcepub fn get_field<'a, U>(&'a self, field_name: &str) -> Result<Option<U>, Error>where
U: Deserialize<'a>,
Available on crate feature events only.
pub fn get_field<'a, U>(&'a self, field_name: &str) -> Result<Option<U>, Error>where
U: Deserialize<'a>,
events only.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_unchecked::<CustomMatrixEvent>()?;
// ...
}Sourcepub fn deserialize<'a>(&'a self) -> Result<T, Error>where
T: Deserialize<'a>,
Available on crate feature events only.
pub fn deserialize<'a>(&'a self) -> Result<T, Error>where
T: Deserialize<'a>,
events only.Try to deserialize the JSON as the expected type.
Sourcepub fn deserialize_as<'a, U>(&'a self) -> Result<U, Error>where
T: JsonCastable<U>,
U: Deserialize<'a>,
Available on crate feature events only.
pub fn deserialize_as<'a, U>(&'a self) -> Result<U, Error>where
T: JsonCastable<U>,
U: Deserialize<'a>,
events only.Try to deserialize the JSON as a custom type.
Sourcepub fn deserialize_as_unchecked<'a, U>(&'a self) -> Result<U, Error>where
U: Deserialize<'a>,
Available on crate feature events only.
pub fn deserialize_as_unchecked<'a, U>(&'a self) -> Result<U, Error>where
U: Deserialize<'a>,
events only.Same as deserialize_as, but without the trait restriction.
Sourcepub fn cast<U>(self) -> Raw<U>where
T: JsonCastable<U>,
Available on crate feature events only.
pub fn cast<U>(self) -> Raw<U>where
T: JsonCastable<U>,
events only.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.
Sourcepub fn cast_ref<U>(&self) -> &Raw<U>where
T: JsonCastable<U>,
Available on crate feature events only.
pub fn cast_ref<U>(&self) -> &Raw<U>where
T: JsonCastable<U>,
events only.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.
Sourcepub fn cast_unchecked<U>(self) -> Raw<U>
Available on crate feature events only.
pub fn cast_unchecked<U>(self) -> Raw<U>
events only.Same as cast, but without the trait restriction.
Sourcepub fn cast_ref_unchecked<U>(&self) -> &Raw<U>
Available on crate feature events only.
pub fn cast_ref_unchecked<U>(&self) -> &Raw<U>
events only.Same as cast_ref, but without the trait restriction.