kcode-k1-chat-thread-web-code-check-state 0.1.0

Pure conversation-local latest-check state for K1 Chat Web-code tasks
Documentation
#![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)
    }
}