@@ -30,6 +30,14 @@ sealed class Event {
30
30
default : return UnexpectedEvent .fromJson (json);
31
31
}
32
32
case 'custom_profile_fields' : return CustomProfileFieldsEvent .fromJson (json);
33
+ case 'user_group' :
34
+ switch (json['op' ] as String ) {
35
+ case 'add' : return UserGroupAddEvent .fromJson (json);
36
+ case 'update' : return UserGroupUpdateEvent .fromJson (json);
37
+ // TODO(#1687): add_members, remove_members, add_subgroups, remove_subgroups
38
+ case 'remove' : return UserGroupRemoveEvent .fromJson (json);
39
+ default : return UnexpectedEvent .fromJson (json);
40
+ }
33
41
case 'realm_user' :
34
42
switch (json['op' ] as String ) {
35
43
case 'add' : return RealmUserAddEvent .fromJson (json);
@@ -206,6 +214,85 @@ class CustomProfileFieldsEvent extends Event {
206
214
Map <String , dynamic > toJson () => _$CustomProfileFieldsEventToJson (this );
207
215
}
208
216
217
+ /// A Zulip event of type `user_group` .
218
+ ///
219
+ /// See API docs starting at:
220
+ /// https://zulip.com/api/get-events#user_group-add
221
+ sealed class UserGroupEvent extends Event {
222
+ @override
223
+ @JsonKey (includeToJson: true )
224
+ String get type => 'user_group' ;
225
+
226
+ String get op;
227
+
228
+ UserGroupEvent ({required super .id});
229
+ }
230
+
231
+ /// A [UserGroupEvent] with op `add` : https://zulip.com/api/get-events#user_group-add
232
+ @JsonSerializable (fieldRename: FieldRename .snake)
233
+ class UserGroupAddEvent extends UserGroupEvent {
234
+ @override
235
+ @JsonKey (includeToJson: true )
236
+ String get op => 'add' ;
237
+
238
+ final UserGroup group;
239
+
240
+ UserGroupAddEvent ({required super .id, required this .group});
241
+
242
+ factory UserGroupAddEvent .fromJson (Map <String , dynamic > json) => _$UserGroupAddEventFromJson (json);
243
+
244
+ @override
245
+ Map <String , dynamic > toJson () => _$UserGroupAddEventToJson (this );
246
+ }
247
+
248
+ /// A [UserGroupEvent] with op `update` : https://zulip.com/api/get-events#user_group-update
249
+ @JsonSerializable (fieldRename: FieldRename .snake)
250
+ class UserGroupUpdateEvent extends UserGroupEvent {
251
+ @override
252
+ @JsonKey (includeToJson: true )
253
+ String get op => 'update' ;
254
+
255
+ final int groupId;
256
+ final UserGroupUpdateData data;
257
+
258
+ UserGroupUpdateEvent ({required super .id, required this .groupId, required this .data});
259
+
260
+ factory UserGroupUpdateEvent .fromJson (Map <String , dynamic > json) => _$UserGroupUpdateEventFromJson (json);
261
+
262
+ @override
263
+ Map <String , dynamic > toJson () => _$UserGroupUpdateEventToJson (this );
264
+ }
265
+
266
+ @JsonSerializable (fieldRename: FieldRename .snake)
267
+ class UserGroupUpdateData {
268
+ final String ? name;
269
+ final String ? description;
270
+ final bool ? deactivated;
271
+
272
+ UserGroupUpdateData ({required this .name, required this .description, required this .deactivated});
273
+
274
+ factory UserGroupUpdateData .fromJson (Map <String , dynamic > json) => _$UserGroupUpdateDataFromJson (json);
275
+
276
+ Map <String , dynamic > toJson () => _$UserGroupUpdateDataToJson (this );
277
+ }
278
+
279
+ /// A [UserGroupEvent] with op `remove` : https://zulip.com/api/get-events#user_group-remove
280
+ @JsonSerializable (fieldRename: FieldRename .snake)
281
+ class UserGroupRemoveEvent extends UserGroupEvent {
282
+ @override
283
+ @JsonKey (includeToJson: true )
284
+ String get op => 'remove' ;
285
+
286
+ final int groupId;
287
+
288
+ UserGroupRemoveEvent ({required super .id, required this .groupId});
289
+
290
+ factory UserGroupRemoveEvent .fromJson (Map <String , dynamic > json) => _$UserGroupRemoveEventFromJson (json);
291
+
292
+ @override
293
+ Map <String , dynamic > toJson () => _$UserGroupRemoveEventToJson (this );
294
+ }
295
+
209
296
/// A Zulip event of type `realm_user` .
210
297
///
211
298
/// The corresponding API docs are in several places for
0 commit comments