ImmutableKind<T>.jsonSerializable constructor
ImmutableKind<T>.jsonSerializable ({})
Creates a kind for any JSON-serializable class.
This is convenient if you already have fromJson
factory and don't want
to invest time in writing a mapper.
Example
import 'package:kind/kind.dart';
final exampleKind = ImmutableKind<Example>.jsonSerializable(
fromJson: Example.fromJson,
);
class Example {
factory Example.fromJson(Map<String,dynamic> json) {
// ...
}
Map<String,dynamic> toJson() {
// ...
}
}
Implementation
factory ImmutableKind.jsonSerializable({
String? name,
String? jsonName,
Map<String, Kind>? kinds,
T Function(Mapper f, T t)? walk,
required T Function(Map<String, dynamic> json) fromJson,
Map<String, dynamic> Function(T object)? toJson,
Map<String, T>? constantsByName,
}) {
Map<String, Object?> defaultToJson(T object) {
return (object as dynamic).toJson();
}
T defaultWalk(Mapper f, T t) {
final json = defaultToJson(t);
json.forEach((key, value) {
final kind = kinds?[key];
if (kind == null) {
f(value, key);
} else {
final decodedValue = kind.decodeJsonTree(value);
f(decodedValue, key, kind: kind);
}
});
return t;
}
toJson ??= defaultToJson;
walk ??= defaultWalk;
return ImmutableKind<T>.withConstructor(
name: name,
jsonName: jsonName,
constructor: () => fromJson({}),
walk: walk,
fromJson: fromJson,
toJson: toJson,
);
}