use relative_path::RelativePathBuf;
use crate::{
FmtHash, Line, LineSpan, Properties,
annotations::{CoverageExclude, ElementKind, TraceKind, TraceRelatedCodeVariant},
product::ProductId,
report::{Aggregated, requirement::RequirementReference},
requirements::ReqId,
};
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema,
)]
#[serde(rename_all = "snake_case")]
pub struct TraceReference {
#[schemars(with = "String")]
pub filepath: RelativePathBuf,
pub file_hash: FmtHash,
pub line: Line,
pub kind: TraceKind,
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
schemars::JsonSchema,
)]
pub struct TracesSummary {
pub total: i64,
pub satisfies: Aggregated,
pub verifies: Aggregated,
pub clarifies: Aggregated,
pub links: Aggregated,
}
impl TracesSummary {
pub fn add(&mut self, other: &Self) {
self.total += other.total;
self.satisfies.cnt += other.satisfies.cnt;
self.verifies.cnt += other.verifies.cnt;
self.clarifies.cnt += other.clarifies.cnt;
self.links.cnt += other.links.cnt;
self.update_percentages();
}
pub fn update_percentages(&mut self) {
self.satisfies.update_percentage(self.total);
self.verifies.update_percentage(self.total);
self.clarifies.update_percentage(self.total);
self.links.update_percentage(self.total);
}
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct ResolvedAnnotations {
pub traces: Option<Vec<ResolvedTrace>>,
pub elements: Option<Vec<ResolvedElement>>,
pub coverage_excludes: Option<Vec<CoverageExclude>>,
}
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema,
)]
#[serde(rename_all = "snake_case")]
pub struct ResolvedTrace {
pub resolved_ids: Vec<RequirementReference>,
pub unknown_ids: Vec<ReqId>,
pub line: Line,
pub related_code: Option<TraceRelatedCodeVariant>,
pub kind: TraceKind,
pub properties: Option<Properties>,
}
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema,
)]
#[serde(rename_all = "snake_case")]
pub struct ResolvedElement {
pub idents: Option<Vec<ResolvedElementIdent>>,
pub name: String,
pub definition_line: Line,
pub span: LineSpan,
pub kind: ElementKind,
}
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema,
)]
#[serde(rename_all = "snake_case")]
pub struct ResolvedElementIdent {
pub ident: String,
pub product_ids: Vec<ProductId>,
}