atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git

Blame: crates/matrix-sdk-search/README.md

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
# `matrix-sdk-search`
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
This crate implements a searchable index for messages in a Matrix client.
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
## Usage
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
The recommended way to use this crate is to include `matrix-sdk` as a dependency
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
in your `Cargo.toml` file with the `experimental-search` feature flag turned on.
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
## Stand-alone usage
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
Constructing a `matrix_sdk_search::index::RoomIndex` is done with the
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
`matrix_sdk_search::index::builder::RoomIndexBuilder`.
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
```rust
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
use std::path::PathBuf;
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
use matrix_sdk_search::{
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
    error::IndexError,
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
    index::{
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
        RoomIndex,
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
        builder::RoomIndexBuilder,
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
    },
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
};
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
use ruma::RoomId;
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
fn create_index(path: PathBuf, room_id: &RoomId) -> Result<RoomIndex, IndexError> {
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
    RoomIndexBuilder::new_on_disk(path, room_id).unencrypted().build()
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
```
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
The search crate accepts index operations through
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
`matrix_sdk_search::index::RoomIndex::execute()` which takes a
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
`matrix_sdk_search::index::RoomIndexOperation`.
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
```rust
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
use matrix_sdk_search::index::{
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
    RoomIndex, RoomIndexOperation,
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
    builder::RoomIndexBuilder
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
};
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
use ruma::events::room::message::OriginalSyncRoomMessageEvent;
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
async fn add_event(index: &mut RoomIndex, event: OriginalSyncRoomMessageEvent) {
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
    index.execute(RoomIndexOperation::Add(event));
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
```
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
Some method(s) for creating these operations will need to be implemented. There
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
is an example of handling `ruma::events::AnySyncTimelineEvents` in
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
`matrix-sdk::search_index`.