use serde::Serialize;
use std::collections::BTreeMap;
#[derive(Debug, Clone, Serialize)]
pub struct SarifLog {
pub version: String,
#[serde(rename = "$schema")]
pub schema: String,
pub runs: Vec<SarifRun>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifRun {
pub tool: SarifTool,
pub results: Vec<SarifResult>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifTool {
pub driver: SarifDriver,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifDriver {
pub name: String,
pub version: String,
#[serde(rename = "informationUri")]
pub information_uri: String,
pub rules: Vec<SarifRule>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifRule {
pub id: String,
pub name: String,
#[serde(rename = "shortDescription")]
pub short_description: SarifMessage,
#[serde(rename = "fullDescription", skip_serializing_if = "Option::is_none")]
pub full_description: Option<SarifMessage>,
#[serde(rename = "helpUri", skip_serializing_if = "Option::is_none")]
pub help_uri: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub help: Option<SarifMessage>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifResult {
#[serde(rename = "ruleId")]
pub rule_id: String,
pub level: String,
pub message: SarifMessage,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub locations: Vec<SarifLocation>,
#[serde(
rename = "partialFingerprints",
skip_serializing_if = "BTreeMap::is_empty"
)]
pub partial_fingerprints: BTreeMap<String, String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub properties: Option<SarifResultProperties>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifResultProperties {
#[serde(rename = "baselineStatus", skip_serializing_if = "Option::is_none")]
pub baseline_status: Option<String>,
#[serde(rename = "baselineKey", skip_serializing_if = "Option::is_none")]
pub baseline_key: Option<String>,
#[serde(rename = "workspacePackage", skip_serializing_if = "Option::is_none")]
pub workspace_package: Option<String>,
pub category: String,
pub confidence: String,
pub recommendation: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifMessage {
pub text: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifLocation {
#[serde(rename = "physicalLocation")]
pub physical_location: SarifPhysicalLocation,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifPhysicalLocation {
#[serde(rename = "artifactLocation")]
pub artifact_location: SarifArtifactLocation,
#[serde(skip_serializing_if = "Option::is_none")]
pub region: Option<SarifRegion>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifArtifactLocation {
pub uri: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct SarifRegion {
#[serde(rename = "startLine")]
pub start_line: usize,
}