server: Simplify the debug print of various structs
Some checks are pending
Rust / pre_job (push) Waiting to run
Rust / cargo test (push) Blocked by required conditions
Rust / cargo clippy (push) Blocked by required conditions
Rust / cargo fmt (push) Blocked by required conditions
Rust / Code coverage (push) Blocked by required conditions

And use derive_more more liberally to simplify the impls
This commit is contained in:
Valentin Tolmer 2024-09-07 23:50:08 +02:00 committed by nitnelave
parent 5db0072cfa
commit 65e2103365
9 changed files with 118 additions and 60 deletions

56
Cargo.lock generated
View file

@ -56,7 +56,7 @@ dependencies = [
"askama_escape",
"bitflags 1.3.2",
"bytes",
"derive_more",
"derive_more 0.99.17",
"futures-core",
"http-range",
"log",
@ -82,7 +82,7 @@ dependencies = [
"brotli",
"bytes",
"bytestring",
"derive_more",
"derive_more 0.99.17",
"encoding_rs",
"flate2",
"futures-core",
@ -216,7 +216,7 @@ dependencies = [
"bytestring",
"cfg-if",
"cookie",
"derive_more",
"derive_more 0.99.17",
"encoding_rs",
"futures-core",
"futures-util",
@ -1154,6 +1154,27 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "derive_more"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
dependencies = [
"derive_more-impl",
]
[[package]]
name = "derive_more-impl"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.77",
"unicode-xid",
]
[[package]]
name = "derive_utils"
version = "0.11.2"
@ -2173,7 +2194,7 @@ checksum = "ce243b1bfa62ffc028f1cc3b6034ec63d649f3031bc8a4fbbb004e1ac17d1f68"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.77",
]
[[package]]
@ -2484,7 +2505,7 @@ dependencies = [
"clap",
"cron",
"derive_builder",
"derive_more",
"derive_more 1.0.0",
"figment",
"figment_file_provider_adapter",
"futures",
@ -2575,6 +2596,7 @@ version = "0.4.0"
dependencies = [
"chrono",
"curve25519-dalek",
"derive_more 1.0.0",
"digest 0.9.0",
"generic-array",
"getrandom 0.2.8",
@ -2994,7 +3016,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.77",
]
[[package]]
@ -3234,9 +3256,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.66"
version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
dependencies = [
"unicode-ident",
]
@ -3256,9 +3278,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.33"
version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
dependencies = [
"proc-macro2",
]
@ -3662,7 +3684,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.77",
]
[[package]]
@ -3699,7 +3721,7 @@ dependencies = [
"proc-macro2",
"quote",
"sea-bae",
"syn 2.0.32",
"syn 2.0.77",
"unicode-ident",
]
@ -3805,7 +3827,7 @@ checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.77",
]
[[package]]
@ -3853,7 +3875,7 @@ checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.77",
]
[[package]]
@ -4265,7 +4287,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
"syn 2.0.32",
"syn 2.0.77",
]
[[package]]
@ -4287,9 +4309,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.32"
version = "2.0.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2"
checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
dependencies = [
"proc-macro2",
"quote",

View file

@ -25,6 +25,11 @@ serde = "*"
sha2 = "0.9"
thiserror = "*"
[dependencies.derive_more]
features = ["debug", "display"]
default-features = false
version = "1"
[dependencies.opaque-ke]
version = "0.6"

View file

@ -151,10 +151,22 @@ pub mod types {
}
#[derive(
PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Default, Hash, Serialize, Deserialize,
PartialEq,
Eq,
PartialOrd,
Ord,
Clone,
Default,
Hash,
Serialize,
Deserialize,
derive_more::Debug,
derive_more::Display,
)]
#[cfg_attr(feature = "sea_orm", derive(DeriveValueType))]
#[serde(from = "CaseInsensitiveString")]
#[debug(r#""{}""#, _0.as_str())]
#[display("{}", _0.as_str())]
pub struct UserId(CaseInsensitiveString);
impl UserId {
@ -176,11 +188,6 @@ pub mod types {
Self(s.into())
}
}
impl std::fmt::Display for UserId {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0.as_str())
}
}
#[cfg(feature = "sea_orm")]
impl From<&UserId> for Value {

View file

@ -25,7 +25,6 @@ base64 = "0.21"
bincode = "1.3"
cron = "*"
derive_builder = "0.12"
derive_more = "0.99"
figment_file_provider_adapter = "0.1"
futures = "*"
futures-util = "*"
@ -64,6 +63,11 @@ version = "*"
features = ["std", "color", "suggestions", "derive", "env"]
version = "4"
[dependencies.derive_more]
features = ["debug", "display", "from", "from_str"]
default-features = false
version = "1"
[dependencies.figment]
features = ["env", "toml"]
version = "*"

View file

@ -14,9 +14,22 @@ use strum::{EnumString, IntoStaticStr};
pub use super::model::UserColumn;
pub use lldap_auth::types::UserId;
#[derive(PartialEq, Hash, Eq, Clone, Debug, Default, Serialize, Deserialize, DeriveValueType)]
#[derive(
PartialEq,
Hash,
Eq,
Clone,
Default,
Serialize,
Deserialize,
DeriveValueType,
derive_more::Debug,
derive_more::Display,
)]
#[serde(try_from = "&str")]
#[sea_orm(column_type = "String(Some(36))")]
#[debug(r#""{_0}""#)]
#[display("{_0}")]
pub struct Uuid(String);
impl Uuid {
@ -53,12 +66,6 @@ impl<'a> std::convert::TryFrom<&'a str> for Uuid {
}
}
impl std::fmt::Display for Uuid {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0.as_str())
}
}
#[cfg(test)]
#[macro_export]
macro_rules! uuid {
@ -144,7 +151,17 @@ fn compare_str_case_insensitive(s1: &str, s2: &str) -> Ordering {
macro_rules! make_case_insensitive_comparable_string {
($c:ident) => {
#[derive(Clone, Debug, Default, Serialize, Deserialize, DeriveValueType)]
#[derive(
Clone,
Default,
Serialize,
Deserialize,
DeriveValueType,
derive_more::Debug,
derive_more::Display,
)]
#[debug(r#""{_0}""#)]
#[display("{_0}")]
pub struct $c(String);
impl PartialEq for $c {
@ -199,12 +216,6 @@ macro_rules! make_case_insensitive_comparable_string {
}
}
impl std::fmt::Display for $c {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0.as_str())
}
}
impl From<&$c> for Value {
fn from(user_id: &$c) -> Self {
user_id.as_str().into()
@ -429,7 +440,6 @@ impl Default for User {
}
#[derive(
Debug,
Copy,
Clone,
PartialEq,
@ -440,7 +450,9 @@ impl Default for User {
Serialize,
Deserialize,
DeriveValueType,
derive_more::Debug,
)]
#[debug("{_0}")]
pub struct GroupId(pub i32);
impl TryFromU64 for GroupId {

View file

@ -17,13 +17,19 @@ use figment::{
Figment,
};
use figment_file_provider_adapter::FileAdapter;
use lettre::message::Mailbox;
use lldap_auth::opaque::{server::ServerSetup, KeyPair};
use secstr::SecUtf8;
use serde::{Deserialize, Serialize};
use url::Url;
#[derive(Clone, Debug, Deserialize, Serialize, derive_builder::Builder)]
#[derive(
Clone, Deserialize, Serialize, derive_more::FromStr, derive_more::Debug, derive_more::Display,
)]
#[debug(r#""{_0}""#)]
#[display("{_0}")]
pub struct Mailbox(pub lettre::message::Mailbox);
#[derive(Clone, derive_more::Debug, Deserialize, Serialize, derive_builder::Builder)]
#[builder(pattern = "owned")]
pub struct MailOptions {
#[builder(default = "false")]
@ -43,6 +49,8 @@ pub struct MailOptions {
#[builder(default = "SmtpEncryption::Tls")]
pub smtp_encryption: SmtpEncryption,
/// Deprecated.
#[debug(skip)]
#[serde(skip)]
#[builder(default = "None")]
pub tls_required: Option<bool>,
}
@ -72,7 +80,11 @@ impl std::default::Default for LdapsOptions {
}
}
#[derive(Clone, Debug, Deserialize, Serialize, derive_builder::Builder)]
#[derive(Clone, Deserialize, Serialize, derive_more::Debug)]
#[debug(r#""{_0}""#)]
pub struct HttpUrl(pub Url);
#[derive(Clone, Deserialize, Serialize, derive_builder::Builder, derive_more::Debug)]
#[builder(pattern = "owned", build_fn(name = "private_build"))]
pub struct Configuration {
#[builder(default = r#"String::from("0.0.0.0")"#)]
@ -115,8 +127,9 @@ pub struct Configuration {
pub smtp_options: MailOptions,
#[builder(default)]
pub ldaps_options: LdapsOptions,
#[builder(default = r#"Url::parse("http://localhost").unwrap()"#)]
pub http_url: Url,
#[builder(default = r#"HttpUrl(Url::parse("http://localhost").unwrap())"#)]
pub http_url: HttpUrl,
#[debug(skip)]
#[serde(skip)]
#[builder(field(private), default = "None")]
server_setup: Option<ServerSetupConfig>,
@ -419,7 +432,7 @@ impl ConfigOverrider for RunOpts {
}
if let Some(url) = self.http_url.as_ref() {
config.http_url = url.clone();
config.http_url = HttpUrl(url.clone());
}
if let Some(database_url) = self.database_url.as_ref() {
@ -473,10 +486,10 @@ impl ConfigOverrider for GeneralConfigOpts {
impl ConfigOverrider for SmtpOpts {
fn override_config(&self, config: &mut Configuration) {
if let Some(from) = &self.smtp_from {
config.smtp_options.from = Some(from.clone());
config.smtp_options.from = Some(Mailbox(from.clone()));
}
if let Some(reply_to) = &self.smtp_reply_to {
config.smtp_options.reply_to = Some(reply_to.clone());
config.smtp_options.reply_to = Some(Mailbox(reply_to.clone()));
}
if let Some(server) = &self.smtp_server {
config.smtp_options.server.clone_from(server);

View file

@ -1,7 +1,8 @@
use serde::{Deserialize, Serialize};
use url::Url;
#[derive(Clone, Serialize, Deserialize)]
#[derive(Clone, Serialize, Deserialize, derive_more::Display)]
#[display("{_0}")]
pub struct DatabaseUrl(Url);
impl From<Url> for DatabaseUrl {
@ -22,19 +23,13 @@ impl std::fmt::Debug for DatabaseUrl {
let mut url = self.0.clone();
// It can fail for URLs that cannot have a password, like "mailto:bob@example".
let _ = url.set_password(Some("***PASSWORD***"));
f.write_fmt(format_args!("{}", url))
f.write_fmt(format_args!(r#""{}""#, url))
} else {
f.write_fmt(format_args!("{}", self.0))
f.write_fmt(format_args!(r#""{}""#, self.0))
}
}
}
impl std::fmt::Display for DatabaseUrl {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_fmt(format_args!("{}", self.0))
}
}
#[cfg(test)]
mod tests {
use super::*;
@ -44,7 +39,7 @@ mod tests {
let url = DatabaseUrl::from("postgres://user:pass@localhost:5432/dbname");
assert_eq!(
format!("{:?}", url),
"postgres://user:***PASSWORD***@localhost:5432/dbname"
r#""postgres://user:***PASSWORD***@localhost:5432/dbname""#
);
assert_eq!(
url.to_string(),

View file

@ -33,8 +33,8 @@ async fn send_email(
),
server_url.domain().unwrap_or_default()
)))
.from(from)
.reply_to(reply_to)
.from(from.0)
.reply_to(reply_to.0)
.to(to)
.subject(subject)
.singlepart(

View file

@ -194,7 +194,7 @@ where
.get_jwt_blacklist()
.await
.context("while getting the jwt blacklist")?;
let server_url = config.http_url.clone();
let server_url = config.http_url.0.clone();
let mail_options = config.smtp_options.clone();
let verbose = config.verbose;
info!("Starting the API/web server on port {}", config.http_port);