ainl_contracts/
assertion.rs1use serde::{Deserialize, Serialize};
4
5use crate::feature::VerificationStep;
6
7#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[serde(transparent)]
10pub struct AssertionId(pub String);
11
12impl AssertionId {
13 pub fn as_str(&self) -> &str {
14 &self.0
15 }
16}
17
18impl From<String> for AssertionId {
19 fn from(s: String) -> Self {
20 Self(s)
21 }
22}
23
24impl From<&str> for AssertionId {
25 fn from(s: &str) -> Self {
26 Self(s.to_string())
27 }
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
32#[serde(rename_all = "snake_case")]
33pub enum AssertionState {
34 #[default]
35 Pending,
36 Passed,
37 Failed,
38 Blocked,
39}
40
41#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
43pub struct Assertion {
44 pub assertion_id: AssertionId,
45 pub description: String,
46 #[serde(default)]
47 pub verification_steps: Vec<VerificationStep>,
48 pub state: AssertionState,
49 #[serde(default, skip_serializing_if = "Option::is_none")]
50 pub milestone: Option<String>,
51 #[serde(default)]
52 pub failed_count: u32,
53}