use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct Producer {
pub tool: String,
pub version: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub git_commit: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub features: Vec<String>,
}
impl Producer {
pub fn powerio() -> Self {
Self {
tool: "powerio".to_owned(),
version: env!("CARGO_PKG_VERSION").to_owned(),
git_commit: None,
features: Vec::new(),
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(tag = "kind", rename_all = "snake_case")]
#[non_exhaustive]
pub enum Origin {
InMemory,
File {
path: String,
format: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
hash: Option<String>,
#[serde(default)]
retained_source: bool,
},
Folder {
path: String,
format: String,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
file_hashes: BTreeMap<String, String>,
},
BinaryFile {
path: String,
format: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
hash: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
decoded_sections: Vec<String>,
},
Derived {
#[serde(default, skip_serializing_if = "Option::is_none")]
parent_package_id: Option<String>,
pass: String,
#[serde(default, skip_serializing_if = "serde_json::Map::is_empty")]
options: serde_json::Map<String, serde_json::Value>,
},
Composite { sources: Vec<String> },
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct SourceDescriptor {
pub id: String,
pub kind: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub hash: Option<String>,
}
pub use crate::stored::legacy09::legacy_diag::SourceRef;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum MappingKind {
Exact,
Defaulted,
Inferred,
ConvertedUnits,
Lowered,
Aggregated,
Split,
Synthetic,
RetainedExtra,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum Confidence {
Exact,
High,
Medium,
Low,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct SourceMapEntry {
pub element_path: String,
pub source_ref: SourceRef,
pub mapping_kind: MappingKind,
pub confidence: Confidence,
}