at protocol indexer with flexible filtering, xrpc queries, and a cursor-backed event stream, built on fjall
at-protocol
atproto
indexer
rust
fjall
1use std::sync::atomic::AtomicI64;
2
3use miette::Result;
4use tokio::sync::Notify;
5
6use crate::{
7 config::Config,
8 db::Db,
9 filter::{FilterHandle, new_handle},
10 resolver::Resolver,
11};
12
13pub struct AppState {
14 pub db: Db,
15 pub resolver: Resolver,
16 pub filter: FilterHandle,
17 pub cur_firehose: AtomicI64,
18 pub backfill_notify: Notify,
19}
20
21impl AppState {
22 pub fn new(config: &Config) -> Result<Self> {
23 let db = Db::open(config)?;
24 let resolver = Resolver::new(config.plc_urls.clone(), config.identity_cache_size);
25 let filter_config = crate::db::filter::load(&db.filter)?;
26 let filter = new_handle(filter_config);
27
28 Ok(Self {
29 db,
30 resolver,
31 filter,
32 cur_firehose: AtomicI64::new(0),
33 backfill_notify: Notify::new(),
34 })
35 }
36
37 pub fn notify_backfill(&self) {
38 self.backfill_notify.notify_one();
39 }
40}