fromJson static method

ServerInfo fromJson(
  1. Map<String, Object?> json
)

Tolerant of anything the wire hands over: a section that does not have the expected shape reads back as absent rather than throwing — the same stance as tryDecodeFrame.

Implementation

static ServerInfo fromJson(Map<String, Object?> json) {
  List<T>? typedList<T>(Object? value, T? Function(Object?) parse) {
    if (value is! List) return null;
    var out = <T>[];
    for (var item in value) {
      var parsed = parse(item);
      if (parsed != null) out.add(parsed);
    }
    return out;
  }

  Map<String, Map<String, Object?>>? groups(Object? value) {
    if (value is! Map) return null;
    return {
      for (var entry in value.entries)
        if (entry.value is Map)
          '${entry.key}': (entry.value as Map).cast<String, Object?>(),
    };
  }

  return ServerInfo(
    baseUrl: _string(json['baseUrl']),
    environment: _string(json['environment']),
    links: typedList(json['links'], ServerLink.fromJson),
    connections: typedList(json['connections'], ServerConnection.fromJson),
    config: groups(json['config']),
  );
}