30 releases (19 stable)

Uses new Rust 2024

2.4.0 Feb 22, 2025
2.2.2 Dec 17, 2024
2.2.1 Nov 26, 2024
1.9.0 Jun 10, 2024
0.1.4 Dec 30, 2022

#1556 in Database interfaces

Download history 250/week @ 2024-11-29 401/week @ 2024-12-06 399/week @ 2024-12-13 203/week @ 2024-12-20 173/week @ 2024-12-27 223/week @ 2025-01-03 208/week @ 2025-01-10 220/week @ 2025-01-17 117/week @ 2025-01-24 162/week @ 2025-01-31 167/week @ 2025-02-07 135/week @ 2025-02-14 275/week @ 2025-02-21 135/week @ 2025-02-28 133/week @ 2025-03-07 108/week @ 2025-03-14

666 downloads per month
Used in imessage-exporter

GPL-3.0-or-later

1MB
16K SLoC

imessage-database

This library provides interfaces to interact with iMessage Databases.

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 an iMessage database
    let db = get_connection(&default_db_path()).unwrap();

    /// 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)?;

        /// Deserialize message body
        msg.generate_text(&db);

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

    Ok(())
}

Dependencies

~31MB
~590K SLoC