blob: 6a372c8c93532d3ef70971612ffd7557f1b34b7a [file] [log] [blame]
// Copyright 2019 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:collection/collection.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:meta/meta.dart';
import 'base.dart';
part 'build_status_response.g.dart';
enum BuildStatus {
success,
failure;
factory BuildStatus._byName(String name) {
final result = values.firstWhereOrNull((e) => e.name == name);
if (result == null) {
throw FormatException('Unexpected name', name);
}
return result;
}
static String _toName(BuildStatus status) => status.name;
}
@JsonSerializable(checked: true)
@immutable
final class BuildStatusResponse extends Model {
BuildStatusResponse({
required this.buildStatus,
required Iterable<String> failingTasks,
}) : failingTasks = List.unmodifiable(failingTasks);
factory BuildStatusResponse.fromJson(Map<String, Object?> json) {
try {
return _$BuildStatusResponseFromJson(json);
} on CheckedFromJsonException catch (e) {
throw FormatException('Invalid BuildStatusResponse: $e', json);
}
}
static final _listEq = const ListEquality<void>().equals;
@JsonKey(
name: 'buildStatus',
fromJson: BuildStatus._byName,
toJson: BuildStatus._toName,
)
final BuildStatus buildStatus;
@JsonKey(name: 'failingTasks', defaultValue: <String>[])
final List<String> failingTasks;
@override
bool operator ==(Object other) {
return other is BuildStatusResponse &&
buildStatus == other.buildStatus &&
_listEq(failingTasks, other.failingTasks);
}
@override
int get hashCode => Object.hash(buildStatus, Object.hashAll(failingTasks));
@override
Map<String, Object?> toJson() => _$BuildStatusResponseToJson(this);
}