@@ -26,6 +26,14 @@ abstract class Event {
26
26
default : return UnexpectedEvent .fromJson (json);
27
27
}
28
28
case 'message' : return MessageEvent .fromJson (json);
29
+ case 'stream' :
30
+ final op = json['op' ] as String ;
31
+ switch (op) {
32
+ case 'create' : return StreamCreateEvent .fromJson (json);
33
+ case 'delete' : return StreamDeleteEvent .fromJson (json);
34
+ // TODO(#182): case 'update': …
35
+ default : return UnexpectedEvent .fromJson (json);
36
+ }
29
37
case 'heartbeat' : return HeartbeatEvent .fromJson (json);
30
38
// TODO add many more event types
31
39
default : return UnexpectedEvent .fromJson (json);
@@ -215,6 +223,54 @@ class MessageEvent extends Event {
215
223
}
216
224
}
217
225
226
+ /// A Zulip event of type `stream` .
227
+ abstract class StreamEvent extends Event {
228
+ @override
229
+ @JsonKey (includeToJson: true )
230
+ String get type => 'stream' ;
231
+
232
+ String get op;
233
+
234
+ StreamEvent ({required super .id});
235
+ }
236
+
237
+ /// A [StreamEvent] with op `create` : https://zulip.com/api/get-events#stream-create
238
+ @JsonSerializable (fieldRename: FieldRename .snake)
239
+ class StreamCreateEvent extends StreamEvent {
240
+ @override
241
+ String get op => 'create' ;
242
+
243
+ final List <ZulipStream > streams;
244
+
245
+ StreamCreateEvent ({required super .id, required this .streams});
246
+
247
+ factory StreamCreateEvent .fromJson (Map <String , dynamic > json) =>
248
+ _$StreamCreateEventFromJson (json);
249
+
250
+ @override
251
+ Map <String , dynamic > toJson () => _$StreamCreateEventToJson (this );
252
+ }
253
+
254
+ /// A [StreamEvent] with op `delete` : https://zulip.com/api/get-events#stream-delete
255
+ @JsonSerializable (fieldRename: FieldRename .snake)
256
+ class StreamDeleteEvent extends StreamEvent {
257
+ @override
258
+ String get op => 'delete' ;
259
+
260
+ final List <ZulipStream > streams;
261
+
262
+ StreamDeleteEvent ({required super .id, required this .streams});
263
+
264
+ factory StreamDeleteEvent .fromJson (Map <String , dynamic > json) =>
265
+ _$StreamDeleteEventFromJson (json);
266
+
267
+ @override
268
+ Map <String , dynamic > toJson () => _$StreamDeleteEventToJson (this );
269
+ }
270
+
271
+ // TODO(#182) StreamUpdateEvent, for a [StreamEvent] with op `update`:
272
+ // https://zulip.com/api/get-events#stream-update
273
+
218
274
@JsonSerializable (fieldRename: FieldRename .snake)
219
275
class HeartbeatEvent extends Event {
220
276
@override
0 commit comments