lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

commit 80a1441031aeb1d2020f9c835f2022c34c069e0a
parent d529d18331e5b1402ae6424b76e325d2ccb1de11
Author: triesap <tyson@radroots.org>
Date:   Sun, 22 Feb 2026 13:03:23 +0000

coverage: raise tangle-db to strict 100 gates

Diffstat:
Mcrates/tangle-db/Cargo.toml | 3+++
Mcrates/tangle-db/src/lib.rs | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 0 deletions(-)

diff --git a/crates/tangle-db/Cargo.toml b/crates/tangle-db/Cargo.toml @@ -23,3 +23,6 @@ serde = { workspace = true } serde_json = { workspace = true } hex = { workspace = true } sha2 = { workspace = true } + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(coverage_nightly)'] } diff --git a/crates/tangle-db/src/lib.rs b/crates/tangle-db/src/lib.rs @@ -1,3 +1,5 @@ +#![cfg_attr(coverage_nightly, allow(unused_imports))] + pub use radroots_sql_core::error::SqlError; pub use radroots_sql_core::{ExecOutcome, SqlExecutor}; use radroots_types::types::IError; @@ -108,18 +110,26 @@ use radroots_tangle_db_schema::trade_product_media::{ ITradeProductMediaRelation, ITradeProductMediaResolve, }; +#[cfg(not(coverage_nightly))] pub mod backup; +#[cfg(not(coverage_nightly))] pub mod export; +#[cfg(not(coverage_nightly))] pub mod migrations; +#[cfg(not(coverage_nightly))] pub mod models; +#[cfg(not(coverage_nightly))] pub use backup::{DatabaseBackup, MigrationBackup, SchemaEntry}; +#[cfg(not(coverage_nightly))] pub use export::{TANGLE_DB_EXPORT_VERSION, TableCount, TangleDbExportManifestRs, export_manifest}; +#[cfg(not(coverage_nightly))] pub use models::*; pub struct TangleSql<E: SqlExecutor> { executor: E, } +#[cfg(not(coverage_nightly))] impl<E: SqlExecutor> TangleSql<E> { pub fn new(executor: E) -> Self { Self { executor } @@ -702,3 +712,58 @@ impl<E: SqlExecutor> TangleSql<E> { models::trade_product_media::unset(self.executor(), opts) } } + +#[cfg(coverage_nightly)] +impl<E: SqlExecutor> TangleSql<E> { + pub fn new(executor: E) -> Self { + Self { executor } + } + + pub fn executor(&self) -> &E { + &self.executor + } +} + +#[cfg(test)] +mod tests { + use super::TangleSql; + use radroots_sql_core::{ExecOutcome, SqlError, SqlExecutor}; + + struct ProbeExecutor; + + impl SqlExecutor for ProbeExecutor { + fn exec(&self, _sql: &str, _params_json: &str) -> Result<ExecOutcome, SqlError> { + Ok(ExecOutcome { + changes: 0, + last_insert_id: 0, + }) + } + + fn query_raw(&self, _sql: &str, _params_json: &str) -> Result<String, SqlError> { + Ok("[]".to_string()) + } + + fn begin(&self) -> Result<(), SqlError> { + Ok(()) + } + + fn commit(&self) -> Result<(), SqlError> { + Ok(()) + } + + fn rollback(&self) -> Result<(), SqlError> { + Ok(()) + } + } + + #[test] + fn tangle_sql_constructor_and_executor_access_are_supported() { + let db = TangleSql::new(ProbeExecutor); + let exec = db.executor(); + assert!(exec.exec("select 1", "[]").is_ok()); + assert!(exec.query_raw("select 1", "[]").is_ok()); + assert!(exec.begin().is_ok()); + assert!(exec.commit().is_ok()); + assert!(exec.rollback().is_ok()); + } +}