From 383cf1e98f1140097ebb35e738356a36727600dc Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Wed, 3 Sep 2025 09:26:53 -0300 Subject: [PATCH] fix: Use function pointers for filter plugin registration Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) --- src/services/filter_service.rs | 51 ++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/src/services/filter_service.rs b/src/services/filter_service.rs index a61085e..baf54bc 100644 --- a/src/services/filter_service.rs +++ b/src/services/filter_service.rs @@ -52,15 +52,48 @@ impl FilterService { pub fn get_available_filter_plugins() -> HashMap Box> { let mut plugins = HashMap::new(); - // Register all available filter plugins - plugins.insert("head_bytes".to_string(), || Box::new(crate::filter_plugin::head::HeadBytesFilter::new(0))); - plugins.insert("head_lines".to_string(), || Box::new(crate::filter_plugin::head::HeadLinesFilter::new(0))); - plugins.insert("tail_bytes".to_string(), || Box::new(crate::filter_plugin::tail::TailBytesFilter::new(0))); - plugins.insert("tail_lines".to_string(), || Box::new(crate::filter_plugin::tail::TailLinesFilter::new(0))); - plugins.insert("skip_bytes".to_string(), || Box::new(crate::filter_plugin::skip::SkipBytesFilter::new(0))); - plugins.insert("skip_lines".to_string(), || Box::new(crate::filter_plugin::skip::SkipLinesFilter::new(0))); - plugins.insert("grep".to_string(), || Box::new(crate::filter_plugin::grep::GrepFilter::new("".to_string()).unwrap())); - plugins.insert("strip_ansi".to_string(), || Box::new(crate::filter_plugin::strip_ansi::StripAnsiFilter::new())); + // Register all available filter plugins using function pointers + plugins.insert("head_bytes".to_string(), create_head_bytes_filter); + plugins.insert("head_lines".to_string(), create_head_lines_filter); + plugins.insert("tail_bytes".to_string(), create_tail_bytes_filter); + plugins.insert("tail_lines".to_string(), create_tail_lines_filter); + plugins.insert("skip_bytes".to_string(), create_skip_bytes_filter); + plugins.insert("skip_lines".to_string(), create_skip_lines_filter); + plugins.insert("grep".to_string(), create_grep_filter); + plugins.insert("strip_ansi".to_string(), create_strip_ansi_filter); plugins } + +// Helper functions to create each filter plugin +fn create_head_bytes_filter() -> Box { + Box::new(crate::filter_plugin::head::HeadBytesFilter::new(0)) +} + +fn create_head_lines_filter() -> Box { + Box::new(crate::filter_plugin::head::HeadLinesFilter::new(0)) +} + +fn create_tail_bytes_filter() -> Box { + Box::new(crate::filter_plugin::tail::TailBytesFilter::new(0)) +} + +fn create_tail_lines_filter() -> Box { + Box::new(crate::filter_plugin::tail::TailLinesFilter::new(0)) +} + +fn create_skip_bytes_filter() -> Box { + Box::new(crate::filter_plugin::skip::SkipBytesFilter::new(0)) +} + +fn create_skip_lines_filter() -> Box { + Box::new(crate::filter_plugin::skip::SkipLinesFilter::new(0)) +} + +fn create_grep_filter() -> Box { + Box::new(crate::filter_plugin::grep::GrepFilter::new("".to_string()).unwrap()) +} + +fn create_strip_ansi_filter() -> Box { + Box::new(crate::filter_plugin::strip_ansi::StripAnsiFilter::new()) +}