@@ -25,6 +25,14 @@ abstract class Event {
25
25
case 'update' : return RealmUserUpdateEvent .fromJson (json);
26
26
default : return UnexpectedEvent .fromJson (json);
27
27
}
28
+ case 'stream' :
29
+ final op = json['op' ] as String ;
30
+ switch (op) {
31
+ case 'create' : return StreamCreateEvent .fromJson (json);
32
+ case 'delete' : return StreamDeleteEvent .fromJson (json);
33
+ // TODO(#182): case 'update': …
34
+ default : return UnexpectedEvent .fromJson (json);
35
+ }
28
36
case 'message' : return MessageEvent .fromJson (json);
29
37
case 'heartbeat' : return HeartbeatEvent .fromJson (json);
30
38
// TODO add many more event types
@@ -179,6 +187,54 @@ class RealmUserUpdateEvent extends RealmUserEvent {
179
187
Map <String , dynamic > toJson () => _$RealmUserUpdateEventToJson (this );
180
188
}
181
189
190
+ /// A Zulip event of type `stream` .
191
+ abstract class StreamEvent extends Event {
192
+ @override
193
+ @JsonKey (includeToJson: true )
194
+ String get type => 'stream' ;
195
+
196
+ String get op;
197
+
198
+ StreamEvent ({required super .id});
199
+ }
200
+
201
+ /// A [StreamEvent] with op `create` : https://zulip.com/api/get-events#stream-create
202
+ @JsonSerializable (fieldRename: FieldRename .snake)
203
+ class StreamCreateEvent extends StreamEvent {
204
+ @override
205
+ String get op => 'create' ;
206
+
207
+ final List <ZulipStream > streams;
208
+
209
+ StreamCreateEvent ({required super .id, required this .streams});
210
+
211
+ factory StreamCreateEvent .fromJson (Map <String , dynamic > json) =>
212
+ _$StreamCreateEventFromJson (json);
213
+
214
+ @override
215
+ Map <String , dynamic > toJson () => _$StreamCreateEventToJson (this );
216
+ }
217
+
218
+ /// A [StreamEvent] with op `delete` : https://zulip.com/api/get-events#stream-delete
219
+ @JsonSerializable (fieldRename: FieldRename .snake)
220
+ class StreamDeleteEvent extends StreamEvent {
221
+ @override
222
+ String get op => 'delete' ;
223
+
224
+ final List <ZulipStream > streams;
225
+
226
+ StreamDeleteEvent ({required super .id, required this .streams});
227
+
228
+ factory StreamDeleteEvent .fromJson (Map <String , dynamic > json) =>
229
+ _$StreamDeleteEventFromJson (json);
230
+
231
+ @override
232
+ Map <String , dynamic > toJson () => _$StreamDeleteEventToJson (this );
233
+ }
234
+
235
+ // TODO(#182) StreamUpdateEvent, for a [StreamEvent] with op `update`:
236
+ // https://zulip.com/api/get-events#stream-update
237
+
182
238
/// A Zulip event of type `message` .
183
239
// TODO use [JsonSerializable] here too, using its customization features,
184
240
// in order to skip the boilerplate in [fromJson] and [toJson].
0 commit comments