rstm_core/rules/impls/
impl_rule.rs1use crate::rules::Rule;
6use crate::state::RawState;
7use crate::types::{Head, Tail};
8
9impl<Q, S> core::convert::AsRef<Head<Q, S>> for Rule<Q, S>
10where
11 Q: RawState,
12{
13 fn as_ref(&self) -> &Head<Q, S> {
14 self.head()
15 }
16}
17
18impl<Q, S> core::convert::AsRef<Tail<Q, S>> for Rule<Q, S>
19where
20 Q: RawState,
21{
22 fn as_ref(&self) -> &Tail<Q, S> {
23 self.tail()
24 }
25}
26
27impl<Q, S> core::convert::AsMut<Head<Q, S>> for Rule<Q, S>
28where
29 Q: RawState,
30{
31 fn as_mut(&mut self) -> &mut Head<Q, S> {
32 self.head_mut()
33 }
34}
35
36impl<Q, S> core::convert::AsMut<Tail<Q, S>> for Rule<Q, S>
37where
38 Q: RawState,
39{
40 fn as_mut(&mut self) -> &mut Tail<Q, S> {
41 self.tail_mut()
42 }
43}
44
45impl<Q, S> core::borrow::Borrow<Head<Q, S>> for Rule<Q, S>
46where
47 Q: RawState,
48{
49 fn borrow(&self) -> &Head<Q, S> {
50 self.head()
51 }
52}
53
54impl<Q, S> core::borrow::Borrow<Tail<Q, S>> for Rule<Q, S>
55where
56 Q: RawState,
57{
58 fn borrow(&self) -> &Tail<Q, S> {
59 self.tail()
60 }
61}
62
63impl<Q, S> core::borrow::BorrowMut<Head<Q, S>> for Rule<Q, S>
64where
65 Q: RawState,
66{
67 fn borrow_mut(&mut self) -> &mut Head<Q, S> {
68 self.head_mut()
69 }
70}
71
72impl<Q, S> core::borrow::BorrowMut<Tail<Q, S>> for Rule<Q, S>
73where
74 Q: RawState,
75{
76 fn borrow_mut(&mut self) -> &mut Tail<Q, S> {
77 self.tail_mut()
78 }
79}
80
81impl<Q, S> PartialEq<(Head<Q, S>, Tail<Q, S>)> for Rule<Q, S>
82where
83 Q: RawState + PartialEq,
84 S: PartialEq,
85{
86 fn eq(&self, other: &(Head<Q, S>, Tail<Q, S>)) -> bool {
87 self.head == other.0 && self.tail == other.1
88 }
89}
90
91impl<Q, S> PartialEq<Head<Q, S>> for Rule<Q, S>
92where
93 Q: RawState + PartialEq,
94 S: PartialEq,
95{
96 fn eq(&self, other: &Head<Q, S>) -> bool {
97 &self.head == other
98 }
99}
100
101impl<Q, S> PartialEq<Tail<Q, S>> for Rule<Q, S>
102where
103 Q: RawState + PartialEq,
104 S: PartialEq,
105{
106 fn eq(&self, other: &Tail<Q, S>) -> bool {
107 &self.tail == other
108 }
109}
110
111impl<Q, S> From<(Head<Q, S>, Tail<Q, S>)> for Rule<Q, S>
112where
113 Q: RawState,
114{
115 fn from((head, tail): (Head<Q, S>, Tail<Q, S>)) -> Self {
116 Self { head, tail }
117 }
118}
119
120impl<Q, S> From<Rule<Q, S>> for (Head<Q, S>, Tail<Q, S>)
121where
122 Q: RawState,
123{
124 fn from(rule: Rule<Q, S>) -> Self {
125 (rule.head, rule.tail)
126 }
127}