use bon::Builder;
use serde::{Deserialize, Serialize};
use strum_macros::Display;
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")] pub enum Status {
Converted,
Completed,
Prepared,
Validated,
Failed,
}
#[derive(Clone, Debug, Deserialize, Serialize, Display)]
#[serde(rename_all = "snake_case")] #[strum(serialize_all = "snake_case")]
pub enum Framework {
Spring,
Quarkus,
Jakarta,
}
#[derive(Debug, Serialize, Deserialize, Clone, Copy, Default)]
#[serde(rename_all = "UPPERCASE")]
pub enum ValidationOutcome {
True,
False,
#[default]
Unk,
}
#[derive(Debug, Clone, Serialize, Builder, Deserialize)]
pub struct Metadata {
pub status: Status,
pub agent: String,
pub app: String,
pub layer: String,
pub repeat: usize,
pub source_framework: Framework,
pub target_framework: Framework,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub num_smoke_tests: Option<u32>,
#[serde(default)]
pub compile_ok: ValidationOutcome,
#[serde(default)]
pub deploy_ok: ValidationOutcome,
#[serde(default)]
pub tests_passed: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub failure_reason: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub failure_category: Option<FailureCategory>,
#[serde(default, skip_serializing_if = "is_false")]
pub inconclusive: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub solution_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub variant: Option<String>,
}
#[derive(Debug, Clone, Serialize, Builder, Deserialize)]
pub struct SmokeTestMetadata {
pub(crate) num_smoke_tests: u32,
}
fn is_false(b: &bool) -> bool {
!b
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FailureCategory {
CompileError,
BuildConfigError,
BuildFailure,
DockerBuildError,
DockerImageMissing,
DockerRunError,
ContainerConflict,
DeployTimeout,
DeployError,
DeployFailure,
AppStartupFailure,
BuildOrDeployFailure,
CompileDependency,
DeployDependency,
TestFailure,
TestFailures,
TestParseError,
TestTimeoutOom,
NoTestOutput,
ValidationTruncated,
ProcessTerminated,
Timeout,
MissingLog,
Unknown,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Leaderboard {
pub solution: LeaderboardSolution,
pub results: Vec<LeaderboardResults>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct LeaderboardSolution {
pub agent: String,
pub model: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub variant: Option<String>,
pub date: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct LeaderboardResults {
pub from: String,
pub to: String,
pub layer: String,
pub app: String,
pub repeats: Vec<Repeat>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Repeat {
pub compile: bool,
pub run: bool,
pub tests_passed: u32,
pub tests_total: u32,
}