Skip to content

Commit 9c70eaf

Browse files
feat(filter): Add support for no_std environments
Co-authored-by: Çağatay Yiğit Şahin <cyigitsahin@outlook.com>
1 parent 548e34a commit 9c70eaf

File tree

6 files changed

+26
-14
lines changed

6 files changed

+26
-14
lines changed

crates/env_filter/Cargo.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ pre-release-replacements = [
2626
]
2727

2828
[features]
29-
default = ["regex"]
30-
regex = ["dep:regex"]
29+
default = ["std", "regex"]
30+
regex = ["std", "dep:regex"]
31+
std = []
3132

3233
[dependencies]
33-
log = { version = "0.4.29", features = ["std"] }
34+
log = { version = "0.4.29", default-features = false }
3435
regex = { version = "1.12.3", optional = true, default-features=false, features=["std", "perf"] }
3536

3637
[dev-dependencies]

crates/env_filter/src/directive.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use alloc::string::String;
2+
13
use log::Level;
24
use log::LevelFilter;
35

crates/env_filter/src/filter.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
use std::env;
2-
use std::fmt;
3-
use std::mem;
1+
use alloc::{borrow::ToOwned, string::ToString, vec::Vec};
2+
use core::{fmt, mem};
43

54
use log::{LevelFilter, Metadata, Record};
65

76
use crate::enabled;
87
use crate::parse_spec;
9-
use crate::parser::ParseResult;
108
use crate::Directive;
119
use crate::FilterOp;
1210
use crate::ParseError;
@@ -48,10 +46,11 @@ impl Builder {
4846
}
4947

5048
/// Initializes the filter builder from an environment.
49+
#[cfg(feature = "std")]
5150
pub fn from_env(env: &str) -> Builder {
5251
let mut builder = Builder::new();
5352

54-
if let Ok(s) = env::var(env) {
53+
if let Ok(s) = std::env::var(env) {
5554
builder.parse(&s);
5655
}
5756

@@ -98,10 +97,11 @@ impl Builder {
9897
/// See the [Enabling Logging] section for more details.
9998
///
10099
/// [Enabling Logging]: ../index.html#enabling-logging
100+
#[cfg(feature = "std")]
101101
pub fn parse(&mut self, filters: &str) -> &mut Self {
102102
#![allow(clippy::print_stderr)] // compatibility
103103

104-
let ParseResult {
104+
let crate::parser::ParseResult {
105105
directives,
106106
filter,
107107
errors,

crates/env_filter/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,13 @@
3838
//! ```
3939
4040
#![cfg_attr(docsrs, feature(doc_cfg))]
41+
#![cfg_attr(not(feature = "std"), no_std)]
4142
#![warn(missing_docs)]
4243
#![warn(clippy::print_stderr)]
4344
#![warn(clippy::print_stdout)]
4445

46+
extern crate alloc;
47+
4548
mod directive;
4649
mod filter;
4750
mod filtered_log;

crates/env_filter/src/op.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use std::fmt;
1+
use alloc::string::{String, ToString};
2+
use core::fmt;
23

34
#[derive(Debug, Clone)]
45
pub(crate) struct FilterOp {

crates/env_filter/src/parser.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
use alloc::{borrow::ToOwned, format, string::String, vec::Vec};
2+
use core::fmt::{Display, Formatter};
3+
14
use log::LevelFilter;
2-
use std::error::Error;
3-
use std::fmt::{Display, Formatter};
45

56
use crate::Directive;
67
use crate::FilterOp;
@@ -46,12 +47,16 @@ pub struct ParseError {
4647
}
4748

4849
impl Display for ParseError {
49-
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
50+
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
5051
write!(f, "error parsing logger filter: {}", self.details)
5152
}
5253
}
5354

54-
impl Error for ParseError {}
55+
#[cfg(feature = "std")]
56+
impl std::error::Error for ParseError {}
57+
58+
#[cfg(not(feature = "std"))]
59+
impl core::error::Error for ParseError {}
5560

5661
/// Parse a logging specification string (e.g: `crate1,crate2::mod3,crate3::x=error/foo`)
5762
/// and return a vector with log directives.

0 commit comments

Comments
 (0)