pub struct Statement {
pub id: Option<String>,
pub vulnerability: Vulnerability,
pub timestamp: Option<String>,
pub last_updated: Option<String>,
pub products: Vec<Product>,
pub status: Status,
pub supplier: Option<String>,
pub justification: Option<Justification>,
pub impact_statement: Option<String>,
pub action_statement: Option<String>,
}Expand description
One VEX statement — the unit of “I am asserting that vulnerability X has status S relative to product P”.
Fields§
§id: Option<String>Optional per-statement identifier. When present, must be unique within the document. Spec says it’s used to track revisions.
vulnerability: Vulnerability§timestamp: Option<String>RFC 3339 timestamp the statement’s assertion was known true.
Optional per spec — it cascades down from the document when a
statement omits it (see OpenVEX inheritance rules), so a
spec-valid document may legitimately leave it out. We always
emit one (the builder clones the document timestamp), but the
type must still accept its absence on parse, mirroring the
sibling last_updated field below.
last_updated: Option<String>RFC 3339 timestamp of the most recent revision of this statement.
products: Vec<Product>§status: Status§supplier: Option<String>Optional supplier IRI overriding the document-level author for this statement.
justification: Option<Justification>Required when status == not_affected (per spec; we don’t
enforce at the type level — see vex::conformance_tests).
impact_statement: Option<String>Free-form explanation paired with not_affected.
action_statement: Option<String>Canonical companion to status == affected (per spec).
We never emit affected today, but the field exists so the type
round-trips a richer doc through our parser.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Statement
impl<'de> Deserialize<'de> for Statement
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl StructuralPartialEq for Statement
Auto Trait Implementations§
impl Freeze for Statement
impl RefUnwindSafe for Statement
impl Send for Statement
impl Sync for Statement
impl Unpin for Statement
impl UnsafeUnpin for Statement
impl UnwindSafe for Statement
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> 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