PatchbayPermissionDriverResponse.fromJson constructor

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

Implementation

factory PatchbayPermissionDriverResponse.fromJson(Map<String, Object?> json) {
  final String admission = _requiredString(
    json['admission'],
    'permissionDriverResponseInvalid',
  );
  if (admission != 'accepted' && admission != 'rejected') {
    throw const PatchbayPermissionWireException(
      'permissionDriverResponseInvalid',
    );
  }
  final Object? rawRejection = json['rejection'];
  if (admission == 'rejected' && rawRejection is! Map<Object?, Object?>) {
    throw const PatchbayPermissionWireException(
      'permissionDriverResponseInvalid',
    );
  }
  final Map<Object?, Object?>? rejection =
      rawRejection is Map<Object?, Object?> ? rawRejection : null;
  final Object? rawDetails =
      rejection?['details'] ?? const <String, Object?>{};
  if (rawDetails is! Map<Object?, Object?>) {
    throw const PatchbayPermissionWireException(
      'permissionDriverResponseInvalid',
    );
  }
  final Object? rawEvidence = json['evidence'] ?? const <Object?>[];
  if (rawEvidence is! List<Object?> ||
      rawEvidence.any((Object? item) => item is! Map<Object?, Object?>)) {
    throw const PatchbayPermissionWireException(
      'permissionDriverResponseInvalid',
    );
  }
  final Map<Object?, Object?>? rawCapabilities = _optionalMap(
    json['capabilities'],
  );
  final Map<Object?, Object?>? rawBefore = _optionalMap(json['before']);
  final Map<Object?, Object?>? rawAfter = _optionalMap(json['after']);
  final Map<Object?, Object?>? rawInterruption = _optionalMap(
    json['interruption'],
  );
  return PatchbayPermissionDriverResponse(
    protocolVersion: _requiredString(
      json['protocolVersion'],
      'permissionDriverResponseInvalid',
    ),
    requestId: _requiredString(
      json['requestId'],
      'permissionDriverResponseInvalid',
    ),
    admission: admission,
    code: rejection == null
        ? null
        : _requiredString(
            rejection['code'],
            'permissionDriverResponseInvalid',
          ),
    details: Map<String, Object?>.unmodifiable(
      Map<String, Object?>.from(rawDetails),
    ),
    capabilities: rawCapabilities == null
        ? null
        : PatchbayPermissionCapabilities.fromJson(
            Map<String, Object?>.from(rawCapabilities),
          ),
    before: rawBefore == null
        ? null
        : PatchbayPermissionStatus.fromJson(
            Map<String, Object?>.from(rawBefore),
          ),
    after: rawAfter == null
        ? null
        : PatchbayPermissionStatus.fromJson(
            Map<String, Object?>.from(rawAfter),
          ),
    evidence: <PatchbayPermissionEvidence>[
      for (final Object? item in rawEvidence)
        PatchbayPermissionEvidence.fromJson(
          Map<String, Object?>.from(item! as Map),
        ),
    ],
    interruption: rawInterruption == null
        ? null
        : PatchbayPermissionInterruption.fromJson(
            Map<String, Object?>.from(rawInterruption),
          ),
    notice: _optionalString(
      json['notice'],
      'permissionDriverResponseInvalid',
    ),
  );
}