import 'package:json_annotation/json_annotation.dart'; import '../utils/json_utils.dart'; part 'media_provider_info.g.dart'; List _parseFeatures(Object? raw) => parseFlexibleJsonList(raw, MediaProviderFeature.fromJson); List> _parseRawMaps(Object? raw) => flexibleMapList(raw); @JsonSerializable(createToJson: false) class MediaProviderInfo { @JsonKey(fromJson: flexibleInt) final int? id; @JsonKey(fromJson: flexibleInt) final int? parentID; @JsonKey(defaultValue: '') final String identifier; final String? providerIdentifier; final String? title; final String? types; final String? protocols; final String? epgSource; final String? friendlyName; @JsonKey(name: 'Feature', fromJson: _parseFeatures) final List features; const MediaProviderInfo({ this.id, this.parentID, required this.identifier, this.providerIdentifier, this.title, this.types, this.protocols, this.epgSource, this.friendlyName, this.features = const [], }); factory MediaProviderInfo.fromJson(Map json) => _$MediaProviderInfoFromJson(json); } @JsonSerializable(createToJson: false) class MediaProviderFeature { final String? key; @JsonKey(defaultValue: '') final String type; final String? flavor; final String? scrobbleKey; final String? unscrobbleKey; @JsonKey(name: 'Directory', fromJson: _parseRawMaps) final List> directories; @JsonKey(name: 'Action', fromJson: _parseRawMaps) final List> actions; @JsonKey(name: 'Pivot', fromJson: _parseRawMaps) final List> pivots; const MediaProviderFeature({ this.key, required this.type, this.flavor, this.scrobbleKey, this.unscrobbleKey, this.directories = const [], this.actions = const [], this.pivots = const [], }); factory MediaProviderFeature.fromJson(Map json) => _$MediaProviderFeatureFromJson(json); }