Enum imessage_database::util::typedstream::models::Archivable

source ·
pub enum Archivable {
    Object(Class, Vec<OutputData>),
    Data(Vec<OutputData>),
    Class(Class),
    Placeholder,
    Type(Vec<Type>),
}
Expand description

Types of data that can be archived into the typedstream

Variants§

§

Object(Class, Vec<OutputData>)

An instance of a class that may contain some embedded data. typedstream data doesn’t include property names, so data is stored in order of appearance.

§

Data(Vec<OutputData>)

Some data that is likely a property on the object described by the typedstream but not part of a class.

§

Class(Class)

A class referenced in the typedstream, usually part of an inheritance heirarchy that does not contain any data itself.

§

Placeholder

A placeholder, only used when reserving a spot in the objects table for a reference to be filled with read class information. In a typedstream, the classes are stored in order of inheritance, so the top-level class described by the typedstream comes before the ones it inherits from. To preserve the order, we reserve the first slot to store the actual object’s data and then later add it back to the right place.

§

Type(Vec<Type>)

A type that made it through the parsing process without getting replaced by an object.``

Implementations§

source§

impl Archivable

source

pub fn deserialize_as_nsstring(&self) -> Option<&str>

If self is an Object that contains a Class named NSString or NSMutableString, extract a Rust string slice from the associated Data.

§Example
use imessage_database::util::typedstream::models::{Archivable, Class, OutputData};

let nsstring = Archivable::Object(
    Class {
        name: "NSString".to_string(),
        version: 1
    },
    vec![OutputData::String("Hello world".to_string())]
);
println!("{:?}", nsstring.deserialize_as_nsstring()); // Some("Hello world")
 
let not_nsstring = Archivable::Object(
    Class {
        name: "NSNumber".to_string(),
        version: 1
    },
    vec![OutputData::SignedInteger(100)]
);
println!("{:?}", not_nsstring.deserialize_as_nsstring()); // None

Trait Implementations§

source§

impl Clone for Archivable

source§

fn clone(&self) -> Archivable

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Archivable

source§

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

Formats the value using the given formatter. Read more
source§

impl PartialEq for Archivable

source§

fn eq(&self, other: &Archivable) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for Archivable

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

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

Performs the conversion.