@@ -26,6 +26,14 @@ abstract class Event {
2626 default : return UnexpectedEvent .fromJson (json);
2727 }
2828 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+ }
2937 case 'heartbeat' : return HeartbeatEvent .fromJson (json);
3038 // TODO add many more event types
3139 default : return UnexpectedEvent .fromJson (json);
@@ -215,6 +223,54 @@ class MessageEvent extends Event {
215223 }
216224}
217225
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+
218274@JsonSerializable (fieldRename: FieldRename .snake)
219275class HeartbeatEvent extends Event {
220276 @override
0 commit comments