From a83fab147aae41f2d219a74e659e6ee3b085aa1a Mon Sep 17 00:00:00 2001 From: Martin Klotz Date: Wed, 17 Dec 2025 11:34:16 +0100 Subject: [PATCH 1/8] derive `Facet` for `UpdateEvent` --- core/src/graph/update.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/graph/update.rs b/core/src/graph/update.rs index 9eb365a46..51631e1bf 100644 --- a/core/src/graph/update.rs +++ b/core/src/graph/update.rs @@ -7,6 +7,7 @@ use std::sync::Mutex; use crate::errors::{GraphAnnisCoreError, Result}; use crate::serializer::KeySerializer; use bincode::Options; +use facet::Facet; use serde::de::Error as DeserializeError; use serde::de::{MapAccess, Visitor}; use serde::ser::{Error as SerializeError, SerializeMap}; @@ -15,7 +16,8 @@ use sstable::{SSIterator, Table, TableBuilder, TableIterator}; use tempfile::NamedTempFile; /// Describes a single update on the graph. -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +#[derive(Serialize, Deserialize, Clone, Debug, Facet, PartialEq)] +#[repr(u8)] pub enum UpdateEvent { /// Add a node with a name and type. AddNode { From 13d556a8493c20e586c2a7dd62c28c6c3eb5757f Mon Sep 17 00:00:00 2001 From: Martin Klotz Date: Wed, 17 Dec 2025 12:12:44 +0100 Subject: [PATCH 2/8] introduce dependency on time --- graphannis/Cargo.toml | 1 + webservice/Cargo.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/graphannis/Cargo.toml b/graphannis/Cargo.toml index 7c4bcdc28..447695471 100644 --- a/graphannis/Cargo.toml +++ b/graphannis/Cargo.toml @@ -50,6 +50,7 @@ strum_macros = "0.21" sys-info = "0.9" tempfile = "3" thiserror = "1" +time = "0.3.44" toml = "0.8" transient-btree-index = "0.5" zip = "0.6.4" diff --git a/webservice/Cargo.toml b/webservice/Cargo.toml index 72b1d4e5f..f4c03634f 100644 --- a/webservice/Cargo.toml +++ b/webservice/Cargo.toml @@ -34,6 +34,7 @@ serde_derive = "1.0" simplelog = "0.12" tempfile = "3" thiserror = "1" +time = "0.3.44" uuid = { version = "0.8", features = ["v4"] } walkdir = "2" zip = "0.6.4" From 831cf237fad9857c0a92f0fb7ced20477a078e6c Mon Sep 17 00:00:00 2001 From: Martin Klotz Date: Wed, 17 Dec 2025 12:34:04 +0100 Subject: [PATCH 3/8] remove bare unwrap --- graphannis/src/annis/db/corpusstorage.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphannis/src/annis/db/corpusstorage.rs b/graphannis/src/annis/db/corpusstorage.rs index c069ddf53..df302d9b6 100644 --- a/graphannis/src/annis/db/corpusstorage.rs +++ b/graphannis/src/annis/db/corpusstorage.rs @@ -2726,7 +2726,7 @@ fn extract_subgraph_by_query( ) -> Result { let t_before = std::time::SystemTime::now(); // acquire read-only lock and create query that finds the context nodes - let lock = db_entry.read().unwrap(); + let lock = db_entry.read()?; let orig_db = get_read_or_error(&lock)?; let plan = ExecutionPlan::from_disjunction(query, orig_db, query_config, timeout)?; From d5b2002da946a3ab9d7275b198f9ce4d2c9929dc Mon Sep 17 00:00:00 2001 From: Martin Klotz Date: Wed, 17 Dec 2025 12:40:57 +0100 Subject: [PATCH 4/8] extend clippy allowances for generated code --- graphannis/src/annis/db/aql/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphannis/src/annis/db/aql/mod.rs b/graphannis/src/annis/db/aql/mod.rs index 15adefd47..0385d33ac 100644 --- a/graphannis/src/annis/db/aql/mod.rs +++ b/graphannis/src/annis/db/aql/mod.rs @@ -8,7 +8,7 @@ use boolean_expression::Expr; use graphannis_core::annostorage::MatchGroup; use itertools::Itertools; lalrpop_mod!( - #[allow(clippy::all)] + #[allow(clippy::all, clippy::pedantic, clippy::restriction, clippy::nursery)] #[allow(clippy::panic)] parser, "/annis/db/aql/parser.rs" From 727e164bb8e017001565891cc105a5b0b6b5cc5a Mon Sep 17 00:00:00 2001 From: Martin Klotz Date: Wed, 17 Dec 2025 12:46:47 +0100 Subject: [PATCH 5/8] update --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 378f8a0a8..0412c2325 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Added [Facet](https://facet.rs/) support to `UpdateEvent` + ## [4.0.1] - 2025-10-09 ### Fixed From 2717096c8371303486d0d8f10f192db67474978f Mon Sep 17 00:00:00 2001 From: Martin Klotz Date: Wed, 17 Dec 2025 13:46:40 +0100 Subject: [PATCH 6/8] update tests --- cli/tests/cli.rs | 54 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/cli/tests/cli.rs b/cli/tests/cli.rs index 7f70f0c4d..fd482402a 100644 --- a/cli/tests/cli.rs +++ b/cli/tests/cli.rs @@ -1,8 +1,9 @@ +use assert_cmd::cargo; use assert_cmd::prelude::*; use insta::Settings; -use insta_cmd::assert_cmd_snapshot; +use insta::assert_snapshot; use serial_test::serial; -use std::{path::Path, process::Command}; +use std::path::Path; fn standard_filter() -> Settings { let mut settings = insta::Settings::clone_current(); @@ -19,10 +20,29 @@ fn standard_filter() -> Settings { settings } +fn mimic_insta_snapshot( + output: std::process::Output, +) -> Result> { + let success = output.status.success(); + let exit_code = output.status.code().unwrap(); + let stdout = str::from_utf8(&output.stdout)?; + let stderr = str::from_utf8(&output.stderr)?; + Ok(format!( + r#" +success: {success} +exit_code: {exit_code} +----- stdout ----- +{stdout} +----- stderr ----- +{stderr} + "# + )) +} + #[test] #[serial] fn show_corpus_info() -> Result<(), Box> { - let mut cmd = Command::cargo_bin("annis")?; + let mut cmd = cargo::cargo_bin_cmd!("annis"); cmd.arg("../graphannis/tests/data/") .arg("-c") @@ -32,8 +52,10 @@ fn show_corpus_info() -> Result<(), Box> { .arg("-c") .arg("info"); + let output = cmd.output().unwrap(); + let actual = mimic_insta_snapshot(output)?; let settings = standard_filter(); - settings.bind(|| assert_cmd_snapshot!(cmd)); + settings.bind(|| assert_snapshot!(actual)); Ok(()) } @@ -41,12 +63,14 @@ fn show_corpus_info() -> Result<(), Box> { #[test] #[serial] fn list_corpora_not_loaded() -> Result<(), Box> { - let mut cmd = Command::cargo_bin("annis")?; + let mut cmd = cargo::cargo_bin_cmd!("annis"); cmd.arg("../graphannis/tests/data/").arg("-c").arg("list"); + let output = cmd.output().unwrap(); + let actual = mimic_insta_snapshot(output)?; let settings = standard_filter(); - settings.bind(|| assert_cmd_snapshot!(cmd)); + settings.bind(|| assert_snapshot!(actual)); Ok(()) } @@ -54,7 +78,7 @@ fn list_corpora_not_loaded() -> Result<(), Box> { #[test] #[serial] fn list_corpora_fully_loaded() -> Result<(), Box> { - let mut cmd = Command::cargo_bin("annis")?; + let mut cmd = cargo::cargo_bin_cmd!("annis"); cmd.arg("../graphannis/tests/data/") .arg("-c") @@ -64,8 +88,10 @@ fn list_corpora_fully_loaded() -> Result<(), Box> { .arg("-c") .arg("list"); + let output = cmd.output().unwrap(); + let actual = mimic_insta_snapshot(output)?; let settings = standard_filter(); - settings.bind(|| assert_cmd_snapshot!(cmd)); + settings.bind(|| assert_snapshot!(actual)); Ok(()) } @@ -73,7 +99,7 @@ fn list_corpora_fully_loaded() -> Result<(), Box> { #[test] #[serial] fn list_corpora_partially_loaded() -> Result<(), Box> { - let mut cmd = Command::cargo_bin("annis")?; + let mut cmd = cargo::cargo_bin_cmd!("annis"); cmd.arg("../graphannis/tests/data/") .arg("-c") @@ -83,8 +109,10 @@ fn list_corpora_partially_loaded() -> Result<(), Box> { .arg("-c") .arg("list"); + let output = cmd.output().unwrap(); + let actual = mimic_insta_snapshot(output)?; let settings = standard_filter(); - settings.bind(|| assert_cmd_snapshot!(cmd)); + settings.bind(|| assert_snapshot!(actual)); Ok(()) } @@ -92,7 +120,7 @@ fn list_corpora_partially_loaded() -> Result<(), Box> { #[test] #[serial] fn export_to_zip_file() -> Result<(), Box> { - let mut cmd = Command::cargo_bin("annis")?; + let mut cmd = cargo::cargo_bin_cmd!("annis"); cmd.arg("../graphannis/tests/data/") .arg("-c") @@ -100,8 +128,10 @@ fn export_to_zip_file() -> Result<(), Box> { .arg("-c") .arg("export sample-disk-based-3.3.zip"); + let output = cmd.output().unwrap(); + let actual = mimic_insta_snapshot(output)?; let settings = standard_filter(); - settings.bind(|| assert_cmd_snapshot!(cmd)); + settings.bind(|| assert_snapshot!(actual)); // Check that the file has been created let p = Path::new("sample-disk-based-3.3.zip"); From a57116ec48cfa3055359db9aa7c0fb9f45bb8633 Mon Sep 17 00:00:00 2001 From: Martin Klotz Date: Wed, 17 Dec 2025 13:46:51 +0100 Subject: [PATCH 7/8] bump assert_cmd to 2.1 --- cli/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 193317ec1..2ae551fa8 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -26,7 +26,7 @@ toml = "0.5" tikv-jemallocator = "0.5" [dev-dependencies] -assert_cmd = "2.0.12" +assert_cmd = "2.1" insta = { version = "1.34.0", features = ["filters"] } insta-cmd = "0.5" serial_test = "2" From d6ae21abfa805070215bb2722c9fd80672367d0a Mon Sep 17 00:00:00 2001 From: Martin Klotz Date: Wed, 17 Dec 2025 13:56:19 +0100 Subject: [PATCH 8/8] removed unused import --- cli/tests/cli.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/cli/tests/cli.rs b/cli/tests/cli.rs index fd482402a..1255f7e89 100644 --- a/cli/tests/cli.rs +++ b/cli/tests/cli.rs @@ -1,5 +1,4 @@ use assert_cmd::cargo; -use assert_cmd::prelude::*; use insta::Settings; use insta::assert_snapshot; use serial_test::serial;