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 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 AnyTimelineEvent
Implementations§
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::<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
U: Deserialize<'a>,
Available on crate feature events
only.
pub fn deserialize_as<'a, U>(&'a self) -> Result<U, Error>where
U: Deserialize<'a>,
events
only.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<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>,
source§impl<T> RawExt<T> for Raw<T>
impl<T> RawExt<T> for Raw<T>
source§fn deserialize_with_type(
&self,
event_type: <T as EventContent>::EventType,
) -> Result<T, Error>
fn deserialize_with_type( &self, event_type: <T as EventContent>::EventType, ) -> Result<T, Error>
source§impl<T> Serialize for Raw<T>
impl<T> Serialize for Raw<T>
source§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,
Auto Trait Implementations§
impl<T> Freeze for Raw<T>
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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more