@@ -58,9 +58,9 @@ pub trait BaseGraph: Sized + GraphDeref
58
58
G :: ensure_all ( self , p)
59
59
}
60
60
}
61
- pub trait BaseGraphUnloaded : BaseGraph
61
+ pub trait BaseGraphGuard : BaseGraph
62
62
{
63
- fn ensure_all < G > ( self ) -> Result < G , ( ) >
63
+ fn guard_all < G > ( self ) -> Result < G , ( ) >
64
64
where
65
65
G : Ensure < Base = Self > ,
66
66
G :: Payload : Payload < ( ) , Item = ( ) > ,
@@ -72,26 +72,26 @@ pub trait BaseGraphUnloaded: BaseGraph
72
72
/// An implementing type ensures a base graph implementation.
73
73
///
74
74
/// Multiple levels of ensurers are supported.
75
- pub trait Ensure : Release
75
+ pub trait Ensure : ReleasePayload
76
76
{
77
- fn ensure_unvalidated (
77
+ fn ensure_unchecked (
78
78
c : Self :: Ensured ,
79
- p : <Self :: Payload as Payload < <Self :: Ensured as Release >:: Payload > >:: Item ,
79
+ p : <Self :: Payload as Payload < <Self :: Ensured as ReleasePayload >:: Payload > >:: Item ,
80
80
) -> Self ;
81
81
82
- fn validate (
82
+ fn can_ensure (
83
83
c : & Self :: Ensured ,
84
- p : & <Self :: Payload as Payload < <Self :: Ensured as Release >:: Payload > >:: Item ,
84
+ p : & <Self :: Payload as Payload < <Self :: Ensured as ReleasePayload >:: Payload > >:: Item ,
85
85
) -> bool ;
86
86
87
87
fn ensure (
88
88
c : Self :: Ensured ,
89
- p : <Self :: Payload as Payload < <Self :: Ensured as Release >:: Payload > >:: Item ,
89
+ p : <Self :: Payload as Payload < <Self :: Ensured as ReleasePayload >:: Payload > >:: Item ,
90
90
) -> Result < Self , ( ) >
91
91
{
92
- if Self :: validate ( & c, & p)
92
+ if Self :: can_ensure ( & c, & p)
93
93
{
94
- Ok ( Self :: ensure_unvalidated ( c, p) )
94
+ Ok ( Self :: ensure_unchecked ( c, p) )
95
95
}
96
96
else
97
97
{
@@ -105,89 +105,108 @@ pub trait Ensure: Release
105
105
Self :: ensure ( Self :: Ensured :: ensure_all ( g, rest) ?, p)
106
106
}
107
107
}
108
- pub trait EnsureUnloaded : Ensure
108
+ pub trait Guard : Ensure
109
109
where
110
- <Self as Release >:: Payload :
111
- Payload < <<Self as Release >:: Ensured as Release >:: Payload , Item = ( ) > ,
110
+ <Self as ReleasePayload >:: Payload :
111
+ Payload < <<Self as ReleasePayload >:: Ensured as ReleasePayload >:: Payload , Item = ( ) > ,
112
112
{
113
- fn ensure_unvalidated ( c : Self :: Ensured ) -> Self
113
+ fn guard_unchecked ( c : Self :: Ensured ) -> Self
114
114
{
115
- <Self as Ensure >:: ensure_unvalidated ( c, ( ) )
115
+ <Self as Ensure >:: ensure_unchecked ( c, ( ) )
116
116
}
117
- fn validate ( c : & Self :: Ensured ) -> bool
117
+ fn can_guard ( c : & Self :: Ensured ) -> bool
118
118
{
119
- <Self as Ensure >:: validate ( c, & ( ) )
119
+ <Self as Ensure >:: can_ensure ( c, & ( ) )
120
120
}
121
- fn ensure ( c : Self :: Ensured ) -> Result < Self , ( ) >
121
+ fn guard ( c : Self :: Ensured ) -> Result < Self , ( ) >
122
122
{
123
123
<Self as Ensure >:: ensure ( c, ( ) )
124
124
}
125
- fn ensure_all ( g : Self :: Base ) -> Result < Self , ( ) >
125
+ fn guard_all ( g : Self :: Base ) -> Result < Self , ( ) >
126
126
where
127
- <Self as Release >:: Payload : Payload < ( ) , Item = ( ) > ,
127
+ <Self as ReleasePayload >:: Payload : Payload < ( ) , Item = ( ) > ,
128
128
{
129
- Ensure :: ensure_all ( g, <<Self as Release >:: Payload >:: new ( ( ) , ( ) ) )
129
+ Ensure :: ensure_all ( g, <<Self as ReleasePayload >:: Payload >:: new ( ( ) , ( ) ) )
130
130
}
131
131
}
132
132
133
- pub trait Release : Sized + GraphDeref
133
+ /// Trait for remove one or more layers of ensurers, aka. releasing the
134
+ /// properties.
135
+ ///
136
+ /// A _layer_ is an ensurer that ensures some property holds.
137
+ /// The base graph does not count as a layer, the ensurer wrapping the base
138
+ /// graph is therefore the first layer. Each layer may need a payload. For
139
+ /// example, an ensurer guaranteeing that a given vertex exists may have the
140
+ /// vertex as a payload.
141
+ ///
142
+ pub trait ReleasePayload : Sized + GraphDeref
134
143
{
135
144
/// The base graph implementation being ensured
136
145
type Base : BaseGraph ;
137
146
138
- /// The next level of properties .
147
+ /// The inner ensurer being further ensured .
139
148
type Ensured : Ensure < Base = Self :: Base > ;
140
- type Payload : Payload < <Self :: Ensured as Release >:: Payload > ;
141
149
142
- /// Release only this level's properties, maintaining
143
- /// the next level's properties
150
+ /// The payload used to ensure this property holds.
151
+ type Payload : Payload < <Self :: Ensured as ReleasePayload >:: Payload > ;
152
+
153
+ /// ReleasePayload only this level's properties, maintaining
154
+ /// the next level's properties and returning the payload released
144
155
fn release (
145
156
self ,
146
157
) -> (
147
158
Self :: Ensured ,
148
- <Self :: Payload as Payload < <Self :: Ensured as Release >:: Payload > >:: Item ,
159
+ <Self :: Payload as Payload < <Self :: Ensured as ReleasePayload >:: Payload > >:: Item ,
149
160
) ;
150
161
151
- /// Fully release this type , returning the base graph implementation
152
- /// type
162
+ /// Fully release all ensurers , returning the base graph and the payload for
163
+ /// all levels
153
164
fn release_all ( self ) -> ( Self :: Base , Self :: Payload )
154
165
{
155
166
let ( ensured, payload) = self . release ( ) ;
156
- let ( base, payload_rest) = Release :: release_all ( ensured) ;
167
+ let ( base, payload_rest) = ReleasePayload :: release_all ( ensured) ;
157
168
( base, Payload :: new ( payload, payload_rest) )
158
169
}
159
170
}
160
- pub trait ReleaseUnloaded : Release
171
+
172
+ /// Equivalent to `ReleasePayload` except does not return any payload.
173
+ pub trait Release : ReleasePayload
161
174
{
162
- /// Release only this level's properties, maintaining
163
- /// the next level's properties
175
+ /// ReleasePayload only this level's properties, maintaining
176
+ /// the next level's properties and returning the payload released
177
+ ///
178
+ /// Like [ReleasePayload::release], but does not return the payload
179
+ /// released.
164
180
fn release ( self ) -> Self :: Ensured
165
181
{
166
- Release :: release ( self ) . 0
182
+ ReleasePayload :: release ( self ) . 0
167
183
}
168
184
169
- /// Fully release this type, returning the base graph implementation
170
- /// type
185
+ /// Fully release all ensurers, returning the base graph and the payload for
186
+ /// all levels
187
+ ///
188
+ /// Like [ReleasePayload::release_all], but does not return the payloads
189
+ /// released.
171
190
fn release_all ( self ) -> Self :: Base
172
191
{
173
- Release :: release_all ( self ) . 0
192
+ ReleasePayload :: release_all ( self ) . 0
174
193
}
175
194
}
176
195
177
196
impl < G : Graph , D : Deref < Target = G > > BaseGraph for D { }
178
197
impl < B : BaseGraph > Ensure for B
179
198
{
180
- fn ensure_unvalidated (
199
+ fn ensure_unchecked (
181
200
c : Self :: Ensured ,
182
- _: <Self :: Payload as Payload < <Self :: Ensured as Release >:: Payload > >:: Item ,
201
+ _: <Self :: Payload as Payload < <Self :: Ensured as ReleasePayload >:: Payload > >:: Item ,
183
202
) -> Self
184
203
{
185
204
c
186
205
}
187
206
188
- fn validate (
207
+ fn can_ensure (
189
208
_: & Self :: Ensured ,
190
- _: & <Self :: Payload as Payload < <Self :: Ensured as Release >:: Payload > >:: Item ,
209
+ _: & <Self :: Payload as Payload < <Self :: Ensured as ReleasePayload >:: Payload > >:: Item ,
191
210
) -> bool
192
211
{
193
212
true
@@ -198,7 +217,7 @@ impl<B: BaseGraph> Ensure for B
198
217
Ensure :: ensure ( g, ( ) )
199
218
}
200
219
}
201
- impl < B : BaseGraph > Release for B
220
+ impl < B : BaseGraph > ReleasePayload for B
202
221
{
203
222
type Base = Self ;
204
223
type Ensured = Self ;
@@ -214,9 +233,9 @@ impl<B: BaseGraph> Release for B
214
233
( self , ( ) )
215
234
}
216
235
}
217
- impl < B : BaseGraph > BaseGraphUnloaded for B { }
218
- impl < E : Ensure > EnsureUnloaded for E where
219
- E :: Payload : Payload < <E :: Ensured as Release >:: Payload , Item = ( ) >
236
+ impl < B : BaseGraph > BaseGraphGuard for B { }
237
+ impl < E : Ensure > Guard for E where
238
+ E :: Payload : Payload < <E :: Ensured as ReleasePayload >:: Payload , Item = ( ) >
220
239
{
221
240
}
222
- impl < E : Release > ReleaseUnloaded for E { }
241
+ impl < E : ReleasePayload > Release for E { }
0 commit comments