// SPDX-FileCopyrightText: 2022-Present Nils Andreas Svee mailto:contact@lochnair.net (github @Lochnair) // // SPDX-License-Identifier: MPL-2.0 use anyhow::anyhow; use std::sync::{Arc, RwLock, RwLockReadGuard, RwLockWriteGuard}; pub type ArcRwLock = Arc>; pub trait RwLockExt { fn read_anyhow(&self) -> anyhow::Result>; fn write_anyhow(&self) -> anyhow::Result>; } impl RwLockExt for RwLock { fn read_anyhow(&self) -> anyhow::Result> { self.read().map_err(|e| anyhow!("rwlock poisoned: {e}")) } fn write_anyhow(&self) -> anyhow::Result> { self.write().map_err(|e| anyhow!("rwlock poisoned: {e}")) } }