Expand description

imessage-database

This library represents interfaces used to interact with the iMessage Database.

Installation

This library is available on crates.io.

Documentation

Documentation is available on docs.rs.

Example

use imessage_database::{
    error::table::TableError,
    tables::{
        messages::Message,
        table::{get_connection, Table},
    },
    util::dirs::default_db_path,
};

fn iter_messages() -> Result<(), TableError> {
    /// Create a read-only connection to the iMessage database
    let db = get_connection(&default_db_path());

    /// Create SQL statement
    let mut statement = Message::get(&db);

    /// Execute statement
    let messages = statement
        .query_map([], |row| Ok(Message::from_row(row)))
        .unwrap();

    /// Iterate over each row
    for message in messages {
        let mut msg = Message::extract(message)?;

        /// Parse message body if it was sent from MacOS 13.0 or newer
        msg.gen_text(&db);

        /// Emit debug info for each message
        println!("{:?}", msg)
    }

    Ok(())
}

Modules

This module contains types of errors that can happen when parsing iMessage data
iMessages can represent different kinds of data. This module defines types for those data.
Representations of iMessage database tables as structs.
This module defines common utilities used across table queries.