pub struct ConfigDiagnostics { /* private fields */ }Expand description
Accumulates every problem and every non-fatal notice found during a single
resolve_config pass.
Threaded by &mut through the *_into section workers. Callers record
problems via check (the anyhow::ensure! replacement) and
try_with (the ?/.context() replacement),
substituting a placeholder for any value they could not resolve so
later independent checks still run. They record notices via warn / note.
Insertion order is preserved end-to-end: into_result
renders bullets in the same order they were pushed, so
resolver authors can rely on operator-facing problem order matching the
order of validation logic, and tests that pin specific output order keep
working through future refactors. take_notices
preserves notice order for the same reason.
Notices and problems are independent: a bag carrying only notices still
collapses to Ok(()), and a bag that fails resolution may still hold
notices its caller chooses not to render.
Implementations§
Source§impl ConfigDiagnostics
impl ConfigDiagnostics
Sourcepub const fn new() -> Self
pub const fn new() -> Self
An empty bag. Resolution fills it and reports every problem at once, rather than failing on the first.
Sourcepub fn take_notices(&mut self) -> Vec<ConfigNotice>
pub fn take_notices(&mut self) -> Vec<ConfigNotice>
Take every notice recorded so far, leaving the bag’s notice list empty.
Separate from into_result because that method
consumes the bag: notices have to come out before the problems are
collapsed. Whether a caller then renders them is its own policy — both
callers today discard them on their failure path, since notices about a
config that was never applied describe nothing the node is running.
Sourcepub fn try_with<T>(
&mut self,
field: impl Into<String>,
result: Result<T>,
) -> Option<T>
pub fn try_with<T>( &mut self, field: impl Into<String>, result: Result<T>, ) -> Option<T>
? / .context() replacement: on Err, record the full {e:#}
alternate-form context chain under field and return None; on
Ok, return Some(value).
Sourcepub const fn problem_count(&self) -> usize
pub const fn problem_count(&self) -> usize
Number of problems recorded. Read before
into_result when the count is needed
alongside the consumed error (e.g. as a structured
problem_count log field).
Sourcepub fn into_result(self) -> Result<()>
pub fn into_result(self) -> Result<()>
Collapse the bag into a single anyhow::Error listing every problem
as a - <field>: <message> bullet, or Ok(()) when empty.
Single-line messages are reproduced verbatim; continuation lines of
a multi-line message are indented to stay under their bullet.
Only \n is replaced — \r\n continuations have their \n re-indented
but the carriage return is left in place. An empty message renders as
- <field>:, and a trailing \n becomes a dangling-indent blank
line; neither shape is produced by the current resolvers but a future
{e:#} source whose Display ends in a newline would surface it.
Trait Implementations§
Source§impl Debug for ConfigDiagnostics
impl Debug for ConfigDiagnostics
Auto Trait Implementations§
impl Freeze for ConfigDiagnostics
impl RefUnwindSafe for ConfigDiagnostics
impl Send for ConfigDiagnostics
impl Sync for ConfigDiagnostics
impl Unpin for ConfigDiagnostics
impl UnsafeUnpin for ConfigDiagnostics
impl UnwindSafe for ConfigDiagnostics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more