use roomrs::{LiveQuery, dao, database, entity};
use std::time::Duration;
fn init_tracing() {
tracing_log::LogTracer::init().expect("LogTracer 초기화 실패");
let subscriber = tracing_subscriber::fmt()
.with_env_filter(tracing_subscriber::EnvFilter::new("debug"))
.finish();
tracing::subscriber::set_global_default(subscriber).expect("tracing 구독자 설치 실패");
}
#[entity(table = "todos")]
#[derive(Debug, Clone)]
struct Todo {
#[pk(autoincrement)]
id: i64,
title: String,
done: bool,
}
#[dao]
trait TodoDao {
#[insert]
fn add(&self, t: &Todo) -> roomrs::Result<i64>;
#[query("SELECT COUNT(*) FROM todos")]
fn watch_count(&self) -> LiveQuery<i64>;
}
#[database(entities(Todo), daos(TodoDao), version = 1)]
struct Db;
fn main() -> roomrs::Result<()> {
init_tracing();
let db = Db::builder().in_memory().build()?;
let h = db.run_sync();
let live = h.todo_dao().watch_count();
let _guard = live.subscribe(|n| println!("현재 todo 개수: {n}"));
for i in 0..3 {
h.todo_dao().add(&Todo {
id: 0,
title: format!("작업 {i}"),
done: false,
})?;
std::thread::sleep(Duration::from_millis(100));
}
std::thread::sleep(Duration::from_millis(300));
Ok(())
}