safelog: Make MaybeRedacted<T> opaque.
This commit is contained in:
parent
cf9f29158f
commit
a77172e20d
|
@ -2812,7 +2812,9 @@ dependencies = [
|
||||||
name = "safelog"
|
name = "safelog"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"derive_more",
|
||||||
"educe",
|
"educe",
|
||||||
|
"either",
|
||||||
"fluid-let",
|
"fluid-let",
|
||||||
"serde",
|
"serde",
|
||||||
"serial_test",
|
"serial_test",
|
||||||
|
|
|
@ -16,7 +16,9 @@ repository = "https://gitlab.torproject.org/tpo/core/arti.git/"
|
||||||
default = []
|
default = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
derive_more = "0.99.3"
|
||||||
educe = "0.4.6"
|
educe = "0.4.6"
|
||||||
|
either = "1"
|
||||||
fluid-let = "1"
|
fluid-let = "1"
|
||||||
serde = { version = "1.0.103", optional = true, features = ["derive"] }
|
serde = { version = "1.0.103", optional = true, features = ["derive"] }
|
||||||
thiserror = "1"
|
thiserror = "1"
|
||||||
|
|
|
@ -222,9 +222,9 @@ pub trait Redactable: std::fmt::Display + std::fmt::Debug {
|
||||||
/// Return a smart pointer that redacts this object if `redact` is true.
|
/// Return a smart pointer that redacts this object if `redact` is true.
|
||||||
fn maybe_redacted(&self, redact: bool) -> MaybeRedacted<&Self> {
|
fn maybe_redacted(&self, redact: bool) -> MaybeRedacted<&Self> {
|
||||||
if redact {
|
if redact {
|
||||||
MaybeRedacted::Redacted(Redacted(self))
|
MaybeRedacted(either::Either::Right(Redacted(self)))
|
||||||
} else {
|
} else {
|
||||||
MaybeRedacted::NotRedacted(self)
|
MaybeRedacted(either::Either::Left(self))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -287,29 +287,15 @@ impl<T: Redactable> std::fmt::Debug for Redacted<T> {
|
||||||
/// An object that may or may not be redacted.
|
/// An object that may or may not be redacted.
|
||||||
///
|
///
|
||||||
/// Used to implement conditional redaction
|
/// Used to implement conditional redaction
|
||||||
#[derive(Clone)]
|
#[derive(Clone, derive_more::Display)]
|
||||||
#[allow(clippy::exhaustive_enums)]
|
pub struct MaybeRedacted<T: Redactable>(either::Either<T, Redacted<T>>);
|
||||||
pub enum MaybeRedacted<T: Redactable> {
|
|
||||||
/// A variant where we are redacting the object.
|
|
||||||
Redacted(Redacted<T>),
|
|
||||||
/// A variant where we are not redacting the object.
|
|
||||||
NotRedacted(T),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: Redactable> std::fmt::Display for MaybeRedacted<T> {
|
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
match self {
|
|
||||||
MaybeRedacted::Redacted(v) => std::fmt::Display::fmt(v, f),
|
|
||||||
MaybeRedacted::NotRedacted(v) => std::fmt::Display::fmt(v, f),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: Redactable> std::fmt::Debug for MaybeRedacted<T> {
|
impl<T: Redactable> std::fmt::Debug for MaybeRedacted<T> {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
use std::fmt::Debug;
|
||||||
MaybeRedacted::Redacted(v) => std::fmt::Debug::fmt(v, f),
|
match &self.0 {
|
||||||
MaybeRedacted::NotRedacted(v) => std::fmt::Debug::fmt(v, f),
|
either::Either::Left(v) => Debug::fmt(v, f),
|
||||||
|
either::Either::Right(v) => Debug::fmt(v, f),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue