blob: 931d92f7b1e705c60bf743aad692a22072b1922a [file] [log] [blame]
// Copyright 2013 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:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart';
import 'package:json_annotation/json_annotation.dart';
import '../../billing_client_wrappers.dart';
part 'enum_converters.g.dart';
/// Serializer for [BillingResponse].
///
/// Use these in `@JsonSerializable()` classes by annotating them with
/// `@BillingResponseConverter()`.
class BillingResponseConverter implements JsonConverter<BillingResponse, int?> {
/// Default const constructor.
const BillingResponseConverter();
@override
BillingResponse fromJson(int? json) {
if (json == null) {
return BillingResponse.error;
}
return _$enumDecode<BillingResponse, dynamic>(
_$BillingResponseEnumMap.cast<BillingResponse, dynamic>(), json);
}
@override
int toJson(BillingResponse object) => _$BillingResponseEnumMap[object]!;
}
/// Serializer for [SkuType].
///
/// Use these in `@JsonSerializable()` classes by annotating them with
/// `@SkuTypeConverter()`.
class SkuTypeConverter implements JsonConverter<SkuType, String?> {
/// Default const constructor.
const SkuTypeConverter();
@override
SkuType fromJson(String? json) {
if (json == null) {
return SkuType.inapp;
}
return _$enumDecode<SkuType, dynamic>(
_$SkuTypeEnumMap.cast<SkuType, dynamic>(), json);
}
@override
String toJson(SkuType object) => _$SkuTypeEnumMap[object]!;
}
/// Serializer for [ProrationMode].
///
/// Use these in `@JsonSerializable()` classes by annotating them with
/// `@ProrationModeConverter()`.
class ProrationModeConverter implements JsonConverter<ProrationMode, int?> {
/// Default const constructor.
const ProrationModeConverter();
@override
ProrationMode fromJson(int? json) {
if (json == null) {
return ProrationMode.unknownSubscriptionUpgradeDowngradePolicy;
}
return _$enumDecode<ProrationMode, dynamic>(
_$ProrationModeEnumMap.cast<ProrationMode, dynamic>(), json);
}
@override
int toJson(ProrationMode object) => _$ProrationModeEnumMap[object]!;
}
/// Serializer for [PurchaseStateWrapper].
///
/// Use these in `@JsonSerializable()` classes by annotating them with
/// `@PurchaseStateConverter()`.
class PurchaseStateConverter
implements JsonConverter<PurchaseStateWrapper, int?> {
/// Default const constructor.
const PurchaseStateConverter();
@override
PurchaseStateWrapper fromJson(int? json) {
if (json == null) {
return PurchaseStateWrapper.unspecified_state;
}
return _$enumDecode<PurchaseStateWrapper, dynamic>(
_$PurchaseStateWrapperEnumMap.cast<PurchaseStateWrapper, dynamic>(),
json);
}
@override
int toJson(PurchaseStateWrapper object) =>
_$PurchaseStateWrapperEnumMap[object]!;
/// Converts the purchase state stored in `object` to a [PurchaseStatus].
///
/// [PurchaseStateWrapper.unspecified_state] is mapped to [PurchaseStatus.error].
PurchaseStatus toPurchaseStatus(PurchaseStateWrapper object) {
switch (object) {
case PurchaseStateWrapper.pending:
return PurchaseStatus.pending;
case PurchaseStateWrapper.purchased:
return PurchaseStatus.purchased;
case PurchaseStateWrapper.unspecified_state:
return PurchaseStatus.error;
}
}
}
/// Serializer for [BillingClientFeature].
///
/// Use these in `@JsonSerializable()` classes by annotating them with
/// `@BillingClientFeatureConverter()`.
class BillingClientFeatureConverter
implements JsonConverter<BillingClientFeature, String> {
/// Default const constructor.
const BillingClientFeatureConverter();
@override
BillingClientFeature fromJson(String json) {
return _$enumDecode<BillingClientFeature, dynamic>(
_$BillingClientFeatureEnumMap.cast<BillingClientFeature, dynamic>(),
json);
}
@override
String toJson(BillingClientFeature object) =>
_$BillingClientFeatureEnumMap[object]!;
}
// Define a class so we generate serializer helper methods for the enums
// See https://github.com/google/json_serializable.dart/issues/778
@JsonSerializable()
class _SerializedEnums {
late BillingResponse response;
late SkuType type;
late PurchaseStateWrapper purchaseState;
late ProrationMode prorationMode;
late BillingClientFeature billingClientFeature;
}