Skip to content

Commit 6cafec5

Browse files
committed
refactor: [torrust#852] enrich field types in Configuration struct
1 parent 8ca2457 commit 6cafec5

File tree

7 files changed

+36
-11
lines changed

7 files changed

+36
-11
lines changed

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/configuration/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ version.workspace = true
1818
camino = { version = "1.1.6", features = ["serde"] }
1919
derive_more = "0"
2020
figment = { version = "0.10.18", features = ["env", "test", "toml"] }
21+
log = "0.4.21"
2122
serde = { version = "1", features = ["derive"] }
2223
serde_with = "3"
2324
thiserror = "1"

packages/configuration/src/lib.rs

+17
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,20 @@ pub struct TslConfig {
171171
#[serde_as(as = "NoneAsEmptyString")]
172172
pub ssl_key_path: Option<Utf8PathBuf>,
173173
}
174+
175+
#[derive(Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
176+
#[serde(rename_all = "lowercase")]
177+
pub enum LogLevel {
178+
/// A level lower than all log levels.
179+
Off,
180+
/// Corresponds to the `Error` log level.
181+
Error,
182+
/// Corresponds to the `Warn` log level.
183+
Warn,
184+
/// Corresponds to the `Info` log level.
185+
Info,
186+
/// Corresponds to the `Debug` log level.
187+
Debug,
188+
/// Corresponds to the `Trace` log level.
189+
Trace,
190+
}

packages/configuration/src/v1/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -248,15 +248,15 @@ use self::health_check_api::HealthCheckApi;
248248
use self::http_tracker::HttpTracker;
249249
use self::tracker_api::HttpApi;
250250
use self::udp_tracker::UdpTracker;
251-
use crate::{AnnouncePolicy, Error, Info};
251+
use crate::{AnnouncePolicy, Error, Info, LogLevel};
252252

253253
/// Core configuration for the tracker.
254254
#[allow(clippy::struct_excessive_bools)]
255255
#[derive(Serialize, Deserialize, PartialEq, Eq, Debug)]
256256
pub struct Configuration {
257257
/// Logging level. Possible values are: `Off`, `Error`, `Warn`, `Info`,
258258
/// `Debug` and `Trace`. Default is `Info`.
259-
pub log_level: Option<String>,
259+
pub log_level: Option<LogLevel>,
260260
/// Tracker mode. See [`TrackerMode`] for more information.
261261
pub mode: TrackerMode,
262262

@@ -330,7 +330,7 @@ impl Default for Configuration {
330330
let announce_policy = AnnouncePolicy::default();
331331

332332
let mut configuration = Configuration {
333-
log_level: Option::from(String::from("info")),
333+
log_level: Some(LogLevel::Info),
334334
mode: TrackerMode::Public,
335335
db_driver: DatabaseDriver::Sqlite3,
336336
db_path: String::from("./storage/tracker/lib/database/sqlite3.db"),

packages/test-helpers/src/configuration.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
use std::env;
33
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
44

5-
use torrust_tracker_configuration::Configuration;
5+
use torrust_tracker_configuration::{Configuration, LogLevel};
66
use torrust_tracker_primitives::TrackerMode;
77

88
use crate::random;
@@ -28,7 +28,7 @@ pub fn ephemeral() -> Configuration {
2828
// For example: a test for the UDP tracker should disable the API and HTTP tracker.
2929

3030
let mut config = Configuration {
31-
log_level: Some("off".to_owned()), // Change to `debug` for tests debugging
31+
log_level: Some(LogLevel::Off), // Change to `debug` for tests debugging
3232
..Default::default()
3333
};
3434

src/bootstrap/logging.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@
1010
//! - `Trace`
1111
//!
1212
//! Refer to the [configuration crate documentation](https://docs.rs/torrust-tracker-configuration) to know how to change log settings.
13-
use std::str::FromStr;
1413
use std::sync::Once;
1514

1615
use log::{info, LevelFilter};
17-
use torrust_tracker_configuration::Configuration;
16+
use torrust_tracker_configuration::{Configuration, LogLevel};
1817

1918
static INIT: Once = Once::new();
2019

@@ -31,10 +30,17 @@ pub fn setup(cfg: &Configuration) {
3130
});
3231
}
3332

34-
fn config_level_or_default(log_level: &Option<String>) -> LevelFilter {
33+
fn config_level_or_default(log_level: &Option<LogLevel>) -> LevelFilter {
3534
match log_level {
3635
None => log::LevelFilter::Info,
37-
Some(level) => LevelFilter::from_str(level).unwrap(),
36+
Some(level) => match level {
37+
LogLevel::Off => LevelFilter::Off,
38+
LogLevel::Error => LevelFilter::Error,
39+
LogLevel::Warn => LevelFilter::Warn,
40+
LogLevel::Info => LevelFilter::Info,
41+
LogLevel::Debug => LevelFilter::Debug,
42+
LogLevel::Trace => LevelFilter::Trace,
43+
},
3844
}
3945
}
4046

src/servers/apis/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@
130130
//! > **NOTICE**: You can generate a self-signed certificate for localhost using
131131
//! OpenSSL. See [Let's Encrypt](https://letsencrypt.org/docs/certificates-for-localhost/).
132132
//! That's particularly useful for testing purposes. Once you have the certificate
133-
//! you need to set the [`ssl_cert_path`](torrust_tracker_configuration::HttpApi::ssl_cert_path)
134-
//! and [`ssl_key_path`](torrust_tracker_configuration::HttpApi::ssl_key_path)
133+
//! you need to set the [`ssl_cert_path`](torrust_tracker_configuration::HttpApi::tsl_config.ssl_cert_path)
134+
//! and [`ssl_key_path`](torrust_tracker_configuration::HttpApi::tsl_config.ssl_key_path)
135135
//! options in the configuration file with the paths to the certificate
136136
//! (`localhost.crt`) and key (`localhost.key`) files.
137137
//!

0 commit comments

Comments
 (0)