@@ -32,6 +32,8 @@ pub struct StoredGroup {
32
32
pub membership_state : GroupMembershipState ,
33
33
/// Track when the latest, most recent installations were checked
34
34
pub installations_last_checked : i64 ,
35
+ /// Enum: `conversation = 1, sync = 2`
36
+ pub purpose : Purpose ,
35
37
}
36
38
37
39
impl_fetch ! ( StoredGroup , groups, Vec <u8 >) ;
@@ -44,6 +46,7 @@ impl StoredGroup {
44
46
created_at_ns,
45
47
membership_state,
46
48
installations_last_checked : 0 ,
49
+ purpose : Purpose :: Conversation ,
47
50
}
48
51
}
49
52
}
@@ -74,6 +77,8 @@ impl DbConnection<'_> {
74
77
query = query. limit ( limit) ;
75
78
}
76
79
80
+ query = query. filter ( dsl:: purpose. eq ( Purpose :: Conversation ) ) ;
81
+
77
82
Ok ( self . raw_query ( |conn| query. load ( conn) ) ?)
78
83
}
79
84
@@ -172,6 +177,37 @@ where
172
177
}
173
178
}
174
179
180
+ #[ repr( i32 ) ]
181
+ #[ derive( Debug , Clone , Copy , PartialEq , Eq , AsExpression , FromSqlRow ) ]
182
+ #[ diesel( sql_type = Integer ) ]
183
+ pub enum Purpose {
184
+ Conversation = 1 ,
185
+ Sync = 2 ,
186
+ }
187
+
188
+ impl ToSql < Integer , Sqlite > for Purpose
189
+ where
190
+ i32 : ToSql < Integer , Sqlite > ,
191
+ {
192
+ fn to_sql < ' b > ( & ' b self , out : & mut Output < ' b , ' _ , Sqlite > ) -> serialize:: Result {
193
+ out. set_value ( * self as i32 ) ;
194
+ Ok ( IsNull :: No )
195
+ }
196
+ }
197
+
198
+ impl FromSql < Integer , Sqlite > for Purpose
199
+ where
200
+ i32 : FromSql < Integer , Sqlite > ,
201
+ {
202
+ fn from_sql ( bytes : <Sqlite as Backend >:: RawValue < ' _ > ) -> deserialize:: Result < Self > {
203
+ match i32:: from_sql ( bytes) ? {
204
+ 1 => Ok ( Purpose :: Conversation ) ,
205
+ 2 => Ok ( Purpose :: Sync ) ,
206
+ x => Err ( format ! ( "Unrecognized variant {}" , x) . into ( ) ) ,
207
+ }
208
+ }
209
+ }
210
+
175
211
#[ cfg( test) ]
176
212
pub ( crate ) mod tests {
177
213
@@ -185,12 +221,10 @@ pub(crate) mod tests {
185
221
186
222
/// Generate a test group
187
223
pub fn generate_group ( state : Option < GroupMembershipState > ) -> StoredGroup {
188
- StoredGroup {
189
- id : rand_vec ( ) ,
190
- created_at_ns : now_ns ( ) ,
191
- membership_state : state. unwrap_or ( GroupMembershipState :: Allowed ) ,
192
- installations_last_checked : 0 ,
193
- }
224
+ let id = rand_vec ( ) ;
225
+ let created_at_ns = now_ns ( ) ;
226
+ let membership_state = state. unwrap_or ( GroupMembershipState :: Allowed ) ;
227
+ StoredGroup :: new ( id, created_at_ns, membership_state)
194
228
}
195
229
196
230
#[ test]
@@ -295,4 +329,24 @@ pub(crate) mod tests {
295
329
assert ! ( fetched_group. created_at_ns < fetched_group. installations_last_checked) ;
296
330
} )
297
331
}
332
+
333
+ #[ test]
334
+ fn test_new_group_has_correct_purpose ( ) {
335
+ with_connection ( |conn| {
336
+ let test_group = generate_group ( None ) ;
337
+
338
+ conn. raw_query ( |raw_conn| {
339
+ diesel:: insert_into ( groups)
340
+ . values ( test_group. clone ( ) )
341
+ . execute ( raw_conn)
342
+ } )
343
+ . unwrap ( ) ;
344
+
345
+ let fetched_group: Result < Option < StoredGroup > , StorageError > =
346
+ conn. fetch ( & test_group. id ) ;
347
+ assert_ok ! ( fetched_group, Some ( test_group) ) ;
348
+ let purpose = fetched_group. unwrap ( ) . unwrap ( ) . purpose ;
349
+ assert_eq ! ( purpose, Purpose :: Conversation ) ;
350
+ } )
351
+ }
298
352
}
0 commit comments