Struct crackle_lib::Raw
[−]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
impl<T> Raw<T>
impl<T> Raw<T>
pub fn get_field<'a, U>(&'a self, field_name: &str) -> Result<Option<U>, Error> where
U: Deserialize<'a>,
pub fn get_field<'a, U>(&'a self, field_name: &str) -> Result<Option<U>, Error> 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>()?;
// ...
}
pub fn deserialize<'a>(&'a self) -> Result<T, Error> where
T: Deserialize<'a>,
pub fn deserialize<'a>(&'a self) -> Result<T, Error> where
T: Deserialize<'a>,
Try to deserialize the JSON as the expected type.
pub fn deserialize_as<'a, U>(&'a self) -> Result<U, Error> where
U: Deserialize<'a>,
pub fn deserialize_as<'a, U>(&'a self) -> Result<U, Error> where
U: Deserialize<'a>,
Try to deserialize the JSON as a custom type.
Trait Implementations
impl<'de, T> Deserialize<'de> for Raw<T>
impl<'de, T> Deserialize<'de> for Raw<T>
fn deserialize<D>(
deserializer: D
) -> Result<Raw<T>, <D as Deserializer<'de>>::Error> where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D
) -> Result<Raw<T>, <D as Deserializer<'de>>::Error> where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl<T> RawExt<T> for Raw<T> where
T: EventContent,
impl<T> RawExt<T> for Raw<T> where
T: EventContent,
fn deserialize_content(&self, event_type: &str) -> Result<T, Error>
fn deserialize_content(&self, event_type: &str) -> Result<T, Error>
Try to deserialize the JSON as an event’s content.
impl<T> Serialize for Raw<T>
impl<T> Serialize for Raw<T>
fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error> where
S: Serializer,
fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error> where
S: Serializer,
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
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more