From b5fb382ac09afff54d50be338cb23d914630a19b Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Mon, 9 Feb 2026 13:15:47 +0300 Subject: [PATCH] various: fix trailing commas and import ordering Signed-off-by: NotAShelf Change-Id: Ia48ceb56b9b1ce50ee01ff38d14f740c6a6a6964 --- crates/pinakes-core/src/config.rs | 23 +++++++------ crates/pinakes-plugin-api/tests/api.rs | 45 ++++++++++++++++++-------- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/crates/pinakes-core/src/config.rs b/crates/pinakes-core/src/config.rs index d6af052..4f30045 100644 --- a/crates/pinakes-core/src/config.rs +++ b/crates/pinakes-core/src/config.rs @@ -964,16 +964,19 @@ impl Config { /// Ensure all directories needed by this config exist and are writable. pub fn ensure_dirs(&self) -> crate::error::Result<()> { - if let Some(ref sqlite) = self.storage.sqlite - && let Some(parent) = sqlite.path.parent() - { - std::fs::create_dir_all(parent)?; - let metadata = std::fs::metadata(parent)?; - if metadata.permissions().readonly() { - return Err(crate::error::PinakesError::Config(format!( - "directory is not writable: {}", - parent.display() - ))); + if let Some(ref sqlite) = self.storage.sqlite { + if let Some(parent) = sqlite.path.parent() { + // Skip if parent is empty string (happens with bare filenames like "pinakes.db") + if !parent.as_os_str().is_empty() { + std::fs::create_dir_all(parent)?; + let metadata = std::fs::metadata(parent)?; + if metadata.permissions().readonly() { + return Err(crate::error::PinakesError::Config(format!( + "directory is not writable: {}", + parent.display() + ))); + } + } } } Ok(()) diff --git a/crates/pinakes-plugin-api/tests/api.rs b/crates/pinakes-plugin-api/tests/api.rs index a1d8460..1ff4289 100644 --- a/crates/pinakes-plugin-api/tests/api.rs +++ b/crates/pinakes-plugin-api/tests/api.rs @@ -1,14 +1,13 @@ -use pinakes_plugin_api::{ - Capabilities, EnvironmentCapability, Event, EventType, - ExtractedMetadata, FilesystemCapability, HealthStatus, - MediaTypeDefinition, NetworkCapability, Plugin, PluginContext, - PluginError, PluginMetadata, PluginResult, SearchIndexItem, SearchQuery, - SearchResult, SearchStats, ThumbnailFormat, ThumbnailInfo, ThumbnailOptions, -}; +use async_trait::async_trait; use pinakes_plugin_api::wasm::{HttpRequest, HttpResponse, LogLevel, LogMessage}; +use pinakes_plugin_api::{ + Capabilities, EnvironmentCapability, Event, EventType, ExtractedMetadata, FilesystemCapability, + HealthStatus, MediaTypeDefinition, NetworkCapability, Plugin, PluginContext, PluginError, + PluginMetadata, PluginResult, SearchIndexItem, SearchQuery, SearchResult, SearchStats, + ThumbnailFormat, ThumbnailInfo, ThumbnailOptions, +}; use std::collections::HashMap; use std::path::PathBuf; -use async_trait::async_trait; struct TestPlugin { initialized: bool, @@ -90,7 +89,10 @@ async fn test_plugin_context_creation() { assert_eq!(context.data_dir, PathBuf::from("/data/test-plugin")); assert_eq!(context.cache_dir, PathBuf::from("/cache/test-plugin")); - assert_eq!(context.config.get("enabled").unwrap(), &serde_json::json!(true)); + assert_eq!( + context.config.get("enabled").unwrap(), + &serde_json::json!(true) + ); assert!(context.capabilities.network.enabled); assert_eq!( context.capabilities.max_memory_bytes, @@ -235,7 +237,11 @@ async fn test_thumbnail_options_serialization() { #[tokio::test] async fn test_thumbnail_format_variants() { - for format in [ThumbnailFormat::Jpeg, ThumbnailFormat::Png, ThumbnailFormat::WebP] { + for format in [ + ThumbnailFormat::Jpeg, + ThumbnailFormat::Png, + ThumbnailFormat::WebP, + ] { let options = ThumbnailOptions { width: 100, height: 100, @@ -377,7 +383,13 @@ async fn test_log_message_serialization() { #[tokio::test] async fn test_log_level_variants() { - let levels = [LogLevel::Trace, LogLevel::Debug, LogLevel::Info, LogLevel::Warn, LogLevel::Error]; + let levels = [ + LogLevel::Trace, + LogLevel::Debug, + LogLevel::Info, + LogLevel::Warn, + LogLevel::Error, + ]; for level in levels { let serialized = serde_json::to_string(&level).unwrap(); @@ -414,7 +426,11 @@ async fn test_search_index_item_serialization() { title: Some("Summer Vacation".to_string()), description: Some("Photos from summer vacation 2023".to_string()), content: None, - tags: vec!["vacation".to_string(), "summer".to_string(), "photos".to_string()], + tags: vec![ + "vacation".to_string(), + "summer".to_string(), + "photos".to_string(), + ], media_type: "image/jpeg".to_string(), metadata: HashMap::from([ ("camera".to_string(), serde_json::json!("Canon EOS R5")), @@ -449,7 +465,10 @@ async fn test_health_status_variants() { metrics: HashMap::new(), }; assert!(!unhealthy.healthy); - assert_eq!(unhealthy.message, Some("Database connection failed".to_string())); + assert_eq!( + unhealthy.message, + Some("Database connection failed".to_string()) + ); } #[tokio::test]