Enum 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 as_nsstring(&self) -> Option<&str>

If self is an Object that contains a Class named NSString or NSMutableString, extract a &str 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.as_nsstring()); // Some("Hello world")

let not_nsstring = Archivable::Object(
    Class {
        name: "NSNumber".to_string(),
        version: 1
    },
    vec![OutputData::SignedInteger(100)]
);
println!("{:?}", not_nsstring.as_nsstring()); // None
Source

pub fn as_nsnumber_int(&self) -> Option<&i64>

If self is an Object that contains a Class named NSNumber pointing to a SignedInteger, extract an i64 from the Data.

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

let nsnumber = Archivable::Object(
    Class {
        name: "NSNumber".to_string(),
        version: 1
    },
    vec![OutputData::SignedInteger(100)]
);
println!("{:?}", nsnumber.as_nsnumber_int()); // Some(100)

let not_nsnumber = Archivable::Object(
    Class {
        name: "NSString".to_string(),
        version: 1
    },
    vec![OutputData::String("Hello world".to_string())]
);
println!("{:?}", not_nsnumber.as_nsnumber_int()); // None
Source

pub fn as_nsnumber_float(&self) -> Option<&f64>

If self is an Object that contains a Class named NSNumber pointing to a Double, extract an f64 from the Data.

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

let nsnumber = Archivable::Object(
    Class {
        name: "NSNumber".to_string(),
        version: 1
    },
    vec![OutputData::Double(100.001)]
);
println!("{:?}", nsnumber.as_nsnumber_float()); // Some(100.001)

let not_nsnumber = Archivable::Object(
    Class {
        name: "NSString".to_string(),
        version: 1
    },
    vec![OutputData::String("Hello world".to_string())]
);
println!("{:?}", not_nsnumber.as_nsnumber_float()); // 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§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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

Source§

type Output = T

Should always be Self
Source§

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

Source§

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>,

Source§

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>,

Source§

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.