@@ -89,107 +89,7 @@ pub trait Storable<P: HasDims + ?Sized>: Send + Sync {
89
89
fn item_type ( parent : & P , item : & str ) -> ItemType ;
90
90
fn dims < ' a > ( parent : & ' a P , item : & str ) -> Vec < & ' a str > ;
91
91
92
- fn get_all ( & self , parent : & P ) -> Vec < ( & str , Option < Value > ) > ;
93
-
94
- fn get_f64 ( & self , parent : & P , name : & str ) -> Option < f64 > {
95
- self . get_all ( parent)
96
- . into_iter ( )
97
- . find ( |( item_name, _) | * item_name == name)
98
- . and_then ( |( _, value) | match value {
99
- Some ( Value :: ScalarF64 ( v) ) => Some ( v) ,
100
- _ => None ,
101
- } )
102
- }
103
-
104
- fn get_f32 ( & self , parent : & P , name : & str ) -> Option < f32 > {
105
- self . get_all ( parent)
106
- . into_iter ( )
107
- . find ( |( item_name, _) | * item_name == name)
108
- . and_then ( |( _, value) | match value {
109
- Some ( Value :: ScalarF32 ( v) ) => Some ( v) ,
110
- _ => None ,
111
- } )
112
- }
113
-
114
- fn get_u64 ( & self , parent : & P , name : & str ) -> Option < u64 > {
115
- self . get_all ( parent)
116
- . into_iter ( )
117
- . find ( |( item_name, _) | * item_name == name)
118
- . and_then ( |( _, value) | match value {
119
- Some ( Value :: ScalarU64 ( v) ) => Some ( v) ,
120
- _ => None ,
121
- } )
122
- }
123
-
124
- fn get_i64 ( & self , parent : & P , name : & str ) -> Option < i64 > {
125
- self . get_all ( parent)
126
- . into_iter ( )
127
- . find ( |( item_name, _) | * item_name == name)
128
- . and_then ( |( _, value) | match value {
129
- Some ( Value :: ScalarI64 ( v) ) => Some ( v) ,
130
- _ => None ,
131
- } )
132
- }
133
-
134
- fn get_bool ( & self , parent : & P , name : & str ) -> Option < bool > {
135
- self . get_all ( parent)
136
- . into_iter ( )
137
- . find ( |( item_name, _) | * item_name == name)
138
- . and_then ( |( _, value) | match value {
139
- Some ( Value :: ScalarBool ( v) ) => Some ( v) ,
140
- _ => None ,
141
- } )
142
- }
143
-
144
- fn get_vec_f64 ( & self , parent : & P , name : & str ) -> Option < Vec < f64 > > {
145
- self . get_all ( parent)
146
- . into_iter ( )
147
- . find ( |( item_name, _) | * item_name == name)
148
- . and_then ( |( _, value) | match value {
149
- Some ( Value :: F64 ( v) ) => Some ( v) ,
150
- _ => None ,
151
- } )
152
- }
153
-
154
- fn get_vec_f32 ( & self , parent : & P , name : & str ) -> Option < Vec < f32 > > {
155
- self . get_all ( parent)
156
- . into_iter ( )
157
- . find ( |( item_name, _) | * item_name == name)
158
- . and_then ( |( _, value) | match value {
159
- Some ( Value :: F32 ( v) ) => Some ( v) ,
160
- _ => None ,
161
- } )
162
- }
163
-
164
- fn get_vec_u64 ( & self , parent : & P , name : & str ) -> Option < Vec < u64 > > {
165
- self . get_all ( parent)
166
- . into_iter ( )
167
- . find ( |( item_name, _) | * item_name == name)
168
- . and_then ( |( _, value) | match value {
169
- Some ( Value :: U64 ( v) ) => Some ( v) ,
170
- _ => None ,
171
- } )
172
- }
173
-
174
- fn get_vec_i64 ( & self , parent : & P , name : & str ) -> Option < Vec < i64 > > {
175
- self . get_all ( parent)
176
- . into_iter ( )
177
- . find ( |( item_name, _) | * item_name == name)
178
- . and_then ( |( _, value) | match value {
179
- Some ( Value :: I64 ( v) ) => Some ( v) ,
180
- _ => None ,
181
- } )
182
- }
183
-
184
- fn get_vec_bool ( & self , parent : & P , name : & str ) -> Option < Vec < bool > > {
185
- self . get_all ( parent)
186
- . into_iter ( )
187
- . find ( |( item_name, _) | * item_name == name)
188
- . and_then ( |( _, value) | match value {
189
- Some ( Value :: Bool ( v) ) => Some ( v) ,
190
- _ => None ,
191
- } )
192
- }
92
+ fn get_all < ' a > ( & ' a mut self , parent : & ' a P ) -> Vec < ( & ' a str , Option < Value > ) > ;
193
93
}
194
94
195
95
impl < P : HasDims > Storable < P > for Vec < f64 > {
@@ -205,7 +105,7 @@ impl<P: HasDims> Storable<P> for Vec<f64> {
205
105
vec ! [ "dim" ]
206
106
}
207
107
208
- fn get_all ( & self , _parent : & P ) -> Vec < ( & str , Option < Value > ) > {
108
+ fn get_all < ' a > ( & ' a mut self , _parent : & ' a P ) -> Vec < ( & ' a str , Option < Value > ) > {
209
109
vec ! [ ( "value" , Some ( Value :: F64 ( self . clone( ) ) ) ) ]
210
110
}
211
111
}
@@ -223,7 +123,7 @@ impl<P: HasDims> Storable<P> for () {
223
123
panic ! ( "No items in unit type" )
224
124
}
225
125
226
- fn get_all ( & self , _parent : & P ) -> Vec < ( & str , Option < Value > ) > {
126
+ fn get_all ( & mut self , _parent : & P ) -> Vec < ( & str , Option < Value > ) > {
227
127
vec ! [ ]
228
128
}
229
129
}
0 commit comments