#![forbid(unsafe_code)]
use kcode_k1_chat_boxes::ToolCallId;
use kcode_k1_chat_web_code_output::WebCodeOutput;
use kcode_k1_web_code_ktool_service::CheckEvidence;
#[derive(Clone, Default)]
pub struct LatestCheckState {
state: State,
}
#[derive(Clone, Default)]
enum State {
#[default]
Empty,
Successful(CheckEvidence),
Failed(WebCodeOutput),
}
impl LatestCheckState {
pub fn new() -> Self {
Self::default()
}
pub fn clear(&mut self) {
self.state = State::Empty;
}
pub fn record_success(&mut self, evidence: CheckEvidence) {
self.state = State::Successful(evidence);
}
pub fn record_failure(&mut self, output: WebCodeOutput) {
self.state = State::Failed(output);
}
pub fn successful_evidence(&self) -> Option<&CheckEvidence> {
match &self.state {
State::Successful(evidence) => Some(evidence),
State::Empty | State::Failed(_) => None,
}
}
pub fn failed_for_publish(&self, tool_call_id: ToolCallId) -> Option<WebCodeOutput> {
let State::Failed(output) = &self.state else {
return None;
};
let mut output = output.clone();
output.tool_call_id = tool_call_id;
Some(output)
}
}