machine_check_common/
check.rs1use std::{collections::VecDeque, fmt::Display};
3
4use serde::{Deserialize, Serialize};
5
6use mck::refin::RefinementValue;
7
8use crate::StateId;
9
10#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
11pub enum KnownConclusion {
12    False,
13    True,
14    Dependent,
15}
16
17#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
21pub enum Conclusion {
22    Known(KnownConclusion),
23    Unknown(Culprit),
24    NotCheckable,
25}
26
27#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
32pub struct Culprit {
33    pub path: VecDeque<StateId>,
34    pub result: RefinementValue,
36    pub panic: RefinementValue,
37}
38
39impl KnownConclusion {
40    pub fn try_into_bool(self) -> Option<bool> {
41        match self {
42            KnownConclusion::False => Some(false),
43            KnownConclusion::True => Some(true),
44            KnownConclusion::Dependent => None,
45        }
46    }
47}
48
49impl Display for KnownConclusion {
50    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
51        let str = match self {
52            KnownConclusion::False => "false",
53            KnownConclusion::True => "true",
54            KnownConclusion::Dependent => "dependent",
55        };
56        write!(f, "{}", str)
57    }
58}