use super::*;
#[allow(clippy::enum_variant_names)]
#[derive(Clone, Debug, Deserialize)]
#[serde(tag = "reason", rename_all = "kebab-case")]
pub enum Message {
CompilerMessage(CompilerMessage),
CompilerArtifact,
BuildFinished,
BuildScriptExecuted,
#[serde(other)]
Other
}
#[derive(Clone, Debug, Deserialize)]
pub struct CompilerMessage {
pub message: CompilerMessageMessage
}
#[derive(Clone, Debug, Deserialize)]
pub struct CompilerMessageMessage {
pub rendered: String,
pub code: Option<CompilerMessageMessageCode>,
pub level: String,
pub message: String,
pub spans: Vec<CompilerMessageMessageSpan>
}
#[derive(Clone, Debug, Deserialize)]
pub struct CompilerMessageMessageCode {
pub code: String,
pub explanation: Option<String>
}
#[derive(Clone, Debug, Deserialize)]
pub struct CompilerMessageMessageSpan {
pub file_name: String,
pub line_start: usize,
pub line_end: usize,
pub column_start: usize,
pub column_end: usize,
}
impl Into<code_climate::CodeQualityReportLocation> for CompilerMessageMessageSpan {
fn into(self) -> code_climate::CodeQualityReportLocation {
code_climate::CodeQualityReportLocation {
path: self.file_name,
lines: None,
positions: Some(code_climate::CodeQualityReportPositions {
begin: code_climate::CodeQualityReportPosition::Coordinates {
line: self.line_start,
column: self.column_start
},
end: code_climate::CodeQualityReportPosition::Coordinates {
line: self.line_end,
column: self.column_end
}
})
}
}
}