Add tool quality report contract
This commit is contained in:
@@ -9,6 +9,7 @@ pub mod observability;
|
||||
pub mod operation;
|
||||
pub mod protocol;
|
||||
pub mod secret;
|
||||
pub mod tool_quality;
|
||||
pub mod workspace;
|
||||
|
||||
pub use access::{
|
||||
@@ -61,4 +62,5 @@ pub use operation::{
|
||||
};
|
||||
pub use protocol::{AuthKind, ExportMode, HttpMethod, Protocol};
|
||||
pub use secret::{Secret, SecretKind, SecretStatus, SecretVersion};
|
||||
pub use tool_quality::{ToolQualityFinding, ToolQualityReport, ToolQualitySeverity};
|
||||
pub use workspace::{Workspace, WorkspaceStatus};
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum ToolQualitySeverity {
|
||||
Info,
|
||||
Warning,
|
||||
Error,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct ToolQualityFinding {
|
||||
pub severity: ToolQualitySeverity,
|
||||
pub code: String,
|
||||
pub message: String,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub suggested_action: Option<String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub field_path: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct ToolQualityReport {
|
||||
pub blocking: bool,
|
||||
pub findings: Vec<ToolQualityFinding>,
|
||||
}
|
||||
|
||||
impl ToolQualityReport {
|
||||
pub fn new(findings: Vec<ToolQualityFinding>) -> Self {
|
||||
let blocking = findings
|
||||
.iter()
|
||||
.any(|finding| finding.severity == ToolQualitySeverity::Error);
|
||||
|
||||
Self { blocking, findings }
|
||||
}
|
||||
|
||||
pub fn empty() -> Self {
|
||||
Self::new(Vec::new())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user