-
-
Notifications
You must be signed in to change notification settings - Fork 148
feat(env_filter): support no_std #404
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -9,7 +9,6 @@ keywords = ["logging", "log", "logger"] | |
| repository.workspace = true | ||
| license.workspace = true | ||
| edition.workspace = true | ||
| rust-version.workspace = true | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why does this now have no MSRV?
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This effectively raises the MSRV of |
||
| include.workspace = true | ||
|
|
||
| [package.metadata.docs.rs] | ||
|
|
@@ -26,12 +25,13 @@ pre-release-replacements = [ | |
| ] | ||
|
|
||
| [features] | ||
| default = ["regex"] | ||
| default = ["std", "regex"] | ||
| regex = ["dep:regex"] | ||
| std = ["regex/std"] | ||
|
|
||
| [dependencies] | ||
| log = { version = "0.4.29", features = ["std"] } | ||
| regex = { version = "1.12.3", optional = true, default-features=false, features=["std", "perf"] } | ||
| log = { version = "0.4.29", default-features = false } | ||
| regex = { version = "1.12.3", optional = true, default-features=false, features=["perf"] } | ||
|
|
||
| [dev-dependencies] | ||
| snapbox = "1.0" | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,5 @@ | ||
| use alloc::string::String; | ||
|
|
||
| use log::Level; | ||
| use log::LevelFilter; | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,5 @@ | ||
| use std::env; | ||
| use std::fmt; | ||
| use std::mem; | ||
| use alloc::{borrow::ToOwned, string::ToString, vec::Vec}; | ||
| use core::{fmt, mem}; | ||
|
|
||
| use log::{LevelFilter, Metadata, Record}; | ||
|
|
||
|
|
@@ -48,10 +47,11 @@ impl Builder { | |
| } | ||
|
|
||
| /// Initializes the filter builder from an environment. | ||
| #[cfg(feature = "std")] | ||
| pub fn from_env(env: &str) -> Builder { | ||
| let mut builder = Builder::new(); | ||
|
|
||
| if let Ok(s) = env::var(env) { | ||
| if let Ok(s) = std::env::var(env) { | ||
| builder.parse(&s); | ||
| } | ||
|
|
||
|
|
@@ -108,7 +108,10 @@ impl Builder { | |
| } = parse_spec(filters); | ||
|
|
||
| for error in errors { | ||
| #[cfg(feature = "std")] | ||
| eprintln!("warning: {error}, ignoring it"); | ||
| #[cfg(not(feature = "std"))] | ||
| log::warn!("{error}, ignoring it"); | ||
|
Comment on lines
+113
to
+114
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is for creating the logger in the first place, so I don't think it is too meaningful to log at this point.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. At least in my use case, the filter member of the logger is a |
||
| } | ||
|
|
||
| self.filter = filter; | ||
|
|
@@ -258,6 +261,8 @@ impl fmt::Debug for Filter { | |
|
|
||
| #[cfg(test)] | ||
| mod tests { | ||
| use alloc::{borrow::ToOwned, vec, vec::Vec}; | ||
|
|
||
| use log::{Level, LevelFilter}; | ||
| use snapbox::{assert_data_eq, str}; | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,7 @@ | ||
| use alloc::{borrow::ToOwned, format, string::String, vec::Vec}; | ||
| use core::fmt::{Display, Formatter}; | ||
|
|
||
| use log::LevelFilter; | ||
| use std::error::Error; | ||
| use std::fmt::{Display, Formatter}; | ||
|
|
||
| use crate::Directive; | ||
| use crate::FilterOp; | ||
|
|
@@ -46,12 +47,17 @@ pub struct ParseError { | |
| } | ||
|
|
||
| impl Display for ParseError { | ||
| fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { | ||
| fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result { | ||
| write!(f, "error parsing logger filter: {}", self.details) | ||
| } | ||
| } | ||
|
|
||
| impl Error for ParseError {} | ||
| #[cfg(feature = "std")] | ||
| #[allow(clippy::std_instead_of_core)] | ||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This allow stopped working starting from Rust 1.91. I could not find anything in the release notes that would affect it. |
||
| impl std::error::Error for ParseError {} | ||
|
|
||
| #[cfg(not(feature = "std"))] | ||
| impl core::error::Error for ParseError {} | ||
|
|
||
| /// Parse a logging specification string (e.g: `crate1,crate2::mod3,crate3::x=error/foo`) | ||
| /// and return a vector with log directives. | ||
|
|
@@ -115,6 +121,8 @@ pub(crate) fn parse_spec(spec: &str) -> ParseResult { | |
|
|
||
| #[cfg(test)] | ||
| mod tests { | ||
| use alloc::{borrow::ToOwned, string::ToString}; | ||
|
|
||
| use crate::ParseError; | ||
| use log::LevelFilter; | ||
| use snapbox::{assert_data_eq, str, Data, IntoData}; | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this needed?
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Even though it is not possible to declare a MSRV for
env_filterin itsCargo.toml(see the comment on crates/env_filter/Cargo.toml) , I thought it may be useful to have a check in the CI to prevent accidental further bumps for theenv_filterMSRV.