diff --git a/Cargo.lock b/Cargo.lock index 83a30c4..5ef1bd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -116,12 +116,6 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "block-buffer" version = "0.10.4" @@ -460,16 +454,6 @@ version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" -[[package]] -name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg", - "scopeguard", -] - [[package]] name = "log" version = "0.4.21" @@ -565,29 +549,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.48.5", -] - [[package]] name = "patreon-service" version = "0.1.0" @@ -596,7 +557,6 @@ dependencies = [ "axum", "hmac", "md-5", - "parking_lot", "reqwest", "serde", "serde_json", @@ -663,15 +623,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags", -] - [[package]] name = "reqwest" version = "0.12.1" @@ -786,12 +737,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "serde" version = "1.0.197" diff --git a/Cargo.toml b/Cargo.toml index f5d2eed..12d54ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ axum = "0.7" toml = "0.8" md-5 = "0.10" hmac = "0.12" -parking_lot = "0.12" anyhow = "1" subtle = "2" serde_json = "1.0.81" diff --git a/src/main.rs b/src/main.rs index 5810670..67ba9d2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -73,7 +73,7 @@ fn add_bearer<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result>, + members: std::sync::RwLock>, refresh_task: tokio::sync::mpsc::Sender<()>, reqwest: reqwest::Client, config: Config, @@ -100,12 +100,16 @@ struct FetchMember { async fn fetch_member(axum::extract::Path(payload): axum::extract::Path) -> impl axum::response::IntoResponse { let state = STATE.get().unwrap(); - axum::Json(state.members.read().get(&payload.member_id).copied()) + let members = state.members.read().expect("poison"); + + axum::Json(members.get(&payload.member_id).copied()) } async fn fetch_members() -> impl axum::response::IntoResponse { let state = STATE.get().unwrap(); - axum::Json(state.members.read().clone()) + let members = state.members.read().expect("poison"); + + axum::Json(members.clone()) } async fn refresh_members() { @@ -152,7 +156,7 @@ async fn main() -> Result<()> { STATE.set(State { config, reqwest: reqwest::Client::new(), - members: parking_lot::RwLock::new(HashMap::new()), + members: std::sync::RwLock::new(HashMap::new()), refresh_task: { let (tx, mut rx) = tokio::sync::mpsc::channel(1); @@ -228,7 +232,10 @@ async fn fill_members() -> Result { (reqwest::header::AUTHORIZATION, state.config.creator_access_token.clone()) ]); - let mut members = HashMap::with_capacity(state.members.read().len()); + let mut members = { + let members = state.members.read().expect("poison"); + HashMap::with_capacity(members.len()) + }; while let Some(cursor) = next_cursor { let mut url = url.clone(); @@ -255,7 +262,7 @@ async fn fill_members() -> Result { members.shrink_to_fit(); let len = members.len(); - *state.members.write() = members; + *state.members.write().expect("poison") = members; Ok(len) }