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 AnyTimelineEventImplementations§
source§impl<T> Raw<T>where
T: EventContentFromType,
T::EventType: Display,
impl<T> Raw<T>where
T: EventContentFromType,
T::EventType: Display,
sourcepub fn deserialize_with_type(&self, event_type: T::EventType) -> Result<T>
Available on crate feature events only.
pub fn deserialize_with_type(&self, event_type: T::EventType) -> Result<T>
events only.Try to deserialize the JSON as an event’s content with the given event type.
source§impl<T> Raw<T>
impl<T> Raw<T>
sourcepub fn from_json(json: Box<RawJsonValue>) -> Self
pub fn from_json(json: Box<RawJsonValue>) -> Self
Create a Raw from a boxed RawValue.
sourcepub fn from_json_string(json: String) -> Result<Self>
pub fn from_json_string(json: String) -> Result<Self>
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) -> &RawJsonValue
pub fn json(&self) -> &RawJsonValue
Access the underlying json value.
sourcepub fn into_json(self) -> Box<RawJsonValue>
pub fn into_json(self) -> Box<RawJsonValue>
Convert self into the underlying json value.
sourcepub fn get_field<'a, U>(&'a self, field_name: &str) -> Result<Option<U>>where
U: Deserialize<'a>,
pub fn get_field<'a, U>(&'a self, field_name: &str) -> Result<Option<U>>where
U: Deserialize<'a>,
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>()?;
// ...
}sourcepub fn deserialize<'a>(&'a self) -> Result<T>where
T: Deserialize<'a>,
pub fn deserialize<'a>(&'a self) -> Result<T>where
T: Deserialize<'a>,
Try to deserialize the JSON as the expected type.
sourcepub fn deserialize_as<'a, U>(&'a self) -> Result<U>where
U: Deserialize<'a>,
pub fn deserialize_as<'a, U>(&'a self) -> Result<U>where
U: Deserialize<'a>,
Try to deserialize the JSON as a custom type.
Trait Implementations§
source§impl<'de, T> Deserialize<'de> for Raw<T>
impl<'de, T> Deserialize<'de> for Raw<T>
source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
source§impl TryFrom<&Raw<OriginalRoomRedactionEvent>> for RedactedBecause
Available on crate features canonical-json and events only.
impl TryFrom<&Raw<OriginalRoomRedactionEvent>> for RedactedBecause
canonical-json and events only.source§impl TryFrom<&Raw<OriginalSyncRoomRedactionEvent>> for RedactedBecause
Available on crate features canonical-json and events only.
impl TryFrom<&Raw<OriginalSyncRoomRedactionEvent>> for RedactedBecause
canonical-json and events only.