pub struct ScanReport<'a> {
pub findings: &'a [VerifiedFinding],
pub metadata: Option<&'a ScanReportMetadata>,
pub correlations: &'a [CorrelatedCredential],
pub access_targets: Option<&'a AccessTargetReport>,
}Expand description
The format-neutral input shared by every report renderer.
Renderers borrow findings so constructing a report does not copy a large
finding set. Metadata is optional for the legacy write_report wrapper;
production scan paths should pass it through write_scan_report.
Fields§
§findings: &'a [VerifiedFinding]Findings after all scan filtering, suppression, and verification.
metadata: Option<&'a ScanReportMetadata>Common scan identity and timing metadata, when the caller has it.
correlations: &'a [CorrelatedCredential]Cross-file credential correlations, empty unless the caller opted in.
Correlations are derived from findings and never replace them, so an
empty slice reproduces the report exactly as it rendered before
correlation existed.
access_targets: Option<&'a AccessTargetReport>Access targets derived from these findings, absent unless the caller opted in.
Like correlations, targets are derived from findings and never replace
them, so None reproduces the report exactly as it rendered before
access-target association existed.
Implementations§
Source§impl<'a> ScanReport<'a>
impl<'a> ScanReport<'a>
Sourcepub fn new(findings: &'a [VerifiedFinding]) -> Self
pub fn new(findings: &'a [VerifiedFinding]) -> Self
Create a report without optional metadata.
Sourcepub fn with_metadata(self, metadata: &'a ScanReportMetadata) -> Self
pub fn with_metadata(self, metadata: &'a ScanReportMetadata) -> Self
Attach the common scan metadata used by format projections.
Sourcepub fn with_correlations(self, correlations: &'a [CorrelatedCredential]) -> Self
pub fn with_correlations(self, correlations: &'a [CorrelatedCredential]) -> Self
Attach cross-file credential correlations computed from these findings.
Sourcepub fn with_access_targets(self, access_targets: &'a AccessTargetReport) -> Self
pub fn with_access_targets(self, access_targets: &'a AccessTargetReport) -> Self
Attach access targets (“doors”) computed from these findings.
Trait Implementations§
Source§impl<'a> Clone for ScanReport<'a>
impl<'a> Clone for ScanReport<'a>
Source§fn clone(&self) -> ScanReport<'a>
fn clone(&self) -> ScanReport<'a>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl<'a> Copy for ScanReport<'a>
Auto Trait Implementations§
impl<'a> Freeze for ScanReport<'a>
impl<'a> RefUnwindSafe for ScanReport<'a>
impl<'a> Send for ScanReport<'a>
impl<'a> Sync for ScanReport<'a>
impl<'a> Unpin for ScanReport<'a>
impl<'a> UnsafeUnpin for ScanReport<'a>
impl<'a> UnwindSafe for ScanReport<'a>
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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