Skip to content

Commit dfff81e

Browse files
authored
Merge pull request #283 from epage/refactor
refactor: Move impls next to types
2 parents 36623f5 + b769540 commit dfff81e

File tree

7 files changed

+1114
-1133
lines changed

7 files changed

+1114
-1133
lines changed

src/filter/mod.rs

+77-77
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,6 @@ mod inner;
7171
#[path = "string.rs"]
7272
mod inner;
7373

74-
/// A log filter.
75-
///
76-
/// This struct can be used to determine whether or not a log record
77-
/// should be written to the output.
78-
/// Use the [`Builder`] type to parse and construct a `Filter`.
79-
///
80-
/// [`Builder`]: struct.Builder.html
81-
pub struct Filter {
82-
directives: Vec<Directive>,
83-
filter: Option<inner::Filter>,
84-
}
85-
8674
/// A builder for a log filter.
8775
///
8876
/// It can be used to parse a set of directives from a string before building
@@ -112,61 +100,6 @@ pub struct Builder {
112100
built: bool,
113101
}
114102

115-
#[derive(Debug)]
116-
struct Directive {
117-
name: Option<String>,
118-
level: LevelFilter,
119-
}
120-
121-
impl Filter {
122-
/// Returns the maximum `LevelFilter` that this filter instance is
123-
/// configured to output.
124-
///
125-
/// # Example
126-
///
127-
/// ```rust
128-
/// use log::LevelFilter;
129-
/// use env_logger::filter::Builder;
130-
///
131-
/// let mut builder = Builder::new();
132-
/// builder.filter(Some("module1"), LevelFilter::Info);
133-
/// builder.filter(Some("module2"), LevelFilter::Error);
134-
///
135-
/// let filter = builder.build();
136-
/// assert_eq!(filter.filter(), LevelFilter::Info);
137-
/// ```
138-
pub fn filter(&self) -> LevelFilter {
139-
self.directives
140-
.iter()
141-
.map(|d| d.level)
142-
.max()
143-
.unwrap_or(LevelFilter::Off)
144-
}
145-
146-
/// Checks if this record matches the configured filter.
147-
pub fn matches(&self, record: &Record) -> bool {
148-
if !self.enabled(record.metadata()) {
149-
return false;
150-
}
151-
152-
if let Some(filter) = self.filter.as_ref() {
153-
if !filter.is_match(&record.args().to_string()) {
154-
return false;
155-
}
156-
}
157-
158-
true
159-
}
160-
161-
/// Determines if a log message with the specified metadata would be logged.
162-
pub fn enabled(&self, metadata: &Metadata) -> bool {
163-
let level = metadata.level();
164-
let target = metadata.target();
165-
166-
enabled(&self.directives, level, target)
167-
}
168-
}
169-
170103
impl Builder {
171104
/// Initializes the filter builder with defaults.
172105
pub fn new() -> Builder {
@@ -265,7 +198,7 @@ impl Builder {
265198

266199
Filter {
267200
directives: mem::take(&mut directives),
268-
filter: mem::replace(&mut self.filter, None),
201+
filter: mem::take(&mut self.filter),
269202
}
270203
}
271204
}
@@ -276,15 +209,6 @@ impl Default for Builder {
276209
}
277210
}
278211

279-
impl fmt::Debug for Filter {
280-
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
281-
f.debug_struct("Filter")
282-
.field("filter", &self.filter)
283-
.field("directives", &self.directives)
284-
.finish()
285-
}
286-
}
287-
288212
impl fmt::Debug for Builder {
289213
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
290214
if self.built {
@@ -298,6 +222,82 @@ impl fmt::Debug for Builder {
298222
}
299223
}
300224

225+
#[derive(Debug)]
226+
struct Directive {
227+
name: Option<String>,
228+
level: LevelFilter,
229+
}
230+
231+
/// A log filter.
232+
///
233+
/// This struct can be used to determine whether or not a log record
234+
/// should be written to the output.
235+
/// Use the [`Builder`] type to parse and construct a `Filter`.
236+
///
237+
/// [`Builder`]: struct.Builder.html
238+
pub struct Filter {
239+
directives: Vec<Directive>,
240+
filter: Option<inner::Filter>,
241+
}
242+
243+
impl Filter {
244+
/// Returns the maximum `LevelFilter` that this filter instance is
245+
/// configured to output.
246+
///
247+
/// # Example
248+
///
249+
/// ```rust
250+
/// use log::LevelFilter;
251+
/// use env_logger::filter::Builder;
252+
///
253+
/// let mut builder = Builder::new();
254+
/// builder.filter(Some("module1"), LevelFilter::Info);
255+
/// builder.filter(Some("module2"), LevelFilter::Error);
256+
///
257+
/// let filter = builder.build();
258+
/// assert_eq!(filter.filter(), LevelFilter::Info);
259+
/// ```
260+
pub fn filter(&self) -> LevelFilter {
261+
self.directives
262+
.iter()
263+
.map(|d| d.level)
264+
.max()
265+
.unwrap_or(LevelFilter::Off)
266+
}
267+
268+
/// Checks if this record matches the configured filter.
269+
pub fn matches(&self, record: &Record) -> bool {
270+
if !self.enabled(record.metadata()) {
271+
return false;
272+
}
273+
274+
if let Some(filter) = self.filter.as_ref() {
275+
if !filter.is_match(&record.args().to_string()) {
276+
return false;
277+
}
278+
}
279+
280+
true
281+
}
282+
283+
/// Determines if a log message with the specified metadata would be logged.
284+
pub fn enabled(&self, metadata: &Metadata) -> bool {
285+
let level = metadata.level();
286+
let target = metadata.target();
287+
288+
enabled(&self.directives, level, target)
289+
}
290+
}
291+
292+
impl fmt::Debug for Filter {
293+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
294+
f.debug_struct("Filter")
295+
.field("filter", &self.filter)
296+
.field("directives", &self.directives)
297+
.finish()
298+
}
299+
}
300+
301301
/// Parse a logging specification string (e.g: "crate1,crate2::mod3,crate3::x=error/foo")
302302
/// and return a vector with log directives.
303303
fn parse_spec(spec: &str) -> (Vec<Directive>, Option<inner::Filter>) {

src/fmt/humantime/extern_impl.rs renamed to src/fmt/humantime.rs

-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@ use humantime::{
77

88
use crate::fmt::{Formatter, TimestampPrecision};
99

10-
pub(in crate::fmt) mod glob {
11-
pub use super::*;
12-
}
13-
1410
impl Formatter {
1511
/// Get a [`Timestamp`] for the current date and time in UTC.
1612
///

src/fmt/humantime/mod.rs

-11
This file was deleted.

src/fmt/humantime/shim_impl.rs

-5
This file was deleted.

src/fmt/mod.rs

+18-16
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,12 @@ use std::{fmt, io, mem};
3737

3838
use log::Record;
3939

40+
#[cfg(feature = "humantime")]
4041
mod humantime;
4142
pub(crate) mod writer;
4243

43-
pub use self::humantime::glob::*;
44+
#[cfg(feature = "humantime")]
45+
pub use self::humantime::Timestamp;
4446
pub use self::writer::glob::*;
4547

4648
use self::writer::{Buffer, Writer};
@@ -149,21 +151,6 @@ pub(crate) struct Builder {
149151
built: bool,
150152
}
151153

152-
impl Default for Builder {
153-
fn default() -> Self {
154-
Builder {
155-
format_timestamp: Some(Default::default()),
156-
format_module_path: false,
157-
format_target: true,
158-
format_level: true,
159-
format_indent: Some(4),
160-
custom_format: None,
161-
format_suffix: "\n",
162-
built: false,
163-
}
164-
}
165-
}
166-
167154
impl Builder {
168155
/// Convert the format into a callable function.
169156
///
@@ -202,6 +189,21 @@ impl Builder {
202189
}
203190
}
204191

192+
impl Default for Builder {
193+
fn default() -> Self {
194+
Builder {
195+
format_timestamp: Some(Default::default()),
196+
format_module_path: false,
197+
format_target: true,
198+
format_level: true,
199+
format_indent: Some(4),
200+
custom_format: None,
201+
format_suffix: "\n",
202+
built: false,
203+
}
204+
}
205+
}
206+
205207
#[cfg(feature = "color")]
206208
type SubtleStyle = StyledValue<'static, &'static str>;
207209
#[cfg(not(feature = "color"))]

0 commit comments

Comments
 (0)