at protocol indexer with flexible filtering, xrpc queries, and a cursor-backed event stream, built on fjall
at-protocol atproto indexer rust fjall
at main 40 lines 937 B view raw
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}