diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release.dart b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release.dart new file mode 100644 index 00000000..586ed1f2 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release.dart @@ -0,0 +1 @@ +export 'get_release_response.dart'; diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.dart b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.dart new file mode 100644 index 00000000..eb8e1440 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.dart @@ -0,0 +1,23 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; + +part 'get_release_response.g.dart'; + +/// {@template get_release_response} +/// The response body for GET /api/v1/apps/:id/releases/:releaseId +/// {@endtemplate} +@JsonSerializable() +class GetReleaseResponse { + /// {@macro get_release_response} + const GetReleaseResponse({required this.release}); + + /// Converts a `Map` to a [GetReleaseResponse]. + factory GetReleaseResponse.fromJson(Map json) => + _$GetReleaseResponseFromJson(json); + + /// Converts a [GetReleaseResponse] to a `Map`. + Map toJson() => _$GetReleaseResponseToJson(this); + + /// The requested release. + final Release release; +} diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.g.dart b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.g.dart new file mode 100644 index 00000000..30108b6e --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/get_release/get_release_response.g.dart @@ -0,0 +1,23 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: implicit_dynamic_parameter, require_trailing_commas, cast_nullable_to_non_nullable, lines_longer_than_80_chars + +part of 'get_release_response.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +GetReleaseResponse _$GetReleaseResponseFromJson(Map json) => + $checkedCreate('GetReleaseResponse', json, ($checkedConvert) { + final val = GetReleaseResponse( + release: $checkedConvert( + 'release', + (v) => Release.fromJson(v as Map), + ), + ); + return val; + }); + +Map _$GetReleaseResponseToJson(GetReleaseResponse instance) => + {'release': instance.release.toJson()}; diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart b/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart index a5d6e434..828a8661 100644 --- a/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart +++ b/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart @@ -10,6 +10,7 @@ export 'get_apps/get_apps.dart'; export 'get_organization_apps/get_organization_apps.dart'; export 'get_organization_users/get_organization_users.dart'; export 'get_organizations/get_organizations.dart'; +export 'get_release/get_release.dart'; export 'get_release_artifacts/get_release_artifacts.dart'; export 'get_release_patches/get_release_patches.dart'; export 'get_releases/get_releases.dart'; diff --git a/packages/shorebird_code_push_protocol/test/src/messages/get_release/get_release_response_test.dart b/packages/shorebird_code_push_protocol/test/src/messages/get_release/get_release_response_test.dart new file mode 100644 index 00000000..d3967879 --- /dev/null +++ b/packages/shorebird_code_push_protocol/test/src/messages/get_release/get_release_response_test.dart @@ -0,0 +1,29 @@ +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; +import 'package:test/test.dart'; + +void main() { + group(GetReleaseResponse, () { + test('can be (de)serialized', () { + final response = GetReleaseResponse( + release: Release( + id: 0, + appId: 'test-app-id', + version: '1.0.0', + flutterRevision: 'flutter-revision', + flutterVersion: '3.22.0', + displayName: 'v1.0.0', + platformStatuses: const { + ReleasePlatform.ios: ReleaseStatus.draft, + ReleasePlatform.android: ReleaseStatus.active, + }, + createdAt: DateTime(2022), + updatedAt: DateTime(2023), + ), + ); + expect( + GetReleaseResponse.fromJson(response.toJson()).toJson(), + equals(response.toJson()), + ); + }); + }); +}