From 558cd75c2b0ffb303c3df89b7c7e3d88da65f1e6 Mon Sep 17 00:00:00 2001 From: InnocentusLime Date: Sun, 12 Oct 2025 20:13:57 +0300 Subject: [PATCH] feat(env_filter): implement Clone for Filter One of possible use-cases for Filter would be using it as a CLI argument, so the user can configure the logger without setting any environment variables. Right now it isn't possible to use Filter as a CLI argument in clap, because clap requires all CLI arguments to implement Clone. --- crates/env_filter/src/directive.rs | 2 +- crates/env_filter/src/filter.rs | 1 + crates/env_filter/src/op.rs | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/env_filter/src/directive.rs b/crates/env_filter/src/directive.rs index 3721ef7..c24fef2 100644 --- a/crates/env_filter/src/directive.rs +++ b/crates/env_filter/src/directive.rs @@ -1,7 +1,7 @@ use log::Level; use log::LevelFilter; -#[derive(Debug)] +#[derive(Debug, Clone)] pub(crate) struct Directive { pub(crate) name: Option, pub(crate) level: LevelFilter, diff --git a/crates/env_filter/src/filter.rs b/crates/env_filter/src/filter.rs index fa28ebd..60bcf7a 100644 --- a/crates/env_filter/src/filter.rs +++ b/crates/env_filter/src/filter.rs @@ -192,6 +192,7 @@ impl fmt::Debug for Builder { /// Use the [`Builder`] type to parse and construct a `Filter`. /// /// [`Builder`]: struct.Builder.html +#[derive(Clone)] pub struct Filter { directives: Vec, filter: Option, diff --git a/crates/env_filter/src/op.rs b/crates/env_filter/src/op.rs index fc10f7d..bfc6a5c 100644 --- a/crates/env_filter/src/op.rs +++ b/crates/env_filter/src/op.rs @@ -1,6 +1,6 @@ use std::fmt; -#[derive(Debug)] +#[derive(Debug, Clone)] pub(crate) struct FilterOp { #[cfg(feature = "regex")] inner: regex::Regex,