use std::sync::{
Arc, Mutex,
atomic::{AtomicBool, Ordering},
};
use super::output::Output;
use crate::connection::information_packet::Content;
#[derive(Debug)]
pub(crate) struct ExecState {
success: AtomicBool,
output: Arc<Mutex<Output>>,
}
impl ExecState {
pub(crate) fn new() -> Self {
Self {
success: AtomicBool::new(false),
output: Arc::new(Mutex::new(Output::empty())),
}
}
pub(crate) fn set_output(&self, output: Output) {
self.success.store(true, Ordering::Relaxed);
*self.output.lock().unwrap() = output;
}
pub(crate) fn get_output(&self) -> Option<Content> {
self.output.lock().unwrap().get_out()
}
pub(crate) fn get_full_output(&self) -> Output {
self.output.lock().unwrap().clone()
}
pub(crate) fn exe_success(&self) {
self.success.store(true, Ordering::Relaxed)
}
pub(crate) fn exe_fail(&self) {
self.success.store(false, Ordering::Relaxed)
}
}