diff --git a/Cargo.lock b/Cargo.lock index bede356..cfb03d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -78,6 +78,56 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + [[package]] name = "ascii" version = "1.1.0" @@ -441,6 +491,12 @@ dependencies = [ "unsigned-varint", ] +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + [[package]] name = "combine" version = "4.6.7" @@ -827,6 +883,29 @@ dependencies = [ "syn 2.0.109", ] +[[package]] +name = "env_filter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -1539,7 +1618,9 @@ dependencies = [ name = "index" version = "0.1.0" dependencies = [ + "env_logger", "jacquard", + "log", "sqlx", "thiserror 2.0.17", "tokio", @@ -1625,6 +1706,12 @@ dependencies = [ "serde", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + [[package]] name = "itoa" version = "1.0.15" @@ -1817,6 +1904,30 @@ dependencies = [ "webbrowser", ] +[[package]] +name = "jiff" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", +] + +[[package]] +name = "jiff-static" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", +] + [[package]] name = "jni" version = "0.21.1" @@ -2302,6 +2413,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + [[package]] name = "ouroboros" version = "0.18.5" @@ -2469,6 +2586,21 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "potential_utf" version = "0.1.4" @@ -4037,6 +4169,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "vcpkg" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index 5f85e80..90e3195 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,9 @@ version = "0.1.0" edition = "2024" [dependencies] +env_logger = "0.11.8" jacquard = "0.9.0" +log = "0.4.28" sqlx = { version = "0.8.6", features = ["runtime-tokio", "postgres"] } thiserror = "2.0.17" tokio = "1.48.0" diff --git a/src/main.rs b/src/main.rs index cd4b657..adc95f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,31 +1,21 @@ +use sqlx::{Pool, Postgres}; + mod config; mod db; -mod resolver; +mod utils; -/// backfill works as follows (https://docs.bsky.app/docs/advanced-guides/backfill) -/// -/// 1. resolve did -> pds -/// 2. stream com.atproto.sync.subscribeRepos to a buffer -/// 3. get a car file from com.atproto.sync.getRepo (diff if a rev is stored in database) -/// 4. apply car file diff to database (incl rev) -/// 5. start playing events from buffer -/// a. drop all events from other users -/// b. drop all events with a lower rev than current rev -/// c. apply event & update rev -/// d. (non blocking) get blobs if missing -/// e. (non blocking) parse for strongref and store strongrefs -/// f. (non blocking) trigger garbage collection of blobs and strongref -/// 6. once buffer is empty, parse events live #[tokio::main] -async fn main() { +async fn main() -> Result<(), ()> { + env_logger::init(); println!("User: {}", *config::USER); - let conn = db::init().await; + let conn: Pool = db::init().await; println!("Database connected and initialized"); - let pds = match resolver::resolve(&config::USER).await { + let pds = match utils::resolver::resolve(&config::USER).await { Ok(val) => val, Err(err) => panic!("{}", err), }; - println!("PDS: {}", pds); + println!("Completed sucessfully!"); + Ok(()) } diff --git a/src/utils/mod.rs b/src/utils/mod.rs new file mode 100644 index 0000000..e755804 --- /dev/null +++ b/src/utils/mod.rs @@ -0,0 +1 @@ +pub mod resolver; diff --git a/src/resolver.rs b/src/utils/resolver.rs similarity index 100% rename from src/resolver.rs rename to src/utils/resolver.rs