rstm_core/programs/
program_base.rs1use super::RawRuleset;
7use crate::rules::Instruction;
8use rstm_state::{RawState, State};
9
10#[derive(Clone, Copy, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
15#[cfg_attr(
16 feature = "serde",
17 derive(serde::Serialize, serde::Deserialize),
18 serde(deny_unknown_fields, rename_all = "snake_case")
19)]
20#[repr(C)]
21pub struct ProgramBase<R: ?Sized, Q, A, I = <R as RawRuleset<Q, A>>::Rule>
22where
23 Q: RawState,
24 R: RawRuleset<Q, A, Rule = I>,
25 I: Instruction<Q, A>,
26{
27 pub(crate) initial_state: Option<State<Q>>,
28 pub(crate) _marker: core::marker::PhantomData<(I, Q, A)>,
29 pub(crate) rules: R,
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35 use crate::rules::{Direction, Rule};
36
37 #[test]
38 fn test_program_base() {
39 let rule = Rule::from_parts(0, 'a', Direction::Right, 1, 'b');
40
41 let program = ProgramBase {
42 initial_state: Some(State::new(0)),
43 _marker: core::marker::PhantomData,
44 rules: [rule],
45 };
46 assert_eq!(program.initial_state, Some(State::new(0)));
47 }
48}