diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release.dart index dda582fb..37906ffb 100644 --- a/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release.dart +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release.dart @@ -1 +1,2 @@ export 'create_release_request.dart'; +export 'create_release_response.dart'; diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.dart new file mode 100644 index 00000000..4149e8c1 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.dart @@ -0,0 +1,29 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; + +part 'create_release_response.g.dart'; + +/// {@template create_release_response} +/// The response body for POST /api/v2/releases +/// {@endtemplate} +@JsonSerializable() +class CreateReleaseResponse { + /// {@macro create_release_response} + const CreateReleaseResponse({ + required this.release, + required this.artifactUploadUrls, + }); + + /// Converts a Map to a [CreateReleaseResponse] + factory CreateReleaseResponse.fromJson(Map json) => + _$CreateReleaseResponseFromJson(json); + + /// Converts a [CreateReleaseResponse] to a Map + Map toJson() => _$CreateReleaseResponseToJson(this); + + /// The release that was created. + final Release release; + + /// The upload urls for artifacts. + final ArtifactUploadUrls artifactUploadUrls; +} diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.g.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.g.dart new file mode 100644 index 00000000..2ae41ba3 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.g.dart @@ -0,0 +1,33 @@ +// 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 'create_release_response.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +CreateReleaseResponse _$CreateReleaseResponseFromJson( + Map json) => + $checkedCreate( + 'CreateReleaseResponse', + json, + ($checkedConvert) { + final val = CreateReleaseResponse( + release: $checkedConvert( + 'release', (v) => Release.fromJson(v as Map)), + artifactUploadUrls: $checkedConvert('artifact_upload_urls', + (v) => ArtifactUploadUrls.fromJson(v as Map)), + ); + return val; + }, + fieldKeyMap: const {'artifactUploadUrls': 'artifact_upload_urls'}, + ); + +Map _$CreateReleaseResponseToJson( + CreateReleaseResponse instance) => + { + 'release': instance.release.toJson(), + 'artifact_upload_urls': instance.artifactUploadUrls.toJson(), + }; diff --git a/packages/shorebird_code_push_protocol/lib/src/models/artifact_upload_urls.dart b/packages/shorebird_code_push_protocol/lib/src/models/artifact_upload_urls.dart new file mode 100644 index 00000000..5964cb15 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/models/artifact_upload_urls.dart @@ -0,0 +1,46 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'artifact_upload_urls.g.dart'; + +/// {@template artifact_upload_urls} +/// An object that contains signed upload URLs for artifacts. +/// {@endtemplate} +@JsonSerializable() +class ArtifactUploadUrls { + /// {@macro artifact_upload_urls} + const ArtifactUploadUrls({required this.android}); + + /// Converts a Map to an [ArtifactUploadUrls] + factory ArtifactUploadUrls.fromJson(Map json) => + _$ArtifactUploadUrlsFromJson(json); + + /// Converts a [ArtifactUploadUrls] to a Map + Map toJson() => _$ArtifactUploadUrlsToJson(this); + + /// The upload urls for Android artifacts. + final AndroidArtifactUploadUrls android; +} + +/// {@template android_artifact_upload_urls} +/// An object that contains signed upload URLs for Android artifacts. +/// {@endtemplate} +@JsonSerializable() +class AndroidArtifactUploadUrls { + /// {@macro android_artifact_upload_urls} + const AndroidArtifactUploadUrls({ + required this.x86, + required this.aarch64, + required this.arm, + }); + + /// Converts a Map to an [AndroidArtifactUploadUrls] + factory AndroidArtifactUploadUrls.fromJson(Map json) => + _$AndroidArtifactUploadUrlsFromJson(json); + + /// Converts a [AndroidArtifactUploadUrls] to a Map + Map toJson() => _$AndroidArtifactUploadUrlsToJson(this); + + final String x86; + final String aarch64; + final String arm; +} diff --git a/packages/shorebird_code_push_protocol/lib/src/models/artifact_upload_urls.g.dart b/packages/shorebird_code_push_protocol/lib/src/models/artifact_upload_urls.g.dart new file mode 100644 index 00000000..f83e0a00 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/models/artifact_upload_urls.g.dart @@ -0,0 +1,52 @@ +// 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 'artifact_upload_urls.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +ArtifactUploadUrls _$ArtifactUploadUrlsFromJson(Map json) => + $checkedCreate( + 'ArtifactUploadUrls', + json, + ($checkedConvert) { + final val = ArtifactUploadUrls( + android: $checkedConvert( + 'android', + (v) => AndroidArtifactUploadUrls.fromJson( + v as Map)), + ); + return val; + }, + ); + +Map _$ArtifactUploadUrlsToJson(ArtifactUploadUrls instance) => + { + 'android': instance.android.toJson(), + }; + +AndroidArtifactUploadUrls _$AndroidArtifactUploadUrlsFromJson( + Map json) => + $checkedCreate( + 'AndroidArtifactUploadUrls', + json, + ($checkedConvert) { + final val = AndroidArtifactUploadUrls( + x86: $checkedConvert('x86', (v) => v as String), + aarch64: $checkedConvert('aarch64', (v) => v as String), + arm: $checkedConvert('arm', (v) => v as String), + ); + return val; + }, + ); + +Map _$AndroidArtifactUploadUrlsToJson( + AndroidArtifactUploadUrls instance) => + { + 'x86': instance.x86, + 'aarch64': instance.aarch64, + 'arm': instance.arm, + }; diff --git a/packages/shorebird_code_push_protocol/lib/src/models/models.dart b/packages/shorebird_code_push_protocol/lib/src/models/models.dart index ec77bf2c..30afd7b6 100644 --- a/packages/shorebird_code_push_protocol/lib/src/models/models.dart +++ b/packages/shorebird_code_push_protocol/lib/src/models/models.dart @@ -1,5 +1,6 @@ export 'app.dart'; export 'app_metadata.dart'; +export 'artifact_upload_urls.dart'; export 'channel.dart'; export 'collaborator.dart'; export 'error_response.dart'; diff --git a/packages/shorebird_code_push_protocol/test/src/messages/create_release/create_release_response_test.dart b/packages/shorebird_code_push_protocol/test/src/messages/create_release/create_release_response_test.dart new file mode 100644 index 00000000..89092401 --- /dev/null +++ b/packages/shorebird_code_push_protocol/test/src/messages/create_release/create_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(CreateReleaseResponse, () { + test('can be (de)serialized', () { + const response = CreateReleaseResponse( + release: Release( + id: 0, + appId: 'test-app-id', + version: '1.0.0', + displayName: 'v1.0.0', + flutterRevision: 'flutter-revision', + ), + artifactUploadUrls: ArtifactUploadUrls( + android: AndroidArtifactUploadUrls( + x86: 'x86', + aarch64: 'aarch64', + arm: 'arm', + ), + ), + ); + expect( + CreateReleaseResponse.fromJson(response.toJson()).toJson(), + equals(response.toJson()), + ); + }); + }); +} diff --git a/packages/shorebird_code_push_protocol/test/src/models/artifact_upload_urls_test.dart b/packages/shorebird_code_push_protocol/test/src/models/artifact_upload_urls_test.dart new file mode 100644 index 00000000..9f6a0cb0 --- /dev/null +++ b/packages/shorebird_code_push_protocol/test/src/models/artifact_upload_urls_test.dart @@ -0,0 +1,20 @@ +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; +import 'package:test/test.dart'; + +void main() { + group(ArtifactUploadUrls, () { + test('can be (de)serialized', () { + const artifactUploadUrls = ArtifactUploadUrls( + android: AndroidArtifactUploadUrls( + x86: 'x86', + aarch64: 'aarch64', + arm: 'arm', + ), + ); + expect( + ArtifactUploadUrls.fromJson(artifactUploadUrls.toJson()).toJson(), + equals(artifactUploadUrls.toJson()), + ); + }); + }); +}