use relative_path::RelativePathBuf;
use crate::{
FmtHash, Line,
report::{
annotations::ResolvedAnnotations, product::ProductMetadata, review::ReviewReference,
sources::SourceProductCoverageSummary, tests::TestReference,
},
};
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct SourceFileReportSchema {
#[serde(serialize_with = "crate::serialize_schema_version")]
pub schema_version: Option<String>,
#[schemars(with = "String")]
pub filepath: RelativePathBuf,
pub hashed_info: Vec<HashedSourceFileInfo>,
pub product_coverage: Option<Vec<SourceFileProductCoverage>>,
pub collected_by: Vec<ProductMetadata>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct HashedSourceFileInfo {
pub file_hash: FmtHash,
pub content: Option<String>,
pub annotations: Option<ResolvedAnnotations>,
pub product_coverage: Option<Vec<SourceFileProductCoverage>>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct SourceFileProductCoverage {
pub product: ProductMetadata,
pub summary: SourceProductCoverageSummary,
pub lines: Vec<SourceLineInfo>,
}
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema,
)]
#[serde(rename_all = "snake_case")]
pub struct SourceLineInfo {
pub nr: Line,
pub state: ResolvedLineState,
}
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema,
)]
#[serde(rename_all = "snake_case")]
pub enum ResolvedLineState {
Covered(Vec<CoveredLineTestReference>),
Excluded(Option<ExclusionAnnotationReference>),
Overriden(Vec<ReviewOverride>),
Uncovered,
}
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema,
)]
pub struct CoveredLineTestReference {
pub test: TestReference,
pub hits: i64,
}
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema,
)]
pub struct ReviewOverride {
pub review: ReviewReference,
pub original_hits: Option<i64>,
pub set_hits: Option<i64>,
pub comment: String,
}
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema,
)]
pub struct ExclusionAnnotationReference {
pub def_line: Line,
pub comment: String,
}