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 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" diff --git a/cli/tests/cli.rs b/cli/tests/cli.rs index 7f70f0c4d..1255f7e89 100644 --- a/cli/tests/cli.rs +++ b/cli/tests/cli.rs @@ -1,8 +1,8 @@ -use assert_cmd::prelude::*; +use assert_cmd::cargo; 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 +19,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 +51,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 +62,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 +77,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 +87,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 +98,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 +108,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 +119,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 +127,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"); 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 { 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/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" 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)?; 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"