Skip to content

Commit 5152d41

Browse files
committed
json: Implement JsonNullable.toJson and readFromJsonAssertingPresent
1 parent 0755c52 commit 5152d41

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

lib/api/model/json.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ class JsonNullable<T extends Object> {
2222
return map.containsKey(key) ? JsonNullable(map[key] as T?) : null;
2323
}
2424

25+
static T? readFromJsonAssertingPresent<T extends Object>(
26+
Map<dynamic, dynamic> map, String key) {
27+
return readFromJson<T>(map, key)!.value;
28+
}
29+
2530
@override
2631
bool operator ==(Object other) {
2732
if (other is! JsonNullable) return false;
@@ -30,6 +35,8 @@ class JsonNullable<T extends Object> {
3035

3136
@override
3237
int get hashCode => Object.hash('JsonNullable', value);
38+
39+
T? toJson() => value;
3340
}
3441

3542
class IdentityJsonConverter<T> extends JsonConverter<T, T> {

test/api/model/json_test.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import 'package:checks/checks.dart';
22
import 'package:test/scaffolding.dart';
33
import 'package:zulip/api/model/json.dart';
44

5+
import '../../stdlib_checks.dart';
6+
57
void main() {
68
group('JsonNullable', () {
79
test('value', () {
@@ -18,6 +20,23 @@ void main() {
1820
check(JsonNullable.readFromJson({'a': 3}, 'a')).equals(const JsonNullable(3));
1921
});
2022

23+
test('readFromJsonAssertingPresent', () {
24+
check(() => JsonNullable.readFromJsonAssertingPresent({}, 'a'))
25+
.throws<TypeError>();
26+
check(() => JsonNullable.readFromJsonAssertingPresent({'a': null}, 'a'))
27+
.returnsNormally().isNull();
28+
check(() => JsonNullable.readFromJsonAssertingPresent({'a': 3}, 'a'))
29+
.returnsNormally().equals(3);
30+
});
31+
32+
test('toJson / round-tripping', () {
33+
check(JsonNullable<int>(3).toJson()).equals(3);
34+
check(JsonNullable<int>(null).toJson()).equals(null);
35+
36+
check(JsonNullable.readFromJson({'a': null}, 'a')).jsonEquals(null);
37+
check(JsonNullable.readFromJson({'a': 3}, 'a')).jsonEquals(3);
38+
});
39+
2140
test('==/hashCode', () {
2241
// ignore: prefer_const_constructors
2342
check(JsonNullable<int>(null)).equals(JsonNullable(null));

0 commit comments

Comments
 (0)