BokaMera.API.Host

<back to all web services

ResourceTypeQuery

Requires Authentication
The following routes are available for this service:
GET/resourcetypesFind resourcetypes.
import 'package:servicestack/servicestack.dart';

// @DataContract
abstract class QueryBase
{
    /**
    * Skip over a given number of elements in a sequence and then return the remainder. Use this when you need paging.<br/><br/><strong>Example:</strong><br/><code>?skip=10&orderBy=Id</code>
    */
    // @DataMember(Order=1)
    int? Skip;

    /**
    * Return a given number of elements in a sequence and then skip over the remainder. Use this when you need paging.<br/><br/><strong>Example:</strong><br/><code>?take=20</code>
    */
    // @DataMember(Order=2)
    int? Take;

    /**
    * Comma separated list of fields to order by. Prefix the field name with a minus if you wan't to invert the sort for that field.<br/><br/><strong>Example:</strong><br/><code>?orderBy=Id,-Age,FirstName</code>
    */
    // @DataMember(Order=3)
    String? OrderBy;

    /**
    * Comma separated list of fields to order by in descending order. Prefix the field name with a minus if you wan't to invert the sort for that field.<br/><br/><strong>Example:</strong><br/><code>?orderByDesc=Id,-Age,FirstName</code>
    */
    // @DataMember(Order=4)
    String? OrderByDesc;

    /**
    * Include any of the aggregates <code>AVG, COUNT, FIRST, LAST, MAX, MIN, SUM</code> in your result set. The results will be returned in the meta field.<br/><br/><strong>Example:</strong><br/><code>?include=COUNT(*) as Total</code><br/><br/>or multiple fields with<br/><code>?include=Count(*) Total, Min(Age), AVG(Age) AverageAge</code><br/></br>or unique with<br/><code>?include=COUNT(DISTINCT LivingStatus) as UniqueStatus</code>
    */
    // @DataMember(Order=5)
    String? Include;

    // @DataMember(Order=6)
    String? Fields;

    // @DataMember(Order=7)
    Map<String,String?>? Meta;

    QueryBase({this.Skip,this.Take,this.OrderBy,this.OrderByDesc,this.Include,this.Fields,this.Meta});
    QueryBase.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Skip = json['Skip'];
        Take = json['Take'];
        OrderBy = json['OrderBy'];
        OrderByDesc = json['OrderByDesc'];
        Include = json['Include'];
        Fields = json['Fields'];
        Meta = JsonConverters.toStringMap(json['Meta']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Skip': Skip,
        'Take': Take,
        'OrderBy': OrderBy,
        'OrderByDesc': OrderByDesc,
        'Include': Include,
        'Fields': Fields,
        'Meta': Meta
    };

    getTypeName() => "QueryBase";
    TypeContext? context = _ctx;
}

abstract class QueryDb2<From,Into> extends QueryBase
{
    QueryDb2();
    QueryDb2.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "QueryDb<$From,$Into>";
    TypeContext? context = _ctx;
}

class ResourceTypeResource implements IConvertible
{
    /**
    * The resource id
    */
    // @ApiMember(Description="The resource id")
    int? Id;

    /**
    * The resource name
    */
    // @ApiMember(Description="The resource name")
    String? Name;

    /**
    * The resource status
    */
    // @ApiMember(Description="The resource status")
    bool? Active;

    /**
    * The resource description
    */
    // @ApiMember(Description="The resource description")
    String? Description;

    /**
    * The resource email
    */
    // @ApiMember(Description="The resource email")
    String? Email;

    /**
    * The resource phone
    */
    // @ApiMember(Description="The resource phone")
    String? Phone;

    /**
    * The resource color
    */
    // @ApiMember(Description="The resource color")
    String? Color;

    /**
    * The resource image
    */
    // @ApiMember(Description="The resource image")
    Uri? ImageUrl;

    /**
    * The priority of the resource
    */
    // @ApiMember(Description="The priority of the resource")
    int? Priority;

    /**
    * If the resource want to receive email notifications
    */
    // @ApiMember(Description="If the resource want to receive email notifications")
    bool? EmailNotification;

    /**
    * If the resource want to receive sms notifications
    */
    // @ApiMember(Description="If the resource want to receive sms notifications")
    bool? SMSNotification;

    /**
    * If the resource want to receive email reminders
    */
    // @ApiMember(Description="If the resource want to receive email reminders")
    bool? EmailReminder;

    /**
    * If the resource want to receive sms reminders
    */
    // @ApiMember(Description="If the resource want to receive sms reminders")
    bool? SMSReminder;

    ResourceTypeResource({this.Id,this.Name,this.Active,this.Description,this.Email,this.Phone,this.Color,this.ImageUrl,this.Priority,this.EmailNotification,this.SMSNotification,this.EmailReminder,this.SMSReminder});
    ResourceTypeResource.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Active = json['Active'];
        Description = json['Description'];
        Email = json['Email'];
        Phone = json['Phone'];
        Color = json['Color'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        Priority = json['Priority'];
        EmailNotification = json['EmailNotification'];
        SMSNotification = json['SMSNotification'];
        EmailReminder = json['EmailReminder'];
        SMSReminder = json['SMSReminder'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Active': Active,
        'Description': Description,
        'Email': Email,
        'Phone': Phone,
        'Color': Color,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'Priority': Priority,
        'EmailNotification': EmailNotification,
        'SMSNotification': SMSNotification,
        'EmailReminder': EmailReminder,
        'SMSReminder': SMSReminder
    };

    getTypeName() => "ResourceTypeResource";
    TypeContext? context = _ctx;
}

class ResourceTypeQueryResponse implements IConvertible
{
    /**
    * The resourcetype id
    */
    // @ApiMember(Description="The resourcetype id")
    int? Id;

    /**
    * The resourcetype name
    */
    // @ApiMember(Description="The resourcetype name")
    String? Name;

    /**
    * The resourcetype description
    */
    // @ApiMember(Description="The resourcetype description")
    String? Description;

    /**
    * The resources in the resourcetype. Only shows active resources if not admin.
    */
    // @ApiMember(Description="The resources in the resourcetype. Only shows active resources if not admin.")
    List<ResourceTypeResource>? Resources;

    /**
    * If resourcetype is active or not
    */
    // @ApiMember(Description="If resourcetype is active or not")
    bool? Active;

    /**
    * Then date when the resource was created
    */
    // @ApiMember(Description="Then date when the resource was created")
    DateTime? Created;

    /**
    * Then date when the resource was updated
    */
    // @ApiMember(Description="Then date when the resource was updated")
    DateTime? Updated;

    ResourceTypeQueryResponse({this.Id,this.Name,this.Description,this.Resources,this.Active,this.Created,this.Updated});
    ResourceTypeQueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        Resources = JsonConverters.fromJson(json['Resources'],'List<ResourceTypeResource>',context!);
        Active = json['Active'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Resources': JsonConverters.toJson(Resources,'List<ResourceTypeResource>',context!),
        'Active': Active,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!)
    };

    getTypeName() => "ResourceTypeQueryResponse";
    TypeContext? context = _ctx;
}

class BaseModel implements IConvertible
{
    BaseModel();
    BaseModel.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "BaseModel";
    TypeContext? context = _ctx;
}

enum ScheduleType
{
    NotDefined,
    RecurringSchedule,
    DateSchedule,
}

abstract class ISchedule
{
    String? CompanyId;
    List<Resource>? Resources;
    ScheduleType? Type;
    bool? Active;
    bool? IsResourceSpecific;
}

abstract class ITimeException extends IInterval
{
    int? Id;
    String? ReasonText;
    bool? IsBlock;
    String? ReasonTextPublic;
    bool? IsRecurring;
    List<int>? ResourceIds;
}

enum BookingStatusEnum
{
    Booked,
    Unbooked,
    Reserved,
    Canceled,
    AwaitingPayment,
    AwaitingPaymentNoTimeLimit,
    Payed,
    AwaitingPaymentRequestFromAdmin,
    AwaitingPaymentFromProvider,
    Invoiced,
}

class BookedCustomer implements IConvertible
{
    String? Id;
    String? Firstname;
    String? Lastname;
    String? Email;
    String? Phone;
    String? FacebookUserName;
    String? ImageUrl;
    String? CorporateIdentityNumber;
    String? InvoiceAddress1;
    String? InvoiceAddress2;
    String? InvoiceCity;
    String? InvoicePostalCode;
    String? InvoiceCountryCode;

    BookedCustomer({this.Id,this.Firstname,this.Lastname,this.Email,this.Phone,this.FacebookUserName,this.ImageUrl,this.CorporateIdentityNumber,this.InvoiceAddress1,this.InvoiceAddress2,this.InvoiceCity,this.InvoicePostalCode,this.InvoiceCountryCode});
    BookedCustomer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Firstname = json['Firstname'];
        Lastname = json['Lastname'];
        Email = json['Email'];
        Phone = json['Phone'];
        FacebookUserName = json['FacebookUserName'];
        ImageUrl = json['ImageUrl'];
        CorporateIdentityNumber = json['CorporateIdentityNumber'];
        InvoiceAddress1 = json['InvoiceAddress1'];
        InvoiceAddress2 = json['InvoiceAddress2'];
        InvoiceCity = json['InvoiceCity'];
        InvoicePostalCode = json['InvoicePostalCode'];
        InvoiceCountryCode = json['InvoiceCountryCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Firstname': Firstname,
        'Lastname': Lastname,
        'Email': Email,
        'Phone': Phone,
        'FacebookUserName': FacebookUserName,
        'ImageUrl': ImageUrl,
        'CorporateIdentityNumber': CorporateIdentityNumber,
        'InvoiceAddress1': InvoiceAddress1,
        'InvoiceAddress2': InvoiceAddress2,
        'InvoiceCity': InvoiceCity,
        'InvoicePostalCode': InvoicePostalCode,
        'InvoiceCountryCode': InvoiceCountryCode
    };

    getTypeName() => "BookedCustomer";
    TypeContext? context = _ctx;
}

abstract class IBookedTime extends IInterval
{
    int? Id;
    int? ServiceId;
    int? BookedSpots;
    int? TotalSpots;
    int? PauseAfterInMinutes;
    BookingStatusEnum? Status;
    int? StatusId;
    BookedCustomer? Customer;
}

class CustomFieldValue extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? Value;

    // @Required()
    bool? Active;

    int? SortOrder;
    DateTime? ModifiedDate;

    CustomFieldValue({this.CompanyId,this.Id,this.Value,this.Active,this.SortOrder,this.ModifiedDate});
    CustomFieldValue.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Value = json['Value'];
        Active = json['Active'];
        SortOrder = json['SortOrder'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'Value': Value,
        'Active': Active,
        'SortOrder': SortOrder,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "CustomFieldValue";
    TypeContext? context = _ctx;
}

class CustomField extends BaseModel implements IConvertible
{
    // @Required()
    String? Table;

    // @Required()
    String? Column;

    // @Required()
    String? DataType;

    // @Required()
    String? Description;

    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    int? Id;

    CustomField({this.Table,this.Column,this.DataType,this.Description,this.Active,this.ModifiedDate,this.Id});
    CustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Table = json['Table'];
        Column = json['Column'];
        DataType = json['DataType'];
        Description = json['Description'];
        Active = json['Active'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Table': Table,
        'Column': Column,
        'DataType': DataType,
        'Description': Description,
        'Active': Active,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "CustomField";
    TypeContext? context = _ctx;
}

class RegEx extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? RegExCode;

    String? ErrorMessage;
    DateTime? ModifiedDate;
    int? Id;

    RegEx({this.Name,this.Description,this.RegExCode,this.ErrorMessage,this.ModifiedDate,this.Id});
    RegEx.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        RegExCode = json['RegExCode'];
        ErrorMessage = json['ErrorMessage'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'RegExCode': RegExCode,
        'ErrorMessage': ErrorMessage,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "RegEx";
    TypeContext? context = _ctx;
}

class RebateCodeType extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    String? Description;
    DateTime? ModifiedDate;
    int? Id;

    RebateCodeType({this.Name,this.Description,this.ModifiedDate,this.Id});
    RebateCodeType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "RebateCodeType";
    TypeContext? context = _ctx;
}

class AppliedRebateCodes implements IConvertible
{
    int? RebateCodeId;
    String? RebateCodeSign;
    int? RebateCodeValue;
    double? RebateAmount;
    RebateCodeType? RebateCodeType;

    AppliedRebateCodes({this.RebateCodeId,this.RebateCodeSign,this.RebateCodeValue,this.RebateAmount,this.RebateCodeType});
    AppliedRebateCodes.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RebateCodeId = json['RebateCodeId'];
        RebateCodeSign = json['RebateCodeSign'];
        RebateCodeValue = json['RebateCodeValue'];
        RebateAmount = JsonConverters.toDouble(json['RebateAmount']);
        RebateCodeType = JsonConverters.fromJson(json['RebateCodeType'],'RebateCodeType',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RebateCodeId': RebateCodeId,
        'RebateCodeSign': RebateCodeSign,
        'RebateCodeValue': RebateCodeValue,
        'RebateAmount': RebateAmount,
        'RebateCodeType': JsonConverters.toJson(RebateCodeType,'RebateCodeType',context!)
    };

    getTypeName() => "AppliedRebateCodes";
    TypeContext? context = _ctx;
}

class TotalPriceInformation implements IConvertible
{
    double? TotalPrice;
    double? TotalVATAmount;
    double? TotalRebate;
    double? TotalPriceBeforeRebate;
    List<AppliedRebateCodes>? AppliedCodes;
    String? PriceSign;
    String? CurrencyId;
    double? VAT;

    TotalPriceInformation({this.TotalPrice,this.TotalVATAmount,this.TotalRebate,this.TotalPriceBeforeRebate,this.AppliedCodes,this.PriceSign,this.CurrencyId,this.VAT});
    TotalPriceInformation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        TotalPrice = JsonConverters.toDouble(json['TotalPrice']);
        TotalVATAmount = JsonConverters.toDouble(json['TotalVATAmount']);
        TotalRebate = JsonConverters.toDouble(json['TotalRebate']);
        TotalPriceBeforeRebate = JsonConverters.toDouble(json['TotalPriceBeforeRebate']);
        AppliedCodes = JsonConverters.fromJson(json['AppliedCodes'],'List<AppliedRebateCodes>',context!);
        PriceSign = json['PriceSign'];
        CurrencyId = json['CurrencyId'];
        VAT = JsonConverters.toDouble(json['VAT']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'TotalPrice': TotalPrice,
        'TotalVATAmount': TotalVATAmount,
        'TotalRebate': TotalRebate,
        'TotalPriceBeforeRebate': TotalPriceBeforeRebate,
        'AppliedCodes': JsonConverters.toJson(AppliedCodes,'List<AppliedRebateCodes>',context!),
        'PriceSign': PriceSign,
        'CurrencyId': CurrencyId,
        'VAT': VAT
    };

    getTypeName() => "TotalPriceInformation";
    TypeContext? context = _ctx;
}

enum Currency
{
    SEK,
    EUR,
}

class PriceMapping extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    String? Id;

    // @Required()
    int? ServicePriceId;

    String? ReferenceType;
    String? ExternalReference;
    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

    PriceMapping({this.CompanyId,this.Id,this.ServicePriceId,this.ReferenceType,this.ExternalReference,this.UpdatedDate,this.CreatedDate,this.ModifiedDate});
    PriceMapping.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ServicePriceId = json['ServicePriceId'];
        ReferenceType = json['ReferenceType'];
        ExternalReference = json['ExternalReference'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'ServicePriceId': ServicePriceId,
        'ReferenceType': ReferenceType,
        'ExternalReference': ExternalReference,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "PriceMapping";
    TypeContext? context = _ctx;
}

enum BokaMeraDayOfWeek
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday,
}

class ServicePriceDayOfWeekRelation extends BaseModel implements IConvertible
{
    // @Ignore()
    BokaMeraDayOfWeek? DayOfWeek;

    // @Required()
    String? CompanyId;

    // @Required()
    int? ServicePriceId;

    // @Required()
    int? DayOfWeekId;

    DateTime? ModifiedDate;
    int? Id;

    ServicePriceDayOfWeekRelation({this.DayOfWeek,this.CompanyId,this.ServicePriceId,this.DayOfWeekId,this.ModifiedDate,this.Id});
    ServicePriceDayOfWeekRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DayOfWeek = JsonConverters.fromJson(json['DayOfWeek'],'BokaMeraDayOfWeek',context!);
        CompanyId = json['CompanyId'];
        ServicePriceId = json['ServicePriceId'];
        DayOfWeekId = json['DayOfWeekId'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DayOfWeek': JsonConverters.toJson(DayOfWeek,'BokaMeraDayOfWeek',context!),
        'CompanyId': CompanyId,
        'ServicePriceId': ServicePriceId,
        'DayOfWeekId': DayOfWeekId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "ServicePriceDayOfWeekRelation";
    TypeContext? context = _ctx;
}

abstract class IDbConnectionFactory
{
}

class ServerData implements IConvertible
{
    String? HTTP_HOST;
    String? HTTP_CONNECTION;
    String? HTTP_CACHE_CONTROL;
    String? HTTP_ACCEPT;
    String? HTTP_USER_AGENT;
    String? HTTP_ACCEPT_ENCODING;
    String? HTTP_ACCEPT_LANGUAGE;
    String? PATH;
    String? SERVER_SOFTWARE;
    String? SERVER_NAME;
    String? SERVER_ADDR;
    String? SERVER_PORT;
    String? REMOTE_ADDR;
    String? REMOTE_PORT;
    String? GATEWAY_INTERFACE;
    String? SERVER_PROTOCOL;
    String? REQUEST_METHOD;
    String? QUERY_STRING;
    String? REQUEST_TIME;

    ServerData({this.HTTP_HOST,this.HTTP_CONNECTION,this.HTTP_CACHE_CONTROL,this.HTTP_ACCEPT,this.HTTP_USER_AGENT,this.HTTP_ACCEPT_ENCODING,this.HTTP_ACCEPT_LANGUAGE,this.PATH,this.SERVER_SOFTWARE,this.SERVER_NAME,this.SERVER_ADDR,this.SERVER_PORT,this.REMOTE_ADDR,this.REMOTE_PORT,this.GATEWAY_INTERFACE,this.SERVER_PROTOCOL,this.REQUEST_METHOD,this.QUERY_STRING,this.REQUEST_TIME});
    ServerData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        HTTP_HOST = json['HTTP_HOST'];
        HTTP_CONNECTION = json['HTTP_CONNECTION'];
        HTTP_CACHE_CONTROL = json['HTTP_CACHE_CONTROL'];
        HTTP_ACCEPT = json['HTTP_ACCEPT'];
        HTTP_USER_AGENT = json['HTTP_USER_AGENT'];
        HTTP_ACCEPT_ENCODING = json['HTTP_ACCEPT_ENCODING'];
        HTTP_ACCEPT_LANGUAGE = json['HTTP_ACCEPT_LANGUAGE'];
        PATH = json['PATH'];
        SERVER_SOFTWARE = json['SERVER_SOFTWARE'];
        SERVER_NAME = json['SERVER_NAME'];
        SERVER_ADDR = json['SERVER_ADDR'];
        SERVER_PORT = json['SERVER_PORT'];
        REMOTE_ADDR = json['REMOTE_ADDR'];
        REMOTE_PORT = json['REMOTE_PORT'];
        GATEWAY_INTERFACE = json['GATEWAY_INTERFACE'];
        SERVER_PROTOCOL = json['SERVER_PROTOCOL'];
        REQUEST_METHOD = json['REQUEST_METHOD'];
        QUERY_STRING = json['QUERY_STRING'];
        REQUEST_TIME = json['REQUEST_TIME'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'HTTP_HOST': HTTP_HOST,
        'HTTP_CONNECTION': HTTP_CONNECTION,
        'HTTP_CACHE_CONTROL': HTTP_CACHE_CONTROL,
        'HTTP_ACCEPT': HTTP_ACCEPT,
        'HTTP_USER_AGENT': HTTP_USER_AGENT,
        'HTTP_ACCEPT_ENCODING': HTTP_ACCEPT_ENCODING,
        'HTTP_ACCEPT_LANGUAGE': HTTP_ACCEPT_LANGUAGE,
        'PATH': PATH,
        'SERVER_SOFTWARE': SERVER_SOFTWARE,
        'SERVER_NAME': SERVER_NAME,
        'SERVER_ADDR': SERVER_ADDR,
        'SERVER_PORT': SERVER_PORT,
        'REMOTE_ADDR': REMOTE_ADDR,
        'REMOTE_PORT': REMOTE_PORT,
        'GATEWAY_INTERFACE': GATEWAY_INTERFACE,
        'SERVER_PROTOCOL': SERVER_PROTOCOL,
        'REQUEST_METHOD': REQUEST_METHOD,
        'QUERY_STRING': QUERY_STRING,
        'REQUEST_TIME': REQUEST_TIME
    };

    getTypeName() => "ServerData";
    TypeContext? context = _ctx;
}

class Credentials implements IConvertible
{
    String? hash;
    String? id;
    String? version;
    String? client;
    ServerData? serverdata;
    String? time;
    String? test;
    String? language;

    Credentials({this.hash,this.id,this.version,this.client,this.serverdata,this.time,this.test,this.language});
    Credentials.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        hash = json['hash'];
        id = json['id'];
        version = json['version'];
        client = json['client'];
        serverdata = JsonConverters.fromJson(json['serverdata'],'ServerData',context!);
        time = json['time'];
        test = json['test'];
        language = json['language'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'hash': hash,
        'id': id,
        'version': version,
        'client': client,
        'serverdata': JsonConverters.toJson(serverdata,'ServerData',context!),
        'time': time,
        'test': test,
        'language': language
    };

    getTypeName() => "Credentials";
    TypeContext? context = _ctx;
}

class CheckoutData implements IConvertible
{
    Uri? terms;
    Uri? privacyPolicy;
    String? redirectOnSuccess;

    CheckoutData({this.terms,this.privacyPolicy,this.redirectOnSuccess});
    CheckoutData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        terms = JsonConverters.fromJson(json['terms'],'Uri',context!);
        privacyPolicy = JsonConverters.fromJson(json['privacyPolicy'],'Uri',context!);
        redirectOnSuccess = json['redirectOnSuccess'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'terms': JsonConverters.toJson(terms,'Uri',context!),
        'privacyPolicy': JsonConverters.toJson(privacyPolicy,'Uri',context!),
        'redirectOnSuccess': redirectOnSuccess
    };

    getTypeName() => "CheckoutData";
    TypeContext? context = _ctx;
}

class CheckoutPaymentData implements IConvertible
{
    String? currency;
    String? language;
    String? country;
    String? autoactivate;
    String? orderid;
    String? returnmethod;
    String? accepturl;
    String? cancelurl;
    Uri? callbackurl;

    CheckoutPaymentData({this.currency,this.language,this.country,this.autoactivate,this.orderid,this.returnmethod,this.accepturl,this.cancelurl,this.callbackurl});
    CheckoutPaymentData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        currency = json['currency'];
        language = json['language'];
        country = json['country'];
        autoactivate = json['autoactivate'];
        orderid = json['orderid'];
        returnmethod = json['returnmethod'];
        accepturl = json['accepturl'];
        cancelurl = json['cancelurl'];
        callbackurl = JsonConverters.fromJson(json['callbackurl'],'Uri',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'currency': currency,
        'language': language,
        'country': country,
        'autoactivate': autoactivate,
        'orderid': orderid,
        'returnmethod': returnmethod,
        'accepturl': accepturl,
        'cancelurl': cancelurl,
        'callbackurl': JsonConverters.toJson(callbackurl,'Uri',context!)
    };

    getTypeName() => "CheckoutPaymentData";
    TypeContext? context = _ctx;
}

class PaymentInfo implements IConvertible
{
    String? paymentdate;
    String? paymentterms;
    String? yourreference;
    String? ourreference;
    String? projectname;
    String? deliverymethod;
    String? deliveryterms;

    PaymentInfo({this.paymentdate,this.paymentterms,this.yourreference,this.ourreference,this.projectname,this.deliverymethod,this.deliveryterms});
    PaymentInfo.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        paymentdate = json['paymentdate'];
        paymentterms = json['paymentterms'];
        yourreference = json['yourreference'];
        ourreference = json['ourreference'];
        projectname = json['projectname'];
        deliverymethod = json['deliverymethod'];
        deliveryterms = json['deliveryterms'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'paymentdate': paymentdate,
        'paymentterms': paymentterms,
        'yourreference': yourreference,
        'ourreference': ourreference,
        'projectname': projectname,
        'deliverymethod': deliverymethod,
        'deliveryterms': deliveryterms
    };

    getTypeName() => "PaymentInfo";
    TypeContext? context = _ctx;
}

class CartHandling implements IConvertible
{
    String? withouttax;
    String? taxrate;

    CartHandling({this.withouttax,this.taxrate});
    CartHandling.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        withouttax = json['withouttax'];
        taxrate = json['taxrate'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'withouttax': withouttax,
        'taxrate': taxrate
    };

    getTypeName() => "CartHandling";
    TypeContext? context = _ctx;
}

class CartTotal implements IConvertible
{
    String? rounding;
    String? withouttax;
    String? tax;
    String? withtax;

    CartTotal({this.rounding,this.withouttax,this.tax,this.withtax});
    CartTotal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        rounding = json['rounding'];
        withouttax = json['withouttax'];
        tax = json['tax'];
        withtax = json['withtax'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'rounding': rounding,
        'withouttax': withouttax,
        'tax': tax,
        'withtax': withtax
    };

    getTypeName() => "CartTotal";
    TypeContext? context = _ctx;
}

class Address extends StripeEntity1<Address> implements IConvertible
{
    String? City;
    String? Country;
    String? Line1;
    String? Line2;
    String? PostalCode;
    String? State;

    Address({this.City,this.Country,this.Line1,this.Line2,this.PostalCode,this.State});
    Address.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        City = json['City'];
        Country = json['Country'];
        Line1 = json['Line1'];
        Line2 = json['Line2'];
        PostalCode = json['PostalCode'];
        State = json['State'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'City': City,
        'Country': Country,
        'Line1': Line1,
        'Line2': Line2,
        'PostalCode': PostalCode,
        'State': State
    });

    getTypeName() => "Address";
    TypeContext? context = _ctx;
}

class Shipping extends StripeEntity1<Shipping> implements IConvertible
{
    Address? Address;
    String? Carrier;
    String? Name;
    String? Phone;
    String? TrackingNumber;

    Shipping({this.Address,this.Carrier,this.Name,this.Phone,this.TrackingNumber});
    Shipping.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        Carrier = json['Carrier'];
        Name = json['Name'];
        Phone = json['Phone'];
        TrackingNumber = json['TrackingNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'Carrier': Carrier,
        'Name': Name,
        'Phone': Phone,
        'TrackingNumber': TrackingNumber
    });

    getTypeName() => "Shipping";
    TypeContext? context = _ctx;
}

class Cart implements IConvertible
{
    CartHandling? Handling;
    CartTotal? Total;
    Shipping? Shipping;

    Cart({this.Handling,this.Total,this.Shipping});
    Cart.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Handling = JsonConverters.fromJson(json['Handling'],'CartHandling',context!);
        Total = JsonConverters.fromJson(json['Total'],'CartTotal',context!);
        Shipping = JsonConverters.fromJson(json['Shipping'],'Shipping',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Handling': JsonConverters.toJson(Handling,'CartHandling',context!),
        'Total': JsonConverters.toJson(Total,'CartTotal',context!),
        'Shipping': JsonConverters.toJson(Shipping,'Shipping',context!)
    };

    getTypeName() => "Cart";
    TypeContext? context = _ctx;
}

class CustomerBilling implements IConvertible
{
    String? firstname;
    String? lastname;
    String? company;
    String? street;
    String? street2;
    String? zip;
    String? city;
    String? country;
    String? phone;
    String? email;

    CustomerBilling({this.firstname,this.lastname,this.company,this.street,this.street2,this.zip,this.city,this.country,this.phone,this.email});
    CustomerBilling.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        firstname = json['firstname'];
        lastname = json['lastname'];
        company = json['company'];
        street = json['street'];
        street2 = json['street2'];
        zip = json['zip'];
        city = json['city'];
        country = json['country'];
        phone = json['phone'];
        email = json['email'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'firstname': firstname,
        'lastname': lastname,
        'company': company,
        'street': street,
        'street2': street2,
        'zip': zip,
        'city': city,
        'country': country,
        'phone': phone,
        'email': email
    };

    getTypeName() => "CustomerBilling";
    TypeContext? context = _ctx;
}

class QvicklyCustomer implements IConvertible
{
    String? nr;
    String? pno;
    CustomerBilling? Billing;

    QvicklyCustomer({this.nr,this.pno,this.Billing});
    QvicklyCustomer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        nr = json['nr'];
        pno = json['pno'];
        Billing = JsonConverters.fromJson(json['Billing'],'CustomerBilling',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'nr': nr,
        'pno': pno,
        'Billing': JsonConverters.toJson(Billing,'CustomerBilling',context!)
    };

    getTypeName() => "QvicklyCustomer";
    TypeContext? context = _ctx;
}

class InitCheckoutData implements IConvertible
{
    CheckoutData? CheckoutData;
    CheckoutPaymentData? PaymentData;
    PaymentInfo? PaymentInfo;
    List<QvicklyArticle>? Articles;
    Cart? Cart;
    QvicklyCustomer? QvicklyCustomer;

    InitCheckoutData({this.CheckoutData,this.PaymentData,this.PaymentInfo,this.Articles,this.Cart,this.QvicklyCustomer});
    InitCheckoutData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CheckoutData = JsonConverters.fromJson(json['CheckoutData'],'CheckoutData',context!);
        PaymentData = JsonConverters.fromJson(json['PaymentData'],'CheckoutPaymentData',context!);
        PaymentInfo = JsonConverters.fromJson(json['PaymentInfo'],'PaymentInfo',context!);
        Articles = JsonConverters.fromJson(json['Articles'],'List<QvicklyArticle>',context!);
        Cart = JsonConverters.fromJson(json['Cart'],'Cart',context!);
        QvicklyCustomer = JsonConverters.fromJson(json['QvicklyCustomer'],'QvicklyCustomer',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CheckoutData': JsonConverters.toJson(CheckoutData,'CheckoutData',context!),
        'PaymentData': JsonConverters.toJson(PaymentData,'CheckoutPaymentData',context!),
        'PaymentInfo': JsonConverters.toJson(PaymentInfo,'PaymentInfo',context!),
        'Articles': JsonConverters.toJson(Articles,'List<QvicklyArticle>',context!),
        'Cart': JsonConverters.toJson(Cart,'Cart',context!),
        'QvicklyCustomer': JsonConverters.toJson(QvicklyCustomer,'QvicklyCustomer',context!)
    };

    getTypeName() => "InitCheckoutData";
    TypeContext? context = _ctx;
}

class InitCheckoutRequestBody implements IConvertible
{
    Credentials? credentials;
    InitCheckoutData? data;
    String? function;

    InitCheckoutRequestBody({this.credentials,this.data,this.function});
    InitCheckoutRequestBody.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        credentials = JsonConverters.fromJson(json['credentials'],'Credentials',context!);
        data = JsonConverters.fromJson(json['data'],'InitCheckoutData',context!);
        function = json['function'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'credentials': JsonConverters.toJson(credentials,'Credentials',context!),
        'data': JsonConverters.toJson(data,'InitCheckoutData',context!),
        'function': function
    };

    getTypeName() => "InitCheckoutRequestBody";
    TypeContext? context = _ctx;
}

class QvicklyCheckoutResponse implements IConvertible
{
    int? Number;
    String? Status;
    String? OrderId;
    String? Url;

    QvicklyCheckoutResponse({this.Number,this.Status,this.OrderId,this.Url});
    QvicklyCheckoutResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Number = json['Number'];
        Status = json['Status'];
        OrderId = json['OrderId'];
        Url = json['Url'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Number': Number,
        'Status': Status,
        'OrderId': OrderId,
        'Url': Url
    };

    getTypeName() => "QvicklyCheckoutResponse";
    TypeContext? context = _ctx;
}

class QvikclyPaymentData implements IConvertible
{
    String? method;
    String? paymentplanid;
    String? currency;
    String? country;
    String? language;
    String? autoactivate;
    String? orderid;
    String? status;
    String? paymentid_related;
    String? url;

    QvikclyPaymentData({this.method,this.paymentplanid,this.currency,this.country,this.language,this.autoactivate,this.orderid,this.status,this.paymentid_related,this.url});
    QvikclyPaymentData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        method = json['method'];
        paymentplanid = json['paymentplanid'];
        currency = json['currency'];
        country = json['country'];
        language = json['language'];
        autoactivate = json['autoactivate'];
        orderid = json['orderid'];
        status = json['status'];
        paymentid_related = json['paymentid_related'];
        url = json['url'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'method': method,
        'paymentplanid': paymentplanid,
        'currency': currency,
        'country': country,
        'language': language,
        'autoactivate': autoactivate,
        'orderid': orderid,
        'status': status,
        'paymentid_related': paymentid_related,
        'url': url
    };

    getTypeName() => "QvikclyPaymentData";
    TypeContext? context = _ctx;
}

class Card implements IConvertible
{
    String? promptname;
    String? recurring;
    String? recurringnr;
    String? accepturl;
    String? cancelurl;
    String? callbackurl;
    String? returnmethod;

    Card({this.promptname,this.recurring,this.recurringnr,this.accepturl,this.cancelurl,this.callbackurl,this.returnmethod});
    Card.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        promptname = json['promptname'];
        recurring = json['recurring'];
        recurringnr = json['recurringnr'];
        accepturl = json['accepturl'];
        cancelurl = json['cancelurl'];
        callbackurl = json['callbackurl'];
        returnmethod = json['returnmethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'promptname': promptname,
        'recurring': recurring,
        'recurringnr': recurringnr,
        'accepturl': accepturl,
        'cancelurl': cancelurl,
        'callbackurl': callbackurl,
        'returnmethod': returnmethod
    };

    getTypeName() => "Card";
    TypeContext? context = _ctx;
}

class Settlement implements IConvertible
{
    String? number;
    String? date;

    Settlement({this.number,this.date});
    Settlement.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        number = json['number'];
        date = json['date'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'number': number,
        'date': date
    };

    getTypeName() => "Settlement";
    TypeContext? context = _ctx;
}

class QvicklyPaymentResponse implements IConvertible
{
    QvikclyPaymentData? PaymentData;
    PaymentInfo? PaymentInfo;
    Card? Card;
    Settlement? Settlement;
    QvicklyCustomer? QvicklyCustomer;
    List<QvicklyArticle>? Articles;
    Cart? Cart;

    QvicklyPaymentResponse({this.PaymentData,this.PaymentInfo,this.Card,this.Settlement,this.QvicklyCustomer,this.Articles,this.Cart});
    QvicklyPaymentResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PaymentData = JsonConverters.fromJson(json['PaymentData'],'QvikclyPaymentData',context!);
        PaymentInfo = JsonConverters.fromJson(json['PaymentInfo'],'PaymentInfo',context!);
        Card = JsonConverters.fromJson(json['Card'],'Card',context!);
        Settlement = JsonConverters.fromJson(json['Settlement'],'Settlement',context!);
        QvicklyCustomer = JsonConverters.fromJson(json['QvicklyCustomer'],'QvicklyCustomer',context!);
        Articles = JsonConverters.fromJson(json['Articles'],'List<QvicklyArticle>',context!);
        Cart = JsonConverters.fromJson(json['Cart'],'Cart',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PaymentData': JsonConverters.toJson(PaymentData,'QvikclyPaymentData',context!),
        'PaymentInfo': JsonConverters.toJson(PaymentInfo,'PaymentInfo',context!),
        'Card': JsonConverters.toJson(Card,'Card',context!),
        'Settlement': JsonConverters.toJson(Settlement,'Settlement',context!),
        'QvicklyCustomer': JsonConverters.toJson(QvicklyCustomer,'QvicklyCustomer',context!),
        'Articles': JsonConverters.toJson(Articles,'List<QvicklyArticle>',context!),
        'Cart': JsonConverters.toJson(Cart,'Cart',context!)
    };

    getTypeName() => "QvicklyPaymentResponse";
    TypeContext? context = _ctx;
}

enum Payson2CheckoutStatus
{
    None,
    Created,
    FormsFilled,
    ReadyToPay,
    ProcessingPayment,
    ReadyToShip,
    Shipped,
    PaidToAccount,
    Canceled,
    Credited,
    Expired,
    Denied,
}

enum CustomerType
{
    Person,
    Business,
}

class UserAccessKeys extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    int? AccessKeyTypeId;

    // @Required()
    String? Value;

    // @Required()
    String? CustomerId;

    String? Description;
    // @Required()
    String? Id;

    UserAccessKeys({this.CompanyId,this.AccessKeyTypeId,this.Value,this.CustomerId,this.Description,this.Id});
    UserAccessKeys.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        AccessKeyTypeId = json['AccessKeyTypeId'];
        Value = json['Value'];
        CustomerId = json['CustomerId'];
        Description = json['Description'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'AccessKeyTypeId': AccessKeyTypeId,
        'Value': Value,
        'CustomerId': CustomerId,
        'Description': Description,
        'Id': Id
    });

    getTypeName() => "UserAccessKeys";
    TypeContext? context = _ctx;
}

class ExternalReference extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    String? Id;

    // @Required()
    String? OwnerId;

    // @Required()
    String? ReferenceType;

    String? ExternalData;
    String? CreatedBy;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;

    ExternalReference({this.CompanyId,this.Id,this.OwnerId,this.ReferenceType,this.ExternalData,this.CreatedBy,this.Updated,this.Created,this.ModifiedDate});
    ExternalReference.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        OwnerId = json['OwnerId'];
        ReferenceType = json['ReferenceType'];
        ExternalData = json['ExternalData'];
        CreatedBy = json['CreatedBy'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'OwnerId': OwnerId,
        'ReferenceType': ReferenceType,
        'ExternalData': ExternalData,
        'CreatedBy': CreatedBy,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "ExternalReference";
    TypeContext? context = _ctx;
}

enum CompanyStatus
{
    Registered,
    AwaitingApproval,
    Approved,
    Inactive,
    ClosedDown,
    NotApproved,
}

class ScheduleView extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    DateTime? ModifiedDate;
    int? Id;

    ScheduleView({this.Name,this.ModifiedDate,this.Id});
    ScheduleView.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "ScheduleView";
    TypeContext? context = _ctx;
}

class WeekNumberSetting extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WeekNumberSetting({this.Name,this.Description,this.ModifiedDate,this.Id});
    WeekNumberSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "WeekNumberSetting";
    TypeContext? context = _ctx;
}

class BookingTemplate extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? UsedByApplication;

    DateTime? ModifiedDate;
    int? Id;

    BookingTemplate({this.Name,this.Description,this.UsedByApplication,this.ModifiedDate,this.Id});
    BookingTemplate.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        UsedByApplication = json['UsedByApplication'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'UsedByApplication': UsedByApplication,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "BookingTemplate";
    TypeContext? context = _ctx;
}

class CalendarType extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    int? Id;

    CalendarType({this.Name,this.Description,this.Active,this.ModifiedDate,this.Id});
    CalendarType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Active = json['Active'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Active': Active,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "CalendarType";
    TypeContext? context = _ctx;
}

class FreeSpotTexts extends BaseModel implements IConvertible
{
    // @Required()
    String? TextSingular;

    // @Required()
    String? TextPlural;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    FreeSpotTexts({this.TextSingular,this.TextPlural,this.ModifiedDate,this.Id});
    FreeSpotTexts.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        TextSingular = json['TextSingular'];
        TextPlural = json['TextPlural'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'TextSingular': TextSingular,
        'TextPlural': TextPlural,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "FreeSpotTexts";
    TypeContext? context = _ctx;
}

class BookingStatusOptions implements IConvertible
{
    int? Id;
    String? Name;
    String? Description;

    BookingStatusOptions({this.Id,this.Name,this.Description});
    BookingStatusOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Description': Description
    };

    getTypeName() => "BookingStatusOptions";
    TypeContext? context = _ctx;
}

class BookingSettings extends BaseModel implements IConvertible
{
    // @References(typeof(FreeSpotTexts))
    int? FreeSpotTextsId;

    // @Ignore()
    bool? SendEmailConfirmation;

    // @Ignore()
    List<ScheduleView>? ScheduleViewOptions;

    // @Ignore()
    List<WeekNumberSetting>? WeekNumberSettingOptions;

    // @Ignore()
    List<BookingTemplate>? BookingTemplateOptions;

    // @Ignore()
    List<CalendarType>? CalendarTypeOptions;

    // @Ignore()
    List<FreeSpotTexts>? FreeSpotTextOptions;

    // @Ignore()
    List<BookingStatusOptions>? BookingStatusOptions;

    FreeSpotTexts? FreeSpotTextsInfo;
    // @Ignore()
    String? FreeSpotsTextSingular;

    // @Ignore()
    String? FreeSpotsTextPlural;

    // @Required()
    int? BookingStatusId;

    // @Required()
    int? ScheduleViewId;

    // @Required()
    int? BookingTemplateId;

    // @Required()
    int? CalendarTypeId;

    // @Required()
    bool? AllowBookingOnUnbookedTimes;

    // @Required()
    bool? SendEmailReminder;

    // @Required()
    bool? SendSmsReminder;

    // @Required()
    bool? SendSmsConfirmation;

    // @Required()
    int? EmailReminderTime;

    // @Required()
    int? SmsReminderTime;

    // @Required()
    int? MaxActiveBookings;

    // @Required()
    bool? SendNotifications;

    String? SendNotificationsEmail;
    // @Required()
    bool? EnableMobileApp;

    Duration? ScheduleStartTime;
    Duration? ScheduleEndTime;
    String? ReceiptTemplate;
    // @Required()
    int? ScheduleTimeSlotMinutes;

    // @Required()
    bool? ShowFreeTimesLeft;

    // @Required()
    bool? EnableICalGroupBookings;

    String? AgreementTemplate;
    // @Required()
    bool? ScheduleShowTimeExeptions;

    // @Required()
    bool? EnableBookingsOnSameTime;

    // @Required()
    int? ShowWeekNumberSettingId;

    // @Required()
    bool? EnableShowBookedTimes;

    // @Required()
    bool? EnableSendFollowUpMessage;

    // @Required()
    int? FollowUpMessageTime;

    String? MessageText;
    // @Required()
    bool? ScheduleGroupResources;

    // @Required()
    int? BookSpotUserResponseMinutes;

    // @Required()
    bool? IsBookSpotDirectly;

    // @Required()
    int? BookSpotDirectlyTimeLeftMinutes;

    // @Required()
    bool? SendEmailNotificationQueue;

    // @Required()
    bool? SendSMSNotificationQueue;

    // @Required()
    bool? SchedulerDisableHorizontalScrolling;

    // @Required()
    bool? BookOnlyOnExistingCustomers;

    // @Required()
    bool? AutoGenerateUniquePinCode;

    // @Required()
    bool? WeightedPrices;

    DateTime? ModifiedDate;
    // @Required()
    bool? AutoCreateUserProfile;

    bool? ShowMultipleResourcesAsOne;
    bool? ShowMultiDayAsTime;
    // @Required()
    String? Id;

    BookingSettings({this.FreeSpotTextsId,this.SendEmailConfirmation,this.ScheduleViewOptions,this.WeekNumberSettingOptions,this.BookingTemplateOptions,this.CalendarTypeOptions,this.FreeSpotTextOptions,this.BookingStatusOptions,this.FreeSpotTextsInfo,this.FreeSpotsTextSingular,this.FreeSpotsTextPlural,this.BookingStatusId,this.ScheduleViewId,this.BookingTemplateId,this.CalendarTypeId,this.AllowBookingOnUnbookedTimes,this.SendEmailReminder,this.SendSmsReminder,this.SendSmsConfirmation,this.EmailReminderTime,this.SmsReminderTime,this.MaxActiveBookings,this.SendNotifications,this.SendNotificationsEmail,this.EnableMobileApp,this.ScheduleStartTime,this.ScheduleEndTime,this.ReceiptTemplate,this.ScheduleTimeSlotMinutes,this.ShowFreeTimesLeft,this.EnableICalGroupBookings,this.AgreementTemplate,this.ScheduleShowTimeExeptions,this.EnableBookingsOnSameTime,this.ShowWeekNumberSettingId,this.EnableShowBookedTimes,this.EnableSendFollowUpMessage,this.FollowUpMessageTime,this.MessageText,this.ScheduleGroupResources,this.BookSpotUserResponseMinutes,this.IsBookSpotDirectly,this.BookSpotDirectlyTimeLeftMinutes,this.SendEmailNotificationQueue,this.SendSMSNotificationQueue,this.SchedulerDisableHorizontalScrolling,this.BookOnlyOnExistingCustomers,this.AutoGenerateUniquePinCode,this.WeightedPrices,this.ModifiedDate,this.AutoCreateUserProfile,this.ShowMultipleResourcesAsOne,this.ShowMultiDayAsTime,this.Id});
    BookingSettings.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FreeSpotTextsId = json['FreeSpotTextsId'];
        SendEmailConfirmation = json['SendEmailConfirmation'];
        ScheduleViewOptions = JsonConverters.fromJson(json['ScheduleViewOptions'],'List<ScheduleView>',context!);
        WeekNumberSettingOptions = JsonConverters.fromJson(json['WeekNumberSettingOptions'],'List<WeekNumberSetting>',context!);
        BookingTemplateOptions = JsonConverters.fromJson(json['BookingTemplateOptions'],'List<BookingTemplate>',context!);
        CalendarTypeOptions = JsonConverters.fromJson(json['CalendarTypeOptions'],'List<CalendarType>',context!);
        FreeSpotTextOptions = JsonConverters.fromJson(json['FreeSpotTextOptions'],'List<FreeSpotTexts>',context!);
        BookingStatusOptions = JsonConverters.fromJson(json['BookingStatusOptions'],'List<BookingStatusOptions>',context!);
        FreeSpotTextsInfo = JsonConverters.fromJson(json['FreeSpotTextsInfo'],'FreeSpotTexts',context!);
        FreeSpotsTextSingular = json['FreeSpotsTextSingular'];
        FreeSpotsTextPlural = json['FreeSpotsTextPlural'];
        BookingStatusId = json['BookingStatusId'];
        ScheduleViewId = json['ScheduleViewId'];
        BookingTemplateId = json['BookingTemplateId'];
        CalendarTypeId = json['CalendarTypeId'];
        AllowBookingOnUnbookedTimes = json['AllowBookingOnUnbookedTimes'];
        SendEmailReminder = json['SendEmailReminder'];
        SendSmsReminder = json['SendSmsReminder'];
        SendSmsConfirmation = json['SendSmsConfirmation'];
        EmailReminderTime = json['EmailReminderTime'];
        SmsReminderTime = json['SmsReminderTime'];
        MaxActiveBookings = json['MaxActiveBookings'];
        SendNotifications = json['SendNotifications'];
        SendNotificationsEmail = json['SendNotificationsEmail'];
        EnableMobileApp = json['EnableMobileApp'];
        ScheduleStartTime = JsonConverters.fromJson(json['ScheduleStartTime'],'Duration',context!);
        ScheduleEndTime = JsonConverters.fromJson(json['ScheduleEndTime'],'Duration',context!);
        ReceiptTemplate = json['ReceiptTemplate'];
        ScheduleTimeSlotMinutes = json['ScheduleTimeSlotMinutes'];
        ShowFreeTimesLeft = json['ShowFreeTimesLeft'];
        EnableICalGroupBookings = json['EnableICalGroupBookings'];
        AgreementTemplate = json['AgreementTemplate'];
        ScheduleShowTimeExeptions = json['ScheduleShowTimeExeptions'];
        EnableBookingsOnSameTime = json['EnableBookingsOnSameTime'];
        ShowWeekNumberSettingId = json['ShowWeekNumberSettingId'];
        EnableShowBookedTimes = json['EnableShowBookedTimes'];
        EnableSendFollowUpMessage = json['EnableSendFollowUpMessage'];
        FollowUpMessageTime = json['FollowUpMessageTime'];
        MessageText = json['MessageText'];
        ScheduleGroupResources = json['ScheduleGroupResources'];
        BookSpotUserResponseMinutes = json['BookSpotUserResponseMinutes'];
        IsBookSpotDirectly = json['IsBookSpotDirectly'];
        BookSpotDirectlyTimeLeftMinutes = json['BookSpotDirectlyTimeLeftMinutes'];
        SendEmailNotificationQueue = json['SendEmailNotificationQueue'];
        SendSMSNotificationQueue = json['SendSMSNotificationQueue'];
        SchedulerDisableHorizontalScrolling = json['SchedulerDisableHorizontalScrolling'];
        BookOnlyOnExistingCustomers = json['BookOnlyOnExistingCustomers'];
        AutoGenerateUniquePinCode = json['AutoGenerateUniquePinCode'];
        WeightedPrices = json['WeightedPrices'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        AutoCreateUserProfile = json['AutoCreateUserProfile'];
        ShowMultipleResourcesAsOne = json['ShowMultipleResourcesAsOne'];
        ShowMultiDayAsTime = json['ShowMultiDayAsTime'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FreeSpotTextsId': FreeSpotTextsId,
        'SendEmailConfirmation': SendEmailConfirmation,
        'ScheduleViewOptions': JsonConverters.toJson(ScheduleViewOptions,'List<ScheduleView>',context!),
        'WeekNumberSettingOptions': JsonConverters.toJson(WeekNumberSettingOptions,'List<WeekNumberSetting>',context!),
        'BookingTemplateOptions': JsonConverters.toJson(BookingTemplateOptions,'List<BookingTemplate>',context!),
        'CalendarTypeOptions': JsonConverters.toJson(CalendarTypeOptions,'List<CalendarType>',context!),
        'FreeSpotTextOptions': JsonConverters.toJson(FreeSpotTextOptions,'List<FreeSpotTexts>',context!),
        'BookingStatusOptions': JsonConverters.toJson(BookingStatusOptions,'List<BookingStatusOptions>',context!),
        'FreeSpotTextsInfo': JsonConverters.toJson(FreeSpotTextsInfo,'FreeSpotTexts',context!),
        'FreeSpotsTextSingular': FreeSpotsTextSingular,
        'FreeSpotsTextPlural': FreeSpotsTextPlural,
        'BookingStatusId': BookingStatusId,
        'ScheduleViewId': ScheduleViewId,
        'BookingTemplateId': BookingTemplateId,
        'CalendarTypeId': CalendarTypeId,
        'AllowBookingOnUnbookedTimes': AllowBookingOnUnbookedTimes,
        'SendEmailReminder': SendEmailReminder,
        'SendSmsReminder': SendSmsReminder,
        'SendSmsConfirmation': SendSmsConfirmation,
        'EmailReminderTime': EmailReminderTime,
        'SmsReminderTime': SmsReminderTime,
        'MaxActiveBookings': MaxActiveBookings,
        'SendNotifications': SendNotifications,
        'SendNotificationsEmail': SendNotificationsEmail,
        'EnableMobileApp': EnableMobileApp,
        'ScheduleStartTime': JsonConverters.toJson(ScheduleStartTime,'Duration',context!),
        'ScheduleEndTime': JsonConverters.toJson(ScheduleEndTime,'Duration',context!),
        'ReceiptTemplate': ReceiptTemplate,
        'ScheduleTimeSlotMinutes': ScheduleTimeSlotMinutes,
        'ShowFreeTimesLeft': ShowFreeTimesLeft,
        'EnableICalGroupBookings': EnableICalGroupBookings,
        'AgreementTemplate': AgreementTemplate,
        'ScheduleShowTimeExeptions': ScheduleShowTimeExeptions,
        'EnableBookingsOnSameTime': EnableBookingsOnSameTime,
        'ShowWeekNumberSettingId': ShowWeekNumberSettingId,
        'EnableShowBookedTimes': EnableShowBookedTimes,
        'EnableSendFollowUpMessage': EnableSendFollowUpMessage,
        'FollowUpMessageTime': FollowUpMessageTime,
        'MessageText': MessageText,
        'ScheduleGroupResources': ScheduleGroupResources,
        'BookSpotUserResponseMinutes': BookSpotUserResponseMinutes,
        'IsBookSpotDirectly': IsBookSpotDirectly,
        'BookSpotDirectlyTimeLeftMinutes': BookSpotDirectlyTimeLeftMinutes,
        'SendEmailNotificationQueue': SendEmailNotificationQueue,
        'SendSMSNotificationQueue': SendSMSNotificationQueue,
        'SchedulerDisableHorizontalScrolling': SchedulerDisableHorizontalScrolling,
        'BookOnlyOnExistingCustomers': BookOnlyOnExistingCustomers,
        'AutoGenerateUniquePinCode': AutoGenerateUniquePinCode,
        'WeightedPrices': WeightedPrices,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'AutoCreateUserProfile': AutoCreateUserProfile,
        'ShowMultipleResourcesAsOne': ShowMultipleResourcesAsOne,
        'ShowMultiDayAsTime': ShowMultiDayAsTime,
        'Id': Id
    });

    getTypeName() => "BookingSettings";
    TypeContext? context = _ctx;
}

class CompanyType extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    CompanyType({this.Name,this.Description,this.ModifiedDate,this.Id});
    CompanyType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "CompanyType";
    TypeContext? context = _ctx;
}

class CodeLockSystem extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Supplier;

    String? LogoType;
    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    CodeLockSystem({this.Name,this.Supplier,this.LogoType,this.Description,this.ModifiedDate,this.Id});
    CodeLockSystem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Supplier = json['Supplier'];
        LogoType = json['LogoType'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Supplier': Supplier,
        'LogoType': LogoType,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "CodeLockSystem";
    TypeContext? context = _ctx;
}

class CodeLockSetting extends BaseModel implements IConvertible
{
    // @Ignore()
    List<CodeLockSystem>? CodeLockSystemOptions;

    // @Required()
    bool? Active;

    // @Required()
    int? CodeLockSystemsId;

    // @Required()
    int? ValidBeforeMinutes;

    // @Required()
    int? ValidAfterMinutes;

    // @Required()
    bool? DeleteOldBySchedule;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;
    // @Required()
    bool? SendEmailNotification;

    // @Required()
    bool? SendSMSNotification;

    // @Required()
    int? EmailNotificationTime;

    // @Required()
    int? SMSNotificationTime;

    // @Required()
    String? Id;

    CodeLockSetting({this.CodeLockSystemOptions,this.Active,this.CodeLockSystemsId,this.ValidBeforeMinutes,this.ValidAfterMinutes,this.DeleteOldBySchedule,this.Created,this.Updated,this.ModifiedDate,this.SendEmailNotification,this.SendSMSNotification,this.EmailNotificationTime,this.SMSNotificationTime,this.Id});
    CodeLockSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CodeLockSystemOptions = JsonConverters.fromJson(json['CodeLockSystemOptions'],'List<CodeLockSystem>',context!);
        Active = json['Active'];
        CodeLockSystemsId = json['CodeLockSystemsId'];
        ValidBeforeMinutes = json['ValidBeforeMinutes'];
        ValidAfterMinutes = json['ValidAfterMinutes'];
        DeleteOldBySchedule = json['DeleteOldBySchedule'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        SendEmailNotification = json['SendEmailNotification'];
        SendSMSNotification = json['SendSMSNotification'];
        EmailNotificationTime = json['EmailNotificationTime'];
        SMSNotificationTime = json['SMSNotificationTime'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CodeLockSystemOptions': JsonConverters.toJson(CodeLockSystemOptions,'List<CodeLockSystem>',context!),
        'Active': Active,
        'CodeLockSystemsId': CodeLockSystemsId,
        'ValidBeforeMinutes': ValidBeforeMinutes,
        'ValidAfterMinutes': ValidAfterMinutes,
        'DeleteOldBySchedule': DeleteOldBySchedule,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'SendEmailNotification': SendEmailNotification,
        'SendSMSNotification': SendSMSNotification,
        'EmailNotificationTime': EmailNotificationTime,
        'SMSNotificationTime': SMSNotificationTime,
        'Id': Id
    });

    getTypeName() => "CodeLockSetting";
    TypeContext? context = _ctx;
}

class AdminPaymentOptions extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    AdminPaymentOptions({this.Name,this.Description,this.ModifiedDate,this.Id});
    AdminPaymentOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "AdminPaymentOptions";
    TypeContext? context = _ctx;
}

class PaymentProviders extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Category;

    String? Url;
    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    PaymentProviders({this.Name,this.Description,this.Category,this.Url,this.Active,this.ModifiedDate,this.Id});
    PaymentProviders.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Category = json['Category'];
        Url = json['Url'];
        Active = json['Active'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Category': Category,
        'Url': Url,
        'Active': Active,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "PaymentProviders";
    TypeContext? context = _ctx;
}

class PaymentSetting extends BaseModel implements IConvertible
{
    AdminPaymentOptions? AdminPaymentOption;
    // @Ignore()
    List<AdminPaymentOptions>? AdminPaymentOptions;

    // @Ignore()
    List<PaymentProviders>? PaymentProviderOptions;

    // @Required()
    bool? Enabled;

    // @Required()
    int? InvoiceFee;

    // @Required()
    bool? AllowCreditCardPayment;

    // @Required()
    bool? AllowInvoicePayment;

    // @Required()
    bool? AllowBankPayment;

    // @Required()
    bool? GuaranteeOffered;

    // @Required()
    bool? RefundOnCancelBooking;

    int? DefaultPaymentOptionId;
    // @Required()
    int? PaymentProviderId;

    // @Required()
    bool? SendPaymentRequestDirectly;

    DateTime? ModifiedDate;
    // @Required()
    String? Id;

    PaymentSetting({this.AdminPaymentOption,this.AdminPaymentOptions,this.PaymentProviderOptions,this.Enabled,this.InvoiceFee,this.AllowCreditCardPayment,this.AllowInvoicePayment,this.AllowBankPayment,this.GuaranteeOffered,this.RefundOnCancelBooking,this.DefaultPaymentOptionId,this.PaymentProviderId,this.SendPaymentRequestDirectly,this.ModifiedDate,this.Id});
    PaymentSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AdminPaymentOption = JsonConverters.fromJson(json['AdminPaymentOption'],'AdminPaymentOptions',context!);
        AdminPaymentOptions = JsonConverters.fromJson(json['AdminPaymentOptions'],'List<AdminPaymentOptions>',context!);
        PaymentProviderOptions = JsonConverters.fromJson(json['PaymentProviderOptions'],'List<PaymentProviders>',context!);
        Enabled = json['Enabled'];
        InvoiceFee = json['InvoiceFee'];
        AllowCreditCardPayment = json['AllowCreditCardPayment'];
        AllowInvoicePayment = json['AllowInvoicePayment'];
        AllowBankPayment = json['AllowBankPayment'];
        GuaranteeOffered = json['GuaranteeOffered'];
        RefundOnCancelBooking = json['RefundOnCancelBooking'];
        DefaultPaymentOptionId = json['DefaultPaymentOptionId'];
        PaymentProviderId = json['PaymentProviderId'];
        SendPaymentRequestDirectly = json['SendPaymentRequestDirectly'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AdminPaymentOption': JsonConverters.toJson(AdminPaymentOption,'AdminPaymentOptions',context!),
        'AdminPaymentOptions': JsonConverters.toJson(AdminPaymentOptions,'List<AdminPaymentOptions>',context!),
        'PaymentProviderOptions': JsonConverters.toJson(PaymentProviderOptions,'List<PaymentProviders>',context!),
        'Enabled': Enabled,
        'InvoiceFee': InvoiceFee,
        'AllowCreditCardPayment': AllowCreditCardPayment,
        'AllowInvoicePayment': AllowInvoicePayment,
        'AllowBankPayment': AllowBankPayment,
        'GuaranteeOffered': GuaranteeOffered,
        'RefundOnCancelBooking': RefundOnCancelBooking,
        'DefaultPaymentOptionId': DefaultPaymentOptionId,
        'PaymentProviderId': PaymentProviderId,
        'SendPaymentRequestDirectly': SendPaymentRequestDirectly,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "PaymentSetting";
    TypeContext? context = _ctx;
}

class LanguageResponse implements IConvertible
{
    String? Id;
    String? Name;

    LanguageResponse({this.Id,this.Name});
    LanguageResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name
    };

    getTypeName() => "LanguageResponse";
    TypeContext? context = _ctx;
}

class CompanySetting extends BaseModel implements IConvertible
{
    // @Ignore()
    List<LanguageResponse>? Languages;

    // @Required()
    bool? Active;

    String? InactiveMessage;
    // @Required()
    bool? Searchable;

    String? GATrackingId;
    String? FacebookPixelId;
    // @Required()
    bool? MultiLanguage;

    // @Required()
    bool? EnableAPITranslation;

    // @Required()
    String? DefaultLanguage;

    DateTime? ModifiedDate;
    String? GTMTrackingId;
    // @Required()
    bool? ShowOnMarketPlace;

    String? GoogleAdsConversionId;
    String? LinkedinTagId;
    String? GoogleAdsConversionLabel;
    bool? SendCustomerInformationToExternalProviders;
    // @Required()
    String? Id;

    bool? IsWebhookFeatureEnabled;
    int? SmsMessageSendLimit;
    int? EmailMessageSendLimit;

    CompanySetting({this.Languages,this.Active,this.InactiveMessage,this.Searchable,this.GATrackingId,this.FacebookPixelId,this.MultiLanguage,this.EnableAPITranslation,this.DefaultLanguage,this.ModifiedDate,this.GTMTrackingId,this.ShowOnMarketPlace,this.GoogleAdsConversionId,this.LinkedinTagId,this.GoogleAdsConversionLabel,this.SendCustomerInformationToExternalProviders,this.Id,this.IsWebhookFeatureEnabled,this.SmsMessageSendLimit,this.EmailMessageSendLimit});
    CompanySetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Languages = JsonConverters.fromJson(json['Languages'],'List<LanguageResponse>',context!);
        Active = json['Active'];
        InactiveMessage = json['InactiveMessage'];
        Searchable = json['Searchable'];
        GATrackingId = json['GATrackingId'];
        FacebookPixelId = json['FacebookPixelId'];
        MultiLanguage = json['MultiLanguage'];
        EnableAPITranslation = json['EnableAPITranslation'];
        DefaultLanguage = json['DefaultLanguage'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        GTMTrackingId = json['GTMTrackingId'];
        ShowOnMarketPlace = json['ShowOnMarketPlace'];
        GoogleAdsConversionId = json['GoogleAdsConversionId'];
        LinkedinTagId = json['LinkedinTagId'];
        GoogleAdsConversionLabel = json['GoogleAdsConversionLabel'];
        SendCustomerInformationToExternalProviders = json['SendCustomerInformationToExternalProviders'];
        Id = json['Id'];
        IsWebhookFeatureEnabled = json['IsWebhookFeatureEnabled'];
        SmsMessageSendLimit = json['SmsMessageSendLimit'];
        EmailMessageSendLimit = json['EmailMessageSendLimit'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Languages': JsonConverters.toJson(Languages,'List<LanguageResponse>',context!),
        'Active': Active,
        'InactiveMessage': InactiveMessage,
        'Searchable': Searchable,
        'GATrackingId': GATrackingId,
        'FacebookPixelId': FacebookPixelId,
        'MultiLanguage': MultiLanguage,
        'EnableAPITranslation': EnableAPITranslation,
        'DefaultLanguage': DefaultLanguage,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'GTMTrackingId': GTMTrackingId,
        'ShowOnMarketPlace': ShowOnMarketPlace,
        'GoogleAdsConversionId': GoogleAdsConversionId,
        'LinkedinTagId': LinkedinTagId,
        'GoogleAdsConversionLabel': GoogleAdsConversionLabel,
        'SendCustomerInformationToExternalProviders': SendCustomerInformationToExternalProviders,
        'Id': Id,
        'IsWebhookFeatureEnabled': IsWebhookFeatureEnabled,
        'SmsMessageSendLimit': SmsMessageSendLimit,
        'EmailMessageSendLimit': EmailMessageSendLimit
    });

    getTypeName() => "CompanySetting";
    TypeContext? context = _ctx;
}

class WidgetServiceLayouts extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Code;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WidgetServiceLayouts({this.Name,this.Description,this.Code,this.ModifiedDate,this.Id});
    WidgetServiceLayouts.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Code = json['Code'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Code': Code,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "WidgetServiceLayouts";
    TypeContext? context = _ctx;
}

class WidgetTimeLayouts extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Code;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WidgetTimeLayouts({this.Name,this.Description,this.Code,this.ModifiedDate,this.Id});
    WidgetTimeLayouts.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Code = json['Code'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Code': Code,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "WidgetTimeLayouts";
    TypeContext? context = _ctx;
}

class WidgetBookingLayouts extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Code;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WidgetBookingLayouts({this.Name,this.Description,this.Code,this.ModifiedDate,this.Id});
    WidgetBookingLayouts.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Code = json['Code'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Code': Code,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "WidgetBookingLayouts";
    TypeContext? context = _ctx;
}

class WidgetBookingMethods extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Code;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WidgetBookingMethods({this.Name,this.Description,this.Code,this.ModifiedDate,this.Id});
    WidgetBookingMethods.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Code = json['Code'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Code': Code,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "WidgetBookingMethods";
    TypeContext? context = _ctx;
}

class HomepageWidgetSetting extends BaseModel implements IConvertible
{
    // @Ignore()
    List<WidgetServiceLayouts>? WidgetServiceLayoutOptions;

    // @Ignore()
    List<WidgetTimeLayouts>? WidgetTimeLayoutOptions;

    // @Ignore()
    List<WidgetBookingLayouts>? WidgetBookingLayoutOptions;

    // @Ignore()
    List<WidgetBookingMethods>? WidgetBookingMethodOptions;

    // @Required()
    int? ServiceLayoutId;

    // @Required()
    int? TimeLayoutId;

    // @Required()
    int? BookingLayoutId;

    // @Required()
    String? PrimaryColor;

    // @Required()
    bool? ShowServiceImage;

    // @Required()
    bool? ShowNextAvailableTime;

    // @Required()
    bool? ShowEndTime;

    String? BookedTimeSlotText;
    // @Required()
    bool? DarkTheme;

    // @Required()
    bool? ShowRebateCodeField;

    DateTime? ModifiedDate;
    // @Required()
    bool? EnableCreateAccount;

    // @Required()
    bool? EnableLogin;

    // @Required()
    bool? EnableDirectBooking;

    // @Required()
    bool? EnableFacebookLogin;

    // @Required()
    bool? ShowSubscribeToNewsletter;

    // @Required()
    String? Id;

    HomepageWidgetSetting({this.WidgetServiceLayoutOptions,this.WidgetTimeLayoutOptions,this.WidgetBookingLayoutOptions,this.WidgetBookingMethodOptions,this.ServiceLayoutId,this.TimeLayoutId,this.BookingLayoutId,this.PrimaryColor,this.ShowServiceImage,this.ShowNextAvailableTime,this.ShowEndTime,this.BookedTimeSlotText,this.DarkTheme,this.ShowRebateCodeField,this.ModifiedDate,this.EnableCreateAccount,this.EnableLogin,this.EnableDirectBooking,this.EnableFacebookLogin,this.ShowSubscribeToNewsletter,this.Id});
    HomepageWidgetSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        WidgetServiceLayoutOptions = JsonConverters.fromJson(json['WidgetServiceLayoutOptions'],'List<WidgetServiceLayouts>',context!);
        WidgetTimeLayoutOptions = JsonConverters.fromJson(json['WidgetTimeLayoutOptions'],'List<WidgetTimeLayouts>',context!);
        WidgetBookingLayoutOptions = JsonConverters.fromJson(json['WidgetBookingLayoutOptions'],'List<WidgetBookingLayouts>',context!);
        WidgetBookingMethodOptions = JsonConverters.fromJson(json['WidgetBookingMethodOptions'],'List<WidgetBookingMethods>',context!);
        ServiceLayoutId = json['ServiceLayoutId'];
        TimeLayoutId = json['TimeLayoutId'];
        BookingLayoutId = json['BookingLayoutId'];
        PrimaryColor = json['PrimaryColor'];
        ShowServiceImage = json['ShowServiceImage'];
        ShowNextAvailableTime = json['ShowNextAvailableTime'];
        ShowEndTime = json['ShowEndTime'];
        BookedTimeSlotText = json['BookedTimeSlotText'];
        DarkTheme = json['DarkTheme'];
        ShowRebateCodeField = json['ShowRebateCodeField'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        EnableCreateAccount = json['EnableCreateAccount'];
        EnableLogin = json['EnableLogin'];
        EnableDirectBooking = json['EnableDirectBooking'];
        EnableFacebookLogin = json['EnableFacebookLogin'];
        ShowSubscribeToNewsletter = json['ShowSubscribeToNewsletter'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'WidgetServiceLayoutOptions': JsonConverters.toJson(WidgetServiceLayoutOptions,'List<WidgetServiceLayouts>',context!),
        'WidgetTimeLayoutOptions': JsonConverters.toJson(WidgetTimeLayoutOptions,'List<WidgetTimeLayouts>',context!),
        'WidgetBookingLayoutOptions': JsonConverters.toJson(WidgetBookingLayoutOptions,'List<WidgetBookingLayouts>',context!),
        'WidgetBookingMethodOptions': JsonConverters.toJson(WidgetBookingMethodOptions,'List<WidgetBookingMethods>',context!),
        'ServiceLayoutId': ServiceLayoutId,
        'TimeLayoutId': TimeLayoutId,
        'BookingLayoutId': BookingLayoutId,
        'PrimaryColor': PrimaryColor,
        'ShowServiceImage': ShowServiceImage,
        'ShowNextAvailableTime': ShowNextAvailableTime,
        'ShowEndTime': ShowEndTime,
        'BookedTimeSlotText': BookedTimeSlotText,
        'DarkTheme': DarkTheme,
        'ShowRebateCodeField': ShowRebateCodeField,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'EnableCreateAccount': EnableCreateAccount,
        'EnableLogin': EnableLogin,
        'EnableDirectBooking': EnableDirectBooking,
        'EnableFacebookLogin': EnableFacebookLogin,
        'ShowSubscribeToNewsletter': ShowSubscribeToNewsletter,
        'Id': Id
    });

    getTypeName() => "HomepageWidgetSetting";
    TypeContext? context = _ctx;
}

class HomepageTemplate extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    Uri? ImageUrl;
    // @Required()
    bool? Premium;

    DateTime? ModifiedDate;
    int? Id;

    HomepageTemplate({this.Name,this.Description,this.ImageUrl,this.Premium,this.ModifiedDate,this.Id});
    HomepageTemplate.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        Premium = json['Premium'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'Premium': Premium,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "HomepageTemplate";
    TypeContext? context = _ctx;
}

class HeroSectionStyle extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    String? Description;
    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    HeroSectionStyle({this.Name,this.Description,this.ModifiedDate,this.Id});
    HeroSectionStyle.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "HeroSectionStyle";
    TypeContext? context = _ctx;
}

class HomepageSetting extends BaseModel implements ICompany, IConvertible
{
    // @Ignore()
    List<HomepageTemplate>? HomepageTemplateOptions;

    // @Ignore()
    List<HeroSectionStyle>? HomepageHeroSectionStyleOptions;

    // @Ignore()
    String? CompanyId;

    String? WelcomePageHeading;
    String? WelcomePageBody;
    String? AboutUsPageHeading;
    String? AboutUsPageBody;
    // @Required()
    int? HomePageTemplateId;

    String? ImageUrl;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? HomepageHeading;
    // @Required()
    int? HeroSectionStyleId;

    DateTime? ModifiedDate;
    // @Required()
    bool? ShowRating;

    // @Required()
    bool? EnableHomepage;

    // @Required()
    String? Id;

    HomepageSetting({this.HomepageTemplateOptions,this.HomepageHeroSectionStyleOptions,this.CompanyId,this.WelcomePageHeading,this.WelcomePageBody,this.AboutUsPageHeading,this.AboutUsPageBody,this.HomePageTemplateId,this.ImageUrl,this.Updated,this.Created,this.HomepageHeading,this.HeroSectionStyleId,this.ModifiedDate,this.ShowRating,this.EnableHomepage,this.Id});
    HomepageSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        HomepageTemplateOptions = JsonConverters.fromJson(json['HomepageTemplateOptions'],'List<HomepageTemplate>',context!);
        HomepageHeroSectionStyleOptions = JsonConverters.fromJson(json['HomepageHeroSectionStyleOptions'],'List<HeroSectionStyle>',context!);
        CompanyId = json['CompanyId'];
        WelcomePageHeading = json['WelcomePageHeading'];
        WelcomePageBody = json['WelcomePageBody'];
        AboutUsPageHeading = json['AboutUsPageHeading'];
        AboutUsPageBody = json['AboutUsPageBody'];
        HomePageTemplateId = json['HomePageTemplateId'];
        ImageUrl = json['ImageUrl'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        HomepageHeading = json['HomepageHeading'];
        HeroSectionStyleId = json['HeroSectionStyleId'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        ShowRating = json['ShowRating'];
        EnableHomepage = json['EnableHomepage'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'HomepageTemplateOptions': JsonConverters.toJson(HomepageTemplateOptions,'List<HomepageTemplate>',context!),
        'HomepageHeroSectionStyleOptions': JsonConverters.toJson(HomepageHeroSectionStyleOptions,'List<HeroSectionStyle>',context!),
        'CompanyId': CompanyId,
        'WelcomePageHeading': WelcomePageHeading,
        'WelcomePageBody': WelcomePageBody,
        'AboutUsPageHeading': AboutUsPageHeading,
        'AboutUsPageBody': AboutUsPageBody,
        'HomePageTemplateId': HomePageTemplateId,
        'ImageUrl': ImageUrl,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'HomepageHeading': HomepageHeading,
        'HeroSectionStyleId': HeroSectionStyleId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'ShowRating': ShowRating,
        'EnableHomepage': EnableHomepage,
        'Id': Id
    });

    getTypeName() => "HomepageSetting";
    TypeContext? context = _ctx;
}

class AverageRatingScore implements IConvertible
{
    double? AverageScore;
    int? Score1Count;
    int? Score2Count;
    int? Score3Count;
    int? Score4Count;
    int? Score5Count;
    int? Count;

    AverageRatingScore({this.AverageScore,this.Score1Count,this.Score2Count,this.Score3Count,this.Score4Count,this.Score5Count,this.Count});
    AverageRatingScore.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AverageScore = JsonConverters.toDouble(json['AverageScore']);
        Score1Count = json['Score1Count'];
        Score2Count = json['Score2Count'];
        Score3Count = json['Score3Count'];
        Score4Count = json['Score4Count'];
        Score5Count = json['Score5Count'];
        Count = json['Count'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AverageScore': AverageScore,
        'Score1Count': Score1Count,
        'Score2Count': Score2Count,
        'Score3Count': Score3Count,
        'Score4Count': Score4Count,
        'Score5Count': Score5Count,
        'Count': Count
    };

    getTypeName() => "AverageRatingScore";
    TypeContext? context = _ctx;
}

class Review extends BaseModel implements IConvertible
{
    String? ReviewId;
    // @Required()
    String? CompanyId;

    // @Required()
    String? Title;

    // @Required()
    String? Description;

    // @Required()
    String? Author;

    // @Required()
    int? Status;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;
    String? ReviewAnswer;

    Review({this.ReviewId,this.CompanyId,this.Title,this.Description,this.Author,this.Status,this.Created,this.Updated,this.ModifiedDate,this.ReviewAnswer});
    Review.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ReviewId = json['ReviewId'];
        CompanyId = json['CompanyId'];
        Title = json['Title'];
        Description = json['Description'];
        Author = json['Author'];
        Status = json['Status'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        ReviewAnswer = json['ReviewAnswer'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ReviewId': ReviewId,
        'CompanyId': CompanyId,
        'Title': Title,
        'Description': Description,
        'Author': Author,
        'Status': Status,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'ReviewAnswer': ReviewAnswer
    });

    getTypeName() => "Review";
    TypeContext? context = _ctx;
}

class Rating extends BaseModel implements IConvertible
{
    String? ReviewId;
    Review? Review;
    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    // @Required()
    int? RatingScore;

    // @Required()
    int? Status;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;

    Rating({this.ReviewId,this.Review,this.CompanyId,this.BookingId,this.RatingScore,this.Status,this.Created,this.Updated,this.ModifiedDate});
    Rating.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ReviewId = json['ReviewId'];
        Review = JsonConverters.fromJson(json['Review'],'Review',context!);
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        RatingScore = json['RatingScore'];
        Status = json['Status'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ReviewId': ReviewId,
        'Review': JsonConverters.toJson(Review,'Review',context!),
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'RatingScore': RatingScore,
        'Status': Status,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "Rating";
    TypeContext? context = _ctx;
}

class LicenseTypeItem extends BaseModel implements IConvertible
{
    // @Ignore()
    String? Name;

    // @Ignore()
    LicenseType? LicenseType;

    // @Required()
    int? LicenseTypesId;

    // @Required()
    int? LicenseItemsId;

    // @Required()
    int? NumberOfItems;

    int? Id;
    DateTime? ModifiedDate;

    LicenseTypeItem({this.Name,this.LicenseType,this.LicenseTypesId,this.LicenseItemsId,this.NumberOfItems,this.Id,this.ModifiedDate});
    LicenseTypeItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        LicenseType = JsonConverters.fromJson(json['LicenseType'],'LicenseType',context!);
        LicenseTypesId = json['LicenseTypesId'];
        LicenseItemsId = json['LicenseItemsId'];
        NumberOfItems = json['NumberOfItems'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'LicenseType': JsonConverters.toJson(LicenseType,'LicenseType',context!),
        'LicenseTypesId': LicenseTypesId,
        'LicenseItemsId': LicenseItemsId,
        'NumberOfItems': NumberOfItems,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "LicenseTypeItem";
    TypeContext? context = _ctx;
}

class Country extends BaseModel implements IConvertible
{
    // @References(typeof(Currency))
    String? CurrencyId;

    Currency? CurrencyInfo;
    // @Required()
    String? Name;

    String? Culture;
    String? TimeZone;
    DateTime? ModifiedDate;
    // @Required()
    String? Id;

    Country({this.CurrencyId,this.CurrencyInfo,this.Name,this.Culture,this.TimeZone,this.ModifiedDate,this.Id});
    Country.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        Name = json['Name'];
        Culture = json['Culture'];
        TimeZone = json['TimeZone'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'Name': Name,
        'Culture': Culture,
        'TimeZone': TimeZone,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "Country";
    TypeContext? context = _ctx;
}

class LicensePrice extends BaseModel implements IConvertible
{
    // @Ignore()
    Country? Country;

    // @Required()
    int? LicenseTypeId;

    // @Required()
    String? CountryId;

    // @Required()
    int? Price;

    DateTime? ModifiedDate;
    int? LicensePlanId;

    LicensePrice({this.Country,this.LicenseTypeId,this.CountryId,this.Price,this.ModifiedDate,this.LicensePlanId});
    LicensePrice.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Country = JsonConverters.fromJson(json['Country'],'Country',context!);
        LicenseTypeId = json['LicenseTypeId'];
        CountryId = json['CountryId'];
        Price = json['Price'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        LicensePlanId = json['LicensePlanId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Country': JsonConverters.toJson(Country,'Country',context!),
        'LicenseTypeId': LicenseTypeId,
        'CountryId': CountryId,
        'Price': Price,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'LicensePlanId': LicensePlanId
    });

    getTypeName() => "LicensePrice";
    TypeContext? context = _ctx;
}

class LicenseType extends BaseModel implements IConvertible
{
    // @Ignore()
    List<LicenseTypeItem>? LicenseItems;

    // @Ignore()
    List<LicensePrice>? Prices;

    // @Ignore()
    bool? IsFree;

    // @Ignore()
    int? PeriodOfNoticeDays;

    // @Ignore()
    LicenseType? NextLicenseOption;

    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    bool? ExtraLicenseOption;

    DateTime? ModifiedDate;
    bool? Active;
    String? VossTierId;
    int? Id;

    LicenseType({this.LicenseItems,this.Prices,this.IsFree,this.PeriodOfNoticeDays,this.NextLicenseOption,this.Name,this.Description,this.ExtraLicenseOption,this.ModifiedDate,this.Active,this.VossTierId,this.Id});
    LicenseType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        LicenseItems = JsonConverters.fromJson(json['LicenseItems'],'List<LicenseTypeItem>',context!);
        Prices = JsonConverters.fromJson(json['Prices'],'List<LicensePrice>',context!);
        IsFree = json['IsFree'];
        PeriodOfNoticeDays = json['PeriodOfNoticeDays'];
        NextLicenseOption = JsonConverters.fromJson(json['NextLicenseOption'],'LicenseType',context!);
        Name = json['Name'];
        Description = json['Description'];
        ExtraLicenseOption = json['ExtraLicenseOption'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Active = json['Active'];
        VossTierId = json['VossTierId'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'LicenseItems': JsonConverters.toJson(LicenseItems,'List<LicenseTypeItem>',context!),
        'Prices': JsonConverters.toJson(Prices,'List<LicensePrice>',context!),
        'IsFree': IsFree,
        'PeriodOfNoticeDays': PeriodOfNoticeDays,
        'NextLicenseOption': JsonConverters.toJson(NextLicenseOption,'LicenseType',context!),
        'Name': Name,
        'Description': Description,
        'ExtraLicenseOption': ExtraLicenseOption,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Active': Active,
        'VossTierId': VossTierId,
        'Id': Id
    });

    getTypeName() => "LicenseType";
    TypeContext? context = _ctx;
}

class License extends BaseModel implements IConvertible
{
    LicenseType? Type;
    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    int? TypeId;

    String? VossSubscriptionId;
    // @Required()
    DateTime? ValidFrom;

    // @Required()
    DateTime? ValidTo;

    // @Required()
    bool? Active;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;
    String? MetaData;

    License({this.Type,this.CompanyId,this.Id,this.TypeId,this.VossSubscriptionId,this.ValidFrom,this.ValidTo,this.Active,this.UpdatedDate,this.CreatedDate,this.ModifiedDate,this.MetaData});
    License.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Type = JsonConverters.fromJson(json['Type'],'LicenseType',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        TypeId = json['TypeId'];
        VossSubscriptionId = json['VossSubscriptionId'];
        ValidFrom = JsonConverters.fromJson(json['ValidFrom'],'DateTime',context!);
        ValidTo = JsonConverters.fromJson(json['ValidTo'],'DateTime',context!);
        Active = json['Active'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        MetaData = json['MetaData'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Type': JsonConverters.toJson(Type,'LicenseType',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'TypeId': TypeId,
        'VossSubscriptionId': VossSubscriptionId,
        'ValidFrom': JsonConverters.toJson(ValidFrom,'DateTime',context!),
        'ValidTo': JsonConverters.toJson(ValidTo,'DateTime',context!),
        'Active': Active,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'MetaData': MetaData
    });

    getTypeName() => "License";
    TypeContext? context = _ctx;
}

class BillingMethodCountriesRelation extends BaseModel implements IConvertible
{
    // @Required()
    int? BillingMethodId;

    // @Required()
    String? CountryId;

    DateTime? ModifiedDate;

    BillingMethodCountriesRelation({this.BillingMethodId,this.CountryId,this.ModifiedDate});
    BillingMethodCountriesRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BillingMethodId = json['BillingMethodId'];
        CountryId = json['CountryId'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BillingMethodId': BillingMethodId,
        'CountryId': CountryId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "BillingMethodCountriesRelation";
    TypeContext? context = _ctx;
}

class BillingMethod extends BaseModel implements IConvertible
{
    List<BillingMethodCountriesRelation>? BillingMethodCountriesRelation;
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    int? Id;

    BillingMethod({this.BillingMethodCountriesRelation,this.Name,this.Description,this.ModifiedDate,this.Id});
    BillingMethod.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BillingMethodCountriesRelation = JsonConverters.fromJson(json['BillingMethodCountriesRelation'],'List<BillingMethodCountriesRelation>',context!);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BillingMethodCountriesRelation': JsonConverters.toJson(BillingMethodCountriesRelation,'List<BillingMethodCountriesRelation>',context!),
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "BillingMethod";
    TypeContext? context = _ctx;
}

class BillingInformation extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    BillingMethod? BillingMethod;
    // @Required()
    int? BillingMethodId;

    // @Required()
    String? Name;

    String? Attention;
    String? Street1;
    String? Street2;
    String? ZipCode;
    String? City;
    String? Email;
    String? CreditCard;
    String? CreditCardHolder;
    String? CreditCardNumber;
    int? ValidToYear;
    int? ValidToMonth;
    String? CSV;
    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    String? CountryId;

    // @Required()
    int? PaymentTermsDays;

    String? VATRegistrationNumber;
    int? LicensePlanId;
    String? GLN;
    String? ReferenceLine1;
    String? ReferenceLine2;
    DateTime? ModifiedDate;
    // @Required()
    String? Id;

    BillingInformation({this.BillingMethod,this.BillingMethodId,this.Name,this.Attention,this.Street1,this.Street2,this.ZipCode,this.City,this.Email,this.CreditCard,this.CreditCardHolder,this.CreditCardNumber,this.ValidToYear,this.ValidToMonth,this.CSV,this.UpdatedDate,this.CreatedDate,this.CountryId,this.PaymentTermsDays,this.VATRegistrationNumber,this.LicensePlanId,this.GLN,this.ReferenceLine1,this.ReferenceLine2,this.ModifiedDate,this.Id});
    BillingInformation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BillingMethod = JsonConverters.fromJson(json['BillingMethod'],'BillingMethod',context!);
        BillingMethodId = json['BillingMethodId'];
        Name = json['Name'];
        Attention = json['Attention'];
        Street1 = json['Street1'];
        Street2 = json['Street2'];
        ZipCode = json['ZipCode'];
        City = json['City'];
        Email = json['Email'];
        CreditCard = json['CreditCard'];
        CreditCardHolder = json['CreditCardHolder'];
        CreditCardNumber = json['CreditCardNumber'];
        ValidToYear = json['ValidToYear'];
        ValidToMonth = json['ValidToMonth'];
        CSV = json['CSV'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        CountryId = json['CountryId'];
        PaymentTermsDays = json['PaymentTermsDays'];
        VATRegistrationNumber = json['VATRegistrationNumber'];
        LicensePlanId = json['LicensePlanId'];
        GLN = json['GLN'];
        ReferenceLine1 = json['ReferenceLine1'];
        ReferenceLine2 = json['ReferenceLine2'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BillingMethod': JsonConverters.toJson(BillingMethod,'BillingMethod',context!),
        'BillingMethodId': BillingMethodId,
        'Name': Name,
        'Attention': Attention,
        'Street1': Street1,
        'Street2': Street2,
        'ZipCode': ZipCode,
        'City': City,
        'Email': Email,
        'CreditCard': CreditCard,
        'CreditCardHolder': CreditCardHolder,
        'CreditCardNumber': CreditCardNumber,
        'ValidToYear': ValidToYear,
        'ValidToMonth': ValidToMonth,
        'CSV': CSV,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'CountryId': CountryId,
        'PaymentTermsDays': PaymentTermsDays,
        'VATRegistrationNumber': VATRegistrationNumber,
        'LicensePlanId': LicensePlanId,
        'GLN': GLN,
        'ReferenceLine1': ReferenceLine1,
        'ReferenceLine2': ReferenceLine2,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "BillingInformation";
    TypeContext? context = _ctx;
}

class KeyCloakRole implements IConvertible
{
    String? Id;
    String? Name;

    KeyCloakRole({this.Id,this.Name});
    KeyCloakRole.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name
    };

    getTypeName() => "KeyCloakRole";
    TypeContext? context = _ctx;
}

class CompanyUser extends BaseModel implements IUser, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    Resource? Resource;
    // @Ignore()
    List<KeyCloakRole>? Roles;

    // @Ignore()
    Company? Company;

    String? Email;
    // @Ignore()
    String? FullName;

    int? ResourceId;
    String? WorkerId;
    // @Required()
    bool? Active;

    // @Required()
    bool? IsSuperAdmin;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    DateTime? UpdatedDate;

    DateTime? ModifiedDate;
    // @Required()
    String? CompanyId;

    // @Required()
    String? Id;

    String? UserId;
    String? Firstname;
    String? Lastname;
    String? Phone;

    CompanyUser({this.Resource,this.Roles,this.Company,this.Email,this.FullName,this.ResourceId,this.WorkerId,this.Active,this.IsSuperAdmin,this.CreatedDate,this.UpdatedDate,this.ModifiedDate,this.CompanyId,this.Id,this.UserId,this.Firstname,this.Lastname,this.Phone});
    CompanyUser.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Resource = JsonConverters.fromJson(json['Resource'],'Resource',context!);
        Roles = JsonConverters.fromJson(json['Roles'],'List<KeyCloakRole>',context!);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        Email = json['Email'];
        FullName = json['FullName'];
        ResourceId = json['ResourceId'];
        WorkerId = json['WorkerId'];
        Active = json['Active'];
        IsSuperAdmin = json['IsSuperAdmin'];
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        UserId = json['UserId'];
        Firstname = json['Firstname'];
        Lastname = json['Lastname'];
        Phone = json['Phone'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Resource': JsonConverters.toJson(Resource,'Resource',context!),
        'Roles': JsonConverters.toJson(Roles,'List<KeyCloakRole>',context!),
        'Company': JsonConverters.toJson(Company,'Company',context!),
        'Email': Email,
        'FullName': FullName,
        'ResourceId': ResourceId,
        'WorkerId': WorkerId,
        'Active': Active,
        'IsSuperAdmin': IsSuperAdmin,
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'UserId': UserId,
        'Firstname': Firstname,
        'Lastname': Lastname,
        'Phone': Phone
    });

    getTypeName() => "CompanyUser";
    TypeContext? context = _ctx;
}

class CompanyCategory extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Header;

    // @Required()
    String? Description;

    Uri? ImageUrl;
    // @Required()
    bool? Active;

    int? SortOrder;
    DateTime? ModifiedDate;
    int? Id;

    CompanyCategory({this.Name,this.Header,this.Description,this.ImageUrl,this.Active,this.SortOrder,this.ModifiedDate,this.Id});
    CompanyCategory.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Header = json['Header'];
        Description = json['Description'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        Active = json['Active'];
        SortOrder = json['SortOrder'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Header': Header,
        'Description': Description,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'Active': Active,
        'SortOrder': SortOrder,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "CompanyCategory";
    TypeContext? context = _ctx;
}

class Company extends BaseModel implements IConvertible
{
    // @Ignore()
    CompanyStatus? Status;

    // @Ignore()
    bool? Active;

    // @Ignore()
    List<CustomFieldConfig>? CustomerCustomFieldsConfig;

    // @Ignore()
    String? BookingAgreements;

    // @Ignore()
    BookingSettings? BookingSettings;

    // @Ignore()
    CompanyType? CompanyType;

    // @Ignore()
    CodeLockSetting? CodeLockSettings;

    // @Ignore()
    PaymentSetting? PaymentSettings;

    // @Ignore()
    CompanySetting? Settings;

    // @Ignore()
    HomepageWidgetSetting? WidgetSettings;

    // @Ignore()
    HomepageSetting? HomepageSettings;

    // @Ignore()
    AverageRatingScore? RatingScore;

    // @Ignore()
    List<Rating>? Ratings;

    // @Ignore()
    double? Distance;

    // @Ignore()
    List<License>? Licenses;

    // @Ignore()
    BillingInformation? BillingInformation;

    // @Ignore()
    List<CompanyUser>? CompanyUsers;

    // @Ignore()
    List<License>? ActiveLicenses;

    // @Ignore()
    License? CurrentLicense;

    // @Ignore()
    bool? IsFreeAccount;

    // @Ignore()
    CultureInfo? DefaultLanguage;

    CompanyCategory? Category;
    // @Ignore()
    double? Lat;

    // @Ignore()
    double? Lon;

    // @Ignore()
    bool? IsFavorite;

    // @Ignore()
    List<ExternalReference>? ExternalReferences;

    // @Required()
    String? OrganisationNumber;

    // @Required()
    int? StatusId;

    // @Required()
    int? CategoryId;

    // @Required()
    String? SitePath;

    // @Required()
    String? Name;

    String? Street1;
    String? Street2;
    String? ZipCode;
    String? City;
    String? OpeningHours;
    String? FaxNumber;
    // @Required()
    String? Email;

    String? Phone;
    String? Details;
    String? LogoType;
    // @Required()
    bool? ApprovedByAdmin;

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? IpAddress;
    String? Homepage;
    String? DomainName;
    // @Required()
    String? CountryId;

    // @Required()
    int? CompanyOwnerId;

    int? TypeId;
    DateTime? ModifiedDate;
    // @Required()
    String? Id;

    DateTime? DeletionNotificationDate;

    Company({this.Status,this.Active,this.CustomerCustomFieldsConfig,this.BookingAgreements,this.BookingSettings,this.CompanyType,this.CodeLockSettings,this.PaymentSettings,this.Settings,this.WidgetSettings,this.HomepageSettings,this.RatingScore,this.Ratings,this.Distance,this.Licenses,this.BillingInformation,this.CompanyUsers,this.ActiveLicenses,this.CurrentLicense,this.IsFreeAccount,this.DefaultLanguage,this.Category,this.Lat,this.Lon,this.IsFavorite,this.ExternalReferences,this.OrganisationNumber,this.StatusId,this.CategoryId,this.SitePath,this.Name,this.Street1,this.Street2,this.ZipCode,this.City,this.OpeningHours,this.FaxNumber,this.Email,this.Phone,this.Details,this.LogoType,this.ApprovedByAdmin,this.Updated,this.Created,this.IpAddress,this.Homepage,this.DomainName,this.CountryId,this.CompanyOwnerId,this.TypeId,this.ModifiedDate,this.Id,this.DeletionNotificationDate});
    Company.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Status = JsonConverters.fromJson(json['Status'],'CompanyStatus',context!);
        Active = json['Active'];
        CustomerCustomFieldsConfig = JsonConverters.fromJson(json['CustomerCustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        BookingAgreements = json['BookingAgreements'];
        BookingSettings = JsonConverters.fromJson(json['BookingSettings'],'BookingSettings',context!);
        CompanyType = JsonConverters.fromJson(json['CompanyType'],'CompanyType',context!);
        CodeLockSettings = JsonConverters.fromJson(json['CodeLockSettings'],'CodeLockSetting',context!);
        PaymentSettings = JsonConverters.fromJson(json['PaymentSettings'],'PaymentSetting',context!);
        Settings = JsonConverters.fromJson(json['Settings'],'CompanySetting',context!);
        WidgetSettings = JsonConverters.fromJson(json['WidgetSettings'],'HomepageWidgetSetting',context!);
        HomepageSettings = JsonConverters.fromJson(json['HomepageSettings'],'HomepageSetting',context!);
        RatingScore = JsonConverters.fromJson(json['RatingScore'],'AverageRatingScore',context!);
        Ratings = JsonConverters.fromJson(json['Ratings'],'List<Rating>',context!);
        Distance = JsonConverters.toDouble(json['Distance']);
        Licenses = JsonConverters.fromJson(json['Licenses'],'List<License>',context!);
        BillingInformation = JsonConverters.fromJson(json['BillingInformation'],'BillingInformation',context!);
        CompanyUsers = JsonConverters.fromJson(json['CompanyUsers'],'List<CompanyUser>',context!);
        ActiveLicenses = JsonConverters.fromJson(json['ActiveLicenses'],'List<License>',context!);
        CurrentLicense = JsonConverters.fromJson(json['CurrentLicense'],'License',context!);
        IsFreeAccount = json['IsFreeAccount'];
        DefaultLanguage = JsonConverters.fromJson(json['DefaultLanguage'],'CultureInfo',context!);
        Category = JsonConverters.fromJson(json['Category'],'CompanyCategory',context!);
        Lat = JsonConverters.toDouble(json['Lat']);
        Lon = JsonConverters.toDouble(json['Lon']);
        IsFavorite = json['IsFavorite'];
        ExternalReferences = JsonConverters.fromJson(json['ExternalReferences'],'List<ExternalReference>',context!);
        OrganisationNumber = json['OrganisationNumber'];
        StatusId = json['StatusId'];
        CategoryId = json['CategoryId'];
        SitePath = json['SitePath'];
        Name = json['Name'];
        Street1 = json['Street1'];
        Street2 = json['Street2'];
        ZipCode = json['ZipCode'];
        City = json['City'];
        OpeningHours = json['OpeningHours'];
        FaxNumber = json['FaxNumber'];
        Email = json['Email'];
        Phone = json['Phone'];
        Details = json['Details'];
        LogoType = json['LogoType'];
        ApprovedByAdmin = json['ApprovedByAdmin'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        IpAddress = json['IpAddress'];
        Homepage = json['Homepage'];
        DomainName = json['DomainName'];
        CountryId = json['CountryId'];
        CompanyOwnerId = json['CompanyOwnerId'];
        TypeId = json['TypeId'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        DeletionNotificationDate = JsonConverters.fromJson(json['DeletionNotificationDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Status': JsonConverters.toJson(Status,'CompanyStatus',context!),
        'Active': Active,
        'CustomerCustomFieldsConfig': JsonConverters.toJson(CustomerCustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'BookingAgreements': BookingAgreements,
        'BookingSettings': JsonConverters.toJson(BookingSettings,'BookingSettings',context!),
        'CompanyType': JsonConverters.toJson(CompanyType,'CompanyType',context!),
        'CodeLockSettings': JsonConverters.toJson(CodeLockSettings,'CodeLockSetting',context!),
        'PaymentSettings': JsonConverters.toJson(PaymentSettings,'PaymentSetting',context!),
        'Settings': JsonConverters.toJson(Settings,'CompanySetting',context!),
        'WidgetSettings': JsonConverters.toJson(WidgetSettings,'HomepageWidgetSetting',context!),
        'HomepageSettings': JsonConverters.toJson(HomepageSettings,'HomepageSetting',context!),
        'RatingScore': JsonConverters.toJson(RatingScore,'AverageRatingScore',context!),
        'Ratings': JsonConverters.toJson(Ratings,'List<Rating>',context!),
        'Distance': Distance,
        'Licenses': JsonConverters.toJson(Licenses,'List<License>',context!),
        'BillingInformation': JsonConverters.toJson(BillingInformation,'BillingInformation',context!),
        'CompanyUsers': JsonConverters.toJson(CompanyUsers,'List<CompanyUser>',context!),
        'ActiveLicenses': JsonConverters.toJson(ActiveLicenses,'List<License>',context!),
        'CurrentLicense': JsonConverters.toJson(CurrentLicense,'License',context!),
        'IsFreeAccount': IsFreeAccount,
        'DefaultLanguage': JsonConverters.toJson(DefaultLanguage,'CultureInfo',context!),
        'Category': JsonConverters.toJson(Category,'CompanyCategory',context!),
        'Lat': Lat,
        'Lon': Lon,
        'IsFavorite': IsFavorite,
        'ExternalReferences': JsonConverters.toJson(ExternalReferences,'List<ExternalReference>',context!),
        'OrganisationNumber': OrganisationNumber,
        'StatusId': StatusId,
        'CategoryId': CategoryId,
        'SitePath': SitePath,
        'Name': Name,
        'Street1': Street1,
        'Street2': Street2,
        'ZipCode': ZipCode,
        'City': City,
        'OpeningHours': OpeningHours,
        'FaxNumber': FaxNumber,
        'Email': Email,
        'Phone': Phone,
        'Details': Details,
        'LogoType': LogoType,
        'ApprovedByAdmin': ApprovedByAdmin,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'IpAddress': IpAddress,
        'Homepage': Homepage,
        'DomainName': DomainName,
        'CountryId': CountryId,
        'CompanyOwnerId': CompanyOwnerId,
        'TypeId': TypeId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id,
        'DeletionNotificationDate': JsonConverters.toJson(DeletionNotificationDate,'DateTime',context!)
    });

    getTypeName() => "Company";
    TypeContext? context = _ctx;
}

class CustomFieldDataResponse implements IConvertible
{
    int? Id;
    String? Column;
    String? Name;
    String? Description;
    String? Value;
    /**
    * Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    */
    // @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    String? DataType;

    CustomFieldDataResponse({this.Id,this.Column,this.Name,this.Description,this.Value,this.DataType});
    CustomFieldDataResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Column = json['Column'];
        Name = json['Name'];
        Description = json['Description'];
        Value = json['Value'];
        DataType = json['DataType'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Column': Column,
        'Name': Name,
        'Description': Description,
        'Value': Value,
        'DataType': DataType
    };

    getTypeName() => "CustomFieldDataResponse";
    TypeContext? context = _ctx;
}

class CustomerComment extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? CustomerId;

    // @Required()
    String? Comments;

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? ImageUrl;
    DateTime? ModifiedDate;

    CustomerComment({this.CompanyId,this.Id,this.CustomerId,this.Comments,this.Updated,this.Created,this.ImageUrl,this.ModifiedDate});
    CustomerComment.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        CustomerId = json['CustomerId'];
        Comments = json['Comments'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ImageUrl = json['ImageUrl'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'CustomerId': CustomerId,
        'Comments': Comments,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ImageUrl': ImageUrl,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "CustomerComment";
    TypeContext? context = _ctx;
}

class Customer extends BaseModel implements IUser, ICustomFieldTable, IConvertible
{
    int? IdentityId;
    String? Id;
    // @Ignore()
    String? CustomerId;

    // @Ignore()
    List<UserAccessKeys>? AccessKeys;

    String? Email;
    // @Ignore()
    List<ExternalReference>? ExternalReferences;

    // @Ignore()
    Company? Company;

    // @Ignore()
    List<CustomFieldConfig>? CustomFieldsConfig;

    // @Ignore()
    List<CustomFieldDataResponse>? CustomFieldsData;

    // @Ignore()
    List<CustomerComment>? Comments;

    // @Ignore()
    List<RebateCode>? RebateCodes;

    String? Firstname;
    // @Ignore()
    String? FullName;

    // @Ignore()
    String? ImageUrl;

    // @Required()
    bool? Active;

    String? FacebookUsername;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? IpAddress;
    DateTime? ModifiedDate;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;
    String? UserId;
    String? Lastname;
    String? Phone;
    String? CorporateIdentityNumber;
    String? InvoiceAddress1;
    String? InvoiceAddress2;
    String? InvoiceCity;
    String? InvoicePostalCode;
    String? InvoiceCountryCode;
    // @Required()
    String? CompanyId;

    bool? SubscribedToNewsletter;

    Customer({this.IdentityId,this.Id,this.CustomerId,this.AccessKeys,this.Email,this.ExternalReferences,this.Company,this.CustomFieldsConfig,this.CustomFieldsData,this.Comments,this.RebateCodes,this.Firstname,this.FullName,this.ImageUrl,this.Active,this.FacebookUsername,this.Updated,this.Created,this.IpAddress,this.ModifiedDate,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20,this.UserId,this.Lastname,this.Phone,this.CorporateIdentityNumber,this.InvoiceAddress1,this.InvoiceAddress2,this.InvoiceCity,this.InvoicePostalCode,this.InvoiceCountryCode,this.CompanyId,this.SubscribedToNewsletter});
    Customer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        IdentityId = json['IdentityId'];
        Id = json['Id'];
        CustomerId = json['CustomerId'];
        AccessKeys = JsonConverters.fromJson(json['AccessKeys'],'List<UserAccessKeys>',context!);
        Email = json['Email'];
        ExternalReferences = JsonConverters.fromJson(json['ExternalReferences'],'List<ExternalReference>',context!);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        Comments = JsonConverters.fromJson(json['Comments'],'List<CustomerComment>',context!);
        RebateCodes = JsonConverters.fromJson(json['RebateCodes'],'List<RebateCode>',context!);
        Firstname = json['Firstname'];
        FullName = json['FullName'];
        ImageUrl = json['ImageUrl'];
        Active = json['Active'];
        FacebookUsername = json['FacebookUsername'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        IpAddress = json['IpAddress'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        UserId = json['UserId'];
        Lastname = json['Lastname'];
        Phone = json['Phone'];
        CorporateIdentityNumber = json['CorporateIdentityNumber'];
        InvoiceAddress1 = json['InvoiceAddress1'];
        InvoiceAddress2 = json['InvoiceAddress2'];
        InvoiceCity = json['InvoiceCity'];
        InvoicePostalCode = json['InvoicePostalCode'];
        InvoiceCountryCode = json['InvoiceCountryCode'];
        CompanyId = json['CompanyId'];
        SubscribedToNewsletter = json['SubscribedToNewsletter'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'IdentityId': IdentityId,
        'Id': Id,
        'CustomerId': CustomerId,
        'AccessKeys': JsonConverters.toJson(AccessKeys,'List<UserAccessKeys>',context!),
        'Email': Email,
        'ExternalReferences': JsonConverters.toJson(ExternalReferences,'List<ExternalReference>',context!),
        'Company': JsonConverters.toJson(Company,'Company',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'Comments': JsonConverters.toJson(Comments,'List<CustomerComment>',context!),
        'RebateCodes': JsonConverters.toJson(RebateCodes,'List<RebateCode>',context!),
        'Firstname': Firstname,
        'FullName': FullName,
        'ImageUrl': ImageUrl,
        'Active': Active,
        'FacebookUsername': FacebookUsername,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'IpAddress': IpAddress,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20,
        'UserId': UserId,
        'Lastname': Lastname,
        'Phone': Phone,
        'CorporateIdentityNumber': CorporateIdentityNumber,
        'InvoiceAddress1': InvoiceAddress1,
        'InvoiceAddress2': InvoiceAddress2,
        'InvoiceCity': InvoiceCity,
        'InvoicePostalCode': InvoicePostalCode,
        'InvoiceCountryCode': InvoiceCountryCode,
        'CompanyId': CompanyId,
        'SubscribedToNewsletter': SubscribedToNewsletter
    });

    getTypeName() => "Customer";
    TypeContext? context = _ctx;
}

enum ItemType
{
    Physical,
    Service,
    Fee,
    Discount,
}

class Item implements IConvertible
{
    String? ItemId;
    double? DiscountRate;
    String? Ean;
    Uri? ImageUri;
    String? Name;
    double? Quantity;
    String? Reference;
    double? TaxRate;
    double? TotalPriceExcludingTax;
    double? TotalPriceIncludingTax;
    double? TotalTaxAmount;
    double? CreditedAmount;
    ItemType? Type;
    double? UnitPrice;
    Uri? Uri;

    Item({this.ItemId,this.DiscountRate,this.Ean,this.ImageUri,this.Name,this.Quantity,this.Reference,this.TaxRate,this.TotalPriceExcludingTax,this.TotalPriceIncludingTax,this.TotalTaxAmount,this.CreditedAmount,this.Type,this.UnitPrice,this.Uri});
    Item.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ItemId = json['ItemId'];
        DiscountRate = JsonConverters.toDouble(json['DiscountRate']);
        Ean = json['Ean'];
        ImageUri = JsonConverters.fromJson(json['ImageUri'],'Uri',context!);
        Name = json['Name'];
        Quantity = JsonConverters.toDouble(json['Quantity']);
        Reference = json['Reference'];
        TaxRate = JsonConverters.toDouble(json['TaxRate']);
        TotalPriceExcludingTax = JsonConverters.toDouble(json['TotalPriceExcludingTax']);
        TotalPriceIncludingTax = JsonConverters.toDouble(json['TotalPriceIncludingTax']);
        TotalTaxAmount = JsonConverters.toDouble(json['TotalTaxAmount']);
        CreditedAmount = JsonConverters.toDouble(json['CreditedAmount']);
        Type = JsonConverters.fromJson(json['Type'],'ItemType',context!);
        UnitPrice = JsonConverters.toDouble(json['UnitPrice']);
        Uri = JsonConverters.fromJson(json['Uri'],'Uri',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ItemId': ItemId,
        'DiscountRate': DiscountRate,
        'Ean': Ean,
        'ImageUri': JsonConverters.toJson(ImageUri,'Uri',context!),
        'Name': Name,
        'Quantity': Quantity,
        'Reference': Reference,
        'TaxRate': TaxRate,
        'TotalPriceExcludingTax': TotalPriceExcludingTax,
        'TotalPriceIncludingTax': TotalPriceIncludingTax,
        'TotalTaxAmount': TotalTaxAmount,
        'CreditedAmount': CreditedAmount,
        'Type': JsonConverters.toJson(Type,'ItemType',context!),
        'UnitPrice': UnitPrice,
        'Uri': JsonConverters.toJson(Uri,'Uri',context!)
    };

    getTypeName() => "Item";
    TypeContext? context = _ctx;
}

class Order implements IConvertible
{
    Currency? Currency;
    double? TotalFeeExcludingTax;
    double? TotalFeeIncludingTax;
    double? TotalPriceExcludingTax;
    double? TotalPriceIncludingTax;
    double? TotalTaxAmount;
    double? TotalCreditedAmount;
    List<Item>? Items;

    Order({this.Currency,this.TotalFeeExcludingTax,this.TotalFeeIncludingTax,this.TotalPriceExcludingTax,this.TotalPriceIncludingTax,this.TotalTaxAmount,this.TotalCreditedAmount,this.Items});
    Order.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Currency = JsonConverters.fromJson(json['Currency'],'Currency',context!);
        TotalFeeExcludingTax = JsonConverters.toDouble(json['TotalFeeExcludingTax']);
        TotalFeeIncludingTax = JsonConverters.toDouble(json['TotalFeeIncludingTax']);
        TotalPriceExcludingTax = JsonConverters.toDouble(json['TotalPriceExcludingTax']);
        TotalPriceIncludingTax = JsonConverters.toDouble(json['TotalPriceIncludingTax']);
        TotalTaxAmount = JsonConverters.toDouble(json['TotalTaxAmount']);
        TotalCreditedAmount = JsonConverters.toDouble(json['TotalCreditedAmount']);
        Items = JsonConverters.fromJson(json['Items'],'List<Item>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Currency': JsonConverters.toJson(Currency,'Currency',context!),
        'TotalFeeExcludingTax': TotalFeeExcludingTax,
        'TotalFeeIncludingTax': TotalFeeIncludingTax,
        'TotalPriceExcludingTax': TotalPriceExcludingTax,
        'TotalPriceIncludingTax': TotalPriceIncludingTax,
        'TotalTaxAmount': TotalTaxAmount,
        'TotalCreditedAmount': TotalCreditedAmount,
        'Items': JsonConverters.toJson(Items,'List<Item>',context!)
    };

    getTypeName() => "Order";
    TypeContext? context = _ctx;
}

class Merchant implements IConvertible
{
    String? CheckoutUri;
    String? ConfirmationUri;
    Uri? NotificationUri;
    Uri? ValidationUri;
    Uri? TermsUri;
    String? Reference;
    String? PartnerId;

    Merchant({this.CheckoutUri,this.ConfirmationUri,this.NotificationUri,this.ValidationUri,this.TermsUri,this.Reference,this.PartnerId});
    Merchant.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CheckoutUri = json['CheckoutUri'];
        ConfirmationUri = json['ConfirmationUri'];
        NotificationUri = JsonConverters.fromJson(json['NotificationUri'],'Uri',context!);
        ValidationUri = JsonConverters.fromJson(json['ValidationUri'],'Uri',context!);
        TermsUri = JsonConverters.fromJson(json['TermsUri'],'Uri',context!);
        Reference = json['Reference'];
        PartnerId = json['PartnerId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CheckoutUri': CheckoutUri,
        'ConfirmationUri': ConfirmationUri,
        'NotificationUri': JsonConverters.toJson(NotificationUri,'Uri',context!),
        'ValidationUri': JsonConverters.toJson(ValidationUri,'Uri',context!),
        'TermsUri': JsonConverters.toJson(TermsUri,'Uri',context!),
        'Reference': Reference,
        'PartnerId': PartnerId
    };

    getTypeName() => "Merchant";
    TypeContext? context = _ctx;
}

enum ColorScheme
{
    White,
    Blue,
    Gray,
    GrayTextLogos,
    BlueTextLogos,
    WhiteTextLogos,
    WhiteNoFooter,
    GrayNoFooter,
    BlueNoFooter,
}

class Gui implements IConvertible
{
    ColorScheme? ColorScheme;
    String? Locale;
    bool? RequestPhone;
    bool? PhoneOptional;

    Gui({this.ColorScheme,this.Locale,this.RequestPhone,this.PhoneOptional});
    Gui.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ColorScheme = JsonConverters.fromJson(json['ColorScheme'],'ColorScheme',context!);
        Locale = json['Locale'];
        RequestPhone = json['RequestPhone'];
        PhoneOptional = json['PhoneOptional'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ColorScheme': JsonConverters.toJson(ColorScheme,'ColorScheme',context!),
        'Locale': Locale,
        'RequestPhone': RequestPhone,
        'PhoneOptional': PhoneOptional
    };

    getTypeName() => "Gui";
    TypeContext? context = _ctx;
}

class History implements IConvertible
{
    DateTime? Created;
    DateTime? ReadyToPay;
    DateTime? ReadyToShip;
    DateTime? Shipped;
    DateTime? PaidToAccount;
    DateTime? Canceled;
    DateTime? Expired;
    DateTime? Denied;

    History({this.Created,this.ReadyToPay,this.ReadyToShip,this.Shipped,this.PaidToAccount,this.Canceled,this.Expired,this.Denied});
    History.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ReadyToPay = JsonConverters.fromJson(json['ReadyToPay'],'DateTime',context!);
        ReadyToShip = JsonConverters.fromJson(json['ReadyToShip'],'DateTime',context!);
        Shipped = JsonConverters.fromJson(json['Shipped'],'DateTime',context!);
        PaidToAccount = JsonConverters.fromJson(json['PaidToAccount'],'DateTime',context!);
        Canceled = JsonConverters.fromJson(json['Canceled'],'DateTime',context!);
        Expired = JsonConverters.fromJson(json['Expired'],'DateTime',context!);
        Denied = JsonConverters.fromJson(json['Denied'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ReadyToPay': JsonConverters.toJson(ReadyToPay,'DateTime',context!),
        'ReadyToShip': JsonConverters.toJson(ReadyToShip,'DateTime',context!),
        'Shipped': JsonConverters.toJson(Shipped,'DateTime',context!),
        'PaidToAccount': JsonConverters.toJson(PaidToAccount,'DateTime',context!),
        'Canceled': JsonConverters.toJson(Canceled,'DateTime',context!),
        'Expired': JsonConverters.toJson(Expired,'DateTime',context!),
        'Denied': JsonConverters.toJson(Denied,'DateTime',context!)
    };

    getTypeName() => "History";
    TypeContext? context = _ctx;
}

class Payson2CheckoutResponse implements IConvertible
{
    String? Id;
    DateTime? ExpirationTime;
    String? Snippet;
    Payson2CheckoutStatus? Status;
    Customer? Customer;
    Order? Order;
    Merchant? Merchant;
    Gui? Gui;
    History? History;
    int? PurchaseId;

    Payson2CheckoutResponse({this.Id,this.ExpirationTime,this.Snippet,this.Status,this.Customer,this.Order,this.Merchant,this.Gui,this.History,this.PurchaseId});
    Payson2CheckoutResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        ExpirationTime = JsonConverters.fromJson(json['ExpirationTime'],'DateTime',context!);
        Snippet = json['Snippet'];
        Status = JsonConverters.fromJson(json['Status'],'Payson2CheckoutStatus',context!);
        Customer = JsonConverters.fromJson(json['Customer'],'Customer',context!);
        Order = JsonConverters.fromJson(json['Order'],'Order',context!);
        Merchant = JsonConverters.fromJson(json['Merchant'],'Merchant',context!);
        Gui = JsonConverters.fromJson(json['Gui'],'Gui',context!);
        History = JsonConverters.fromJson(json['History'],'History',context!);
        PurchaseId = json['PurchaseId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'ExpirationTime': JsonConverters.toJson(ExpirationTime,'DateTime',context!),
        'Snippet': Snippet,
        'Status': JsonConverters.toJson(Status,'Payson2CheckoutStatus',context!),
        'Customer': JsonConverters.toJson(Customer,'Customer',context!),
        'Order': JsonConverters.toJson(Order,'Order',context!),
        'Merchant': JsonConverters.toJson(Merchant,'Merchant',context!),
        'Gui': JsonConverters.toJson(Gui,'Gui',context!),
        'History': JsonConverters.toJson(History,'History',context!),
        'PurchaseId': PurchaseId
    };

    getTypeName() => "Payson2CheckoutResponse";
    TypeContext? context = _ctx;
}

class BaseOptions implements INestedOptions, IConvertible
{
    List<String>? Expand;
    Map<String,dynamic?>? ExtraParams;

    BaseOptions({this.Expand,this.ExtraParams});
    BaseOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Expand = JsonConverters.fromJson(json['Expand'],'List<String>',context!);
        ExtraParams = JsonConverters.fromJson(json['ExtraParams'],'Map<String,dynamic?>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Expand': JsonConverters.toJson(Expand,'List<String>',context!),
        'ExtraParams': JsonConverters.toJson(ExtraParams,'Map<String,dynamic?>',context!)
    };

    getTypeName() => "BaseOptions";
    TypeContext? context = _ctx;
}

class SessionAfterExpirationRecoveryOptions implements INestedOptions, IConvertible
{
    bool? AllowPromotionCodes;
    bool? Enabled;

    SessionAfterExpirationRecoveryOptions({this.AllowPromotionCodes,this.Enabled});
    SessionAfterExpirationRecoveryOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AllowPromotionCodes = json['AllowPromotionCodes'];
        Enabled = json['Enabled'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AllowPromotionCodes': AllowPromotionCodes,
        'Enabled': Enabled
    };

    getTypeName() => "SessionAfterExpirationRecoveryOptions";
    TypeContext? context = _ctx;
}

class SessionAfterExpirationOptions implements INestedOptions, IConvertible
{
    SessionAfterExpirationRecoveryOptions? Recovery;

    SessionAfterExpirationOptions({this.Recovery});
    SessionAfterExpirationOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Recovery = JsonConverters.fromJson(json['Recovery'],'SessionAfterExpirationRecoveryOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Recovery': JsonConverters.toJson(Recovery,'SessionAfterExpirationRecoveryOptions',context!)
    };

    getTypeName() => "SessionAfterExpirationOptions";
    TypeContext? context = _ctx;
}

class SessionAutomaticTaxLiabilityOptions implements INestedOptions, IConvertible
{
    String? Account;
    String? Type;

    SessionAutomaticTaxLiabilityOptions({this.Account,this.Type});
    SessionAutomaticTaxLiabilityOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Account = json['Account'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Account': Account,
        'Type': Type
    };

    getTypeName() => "SessionAutomaticTaxLiabilityOptions";
    TypeContext? context = _ctx;
}

class SessionAutomaticTaxOptions implements INestedOptions, IConvertible
{
    bool? Enabled;
    SessionAutomaticTaxLiabilityOptions? Liability;

    SessionAutomaticTaxOptions({this.Enabled,this.Liability});
    SessionAutomaticTaxOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Enabled = json['Enabled'];
        Liability = JsonConverters.fromJson(json['Liability'],'SessionAutomaticTaxLiabilityOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled,
        'Liability': JsonConverters.toJson(Liability,'SessionAutomaticTaxLiabilityOptions',context!)
    };

    getTypeName() => "SessionAutomaticTaxOptions";
    TypeContext? context = _ctx;
}

class SessionConsentCollectionPaymentMethodReuseAgreementOptions implements INestedOptions, IConvertible
{
    String? Position;

    SessionConsentCollectionPaymentMethodReuseAgreementOptions({this.Position});
    SessionConsentCollectionPaymentMethodReuseAgreementOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Position = json['Position'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Position': Position
    };

    getTypeName() => "SessionConsentCollectionPaymentMethodReuseAgreementOptions";
    TypeContext? context = _ctx;
}

class SessionConsentCollectionOptions implements INestedOptions, IConvertible
{
    SessionConsentCollectionPaymentMethodReuseAgreementOptions? PaymentMethodReuseAgreement;
    String? Promotions;
    String? TermsOfService;

    SessionConsentCollectionOptions({this.PaymentMethodReuseAgreement,this.Promotions,this.TermsOfService});
    SessionConsentCollectionOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PaymentMethodReuseAgreement = JsonConverters.fromJson(json['PaymentMethodReuseAgreement'],'SessionConsentCollectionPaymentMethodReuseAgreementOptions',context!);
        Promotions = json['Promotions'];
        TermsOfService = json['TermsOfService'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PaymentMethodReuseAgreement': JsonConverters.toJson(PaymentMethodReuseAgreement,'SessionConsentCollectionPaymentMethodReuseAgreementOptions',context!),
        'Promotions': Promotions,
        'TermsOfService': TermsOfService
    };

    getTypeName() => "SessionConsentCollectionOptions";
    TypeContext? context = _ctx;
}

class SessionCustomFieldDropdownOptionOptions implements INestedOptions, IConvertible
{
    String? Label;
    String? Value;

    SessionCustomFieldDropdownOptionOptions({this.Label,this.Value});
    SessionCustomFieldDropdownOptionOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Label = json['Label'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Label': Label,
        'Value': Value
    };

    getTypeName() => "SessionCustomFieldDropdownOptionOptions";
    TypeContext? context = _ctx;
}

class SessionCustomFieldDropdownOptions implements INestedOptions, IConvertible
{
    String? DefaultValue;
    List<SessionCustomFieldDropdownOptionOptions>? Options;

    SessionCustomFieldDropdownOptions({this.DefaultValue,this.Options});
    SessionCustomFieldDropdownOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        DefaultValue = json['DefaultValue'];
        Options = JsonConverters.fromJson(json['Options'],'List<SessionCustomFieldDropdownOptionOptions>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'DefaultValue': DefaultValue,
        'Options': JsonConverters.toJson(Options,'List<SessionCustomFieldDropdownOptionOptions>',context!)
    };

    getTypeName() => "SessionCustomFieldDropdownOptions";
    TypeContext? context = _ctx;
}

class SessionCustomFieldLabelOptions implements INestedOptions, IConvertible
{
    String? Custom;
    String? Type;

    SessionCustomFieldLabelOptions({this.Custom,this.Type});
    SessionCustomFieldLabelOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Custom = json['Custom'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Custom': Custom,
        'Type': Type
    };

    getTypeName() => "SessionCustomFieldLabelOptions";
    TypeContext? context = _ctx;
}

class SessionCustomFieldNumericOptions implements INestedOptions, IConvertible
{
    String? DefaultValue;
    int? MaximumLength;
    int? MinimumLength;

    SessionCustomFieldNumericOptions({this.DefaultValue,this.MaximumLength,this.MinimumLength});
    SessionCustomFieldNumericOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        DefaultValue = json['DefaultValue'];
        MaximumLength = json['MaximumLength'];
        MinimumLength = json['MinimumLength'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'DefaultValue': DefaultValue,
        'MaximumLength': MaximumLength,
        'MinimumLength': MinimumLength
    };

    getTypeName() => "SessionCustomFieldNumericOptions";
    TypeContext? context = _ctx;
}

class SessionCustomFieldTextOptions implements INestedOptions, IConvertible
{
    String? DefaultValue;
    int? MaximumLength;
    int? MinimumLength;

    SessionCustomFieldTextOptions({this.DefaultValue,this.MaximumLength,this.MinimumLength});
    SessionCustomFieldTextOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        DefaultValue = json['DefaultValue'];
        MaximumLength = json['MaximumLength'];
        MinimumLength = json['MinimumLength'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'DefaultValue': DefaultValue,
        'MaximumLength': MaximumLength,
        'MinimumLength': MinimumLength
    };

    getTypeName() => "SessionCustomFieldTextOptions";
    TypeContext? context = _ctx;
}

class SessionCustomFieldOptions implements INestedOptions, IConvertible
{
    SessionCustomFieldDropdownOptions? Dropdown;
    String? Key;
    SessionCustomFieldLabelOptions? Label;
    SessionCustomFieldNumericOptions? Numeric;
    bool? Optional;
    SessionCustomFieldTextOptions? Text;
    String? Type;

    SessionCustomFieldOptions({this.Dropdown,this.Key,this.Label,this.Numeric,this.Optional,this.Text,this.Type});
    SessionCustomFieldOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Dropdown = JsonConverters.fromJson(json['Dropdown'],'SessionCustomFieldDropdownOptions',context!);
        Key = json['Key'];
        Label = JsonConverters.fromJson(json['Label'],'SessionCustomFieldLabelOptions',context!);
        Numeric = JsonConverters.fromJson(json['Numeric'],'SessionCustomFieldNumericOptions',context!);
        Optional = json['Optional'];
        Text = JsonConverters.fromJson(json['Text'],'SessionCustomFieldTextOptions',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Dropdown': JsonConverters.toJson(Dropdown,'SessionCustomFieldDropdownOptions',context!),
        'Key': Key,
        'Label': JsonConverters.toJson(Label,'SessionCustomFieldLabelOptions',context!),
        'Numeric': JsonConverters.toJson(Numeric,'SessionCustomFieldNumericOptions',context!),
        'Optional': Optional,
        'Text': JsonConverters.toJson(Text,'SessionCustomFieldTextOptions',context!),
        'Type': Type
    };

    getTypeName() => "SessionCustomFieldOptions";
    TypeContext? context = _ctx;
}

class SessionCustomTextAfterSubmitOptions implements INestedOptions, IConvertible
{
    String? Message;

    SessionCustomTextAfterSubmitOptions({this.Message});
    SessionCustomTextAfterSubmitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Message = json['Message'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Message': Message
    };

    getTypeName() => "SessionCustomTextAfterSubmitOptions";
    TypeContext? context = _ctx;
}

class SessionCustomTextShippingAddressOptions implements INestedOptions, IConvertible
{
    String? Message;

    SessionCustomTextShippingAddressOptions({this.Message});
    SessionCustomTextShippingAddressOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Message = json['Message'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Message': Message
    };

    getTypeName() => "SessionCustomTextShippingAddressOptions";
    TypeContext? context = _ctx;
}

class SessionCustomTextSubmitOptions implements INestedOptions, IConvertible
{
    String? Message;

    SessionCustomTextSubmitOptions({this.Message});
    SessionCustomTextSubmitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Message = json['Message'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Message': Message
    };

    getTypeName() => "SessionCustomTextSubmitOptions";
    TypeContext? context = _ctx;
}

class SessionCustomTextTermsOfServiceAcceptanceOptions implements INestedOptions, IConvertible
{
    String? Message;

    SessionCustomTextTermsOfServiceAcceptanceOptions({this.Message});
    SessionCustomTextTermsOfServiceAcceptanceOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Message = json['Message'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Message': Message
    };

    getTypeName() => "SessionCustomTextTermsOfServiceAcceptanceOptions";
    TypeContext? context = _ctx;
}

class SessionCustomTextOptions implements INestedOptions, IConvertible
{
    SessionCustomTextAfterSubmitOptions? AfterSubmit;
    SessionCustomTextShippingAddressOptions? ShippingAddress;
    SessionCustomTextSubmitOptions? Submit;
    SessionCustomTextTermsOfServiceAcceptanceOptions? TermsOfServiceAcceptance;

    SessionCustomTextOptions({this.AfterSubmit,this.ShippingAddress,this.Submit,this.TermsOfServiceAcceptance});
    SessionCustomTextOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AfterSubmit = JsonConverters.fromJson(json['AfterSubmit'],'SessionCustomTextAfterSubmitOptions',context!);
        ShippingAddress = JsonConverters.fromJson(json['ShippingAddress'],'SessionCustomTextShippingAddressOptions',context!);
        Submit = JsonConverters.fromJson(json['Submit'],'SessionCustomTextSubmitOptions',context!);
        TermsOfServiceAcceptance = JsonConverters.fromJson(json['TermsOfServiceAcceptance'],'SessionCustomTextTermsOfServiceAcceptanceOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AfterSubmit': JsonConverters.toJson(AfterSubmit,'SessionCustomTextAfterSubmitOptions',context!),
        'ShippingAddress': JsonConverters.toJson(ShippingAddress,'SessionCustomTextShippingAddressOptions',context!),
        'Submit': JsonConverters.toJson(Submit,'SessionCustomTextSubmitOptions',context!),
        'TermsOfServiceAcceptance': JsonConverters.toJson(TermsOfServiceAcceptance,'SessionCustomTextTermsOfServiceAcceptanceOptions',context!)
    };

    getTypeName() => "SessionCustomTextOptions";
    TypeContext? context = _ctx;
}

class SessionCustomerUpdateOptions implements INestedOptions, IConvertible
{
    String? Address;
    String? Name;
    String? Shipping;

    SessionCustomerUpdateOptions({this.Address,this.Name,this.Shipping});
    SessionCustomerUpdateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Address = json['Address'];
        Name = json['Name'];
        Shipping = json['Shipping'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Address': Address,
        'Name': Name,
        'Shipping': Shipping
    };

    getTypeName() => "SessionCustomerUpdateOptions";
    TypeContext? context = _ctx;
}

class SessionDiscountOptions implements INestedOptions, IConvertible
{
    String? Coupon;
    String? PromotionCode;

    SessionDiscountOptions({this.Coupon,this.PromotionCode});
    SessionDiscountOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Coupon = json['Coupon'];
        PromotionCode = json['PromotionCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Coupon': Coupon,
        'PromotionCode': PromotionCode
    };

    getTypeName() => "SessionDiscountOptions";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreationInvoiceDataCustomFieldOptions implements INestedOptions, IConvertible
{
    String? Name;
    String? Value;

    SessionInvoiceCreationInvoiceDataCustomFieldOptions({this.Name,this.Value});
    SessionInvoiceCreationInvoiceDataCustomFieldOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Name = json['Name'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Name': Name,
        'Value': Value
    };

    getTypeName() => "SessionInvoiceCreationInvoiceDataCustomFieldOptions";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreationInvoiceDataIssuerOptions implements INestedOptions, IConvertible
{
    String? Account;
    String? Type;

    SessionInvoiceCreationInvoiceDataIssuerOptions({this.Account,this.Type});
    SessionInvoiceCreationInvoiceDataIssuerOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Account = json['Account'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Account': Account,
        'Type': Type
    };

    getTypeName() => "SessionInvoiceCreationInvoiceDataIssuerOptions";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreationInvoiceDataRenderingOptionsOptions implements INestedOptions, IConvertible
{
    String? AmountTaxDisplay;

    SessionInvoiceCreationInvoiceDataRenderingOptionsOptions({this.AmountTaxDisplay});
    SessionInvoiceCreationInvoiceDataRenderingOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AmountTaxDisplay = json['AmountTaxDisplay'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AmountTaxDisplay': AmountTaxDisplay
    };

    getTypeName() => "SessionInvoiceCreationInvoiceDataRenderingOptionsOptions";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreationInvoiceDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    List<String>? AccountTaxIds;
    List<SessionInvoiceCreationInvoiceDataCustomFieldOptions>? CustomFields;
    String? Description;
    String? Footer;
    SessionInvoiceCreationInvoiceDataIssuerOptions? Issuer;
    Map<String,String?>? Metadata;
    SessionInvoiceCreationInvoiceDataRenderingOptionsOptions? RenderingOptions;

    SessionInvoiceCreationInvoiceDataOptions({this.AccountTaxIds,this.CustomFields,this.Description,this.Footer,this.Issuer,this.Metadata,this.RenderingOptions});
    SessionInvoiceCreationInvoiceDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AccountTaxIds = JsonConverters.fromJson(json['AccountTaxIds'],'List<String>',context!);
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<SessionInvoiceCreationInvoiceDataCustomFieldOptions>',context!);
        Description = json['Description'];
        Footer = json['Footer'];
        Issuer = JsonConverters.fromJson(json['Issuer'],'SessionInvoiceCreationInvoiceDataIssuerOptions',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        RenderingOptions = JsonConverters.fromJson(json['RenderingOptions'],'SessionInvoiceCreationInvoiceDataRenderingOptionsOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AccountTaxIds': JsonConverters.toJson(AccountTaxIds,'List<String>',context!),
        'CustomFields': JsonConverters.toJson(CustomFields,'List<SessionInvoiceCreationInvoiceDataCustomFieldOptions>',context!),
        'Description': Description,
        'Footer': Footer,
        'Issuer': JsonConverters.toJson(Issuer,'SessionInvoiceCreationInvoiceDataIssuerOptions',context!),
        'Metadata': Metadata,
        'RenderingOptions': JsonConverters.toJson(RenderingOptions,'SessionInvoiceCreationInvoiceDataRenderingOptionsOptions',context!)
    };

    getTypeName() => "SessionInvoiceCreationInvoiceDataOptions";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreationOptions implements INestedOptions, IConvertible
{
    bool? Enabled;
    SessionInvoiceCreationInvoiceDataOptions? InvoiceData;

    SessionInvoiceCreationOptions({this.Enabled,this.InvoiceData});
    SessionInvoiceCreationOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Enabled = json['Enabled'];
        InvoiceData = JsonConverters.fromJson(json['InvoiceData'],'SessionInvoiceCreationInvoiceDataOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled,
        'InvoiceData': JsonConverters.toJson(InvoiceData,'SessionInvoiceCreationInvoiceDataOptions',context!)
    };

    getTypeName() => "SessionInvoiceCreationOptions";
    TypeContext? context = _ctx;
}

class SessionLineItemAdjustableQuantityOptions implements INestedOptions, IConvertible
{
    bool? Enabled;
    int? Maximum;
    int? Minimum;

    SessionLineItemAdjustableQuantityOptions({this.Enabled,this.Maximum,this.Minimum});
    SessionLineItemAdjustableQuantityOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Enabled = json['Enabled'];
        Maximum = json['Maximum'];
        Minimum = json['Minimum'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled,
        'Maximum': Maximum,
        'Minimum': Minimum
    };

    getTypeName() => "SessionLineItemAdjustableQuantityOptions";
    TypeContext? context = _ctx;
}

class SessionLineItemPriceDataProductDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    String? Description;
    List<String>? Images;
    Map<String,String?>? Metadata;
    String? Name;
    String? TaxCode;

    SessionLineItemPriceDataProductDataOptions({this.Description,this.Images,this.Metadata,this.Name,this.TaxCode});
    SessionLineItemPriceDataProductDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Description = json['Description'];
        Images = JsonConverters.fromJson(json['Images'],'List<String>',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Name = json['Name'];
        TaxCode = json['TaxCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Description': Description,
        'Images': JsonConverters.toJson(Images,'List<String>',context!),
        'Metadata': Metadata,
        'Name': Name,
        'TaxCode': TaxCode
    };

    getTypeName() => "SessionLineItemPriceDataProductDataOptions";
    TypeContext? context = _ctx;
}

class SessionLineItemPriceDataRecurringOptions implements INestedOptions, IConvertible
{
    String? Interval;
    int? IntervalCount;

    SessionLineItemPriceDataRecurringOptions({this.Interval,this.IntervalCount});
    SessionLineItemPriceDataRecurringOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Interval = json['Interval'];
        IntervalCount = json['IntervalCount'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Interval': Interval,
        'IntervalCount': IntervalCount
    };

    getTypeName() => "SessionLineItemPriceDataRecurringOptions";
    TypeContext? context = _ctx;
}

class SessionLineItemPriceDataOptions implements INestedOptions, IConvertible
{
    String? Currency;
    String? Product;
    SessionLineItemPriceDataProductDataOptions? ProductData;
    SessionLineItemPriceDataRecurringOptions? Recurring;
    String? TaxBehavior;
    int? UnitAmount;
    double? UnitAmountDecimal;

    SessionLineItemPriceDataOptions({this.Currency,this.Product,this.ProductData,this.Recurring,this.TaxBehavior,this.UnitAmount,this.UnitAmountDecimal});
    SessionLineItemPriceDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Currency = json['Currency'];
        Product = json['Product'];
        ProductData = JsonConverters.fromJson(json['ProductData'],'SessionLineItemPriceDataProductDataOptions',context!);
        Recurring = JsonConverters.fromJson(json['Recurring'],'SessionLineItemPriceDataRecurringOptions',context!);
        TaxBehavior = json['TaxBehavior'];
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Currency': Currency,
        'Product': Product,
        'ProductData': JsonConverters.toJson(ProductData,'SessionLineItemPriceDataProductDataOptions',context!),
        'Recurring': JsonConverters.toJson(Recurring,'SessionLineItemPriceDataRecurringOptions',context!),
        'TaxBehavior': TaxBehavior,
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal
    };

    getTypeName() => "SessionLineItemPriceDataOptions";
    TypeContext? context = _ctx;
}

class SessionLineItemOptions implements INestedOptions, IConvertible
{
    SessionLineItemAdjustableQuantityOptions? AdjustableQuantity;
    List<String>? DynamicTaxRates;
    String? Price;
    SessionLineItemPriceDataOptions? PriceData;
    int? Quantity;
    List<String>? TaxRates;

    SessionLineItemOptions({this.AdjustableQuantity,this.DynamicTaxRates,this.Price,this.PriceData,this.Quantity,this.TaxRates});
    SessionLineItemOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AdjustableQuantity = JsonConverters.fromJson(json['AdjustableQuantity'],'SessionLineItemAdjustableQuantityOptions',context!);
        DynamicTaxRates = JsonConverters.fromJson(json['DynamicTaxRates'],'List<String>',context!);
        Price = json['Price'];
        PriceData = JsonConverters.fromJson(json['PriceData'],'SessionLineItemPriceDataOptions',context!);
        Quantity = json['Quantity'];
        TaxRates = JsonConverters.fromJson(json['TaxRates'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AdjustableQuantity': JsonConverters.toJson(AdjustableQuantity,'SessionLineItemAdjustableQuantityOptions',context!),
        'DynamicTaxRates': JsonConverters.toJson(DynamicTaxRates,'List<String>',context!),
        'Price': Price,
        'PriceData': JsonConverters.toJson(PriceData,'SessionLineItemPriceDataOptions',context!),
        'Quantity': Quantity,
        'TaxRates': JsonConverters.toJson(TaxRates,'List<String>',context!)
    };

    getTypeName() => "SessionLineItemOptions";
    TypeContext? context = _ctx;
}

class AddressOptions implements INestedOptions, IConvertible
{
    String? City;
    String? Country;
    String? Line1;
    String? Line2;
    String? PostalCode;
    String? State;

    AddressOptions({this.City,this.Country,this.Line1,this.Line2,this.PostalCode,this.State});
    AddressOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        City = json['City'];
        Country = json['Country'];
        Line1 = json['Line1'];
        Line2 = json['Line2'];
        PostalCode = json['PostalCode'];
        State = json['State'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'City': City,
        'Country': Country,
        'Line1': Line1,
        'Line2': Line2,
        'PostalCode': PostalCode,
        'State': State
    };

    getTypeName() => "AddressOptions";
    TypeContext? context = _ctx;
}

class ChargeShippingOptions implements INestedOptions, IConvertible
{
    AddressOptions? Address;
    String? Carrier;
    String? Name;
    String? Phone;
    String? TrackingNumber;

    ChargeShippingOptions({this.Address,this.Carrier,this.Name,this.Phone,this.TrackingNumber});
    ChargeShippingOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Address = JsonConverters.fromJson(json['Address'],'AddressOptions',context!);
        Carrier = json['Carrier'];
        Name = json['Name'];
        Phone = json['Phone'];
        TrackingNumber = json['TrackingNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Address': JsonConverters.toJson(Address,'AddressOptions',context!),
        'Carrier': Carrier,
        'Name': Name,
        'Phone': Phone,
        'TrackingNumber': TrackingNumber
    };

    getTypeName() => "ChargeShippingOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentIntentDataTransferDataOptions implements INestedOptions, IConvertible
{
    int? Amount;
    String? Destination;

    SessionPaymentIntentDataTransferDataOptions({this.Amount,this.Destination});
    SessionPaymentIntentDataTransferDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Amount = json['Amount'];
        Destination = json['Destination'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Amount': Amount,
        'Destination': Destination
    };

    getTypeName() => "SessionPaymentIntentDataTransferDataOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentIntentDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    int? ApplicationFeeAmount;
    String? CaptureMethod;
    String? Description;
    Map<String,String?>? Metadata;
    String? OnBehalfOf;
    String? ReceiptEmail;
    String? SetupFutureUsage;
    ChargeShippingOptions? Shipping;
    String? StatementDescriptor;
    String? StatementDescriptorSuffix;
    SessionPaymentIntentDataTransferDataOptions? TransferData;
    String? TransferGroup;

    SessionPaymentIntentDataOptions({this.ApplicationFeeAmount,this.CaptureMethod,this.Description,this.Metadata,this.OnBehalfOf,this.ReceiptEmail,this.SetupFutureUsage,this.Shipping,this.StatementDescriptor,this.StatementDescriptorSuffix,this.TransferData,this.TransferGroup});
    SessionPaymentIntentDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ApplicationFeeAmount = json['ApplicationFeeAmount'];
        CaptureMethod = json['CaptureMethod'];
        Description = json['Description'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        OnBehalfOf = json['OnBehalfOf'];
        ReceiptEmail = json['ReceiptEmail'];
        SetupFutureUsage = json['SetupFutureUsage'];
        Shipping = JsonConverters.fromJson(json['Shipping'],'ChargeShippingOptions',context!);
        StatementDescriptor = json['StatementDescriptor'];
        StatementDescriptorSuffix = json['StatementDescriptorSuffix'];
        TransferData = JsonConverters.fromJson(json['TransferData'],'SessionPaymentIntentDataTransferDataOptions',context!);
        TransferGroup = json['TransferGroup'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ApplicationFeeAmount': ApplicationFeeAmount,
        'CaptureMethod': CaptureMethod,
        'Description': Description,
        'Metadata': Metadata,
        'OnBehalfOf': OnBehalfOf,
        'ReceiptEmail': ReceiptEmail,
        'SetupFutureUsage': SetupFutureUsage,
        'Shipping': JsonConverters.toJson(Shipping,'ChargeShippingOptions',context!),
        'StatementDescriptor': StatementDescriptor,
        'StatementDescriptorSuffix': StatementDescriptorSuffix,
        'TransferData': JsonConverters.toJson(TransferData,'SessionPaymentIntentDataTransferDataOptions',context!),
        'TransferGroup': TransferGroup
    };

    getTypeName() => "SessionPaymentIntentDataOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodDataOptions implements INestedOptions, IConvertible
{
    String? AllowRedisplay;

    SessionPaymentMethodDataOptions({this.AllowRedisplay});
    SessionPaymentMethodDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AllowRedisplay = json['AllowRedisplay'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AllowRedisplay': AllowRedisplay
    };

    getTypeName() => "SessionPaymentMethodDataOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions implements INestedOptions, IConvertible
{
    String? CustomMandateUrl;
    List<String>? DefaultFor;
    String? IntervalDescription;
    String? PaymentSchedule;
    String? TransactionType;

    SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions({this.CustomMandateUrl,this.DefaultFor,this.IntervalDescription,this.PaymentSchedule,this.TransactionType});
    SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CustomMandateUrl = json['CustomMandateUrl'];
        DefaultFor = JsonConverters.fromJson(json['DefaultFor'],'List<String>',context!);
        IntervalDescription = json['IntervalDescription'];
        PaymentSchedule = json['PaymentSchedule'];
        TransactionType = json['TransactionType'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CustomMandateUrl': CustomMandateUrl,
        'DefaultFor': JsonConverters.toJson(DefaultFor,'List<String>',context!),
        'IntervalDescription': IntervalDescription,
        'PaymentSchedule': PaymentSchedule,
        'TransactionType': TransactionType
    };

    getTypeName() => "SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAcssDebitOptions implements INestedOptions, IConvertible
{
    String? Currency;
    SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions? MandateOptions;
    String? SetupFutureUsage;
    String? VerificationMethod;

    SessionPaymentMethodOptionsAcssDebitOptions({this.Currency,this.MandateOptions,this.SetupFutureUsage,this.VerificationMethod});
    SessionPaymentMethodOptionsAcssDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Currency = json['Currency'];
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Currency': Currency,
        'MandateOptions': JsonConverters.toJson(MandateOptions,'SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    };

    getTypeName() => "SessionPaymentMethodOptionsAcssDebitOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAffirmOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAffirmOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAffirmOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsAffirmOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAfterpayClearpayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAfterpayClearpayOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAfterpayClearpayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsAfterpayClearpayOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAlipayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAlipayOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAlipayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsAlipayOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAmazonPayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAmazonPayOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAmazonPayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsAmazonPayOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAuBecsDebitOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAuBecsDebitOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAuBecsDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsAuBecsDebitOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsBacsDebitOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsBacsDebitOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsBacsDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsBacsDebitOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsBancontactOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsBancontactOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsBancontactOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsBancontactOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsBoletoOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsBoletoOptions({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsBoletoOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsBoletoOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCardInstallmentsOptions implements INestedOptions, IConvertible
{
    bool? Enabled;

    SessionPaymentMethodOptionsCardInstallmentsOptions({this.Enabled});
    SessionPaymentMethodOptionsCardInstallmentsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Enabled = json['Enabled'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled
    };

    getTypeName() => "SessionPaymentMethodOptionsCardInstallmentsOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCardOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsCardInstallmentsOptions? Installments;
    String? RequestThreeDSecure;
    String? SetupFutureUsage;
    String? StatementDescriptorSuffixKana;
    String? StatementDescriptorSuffixKanji;

    SessionPaymentMethodOptionsCardOptions({this.Installments,this.RequestThreeDSecure,this.SetupFutureUsage,this.StatementDescriptorSuffixKana,this.StatementDescriptorSuffixKanji});
    SessionPaymentMethodOptionsCardOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Installments = JsonConverters.fromJson(json['Installments'],'SessionPaymentMethodOptionsCardInstallmentsOptions',context!);
        RequestThreeDSecure = json['RequestThreeDSecure'];
        SetupFutureUsage = json['SetupFutureUsage'];
        StatementDescriptorSuffixKana = json['StatementDescriptorSuffixKana'];
        StatementDescriptorSuffixKanji = json['StatementDescriptorSuffixKanji'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Installments': JsonConverters.toJson(Installments,'SessionPaymentMethodOptionsCardInstallmentsOptions',context!),
        'RequestThreeDSecure': RequestThreeDSecure,
        'SetupFutureUsage': SetupFutureUsage,
        'StatementDescriptorSuffixKana': StatementDescriptorSuffixKana,
        'StatementDescriptorSuffixKanji': StatementDescriptorSuffixKanji
    };

    getTypeName() => "SessionPaymentMethodOptionsCardOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCashappOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsCashappOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsCashappOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsCashappOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions implements INestedOptions, IConvertible
{
    String? Country;

    SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions({this.Country});
    SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Country = json['Country'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Country': Country
    };

    getTypeName() => "SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions? EuBankTransfer;
    List<String>? RequestedAddressTypes;
    String? Type;

    SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions({this.EuBankTransfer,this.RequestedAddressTypes,this.Type});
    SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        EuBankTransfer = JsonConverters.fromJson(json['EuBankTransfer'],'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions',context!);
        RequestedAddressTypes = JsonConverters.fromJson(json['RequestedAddressTypes'],'List<String>',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'EuBankTransfer': JsonConverters.toJson(EuBankTransfer,'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions',context!),
        'RequestedAddressTypes': JsonConverters.toJson(RequestedAddressTypes,'List<String>',context!),
        'Type': Type
    };

    getTypeName() => "SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCustomerBalanceOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions? BankTransfer;
    String? FundingType;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsCustomerBalanceOptions({this.BankTransfer,this.FundingType,this.SetupFutureUsage});
    SessionPaymentMethodOptionsCustomerBalanceOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        BankTransfer = JsonConverters.fromJson(json['BankTransfer'],'SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions',context!);
        FundingType = json['FundingType'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'BankTransfer': JsonConverters.toJson(BankTransfer,'SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions',context!),
        'FundingType': FundingType,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsCustomerBalanceOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsEpsOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsEpsOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsEpsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsEpsOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsFpxOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsFpxOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsFpxOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsFpxOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsGiropayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsGiropayOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsGiropayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsGiropayOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsGrabpayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsGrabpayOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsGrabpayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsGrabpayOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsIdealOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsIdealOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsIdealOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsIdealOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsKlarnaOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsKlarnaOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsKlarnaOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsKlarnaOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsKonbiniOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsKonbiniOptions({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsKonbiniOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsKonbiniOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsLinkOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsLinkOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsLinkOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsLinkOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsMobilepayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsMobilepayOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsMobilepayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsMobilepayOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsMultibancoOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsMultibancoOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsMultibancoOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsMultibancoOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsOxxoOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsOxxoOptions({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsOxxoOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsOxxoOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsP24Options implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;
    bool? TosShownAndAccepted;

    SessionPaymentMethodOptionsP24Options({this.SetupFutureUsage,this.TosShownAndAccepted});
    SessionPaymentMethodOptionsP24Options.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        TosShownAndAccepted = json['TosShownAndAccepted'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage,
        'TosShownAndAccepted': TosShownAndAccepted
    };

    getTypeName() => "SessionPaymentMethodOptionsP24Options";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsPaynowOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsPaynowOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsPaynowOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsPaynowOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsPaypalOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? Reference;
    String? RiskCorrelationId;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsPaypalOptions({this.CaptureMethod,this.PreferredLocale,this.Reference,this.RiskCorrelationId,this.SetupFutureUsage});
    SessionPaymentMethodOptionsPaypalOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        Reference = json['Reference'];
        RiskCorrelationId = json['RiskCorrelationId'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'Reference': Reference,
        'RiskCorrelationId': RiskCorrelationId,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsPaypalOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsPixOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterSeconds;

    SessionPaymentMethodOptionsPixOptions({this.ExpiresAfterSeconds});
    SessionPaymentMethodOptionsPixOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ExpiresAfterSeconds = json['ExpiresAfterSeconds'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ExpiresAfterSeconds': ExpiresAfterSeconds
    };

    getTypeName() => "SessionPaymentMethodOptionsPixOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsRevolutPayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsRevolutPayOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsRevolutPayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsRevolutPayOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsSepaDebitOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsSepaDebitOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsSepaDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsSepaDebitOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsSofortOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsSofortOptions({this.SetupFutureUsage});
    SessionPaymentMethodOptionsSofortOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsSofortOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsSwishOptions implements INestedOptions, IConvertible
{
    String? Reference;

    SessionPaymentMethodOptionsSwishOptions({this.Reference});
    SessionPaymentMethodOptionsSwishOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Reference = json['Reference'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Reference': Reference
    };

    getTypeName() => "SessionPaymentMethodOptionsSwishOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions implements INestedOptions, IConvertible
{
    List<String>? Permissions;
    List<String>? Prefetch;

    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions({this.Permissions,this.Prefetch});
    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Permissions = JsonConverters.fromJson(json['Permissions'],'List<String>',context!);
        Prefetch = JsonConverters.fromJson(json['Prefetch'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Permissions': JsonConverters.toJson(Permissions,'List<String>',context!),
        'Prefetch': JsonConverters.toJson(Prefetch,'List<String>',context!)
    };

    getTypeName() => "SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsUsBankAccountOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions? FinancialConnections;
    String? SetupFutureUsage;
    String? VerificationMethod;

    SessionPaymentMethodOptionsUsBankAccountOptions({this.FinancialConnections,this.SetupFutureUsage,this.VerificationMethod});
    SessionPaymentMethodOptionsUsBankAccountOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        FinancialConnections = JsonConverters.fromJson(json['FinancialConnections'],'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'FinancialConnections': JsonConverters.toJson(FinancialConnections,'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    };

    getTypeName() => "SessionPaymentMethodOptionsUsBankAccountOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsWechatPayOptions implements INestedOptions, IConvertible
{
    String? AppId;
    String? Client;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsWechatPayOptions({this.AppId,this.Client,this.SetupFutureUsage});
    SessionPaymentMethodOptionsWechatPayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AppId = json['AppId'];
        Client = json['Client'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AppId': AppId,
        'Client': Client,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "SessionPaymentMethodOptionsWechatPayOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsAcssDebitOptions? AcssDebit;
    SessionPaymentMethodOptionsAffirmOptions? Affirm;
    SessionPaymentMethodOptionsAfterpayClearpayOptions? AfterpayClearpay;
    SessionPaymentMethodOptionsAlipayOptions? Alipay;
    SessionPaymentMethodOptionsAmazonPayOptions? AmazonPay;
    SessionPaymentMethodOptionsAuBecsDebitOptions? AuBecsDebit;
    SessionPaymentMethodOptionsBacsDebitOptions? BacsDebit;
    SessionPaymentMethodOptionsBancontactOptions? Bancontact;
    SessionPaymentMethodOptionsBoletoOptions? Boleto;
    SessionPaymentMethodOptionsCardOptions? Card;
    SessionPaymentMethodOptionsCashappOptions? Cashapp;
    SessionPaymentMethodOptionsCustomerBalanceOptions? CustomerBalance;
    SessionPaymentMethodOptionsEpsOptions? Eps;
    SessionPaymentMethodOptionsFpxOptions? Fpx;
    SessionPaymentMethodOptionsGiropayOptions? Giropay;
    SessionPaymentMethodOptionsGrabpayOptions? Grabpay;
    SessionPaymentMethodOptionsIdealOptions? Ideal;
    SessionPaymentMethodOptionsKlarnaOptions? Klarna;
    SessionPaymentMethodOptionsKonbiniOptions? Konbini;
    SessionPaymentMethodOptionsLinkOptions? Link;
    SessionPaymentMethodOptionsMobilepayOptions? Mobilepay;
    SessionPaymentMethodOptionsMultibancoOptions? Multibanco;
    SessionPaymentMethodOptionsOxxoOptions? Oxxo;
    SessionPaymentMethodOptionsP24Options? P24;
    SessionPaymentMethodOptionsPaynowOptions? Paynow;
    SessionPaymentMethodOptionsPaypalOptions? Paypal;
    SessionPaymentMethodOptionsPixOptions? Pix;
    SessionPaymentMethodOptionsRevolutPayOptions? RevolutPay;
    SessionPaymentMethodOptionsSepaDebitOptions? SepaDebit;
    SessionPaymentMethodOptionsSofortOptions? Sofort;
    SessionPaymentMethodOptionsSwishOptions? Swish;
    SessionPaymentMethodOptionsUsBankAccountOptions? UsBankAccount;
    SessionPaymentMethodOptionsWechatPayOptions? WechatPay;

    SessionPaymentMethodOptionsOptions({this.AcssDebit,this.Affirm,this.AfterpayClearpay,this.Alipay,this.AmazonPay,this.AuBecsDebit,this.BacsDebit,this.Bancontact,this.Boleto,this.Card,this.Cashapp,this.CustomerBalance,this.Eps,this.Fpx,this.Giropay,this.Grabpay,this.Ideal,this.Klarna,this.Konbini,this.Link,this.Mobilepay,this.Multibanco,this.Oxxo,this.P24,this.Paynow,this.Paypal,this.Pix,this.RevolutPay,this.SepaDebit,this.Sofort,this.Swish,this.UsBankAccount,this.WechatPay});
    SessionPaymentMethodOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AcssDebit = JsonConverters.fromJson(json['AcssDebit'],'SessionPaymentMethodOptionsAcssDebitOptions',context!);
        Affirm = JsonConverters.fromJson(json['Affirm'],'SessionPaymentMethodOptionsAffirmOptions',context!);
        AfterpayClearpay = JsonConverters.fromJson(json['AfterpayClearpay'],'SessionPaymentMethodOptionsAfterpayClearpayOptions',context!);
        Alipay = JsonConverters.fromJson(json['Alipay'],'SessionPaymentMethodOptionsAlipayOptions',context!);
        AmazonPay = JsonConverters.fromJson(json['AmazonPay'],'SessionPaymentMethodOptionsAmazonPayOptions',context!);
        AuBecsDebit = JsonConverters.fromJson(json['AuBecsDebit'],'SessionPaymentMethodOptionsAuBecsDebitOptions',context!);
        BacsDebit = JsonConverters.fromJson(json['BacsDebit'],'SessionPaymentMethodOptionsBacsDebitOptions',context!);
        Bancontact = JsonConverters.fromJson(json['Bancontact'],'SessionPaymentMethodOptionsBancontactOptions',context!);
        Boleto = JsonConverters.fromJson(json['Boleto'],'SessionPaymentMethodOptionsBoletoOptions',context!);
        Card = JsonConverters.fromJson(json['Card'],'SessionPaymentMethodOptionsCardOptions',context!);
        Cashapp = JsonConverters.fromJson(json['Cashapp'],'SessionPaymentMethodOptionsCashappOptions',context!);
        CustomerBalance = JsonConverters.fromJson(json['CustomerBalance'],'SessionPaymentMethodOptionsCustomerBalanceOptions',context!);
        Eps = JsonConverters.fromJson(json['Eps'],'SessionPaymentMethodOptionsEpsOptions',context!);
        Fpx = JsonConverters.fromJson(json['Fpx'],'SessionPaymentMethodOptionsFpxOptions',context!);
        Giropay = JsonConverters.fromJson(json['Giropay'],'SessionPaymentMethodOptionsGiropayOptions',context!);
        Grabpay = JsonConverters.fromJson(json['Grabpay'],'SessionPaymentMethodOptionsGrabpayOptions',context!);
        Ideal = JsonConverters.fromJson(json['Ideal'],'SessionPaymentMethodOptionsIdealOptions',context!);
        Klarna = JsonConverters.fromJson(json['Klarna'],'SessionPaymentMethodOptionsKlarnaOptions',context!);
        Konbini = JsonConverters.fromJson(json['Konbini'],'SessionPaymentMethodOptionsKonbiniOptions',context!);
        Link = JsonConverters.fromJson(json['Link'],'SessionPaymentMethodOptionsLinkOptions',context!);
        Mobilepay = JsonConverters.fromJson(json['Mobilepay'],'SessionPaymentMethodOptionsMobilepayOptions',context!);
        Multibanco = JsonConverters.fromJson(json['Multibanco'],'SessionPaymentMethodOptionsMultibancoOptions',context!);
        Oxxo = JsonConverters.fromJson(json['Oxxo'],'SessionPaymentMethodOptionsOxxoOptions',context!);
        P24 = JsonConverters.fromJson(json['P24'],'SessionPaymentMethodOptionsP24Options',context!);
        Paynow = JsonConverters.fromJson(json['Paynow'],'SessionPaymentMethodOptionsPaynowOptions',context!);
        Paypal = JsonConverters.fromJson(json['Paypal'],'SessionPaymentMethodOptionsPaypalOptions',context!);
        Pix = JsonConverters.fromJson(json['Pix'],'SessionPaymentMethodOptionsPixOptions',context!);
        RevolutPay = JsonConverters.fromJson(json['RevolutPay'],'SessionPaymentMethodOptionsRevolutPayOptions',context!);
        SepaDebit = JsonConverters.fromJson(json['SepaDebit'],'SessionPaymentMethodOptionsSepaDebitOptions',context!);
        Sofort = JsonConverters.fromJson(json['Sofort'],'SessionPaymentMethodOptionsSofortOptions',context!);
        Swish = JsonConverters.fromJson(json['Swish'],'SessionPaymentMethodOptionsSwishOptions',context!);
        UsBankAccount = JsonConverters.fromJson(json['UsBankAccount'],'SessionPaymentMethodOptionsUsBankAccountOptions',context!);
        WechatPay = JsonConverters.fromJson(json['WechatPay'],'SessionPaymentMethodOptionsWechatPayOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AcssDebit': JsonConverters.toJson(AcssDebit,'SessionPaymentMethodOptionsAcssDebitOptions',context!),
        'Affirm': JsonConverters.toJson(Affirm,'SessionPaymentMethodOptionsAffirmOptions',context!),
        'AfterpayClearpay': JsonConverters.toJson(AfterpayClearpay,'SessionPaymentMethodOptionsAfterpayClearpayOptions',context!),
        'Alipay': JsonConverters.toJson(Alipay,'SessionPaymentMethodOptionsAlipayOptions',context!),
        'AmazonPay': JsonConverters.toJson(AmazonPay,'SessionPaymentMethodOptionsAmazonPayOptions',context!),
        'AuBecsDebit': JsonConverters.toJson(AuBecsDebit,'SessionPaymentMethodOptionsAuBecsDebitOptions',context!),
        'BacsDebit': JsonConverters.toJson(BacsDebit,'SessionPaymentMethodOptionsBacsDebitOptions',context!),
        'Bancontact': JsonConverters.toJson(Bancontact,'SessionPaymentMethodOptionsBancontactOptions',context!),
        'Boleto': JsonConverters.toJson(Boleto,'SessionPaymentMethodOptionsBoletoOptions',context!),
        'Card': JsonConverters.toJson(Card,'SessionPaymentMethodOptionsCardOptions',context!),
        'Cashapp': JsonConverters.toJson(Cashapp,'SessionPaymentMethodOptionsCashappOptions',context!),
        'CustomerBalance': JsonConverters.toJson(CustomerBalance,'SessionPaymentMethodOptionsCustomerBalanceOptions',context!),
        'Eps': JsonConverters.toJson(Eps,'SessionPaymentMethodOptionsEpsOptions',context!),
        'Fpx': JsonConverters.toJson(Fpx,'SessionPaymentMethodOptionsFpxOptions',context!),
        'Giropay': JsonConverters.toJson(Giropay,'SessionPaymentMethodOptionsGiropayOptions',context!),
        'Grabpay': JsonConverters.toJson(Grabpay,'SessionPaymentMethodOptionsGrabpayOptions',context!),
        'Ideal': JsonConverters.toJson(Ideal,'SessionPaymentMethodOptionsIdealOptions',context!),
        'Klarna': JsonConverters.toJson(Klarna,'SessionPaymentMethodOptionsKlarnaOptions',context!),
        'Konbini': JsonConverters.toJson(Konbini,'SessionPaymentMethodOptionsKonbiniOptions',context!),
        'Link': JsonConverters.toJson(Link,'SessionPaymentMethodOptionsLinkOptions',context!),
        'Mobilepay': JsonConverters.toJson(Mobilepay,'SessionPaymentMethodOptionsMobilepayOptions',context!),
        'Multibanco': JsonConverters.toJson(Multibanco,'SessionPaymentMethodOptionsMultibancoOptions',context!),
        'Oxxo': JsonConverters.toJson(Oxxo,'SessionPaymentMethodOptionsOxxoOptions',context!),
        'P24': JsonConverters.toJson(P24,'SessionPaymentMethodOptionsP24Options',context!),
        'Paynow': JsonConverters.toJson(Paynow,'SessionPaymentMethodOptionsPaynowOptions',context!),
        'Paypal': JsonConverters.toJson(Paypal,'SessionPaymentMethodOptionsPaypalOptions',context!),
        'Pix': JsonConverters.toJson(Pix,'SessionPaymentMethodOptionsPixOptions',context!),
        'RevolutPay': JsonConverters.toJson(RevolutPay,'SessionPaymentMethodOptionsRevolutPayOptions',context!),
        'SepaDebit': JsonConverters.toJson(SepaDebit,'SessionPaymentMethodOptionsSepaDebitOptions',context!),
        'Sofort': JsonConverters.toJson(Sofort,'SessionPaymentMethodOptionsSofortOptions',context!),
        'Swish': JsonConverters.toJson(Swish,'SessionPaymentMethodOptionsSwishOptions',context!),
        'UsBankAccount': JsonConverters.toJson(UsBankAccount,'SessionPaymentMethodOptionsUsBankAccountOptions',context!),
        'WechatPay': JsonConverters.toJson(WechatPay,'SessionPaymentMethodOptionsWechatPayOptions',context!)
    };

    getTypeName() => "SessionPaymentMethodOptionsOptions";
    TypeContext? context = _ctx;
}

class SessionPhoneNumberCollectionOptions implements INestedOptions, IConvertible
{
    bool? Enabled;

    SessionPhoneNumberCollectionOptions({this.Enabled});
    SessionPhoneNumberCollectionOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Enabled = json['Enabled'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled
    };

    getTypeName() => "SessionPhoneNumberCollectionOptions";
    TypeContext? context = _ctx;
}

class SessionSavedPaymentMethodOptionsOptions implements INestedOptions, IConvertible
{
    List<String>? AllowRedisplayFilters;
    String? PaymentMethodSave;

    SessionSavedPaymentMethodOptionsOptions({this.AllowRedisplayFilters,this.PaymentMethodSave});
    SessionSavedPaymentMethodOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AllowRedisplayFilters = JsonConverters.fromJson(json['AllowRedisplayFilters'],'List<String>',context!);
        PaymentMethodSave = json['PaymentMethodSave'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AllowRedisplayFilters': JsonConverters.toJson(AllowRedisplayFilters,'List<String>',context!),
        'PaymentMethodSave': PaymentMethodSave
    };

    getTypeName() => "SessionSavedPaymentMethodOptionsOptions";
    TypeContext? context = _ctx;
}

class SessionSetupIntentDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    String? Description;
    Map<String,String?>? Metadata;
    String? OnBehalfOf;

    SessionSetupIntentDataOptions({this.Description,this.Metadata,this.OnBehalfOf});
    SessionSetupIntentDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Description = json['Description'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        OnBehalfOf = json['OnBehalfOf'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Description': Description,
        'Metadata': Metadata,
        'OnBehalfOf': OnBehalfOf
    };

    getTypeName() => "SessionSetupIntentDataOptions";
    TypeContext? context = _ctx;
}

class SessionShippingAddressCollectionOptions implements INestedOptions, IConvertible
{
    List<String>? AllowedCountries;

    SessionShippingAddressCollectionOptions({this.AllowedCountries});
    SessionShippingAddressCollectionOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AllowedCountries = JsonConverters.fromJson(json['AllowedCountries'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AllowedCountries': JsonConverters.toJson(AllowedCountries,'List<String>',context!)
    };

    getTypeName() => "SessionShippingAddressCollectionOptions";
    TypeContext? context = _ctx;
}

class SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions implements INestedOptions, IConvertible
{
    String? Unit;
    int? Value;

    SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions({this.Unit,this.Value});
    SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Unit = json['Unit'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Unit': Unit,
        'Value': Value
    };

    getTypeName() => "SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions";
    TypeContext? context = _ctx;
}

class SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions implements INestedOptions, IConvertible
{
    String? Unit;
    int? Value;

    SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions({this.Unit,this.Value});
    SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Unit = json['Unit'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Unit': Unit,
        'Value': Value
    };

    getTypeName() => "SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions";
    TypeContext? context = _ctx;
}

class SessionShippingOptionShippingRateDataDeliveryEstimateOptions implements INestedOptions, IConvertible
{
    SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions? Maximum;
    SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions? Minimum;

    SessionShippingOptionShippingRateDataDeliveryEstimateOptions({this.Maximum,this.Minimum});
    SessionShippingOptionShippingRateDataDeliveryEstimateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Maximum = JsonConverters.fromJson(json['Maximum'],'SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions',context!);
        Minimum = JsonConverters.fromJson(json['Minimum'],'SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Maximum': JsonConverters.toJson(Maximum,'SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions',context!),
        'Minimum': JsonConverters.toJson(Minimum,'SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions',context!)
    };

    getTypeName() => "SessionShippingOptionShippingRateDataDeliveryEstimateOptions";
    TypeContext? context = _ctx;
}

class SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions implements INestedOptions, IConvertible
{
    int? Amount;
    String? TaxBehavior;

    SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions({this.Amount,this.TaxBehavior});
    SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Amount = json['Amount'];
        TaxBehavior = json['TaxBehavior'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Amount': Amount,
        'TaxBehavior': TaxBehavior
    };

    getTypeName() => "SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions";
    TypeContext? context = _ctx;
}

class SessionShippingOptionShippingRateDataFixedAmountOptions implements INestedOptions, IConvertible
{
    int? Amount;
    String? Currency;
    Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>? CurrencyOptions;

    SessionShippingOptionShippingRateDataFixedAmountOptions({this.Amount,this.Currency,this.CurrencyOptions});
    SessionShippingOptionShippingRateDataFixedAmountOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Amount = json['Amount'];
        Currency = json['Currency'];
        CurrencyOptions = JsonConverters.fromJson(json['CurrencyOptions'],'Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Amount': Amount,
        'Currency': Currency,
        'CurrencyOptions': JsonConverters.toJson(CurrencyOptions,'Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>',context!)
    };

    getTypeName() => "SessionShippingOptionShippingRateDataFixedAmountOptions";
    TypeContext? context = _ctx;
}

class SessionShippingOptionShippingRateDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    SessionShippingOptionShippingRateDataDeliveryEstimateOptions? DeliveryEstimate;
    String? DisplayName;
    SessionShippingOptionShippingRateDataFixedAmountOptions? FixedAmount;
    Map<String,String?>? Metadata;
    String? TaxBehavior;
    String? TaxCode;
    String? Type;

    SessionShippingOptionShippingRateDataOptions({this.DeliveryEstimate,this.DisplayName,this.FixedAmount,this.Metadata,this.TaxBehavior,this.TaxCode,this.Type});
    SessionShippingOptionShippingRateDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        DeliveryEstimate = JsonConverters.fromJson(json['DeliveryEstimate'],'SessionShippingOptionShippingRateDataDeliveryEstimateOptions',context!);
        DisplayName = json['DisplayName'];
        FixedAmount = JsonConverters.fromJson(json['FixedAmount'],'SessionShippingOptionShippingRateDataFixedAmountOptions',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        TaxBehavior = json['TaxBehavior'];
        TaxCode = json['TaxCode'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'DeliveryEstimate': JsonConverters.toJson(DeliveryEstimate,'SessionShippingOptionShippingRateDataDeliveryEstimateOptions',context!),
        'DisplayName': DisplayName,
        'FixedAmount': JsonConverters.toJson(FixedAmount,'SessionShippingOptionShippingRateDataFixedAmountOptions',context!),
        'Metadata': Metadata,
        'TaxBehavior': TaxBehavior,
        'TaxCode': TaxCode,
        'Type': Type
    };

    getTypeName() => "SessionShippingOptionShippingRateDataOptions";
    TypeContext? context = _ctx;
}

class SessionShippingOptionOptions implements INestedOptions, IConvertible
{
    String? ShippingRate;
    SessionShippingOptionShippingRateDataOptions? ShippingRateData;

    SessionShippingOptionOptions({this.ShippingRate,this.ShippingRateData});
    SessionShippingOptionOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ShippingRate = json['ShippingRate'];
        ShippingRateData = JsonConverters.fromJson(json['ShippingRateData'],'SessionShippingOptionShippingRateDataOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ShippingRate': ShippingRate,
        'ShippingRateData': JsonConverters.toJson(ShippingRateData,'SessionShippingOptionShippingRateDataOptions',context!)
    };

    getTypeName() => "SessionShippingOptionOptions";
    TypeContext? context = _ctx;
}

class SessionSubscriptionDataInvoiceSettingsIssuerOptions implements INestedOptions, IConvertible
{
    String? Account;
    String? Type;

    SessionSubscriptionDataInvoiceSettingsIssuerOptions({this.Account,this.Type});
    SessionSubscriptionDataInvoiceSettingsIssuerOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Account = json['Account'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Account': Account,
        'Type': Type
    };

    getTypeName() => "SessionSubscriptionDataInvoiceSettingsIssuerOptions";
    TypeContext? context = _ctx;
}

class SessionSubscriptionDataInvoiceSettingsOptions implements INestedOptions, IConvertible
{
    SessionSubscriptionDataInvoiceSettingsIssuerOptions? Issuer;

    SessionSubscriptionDataInvoiceSettingsOptions({this.Issuer});
    SessionSubscriptionDataInvoiceSettingsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Issuer = JsonConverters.fromJson(json['Issuer'],'SessionSubscriptionDataInvoiceSettingsIssuerOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Issuer': JsonConverters.toJson(Issuer,'SessionSubscriptionDataInvoiceSettingsIssuerOptions',context!)
    };

    getTypeName() => "SessionSubscriptionDataInvoiceSettingsOptions";
    TypeContext? context = _ctx;
}

class SessionSubscriptionDataTransferDataOptions implements INestedOptions, IConvertible
{
    double? AmountPercent;
    String? Destination;

    SessionSubscriptionDataTransferDataOptions({this.AmountPercent,this.Destination});
    SessionSubscriptionDataTransferDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AmountPercent = JsonConverters.toDouble(json['AmountPercent']);
        Destination = json['Destination'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AmountPercent': AmountPercent,
        'Destination': Destination
    };

    getTypeName() => "SessionSubscriptionDataTransferDataOptions";
    TypeContext? context = _ctx;
}

class SessionSubscriptionDataTrialSettingsEndBehaviorOptions implements INestedOptions, IConvertible
{
    String? MissingPaymentMethod;

    SessionSubscriptionDataTrialSettingsEndBehaviorOptions({this.MissingPaymentMethod});
    SessionSubscriptionDataTrialSettingsEndBehaviorOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        MissingPaymentMethod = json['MissingPaymentMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'MissingPaymentMethod': MissingPaymentMethod
    };

    getTypeName() => "SessionSubscriptionDataTrialSettingsEndBehaviorOptions";
    TypeContext? context = _ctx;
}

class SessionSubscriptionDataTrialSettingsOptions implements INestedOptions, IConvertible
{
    SessionSubscriptionDataTrialSettingsEndBehaviorOptions? EndBehavior;

    SessionSubscriptionDataTrialSettingsOptions({this.EndBehavior});
    SessionSubscriptionDataTrialSettingsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        EndBehavior = JsonConverters.fromJson(json['EndBehavior'],'SessionSubscriptionDataTrialSettingsEndBehaviorOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'EndBehavior': JsonConverters.toJson(EndBehavior,'SessionSubscriptionDataTrialSettingsEndBehaviorOptions',context!)
    };

    getTypeName() => "SessionSubscriptionDataTrialSettingsOptions";
    TypeContext? context = _ctx;
}

class SessionSubscriptionDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    double? ApplicationFeePercent;
    DateTime? BillingCycleAnchor;
    List<String>? DefaultTaxRates;
    String? Description;
    SessionSubscriptionDataInvoiceSettingsOptions? InvoiceSettings;
    Map<String,String?>? Metadata;
    String? OnBehalfOf;
    String? ProrationBehavior;
    SessionSubscriptionDataTransferDataOptions? TransferData;
    DateTime? TrialEnd;
    int? TrialPeriodDays;
    SessionSubscriptionDataTrialSettingsOptions? TrialSettings;

    SessionSubscriptionDataOptions({this.ApplicationFeePercent,this.BillingCycleAnchor,this.DefaultTaxRates,this.Description,this.InvoiceSettings,this.Metadata,this.OnBehalfOf,this.ProrationBehavior,this.TransferData,this.TrialEnd,this.TrialPeriodDays,this.TrialSettings});
    SessionSubscriptionDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ApplicationFeePercent = JsonConverters.toDouble(json['ApplicationFeePercent']);
        BillingCycleAnchor = JsonConverters.fromJson(json['BillingCycleAnchor'],'DateTime',context!);
        DefaultTaxRates = JsonConverters.fromJson(json['DefaultTaxRates'],'List<String>',context!);
        Description = json['Description'];
        InvoiceSettings = JsonConverters.fromJson(json['InvoiceSettings'],'SessionSubscriptionDataInvoiceSettingsOptions',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        OnBehalfOf = json['OnBehalfOf'];
        ProrationBehavior = json['ProrationBehavior'];
        TransferData = JsonConverters.fromJson(json['TransferData'],'SessionSubscriptionDataTransferDataOptions',context!);
        TrialEnd = JsonConverters.fromJson(json['TrialEnd'],'DateTime',context!);
        TrialPeriodDays = json['TrialPeriodDays'];
        TrialSettings = JsonConverters.fromJson(json['TrialSettings'],'SessionSubscriptionDataTrialSettingsOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ApplicationFeePercent': ApplicationFeePercent,
        'BillingCycleAnchor': JsonConverters.toJson(BillingCycleAnchor,'DateTime',context!),
        'DefaultTaxRates': JsonConverters.toJson(DefaultTaxRates,'List<String>',context!),
        'Description': Description,
        'InvoiceSettings': JsonConverters.toJson(InvoiceSettings,'SessionSubscriptionDataInvoiceSettingsOptions',context!),
        'Metadata': Metadata,
        'OnBehalfOf': OnBehalfOf,
        'ProrationBehavior': ProrationBehavior,
        'TransferData': JsonConverters.toJson(TransferData,'SessionSubscriptionDataTransferDataOptions',context!),
        'TrialEnd': JsonConverters.toJson(TrialEnd,'DateTime',context!),
        'TrialPeriodDays': TrialPeriodDays,
        'TrialSettings': JsonConverters.toJson(TrialSettings,'SessionSubscriptionDataTrialSettingsOptions',context!)
    };

    getTypeName() => "SessionSubscriptionDataOptions";
    TypeContext? context = _ctx;
}

class SessionTaxIdCollectionOptions implements INestedOptions, IConvertible
{
    bool? Enabled;
    String? Required;

    SessionTaxIdCollectionOptions({this.Enabled,this.Required});
    SessionTaxIdCollectionOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Enabled = json['Enabled'];
        Required = json['Required'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled,
        'Required': Required
    };

    getTypeName() => "SessionTaxIdCollectionOptions";
    TypeContext? context = _ctx;
}

class SessionCreateOptions extends BaseOptions implements IHasMetadata, IConvertible
{
    SessionAfterExpirationOptions? AfterExpiration;
    bool? AllowPromotionCodes;
    SessionAutomaticTaxOptions? AutomaticTax;
    String? BillingAddressCollection;
    String? CancelUrl;
    String? ClientReferenceId;
    SessionConsentCollectionOptions? ConsentCollection;
    String? Currency;
    List<SessionCustomFieldOptions>? CustomFields;
    SessionCustomTextOptions? CustomText;
    String? Customer;
    String? CustomerCreation;
    String? CustomerEmail;
    SessionCustomerUpdateOptions? CustomerUpdate;
    List<SessionDiscountOptions>? Discounts;
    DateTime? ExpiresAt;
    SessionInvoiceCreationOptions? InvoiceCreation;
    List<SessionLineItemOptions>? LineItems;
    String? Locale;
    Map<String,String?>? Metadata;
    String? Mode;
    SessionPaymentIntentDataOptions? PaymentIntentData;
    String? PaymentMethodCollection;
    String? PaymentMethodConfiguration;
    SessionPaymentMethodDataOptions? PaymentMethodData;
    SessionPaymentMethodOptionsOptions? PaymentMethodOptions;
    List<String>? PaymentMethodTypes;
    SessionPhoneNumberCollectionOptions? PhoneNumberCollection;
    String? RedirectOnCompletion;
    String? ReturnUrl;
    SessionSavedPaymentMethodOptionsOptions? SavedPaymentMethodOptions;
    SessionSetupIntentDataOptions? SetupIntentData;
    SessionShippingAddressCollectionOptions? ShippingAddressCollection;
    List<SessionShippingOptionOptions>? ShippingOptions;
    String? SubmitType;
    SessionSubscriptionDataOptions? SubscriptionData;
    String? SuccessUrl;
    SessionTaxIdCollectionOptions? TaxIdCollection;
    String? UiMode;

    SessionCreateOptions({this.AfterExpiration,this.AllowPromotionCodes,this.AutomaticTax,this.BillingAddressCollection,this.CancelUrl,this.ClientReferenceId,this.ConsentCollection,this.Currency,this.CustomFields,this.CustomText,this.Customer,this.CustomerCreation,this.CustomerEmail,this.CustomerUpdate,this.Discounts,this.ExpiresAt,this.InvoiceCreation,this.LineItems,this.Locale,this.Metadata,this.Mode,this.PaymentIntentData,this.PaymentMethodCollection,this.PaymentMethodConfiguration,this.PaymentMethodData,this.PaymentMethodOptions,this.PaymentMethodTypes,this.PhoneNumberCollection,this.RedirectOnCompletion,this.ReturnUrl,this.SavedPaymentMethodOptions,this.SetupIntentData,this.ShippingAddressCollection,this.ShippingOptions,this.SubmitType,this.SubscriptionData,this.SuccessUrl,this.TaxIdCollection,this.UiMode});
    SessionCreateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AfterExpiration = JsonConverters.fromJson(json['AfterExpiration'],'SessionAfterExpirationOptions',context!);
        AllowPromotionCodes = json['AllowPromotionCodes'];
        AutomaticTax = JsonConverters.fromJson(json['AutomaticTax'],'SessionAutomaticTaxOptions',context!);
        BillingAddressCollection = json['BillingAddressCollection'];
        CancelUrl = json['CancelUrl'];
        ClientReferenceId = json['ClientReferenceId'];
        ConsentCollection = JsonConverters.fromJson(json['ConsentCollection'],'SessionConsentCollectionOptions',context!);
        Currency = json['Currency'];
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<SessionCustomFieldOptions>',context!);
        CustomText = JsonConverters.fromJson(json['CustomText'],'SessionCustomTextOptions',context!);
        Customer = json['Customer'];
        CustomerCreation = json['CustomerCreation'];
        CustomerEmail = json['CustomerEmail'];
        CustomerUpdate = JsonConverters.fromJson(json['CustomerUpdate'],'SessionCustomerUpdateOptions',context!);
        Discounts = JsonConverters.fromJson(json['Discounts'],'List<SessionDiscountOptions>',context!);
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        InvoiceCreation = JsonConverters.fromJson(json['InvoiceCreation'],'SessionInvoiceCreationOptions',context!);
        LineItems = JsonConverters.fromJson(json['LineItems'],'List<SessionLineItemOptions>',context!);
        Locale = json['Locale'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Mode = json['Mode'];
        PaymentIntentData = JsonConverters.fromJson(json['PaymentIntentData'],'SessionPaymentIntentDataOptions',context!);
        PaymentMethodCollection = json['PaymentMethodCollection'];
        PaymentMethodConfiguration = json['PaymentMethodConfiguration'];
        PaymentMethodData = JsonConverters.fromJson(json['PaymentMethodData'],'SessionPaymentMethodDataOptions',context!);
        PaymentMethodOptions = JsonConverters.fromJson(json['PaymentMethodOptions'],'SessionPaymentMethodOptionsOptions',context!);
        PaymentMethodTypes = JsonConverters.fromJson(json['PaymentMethodTypes'],'List<String>',context!);
        PhoneNumberCollection = JsonConverters.fromJson(json['PhoneNumberCollection'],'SessionPhoneNumberCollectionOptions',context!);
        RedirectOnCompletion = json['RedirectOnCompletion'];
        ReturnUrl = json['ReturnUrl'];
        SavedPaymentMethodOptions = JsonConverters.fromJson(json['SavedPaymentMethodOptions'],'SessionSavedPaymentMethodOptionsOptions',context!);
        SetupIntentData = JsonConverters.fromJson(json['SetupIntentData'],'SessionSetupIntentDataOptions',context!);
        ShippingAddressCollection = JsonConverters.fromJson(json['ShippingAddressCollection'],'SessionShippingAddressCollectionOptions',context!);
        ShippingOptions = JsonConverters.fromJson(json['ShippingOptions'],'List<SessionShippingOptionOptions>',context!);
        SubmitType = json['SubmitType'];
        SubscriptionData = JsonConverters.fromJson(json['SubscriptionData'],'SessionSubscriptionDataOptions',context!);
        SuccessUrl = json['SuccessUrl'];
        TaxIdCollection = JsonConverters.fromJson(json['TaxIdCollection'],'SessionTaxIdCollectionOptions',context!);
        UiMode = json['UiMode'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AfterExpiration': JsonConverters.toJson(AfterExpiration,'SessionAfterExpirationOptions',context!),
        'AllowPromotionCodes': AllowPromotionCodes,
        'AutomaticTax': JsonConverters.toJson(AutomaticTax,'SessionAutomaticTaxOptions',context!),
        'BillingAddressCollection': BillingAddressCollection,
        'CancelUrl': CancelUrl,
        'ClientReferenceId': ClientReferenceId,
        'ConsentCollection': JsonConverters.toJson(ConsentCollection,'SessionConsentCollectionOptions',context!),
        'Currency': Currency,
        'CustomFields': JsonConverters.toJson(CustomFields,'List<SessionCustomFieldOptions>',context!),
        'CustomText': JsonConverters.toJson(CustomText,'SessionCustomTextOptions',context!),
        'Customer': Customer,
        'CustomerCreation': CustomerCreation,
        'CustomerEmail': CustomerEmail,
        'CustomerUpdate': JsonConverters.toJson(CustomerUpdate,'SessionCustomerUpdateOptions',context!),
        'Discounts': JsonConverters.toJson(Discounts,'List<SessionDiscountOptions>',context!),
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'InvoiceCreation': JsonConverters.toJson(InvoiceCreation,'SessionInvoiceCreationOptions',context!),
        'LineItems': JsonConverters.toJson(LineItems,'List<SessionLineItemOptions>',context!),
        'Locale': Locale,
        'Metadata': Metadata,
        'Mode': Mode,
        'PaymentIntentData': JsonConverters.toJson(PaymentIntentData,'SessionPaymentIntentDataOptions',context!),
        'PaymentMethodCollection': PaymentMethodCollection,
        'PaymentMethodConfiguration': PaymentMethodConfiguration,
        'PaymentMethodData': JsonConverters.toJson(PaymentMethodData,'SessionPaymentMethodDataOptions',context!),
        'PaymentMethodOptions': JsonConverters.toJson(PaymentMethodOptions,'SessionPaymentMethodOptionsOptions',context!),
        'PaymentMethodTypes': JsonConverters.toJson(PaymentMethodTypes,'List<String>',context!),
        'PhoneNumberCollection': JsonConverters.toJson(PhoneNumberCollection,'SessionPhoneNumberCollectionOptions',context!),
        'RedirectOnCompletion': RedirectOnCompletion,
        'ReturnUrl': ReturnUrl,
        'SavedPaymentMethodOptions': JsonConverters.toJson(SavedPaymentMethodOptions,'SessionSavedPaymentMethodOptionsOptions',context!),
        'SetupIntentData': JsonConverters.toJson(SetupIntentData,'SessionSetupIntentDataOptions',context!),
        'ShippingAddressCollection': JsonConverters.toJson(ShippingAddressCollection,'SessionShippingAddressCollectionOptions',context!),
        'ShippingOptions': JsonConverters.toJson(ShippingOptions,'List<SessionShippingOptionOptions>',context!),
        'SubmitType': SubmitType,
        'SubscriptionData': JsonConverters.toJson(SubscriptionData,'SessionSubscriptionDataOptions',context!),
        'SuccessUrl': SuccessUrl,
        'TaxIdCollection': JsonConverters.toJson(TaxIdCollection,'SessionTaxIdCollectionOptions',context!),
        'UiMode': UiMode
    });

    getTypeName() => "SessionCreateOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentAutomaticPaymentMethodsOptions implements INestedOptions, IConvertible
{
    String? AllowRedirects;
    bool? Enabled;

    PaymentIntentAutomaticPaymentMethodsOptions({this.AllowRedirects,this.Enabled});
    PaymentIntentAutomaticPaymentMethodsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AllowRedirects = json['AllowRedirects'];
        Enabled = json['Enabled'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AllowRedirects': AllowRedirects,
        'Enabled': Enabled
    };

    getTypeName() => "PaymentIntentAutomaticPaymentMethodsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentMandateDataCustomerAcceptanceOfflineOptions implements INestedOptions, IConvertible
{
    PaymentIntentMandateDataCustomerAcceptanceOfflineOptions();
    PaymentIntentMandateDataCustomerAcceptanceOfflineOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentMandateDataCustomerAcceptanceOfflineOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentMandateDataCustomerAcceptanceOnlineOptions implements INestedOptions, IConvertible
{
    String? IpAddress;
    String? UserAgent;

    PaymentIntentMandateDataCustomerAcceptanceOnlineOptions({this.IpAddress,this.UserAgent});
    PaymentIntentMandateDataCustomerAcceptanceOnlineOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        IpAddress = json['IpAddress'];
        UserAgent = json['UserAgent'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'IpAddress': IpAddress,
        'UserAgent': UserAgent
    };

    getTypeName() => "PaymentIntentMandateDataCustomerAcceptanceOnlineOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentMandateDataCustomerAcceptanceOptions implements INestedOptions, IConvertible
{
    DateTime? AcceptedAt;
    PaymentIntentMandateDataCustomerAcceptanceOfflineOptions? Offline;
    PaymentIntentMandateDataCustomerAcceptanceOnlineOptions? Online;
    String? Type;

    PaymentIntentMandateDataCustomerAcceptanceOptions({this.AcceptedAt,this.Offline,this.Online,this.Type});
    PaymentIntentMandateDataCustomerAcceptanceOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AcceptedAt = JsonConverters.fromJson(json['AcceptedAt'],'DateTime',context!);
        Offline = JsonConverters.fromJson(json['Offline'],'PaymentIntentMandateDataCustomerAcceptanceOfflineOptions',context!);
        Online = JsonConverters.fromJson(json['Online'],'PaymentIntentMandateDataCustomerAcceptanceOnlineOptions',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AcceptedAt': JsonConverters.toJson(AcceptedAt,'DateTime',context!),
        'Offline': JsonConverters.toJson(Offline,'PaymentIntentMandateDataCustomerAcceptanceOfflineOptions',context!),
        'Online': JsonConverters.toJson(Online,'PaymentIntentMandateDataCustomerAcceptanceOnlineOptions',context!),
        'Type': Type
    };

    getTypeName() => "PaymentIntentMandateDataCustomerAcceptanceOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentMandateDataOptions implements INestedOptions, IConvertible
{
    PaymentIntentMandateDataCustomerAcceptanceOptions? CustomerAcceptance;

    PaymentIntentMandateDataOptions({this.CustomerAcceptance});
    PaymentIntentMandateDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CustomerAcceptance = JsonConverters.fromJson(json['CustomerAcceptance'],'PaymentIntentMandateDataCustomerAcceptanceOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CustomerAcceptance': JsonConverters.toJson(CustomerAcceptance,'PaymentIntentMandateDataCustomerAcceptanceOptions',context!)
    };

    getTypeName() => "PaymentIntentMandateDataOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataAcssDebitOptions implements INestedOptions, IConvertible
{
    String? AccountNumber;
    String? InstitutionNumber;
    String? TransitNumber;

    PaymentIntentPaymentMethodDataAcssDebitOptions({this.AccountNumber,this.InstitutionNumber,this.TransitNumber});
    PaymentIntentPaymentMethodDataAcssDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AccountNumber = json['AccountNumber'];
        InstitutionNumber = json['InstitutionNumber'];
        TransitNumber = json['TransitNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AccountNumber': AccountNumber,
        'InstitutionNumber': InstitutionNumber,
        'TransitNumber': TransitNumber
    };

    getTypeName() => "PaymentIntentPaymentMethodDataAcssDebitOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataAffirmOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataAffirmOptions();
    PaymentIntentPaymentMethodDataAffirmOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataAffirmOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataAfterpayClearpayOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataAfterpayClearpayOptions();
    PaymentIntentPaymentMethodDataAfterpayClearpayOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataAfterpayClearpayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataAlipayOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataAlipayOptions();
    PaymentIntentPaymentMethodDataAlipayOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataAlipayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataAmazonPayOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataAmazonPayOptions();
    PaymentIntentPaymentMethodDataAmazonPayOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataAmazonPayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataAuBecsDebitOptions implements INestedOptions, IConvertible
{
    String? AccountNumber;
    String? BsbNumber;

    PaymentIntentPaymentMethodDataAuBecsDebitOptions({this.AccountNumber,this.BsbNumber});
    PaymentIntentPaymentMethodDataAuBecsDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AccountNumber = json['AccountNumber'];
        BsbNumber = json['BsbNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AccountNumber': AccountNumber,
        'BsbNumber': BsbNumber
    };

    getTypeName() => "PaymentIntentPaymentMethodDataAuBecsDebitOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataBacsDebitOptions implements INestedOptions, IConvertible
{
    String? AccountNumber;
    String? SortCode;

    PaymentIntentPaymentMethodDataBacsDebitOptions({this.AccountNumber,this.SortCode});
    PaymentIntentPaymentMethodDataBacsDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AccountNumber = json['AccountNumber'];
        SortCode = json['SortCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AccountNumber': AccountNumber,
        'SortCode': SortCode
    };

    getTypeName() => "PaymentIntentPaymentMethodDataBacsDebitOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataBancontactOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataBancontactOptions();
    PaymentIntentPaymentMethodDataBancontactOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataBancontactOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataBillingDetailsOptions implements INestedOptions, IConvertible
{
    AddressOptions? Address;
    String? Email;
    String? Name;
    String? Phone;

    PaymentIntentPaymentMethodDataBillingDetailsOptions({this.Address,this.Email,this.Name,this.Phone});
    PaymentIntentPaymentMethodDataBillingDetailsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Address = JsonConverters.fromJson(json['Address'],'AddressOptions',context!);
        Email = json['Email'];
        Name = json['Name'];
        Phone = json['Phone'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Address': JsonConverters.toJson(Address,'AddressOptions',context!),
        'Email': Email,
        'Name': Name,
        'Phone': Phone
    };

    getTypeName() => "PaymentIntentPaymentMethodDataBillingDetailsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataBlikOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataBlikOptions();
    PaymentIntentPaymentMethodDataBlikOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataBlikOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataBoletoOptions implements INestedOptions, IConvertible
{
    String? TaxId;

    PaymentIntentPaymentMethodDataBoletoOptions({this.TaxId});
    PaymentIntentPaymentMethodDataBoletoOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        TaxId = json['TaxId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'TaxId': TaxId
    };

    getTypeName() => "PaymentIntentPaymentMethodDataBoletoOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataCashappOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataCashappOptions();
    PaymentIntentPaymentMethodDataCashappOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataCashappOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataCustomerBalanceOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataCustomerBalanceOptions();
    PaymentIntentPaymentMethodDataCustomerBalanceOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataCustomerBalanceOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataEpsOptions implements INestedOptions, IConvertible
{
    String? Bank;

    PaymentIntentPaymentMethodDataEpsOptions({this.Bank});
    PaymentIntentPaymentMethodDataEpsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Bank = json['Bank'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Bank': Bank
    };

    getTypeName() => "PaymentIntentPaymentMethodDataEpsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataFpxOptions implements INestedOptions, IConvertible
{
    String? AccountHolderType;
    String? Bank;

    PaymentIntentPaymentMethodDataFpxOptions({this.AccountHolderType,this.Bank});
    PaymentIntentPaymentMethodDataFpxOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AccountHolderType = json['AccountHolderType'];
        Bank = json['Bank'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AccountHolderType': AccountHolderType,
        'Bank': Bank
    };

    getTypeName() => "PaymentIntentPaymentMethodDataFpxOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataGiropayOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataGiropayOptions();
    PaymentIntentPaymentMethodDataGiropayOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataGiropayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataGrabpayOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataGrabpayOptions();
    PaymentIntentPaymentMethodDataGrabpayOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataGrabpayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataIdealOptions implements INestedOptions, IConvertible
{
    String? Bank;

    PaymentIntentPaymentMethodDataIdealOptions({this.Bank});
    PaymentIntentPaymentMethodDataIdealOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Bank = json['Bank'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Bank': Bank
    };

    getTypeName() => "PaymentIntentPaymentMethodDataIdealOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataInteracPresentOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataInteracPresentOptions();
    PaymentIntentPaymentMethodDataInteracPresentOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataInteracPresentOptions";
    TypeContext? context = _ctx;
}

class DobOptions implements INestedOptions, IConvertible
{
    int? Day;
    int? Month;
    int? Year;

    DobOptions({this.Day,this.Month,this.Year});
    DobOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Day = json['Day'];
        Month = json['Month'];
        Year = json['Year'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Day': Day,
        'Month': Month,
        'Year': Year
    };

    getTypeName() => "DobOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataKlarnaOptions implements INestedOptions, IConvertible
{
    DobOptions? Dob;

    PaymentIntentPaymentMethodDataKlarnaOptions({this.Dob});
    PaymentIntentPaymentMethodDataKlarnaOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Dob = JsonConverters.fromJson(json['Dob'],'DobOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Dob': JsonConverters.toJson(Dob,'DobOptions',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodDataKlarnaOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataKonbiniOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataKonbiniOptions();
    PaymentIntentPaymentMethodDataKonbiniOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataKonbiniOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataLinkOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataLinkOptions();
    PaymentIntentPaymentMethodDataLinkOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataLinkOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataMobilepayOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataMobilepayOptions();
    PaymentIntentPaymentMethodDataMobilepayOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataMobilepayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataMultibancoOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataMultibancoOptions();
    PaymentIntentPaymentMethodDataMultibancoOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataMultibancoOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataOxxoOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataOxxoOptions();
    PaymentIntentPaymentMethodDataOxxoOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataOxxoOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataP24Options implements INestedOptions, IConvertible
{
    String? Bank;

    PaymentIntentPaymentMethodDataP24Options({this.Bank});
    PaymentIntentPaymentMethodDataP24Options.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Bank = json['Bank'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Bank': Bank
    };

    getTypeName() => "PaymentIntentPaymentMethodDataP24Options";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataPaynowOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataPaynowOptions();
    PaymentIntentPaymentMethodDataPaynowOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataPaynowOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataPaypalOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataPaypalOptions();
    PaymentIntentPaymentMethodDataPaypalOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataPaypalOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataPixOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataPixOptions();
    PaymentIntentPaymentMethodDataPixOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataPixOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataPromptpayOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataPromptpayOptions();
    PaymentIntentPaymentMethodDataPromptpayOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataPromptpayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataRadarOptionsOptions implements INestedOptions, IConvertible
{
    String? Session;

    PaymentIntentPaymentMethodDataRadarOptionsOptions({this.Session});
    PaymentIntentPaymentMethodDataRadarOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Session = json['Session'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Session': Session
    };

    getTypeName() => "PaymentIntentPaymentMethodDataRadarOptionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataRevolutPayOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataRevolutPayOptions();
    PaymentIntentPaymentMethodDataRevolutPayOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataRevolutPayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataSepaDebitOptions implements INestedOptions, IConvertible
{
    String? Iban;

    PaymentIntentPaymentMethodDataSepaDebitOptions({this.Iban});
    PaymentIntentPaymentMethodDataSepaDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Iban = json['Iban'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Iban': Iban
    };

    getTypeName() => "PaymentIntentPaymentMethodDataSepaDebitOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataSofortOptions implements INestedOptions, IConvertible
{
    String? Country;

    PaymentIntentPaymentMethodDataSofortOptions({this.Country});
    PaymentIntentPaymentMethodDataSofortOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Country = json['Country'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Country': Country
    };

    getTypeName() => "PaymentIntentPaymentMethodDataSofortOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataSwishOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataSwishOptions();
    PaymentIntentPaymentMethodDataSwishOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataSwishOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataTwintOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataTwintOptions();
    PaymentIntentPaymentMethodDataTwintOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataTwintOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataUsBankAccountOptions implements INestedOptions, IConvertible
{
    String? AccountHolderType;
    String? AccountNumber;
    String? AccountType;
    String? FinancialConnectionsAccount;
    String? RoutingNumber;

    PaymentIntentPaymentMethodDataUsBankAccountOptions({this.AccountHolderType,this.AccountNumber,this.AccountType,this.FinancialConnectionsAccount,this.RoutingNumber});
    PaymentIntentPaymentMethodDataUsBankAccountOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AccountHolderType = json['AccountHolderType'];
        AccountNumber = json['AccountNumber'];
        AccountType = json['AccountType'];
        FinancialConnectionsAccount = json['FinancialConnectionsAccount'];
        RoutingNumber = json['RoutingNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AccountHolderType': AccountHolderType,
        'AccountNumber': AccountNumber,
        'AccountType': AccountType,
        'FinancialConnectionsAccount': FinancialConnectionsAccount,
        'RoutingNumber': RoutingNumber
    };

    getTypeName() => "PaymentIntentPaymentMethodDataUsBankAccountOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataWechatPayOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataWechatPayOptions();
    PaymentIntentPaymentMethodDataWechatPayOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataWechatPayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataZipOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodDataZipOptions();
    PaymentIntentPaymentMethodDataZipOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodDataZipOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    PaymentIntentPaymentMethodDataAcssDebitOptions? AcssDebit;
    PaymentIntentPaymentMethodDataAffirmOptions? Affirm;
    PaymentIntentPaymentMethodDataAfterpayClearpayOptions? AfterpayClearpay;
    PaymentIntentPaymentMethodDataAlipayOptions? Alipay;
    String? AllowRedisplay;
    PaymentIntentPaymentMethodDataAmazonPayOptions? AmazonPay;
    PaymentIntentPaymentMethodDataAuBecsDebitOptions? AuBecsDebit;
    PaymentIntentPaymentMethodDataBacsDebitOptions? BacsDebit;
    PaymentIntentPaymentMethodDataBancontactOptions? Bancontact;
    PaymentIntentPaymentMethodDataBillingDetailsOptions? BillingDetails;
    PaymentIntentPaymentMethodDataBlikOptions? Blik;
    PaymentIntentPaymentMethodDataBoletoOptions? Boleto;
    PaymentIntentPaymentMethodDataCashappOptions? Cashapp;
    PaymentIntentPaymentMethodDataCustomerBalanceOptions? CustomerBalance;
    PaymentIntentPaymentMethodDataEpsOptions? Eps;
    PaymentIntentPaymentMethodDataFpxOptions? Fpx;
    PaymentIntentPaymentMethodDataGiropayOptions? Giropay;
    PaymentIntentPaymentMethodDataGrabpayOptions? Grabpay;
    PaymentIntentPaymentMethodDataIdealOptions? Ideal;
    PaymentIntentPaymentMethodDataInteracPresentOptions? InteracPresent;
    PaymentIntentPaymentMethodDataKlarnaOptions? Klarna;
    PaymentIntentPaymentMethodDataKonbiniOptions? Konbini;
    PaymentIntentPaymentMethodDataLinkOptions? Link;
    Map<String,String?>? Metadata;
    PaymentIntentPaymentMethodDataMobilepayOptions? Mobilepay;
    PaymentIntentPaymentMethodDataMultibancoOptions? Multibanco;
    PaymentIntentPaymentMethodDataOxxoOptions? Oxxo;
    PaymentIntentPaymentMethodDataP24Options? P24;
    PaymentIntentPaymentMethodDataPaynowOptions? Paynow;
    PaymentIntentPaymentMethodDataPaypalOptions? Paypal;
    PaymentIntentPaymentMethodDataPixOptions? Pix;
    PaymentIntentPaymentMethodDataPromptpayOptions? Promptpay;
    PaymentIntentPaymentMethodDataRadarOptionsOptions? RadarOptions;
    PaymentIntentPaymentMethodDataRevolutPayOptions? RevolutPay;
    PaymentIntentPaymentMethodDataSepaDebitOptions? SepaDebit;
    PaymentIntentPaymentMethodDataSofortOptions? Sofort;
    PaymentIntentPaymentMethodDataSwishOptions? Swish;
    PaymentIntentPaymentMethodDataTwintOptions? Twint;
    String? Type;
    PaymentIntentPaymentMethodDataUsBankAccountOptions? UsBankAccount;
    PaymentIntentPaymentMethodDataWechatPayOptions? WechatPay;
    PaymentIntentPaymentMethodDataZipOptions? Zip;

    PaymentIntentPaymentMethodDataOptions({this.AcssDebit,this.Affirm,this.AfterpayClearpay,this.Alipay,this.AllowRedisplay,this.AmazonPay,this.AuBecsDebit,this.BacsDebit,this.Bancontact,this.BillingDetails,this.Blik,this.Boleto,this.Cashapp,this.CustomerBalance,this.Eps,this.Fpx,this.Giropay,this.Grabpay,this.Ideal,this.InteracPresent,this.Klarna,this.Konbini,this.Link,this.Metadata,this.Mobilepay,this.Multibanco,this.Oxxo,this.P24,this.Paynow,this.Paypal,this.Pix,this.Promptpay,this.RadarOptions,this.RevolutPay,this.SepaDebit,this.Sofort,this.Swish,this.Twint,this.Type,this.UsBankAccount,this.WechatPay,this.Zip});
    PaymentIntentPaymentMethodDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AcssDebit = JsonConverters.fromJson(json['AcssDebit'],'PaymentIntentPaymentMethodDataAcssDebitOptions',context!);
        Affirm = JsonConverters.fromJson(json['Affirm'],'PaymentIntentPaymentMethodDataAffirmOptions',context!);
        AfterpayClearpay = JsonConverters.fromJson(json['AfterpayClearpay'],'PaymentIntentPaymentMethodDataAfterpayClearpayOptions',context!);
        Alipay = JsonConverters.fromJson(json['Alipay'],'PaymentIntentPaymentMethodDataAlipayOptions',context!);
        AllowRedisplay = json['AllowRedisplay'];
        AmazonPay = JsonConverters.fromJson(json['AmazonPay'],'PaymentIntentPaymentMethodDataAmazonPayOptions',context!);
        AuBecsDebit = JsonConverters.fromJson(json['AuBecsDebit'],'PaymentIntentPaymentMethodDataAuBecsDebitOptions',context!);
        BacsDebit = JsonConverters.fromJson(json['BacsDebit'],'PaymentIntentPaymentMethodDataBacsDebitOptions',context!);
        Bancontact = JsonConverters.fromJson(json['Bancontact'],'PaymentIntentPaymentMethodDataBancontactOptions',context!);
        BillingDetails = JsonConverters.fromJson(json['BillingDetails'],'PaymentIntentPaymentMethodDataBillingDetailsOptions',context!);
        Blik = JsonConverters.fromJson(json['Blik'],'PaymentIntentPaymentMethodDataBlikOptions',context!);
        Boleto = JsonConverters.fromJson(json['Boleto'],'PaymentIntentPaymentMethodDataBoletoOptions',context!);
        Cashapp = JsonConverters.fromJson(json['Cashapp'],'PaymentIntentPaymentMethodDataCashappOptions',context!);
        CustomerBalance = JsonConverters.fromJson(json['CustomerBalance'],'PaymentIntentPaymentMethodDataCustomerBalanceOptions',context!);
        Eps = JsonConverters.fromJson(json['Eps'],'PaymentIntentPaymentMethodDataEpsOptions',context!);
        Fpx = JsonConverters.fromJson(json['Fpx'],'PaymentIntentPaymentMethodDataFpxOptions',context!);
        Giropay = JsonConverters.fromJson(json['Giropay'],'PaymentIntentPaymentMethodDataGiropayOptions',context!);
        Grabpay = JsonConverters.fromJson(json['Grabpay'],'PaymentIntentPaymentMethodDataGrabpayOptions',context!);
        Ideal = JsonConverters.fromJson(json['Ideal'],'PaymentIntentPaymentMethodDataIdealOptions',context!);
        InteracPresent = JsonConverters.fromJson(json['InteracPresent'],'PaymentIntentPaymentMethodDataInteracPresentOptions',context!);
        Klarna = JsonConverters.fromJson(json['Klarna'],'PaymentIntentPaymentMethodDataKlarnaOptions',context!);
        Konbini = JsonConverters.fromJson(json['Konbini'],'PaymentIntentPaymentMethodDataKonbiniOptions',context!);
        Link = JsonConverters.fromJson(json['Link'],'PaymentIntentPaymentMethodDataLinkOptions',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Mobilepay = JsonConverters.fromJson(json['Mobilepay'],'PaymentIntentPaymentMethodDataMobilepayOptions',context!);
        Multibanco = JsonConverters.fromJson(json['Multibanco'],'PaymentIntentPaymentMethodDataMultibancoOptions',context!);
        Oxxo = JsonConverters.fromJson(json['Oxxo'],'PaymentIntentPaymentMethodDataOxxoOptions',context!);
        P24 = JsonConverters.fromJson(json['P24'],'PaymentIntentPaymentMethodDataP24Options',context!);
        Paynow = JsonConverters.fromJson(json['Paynow'],'PaymentIntentPaymentMethodDataPaynowOptions',context!);
        Paypal = JsonConverters.fromJson(json['Paypal'],'PaymentIntentPaymentMethodDataPaypalOptions',context!);
        Pix = JsonConverters.fromJson(json['Pix'],'PaymentIntentPaymentMethodDataPixOptions',context!);
        Promptpay = JsonConverters.fromJson(json['Promptpay'],'PaymentIntentPaymentMethodDataPromptpayOptions',context!);
        RadarOptions = JsonConverters.fromJson(json['RadarOptions'],'PaymentIntentPaymentMethodDataRadarOptionsOptions',context!);
        RevolutPay = JsonConverters.fromJson(json['RevolutPay'],'PaymentIntentPaymentMethodDataRevolutPayOptions',context!);
        SepaDebit = JsonConverters.fromJson(json['SepaDebit'],'PaymentIntentPaymentMethodDataSepaDebitOptions',context!);
        Sofort = JsonConverters.fromJson(json['Sofort'],'PaymentIntentPaymentMethodDataSofortOptions',context!);
        Swish = JsonConverters.fromJson(json['Swish'],'PaymentIntentPaymentMethodDataSwishOptions',context!);
        Twint = JsonConverters.fromJson(json['Twint'],'PaymentIntentPaymentMethodDataTwintOptions',context!);
        Type = json['Type'];
        UsBankAccount = JsonConverters.fromJson(json['UsBankAccount'],'PaymentIntentPaymentMethodDataUsBankAccountOptions',context!);
        WechatPay = JsonConverters.fromJson(json['WechatPay'],'PaymentIntentPaymentMethodDataWechatPayOptions',context!);
        Zip = JsonConverters.fromJson(json['Zip'],'PaymentIntentPaymentMethodDataZipOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AcssDebit': JsonConverters.toJson(AcssDebit,'PaymentIntentPaymentMethodDataAcssDebitOptions',context!),
        'Affirm': JsonConverters.toJson(Affirm,'PaymentIntentPaymentMethodDataAffirmOptions',context!),
        'AfterpayClearpay': JsonConverters.toJson(AfterpayClearpay,'PaymentIntentPaymentMethodDataAfterpayClearpayOptions',context!),
        'Alipay': JsonConverters.toJson(Alipay,'PaymentIntentPaymentMethodDataAlipayOptions',context!),
        'AllowRedisplay': AllowRedisplay,
        'AmazonPay': JsonConverters.toJson(AmazonPay,'PaymentIntentPaymentMethodDataAmazonPayOptions',context!),
        'AuBecsDebit': JsonConverters.toJson(AuBecsDebit,'PaymentIntentPaymentMethodDataAuBecsDebitOptions',context!),
        'BacsDebit': JsonConverters.toJson(BacsDebit,'PaymentIntentPaymentMethodDataBacsDebitOptions',context!),
        'Bancontact': JsonConverters.toJson(Bancontact,'PaymentIntentPaymentMethodDataBancontactOptions',context!),
        'BillingDetails': JsonConverters.toJson(BillingDetails,'PaymentIntentPaymentMethodDataBillingDetailsOptions',context!),
        'Blik': JsonConverters.toJson(Blik,'PaymentIntentPaymentMethodDataBlikOptions',context!),
        'Boleto': JsonConverters.toJson(Boleto,'PaymentIntentPaymentMethodDataBoletoOptions',context!),
        'Cashapp': JsonConverters.toJson(Cashapp,'PaymentIntentPaymentMethodDataCashappOptions',context!),
        'CustomerBalance': JsonConverters.toJson(CustomerBalance,'PaymentIntentPaymentMethodDataCustomerBalanceOptions',context!),
        'Eps': JsonConverters.toJson(Eps,'PaymentIntentPaymentMethodDataEpsOptions',context!),
        'Fpx': JsonConverters.toJson(Fpx,'PaymentIntentPaymentMethodDataFpxOptions',context!),
        'Giropay': JsonConverters.toJson(Giropay,'PaymentIntentPaymentMethodDataGiropayOptions',context!),
        'Grabpay': JsonConverters.toJson(Grabpay,'PaymentIntentPaymentMethodDataGrabpayOptions',context!),
        'Ideal': JsonConverters.toJson(Ideal,'PaymentIntentPaymentMethodDataIdealOptions',context!),
        'InteracPresent': JsonConverters.toJson(InteracPresent,'PaymentIntentPaymentMethodDataInteracPresentOptions',context!),
        'Klarna': JsonConverters.toJson(Klarna,'PaymentIntentPaymentMethodDataKlarnaOptions',context!),
        'Konbini': JsonConverters.toJson(Konbini,'PaymentIntentPaymentMethodDataKonbiniOptions',context!),
        'Link': JsonConverters.toJson(Link,'PaymentIntentPaymentMethodDataLinkOptions',context!),
        'Metadata': Metadata,
        'Mobilepay': JsonConverters.toJson(Mobilepay,'PaymentIntentPaymentMethodDataMobilepayOptions',context!),
        'Multibanco': JsonConverters.toJson(Multibanco,'PaymentIntentPaymentMethodDataMultibancoOptions',context!),
        'Oxxo': JsonConverters.toJson(Oxxo,'PaymentIntentPaymentMethodDataOxxoOptions',context!),
        'P24': JsonConverters.toJson(P24,'PaymentIntentPaymentMethodDataP24Options',context!),
        'Paynow': JsonConverters.toJson(Paynow,'PaymentIntentPaymentMethodDataPaynowOptions',context!),
        'Paypal': JsonConverters.toJson(Paypal,'PaymentIntentPaymentMethodDataPaypalOptions',context!),
        'Pix': JsonConverters.toJson(Pix,'PaymentIntentPaymentMethodDataPixOptions',context!),
        'Promptpay': JsonConverters.toJson(Promptpay,'PaymentIntentPaymentMethodDataPromptpayOptions',context!),
        'RadarOptions': JsonConverters.toJson(RadarOptions,'PaymentIntentPaymentMethodDataRadarOptionsOptions',context!),
        'RevolutPay': JsonConverters.toJson(RevolutPay,'PaymentIntentPaymentMethodDataRevolutPayOptions',context!),
        'SepaDebit': JsonConverters.toJson(SepaDebit,'PaymentIntentPaymentMethodDataSepaDebitOptions',context!),
        'Sofort': JsonConverters.toJson(Sofort,'PaymentIntentPaymentMethodDataSofortOptions',context!),
        'Swish': JsonConverters.toJson(Swish,'PaymentIntentPaymentMethodDataSwishOptions',context!),
        'Twint': JsonConverters.toJson(Twint,'PaymentIntentPaymentMethodDataTwintOptions',context!),
        'Type': Type,
        'UsBankAccount': JsonConverters.toJson(UsBankAccount,'PaymentIntentPaymentMethodDataUsBankAccountOptions',context!),
        'WechatPay': JsonConverters.toJson(WechatPay,'PaymentIntentPaymentMethodDataWechatPayOptions',context!),
        'Zip': JsonConverters.toJson(Zip,'PaymentIntentPaymentMethodDataZipOptions',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodDataOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions implements INestedOptions, IConvertible
{
    String? CustomMandateUrl;
    String? IntervalDescription;
    String? PaymentSchedule;
    String? TransactionType;

    PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions({this.CustomMandateUrl,this.IntervalDescription,this.PaymentSchedule,this.TransactionType});
    PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CustomMandateUrl = json['CustomMandateUrl'];
        IntervalDescription = json['IntervalDescription'];
        PaymentSchedule = json['PaymentSchedule'];
        TransactionType = json['TransactionType'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CustomMandateUrl': CustomMandateUrl,
        'IntervalDescription': IntervalDescription,
        'PaymentSchedule': PaymentSchedule,
        'TransactionType': TransactionType
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAcssDebitOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions? MandateOptions;
    String? SetupFutureUsage;
    String? VerificationMethod;

    PaymentIntentPaymentMethodOptionsAcssDebitOptions({this.MandateOptions,this.SetupFutureUsage,this.VerificationMethod});
    PaymentIntentPaymentMethodOptionsAcssDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsAcssDebitOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAffirmOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAffirmOptions({this.CaptureMethod,this.PreferredLocale,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAffirmOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsAffirmOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? Reference;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions({this.CaptureMethod,this.Reference,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        Reference = json['Reference'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'Reference': Reference,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAlipayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAlipayOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAlipayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsAlipayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAmazonPayOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAmazonPayOptions({this.CaptureMethod,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAmazonPayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsAmazonPayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAuBecsDebitOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAuBecsDebitOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAuBecsDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsAuBecsDebitOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions();
    PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBacsDebitOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions? MandateOptions;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsBacsDebitOptions({this.MandateOptions,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsBacsDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions',context!),
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsBacsDebitOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBancontactOptions implements INestedOptions, IConvertible
{
    String? PreferredLanguage;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsBancontactOptions({this.PreferredLanguage,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsBancontactOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PreferredLanguage = json['PreferredLanguage'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PreferredLanguage': PreferredLanguage,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsBancontactOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBlikOptions implements INestedOptions, IConvertible
{
    String? Code;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsBlikOptions({this.Code,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsBlikOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Code = json['Code'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Code': Code,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsBlikOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBoletoOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsBoletoOptions({this.ExpiresAfterDays,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsBoletoOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsBoletoOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions implements INestedOptions, IConvertible
{
    int? Count;
    String? Interval;
    String? Type;

    PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions({this.Count,this.Interval,this.Type});
    PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Count = json['Count'];
        Interval = json['Interval'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Count': Count,
        'Interval': Interval,
        'Type': Type
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardInstallmentsOptions implements INestedOptions, IConvertible
{
    bool? Enabled;
    PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions? Plan;

    PaymentIntentPaymentMethodOptionsCardInstallmentsOptions({this.Enabled,this.Plan});
    PaymentIntentPaymentMethodOptionsCardInstallmentsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Enabled = json['Enabled'];
        Plan = JsonConverters.fromJson(json['Plan'],'PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled,
        'Plan': JsonConverters.toJson(Plan,'PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardInstallmentsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions implements INestedOptions, IConvertible
{
    int? Amount;
    String? AmountType;
    String? Description;
    DateTime? EndDate;
    String? Interval;
    int? IntervalCount;
    String? Reference;
    DateTime? StartDate;
    List<String>? SupportedTypes;

    PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions({this.Amount,this.AmountType,this.Description,this.EndDate,this.Interval,this.IntervalCount,this.Reference,this.StartDate,this.SupportedTypes});
    PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Amount = json['Amount'];
        AmountType = json['AmountType'];
        Description = json['Description'];
        EndDate = JsonConverters.fromJson(json['EndDate'],'DateTime',context!);
        Interval = json['Interval'];
        IntervalCount = json['IntervalCount'];
        Reference = json['Reference'];
        StartDate = JsonConverters.fromJson(json['StartDate'],'DateTime',context!);
        SupportedTypes = JsonConverters.fromJson(json['SupportedTypes'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Amount': Amount,
        'AmountType': AmountType,
        'Description': Description,
        'EndDate': JsonConverters.toJson(EndDate,'DateTime',context!),
        'Interval': Interval,
        'IntervalCount': IntervalCount,
        'Reference': Reference,
        'StartDate': JsonConverters.toJson(StartDate,'DateTime',context!),
        'SupportedTypes': JsonConverters.toJson(SupportedTypes,'List<String>',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions implements INestedOptions, IConvertible
{
    String? CbAvalgo;
    String? CbExemption;
    int? CbScore;

    PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions({this.CbAvalgo,this.CbExemption,this.CbScore});
    PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CbAvalgo = json['CbAvalgo'];
        CbExemption = json['CbExemption'];
        CbScore = json['CbScore'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CbAvalgo': CbAvalgo,
        'CbExemption': CbExemption,
        'CbScore': CbScore
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions? CartesBancaires;

    PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions({this.CartesBancaires});
    PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CartesBancaires = JsonConverters.fromJson(json['CartesBancaires'],'PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CartesBancaires': JsonConverters.toJson(CartesBancaires,'PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions implements INestedOptions, IConvertible
{
    String? AresTransStatus;
    String? Cryptogram;
    String? ElectronicCommerceIndicator;
    String? ExemptionIndicator;
    PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions? NetworkOptions;
    String? RequestorChallengeIndicator;
    String? TransactionId;
    String? Version;

    PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions({this.AresTransStatus,this.Cryptogram,this.ElectronicCommerceIndicator,this.ExemptionIndicator,this.NetworkOptions,this.RequestorChallengeIndicator,this.TransactionId,this.Version});
    PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AresTransStatus = json['AresTransStatus'];
        Cryptogram = json['Cryptogram'];
        ElectronicCommerceIndicator = json['ElectronicCommerceIndicator'];
        ExemptionIndicator = json['ExemptionIndicator'];
        NetworkOptions = JsonConverters.fromJson(json['NetworkOptions'],'PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions',context!);
        RequestorChallengeIndicator = json['RequestorChallengeIndicator'];
        TransactionId = json['TransactionId'];
        Version = json['Version'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AresTransStatus': AresTransStatus,
        'Cryptogram': Cryptogram,
        'ElectronicCommerceIndicator': ElectronicCommerceIndicator,
        'ExemptionIndicator': ExemptionIndicator,
        'NetworkOptions': JsonConverters.toJson(NetworkOptions,'PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions',context!),
        'RequestorChallengeIndicator': RequestorChallengeIndicator,
        'TransactionId': TransactionId,
        'Version': Version
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? CvcToken;
    PaymentIntentPaymentMethodOptionsCardInstallmentsOptions? Installments;
    PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions? MandateOptions;
    bool? Moto;
    String? Network;
    String? RequestExtendedAuthorization;
    String? RequestIncrementalAuthorization;
    String? RequestMulticapture;
    String? RequestOvercapture;
    String? RequestThreeDSecure;
    bool? RequireCvcRecollection;
    String? SetupFutureUsage;
    String? StatementDescriptorSuffixKana;
    String? StatementDescriptorSuffixKanji;
    PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions? ThreeDSecure;

    PaymentIntentPaymentMethodOptionsCardOptions({this.CaptureMethod,this.CvcToken,this.Installments,this.MandateOptions,this.Moto,this.Network,this.RequestExtendedAuthorization,this.RequestIncrementalAuthorization,this.RequestMulticapture,this.RequestOvercapture,this.RequestThreeDSecure,this.RequireCvcRecollection,this.SetupFutureUsage,this.StatementDescriptorSuffixKana,this.StatementDescriptorSuffixKanji,this.ThreeDSecure});
    PaymentIntentPaymentMethodOptionsCardOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        CvcToken = json['CvcToken'];
        Installments = JsonConverters.fromJson(json['Installments'],'PaymentIntentPaymentMethodOptionsCardInstallmentsOptions',context!);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions',context!);
        Moto = json['Moto'];
        Network = json['Network'];
        RequestExtendedAuthorization = json['RequestExtendedAuthorization'];
        RequestIncrementalAuthorization = json['RequestIncrementalAuthorization'];
        RequestMulticapture = json['RequestMulticapture'];
        RequestOvercapture = json['RequestOvercapture'];
        RequestThreeDSecure = json['RequestThreeDSecure'];
        RequireCvcRecollection = json['RequireCvcRecollection'];
        SetupFutureUsage = json['SetupFutureUsage'];
        StatementDescriptorSuffixKana = json['StatementDescriptorSuffixKana'];
        StatementDescriptorSuffixKanji = json['StatementDescriptorSuffixKanji'];
        ThreeDSecure = JsonConverters.fromJson(json['ThreeDSecure'],'PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'CvcToken': CvcToken,
        'Installments': JsonConverters.toJson(Installments,'PaymentIntentPaymentMethodOptionsCardInstallmentsOptions',context!),
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions',context!),
        'Moto': Moto,
        'Network': Network,
        'RequestExtendedAuthorization': RequestExtendedAuthorization,
        'RequestIncrementalAuthorization': RequestIncrementalAuthorization,
        'RequestMulticapture': RequestMulticapture,
        'RequestOvercapture': RequestOvercapture,
        'RequestThreeDSecure': RequestThreeDSecure,
        'RequireCvcRecollection': RequireCvcRecollection,
        'SetupFutureUsage': SetupFutureUsage,
        'StatementDescriptorSuffixKana': StatementDescriptorSuffixKana,
        'StatementDescriptorSuffixKanji': StatementDescriptorSuffixKanji,
        'ThreeDSecure': JsonConverters.toJson(ThreeDSecure,'PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions implements INestedOptions, IConvertible
{
    String? RequestedPriority;

    PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions({this.RequestedPriority});
    PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RequestedPriority = json['RequestedPriority'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RequestedPriority': RequestedPriority
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardPresentOptions implements INestedOptions, IConvertible
{
    bool? RequestExtendedAuthorization;
    bool? RequestIncrementalAuthorizationSupport;
    PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions? Routing;

    PaymentIntentPaymentMethodOptionsCardPresentOptions({this.RequestExtendedAuthorization,this.RequestIncrementalAuthorizationSupport,this.Routing});
    PaymentIntentPaymentMethodOptionsCardPresentOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RequestExtendedAuthorization = json['RequestExtendedAuthorization'];
        RequestIncrementalAuthorizationSupport = json['RequestIncrementalAuthorizationSupport'];
        Routing = JsonConverters.fromJson(json['Routing'],'PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RequestExtendedAuthorization': RequestExtendedAuthorization,
        'RequestIncrementalAuthorizationSupport': RequestIncrementalAuthorizationSupport,
        'Routing': JsonConverters.toJson(Routing,'PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardPresentOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCashappOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsCashappOptions({this.CaptureMethod,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsCashappOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCashappOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions implements INestedOptions, IConvertible
{
    String? Country;

    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions({this.Country});
    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Country = json['Country'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Country': Country
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions? EuBankTransfer;
    List<String>? RequestedAddressTypes;
    String? Type;

    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions({this.EuBankTransfer,this.RequestedAddressTypes,this.Type});
    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        EuBankTransfer = JsonConverters.fromJson(json['EuBankTransfer'],'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions',context!);
        RequestedAddressTypes = JsonConverters.fromJson(json['RequestedAddressTypes'],'List<String>',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'EuBankTransfer': JsonConverters.toJson(EuBankTransfer,'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions',context!),
        'RequestedAddressTypes': JsonConverters.toJson(RequestedAddressTypes,'List<String>',context!),
        'Type': Type
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCustomerBalanceOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions? BankTransfer;
    String? FundingType;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsCustomerBalanceOptions({this.BankTransfer,this.FundingType,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsCustomerBalanceOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        BankTransfer = JsonConverters.fromJson(json['BankTransfer'],'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions',context!);
        FundingType = json['FundingType'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'BankTransfer': JsonConverters.toJson(BankTransfer,'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions',context!),
        'FundingType': FundingType,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsCustomerBalanceOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsEpsOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsEpsOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsEpsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsEpsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsFpxOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsFpxOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsFpxOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsFpxOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsGiropayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsGiropayOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsGiropayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsGiropayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsGrabpayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsGrabpayOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsGrabpayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsGrabpayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsIdealOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsIdealOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsIdealOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsIdealOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsInteracPresentOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsInteracPresentOptions();
    PaymentIntentPaymentMethodOptionsInteracPresentOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodOptionsInteracPresentOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsKlarnaOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsKlarnaOptions({this.CaptureMethod,this.PreferredLocale,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsKlarnaOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsKlarnaOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsKonbiniOptions implements INestedOptions, IConvertible
{
    String? ConfirmationNumber;
    int? ExpiresAfterDays;
    DateTime? ExpiresAt;
    String? ProductDescription;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsKonbiniOptions({this.ConfirmationNumber,this.ExpiresAfterDays,this.ExpiresAt,this.ProductDescription,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsKonbiniOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ConfirmationNumber = json['ConfirmationNumber'];
        ExpiresAfterDays = json['ExpiresAfterDays'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        ProductDescription = json['ProductDescription'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ConfirmationNumber': ConfirmationNumber,
        'ExpiresAfterDays': ExpiresAfterDays,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'ProductDescription': ProductDescription,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsKonbiniOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsLinkOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? PersistentToken;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsLinkOptions({this.CaptureMethod,this.PersistentToken,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsLinkOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        PersistentToken = json['PersistentToken'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'PersistentToken': PersistentToken,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsLinkOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsMobilepayOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsMobilepayOptions({this.CaptureMethod,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsMobilepayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsMobilepayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsMultibancoOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsMultibancoOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsMultibancoOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsMultibancoOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsOxxoOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsOxxoOptions({this.ExpiresAfterDays,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsOxxoOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsOxxoOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsP24Options implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;
    bool? TosShownAndAccepted;

    PaymentIntentPaymentMethodOptionsP24Options({this.SetupFutureUsage,this.TosShownAndAccepted});
    PaymentIntentPaymentMethodOptionsP24Options.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        TosShownAndAccepted = json['TosShownAndAccepted'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage,
        'TosShownAndAccepted': TosShownAndAccepted
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsP24Options";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsPaynowOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsPaynowOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsPaynowOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsPaynowOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsPaypalOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? Reference;
    String? RiskCorrelationId;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsPaypalOptions({this.CaptureMethod,this.PreferredLocale,this.Reference,this.RiskCorrelationId,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsPaypalOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        Reference = json['Reference'];
        RiskCorrelationId = json['RiskCorrelationId'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'Reference': Reference,
        'RiskCorrelationId': RiskCorrelationId,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsPaypalOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsPixOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterSeconds;
    DateTime? ExpiresAt;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsPixOptions({this.ExpiresAfterSeconds,this.ExpiresAt,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsPixOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ExpiresAfterSeconds = json['ExpiresAfterSeconds'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ExpiresAfterSeconds': ExpiresAfterSeconds,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsPixOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsPromptpayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsPromptpayOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsPromptpayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsPromptpayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsRevolutPayOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsRevolutPayOptions({this.CaptureMethod,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsRevolutPayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsRevolutPayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions();
    PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsSepaDebitOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions? MandateOptions;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsSepaDebitOptions({this.MandateOptions,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsSepaDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions',context!),
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsSepaDebitOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsSofortOptions implements INestedOptions, IConvertible
{
    String? PreferredLanguage;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsSofortOptions({this.PreferredLanguage,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsSofortOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PreferredLanguage = json['PreferredLanguage'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PreferredLanguage': PreferredLanguage,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsSofortOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsSwishOptions implements INestedOptions, IConvertible
{
    String? Reference;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsSwishOptions({this.Reference,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsSwishOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Reference = json['Reference'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Reference': Reference,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsSwishOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsTwintOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsTwintOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsTwintOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsTwintOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions implements INestedOptions, IConvertible
{
    List<String>? AccountSubcategories;

    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions({this.AccountSubcategories});
    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AccountSubcategories = JsonConverters.fromJson(json['AccountSubcategories'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AccountSubcategories': JsonConverters.toJson(AccountSubcategories,'List<String>',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions? Filters;
    List<String>? Permissions;
    List<String>? Prefetch;
    String? ReturnUrl;

    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions({this.Filters,this.Permissions,this.Prefetch,this.ReturnUrl});
    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Filters = JsonConverters.fromJson(json['Filters'],'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions',context!);
        Permissions = JsonConverters.fromJson(json['Permissions'],'List<String>',context!);
        Prefetch = JsonConverters.fromJson(json['Prefetch'],'List<String>',context!);
        ReturnUrl = json['ReturnUrl'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Filters': JsonConverters.toJson(Filters,'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions',context!),
        'Permissions': JsonConverters.toJson(Permissions,'List<String>',context!),
        'Prefetch': JsonConverters.toJson(Prefetch,'List<String>',context!),
        'ReturnUrl': ReturnUrl
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions implements INestedOptions, IConvertible
{
    String? CollectionMethod;

    PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions({this.CollectionMethod});
    PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CollectionMethod = json['CollectionMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CollectionMethod': CollectionMethod
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions implements INestedOptions, IConvertible
{
    List<String>? Requested;

    PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions({this.Requested});
    PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Requested = JsonConverters.fromJson(json['Requested'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Requested': JsonConverters.toJson(Requested,'List<String>',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsUsBankAccountOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions? FinancialConnections;
    PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions? MandateOptions;
    PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions? Networks;
    String? PreferredSettlementSpeed;
    String? SetupFutureUsage;
    String? VerificationMethod;

    PaymentIntentPaymentMethodOptionsUsBankAccountOptions({this.FinancialConnections,this.MandateOptions,this.Networks,this.PreferredSettlementSpeed,this.SetupFutureUsage,this.VerificationMethod});
    PaymentIntentPaymentMethodOptionsUsBankAccountOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        FinancialConnections = JsonConverters.fromJson(json['FinancialConnections'],'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions',context!);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions',context!);
        Networks = JsonConverters.fromJson(json['Networks'],'PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions',context!);
        PreferredSettlementSpeed = json['PreferredSettlementSpeed'];
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'FinancialConnections': JsonConverters.toJson(FinancialConnections,'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions',context!),
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions',context!),
        'Networks': JsonConverters.toJson(Networks,'PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions',context!),
        'PreferredSettlementSpeed': PreferredSettlementSpeed,
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsUsBankAccountOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsWechatPayOptions implements INestedOptions, IConvertible
{
    String? AppId;
    String? Client;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsWechatPayOptions({this.AppId,this.Client,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsWechatPayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AppId = json['AppId'];
        Client = json['Client'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AppId': AppId,
        'Client': Client,
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsWechatPayOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsZipOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsZipOptions({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsZipOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SetupFutureUsage': SetupFutureUsage
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsZipOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsOptions implements INestedOptions, IConvertible
{
    PaymentIntentPaymentMethodOptionsAcssDebitOptions? AcssDebit;
    PaymentIntentPaymentMethodOptionsAffirmOptions? Affirm;
    PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions? AfterpayClearpay;
    PaymentIntentPaymentMethodOptionsAlipayOptions? Alipay;
    PaymentIntentPaymentMethodOptionsAmazonPayOptions? AmazonPay;
    PaymentIntentPaymentMethodOptionsAuBecsDebitOptions? AuBecsDebit;
    PaymentIntentPaymentMethodOptionsBacsDebitOptions? BacsDebit;
    PaymentIntentPaymentMethodOptionsBancontactOptions? Bancontact;
    PaymentIntentPaymentMethodOptionsBlikOptions? Blik;
    PaymentIntentPaymentMethodOptionsBoletoOptions? Boleto;
    PaymentIntentPaymentMethodOptionsCardOptions? Card;
    PaymentIntentPaymentMethodOptionsCardPresentOptions? CardPresent;
    PaymentIntentPaymentMethodOptionsCashappOptions? Cashapp;
    PaymentIntentPaymentMethodOptionsCustomerBalanceOptions? CustomerBalance;
    PaymentIntentPaymentMethodOptionsEpsOptions? Eps;
    PaymentIntentPaymentMethodOptionsFpxOptions? Fpx;
    PaymentIntentPaymentMethodOptionsGiropayOptions? Giropay;
    PaymentIntentPaymentMethodOptionsGrabpayOptions? Grabpay;
    PaymentIntentPaymentMethodOptionsIdealOptions? Ideal;
    PaymentIntentPaymentMethodOptionsInteracPresentOptions? InteracPresent;
    PaymentIntentPaymentMethodOptionsKlarnaOptions? Klarna;
    PaymentIntentPaymentMethodOptionsKonbiniOptions? Konbini;
    PaymentIntentPaymentMethodOptionsLinkOptions? Link;
    PaymentIntentPaymentMethodOptionsMobilepayOptions? Mobilepay;
    PaymentIntentPaymentMethodOptionsMultibancoOptions? Multibanco;
    PaymentIntentPaymentMethodOptionsOxxoOptions? Oxxo;
    PaymentIntentPaymentMethodOptionsP24Options? P24;
    PaymentIntentPaymentMethodOptionsPaynowOptions? Paynow;
    PaymentIntentPaymentMethodOptionsPaypalOptions? Paypal;
    PaymentIntentPaymentMethodOptionsPixOptions? Pix;
    PaymentIntentPaymentMethodOptionsPromptpayOptions? Promptpay;
    PaymentIntentPaymentMethodOptionsRevolutPayOptions? RevolutPay;
    PaymentIntentPaymentMethodOptionsSepaDebitOptions? SepaDebit;
    PaymentIntentPaymentMethodOptionsSofortOptions? Sofort;
    PaymentIntentPaymentMethodOptionsSwishOptions? Swish;
    PaymentIntentPaymentMethodOptionsTwintOptions? Twint;
    PaymentIntentPaymentMethodOptionsUsBankAccountOptions? UsBankAccount;
    PaymentIntentPaymentMethodOptionsWechatPayOptions? WechatPay;
    PaymentIntentPaymentMethodOptionsZipOptions? Zip;

    PaymentIntentPaymentMethodOptionsOptions({this.AcssDebit,this.Affirm,this.AfterpayClearpay,this.Alipay,this.AmazonPay,this.AuBecsDebit,this.BacsDebit,this.Bancontact,this.Blik,this.Boleto,this.Card,this.CardPresent,this.Cashapp,this.CustomerBalance,this.Eps,this.Fpx,this.Giropay,this.Grabpay,this.Ideal,this.InteracPresent,this.Klarna,this.Konbini,this.Link,this.Mobilepay,this.Multibanco,this.Oxxo,this.P24,this.Paynow,this.Paypal,this.Pix,this.Promptpay,this.RevolutPay,this.SepaDebit,this.Sofort,this.Swish,this.Twint,this.UsBankAccount,this.WechatPay,this.Zip});
    PaymentIntentPaymentMethodOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AcssDebit = JsonConverters.fromJson(json['AcssDebit'],'PaymentIntentPaymentMethodOptionsAcssDebitOptions',context!);
        Affirm = JsonConverters.fromJson(json['Affirm'],'PaymentIntentPaymentMethodOptionsAffirmOptions',context!);
        AfterpayClearpay = JsonConverters.fromJson(json['AfterpayClearpay'],'PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions',context!);
        Alipay = JsonConverters.fromJson(json['Alipay'],'PaymentIntentPaymentMethodOptionsAlipayOptions',context!);
        AmazonPay = JsonConverters.fromJson(json['AmazonPay'],'PaymentIntentPaymentMethodOptionsAmazonPayOptions',context!);
        AuBecsDebit = JsonConverters.fromJson(json['AuBecsDebit'],'PaymentIntentPaymentMethodOptionsAuBecsDebitOptions',context!);
        BacsDebit = JsonConverters.fromJson(json['BacsDebit'],'PaymentIntentPaymentMethodOptionsBacsDebitOptions',context!);
        Bancontact = JsonConverters.fromJson(json['Bancontact'],'PaymentIntentPaymentMethodOptionsBancontactOptions',context!);
        Blik = JsonConverters.fromJson(json['Blik'],'PaymentIntentPaymentMethodOptionsBlikOptions',context!);
        Boleto = JsonConverters.fromJson(json['Boleto'],'PaymentIntentPaymentMethodOptionsBoletoOptions',context!);
        Card = JsonConverters.fromJson(json['Card'],'PaymentIntentPaymentMethodOptionsCardOptions',context!);
        CardPresent = JsonConverters.fromJson(json['CardPresent'],'PaymentIntentPaymentMethodOptionsCardPresentOptions',context!);
        Cashapp = JsonConverters.fromJson(json['Cashapp'],'PaymentIntentPaymentMethodOptionsCashappOptions',context!);
        CustomerBalance = JsonConverters.fromJson(json['CustomerBalance'],'PaymentIntentPaymentMethodOptionsCustomerBalanceOptions',context!);
        Eps = JsonConverters.fromJson(json['Eps'],'PaymentIntentPaymentMethodOptionsEpsOptions',context!);
        Fpx = JsonConverters.fromJson(json['Fpx'],'PaymentIntentPaymentMethodOptionsFpxOptions',context!);
        Giropay = JsonConverters.fromJson(json['Giropay'],'PaymentIntentPaymentMethodOptionsGiropayOptions',context!);
        Grabpay = JsonConverters.fromJson(json['Grabpay'],'PaymentIntentPaymentMethodOptionsGrabpayOptions',context!);
        Ideal = JsonConverters.fromJson(json['Ideal'],'PaymentIntentPaymentMethodOptionsIdealOptions',context!);
        InteracPresent = JsonConverters.fromJson(json['InteracPresent'],'PaymentIntentPaymentMethodOptionsInteracPresentOptions',context!);
        Klarna = JsonConverters.fromJson(json['Klarna'],'PaymentIntentPaymentMethodOptionsKlarnaOptions',context!);
        Konbini = JsonConverters.fromJson(json['Konbini'],'PaymentIntentPaymentMethodOptionsKonbiniOptions',context!);
        Link = JsonConverters.fromJson(json['Link'],'PaymentIntentPaymentMethodOptionsLinkOptions',context!);
        Mobilepay = JsonConverters.fromJson(json['Mobilepay'],'PaymentIntentPaymentMethodOptionsMobilepayOptions',context!);
        Multibanco = JsonConverters.fromJson(json['Multibanco'],'PaymentIntentPaymentMethodOptionsMultibancoOptions',context!);
        Oxxo = JsonConverters.fromJson(json['Oxxo'],'PaymentIntentPaymentMethodOptionsOxxoOptions',context!);
        P24 = JsonConverters.fromJson(json['P24'],'PaymentIntentPaymentMethodOptionsP24Options',context!);
        Paynow = JsonConverters.fromJson(json['Paynow'],'PaymentIntentPaymentMethodOptionsPaynowOptions',context!);
        Paypal = JsonConverters.fromJson(json['Paypal'],'PaymentIntentPaymentMethodOptionsPaypalOptions',context!);
        Pix = JsonConverters.fromJson(json['Pix'],'PaymentIntentPaymentMethodOptionsPixOptions',context!);
        Promptpay = JsonConverters.fromJson(json['Promptpay'],'PaymentIntentPaymentMethodOptionsPromptpayOptions',context!);
        RevolutPay = JsonConverters.fromJson(json['RevolutPay'],'PaymentIntentPaymentMethodOptionsRevolutPayOptions',context!);
        SepaDebit = JsonConverters.fromJson(json['SepaDebit'],'PaymentIntentPaymentMethodOptionsSepaDebitOptions',context!);
        Sofort = JsonConverters.fromJson(json['Sofort'],'PaymentIntentPaymentMethodOptionsSofortOptions',context!);
        Swish = JsonConverters.fromJson(json['Swish'],'PaymentIntentPaymentMethodOptionsSwishOptions',context!);
        Twint = JsonConverters.fromJson(json['Twint'],'PaymentIntentPaymentMethodOptionsTwintOptions',context!);
        UsBankAccount = JsonConverters.fromJson(json['UsBankAccount'],'PaymentIntentPaymentMethodOptionsUsBankAccountOptions',context!);
        WechatPay = JsonConverters.fromJson(json['WechatPay'],'PaymentIntentPaymentMethodOptionsWechatPayOptions',context!);
        Zip = JsonConverters.fromJson(json['Zip'],'PaymentIntentPaymentMethodOptionsZipOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AcssDebit': JsonConverters.toJson(AcssDebit,'PaymentIntentPaymentMethodOptionsAcssDebitOptions',context!),
        'Affirm': JsonConverters.toJson(Affirm,'PaymentIntentPaymentMethodOptionsAffirmOptions',context!),
        'AfterpayClearpay': JsonConverters.toJson(AfterpayClearpay,'PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions',context!),
        'Alipay': JsonConverters.toJson(Alipay,'PaymentIntentPaymentMethodOptionsAlipayOptions',context!),
        'AmazonPay': JsonConverters.toJson(AmazonPay,'PaymentIntentPaymentMethodOptionsAmazonPayOptions',context!),
        'AuBecsDebit': JsonConverters.toJson(AuBecsDebit,'PaymentIntentPaymentMethodOptionsAuBecsDebitOptions',context!),
        'BacsDebit': JsonConverters.toJson(BacsDebit,'PaymentIntentPaymentMethodOptionsBacsDebitOptions',context!),
        'Bancontact': JsonConverters.toJson(Bancontact,'PaymentIntentPaymentMethodOptionsBancontactOptions',context!),
        'Blik': JsonConverters.toJson(Blik,'PaymentIntentPaymentMethodOptionsBlikOptions',context!),
        'Boleto': JsonConverters.toJson(Boleto,'PaymentIntentPaymentMethodOptionsBoletoOptions',context!),
        'Card': JsonConverters.toJson(Card,'PaymentIntentPaymentMethodOptionsCardOptions',context!),
        'CardPresent': JsonConverters.toJson(CardPresent,'PaymentIntentPaymentMethodOptionsCardPresentOptions',context!),
        'Cashapp': JsonConverters.toJson(Cashapp,'PaymentIntentPaymentMethodOptionsCashappOptions',context!),
        'CustomerBalance': JsonConverters.toJson(CustomerBalance,'PaymentIntentPaymentMethodOptionsCustomerBalanceOptions',context!),
        'Eps': JsonConverters.toJson(Eps,'PaymentIntentPaymentMethodOptionsEpsOptions',context!),
        'Fpx': JsonConverters.toJson(Fpx,'PaymentIntentPaymentMethodOptionsFpxOptions',context!),
        'Giropay': JsonConverters.toJson(Giropay,'PaymentIntentPaymentMethodOptionsGiropayOptions',context!),
        'Grabpay': JsonConverters.toJson(Grabpay,'PaymentIntentPaymentMethodOptionsGrabpayOptions',context!),
        'Ideal': JsonConverters.toJson(Ideal,'PaymentIntentPaymentMethodOptionsIdealOptions',context!),
        'InteracPresent': JsonConverters.toJson(InteracPresent,'PaymentIntentPaymentMethodOptionsInteracPresentOptions',context!),
        'Klarna': JsonConverters.toJson(Klarna,'PaymentIntentPaymentMethodOptionsKlarnaOptions',context!),
        'Konbini': JsonConverters.toJson(Konbini,'PaymentIntentPaymentMethodOptionsKonbiniOptions',context!),
        'Link': JsonConverters.toJson(Link,'PaymentIntentPaymentMethodOptionsLinkOptions',context!),
        'Mobilepay': JsonConverters.toJson(Mobilepay,'PaymentIntentPaymentMethodOptionsMobilepayOptions',context!),
        'Multibanco': JsonConverters.toJson(Multibanco,'PaymentIntentPaymentMethodOptionsMultibancoOptions',context!),
        'Oxxo': JsonConverters.toJson(Oxxo,'PaymentIntentPaymentMethodOptionsOxxoOptions',context!),
        'P24': JsonConverters.toJson(P24,'PaymentIntentPaymentMethodOptionsP24Options',context!),
        'Paynow': JsonConverters.toJson(Paynow,'PaymentIntentPaymentMethodOptionsPaynowOptions',context!),
        'Paypal': JsonConverters.toJson(Paypal,'PaymentIntentPaymentMethodOptionsPaypalOptions',context!),
        'Pix': JsonConverters.toJson(Pix,'PaymentIntentPaymentMethodOptionsPixOptions',context!),
        'Promptpay': JsonConverters.toJson(Promptpay,'PaymentIntentPaymentMethodOptionsPromptpayOptions',context!),
        'RevolutPay': JsonConverters.toJson(RevolutPay,'PaymentIntentPaymentMethodOptionsRevolutPayOptions',context!),
        'SepaDebit': JsonConverters.toJson(SepaDebit,'PaymentIntentPaymentMethodOptionsSepaDebitOptions',context!),
        'Sofort': JsonConverters.toJson(Sofort,'PaymentIntentPaymentMethodOptionsSofortOptions',context!),
        'Swish': JsonConverters.toJson(Swish,'PaymentIntentPaymentMethodOptionsSwishOptions',context!),
        'Twint': JsonConverters.toJson(Twint,'PaymentIntentPaymentMethodOptionsTwintOptions',context!),
        'UsBankAccount': JsonConverters.toJson(UsBankAccount,'PaymentIntentPaymentMethodOptionsUsBankAccountOptions',context!),
        'WechatPay': JsonConverters.toJson(WechatPay,'PaymentIntentPaymentMethodOptionsWechatPayOptions',context!),
        'Zip': JsonConverters.toJson(Zip,'PaymentIntentPaymentMethodOptionsZipOptions',context!)
    };

    getTypeName() => "PaymentIntentPaymentMethodOptionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentRadarOptionsOptions implements INestedOptions, IConvertible
{
    String? Session;

    PaymentIntentRadarOptionsOptions({this.Session});
    PaymentIntentRadarOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Session = json['Session'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Session': Session
    };

    getTypeName() => "PaymentIntentRadarOptionsOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentTransferDataOptions implements INestedOptions, IConvertible
{
    int? Amount;
    String? Destination;

    PaymentIntentTransferDataOptions({this.Amount,this.Destination});
    PaymentIntentTransferDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Amount = json['Amount'];
        Destination = json['Destination'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Amount': Amount,
        'Destination': Destination
    };

    getTypeName() => "PaymentIntentTransferDataOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentCreateOptions extends BaseOptions implements IHasMetadata, IConvertible
{
    int? Amount;
    int? ApplicationFeeAmount;
    PaymentIntentAutomaticPaymentMethodsOptions? AutomaticPaymentMethods;
    String? CaptureMethod;
    bool? Confirm;
    String? ConfirmationMethod;
    String? ConfirmationToken;
    String? Currency;
    String? Customer;
    String? Description;
    bool? ErrorOnRequiresAction;
    String? Mandate;
    PaymentIntentMandateDataOptions? MandateData;
    Map<String,String?>? Metadata;
    bool? OffSession;
    String? OnBehalfOf;
    String? PaymentMethod;
    String? PaymentMethodConfiguration;
    PaymentIntentPaymentMethodDataOptions? PaymentMethodData;
    PaymentIntentPaymentMethodOptionsOptions? PaymentMethodOptions;
    List<String>? PaymentMethodTypes;
    PaymentIntentRadarOptionsOptions? RadarOptions;
    String? ReceiptEmail;
    String? ReturnUrl;
    String? SetupFutureUsage;
    ChargeShippingOptions? Shipping;
    String? StatementDescriptor;
    String? StatementDescriptorSuffix;
    PaymentIntentTransferDataOptions? TransferData;
    String? TransferGroup;
    bool? UseStripeSdk;

    PaymentIntentCreateOptions({this.Amount,this.ApplicationFeeAmount,this.AutomaticPaymentMethods,this.CaptureMethod,this.Confirm,this.ConfirmationMethod,this.ConfirmationToken,this.Currency,this.Customer,this.Description,this.ErrorOnRequiresAction,this.Mandate,this.MandateData,this.Metadata,this.OffSession,this.OnBehalfOf,this.PaymentMethod,this.PaymentMethodConfiguration,this.PaymentMethodData,this.PaymentMethodOptions,this.PaymentMethodTypes,this.RadarOptions,this.ReceiptEmail,this.ReturnUrl,this.SetupFutureUsage,this.Shipping,this.StatementDescriptor,this.StatementDescriptorSuffix,this.TransferData,this.TransferGroup,this.UseStripeSdk});
    PaymentIntentCreateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        ApplicationFeeAmount = json['ApplicationFeeAmount'];
        AutomaticPaymentMethods = JsonConverters.fromJson(json['AutomaticPaymentMethods'],'PaymentIntentAutomaticPaymentMethodsOptions',context!);
        CaptureMethod = json['CaptureMethod'];
        Confirm = json['Confirm'];
        ConfirmationMethod = json['ConfirmationMethod'];
        ConfirmationToken = json['ConfirmationToken'];
        Currency = json['Currency'];
        Customer = json['Customer'];
        Description = json['Description'];
        ErrorOnRequiresAction = json['ErrorOnRequiresAction'];
        Mandate = json['Mandate'];
        MandateData = JsonConverters.fromJson(json['MandateData'],'PaymentIntentMandateDataOptions',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        OffSession = json['OffSession'];
        OnBehalfOf = json['OnBehalfOf'];
        PaymentMethod = json['PaymentMethod'];
        PaymentMethodConfiguration = json['PaymentMethodConfiguration'];
        PaymentMethodData = JsonConverters.fromJson(json['PaymentMethodData'],'PaymentIntentPaymentMethodDataOptions',context!);
        PaymentMethodOptions = JsonConverters.fromJson(json['PaymentMethodOptions'],'PaymentIntentPaymentMethodOptionsOptions',context!);
        PaymentMethodTypes = JsonConverters.fromJson(json['PaymentMethodTypes'],'List<String>',context!);
        RadarOptions = JsonConverters.fromJson(json['RadarOptions'],'PaymentIntentRadarOptionsOptions',context!);
        ReceiptEmail = json['ReceiptEmail'];
        ReturnUrl = json['ReturnUrl'];
        SetupFutureUsage = json['SetupFutureUsage'];
        Shipping = JsonConverters.fromJson(json['Shipping'],'ChargeShippingOptions',context!);
        StatementDescriptor = json['StatementDescriptor'];
        StatementDescriptorSuffix = json['StatementDescriptorSuffix'];
        TransferData = JsonConverters.fromJson(json['TransferData'],'PaymentIntentTransferDataOptions',context!);
        TransferGroup = json['TransferGroup'];
        UseStripeSdk = json['UseStripeSdk'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'ApplicationFeeAmount': ApplicationFeeAmount,
        'AutomaticPaymentMethods': JsonConverters.toJson(AutomaticPaymentMethods,'PaymentIntentAutomaticPaymentMethodsOptions',context!),
        'CaptureMethod': CaptureMethod,
        'Confirm': Confirm,
        'ConfirmationMethod': ConfirmationMethod,
        'ConfirmationToken': ConfirmationToken,
        'Currency': Currency,
        'Customer': Customer,
        'Description': Description,
        'ErrorOnRequiresAction': ErrorOnRequiresAction,
        'Mandate': Mandate,
        'MandateData': JsonConverters.toJson(MandateData,'PaymentIntentMandateDataOptions',context!),
        'Metadata': Metadata,
        'OffSession': OffSession,
        'OnBehalfOf': OnBehalfOf,
        'PaymentMethod': PaymentMethod,
        'PaymentMethodConfiguration': PaymentMethodConfiguration,
        'PaymentMethodData': JsonConverters.toJson(PaymentMethodData,'PaymentIntentPaymentMethodDataOptions',context!),
        'PaymentMethodOptions': JsonConverters.toJson(PaymentMethodOptions,'PaymentIntentPaymentMethodOptionsOptions',context!),
        'PaymentMethodTypes': JsonConverters.toJson(PaymentMethodTypes,'List<String>',context!),
        'RadarOptions': JsonConverters.toJson(RadarOptions,'PaymentIntentRadarOptionsOptions',context!),
        'ReceiptEmail': ReceiptEmail,
        'ReturnUrl': ReturnUrl,
        'SetupFutureUsage': SetupFutureUsage,
        'Shipping': JsonConverters.toJson(Shipping,'ChargeShippingOptions',context!),
        'StatementDescriptor': StatementDescriptor,
        'StatementDescriptorSuffix': StatementDescriptorSuffix,
        'TransferData': JsonConverters.toJson(TransferData,'PaymentIntentTransferDataOptions',context!),
        'TransferGroup': TransferGroup,
        'UseStripeSdk': UseStripeSdk
    });

    getTypeName() => "PaymentIntentCreateOptions";
    TypeContext? context = _ctx;
}

class CustomerCashBalanceSettingsOptions implements INestedOptions, IConvertible
{
    String? ReconciliationMode;

    CustomerCashBalanceSettingsOptions({this.ReconciliationMode});
    CustomerCashBalanceSettingsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ReconciliationMode = json['ReconciliationMode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ReconciliationMode': ReconciliationMode
    };

    getTypeName() => "CustomerCashBalanceSettingsOptions";
    TypeContext? context = _ctx;
}

class CustomerCashBalanceOptions implements INestedOptions, IConvertible
{
    CustomerCashBalanceSettingsOptions? Settings;

    CustomerCashBalanceOptions({this.Settings});
    CustomerCashBalanceOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Settings = JsonConverters.fromJson(json['Settings'],'CustomerCashBalanceSettingsOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Settings': JsonConverters.toJson(Settings,'CustomerCashBalanceSettingsOptions',context!)
    };

    getTypeName() => "CustomerCashBalanceOptions";
    TypeContext? context = _ctx;
}

class CustomerInvoiceSettingsCustomFieldOptions implements INestedOptions, IConvertible
{
    String? Name;
    String? Value;

    CustomerInvoiceSettingsCustomFieldOptions({this.Name,this.Value});
    CustomerInvoiceSettingsCustomFieldOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Name = json['Name'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Name': Name,
        'Value': Value
    };

    getTypeName() => "CustomerInvoiceSettingsCustomFieldOptions";
    TypeContext? context = _ctx;
}

class CustomerInvoiceSettingsRenderingOptionsOptions implements INestedOptions, IConvertible
{
    String? AmountTaxDisplay;
    String? Template;

    CustomerInvoiceSettingsRenderingOptionsOptions({this.AmountTaxDisplay,this.Template});
    CustomerInvoiceSettingsRenderingOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AmountTaxDisplay = json['AmountTaxDisplay'];
        Template = json['Template'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AmountTaxDisplay': AmountTaxDisplay,
        'Template': Template
    };

    getTypeName() => "CustomerInvoiceSettingsRenderingOptionsOptions";
    TypeContext? context = _ctx;
}

class CustomerInvoiceSettingsOptions implements INestedOptions, IConvertible
{
    List<CustomerInvoiceSettingsCustomFieldOptions>? CustomFields;
    String? DefaultPaymentMethod;
    String? Footer;
    CustomerInvoiceSettingsRenderingOptionsOptions? RenderingOptions;

    CustomerInvoiceSettingsOptions({this.CustomFields,this.DefaultPaymentMethod,this.Footer,this.RenderingOptions});
    CustomerInvoiceSettingsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<CustomerInvoiceSettingsCustomFieldOptions>',context!);
        DefaultPaymentMethod = json['DefaultPaymentMethod'];
        Footer = json['Footer'];
        RenderingOptions = JsonConverters.fromJson(json['RenderingOptions'],'CustomerInvoiceSettingsRenderingOptionsOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CustomFields': JsonConverters.toJson(CustomFields,'List<CustomerInvoiceSettingsCustomFieldOptions>',context!),
        'DefaultPaymentMethod': DefaultPaymentMethod,
        'Footer': Footer,
        'RenderingOptions': JsonConverters.toJson(RenderingOptions,'CustomerInvoiceSettingsRenderingOptionsOptions',context!)
    };

    getTypeName() => "CustomerInvoiceSettingsOptions";
    TypeContext? context = _ctx;
}

class ShippingOptions implements INestedOptions, IConvertible
{
    AddressOptions? Address;
    String? Name;
    String? Phone;

    ShippingOptions({this.Address,this.Name,this.Phone});
    ShippingOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Address = JsonConverters.fromJson(json['Address'],'AddressOptions',context!);
        Name = json['Name'];
        Phone = json['Phone'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Address': JsonConverters.toJson(Address,'AddressOptions',context!),
        'Name': Name,
        'Phone': Phone
    };

    getTypeName() => "ShippingOptions";
    TypeContext? context = _ctx;
}

class CardCreateNestedOptions implements INestedOptions, IHasMetadata, IHasObject, IConvertible
{
    String? AddressCity;
    String? AddressCountry;
    String? AddressLine1;
    String? AddressLine2;
    String? AddressState;
    String? AddressZip;
    String? Currency;
    String? Cvc;
    int? ExpMonth;
    int? ExpYear;
    Map<String,String?>? Metadata;
    String? Name;
    String? Number;
    String? Object;

    CardCreateNestedOptions({this.AddressCity,this.AddressCountry,this.AddressLine1,this.AddressLine2,this.AddressState,this.AddressZip,this.Currency,this.Cvc,this.ExpMonth,this.ExpYear,this.Metadata,this.Name,this.Number,this.Object});
    CardCreateNestedOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AddressCity = json['AddressCity'];
        AddressCountry = json['AddressCountry'];
        AddressLine1 = json['AddressLine1'];
        AddressLine2 = json['AddressLine2'];
        AddressState = json['AddressState'];
        AddressZip = json['AddressZip'];
        Currency = json['Currency'];
        Cvc = json['Cvc'];
        ExpMonth = json['ExpMonth'];
        ExpYear = json['ExpYear'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Name = json['Name'];
        Number = json['Number'];
        Object = json['Object'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AddressCity': AddressCity,
        'AddressCountry': AddressCountry,
        'AddressLine1': AddressLine1,
        'AddressLine2': AddressLine2,
        'AddressState': AddressState,
        'AddressZip': AddressZip,
        'Currency': Currency,
        'Cvc': Cvc,
        'ExpMonth': ExpMonth,
        'ExpYear': ExpYear,
        'Metadata': Metadata,
        'Name': Name,
        'Number': Number,
        'Object': Object
    };

    getTypeName() => "CardCreateNestedOptions";
    TypeContext? context = _ctx;
}

class CustomerTaxOptions implements INestedOptions, IConvertible
{
    String? IpAddress;
    String? ValidateLocation;

    CustomerTaxOptions({this.IpAddress,this.ValidateLocation});
    CustomerTaxOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        IpAddress = json['IpAddress'];
        ValidateLocation = json['ValidateLocation'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'IpAddress': IpAddress,
        'ValidateLocation': ValidateLocation
    };

    getTypeName() => "CustomerTaxOptions";
    TypeContext? context = _ctx;
}

class CustomerTaxIdDataOptions implements INestedOptions, IConvertible
{
    String? Type;
    String? Value;

    CustomerTaxIdDataOptions({this.Type,this.Value});
    CustomerTaxIdDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Type = json['Type'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Type': Type,
        'Value': Value
    };

    getTypeName() => "CustomerTaxIdDataOptions";
    TypeContext? context = _ctx;
}

class CustomerCreateOptions extends BaseOptions implements IHasMetadata, IConvertible
{
    AddressOptions? Address;
    int? Balance;
    CustomerCashBalanceOptions? CashBalance;
    String? Coupon;
    String? Description;
    String? Email;
    String? InvoicePrefix;
    CustomerInvoiceSettingsOptions? InvoiceSettings;
    Map<String,String?>? Metadata;
    String? Name;
    int? NextInvoiceSequence;
    String? PaymentMethod;
    String? Phone;
    String? Plan;
    List<String>? PreferredLocales;
    String? PromotionCode;
    ShippingOptions? Shipping;
    AnyOf2<String,CardCreateNestedOptions>? Source;
    CustomerTaxOptions? Tax;
    String? TaxExempt;
    List<CustomerTaxIdDataOptions>? TaxIdData;
    String? TestClock;
    bool? Validate;

    CustomerCreateOptions({this.Address,this.Balance,this.CashBalance,this.Coupon,this.Description,this.Email,this.InvoicePrefix,this.InvoiceSettings,this.Metadata,this.Name,this.NextInvoiceSequence,this.PaymentMethod,this.Phone,this.Plan,this.PreferredLocales,this.PromotionCode,this.Shipping,this.Source,this.Tax,this.TaxExempt,this.TaxIdData,this.TestClock,this.Validate});
    CustomerCreateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Address = JsonConverters.fromJson(json['Address'],'AddressOptions',context!);
        Balance = json['Balance'];
        CashBalance = JsonConverters.fromJson(json['CashBalance'],'CustomerCashBalanceOptions',context!);
        Coupon = json['Coupon'];
        Description = json['Description'];
        Email = json['Email'];
        InvoicePrefix = json['InvoicePrefix'];
        InvoiceSettings = JsonConverters.fromJson(json['InvoiceSettings'],'CustomerInvoiceSettingsOptions',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Name = json['Name'];
        NextInvoiceSequence = json['NextInvoiceSequence'];
        PaymentMethod = json['PaymentMethod'];
        Phone = json['Phone'];
        Plan = json['Plan'];
        PreferredLocales = JsonConverters.fromJson(json['PreferredLocales'],'List<String>',context!);
        PromotionCode = json['PromotionCode'];
        Shipping = JsonConverters.fromJson(json['Shipping'],'ShippingOptions',context!);
        Source = JsonConverters.fromJson(json['Source'],'AnyOf2<String,CardCreateNestedOptions>',context!);
        Tax = JsonConverters.fromJson(json['Tax'],'CustomerTaxOptions',context!);
        TaxExempt = json['TaxExempt'];
        TaxIdData = JsonConverters.fromJson(json['TaxIdData'],'List<CustomerTaxIdDataOptions>',context!);
        TestClock = json['TestClock'];
        Validate = json['Validate'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Address': JsonConverters.toJson(Address,'AddressOptions',context!),
        'Balance': Balance,
        'CashBalance': JsonConverters.toJson(CashBalance,'CustomerCashBalanceOptions',context!),
        'Coupon': Coupon,
        'Description': Description,
        'Email': Email,
        'InvoicePrefix': InvoicePrefix,
        'InvoiceSettings': JsonConverters.toJson(InvoiceSettings,'CustomerInvoiceSettingsOptions',context!),
        'Metadata': Metadata,
        'Name': Name,
        'NextInvoiceSequence': NextInvoiceSequence,
        'PaymentMethod': PaymentMethod,
        'Phone': Phone,
        'Plan': Plan,
        'PreferredLocales': JsonConverters.toJson(PreferredLocales,'List<String>',context!),
        'PromotionCode': PromotionCode,
        'Shipping': JsonConverters.toJson(Shipping,'ShippingOptions',context!),
        'Source': JsonConverters.toJson(Source,'AnyOf2<String,CardCreateNestedOptions>',context!),
        'Tax': JsonConverters.toJson(Tax,'CustomerTaxOptions',context!),
        'TaxExempt': TaxExempt,
        'TaxIdData': JsonConverters.toJson(TaxIdData,'List<CustomerTaxIdDataOptions>',context!),
        'TestClock': TestClock,
        'Validate': Validate
    });

    getTypeName() => "CustomerCreateOptions";
    TypeContext? context = _ctx;
}

class StripeCreatePaymentOptions implements IConvertible
{
    SessionCreateOptions? SessionCreateOptions;
    PaymentIntentCreateOptions? PaymentIntentCreateOptions;
    CustomerCreateOptions? CustomerCreateOptions;

    StripeCreatePaymentOptions({this.SessionCreateOptions,this.PaymentIntentCreateOptions,this.CustomerCreateOptions});
    StripeCreatePaymentOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SessionCreateOptions = JsonConverters.fromJson(json['SessionCreateOptions'],'SessionCreateOptions',context!);
        PaymentIntentCreateOptions = JsonConverters.fromJson(json['PaymentIntentCreateOptions'],'PaymentIntentCreateOptions',context!);
        CustomerCreateOptions = JsonConverters.fromJson(json['CustomerCreateOptions'],'CustomerCreateOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SessionCreateOptions': JsonConverters.toJson(SessionCreateOptions,'SessionCreateOptions',context!),
        'PaymentIntentCreateOptions': JsonConverters.toJson(PaymentIntentCreateOptions,'PaymentIntentCreateOptions',context!),
        'CustomerCreateOptions': JsonConverters.toJson(CustomerCreateOptions,'CustomerCreateOptions',context!)
    };

    getTypeName() => "StripeCreatePaymentOptions";
    TypeContext? context = _ctx;
}

class RequestOptions implements IConvertible
{
    String? ApiKey;
    String? IdempotencyKey;
    String? StripeAccount;
    String? StripeContext;

    RequestOptions({this.ApiKey,this.IdempotencyKey,this.StripeAccount,this.StripeContext});
    RequestOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ApiKey = json['ApiKey'];
        IdempotencyKey = json['IdempotencyKey'];
        StripeAccount = json['StripeAccount'];
        StripeContext = json['StripeContext'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ApiKey': ApiKey,
        'IdempotencyKey': IdempotencyKey,
        'StripeAccount': StripeAccount,
        'StripeContext': StripeContext
    };

    getTypeName() => "RequestOptions";
    TypeContext? context = _ctx;
}

class StripeCreateCheckoutQuery implements IConvertible
{
    StripeCreatePaymentOptions? CheckoutData;
    RequestOptions? RequestOptions;

    StripeCreateCheckoutQuery({this.CheckoutData,this.RequestOptions});
    StripeCreateCheckoutQuery.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CheckoutData = JsonConverters.fromJson(json['CheckoutData'],'StripeCreatePaymentOptions',context!);
        RequestOptions = JsonConverters.fromJson(json['RequestOptions'],'RequestOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CheckoutData': JsonConverters.toJson(CheckoutData,'StripeCreatePaymentOptions',context!),
        'RequestOptions': JsonConverters.toJson(RequestOptions,'RequestOptions',context!)
    };

    getTypeName() => "StripeCreateCheckoutQuery";
    TypeContext? context = _ctx;
}

class SessionAfterExpirationRecovery extends StripeEntity1<SessionAfterExpirationRecovery> implements IConvertible
{
    bool? AllowPromotionCodes;
    bool? Enabled;
    DateTime? ExpiresAt;
    String? Url;

    SessionAfterExpirationRecovery({this.AllowPromotionCodes,this.Enabled,this.ExpiresAt,this.Url});
    SessionAfterExpirationRecovery.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AllowPromotionCodes = json['AllowPromotionCodes'];
        Enabled = json['Enabled'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        Url = json['Url'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AllowPromotionCodes': AllowPromotionCodes,
        'Enabled': Enabled,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'Url': Url
    });

    getTypeName() => "SessionAfterExpirationRecovery";
    TypeContext? context = _ctx;
}

class SessionAfterExpiration extends StripeEntity1<SessionAfterExpiration> implements IConvertible
{
    SessionAfterExpirationRecovery? Recovery;

    SessionAfterExpiration({this.Recovery});
    SessionAfterExpiration.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Recovery = JsonConverters.fromJson(json['Recovery'],'SessionAfterExpirationRecovery',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Recovery': JsonConverters.toJson(Recovery,'SessionAfterExpirationRecovery',context!)
    });

    getTypeName() => "SessionAfterExpiration";
    TypeContext? context = _ctx;
}

class SessionAutomaticTaxLiability extends StripeEntity1<SessionAutomaticTaxLiability> implements IConvertible
{
    String? Type;

    SessionAutomaticTaxLiability({this.Type});
    SessionAutomaticTaxLiability.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Type': Type
    });

    getTypeName() => "SessionAutomaticTaxLiability";
    TypeContext? context = _ctx;
}

class SessionAutomaticTax extends StripeEntity1<SessionAutomaticTax> implements IConvertible
{
    bool? Enabled;
    SessionAutomaticTaxLiability? Liability;
    String? Status;

    SessionAutomaticTax({this.Enabled,this.Liability,this.Status});
    SessionAutomaticTax.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Enabled = json['Enabled'];
        Liability = JsonConverters.fromJson(json['Liability'],'SessionAutomaticTaxLiability',context!);
        Status = json['Status'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Enabled': Enabled,
        'Liability': JsonConverters.toJson(Liability,'SessionAutomaticTaxLiability',context!),
        'Status': Status
    });

    getTypeName() => "SessionAutomaticTax";
    TypeContext? context = _ctx;
}

class SessionConsent extends StripeEntity1<SessionConsent> implements IConvertible
{
    String? Promotions;
    String? TermsOfService;

    SessionConsent({this.Promotions,this.TermsOfService});
    SessionConsent.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Promotions = json['Promotions'];
        TermsOfService = json['TermsOfService'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Promotions': Promotions,
        'TermsOfService': TermsOfService
    });

    getTypeName() => "SessionConsent";
    TypeContext? context = _ctx;
}

class SessionConsentCollectionPaymentMethodReuseAgreement extends StripeEntity1<SessionConsentCollectionPaymentMethodReuseAgreement> implements IConvertible
{
    String? Position;

    SessionConsentCollectionPaymentMethodReuseAgreement({this.Position});
    SessionConsentCollectionPaymentMethodReuseAgreement.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Position = json['Position'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Position': Position
    });

    getTypeName() => "SessionConsentCollectionPaymentMethodReuseAgreement";
    TypeContext? context = _ctx;
}

class SessionConsentCollection extends StripeEntity1<SessionConsentCollection> implements IConvertible
{
    SessionConsentCollectionPaymentMethodReuseAgreement? PaymentMethodReuseAgreement;
    String? Promotions;
    String? TermsOfService;

    SessionConsentCollection({this.PaymentMethodReuseAgreement,this.Promotions,this.TermsOfService});
    SessionConsentCollection.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        PaymentMethodReuseAgreement = JsonConverters.fromJson(json['PaymentMethodReuseAgreement'],'SessionConsentCollectionPaymentMethodReuseAgreement',context!);
        Promotions = json['Promotions'];
        TermsOfService = json['TermsOfService'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'PaymentMethodReuseAgreement': JsonConverters.toJson(PaymentMethodReuseAgreement,'SessionConsentCollectionPaymentMethodReuseAgreement',context!),
        'Promotions': Promotions,
        'TermsOfService': TermsOfService
    });

    getTypeName() => "SessionConsentCollection";
    TypeContext? context = _ctx;
}

class SessionCurrencyConversion extends StripeEntity1<SessionCurrencyConversion> implements IConvertible
{
    int? AmountSubtotal;
    int? AmountTotal;
    double? FxRate;
    String? SourceCurrency;

    SessionCurrencyConversion({this.AmountSubtotal,this.AmountTotal,this.FxRate,this.SourceCurrency});
    SessionCurrencyConversion.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountSubtotal = json['AmountSubtotal'];
        AmountTotal = json['AmountTotal'];
        FxRate = JsonConverters.toDouble(json['FxRate']);
        SourceCurrency = json['SourceCurrency'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountSubtotal': AmountSubtotal,
        'AmountTotal': AmountTotal,
        'FxRate': FxRate,
        'SourceCurrency': SourceCurrency
    });

    getTypeName() => "SessionCurrencyConversion";
    TypeContext? context = _ctx;
}

class SessionCustomFieldDropdownOption extends StripeEntity1<SessionCustomFieldDropdownOption> implements IConvertible
{
    String? Label;
    String? Value;

    SessionCustomFieldDropdownOption({this.Label,this.Value});
    SessionCustomFieldDropdownOption.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Label = json['Label'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Label': Label,
        'Value': Value
    });

    getTypeName() => "SessionCustomFieldDropdownOption";
    TypeContext? context = _ctx;
}

class SessionCustomFieldDropdown extends StripeEntity1<SessionCustomFieldDropdown> implements IConvertible
{
    String? DefaultValue;
    List<SessionCustomFieldDropdownOption>? Options;
    String? Value;

    SessionCustomFieldDropdown({this.DefaultValue,this.Options,this.Value});
    SessionCustomFieldDropdown.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DefaultValue = json['DefaultValue'];
        Options = JsonConverters.fromJson(json['Options'],'List<SessionCustomFieldDropdownOption>',context!);
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DefaultValue': DefaultValue,
        'Options': JsonConverters.toJson(Options,'List<SessionCustomFieldDropdownOption>',context!),
        'Value': Value
    });

    getTypeName() => "SessionCustomFieldDropdown";
    TypeContext? context = _ctx;
}

class SessionCustomFieldLabel extends StripeEntity1<SessionCustomFieldLabel> implements IConvertible
{
    String? Custom;
    String? Type;

    SessionCustomFieldLabel({this.Custom,this.Type});
    SessionCustomFieldLabel.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Custom = json['Custom'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Custom': Custom,
        'Type': Type
    });

    getTypeName() => "SessionCustomFieldLabel";
    TypeContext? context = _ctx;
}

class SessionCustomFieldNumeric extends StripeEntity1<SessionCustomFieldNumeric> implements IConvertible
{
    String? DefaultValue;
    int? MaximumLength;
    int? MinimumLength;
    String? Value;

    SessionCustomFieldNumeric({this.DefaultValue,this.MaximumLength,this.MinimumLength,this.Value});
    SessionCustomFieldNumeric.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DefaultValue = json['DefaultValue'];
        MaximumLength = json['MaximumLength'];
        MinimumLength = json['MinimumLength'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DefaultValue': DefaultValue,
        'MaximumLength': MaximumLength,
        'MinimumLength': MinimumLength,
        'Value': Value
    });

    getTypeName() => "SessionCustomFieldNumeric";
    TypeContext? context = _ctx;
}

class SessionCustomFieldText extends StripeEntity1<SessionCustomFieldText> implements IConvertible
{
    String? DefaultValue;
    int? MaximumLength;
    int? MinimumLength;
    String? Value;

    SessionCustomFieldText({this.DefaultValue,this.MaximumLength,this.MinimumLength,this.Value});
    SessionCustomFieldText.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DefaultValue = json['DefaultValue'];
        MaximumLength = json['MaximumLength'];
        MinimumLength = json['MinimumLength'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DefaultValue': DefaultValue,
        'MaximumLength': MaximumLength,
        'MinimumLength': MinimumLength,
        'Value': Value
    });

    getTypeName() => "SessionCustomFieldText";
    TypeContext? context = _ctx;
}

class SessionCustomField extends StripeEntity1<SessionCustomField> implements IConvertible
{
    SessionCustomFieldDropdown? Dropdown;
    String? Key;
    SessionCustomFieldLabel? Label;
    SessionCustomFieldNumeric? Numeric;
    bool? Optional;
    SessionCustomFieldText? Text;
    String? Type;

    SessionCustomField({this.Dropdown,this.Key,this.Label,this.Numeric,this.Optional,this.Text,this.Type});
    SessionCustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Dropdown = JsonConverters.fromJson(json['Dropdown'],'SessionCustomFieldDropdown',context!);
        Key = json['Key'];
        Label = JsonConverters.fromJson(json['Label'],'SessionCustomFieldLabel',context!);
        Numeric = JsonConverters.fromJson(json['Numeric'],'SessionCustomFieldNumeric',context!);
        Optional = json['Optional'];
        Text = JsonConverters.fromJson(json['Text'],'SessionCustomFieldText',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Dropdown': JsonConverters.toJson(Dropdown,'SessionCustomFieldDropdown',context!),
        'Key': Key,
        'Label': JsonConverters.toJson(Label,'SessionCustomFieldLabel',context!),
        'Numeric': JsonConverters.toJson(Numeric,'SessionCustomFieldNumeric',context!),
        'Optional': Optional,
        'Text': JsonConverters.toJson(Text,'SessionCustomFieldText',context!),
        'Type': Type
    });

    getTypeName() => "SessionCustomField";
    TypeContext? context = _ctx;
}

class SessionCustomTextAfterSubmit extends StripeEntity1<SessionCustomTextAfterSubmit> implements IConvertible
{
    String? Message;

    SessionCustomTextAfterSubmit({this.Message});
    SessionCustomTextAfterSubmit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Message = json['Message'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Message': Message
    });

    getTypeName() => "SessionCustomTextAfterSubmit";
    TypeContext? context = _ctx;
}

class SessionCustomTextShippingAddress extends StripeEntity1<SessionCustomTextShippingAddress> implements IConvertible
{
    String? Message;

    SessionCustomTextShippingAddress({this.Message});
    SessionCustomTextShippingAddress.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Message = json['Message'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Message': Message
    });

    getTypeName() => "SessionCustomTextShippingAddress";
    TypeContext? context = _ctx;
}

class SessionCustomTextSubmit extends StripeEntity1<SessionCustomTextSubmit> implements IConvertible
{
    String? Message;

    SessionCustomTextSubmit({this.Message});
    SessionCustomTextSubmit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Message = json['Message'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Message': Message
    });

    getTypeName() => "SessionCustomTextSubmit";
    TypeContext? context = _ctx;
}

class SessionCustomTextTermsOfServiceAcceptance extends StripeEntity1<SessionCustomTextTermsOfServiceAcceptance> implements IConvertible
{
    String? Message;

    SessionCustomTextTermsOfServiceAcceptance({this.Message});
    SessionCustomTextTermsOfServiceAcceptance.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Message = json['Message'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Message': Message
    });

    getTypeName() => "SessionCustomTextTermsOfServiceAcceptance";
    TypeContext? context = _ctx;
}

class SessionCustomText extends StripeEntity1<SessionCustomText> implements IConvertible
{
    SessionCustomTextAfterSubmit? AfterSubmit;
    SessionCustomTextShippingAddress? ShippingAddress;
    SessionCustomTextSubmit? Submit;
    SessionCustomTextTermsOfServiceAcceptance? TermsOfServiceAcceptance;

    SessionCustomText({this.AfterSubmit,this.ShippingAddress,this.Submit,this.TermsOfServiceAcceptance});
    SessionCustomText.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AfterSubmit = JsonConverters.fromJson(json['AfterSubmit'],'SessionCustomTextAfterSubmit',context!);
        ShippingAddress = JsonConverters.fromJson(json['ShippingAddress'],'SessionCustomTextShippingAddress',context!);
        Submit = JsonConverters.fromJson(json['Submit'],'SessionCustomTextSubmit',context!);
        TermsOfServiceAcceptance = JsonConverters.fromJson(json['TermsOfServiceAcceptance'],'SessionCustomTextTermsOfServiceAcceptance',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AfterSubmit': JsonConverters.toJson(AfterSubmit,'SessionCustomTextAfterSubmit',context!),
        'ShippingAddress': JsonConverters.toJson(ShippingAddress,'SessionCustomTextShippingAddress',context!),
        'Submit': JsonConverters.toJson(Submit,'SessionCustomTextSubmit',context!),
        'TermsOfServiceAcceptance': JsonConverters.toJson(TermsOfServiceAcceptance,'SessionCustomTextTermsOfServiceAcceptance',context!)
    });

    getTypeName() => "SessionCustomText";
    TypeContext? context = _ctx;
}

class SessionCustomerDetailsTaxId extends StripeEntity1<SessionCustomerDetailsTaxId> implements IConvertible
{
    String? Type;
    String? Value;

    SessionCustomerDetailsTaxId({this.Type,this.Value});
    SessionCustomerDetailsTaxId.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Type = json['Type'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Type': Type,
        'Value': Value
    });

    getTypeName() => "SessionCustomerDetailsTaxId";
    TypeContext? context = _ctx;
}

class SessionCustomerDetails extends StripeEntity1<SessionCustomerDetails> implements IConvertible
{
    Address? Address;
    String? Email;
    String? Name;
    String? Phone;
    String? TaxExempt;
    List<SessionCustomerDetailsTaxId>? TaxIds;

    SessionCustomerDetails({this.Address,this.Email,this.Name,this.Phone,this.TaxExempt,this.TaxIds});
    SessionCustomerDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        Email = json['Email'];
        Name = json['Name'];
        Phone = json['Phone'];
        TaxExempt = json['TaxExempt'];
        TaxIds = JsonConverters.fromJson(json['TaxIds'],'List<SessionCustomerDetailsTaxId>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'Email': Email,
        'Name': Name,
        'Phone': Phone,
        'TaxExempt': TaxExempt,
        'TaxIds': JsonConverters.toJson(TaxIds,'List<SessionCustomerDetailsTaxId>',context!)
    });

    getTypeName() => "SessionCustomerDetails";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreationInvoiceDataCustomField extends StripeEntity1<SessionInvoiceCreationInvoiceDataCustomField> implements IConvertible
{
    String? Name;
    String? Value;

    SessionInvoiceCreationInvoiceDataCustomField({this.Name,this.Value});
    SessionInvoiceCreationInvoiceDataCustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Value': Value
    });

    getTypeName() => "SessionInvoiceCreationInvoiceDataCustomField";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreationInvoiceDataIssuer extends StripeEntity1<SessionInvoiceCreationInvoiceDataIssuer> implements IConvertible
{
    String? Type;

    SessionInvoiceCreationInvoiceDataIssuer({this.Type});
    SessionInvoiceCreationInvoiceDataIssuer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Type': Type
    });

    getTypeName() => "SessionInvoiceCreationInvoiceDataIssuer";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreationInvoiceDataRenderingOptions extends StripeEntity1<SessionInvoiceCreationInvoiceDataRenderingOptions> implements IConvertible
{
    String? AmountTaxDisplay;

    SessionInvoiceCreationInvoiceDataRenderingOptions({this.AmountTaxDisplay});
    SessionInvoiceCreationInvoiceDataRenderingOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountTaxDisplay = json['AmountTaxDisplay'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountTaxDisplay': AmountTaxDisplay
    });

    getTypeName() => "SessionInvoiceCreationInvoiceDataRenderingOptions";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreationInvoiceData extends StripeEntity1<SessionInvoiceCreationInvoiceData> implements IHasMetadata, IConvertible
{
    List<SessionInvoiceCreationInvoiceDataCustomField>? CustomFields;
    String? Description;
    String? Footer;
    SessionInvoiceCreationInvoiceDataIssuer? Issuer;
    Map<String,String?>? Metadata;
    SessionInvoiceCreationInvoiceDataRenderingOptions? RenderingOptions;

    SessionInvoiceCreationInvoiceData({this.CustomFields,this.Description,this.Footer,this.Issuer,this.Metadata,this.RenderingOptions});
    SessionInvoiceCreationInvoiceData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<SessionInvoiceCreationInvoiceDataCustomField>',context!);
        Description = json['Description'];
        Footer = json['Footer'];
        Issuer = JsonConverters.fromJson(json['Issuer'],'SessionInvoiceCreationInvoiceDataIssuer',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        RenderingOptions = JsonConverters.fromJson(json['RenderingOptions'],'SessionInvoiceCreationInvoiceDataRenderingOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CustomFields': JsonConverters.toJson(CustomFields,'List<SessionInvoiceCreationInvoiceDataCustomField>',context!),
        'Description': Description,
        'Footer': Footer,
        'Issuer': JsonConverters.toJson(Issuer,'SessionInvoiceCreationInvoiceDataIssuer',context!),
        'Metadata': Metadata,
        'RenderingOptions': JsonConverters.toJson(RenderingOptions,'SessionInvoiceCreationInvoiceDataRenderingOptions',context!)
    });

    getTypeName() => "SessionInvoiceCreationInvoiceData";
    TypeContext? context = _ctx;
}

class SessionInvoiceCreation extends StripeEntity1<SessionInvoiceCreation> implements IConvertible
{
    bool? Enabled;
    SessionInvoiceCreationInvoiceData? InvoiceData;

    SessionInvoiceCreation({this.Enabled,this.InvoiceData});
    SessionInvoiceCreation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Enabled = json['Enabled'];
        InvoiceData = JsonConverters.fromJson(json['InvoiceData'],'SessionInvoiceCreationInvoiceData',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Enabled': Enabled,
        'InvoiceData': JsonConverters.toJson(InvoiceData,'SessionInvoiceCreationInvoiceData',context!)
    });

    getTypeName() => "SessionInvoiceCreation";
    TypeContext? context = _ctx;
}

class CouponAppliesTo extends StripeEntity1<CouponAppliesTo> implements IConvertible
{
    List<String>? Products;

    CouponAppliesTo({this.Products});
    CouponAppliesTo.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Products = JsonConverters.fromJson(json['Products'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Products': JsonConverters.toJson(Products,'List<String>',context!)
    });

    getTypeName() => "CouponAppliesTo";
    TypeContext? context = _ctx;
}

class CouponCurrencyOptions extends StripeEntity1<CouponCurrencyOptions> implements IConvertible
{
    int? AmountOff;

    CouponCurrencyOptions({this.AmountOff});
    CouponCurrencyOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountOff = json['AmountOff'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountOff': AmountOff
    });

    getTypeName() => "CouponCurrencyOptions";
    TypeContext? context = _ctx;
}

class Coupon extends StripeEntity1<Coupon> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    int? AmountOff;
    CouponAppliesTo? AppliesTo;
    DateTime? Created;
    String? Currency;
    Map<String,CouponCurrencyOptions?>? CurrencyOptions;
    bool? Deleted;
    String? Duration;
    int? DurationInMonths;
    bool? Livemode;
    int? MaxRedemptions;
    Map<String,String?>? Metadata;
    String? Name;
    double? PercentOff;
    DateTime? RedeemBy;
    int? TimesRedeemed;
    bool? Valid;

    Coupon({this.Id,this.Object,this.AmountOff,this.AppliesTo,this.Created,this.Currency,this.CurrencyOptions,this.Deleted,this.Duration,this.DurationInMonths,this.Livemode,this.MaxRedemptions,this.Metadata,this.Name,this.PercentOff,this.RedeemBy,this.TimesRedeemed,this.Valid});
    Coupon.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        AmountOff = json['AmountOff'];
        AppliesTo = JsonConverters.fromJson(json['AppliesTo'],'CouponAppliesTo',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Currency = json['Currency'];
        CurrencyOptions = JsonConverters.fromJson(json['CurrencyOptions'],'Map<String,CouponCurrencyOptions?>',context!);
        Deleted = json['Deleted'];
        Duration = json['Duration'];
        DurationInMonths = json['DurationInMonths'];
        Livemode = json['Livemode'];
        MaxRedemptions = json['MaxRedemptions'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Name = json['Name'];
        PercentOff = JsonConverters.toDouble(json['PercentOff']);
        RedeemBy = JsonConverters.fromJson(json['RedeemBy'],'DateTime',context!);
        TimesRedeemed = json['TimesRedeemed'];
        Valid = json['Valid'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'AmountOff': AmountOff,
        'AppliesTo': JsonConverters.toJson(AppliesTo,'CouponAppliesTo',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Currency': Currency,
        'CurrencyOptions': JsonConverters.toJson(CurrencyOptions,'Map<String,CouponCurrencyOptions?>',context!),
        'Deleted': Deleted,
        'Duration': Duration,
        'DurationInMonths': DurationInMonths,
        'Livemode': Livemode,
        'MaxRedemptions': MaxRedemptions,
        'Metadata': Metadata,
        'Name': Name,
        'PercentOff': PercentOff,
        'RedeemBy': JsonConverters.toJson(RedeemBy,'DateTime',context!),
        'TimesRedeemed': TimesRedeemed,
        'Valid': Valid
    });

    getTypeName() => "Coupon";
    TypeContext? context = _ctx;
}

class Discount extends StripeEntity1<Discount> implements IHasId, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    String? CheckoutSession;
    Coupon? Coupon;
    bool? Deleted;
    DateTime? End;
    String? Invoice;
    String? InvoiceItem;
    DateTime? Start;
    String? Subscription;
    String? SubscriptionItem;

    Discount({this.Id,this.Object,this.CheckoutSession,this.Coupon,this.Deleted,this.End,this.Invoice,this.InvoiceItem,this.Start,this.Subscription,this.SubscriptionItem});
    Discount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        CheckoutSession = json['CheckoutSession'];
        Coupon = JsonConverters.fromJson(json['Coupon'],'Coupon',context!);
        Deleted = json['Deleted'];
        End = JsonConverters.fromJson(json['End'],'DateTime',context!);
        Invoice = json['Invoice'];
        InvoiceItem = json['InvoiceItem'];
        Start = JsonConverters.fromJson(json['Start'],'DateTime',context!);
        Subscription = json['Subscription'];
        SubscriptionItem = json['SubscriptionItem'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'CheckoutSession': CheckoutSession,
        'Coupon': JsonConverters.toJson(Coupon,'Coupon',context!),
        'Deleted': Deleted,
        'End': JsonConverters.toJson(End,'DateTime',context!),
        'Invoice': Invoice,
        'InvoiceItem': InvoiceItem,
        'Start': JsonConverters.toJson(Start,'DateTime',context!),
        'Subscription': Subscription,
        'SubscriptionItem': SubscriptionItem
    });

    getTypeName() => "Discount";
    TypeContext? context = _ctx;
}

class LineItemDiscount extends StripeEntity1<LineItemDiscount> implements IConvertible
{
    int? Amount;
    Discount? Discount;

    LineItemDiscount({this.Amount,this.Discount});
    LineItemDiscount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Discount = JsonConverters.fromJson(json['Discount'],'Discount',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Discount': JsonConverters.toJson(Discount,'Discount',context!)
    });

    getTypeName() => "LineItemDiscount";
    TypeContext? context = _ctx;
}

class PriceCurrencyOptionsCustomUnitAmount extends StripeEntity1<PriceCurrencyOptionsCustomUnitAmount> implements IConvertible
{
    int? Maximum;
    int? Minimum;
    int? Preset;

    PriceCurrencyOptionsCustomUnitAmount({this.Maximum,this.Minimum,this.Preset});
    PriceCurrencyOptionsCustomUnitAmount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Maximum = json['Maximum'];
        Minimum = json['Minimum'];
        Preset = json['Preset'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Maximum': Maximum,
        'Minimum': Minimum,
        'Preset': Preset
    });

    getTypeName() => "PriceCurrencyOptionsCustomUnitAmount";
    TypeContext? context = _ctx;
}

class PriceCurrencyOptionsTier extends StripeEntity1<PriceCurrencyOptionsTier> implements IConvertible
{
    int? FlatAmount;
    double? FlatAmountDecimal;
    int? UnitAmount;
    double? UnitAmountDecimal;
    int? UpTo;

    PriceCurrencyOptionsTier({this.FlatAmount,this.FlatAmountDecimal,this.UnitAmount,this.UnitAmountDecimal,this.UpTo});
    PriceCurrencyOptionsTier.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FlatAmount = json['FlatAmount'];
        FlatAmountDecimal = JsonConverters.toDouble(json['FlatAmountDecimal']);
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        UpTo = json['UpTo'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FlatAmount': FlatAmount,
        'FlatAmountDecimal': FlatAmountDecimal,
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal,
        'UpTo': UpTo
    });

    getTypeName() => "PriceCurrencyOptionsTier";
    TypeContext? context = _ctx;
}

class PriceCurrencyOptions extends StripeEntity1<PriceCurrencyOptions> implements IConvertible
{
    PriceCurrencyOptionsCustomUnitAmount? CustomUnitAmount;
    String? TaxBehavior;
    List<PriceCurrencyOptionsTier>? Tiers;
    int? UnitAmount;
    double? UnitAmountDecimal;

    PriceCurrencyOptions({this.CustomUnitAmount,this.TaxBehavior,this.Tiers,this.UnitAmount,this.UnitAmountDecimal});
    PriceCurrencyOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CustomUnitAmount = JsonConverters.fromJson(json['CustomUnitAmount'],'PriceCurrencyOptionsCustomUnitAmount',context!);
        TaxBehavior = json['TaxBehavior'];
        Tiers = JsonConverters.fromJson(json['Tiers'],'List<PriceCurrencyOptionsTier>',context!);
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CustomUnitAmount': JsonConverters.toJson(CustomUnitAmount,'PriceCurrencyOptionsCustomUnitAmount',context!),
        'TaxBehavior': TaxBehavior,
        'Tiers': JsonConverters.toJson(Tiers,'List<PriceCurrencyOptionsTier>',context!),
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal
    });

    getTypeName() => "PriceCurrencyOptions";
    TypeContext? context = _ctx;
}

class PriceCustomUnitAmount extends StripeEntity1<PriceCustomUnitAmount> implements IConvertible
{
    int? Maximum;
    int? Minimum;
    int? Preset;

    PriceCustomUnitAmount({this.Maximum,this.Minimum,this.Preset});
    PriceCustomUnitAmount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Maximum = json['Maximum'];
        Minimum = json['Minimum'];
        Preset = json['Preset'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Maximum': Maximum,
        'Minimum': Minimum,
        'Preset': Preset
    });

    getTypeName() => "PriceCustomUnitAmount";
    TypeContext? context = _ctx;
}

class PriceRecurring extends StripeEntity1<PriceRecurring> implements IConvertible
{
    String? AggregateUsage;
    String? Interval;
    int? IntervalCount;
    String? Meter;
    int? TrialPeriodDays;
    String? UsageType;

    PriceRecurring({this.AggregateUsage,this.Interval,this.IntervalCount,this.Meter,this.TrialPeriodDays,this.UsageType});
    PriceRecurring.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AggregateUsage = json['AggregateUsage'];
        Interval = json['Interval'];
        IntervalCount = json['IntervalCount'];
        Meter = json['Meter'];
        TrialPeriodDays = json['TrialPeriodDays'];
        UsageType = json['UsageType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AggregateUsage': AggregateUsage,
        'Interval': Interval,
        'IntervalCount': IntervalCount,
        'Meter': Meter,
        'TrialPeriodDays': TrialPeriodDays,
        'UsageType': UsageType
    });

    getTypeName() => "PriceRecurring";
    TypeContext? context = _ctx;
}

class PriceTier extends StripeEntity1<PriceTier> implements IConvertible
{
    int? FlatAmount;
    double? FlatAmountDecimal;
    int? UnitAmount;
    double? UnitAmountDecimal;
    int? UpTo;

    PriceTier({this.FlatAmount,this.FlatAmountDecimal,this.UnitAmount,this.UnitAmountDecimal,this.UpTo});
    PriceTier.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FlatAmount = json['FlatAmount'];
        FlatAmountDecimal = JsonConverters.toDouble(json['FlatAmountDecimal']);
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        UpTo = json['UpTo'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FlatAmount': FlatAmount,
        'FlatAmountDecimal': FlatAmountDecimal,
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal,
        'UpTo': UpTo
    });

    getTypeName() => "PriceTier";
    TypeContext? context = _ctx;
}

class PriceTransformQuantity extends StripeEntity1<PriceTransformQuantity> implements IConvertible
{
    int? DivideBy;
    String? Round;

    PriceTransformQuantity({this.DivideBy,this.Round});
    PriceTransformQuantity.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DivideBy = json['DivideBy'];
        Round = json['Round'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DivideBy': DivideBy,
        'Round': Round
    });

    getTypeName() => "PriceTransformQuantity";
    TypeContext? context = _ctx;
}

class Price extends StripeEntity1<Price> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    bool? Active;
    String? BillingScheme;
    DateTime? Created;
    String? Currency;
    Map<String,PriceCurrencyOptions?>? CurrencyOptions;
    PriceCustomUnitAmount? CustomUnitAmount;
    bool? Deleted;
    bool? Livemode;
    String? LookupKey;
    Map<String,String?>? Metadata;
    String? Nickname;
    PriceRecurring? Recurring;
    String? TaxBehavior;
    List<PriceTier>? Tiers;
    String? TiersMode;
    PriceTransformQuantity? TransformQuantity;
    String? Type;
    int? UnitAmount;
    double? UnitAmountDecimal;

    Price({this.Id,this.Object,this.Active,this.BillingScheme,this.Created,this.Currency,this.CurrencyOptions,this.CustomUnitAmount,this.Deleted,this.Livemode,this.LookupKey,this.Metadata,this.Nickname,this.Recurring,this.TaxBehavior,this.Tiers,this.TiersMode,this.TransformQuantity,this.Type,this.UnitAmount,this.UnitAmountDecimal});
    Price.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        Active = json['Active'];
        BillingScheme = json['BillingScheme'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Currency = json['Currency'];
        CurrencyOptions = JsonConverters.fromJson(json['CurrencyOptions'],'Map<String,PriceCurrencyOptions?>',context!);
        CustomUnitAmount = JsonConverters.fromJson(json['CustomUnitAmount'],'PriceCustomUnitAmount',context!);
        Deleted = json['Deleted'];
        Livemode = json['Livemode'];
        LookupKey = json['LookupKey'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Nickname = json['Nickname'];
        Recurring = JsonConverters.fromJson(json['Recurring'],'PriceRecurring',context!);
        TaxBehavior = json['TaxBehavior'];
        Tiers = JsonConverters.fromJson(json['Tiers'],'List<PriceTier>',context!);
        TiersMode = json['TiersMode'];
        TransformQuantity = JsonConverters.fromJson(json['TransformQuantity'],'PriceTransformQuantity',context!);
        Type = json['Type'];
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'Active': Active,
        'BillingScheme': BillingScheme,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Currency': Currency,
        'CurrencyOptions': JsonConverters.toJson(CurrencyOptions,'Map<String,PriceCurrencyOptions?>',context!),
        'CustomUnitAmount': JsonConverters.toJson(CustomUnitAmount,'PriceCustomUnitAmount',context!),
        'Deleted': Deleted,
        'Livemode': Livemode,
        'LookupKey': LookupKey,
        'Metadata': Metadata,
        'Nickname': Nickname,
        'Recurring': JsonConverters.toJson(Recurring,'PriceRecurring',context!),
        'TaxBehavior': TaxBehavior,
        'Tiers': JsonConverters.toJson(Tiers,'List<PriceTier>',context!),
        'TiersMode': TiersMode,
        'TransformQuantity': JsonConverters.toJson(TransformQuantity,'PriceTransformQuantity',context!),
        'Type': Type,
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal
    });

    getTypeName() => "Price";
    TypeContext? context = _ctx;
}

class TaxRate extends StripeEntity1<TaxRate> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    bool? Active;
    String? Country;
    DateTime? Created;
    String? Description;
    String? DisplayName;
    double? EffectivePercentage;
    bool? Inclusive;
    String? Jurisdiction;
    String? JurisdictionLevel;
    bool? Livemode;
    Map<String,String?>? Metadata;
    double? Percentage;
    String? State;
    String? TaxType;

    TaxRate({this.Id,this.Object,this.Active,this.Country,this.Created,this.Description,this.DisplayName,this.EffectivePercentage,this.Inclusive,this.Jurisdiction,this.JurisdictionLevel,this.Livemode,this.Metadata,this.Percentage,this.State,this.TaxType});
    TaxRate.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        Active = json['Active'];
        Country = json['Country'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Description = json['Description'];
        DisplayName = json['DisplayName'];
        EffectivePercentage = JsonConverters.toDouble(json['EffectivePercentage']);
        Inclusive = json['Inclusive'];
        Jurisdiction = json['Jurisdiction'];
        JurisdictionLevel = json['JurisdictionLevel'];
        Livemode = json['Livemode'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Percentage = JsonConverters.toDouble(json['Percentage']);
        State = json['State'];
        TaxType = json['TaxType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'Active': Active,
        'Country': Country,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Description': Description,
        'DisplayName': DisplayName,
        'EffectivePercentage': EffectivePercentage,
        'Inclusive': Inclusive,
        'Jurisdiction': Jurisdiction,
        'JurisdictionLevel': JurisdictionLevel,
        'Livemode': Livemode,
        'Metadata': Metadata,
        'Percentage': Percentage,
        'State': State,
        'TaxType': TaxType
    });

    getTypeName() => "TaxRate";
    TypeContext? context = _ctx;
}

class LineItemTax extends StripeEntity1<LineItemTax> implements IConvertible
{
    int? Amount;
    TaxRate? Rate;
    String? TaxabilityReason;
    int? TaxableAmount;

    LineItemTax({this.Amount,this.Rate,this.TaxabilityReason,this.TaxableAmount});
    LineItemTax.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Rate = JsonConverters.fromJson(json['Rate'],'TaxRate',context!);
        TaxabilityReason = json['TaxabilityReason'];
        TaxableAmount = json['TaxableAmount'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Rate': JsonConverters.toJson(Rate,'TaxRate',context!),
        'TaxabilityReason': TaxabilityReason,
        'TaxableAmount': TaxableAmount
    });

    getTypeName() => "LineItemTax";
    TypeContext? context = _ctx;
}

class LineItem extends StripeEntity1<LineItem> implements IHasId, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    int? AmountDiscount;
    int? AmountSubtotal;
    int? AmountTax;
    int? AmountTotal;
    String? Currency;
    bool? Deleted;
    String? Description;
    List<LineItemDiscount>? Discounts;
    Price? Price;
    int? Quantity;
    List<LineItemTax>? Taxes;

    LineItem({this.Id,this.Object,this.AmountDiscount,this.AmountSubtotal,this.AmountTax,this.AmountTotal,this.Currency,this.Deleted,this.Description,this.Discounts,this.Price,this.Quantity,this.Taxes});
    LineItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        AmountDiscount = json['AmountDiscount'];
        AmountSubtotal = json['AmountSubtotal'];
        AmountTax = json['AmountTax'];
        AmountTotal = json['AmountTotal'];
        Currency = json['Currency'];
        Deleted = json['Deleted'];
        Description = json['Description'];
        Discounts = JsonConverters.fromJson(json['Discounts'],'List<LineItemDiscount>',context!);
        Price = JsonConverters.fromJson(json['Price'],'Price',context!);
        Quantity = json['Quantity'];
        Taxes = JsonConverters.fromJson(json['Taxes'],'List<LineItemTax>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'AmountDiscount': AmountDiscount,
        'AmountSubtotal': AmountSubtotal,
        'AmountTax': AmountTax,
        'AmountTotal': AmountTotal,
        'Currency': Currency,
        'Deleted': Deleted,
        'Description': Description,
        'Discounts': JsonConverters.toJson(Discounts,'List<LineItemDiscount>',context!),
        'Price': JsonConverters.toJson(Price,'Price',context!),
        'Quantity': Quantity,
        'Taxes': JsonConverters.toJson(Taxes,'List<LineItemTax>',context!)
    });

    getTypeName() => "LineItem";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodConfigurationDetails extends StripeEntity1<SessionPaymentMethodConfigurationDetails> implements IHasId, IConvertible
{
    String? Id;
    String? Parent;

    SessionPaymentMethodConfigurationDetails({this.Id,this.Parent});
    SessionPaymentMethodConfigurationDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Parent = json['Parent'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Parent': Parent
    });

    getTypeName() => "SessionPaymentMethodConfigurationDetails";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAcssDebitMandateOptions extends StripeEntity1<SessionPaymentMethodOptionsAcssDebitMandateOptions> implements IConvertible
{
    String? CustomMandateUrl;
    List<String>? DefaultFor;
    String? IntervalDescription;
    String? PaymentSchedule;
    String? TransactionType;

    SessionPaymentMethodOptionsAcssDebitMandateOptions({this.CustomMandateUrl,this.DefaultFor,this.IntervalDescription,this.PaymentSchedule,this.TransactionType});
    SessionPaymentMethodOptionsAcssDebitMandateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CustomMandateUrl = json['CustomMandateUrl'];
        DefaultFor = JsonConverters.fromJson(json['DefaultFor'],'List<String>',context!);
        IntervalDescription = json['IntervalDescription'];
        PaymentSchedule = json['PaymentSchedule'];
        TransactionType = json['TransactionType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CustomMandateUrl': CustomMandateUrl,
        'DefaultFor': JsonConverters.toJson(DefaultFor,'List<String>',context!),
        'IntervalDescription': IntervalDescription,
        'PaymentSchedule': PaymentSchedule,
        'TransactionType': TransactionType
    });

    getTypeName() => "SessionPaymentMethodOptionsAcssDebitMandateOptions";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAcssDebit extends StripeEntity1<SessionPaymentMethodOptionsAcssDebit> implements IConvertible
{
    String? Currency;
    SessionPaymentMethodOptionsAcssDebitMandateOptions? MandateOptions;
    String? SetupFutureUsage;
    String? VerificationMethod;

    SessionPaymentMethodOptionsAcssDebit({this.Currency,this.MandateOptions,this.SetupFutureUsage,this.VerificationMethod});
    SessionPaymentMethodOptionsAcssDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Currency = json['Currency'];
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'SessionPaymentMethodOptionsAcssDebitMandateOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Currency': Currency,
        'MandateOptions': JsonConverters.toJson(MandateOptions,'SessionPaymentMethodOptionsAcssDebitMandateOptions',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    });

    getTypeName() => "SessionPaymentMethodOptionsAcssDebit";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAffirm extends StripeEntity1<SessionPaymentMethodOptionsAffirm> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAffirm({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAffirm.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsAffirm";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAfterpayClearpay extends StripeEntity1<SessionPaymentMethodOptionsAfterpayClearpay> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAfterpayClearpay({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAfterpayClearpay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsAfterpayClearpay";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAlipay extends StripeEntity1<SessionPaymentMethodOptionsAlipay> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAlipay({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAlipay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsAlipay";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAmazonPay extends StripeEntity1<SessionPaymentMethodOptionsAmazonPay> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAmazonPay({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAmazonPay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsAmazonPay";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsAuBecsDebit extends StripeEntity1<SessionPaymentMethodOptionsAuBecsDebit> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsAuBecsDebit({this.SetupFutureUsage});
    SessionPaymentMethodOptionsAuBecsDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsAuBecsDebit";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsBacsDebit extends StripeEntity1<SessionPaymentMethodOptionsBacsDebit> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsBacsDebit({this.SetupFutureUsage});
    SessionPaymentMethodOptionsBacsDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsBacsDebit";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsBancontact extends StripeEntity1<SessionPaymentMethodOptionsBancontact> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsBancontact({this.SetupFutureUsage});
    SessionPaymentMethodOptionsBancontact.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsBancontact";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsBoleto extends StripeEntity1<SessionPaymentMethodOptionsBoleto> implements IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsBoleto({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsBoleto.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsBoleto";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCardInstallments extends StripeEntity1<SessionPaymentMethodOptionsCardInstallments> implements IConvertible
{
    bool? Enabled;

    SessionPaymentMethodOptionsCardInstallments({this.Enabled});
    SessionPaymentMethodOptionsCardInstallments.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Enabled = json['Enabled'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Enabled': Enabled
    });

    getTypeName() => "SessionPaymentMethodOptionsCardInstallments";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCard extends StripeEntity1<SessionPaymentMethodOptionsCard> implements IConvertible
{
    SessionPaymentMethodOptionsCardInstallments? Installments;
    String? RequestThreeDSecure;
    String? SetupFutureUsage;
    String? StatementDescriptorSuffixKana;
    String? StatementDescriptorSuffixKanji;

    SessionPaymentMethodOptionsCard({this.Installments,this.RequestThreeDSecure,this.SetupFutureUsage,this.StatementDescriptorSuffixKana,this.StatementDescriptorSuffixKanji});
    SessionPaymentMethodOptionsCard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Installments = JsonConverters.fromJson(json['Installments'],'SessionPaymentMethodOptionsCardInstallments',context!);
        RequestThreeDSecure = json['RequestThreeDSecure'];
        SetupFutureUsage = json['SetupFutureUsage'];
        StatementDescriptorSuffixKana = json['StatementDescriptorSuffixKana'];
        StatementDescriptorSuffixKanji = json['StatementDescriptorSuffixKanji'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Installments': JsonConverters.toJson(Installments,'SessionPaymentMethodOptionsCardInstallments',context!),
        'RequestThreeDSecure': RequestThreeDSecure,
        'SetupFutureUsage': SetupFutureUsage,
        'StatementDescriptorSuffixKana': StatementDescriptorSuffixKana,
        'StatementDescriptorSuffixKanji': StatementDescriptorSuffixKanji
    });

    getTypeName() => "SessionPaymentMethodOptionsCard";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCashapp extends StripeEntity1<SessionPaymentMethodOptionsCashapp> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsCashapp({this.SetupFutureUsage});
    SessionPaymentMethodOptionsCashapp.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsCashapp";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer extends StripeEntity1<SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer> implements IConvertible
{
    String? Country;

    SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer({this.Country});
    SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Country = json['Country'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Country': Country
    });

    getTypeName() => "SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCustomerBalanceBankTransfer extends StripeEntity1<SessionPaymentMethodOptionsCustomerBalanceBankTransfer> implements IConvertible
{
    SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer? EuBankTransfer;
    List<String>? RequestedAddressTypes;
    String? Type;

    SessionPaymentMethodOptionsCustomerBalanceBankTransfer({this.EuBankTransfer,this.RequestedAddressTypes,this.Type});
    SessionPaymentMethodOptionsCustomerBalanceBankTransfer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        EuBankTransfer = JsonConverters.fromJson(json['EuBankTransfer'],'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer',context!);
        RequestedAddressTypes = JsonConverters.fromJson(json['RequestedAddressTypes'],'List<String>',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'EuBankTransfer': JsonConverters.toJson(EuBankTransfer,'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer',context!),
        'RequestedAddressTypes': JsonConverters.toJson(RequestedAddressTypes,'List<String>',context!),
        'Type': Type
    });

    getTypeName() => "SessionPaymentMethodOptionsCustomerBalanceBankTransfer";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsCustomerBalance extends StripeEntity1<SessionPaymentMethodOptionsCustomerBalance> implements IConvertible
{
    SessionPaymentMethodOptionsCustomerBalanceBankTransfer? BankTransfer;
    String? FundingType;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsCustomerBalance({this.BankTransfer,this.FundingType,this.SetupFutureUsage});
    SessionPaymentMethodOptionsCustomerBalance.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BankTransfer = JsonConverters.fromJson(json['BankTransfer'],'SessionPaymentMethodOptionsCustomerBalanceBankTransfer',context!);
        FundingType = json['FundingType'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BankTransfer': JsonConverters.toJson(BankTransfer,'SessionPaymentMethodOptionsCustomerBalanceBankTransfer',context!),
        'FundingType': FundingType,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsCustomerBalance";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsEps extends StripeEntity1<SessionPaymentMethodOptionsEps> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsEps({this.SetupFutureUsage});
    SessionPaymentMethodOptionsEps.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsEps";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsFpx extends StripeEntity1<SessionPaymentMethodOptionsFpx> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsFpx({this.SetupFutureUsage});
    SessionPaymentMethodOptionsFpx.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsFpx";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsGiropay extends StripeEntity1<SessionPaymentMethodOptionsGiropay> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsGiropay({this.SetupFutureUsage});
    SessionPaymentMethodOptionsGiropay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsGiropay";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsGrabpay extends StripeEntity1<SessionPaymentMethodOptionsGrabpay> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsGrabpay({this.SetupFutureUsage});
    SessionPaymentMethodOptionsGrabpay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsGrabpay";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsIdeal extends StripeEntity1<SessionPaymentMethodOptionsIdeal> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsIdeal({this.SetupFutureUsage});
    SessionPaymentMethodOptionsIdeal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsIdeal";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsKlarna extends StripeEntity1<SessionPaymentMethodOptionsKlarna> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsKlarna({this.SetupFutureUsage});
    SessionPaymentMethodOptionsKlarna.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsKlarna";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsKonbini extends StripeEntity1<SessionPaymentMethodOptionsKonbini> implements IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsKonbini({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsKonbini.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsKonbini";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsLink extends StripeEntity1<SessionPaymentMethodOptionsLink> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsLink({this.SetupFutureUsage});
    SessionPaymentMethodOptionsLink.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsLink";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsMobilepay extends StripeEntity1<SessionPaymentMethodOptionsMobilepay> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsMobilepay({this.SetupFutureUsage});
    SessionPaymentMethodOptionsMobilepay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsMobilepay";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsMultibanco extends StripeEntity1<SessionPaymentMethodOptionsMultibanco> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsMultibanco({this.SetupFutureUsage});
    SessionPaymentMethodOptionsMultibanco.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsMultibanco";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsOxxo extends StripeEntity1<SessionPaymentMethodOptionsOxxo> implements IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsOxxo({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsOxxo.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsOxxo";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsP24 extends StripeEntity1<SessionPaymentMethodOptionsP24> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsP24({this.SetupFutureUsage});
    SessionPaymentMethodOptionsP24.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsP24";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsPaynow extends StripeEntity1<SessionPaymentMethodOptionsPaynow> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsPaynow({this.SetupFutureUsage});
    SessionPaymentMethodOptionsPaynow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsPaynow";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsPaypal extends StripeEntity1<SessionPaymentMethodOptionsPaypal> implements IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? Reference;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsPaypal({this.CaptureMethod,this.PreferredLocale,this.Reference,this.SetupFutureUsage});
    SessionPaymentMethodOptionsPaypal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        Reference = json['Reference'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'Reference': Reference,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsPaypal";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsPix extends StripeEntity1<SessionPaymentMethodOptionsPix> implements IConvertible
{
    int? ExpiresAfterSeconds;

    SessionPaymentMethodOptionsPix({this.ExpiresAfterSeconds});
    SessionPaymentMethodOptionsPix.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAfterSeconds = json['ExpiresAfterSeconds'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAfterSeconds': ExpiresAfterSeconds
    });

    getTypeName() => "SessionPaymentMethodOptionsPix";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsRevolutPay extends StripeEntity1<SessionPaymentMethodOptionsRevolutPay> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsRevolutPay({this.SetupFutureUsage});
    SessionPaymentMethodOptionsRevolutPay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsRevolutPay";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsSepaDebit extends StripeEntity1<SessionPaymentMethodOptionsSepaDebit> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsSepaDebit({this.SetupFutureUsage});
    SessionPaymentMethodOptionsSepaDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsSepaDebit";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsSofort extends StripeEntity1<SessionPaymentMethodOptionsSofort> implements IConvertible
{
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsSofort({this.SetupFutureUsage});
    SessionPaymentMethodOptionsSofort.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "SessionPaymentMethodOptionsSofort";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsSwish extends StripeEntity1<SessionPaymentMethodOptionsSwish> implements IConvertible
{
    String? Reference;

    SessionPaymentMethodOptionsSwish({this.Reference});
    SessionPaymentMethodOptionsSwish.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Reference = json['Reference'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Reference': Reference
    });

    getTypeName() => "SessionPaymentMethodOptionsSwish";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters extends StripeEntity1<SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters> implements IConvertible
{
    List<String>? AccountSubcategories;

    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters({this.AccountSubcategories});
    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountSubcategories = JsonConverters.fromJson(json['AccountSubcategories'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountSubcategories': JsonConverters.toJson(AccountSubcategories,'List<String>',context!)
    });

    getTypeName() => "SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsUsBankAccountFinancialConnections extends StripeEntity1<SessionPaymentMethodOptionsUsBankAccountFinancialConnections> implements IConvertible
{
    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters? Filters;
    List<String>? Permissions;
    List<String>? Prefetch;
    String? ReturnUrl;

    SessionPaymentMethodOptionsUsBankAccountFinancialConnections({this.Filters,this.Permissions,this.Prefetch,this.ReturnUrl});
    SessionPaymentMethodOptionsUsBankAccountFinancialConnections.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Filters = JsonConverters.fromJson(json['Filters'],'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters',context!);
        Permissions = JsonConverters.fromJson(json['Permissions'],'List<String>',context!);
        Prefetch = JsonConverters.fromJson(json['Prefetch'],'List<String>',context!);
        ReturnUrl = json['ReturnUrl'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Filters': JsonConverters.toJson(Filters,'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters',context!),
        'Permissions': JsonConverters.toJson(Permissions,'List<String>',context!),
        'Prefetch': JsonConverters.toJson(Prefetch,'List<String>',context!),
        'ReturnUrl': ReturnUrl
    });

    getTypeName() => "SessionPaymentMethodOptionsUsBankAccountFinancialConnections";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptionsUsBankAccount extends StripeEntity1<SessionPaymentMethodOptionsUsBankAccount> implements IConvertible
{
    SessionPaymentMethodOptionsUsBankAccountFinancialConnections? FinancialConnections;
    String? SetupFutureUsage;
    String? VerificationMethod;

    SessionPaymentMethodOptionsUsBankAccount({this.FinancialConnections,this.SetupFutureUsage,this.VerificationMethod});
    SessionPaymentMethodOptionsUsBankAccount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FinancialConnections = JsonConverters.fromJson(json['FinancialConnections'],'SessionPaymentMethodOptionsUsBankAccountFinancialConnections',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FinancialConnections': JsonConverters.toJson(FinancialConnections,'SessionPaymentMethodOptionsUsBankAccountFinancialConnections',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    });

    getTypeName() => "SessionPaymentMethodOptionsUsBankAccount";
    TypeContext? context = _ctx;
}

class SessionPaymentMethodOptions extends StripeEntity1<SessionPaymentMethodOptions> implements IConvertible
{
    SessionPaymentMethodOptionsAcssDebit? AcssDebit;
    SessionPaymentMethodOptionsAffirm? Affirm;
    SessionPaymentMethodOptionsAfterpayClearpay? AfterpayClearpay;
    SessionPaymentMethodOptionsAlipay? Alipay;
    SessionPaymentMethodOptionsAmazonPay? AmazonPay;
    SessionPaymentMethodOptionsAuBecsDebit? AuBecsDebit;
    SessionPaymentMethodOptionsBacsDebit? BacsDebit;
    SessionPaymentMethodOptionsBancontact? Bancontact;
    SessionPaymentMethodOptionsBoleto? Boleto;
    SessionPaymentMethodOptionsCard? Card;
    SessionPaymentMethodOptionsCashapp? Cashapp;
    SessionPaymentMethodOptionsCustomerBalance? CustomerBalance;
    SessionPaymentMethodOptionsEps? Eps;
    SessionPaymentMethodOptionsFpx? Fpx;
    SessionPaymentMethodOptionsGiropay? Giropay;
    SessionPaymentMethodOptionsGrabpay? Grabpay;
    SessionPaymentMethodOptionsIdeal? Ideal;
    SessionPaymentMethodOptionsKlarna? Klarna;
    SessionPaymentMethodOptionsKonbini? Konbini;
    SessionPaymentMethodOptionsLink? Link;
    SessionPaymentMethodOptionsMobilepay? Mobilepay;
    SessionPaymentMethodOptionsMultibanco? Multibanco;
    SessionPaymentMethodOptionsOxxo? Oxxo;
    SessionPaymentMethodOptionsP24? P24;
    SessionPaymentMethodOptionsPaynow? Paynow;
    SessionPaymentMethodOptionsPaypal? Paypal;
    SessionPaymentMethodOptionsPix? Pix;
    SessionPaymentMethodOptionsRevolutPay? RevolutPay;
    SessionPaymentMethodOptionsSepaDebit? SepaDebit;
    SessionPaymentMethodOptionsSofort? Sofort;
    SessionPaymentMethodOptionsSwish? Swish;
    SessionPaymentMethodOptionsUsBankAccount? UsBankAccount;

    SessionPaymentMethodOptions({this.AcssDebit,this.Affirm,this.AfterpayClearpay,this.Alipay,this.AmazonPay,this.AuBecsDebit,this.BacsDebit,this.Bancontact,this.Boleto,this.Card,this.Cashapp,this.CustomerBalance,this.Eps,this.Fpx,this.Giropay,this.Grabpay,this.Ideal,this.Klarna,this.Konbini,this.Link,this.Mobilepay,this.Multibanco,this.Oxxo,this.P24,this.Paynow,this.Paypal,this.Pix,this.RevolutPay,this.SepaDebit,this.Sofort,this.Swish,this.UsBankAccount});
    SessionPaymentMethodOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AcssDebit = JsonConverters.fromJson(json['AcssDebit'],'SessionPaymentMethodOptionsAcssDebit',context!);
        Affirm = JsonConverters.fromJson(json['Affirm'],'SessionPaymentMethodOptionsAffirm',context!);
        AfterpayClearpay = JsonConverters.fromJson(json['AfterpayClearpay'],'SessionPaymentMethodOptionsAfterpayClearpay',context!);
        Alipay = JsonConverters.fromJson(json['Alipay'],'SessionPaymentMethodOptionsAlipay',context!);
        AmazonPay = JsonConverters.fromJson(json['AmazonPay'],'SessionPaymentMethodOptionsAmazonPay',context!);
        AuBecsDebit = JsonConverters.fromJson(json['AuBecsDebit'],'SessionPaymentMethodOptionsAuBecsDebit',context!);
        BacsDebit = JsonConverters.fromJson(json['BacsDebit'],'SessionPaymentMethodOptionsBacsDebit',context!);
        Bancontact = JsonConverters.fromJson(json['Bancontact'],'SessionPaymentMethodOptionsBancontact',context!);
        Boleto = JsonConverters.fromJson(json['Boleto'],'SessionPaymentMethodOptionsBoleto',context!);
        Card = JsonConverters.fromJson(json['Card'],'SessionPaymentMethodOptionsCard',context!);
        Cashapp = JsonConverters.fromJson(json['Cashapp'],'SessionPaymentMethodOptionsCashapp',context!);
        CustomerBalance = JsonConverters.fromJson(json['CustomerBalance'],'SessionPaymentMethodOptionsCustomerBalance',context!);
        Eps = JsonConverters.fromJson(json['Eps'],'SessionPaymentMethodOptionsEps',context!);
        Fpx = JsonConverters.fromJson(json['Fpx'],'SessionPaymentMethodOptionsFpx',context!);
        Giropay = JsonConverters.fromJson(json['Giropay'],'SessionPaymentMethodOptionsGiropay',context!);
        Grabpay = JsonConverters.fromJson(json['Grabpay'],'SessionPaymentMethodOptionsGrabpay',context!);
        Ideal = JsonConverters.fromJson(json['Ideal'],'SessionPaymentMethodOptionsIdeal',context!);
        Klarna = JsonConverters.fromJson(json['Klarna'],'SessionPaymentMethodOptionsKlarna',context!);
        Konbini = JsonConverters.fromJson(json['Konbini'],'SessionPaymentMethodOptionsKonbini',context!);
        Link = JsonConverters.fromJson(json['Link'],'SessionPaymentMethodOptionsLink',context!);
        Mobilepay = JsonConverters.fromJson(json['Mobilepay'],'SessionPaymentMethodOptionsMobilepay',context!);
        Multibanco = JsonConverters.fromJson(json['Multibanco'],'SessionPaymentMethodOptionsMultibanco',context!);
        Oxxo = JsonConverters.fromJson(json['Oxxo'],'SessionPaymentMethodOptionsOxxo',context!);
        P24 = JsonConverters.fromJson(json['P24'],'SessionPaymentMethodOptionsP24',context!);
        Paynow = JsonConverters.fromJson(json['Paynow'],'SessionPaymentMethodOptionsPaynow',context!);
        Paypal = JsonConverters.fromJson(json['Paypal'],'SessionPaymentMethodOptionsPaypal',context!);
        Pix = JsonConverters.fromJson(json['Pix'],'SessionPaymentMethodOptionsPix',context!);
        RevolutPay = JsonConverters.fromJson(json['RevolutPay'],'SessionPaymentMethodOptionsRevolutPay',context!);
        SepaDebit = JsonConverters.fromJson(json['SepaDebit'],'SessionPaymentMethodOptionsSepaDebit',context!);
        Sofort = JsonConverters.fromJson(json['Sofort'],'SessionPaymentMethodOptionsSofort',context!);
        Swish = JsonConverters.fromJson(json['Swish'],'SessionPaymentMethodOptionsSwish',context!);
        UsBankAccount = JsonConverters.fromJson(json['UsBankAccount'],'SessionPaymentMethodOptionsUsBankAccount',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AcssDebit': JsonConverters.toJson(AcssDebit,'SessionPaymentMethodOptionsAcssDebit',context!),
        'Affirm': JsonConverters.toJson(Affirm,'SessionPaymentMethodOptionsAffirm',context!),
        'AfterpayClearpay': JsonConverters.toJson(AfterpayClearpay,'SessionPaymentMethodOptionsAfterpayClearpay',context!),
        'Alipay': JsonConverters.toJson(Alipay,'SessionPaymentMethodOptionsAlipay',context!),
        'AmazonPay': JsonConverters.toJson(AmazonPay,'SessionPaymentMethodOptionsAmazonPay',context!),
        'AuBecsDebit': JsonConverters.toJson(AuBecsDebit,'SessionPaymentMethodOptionsAuBecsDebit',context!),
        'BacsDebit': JsonConverters.toJson(BacsDebit,'SessionPaymentMethodOptionsBacsDebit',context!),
        'Bancontact': JsonConverters.toJson(Bancontact,'SessionPaymentMethodOptionsBancontact',context!),
        'Boleto': JsonConverters.toJson(Boleto,'SessionPaymentMethodOptionsBoleto',context!),
        'Card': JsonConverters.toJson(Card,'SessionPaymentMethodOptionsCard',context!),
        'Cashapp': JsonConverters.toJson(Cashapp,'SessionPaymentMethodOptionsCashapp',context!),
        'CustomerBalance': JsonConverters.toJson(CustomerBalance,'SessionPaymentMethodOptionsCustomerBalance',context!),
        'Eps': JsonConverters.toJson(Eps,'SessionPaymentMethodOptionsEps',context!),
        'Fpx': JsonConverters.toJson(Fpx,'SessionPaymentMethodOptionsFpx',context!),
        'Giropay': JsonConverters.toJson(Giropay,'SessionPaymentMethodOptionsGiropay',context!),
        'Grabpay': JsonConverters.toJson(Grabpay,'SessionPaymentMethodOptionsGrabpay',context!),
        'Ideal': JsonConverters.toJson(Ideal,'SessionPaymentMethodOptionsIdeal',context!),
        'Klarna': JsonConverters.toJson(Klarna,'SessionPaymentMethodOptionsKlarna',context!),
        'Konbini': JsonConverters.toJson(Konbini,'SessionPaymentMethodOptionsKonbini',context!),
        'Link': JsonConverters.toJson(Link,'SessionPaymentMethodOptionsLink',context!),
        'Mobilepay': JsonConverters.toJson(Mobilepay,'SessionPaymentMethodOptionsMobilepay',context!),
        'Multibanco': JsonConverters.toJson(Multibanco,'SessionPaymentMethodOptionsMultibanco',context!),
        'Oxxo': JsonConverters.toJson(Oxxo,'SessionPaymentMethodOptionsOxxo',context!),
        'P24': JsonConverters.toJson(P24,'SessionPaymentMethodOptionsP24',context!),
        'Paynow': JsonConverters.toJson(Paynow,'SessionPaymentMethodOptionsPaynow',context!),
        'Paypal': JsonConverters.toJson(Paypal,'SessionPaymentMethodOptionsPaypal',context!),
        'Pix': JsonConverters.toJson(Pix,'SessionPaymentMethodOptionsPix',context!),
        'RevolutPay': JsonConverters.toJson(RevolutPay,'SessionPaymentMethodOptionsRevolutPay',context!),
        'SepaDebit': JsonConverters.toJson(SepaDebit,'SessionPaymentMethodOptionsSepaDebit',context!),
        'Sofort': JsonConverters.toJson(Sofort,'SessionPaymentMethodOptionsSofort',context!),
        'Swish': JsonConverters.toJson(Swish,'SessionPaymentMethodOptionsSwish',context!),
        'UsBankAccount': JsonConverters.toJson(UsBankAccount,'SessionPaymentMethodOptionsUsBankAccount',context!)
    });

    getTypeName() => "SessionPaymentMethodOptions";
    TypeContext? context = _ctx;
}

class SessionPhoneNumberCollection extends StripeEntity1<SessionPhoneNumberCollection> implements IConvertible
{
    bool? Enabled;

    SessionPhoneNumberCollection({this.Enabled});
    SessionPhoneNumberCollection.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Enabled = json['Enabled'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Enabled': Enabled
    });

    getTypeName() => "SessionPhoneNumberCollection";
    TypeContext? context = _ctx;
}

class SessionSavedPaymentMethodOptions extends StripeEntity1<SessionSavedPaymentMethodOptions> implements IConvertible
{
    List<String>? AllowRedisplayFilters;
    String? PaymentMethodRemove;
    String? PaymentMethodSave;

    SessionSavedPaymentMethodOptions({this.AllowRedisplayFilters,this.PaymentMethodRemove,this.PaymentMethodSave});
    SessionSavedPaymentMethodOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AllowRedisplayFilters = JsonConverters.fromJson(json['AllowRedisplayFilters'],'List<String>',context!);
        PaymentMethodRemove = json['PaymentMethodRemove'];
        PaymentMethodSave = json['PaymentMethodSave'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AllowRedisplayFilters': JsonConverters.toJson(AllowRedisplayFilters,'List<String>',context!),
        'PaymentMethodRemove': PaymentMethodRemove,
        'PaymentMethodSave': PaymentMethodSave
    });

    getTypeName() => "SessionSavedPaymentMethodOptions";
    TypeContext? context = _ctx;
}

class SessionShippingAddressCollection extends StripeEntity1<SessionShippingAddressCollection> implements IConvertible
{
    List<String>? AllowedCountries;

    SessionShippingAddressCollection({this.AllowedCountries});
    SessionShippingAddressCollection.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AllowedCountries = JsonConverters.fromJson(json['AllowedCountries'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AllowedCountries': JsonConverters.toJson(AllowedCountries,'List<String>',context!)
    });

    getTypeName() => "SessionShippingAddressCollection";
    TypeContext? context = _ctx;
}

class SessionShippingCostTax extends StripeEntity1<SessionShippingCostTax> implements IConvertible
{
    int? Amount;
    TaxRate? Rate;
    String? TaxabilityReason;
    int? TaxableAmount;

    SessionShippingCostTax({this.Amount,this.Rate,this.TaxabilityReason,this.TaxableAmount});
    SessionShippingCostTax.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Rate = JsonConverters.fromJson(json['Rate'],'TaxRate',context!);
        TaxabilityReason = json['TaxabilityReason'];
        TaxableAmount = json['TaxableAmount'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Rate': JsonConverters.toJson(Rate,'TaxRate',context!),
        'TaxabilityReason': TaxabilityReason,
        'TaxableAmount': TaxableAmount
    });

    getTypeName() => "SessionShippingCostTax";
    TypeContext? context = _ctx;
}

class SessionShippingCost extends StripeEntity1<SessionShippingCost> implements IConvertible
{
    int? AmountSubtotal;
    int? AmountTax;
    int? AmountTotal;
    List<SessionShippingCostTax>? Taxes;

    SessionShippingCost({this.AmountSubtotal,this.AmountTax,this.AmountTotal,this.Taxes});
    SessionShippingCost.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountSubtotal = json['AmountSubtotal'];
        AmountTax = json['AmountTax'];
        AmountTotal = json['AmountTotal'];
        Taxes = JsonConverters.fromJson(json['Taxes'],'List<SessionShippingCostTax>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountSubtotal': AmountSubtotal,
        'AmountTax': AmountTax,
        'AmountTotal': AmountTotal,
        'Taxes': JsonConverters.toJson(Taxes,'List<SessionShippingCostTax>',context!)
    });

    getTypeName() => "SessionShippingCost";
    TypeContext? context = _ctx;
}

class SessionShippingDetails extends StripeEntity1<SessionShippingDetails> implements IConvertible
{
    Address? Address;
    String? Carrier;
    String? Name;
    String? Phone;
    String? TrackingNumber;

    SessionShippingDetails({this.Address,this.Carrier,this.Name,this.Phone,this.TrackingNumber});
    SessionShippingDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        Carrier = json['Carrier'];
        Name = json['Name'];
        Phone = json['Phone'];
        TrackingNumber = json['TrackingNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'Carrier': Carrier,
        'Name': Name,
        'Phone': Phone,
        'TrackingNumber': TrackingNumber
    });

    getTypeName() => "SessionShippingDetails";
    TypeContext? context = _ctx;
}

class SessionShippingOption extends StripeEntity1<SessionShippingOption> implements IConvertible
{
    int? ShippingAmount;

    SessionShippingOption({this.ShippingAmount});
    SessionShippingOption.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ShippingAmount = json['ShippingAmount'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ShippingAmount': ShippingAmount
    });

    getTypeName() => "SessionShippingOption";
    TypeContext? context = _ctx;
}

class SessionTaxIdCollection extends StripeEntity1<SessionTaxIdCollection> implements IConvertible
{
    bool? Enabled;
    String? Required;

    SessionTaxIdCollection({this.Enabled,this.Required});
    SessionTaxIdCollection.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Enabled = json['Enabled'];
        Required = json['Required'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Enabled': Enabled,
        'Required': Required
    });

    getTypeName() => "SessionTaxIdCollection";
    TypeContext? context = _ctx;
}

class SessionTotalDetailsBreakdownDiscount extends StripeEntity1<SessionTotalDetailsBreakdownDiscount> implements IConvertible
{
    int? Amount;
    Discount? Discount;

    SessionTotalDetailsBreakdownDiscount({this.Amount,this.Discount});
    SessionTotalDetailsBreakdownDiscount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Discount = JsonConverters.fromJson(json['Discount'],'Discount',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Discount': JsonConverters.toJson(Discount,'Discount',context!)
    });

    getTypeName() => "SessionTotalDetailsBreakdownDiscount";
    TypeContext? context = _ctx;
}

class SessionTotalDetailsBreakdownTax extends StripeEntity1<SessionTotalDetailsBreakdownTax> implements IConvertible
{
    int? Amount;
    TaxRate? Rate;
    String? TaxabilityReason;
    int? TaxableAmount;

    SessionTotalDetailsBreakdownTax({this.Amount,this.Rate,this.TaxabilityReason,this.TaxableAmount});
    SessionTotalDetailsBreakdownTax.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Rate = JsonConverters.fromJson(json['Rate'],'TaxRate',context!);
        TaxabilityReason = json['TaxabilityReason'];
        TaxableAmount = json['TaxableAmount'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Rate': JsonConverters.toJson(Rate,'TaxRate',context!),
        'TaxabilityReason': TaxabilityReason,
        'TaxableAmount': TaxableAmount
    });

    getTypeName() => "SessionTotalDetailsBreakdownTax";
    TypeContext? context = _ctx;
}

class SessionTotalDetailsBreakdown extends StripeEntity1<SessionTotalDetailsBreakdown> implements IConvertible
{
    List<SessionTotalDetailsBreakdownDiscount>? Discounts;
    List<SessionTotalDetailsBreakdownTax>? Taxes;

    SessionTotalDetailsBreakdown({this.Discounts,this.Taxes});
    SessionTotalDetailsBreakdown.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Discounts = JsonConverters.fromJson(json['Discounts'],'List<SessionTotalDetailsBreakdownDiscount>',context!);
        Taxes = JsonConverters.fromJson(json['Taxes'],'List<SessionTotalDetailsBreakdownTax>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Discounts': JsonConverters.toJson(Discounts,'List<SessionTotalDetailsBreakdownDiscount>',context!),
        'Taxes': JsonConverters.toJson(Taxes,'List<SessionTotalDetailsBreakdownTax>',context!)
    });

    getTypeName() => "SessionTotalDetailsBreakdown";
    TypeContext? context = _ctx;
}

class SessionTotalDetails extends StripeEntity1<SessionTotalDetails> implements IConvertible
{
    int? AmountDiscount;
    int? AmountShipping;
    int? AmountTax;
    SessionTotalDetailsBreakdown? Breakdown;

    SessionTotalDetails({this.AmountDiscount,this.AmountShipping,this.AmountTax,this.Breakdown});
    SessionTotalDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountDiscount = json['AmountDiscount'];
        AmountShipping = json['AmountShipping'];
        AmountTax = json['AmountTax'];
        Breakdown = JsonConverters.fromJson(json['Breakdown'],'SessionTotalDetailsBreakdown',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountDiscount': AmountDiscount,
        'AmountShipping': AmountShipping,
        'AmountTax': AmountTax,
        'Breakdown': JsonConverters.toJson(Breakdown,'SessionTotalDetailsBreakdown',context!)
    });

    getTypeName() => "SessionTotalDetails";
    TypeContext? context = _ctx;
}

class Session extends StripeEntity1<Session> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    SessionAfterExpiration? AfterExpiration;
    bool? AllowPromotionCodes;
    int? AmountSubtotal;
    int? AmountTotal;
    SessionAutomaticTax? AutomaticTax;
    String? BillingAddressCollection;
    String? CancelUrl;
    String? ClientReferenceId;
    String? ClientSecret;
    SessionConsent? Consent;
    SessionConsentCollection? ConsentCollection;
    DateTime? Created;
    String? Currency;
    SessionCurrencyConversion? CurrencyConversion;
    List<SessionCustomField>? CustomFields;
    SessionCustomText? CustomText;
    String? CustomerCreation;
    SessionCustomerDetails? CustomerDetails;
    String? CustomerEmail;
    DateTime? ExpiresAt;
    SessionInvoiceCreation? InvoiceCreation;
    StripeList<LineItem>? LineItems;
    bool? Livemode;
    String? Locale;
    Map<String,String?>? Metadata;
    String? Mode;
    String? PaymentMethodCollection;
    SessionPaymentMethodConfigurationDetails? PaymentMethodConfigurationDetails;
    SessionPaymentMethodOptions? PaymentMethodOptions;
    List<String>? PaymentMethodTypes;
    String? PaymentStatus;
    SessionPhoneNumberCollection? PhoneNumberCollection;
    String? RecoveredFrom;
    String? RedirectOnCompletion;
    String? ReturnUrl;
    SessionSavedPaymentMethodOptions? SavedPaymentMethodOptions;
    SessionShippingAddressCollection? ShippingAddressCollection;
    SessionShippingCost? ShippingCost;
    SessionShippingDetails? ShippingDetails;
    List<SessionShippingOption>? ShippingOptions;
    String? Status;
    String? SubmitType;
    String? SuccessUrl;
    SessionTaxIdCollection? TaxIdCollection;
    SessionTotalDetails? TotalDetails;
    String? UiMode;
    String? Url;

    Session({this.Id,this.Object,this.AfterExpiration,this.AllowPromotionCodes,this.AmountSubtotal,this.AmountTotal,this.AutomaticTax,this.BillingAddressCollection,this.CancelUrl,this.ClientReferenceId,this.ClientSecret,this.Consent,this.ConsentCollection,this.Created,this.Currency,this.CurrencyConversion,this.CustomFields,this.CustomText,this.CustomerCreation,this.CustomerDetails,this.CustomerEmail,this.ExpiresAt,this.InvoiceCreation,this.LineItems,this.Livemode,this.Locale,this.Metadata,this.Mode,this.PaymentMethodCollection,this.PaymentMethodConfigurationDetails,this.PaymentMethodOptions,this.PaymentMethodTypes,this.PaymentStatus,this.PhoneNumberCollection,this.RecoveredFrom,this.RedirectOnCompletion,this.ReturnUrl,this.SavedPaymentMethodOptions,this.ShippingAddressCollection,this.ShippingCost,this.ShippingDetails,this.ShippingOptions,this.Status,this.SubmitType,this.SuccessUrl,this.TaxIdCollection,this.TotalDetails,this.UiMode,this.Url});
    Session.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        AfterExpiration = JsonConverters.fromJson(json['AfterExpiration'],'SessionAfterExpiration',context!);
        AllowPromotionCodes = json['AllowPromotionCodes'];
        AmountSubtotal = json['AmountSubtotal'];
        AmountTotal = json['AmountTotal'];
        AutomaticTax = JsonConverters.fromJson(json['AutomaticTax'],'SessionAutomaticTax',context!);
        BillingAddressCollection = json['BillingAddressCollection'];
        CancelUrl = json['CancelUrl'];
        ClientReferenceId = json['ClientReferenceId'];
        ClientSecret = json['ClientSecret'];
        Consent = JsonConverters.fromJson(json['Consent'],'SessionConsent',context!);
        ConsentCollection = JsonConverters.fromJson(json['ConsentCollection'],'SessionConsentCollection',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Currency = json['Currency'];
        CurrencyConversion = JsonConverters.fromJson(json['CurrencyConversion'],'SessionCurrencyConversion',context!);
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<SessionCustomField>',context!);
        CustomText = JsonConverters.fromJson(json['CustomText'],'SessionCustomText',context!);
        CustomerCreation = json['CustomerCreation'];
        CustomerDetails = JsonConverters.fromJson(json['CustomerDetails'],'SessionCustomerDetails',context!);
        CustomerEmail = json['CustomerEmail'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        InvoiceCreation = JsonConverters.fromJson(json['InvoiceCreation'],'SessionInvoiceCreation',context!);
        LineItems = JsonConverters.fromJson(json['LineItems'],'StripeList<LineItem>',context!);
        Livemode = json['Livemode'];
        Locale = json['Locale'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Mode = json['Mode'];
        PaymentMethodCollection = json['PaymentMethodCollection'];
        PaymentMethodConfigurationDetails = JsonConverters.fromJson(json['PaymentMethodConfigurationDetails'],'SessionPaymentMethodConfigurationDetails',context!);
        PaymentMethodOptions = JsonConverters.fromJson(json['PaymentMethodOptions'],'SessionPaymentMethodOptions',context!);
        PaymentMethodTypes = JsonConverters.fromJson(json['PaymentMethodTypes'],'List<String>',context!);
        PaymentStatus = json['PaymentStatus'];
        PhoneNumberCollection = JsonConverters.fromJson(json['PhoneNumberCollection'],'SessionPhoneNumberCollection',context!);
        RecoveredFrom = json['RecoveredFrom'];
        RedirectOnCompletion = json['RedirectOnCompletion'];
        ReturnUrl = json['ReturnUrl'];
        SavedPaymentMethodOptions = JsonConverters.fromJson(json['SavedPaymentMethodOptions'],'SessionSavedPaymentMethodOptions',context!);
        ShippingAddressCollection = JsonConverters.fromJson(json['ShippingAddressCollection'],'SessionShippingAddressCollection',context!);
        ShippingCost = JsonConverters.fromJson(json['ShippingCost'],'SessionShippingCost',context!);
        ShippingDetails = JsonConverters.fromJson(json['ShippingDetails'],'SessionShippingDetails',context!);
        ShippingOptions = JsonConverters.fromJson(json['ShippingOptions'],'List<SessionShippingOption>',context!);
        Status = json['Status'];
        SubmitType = json['SubmitType'];
        SuccessUrl = json['SuccessUrl'];
        TaxIdCollection = JsonConverters.fromJson(json['TaxIdCollection'],'SessionTaxIdCollection',context!);
        TotalDetails = JsonConverters.fromJson(json['TotalDetails'],'SessionTotalDetails',context!);
        UiMode = json['UiMode'];
        Url = json['Url'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'AfterExpiration': JsonConverters.toJson(AfterExpiration,'SessionAfterExpiration',context!),
        'AllowPromotionCodes': AllowPromotionCodes,
        'AmountSubtotal': AmountSubtotal,
        'AmountTotal': AmountTotal,
        'AutomaticTax': JsonConverters.toJson(AutomaticTax,'SessionAutomaticTax',context!),
        'BillingAddressCollection': BillingAddressCollection,
        'CancelUrl': CancelUrl,
        'ClientReferenceId': ClientReferenceId,
        'ClientSecret': ClientSecret,
        'Consent': JsonConverters.toJson(Consent,'SessionConsent',context!),
        'ConsentCollection': JsonConverters.toJson(ConsentCollection,'SessionConsentCollection',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Currency': Currency,
        'CurrencyConversion': JsonConverters.toJson(CurrencyConversion,'SessionCurrencyConversion',context!),
        'CustomFields': JsonConverters.toJson(CustomFields,'List<SessionCustomField>',context!),
        'CustomText': JsonConverters.toJson(CustomText,'SessionCustomText',context!),
        'CustomerCreation': CustomerCreation,
        'CustomerDetails': JsonConverters.toJson(CustomerDetails,'SessionCustomerDetails',context!),
        'CustomerEmail': CustomerEmail,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'InvoiceCreation': JsonConverters.toJson(InvoiceCreation,'SessionInvoiceCreation',context!),
        'LineItems': JsonConverters.toJson(LineItems,'StripeList<LineItem>',context!),
        'Livemode': Livemode,
        'Locale': Locale,
        'Metadata': Metadata,
        'Mode': Mode,
        'PaymentMethodCollection': PaymentMethodCollection,
        'PaymentMethodConfigurationDetails': JsonConverters.toJson(PaymentMethodConfigurationDetails,'SessionPaymentMethodConfigurationDetails',context!),
        'PaymentMethodOptions': JsonConverters.toJson(PaymentMethodOptions,'SessionPaymentMethodOptions',context!),
        'PaymentMethodTypes': JsonConverters.toJson(PaymentMethodTypes,'List<String>',context!),
        'PaymentStatus': PaymentStatus,
        'PhoneNumberCollection': JsonConverters.toJson(PhoneNumberCollection,'SessionPhoneNumberCollection',context!),
        'RecoveredFrom': RecoveredFrom,
        'RedirectOnCompletion': RedirectOnCompletion,
        'ReturnUrl': ReturnUrl,
        'SavedPaymentMethodOptions': JsonConverters.toJson(SavedPaymentMethodOptions,'SessionSavedPaymentMethodOptions',context!),
        'ShippingAddressCollection': JsonConverters.toJson(ShippingAddressCollection,'SessionShippingAddressCollection',context!),
        'ShippingCost': JsonConverters.toJson(ShippingCost,'SessionShippingCost',context!),
        'ShippingDetails': JsonConverters.toJson(ShippingDetails,'SessionShippingDetails',context!),
        'ShippingOptions': JsonConverters.toJson(ShippingOptions,'List<SessionShippingOption>',context!),
        'Status': Status,
        'SubmitType': SubmitType,
        'SuccessUrl': SuccessUrl,
        'TaxIdCollection': JsonConverters.toJson(TaxIdCollection,'SessionTaxIdCollection',context!),
        'TotalDetails': JsonConverters.toJson(TotalDetails,'SessionTotalDetails',context!),
        'UiMode': UiMode,
        'Url': Url
    });

    getTypeName() => "Session";
    TypeContext? context = _ctx;
}

class PaymentIntentAmountDetailsTip extends StripeEntity1<PaymentIntentAmountDetailsTip> implements IConvertible
{
    int? Amount;

    PaymentIntentAmountDetailsTip({this.Amount});
    PaymentIntentAmountDetailsTip.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount
    });

    getTypeName() => "PaymentIntentAmountDetailsTip";
    TypeContext? context = _ctx;
}

class PaymentIntentAmountDetails extends StripeEntity1<PaymentIntentAmountDetails> implements IConvertible
{
    PaymentIntentAmountDetailsTip? Tip;

    PaymentIntentAmountDetails({this.Tip});
    PaymentIntentAmountDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Tip = JsonConverters.fromJson(json['Tip'],'PaymentIntentAmountDetailsTip',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Tip': JsonConverters.toJson(Tip,'PaymentIntentAmountDetailsTip',context!)
    });

    getTypeName() => "PaymentIntentAmountDetails";
    TypeContext? context = _ctx;
}

class PaymentIntentAutomaticPaymentMethods extends StripeEntity1<PaymentIntentAutomaticPaymentMethods> implements IConvertible
{
    String? AllowRedirects;
    bool? Enabled;

    PaymentIntentAutomaticPaymentMethods({this.AllowRedirects,this.Enabled});
    PaymentIntentAutomaticPaymentMethods.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AllowRedirects = json['AllowRedirects'];
        Enabled = json['Enabled'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AllowRedirects': AllowRedirects,
        'Enabled': Enabled
    });

    getTypeName() => "PaymentIntentAutomaticPaymentMethods";
    TypeContext? context = _ctx;
}

class PaymentMethodAcssDebit extends StripeEntity1<PaymentMethodAcssDebit> implements IConvertible
{
    String? BankName;
    String? Fingerprint;
    String? InstitutionNumber;
    String? Last4;
    String? TransitNumber;

    PaymentMethodAcssDebit({this.BankName,this.Fingerprint,this.InstitutionNumber,this.Last4,this.TransitNumber});
    PaymentMethodAcssDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BankName = json['BankName'];
        Fingerprint = json['Fingerprint'];
        InstitutionNumber = json['InstitutionNumber'];
        Last4 = json['Last4'];
        TransitNumber = json['TransitNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BankName': BankName,
        'Fingerprint': Fingerprint,
        'InstitutionNumber': InstitutionNumber,
        'Last4': Last4,
        'TransitNumber': TransitNumber
    });

    getTypeName() => "PaymentMethodAcssDebit";
    TypeContext? context = _ctx;
}

class PaymentMethodAffirm extends StripeEntity1<PaymentMethodAffirm> implements IConvertible
{
    PaymentMethodAffirm();
    PaymentMethodAffirm.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodAffirm";
    TypeContext? context = _ctx;
}

class PaymentMethodAfterpayClearpay extends StripeEntity1<PaymentMethodAfterpayClearpay> implements IConvertible
{
    PaymentMethodAfterpayClearpay();
    PaymentMethodAfterpayClearpay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodAfterpayClearpay";
    TypeContext? context = _ctx;
}

class PaymentMethodAlipay extends StripeEntity1<PaymentMethodAlipay> implements IConvertible
{
    PaymentMethodAlipay();
    PaymentMethodAlipay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodAlipay";
    TypeContext? context = _ctx;
}

class PaymentMethodAmazonPay extends StripeEntity1<PaymentMethodAmazonPay> implements IConvertible
{
    PaymentMethodAmazonPay();
    PaymentMethodAmazonPay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodAmazonPay";
    TypeContext? context = _ctx;
}

class PaymentMethodAuBecsDebit extends StripeEntity1<PaymentMethodAuBecsDebit> implements IConvertible
{
    String? BsbNumber;
    String? Fingerprint;
    String? Last4;

    PaymentMethodAuBecsDebit({this.BsbNumber,this.Fingerprint,this.Last4});
    PaymentMethodAuBecsDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BsbNumber = json['BsbNumber'];
        Fingerprint = json['Fingerprint'];
        Last4 = json['Last4'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BsbNumber': BsbNumber,
        'Fingerprint': Fingerprint,
        'Last4': Last4
    });

    getTypeName() => "PaymentMethodAuBecsDebit";
    TypeContext? context = _ctx;
}

class PaymentMethodBacsDebit extends StripeEntity1<PaymentMethodBacsDebit> implements IConvertible
{
    String? Fingerprint;
    String? Last4;
    String? SortCode;

    PaymentMethodBacsDebit({this.Fingerprint,this.Last4,this.SortCode});
    PaymentMethodBacsDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Fingerprint = json['Fingerprint'];
        Last4 = json['Last4'];
        SortCode = json['SortCode'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Fingerprint': Fingerprint,
        'Last4': Last4,
        'SortCode': SortCode
    });

    getTypeName() => "PaymentMethodBacsDebit";
    TypeContext? context = _ctx;
}

class PaymentMethodBancontact extends StripeEntity1<PaymentMethodBancontact> implements IConvertible
{
    PaymentMethodBancontact();
    PaymentMethodBancontact.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodBancontact";
    TypeContext? context = _ctx;
}

class PaymentMethodBillingDetails extends StripeEntity1<PaymentMethodBillingDetails> implements IConvertible
{
    Address? Address;
    String? Email;
    String? Name;
    String? Phone;

    PaymentMethodBillingDetails({this.Address,this.Email,this.Name,this.Phone});
    PaymentMethodBillingDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        Email = json['Email'];
        Name = json['Name'];
        Phone = json['Phone'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'Email': Email,
        'Name': Name,
        'Phone': Phone
    });

    getTypeName() => "PaymentMethodBillingDetails";
    TypeContext? context = _ctx;
}

class PaymentMethodBlik extends StripeEntity1<PaymentMethodBlik> implements IConvertible
{
    PaymentMethodBlik();
    PaymentMethodBlik.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodBlik";
    TypeContext? context = _ctx;
}

class PaymentMethodBoleto extends StripeEntity1<PaymentMethodBoleto> implements IConvertible
{
    String? TaxId;

    PaymentMethodBoleto({this.TaxId});
    PaymentMethodBoleto.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        TaxId = json['TaxId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'TaxId': TaxId
    });

    getTypeName() => "PaymentMethodBoleto";
    TypeContext? context = _ctx;
}

class PaymentMethodCardChecks extends StripeEntity1<PaymentMethodCardChecks> implements IConvertible
{
    String? AddressLine1Check;
    String? AddressPostalCodeCheck;
    String? CvcCheck;

    PaymentMethodCardChecks({this.AddressLine1Check,this.AddressPostalCodeCheck,this.CvcCheck});
    PaymentMethodCardChecks.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AddressLine1Check = json['AddressLine1Check'];
        AddressPostalCodeCheck = json['AddressPostalCodeCheck'];
        CvcCheck = json['CvcCheck'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AddressLine1Check': AddressLine1Check,
        'AddressPostalCodeCheck': AddressPostalCodeCheck,
        'CvcCheck': CvcCheck
    });

    getTypeName() => "PaymentMethodCardChecks";
    TypeContext? context = _ctx;
}

class PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline extends StripeEntity1<PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline> implements IConvertible
{
    DateTime? StoredAt;
    String? Type;

    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline({this.StoredAt,this.Type});
    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        StoredAt = JsonConverters.fromJson(json['StoredAt'],'DateTime',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'StoredAt': JsonConverters.toJson(StoredAt,'DateTime',context!),
        'Type': Type
    });

    getTypeName() => "PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline";
    TypeContext? context = _ctx;
}

class PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt extends StripeEntity1<PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt> implements IConvertible
{
    String? AccountType;
    String? ApplicationCryptogram;
    String? ApplicationPreferredName;
    String? AuthorizationCode;
    String? AuthorizationResponseCode;
    String? CardholderVerificationMethod;
    String? DedicatedFileName;
    String? TerminalVerificationResults;
    String? TransactionStatusInformation;

    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt({this.AccountType,this.ApplicationCryptogram,this.ApplicationPreferredName,this.AuthorizationCode,this.AuthorizationResponseCode,this.CardholderVerificationMethod,this.DedicatedFileName,this.TerminalVerificationResults,this.TransactionStatusInformation});
    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountType = json['AccountType'];
        ApplicationCryptogram = json['ApplicationCryptogram'];
        ApplicationPreferredName = json['ApplicationPreferredName'];
        AuthorizationCode = json['AuthorizationCode'];
        AuthorizationResponseCode = json['AuthorizationResponseCode'];
        CardholderVerificationMethod = json['CardholderVerificationMethod'];
        DedicatedFileName = json['DedicatedFileName'];
        TerminalVerificationResults = json['TerminalVerificationResults'];
        TransactionStatusInformation = json['TransactionStatusInformation'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountType': AccountType,
        'ApplicationCryptogram': ApplicationCryptogram,
        'ApplicationPreferredName': ApplicationPreferredName,
        'AuthorizationCode': AuthorizationCode,
        'AuthorizationResponseCode': AuthorizationResponseCode,
        'CardholderVerificationMethod': CardholderVerificationMethod,
        'DedicatedFileName': DedicatedFileName,
        'TerminalVerificationResults': TerminalVerificationResults,
        'TransactionStatusInformation': TransactionStatusInformation
    });

    getTypeName() => "PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt";
    TypeContext? context = _ctx;
}

class PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet extends StripeEntity1<PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet> implements IConvertible
{
    String? Type;

    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet({this.Type});
    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Type': Type
    });

    getTypeName() => "PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet";
    TypeContext? context = _ctx;
}

class PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent extends StripeEntity1<PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent> implements IConvertible
{
    int? AmountAuthorized;
    String? Brand;
    String? BrandProduct;
    DateTime? CaptureBefore;
    String? CardholderName;
    String? Country;
    String? Description;
    String? EmvAuthData;
    int? ExpMonth;
    int? ExpYear;
    String? Fingerprint;
    String? Funding;
    String? GeneratedCard;
    String? Iin;
    bool? IncrementalAuthorizationSupported;
    String? Issuer;
    String? Last4;
    String? Network;
    String? NetworkTransactionId;
    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline? Offline;
    bool? OvercaptureSupported;
    List<String>? PreferredLocales;
    String? ReadMethod;
    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt? Receipt;
    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet? Wallet;

    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent({this.AmountAuthorized,this.Brand,this.BrandProduct,this.CaptureBefore,this.CardholderName,this.Country,this.Description,this.EmvAuthData,this.ExpMonth,this.ExpYear,this.Fingerprint,this.Funding,this.GeneratedCard,this.Iin,this.IncrementalAuthorizationSupported,this.Issuer,this.Last4,this.Network,this.NetworkTransactionId,this.Offline,this.OvercaptureSupported,this.PreferredLocales,this.ReadMethod,this.Receipt,this.Wallet});
    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountAuthorized = json['AmountAuthorized'];
        Brand = json['Brand'];
        BrandProduct = json['BrandProduct'];
        CaptureBefore = JsonConverters.fromJson(json['CaptureBefore'],'DateTime',context!);
        CardholderName = json['CardholderName'];
        Country = json['Country'];
        Description = json['Description'];
        EmvAuthData = json['EmvAuthData'];
        ExpMonth = json['ExpMonth'];
        ExpYear = json['ExpYear'];
        Fingerprint = json['Fingerprint'];
        Funding = json['Funding'];
        GeneratedCard = json['GeneratedCard'];
        Iin = json['Iin'];
        IncrementalAuthorizationSupported = json['IncrementalAuthorizationSupported'];
        Issuer = json['Issuer'];
        Last4 = json['Last4'];
        Network = json['Network'];
        NetworkTransactionId = json['NetworkTransactionId'];
        Offline = JsonConverters.fromJson(json['Offline'],'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline',context!);
        OvercaptureSupported = json['OvercaptureSupported'];
        PreferredLocales = JsonConverters.fromJson(json['PreferredLocales'],'List<String>',context!);
        ReadMethod = json['ReadMethod'];
        Receipt = JsonConverters.fromJson(json['Receipt'],'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt',context!);
        Wallet = JsonConverters.fromJson(json['Wallet'],'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountAuthorized': AmountAuthorized,
        'Brand': Brand,
        'BrandProduct': BrandProduct,
        'CaptureBefore': JsonConverters.toJson(CaptureBefore,'DateTime',context!),
        'CardholderName': CardholderName,
        'Country': Country,
        'Description': Description,
        'EmvAuthData': EmvAuthData,
        'ExpMonth': ExpMonth,
        'ExpYear': ExpYear,
        'Fingerprint': Fingerprint,
        'Funding': Funding,
        'GeneratedCard': GeneratedCard,
        'Iin': Iin,
        'IncrementalAuthorizationSupported': IncrementalAuthorizationSupported,
        'Issuer': Issuer,
        'Last4': Last4,
        'Network': Network,
        'NetworkTransactionId': NetworkTransactionId,
        'Offline': JsonConverters.toJson(Offline,'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline',context!),
        'OvercaptureSupported': OvercaptureSupported,
        'PreferredLocales': JsonConverters.toJson(PreferredLocales,'List<String>',context!),
        'ReadMethod': ReadMethod,
        'Receipt': JsonConverters.toJson(Receipt,'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt',context!),
        'Wallet': JsonConverters.toJson(Wallet,'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet',context!)
    });

    getTypeName() => "PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent";
    TypeContext? context = _ctx;
}

class PaymentMethodCardGeneratedFromPaymentMethodDetails extends StripeEntity1<PaymentMethodCardGeneratedFromPaymentMethodDetails> implements IConvertible
{
    PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent? CardPresent;
    String? Type;

    PaymentMethodCardGeneratedFromPaymentMethodDetails({this.CardPresent,this.Type});
    PaymentMethodCardGeneratedFromPaymentMethodDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CardPresent = JsonConverters.fromJson(json['CardPresent'],'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CardPresent': JsonConverters.toJson(CardPresent,'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent',context!),
        'Type': Type
    });

    getTypeName() => "PaymentMethodCardGeneratedFromPaymentMethodDetails";
    TypeContext? context = _ctx;
}

class PaymentMethodCardGeneratedFrom extends StripeEntity1<PaymentMethodCardGeneratedFrom> implements IConvertible
{
    String? Charge;
    PaymentMethodCardGeneratedFromPaymentMethodDetails? PaymentMethodDetails;

    PaymentMethodCardGeneratedFrom({this.Charge,this.PaymentMethodDetails});
    PaymentMethodCardGeneratedFrom.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Charge = json['Charge'];
        PaymentMethodDetails = JsonConverters.fromJson(json['PaymentMethodDetails'],'PaymentMethodCardGeneratedFromPaymentMethodDetails',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Charge': Charge,
        'PaymentMethodDetails': JsonConverters.toJson(PaymentMethodDetails,'PaymentMethodCardGeneratedFromPaymentMethodDetails',context!)
    });

    getTypeName() => "PaymentMethodCardGeneratedFrom";
    TypeContext? context = _ctx;
}

class PaymentMethodCardNetworks extends StripeEntity1<PaymentMethodCardNetworks> implements IConvertible
{
    List<String>? Available;
    String? Preferred;

    PaymentMethodCardNetworks({this.Available,this.Preferred});
    PaymentMethodCardNetworks.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Available = JsonConverters.fromJson(json['Available'],'List<String>',context!);
        Preferred = json['Preferred'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Available': JsonConverters.toJson(Available,'List<String>',context!),
        'Preferred': Preferred
    });

    getTypeName() => "PaymentMethodCardNetworks";
    TypeContext? context = _ctx;
}

class PaymentMethodCardThreeDSecureUsage extends StripeEntity1<PaymentMethodCardThreeDSecureUsage> implements IConvertible
{
    bool? Supported;

    PaymentMethodCardThreeDSecureUsage({this.Supported});
    PaymentMethodCardThreeDSecureUsage.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Supported = json['Supported'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Supported': Supported
    });

    getTypeName() => "PaymentMethodCardThreeDSecureUsage";
    TypeContext? context = _ctx;
}

class PaymentMethodCardWalletAmexExpressCheckout extends StripeEntity1<PaymentMethodCardWalletAmexExpressCheckout> implements IConvertible
{
    PaymentMethodCardWalletAmexExpressCheckout();
    PaymentMethodCardWalletAmexExpressCheckout.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodCardWalletAmexExpressCheckout";
    TypeContext? context = _ctx;
}

class PaymentMethodCardWalletApplePay extends StripeEntity1<PaymentMethodCardWalletApplePay> implements IConvertible
{
    PaymentMethodCardWalletApplePay();
    PaymentMethodCardWalletApplePay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodCardWalletApplePay";
    TypeContext? context = _ctx;
}

class PaymentMethodCardWalletGooglePay extends StripeEntity1<PaymentMethodCardWalletGooglePay> implements IConvertible
{
    PaymentMethodCardWalletGooglePay();
    PaymentMethodCardWalletGooglePay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodCardWalletGooglePay";
    TypeContext? context = _ctx;
}

class PaymentMethodCardWalletLink extends StripeEntity1<PaymentMethodCardWalletLink> implements IConvertible
{
    PaymentMethodCardWalletLink();
    PaymentMethodCardWalletLink.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodCardWalletLink";
    TypeContext? context = _ctx;
}

class PaymentMethodCardWalletMasterpass extends StripeEntity1<PaymentMethodCardWalletMasterpass> implements IConvertible
{
    Address? BillingAddress;
    String? Email;
    String? Name;
    Address? ShippingAddress;

    PaymentMethodCardWalletMasterpass({this.BillingAddress,this.Email,this.Name,this.ShippingAddress});
    PaymentMethodCardWalletMasterpass.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BillingAddress = JsonConverters.fromJson(json['BillingAddress'],'Address',context!);
        Email = json['Email'];
        Name = json['Name'];
        ShippingAddress = JsonConverters.fromJson(json['ShippingAddress'],'Address',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BillingAddress': JsonConverters.toJson(BillingAddress,'Address',context!),
        'Email': Email,
        'Name': Name,
        'ShippingAddress': JsonConverters.toJson(ShippingAddress,'Address',context!)
    });

    getTypeName() => "PaymentMethodCardWalletMasterpass";
    TypeContext? context = _ctx;
}

class PaymentMethodCardWalletSamsungPay extends StripeEntity1<PaymentMethodCardWalletSamsungPay> implements IConvertible
{
    PaymentMethodCardWalletSamsungPay();
    PaymentMethodCardWalletSamsungPay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodCardWalletSamsungPay";
    TypeContext? context = _ctx;
}

class PaymentMethodCardWalletVisaCheckout extends StripeEntity1<PaymentMethodCardWalletVisaCheckout> implements IConvertible
{
    Address? BillingAddress;
    String? Email;
    String? Name;
    Address? ShippingAddress;

    PaymentMethodCardWalletVisaCheckout({this.BillingAddress,this.Email,this.Name,this.ShippingAddress});
    PaymentMethodCardWalletVisaCheckout.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BillingAddress = JsonConverters.fromJson(json['BillingAddress'],'Address',context!);
        Email = json['Email'];
        Name = json['Name'];
        ShippingAddress = JsonConverters.fromJson(json['ShippingAddress'],'Address',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BillingAddress': JsonConverters.toJson(BillingAddress,'Address',context!),
        'Email': Email,
        'Name': Name,
        'ShippingAddress': JsonConverters.toJson(ShippingAddress,'Address',context!)
    });

    getTypeName() => "PaymentMethodCardWalletVisaCheckout";
    TypeContext? context = _ctx;
}

class PaymentMethodCardWallet extends StripeEntity1<PaymentMethodCardWallet> implements IConvertible
{
    PaymentMethodCardWalletAmexExpressCheckout? AmexExpressCheckout;
    PaymentMethodCardWalletApplePay? ApplePay;
    String? DynamicLast4;
    PaymentMethodCardWalletGooglePay? GooglePay;
    PaymentMethodCardWalletLink? Link;
    PaymentMethodCardWalletMasterpass? Masterpass;
    PaymentMethodCardWalletSamsungPay? SamsungPay;
    String? Type;
    PaymentMethodCardWalletVisaCheckout? VisaCheckout;

    PaymentMethodCardWallet({this.AmexExpressCheckout,this.ApplePay,this.DynamicLast4,this.GooglePay,this.Link,this.Masterpass,this.SamsungPay,this.Type,this.VisaCheckout});
    PaymentMethodCardWallet.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmexExpressCheckout = JsonConverters.fromJson(json['AmexExpressCheckout'],'PaymentMethodCardWalletAmexExpressCheckout',context!);
        ApplePay = JsonConverters.fromJson(json['ApplePay'],'PaymentMethodCardWalletApplePay',context!);
        DynamicLast4 = json['DynamicLast4'];
        GooglePay = JsonConverters.fromJson(json['GooglePay'],'PaymentMethodCardWalletGooglePay',context!);
        Link = JsonConverters.fromJson(json['Link'],'PaymentMethodCardWalletLink',context!);
        Masterpass = JsonConverters.fromJson(json['Masterpass'],'PaymentMethodCardWalletMasterpass',context!);
        SamsungPay = JsonConverters.fromJson(json['SamsungPay'],'PaymentMethodCardWalletSamsungPay',context!);
        Type = json['Type'];
        VisaCheckout = JsonConverters.fromJson(json['VisaCheckout'],'PaymentMethodCardWalletVisaCheckout',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmexExpressCheckout': JsonConverters.toJson(AmexExpressCheckout,'PaymentMethodCardWalletAmexExpressCheckout',context!),
        'ApplePay': JsonConverters.toJson(ApplePay,'PaymentMethodCardWalletApplePay',context!),
        'DynamicLast4': DynamicLast4,
        'GooglePay': JsonConverters.toJson(GooglePay,'PaymentMethodCardWalletGooglePay',context!),
        'Link': JsonConverters.toJson(Link,'PaymentMethodCardWalletLink',context!),
        'Masterpass': JsonConverters.toJson(Masterpass,'PaymentMethodCardWalletMasterpass',context!),
        'SamsungPay': JsonConverters.toJson(SamsungPay,'PaymentMethodCardWalletSamsungPay',context!),
        'Type': Type,
        'VisaCheckout': JsonConverters.toJson(VisaCheckout,'PaymentMethodCardWalletVisaCheckout',context!)
    });

    getTypeName() => "PaymentMethodCardWallet";
    TypeContext? context = _ctx;
}

class PaymentMethodCard extends StripeEntity1<PaymentMethodCard> implements IConvertible
{
    String? Brand;
    PaymentMethodCardChecks? Checks;
    String? Country;
    String? Description;
    String? DisplayBrand;
    int? ExpMonth;
    int? ExpYear;
    String? Fingerprint;
    String? Funding;
    PaymentMethodCardGeneratedFrom? GeneratedFrom;
    String? Iin;
    String? Issuer;
    String? Last4;
    PaymentMethodCardNetworks? Networks;
    PaymentMethodCardThreeDSecureUsage? ThreeDSecureUsage;
    PaymentMethodCardWallet? Wallet;

    PaymentMethodCard({this.Brand,this.Checks,this.Country,this.Description,this.DisplayBrand,this.ExpMonth,this.ExpYear,this.Fingerprint,this.Funding,this.GeneratedFrom,this.Iin,this.Issuer,this.Last4,this.Networks,this.ThreeDSecureUsage,this.Wallet});
    PaymentMethodCard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Brand = json['Brand'];
        Checks = JsonConverters.fromJson(json['Checks'],'PaymentMethodCardChecks',context!);
        Country = json['Country'];
        Description = json['Description'];
        DisplayBrand = json['DisplayBrand'];
        ExpMonth = json['ExpMonth'];
        ExpYear = json['ExpYear'];
        Fingerprint = json['Fingerprint'];
        Funding = json['Funding'];
        GeneratedFrom = JsonConverters.fromJson(json['GeneratedFrom'],'PaymentMethodCardGeneratedFrom',context!);
        Iin = json['Iin'];
        Issuer = json['Issuer'];
        Last4 = json['Last4'];
        Networks = JsonConverters.fromJson(json['Networks'],'PaymentMethodCardNetworks',context!);
        ThreeDSecureUsage = JsonConverters.fromJson(json['ThreeDSecureUsage'],'PaymentMethodCardThreeDSecureUsage',context!);
        Wallet = JsonConverters.fromJson(json['Wallet'],'PaymentMethodCardWallet',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Brand': Brand,
        'Checks': JsonConverters.toJson(Checks,'PaymentMethodCardChecks',context!),
        'Country': Country,
        'Description': Description,
        'DisplayBrand': DisplayBrand,
        'ExpMonth': ExpMonth,
        'ExpYear': ExpYear,
        'Fingerprint': Fingerprint,
        'Funding': Funding,
        'GeneratedFrom': JsonConverters.toJson(GeneratedFrom,'PaymentMethodCardGeneratedFrom',context!),
        'Iin': Iin,
        'Issuer': Issuer,
        'Last4': Last4,
        'Networks': JsonConverters.toJson(Networks,'PaymentMethodCardNetworks',context!),
        'ThreeDSecureUsage': JsonConverters.toJson(ThreeDSecureUsage,'PaymentMethodCardThreeDSecureUsage',context!),
        'Wallet': JsonConverters.toJson(Wallet,'PaymentMethodCardWallet',context!)
    });

    getTypeName() => "PaymentMethodCard";
    TypeContext? context = _ctx;
}

class PaymentMethodCardPresentNetworks extends StripeEntity1<PaymentMethodCardPresentNetworks> implements IConvertible
{
    List<String>? Available;
    String? Preferred;

    PaymentMethodCardPresentNetworks({this.Available,this.Preferred});
    PaymentMethodCardPresentNetworks.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Available = JsonConverters.fromJson(json['Available'],'List<String>',context!);
        Preferred = json['Preferred'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Available': JsonConverters.toJson(Available,'List<String>',context!),
        'Preferred': Preferred
    });

    getTypeName() => "PaymentMethodCardPresentNetworks";
    TypeContext? context = _ctx;
}

class PaymentMethodCardPresentOffline extends StripeEntity1<PaymentMethodCardPresentOffline> implements IConvertible
{
    DateTime? StoredAt;
    String? Type;

    PaymentMethodCardPresentOffline({this.StoredAt,this.Type});
    PaymentMethodCardPresentOffline.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        StoredAt = JsonConverters.fromJson(json['StoredAt'],'DateTime',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'StoredAt': JsonConverters.toJson(StoredAt,'DateTime',context!),
        'Type': Type
    });

    getTypeName() => "PaymentMethodCardPresentOffline";
    TypeContext? context = _ctx;
}

class PaymentMethodCardPresentWallet extends StripeEntity1<PaymentMethodCardPresentWallet> implements IConvertible
{
    String? Type;

    PaymentMethodCardPresentWallet({this.Type});
    PaymentMethodCardPresentWallet.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Type': Type
    });

    getTypeName() => "PaymentMethodCardPresentWallet";
    TypeContext? context = _ctx;
}

class PaymentMethodCardPresent extends StripeEntity1<PaymentMethodCardPresent> implements IConvertible
{
    String? Brand;
    String? BrandProduct;
    String? CardholderName;
    String? Country;
    String? Description;
    int? ExpMonth;
    int? ExpYear;
    String? Fingerprint;
    String? Funding;
    String? Iin;
    String? Issuer;
    String? Last4;
    PaymentMethodCardPresentNetworks? Networks;
    PaymentMethodCardPresentOffline? Offline;
    List<String>? PreferredLocales;
    String? ReadMethod;
    PaymentMethodCardPresentWallet? Wallet;

    PaymentMethodCardPresent({this.Brand,this.BrandProduct,this.CardholderName,this.Country,this.Description,this.ExpMonth,this.ExpYear,this.Fingerprint,this.Funding,this.Iin,this.Issuer,this.Last4,this.Networks,this.Offline,this.PreferredLocales,this.ReadMethod,this.Wallet});
    PaymentMethodCardPresent.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Brand = json['Brand'];
        BrandProduct = json['BrandProduct'];
        CardholderName = json['CardholderName'];
        Country = json['Country'];
        Description = json['Description'];
        ExpMonth = json['ExpMonth'];
        ExpYear = json['ExpYear'];
        Fingerprint = json['Fingerprint'];
        Funding = json['Funding'];
        Iin = json['Iin'];
        Issuer = json['Issuer'];
        Last4 = json['Last4'];
        Networks = JsonConverters.fromJson(json['Networks'],'PaymentMethodCardPresentNetworks',context!);
        Offline = JsonConverters.fromJson(json['Offline'],'PaymentMethodCardPresentOffline',context!);
        PreferredLocales = JsonConverters.fromJson(json['PreferredLocales'],'List<String>',context!);
        ReadMethod = json['ReadMethod'];
        Wallet = JsonConverters.fromJson(json['Wallet'],'PaymentMethodCardPresentWallet',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Brand': Brand,
        'BrandProduct': BrandProduct,
        'CardholderName': CardholderName,
        'Country': Country,
        'Description': Description,
        'ExpMonth': ExpMonth,
        'ExpYear': ExpYear,
        'Fingerprint': Fingerprint,
        'Funding': Funding,
        'Iin': Iin,
        'Issuer': Issuer,
        'Last4': Last4,
        'Networks': JsonConverters.toJson(Networks,'PaymentMethodCardPresentNetworks',context!),
        'Offline': JsonConverters.toJson(Offline,'PaymentMethodCardPresentOffline',context!),
        'PreferredLocales': JsonConverters.toJson(PreferredLocales,'List<String>',context!),
        'ReadMethod': ReadMethod,
        'Wallet': JsonConverters.toJson(Wallet,'PaymentMethodCardPresentWallet',context!)
    });

    getTypeName() => "PaymentMethodCardPresent";
    TypeContext? context = _ctx;
}

class PaymentMethodCashapp extends StripeEntity1<PaymentMethodCashapp> implements IConvertible
{
    String? BuyerId;
    String? Cashtag;

    PaymentMethodCashapp({this.BuyerId,this.Cashtag});
    PaymentMethodCashapp.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BuyerId = json['BuyerId'];
        Cashtag = json['Cashtag'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BuyerId': BuyerId,
        'Cashtag': Cashtag
    });

    getTypeName() => "PaymentMethodCashapp";
    TypeContext? context = _ctx;
}

class PaymentMethodCustomerBalance extends StripeEntity1<PaymentMethodCustomerBalance> implements IConvertible
{
    PaymentMethodCustomerBalance();
    PaymentMethodCustomerBalance.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodCustomerBalance";
    TypeContext? context = _ctx;
}

class PaymentMethodEps extends StripeEntity1<PaymentMethodEps> implements IConvertible
{
    String? Bank;

    PaymentMethodEps({this.Bank});
    PaymentMethodEps.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Bank = json['Bank'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Bank': Bank
    });

    getTypeName() => "PaymentMethodEps";
    TypeContext? context = _ctx;
}

class PaymentMethodFpx extends StripeEntity1<PaymentMethodFpx> implements IConvertible
{
    String? AccountHolderType;
    String? Bank;

    PaymentMethodFpx({this.AccountHolderType,this.Bank});
    PaymentMethodFpx.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountHolderType = json['AccountHolderType'];
        Bank = json['Bank'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountHolderType': AccountHolderType,
        'Bank': Bank
    });

    getTypeName() => "PaymentMethodFpx";
    TypeContext? context = _ctx;
}

class PaymentMethodGiropay extends StripeEntity1<PaymentMethodGiropay> implements IConvertible
{
    PaymentMethodGiropay();
    PaymentMethodGiropay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodGiropay";
    TypeContext? context = _ctx;
}

class PaymentMethodGrabpay extends StripeEntity1<PaymentMethodGrabpay> implements IConvertible
{
    PaymentMethodGrabpay();
    PaymentMethodGrabpay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodGrabpay";
    TypeContext? context = _ctx;
}

class PaymentMethodIdeal extends StripeEntity1<PaymentMethodIdeal> implements IConvertible
{
    String? Bank;
    String? Bic;

    PaymentMethodIdeal({this.Bank,this.Bic});
    PaymentMethodIdeal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Bank = json['Bank'];
        Bic = json['Bic'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Bank': Bank,
        'Bic': Bic
    });

    getTypeName() => "PaymentMethodIdeal";
    TypeContext? context = _ctx;
}

class PaymentMethodInteracPresentNetworks extends StripeEntity1<PaymentMethodInteracPresentNetworks> implements IConvertible
{
    List<String>? Available;
    String? Preferred;

    PaymentMethodInteracPresentNetworks({this.Available,this.Preferred});
    PaymentMethodInteracPresentNetworks.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Available = JsonConverters.fromJson(json['Available'],'List<String>',context!);
        Preferred = json['Preferred'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Available': JsonConverters.toJson(Available,'List<String>',context!),
        'Preferred': Preferred
    });

    getTypeName() => "PaymentMethodInteracPresentNetworks";
    TypeContext? context = _ctx;
}

class PaymentMethodInteracPresent extends StripeEntity1<PaymentMethodInteracPresent> implements IConvertible
{
    String? Brand;
    String? CardholderName;
    String? Country;
    String? Description;
    int? ExpMonth;
    int? ExpYear;
    String? Fingerprint;
    String? Funding;
    String? Iin;
    String? Issuer;
    String? Last4;
    PaymentMethodInteracPresentNetworks? Networks;
    List<String>? PreferredLocales;
    String? ReadMethod;

    PaymentMethodInteracPresent({this.Brand,this.CardholderName,this.Country,this.Description,this.ExpMonth,this.ExpYear,this.Fingerprint,this.Funding,this.Iin,this.Issuer,this.Last4,this.Networks,this.PreferredLocales,this.ReadMethod});
    PaymentMethodInteracPresent.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Brand = json['Brand'];
        CardholderName = json['CardholderName'];
        Country = json['Country'];
        Description = json['Description'];
        ExpMonth = json['ExpMonth'];
        ExpYear = json['ExpYear'];
        Fingerprint = json['Fingerprint'];
        Funding = json['Funding'];
        Iin = json['Iin'];
        Issuer = json['Issuer'];
        Last4 = json['Last4'];
        Networks = JsonConverters.fromJson(json['Networks'],'PaymentMethodInteracPresentNetworks',context!);
        PreferredLocales = JsonConverters.fromJson(json['PreferredLocales'],'List<String>',context!);
        ReadMethod = json['ReadMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Brand': Brand,
        'CardholderName': CardholderName,
        'Country': Country,
        'Description': Description,
        'ExpMonth': ExpMonth,
        'ExpYear': ExpYear,
        'Fingerprint': Fingerprint,
        'Funding': Funding,
        'Iin': Iin,
        'Issuer': Issuer,
        'Last4': Last4,
        'Networks': JsonConverters.toJson(Networks,'PaymentMethodInteracPresentNetworks',context!),
        'PreferredLocales': JsonConverters.toJson(PreferredLocales,'List<String>',context!),
        'ReadMethod': ReadMethod
    });

    getTypeName() => "PaymentMethodInteracPresent";
    TypeContext? context = _ctx;
}

class PaymentMethodKlarnaDob extends StripeEntity1<PaymentMethodKlarnaDob> implements IConvertible
{
    int? Day;
    int? Month;
    int? Year;

    PaymentMethodKlarnaDob({this.Day,this.Month,this.Year});
    PaymentMethodKlarnaDob.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Day = json['Day'];
        Month = json['Month'];
        Year = json['Year'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Day': Day,
        'Month': Month,
        'Year': Year
    });

    getTypeName() => "PaymentMethodKlarnaDob";
    TypeContext? context = _ctx;
}

class PaymentMethodKlarna extends StripeEntity1<PaymentMethodKlarna> implements IConvertible
{
    PaymentMethodKlarnaDob? Dob;

    PaymentMethodKlarna({this.Dob});
    PaymentMethodKlarna.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Dob = JsonConverters.fromJson(json['Dob'],'PaymentMethodKlarnaDob',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Dob': JsonConverters.toJson(Dob,'PaymentMethodKlarnaDob',context!)
    });

    getTypeName() => "PaymentMethodKlarna";
    TypeContext? context = _ctx;
}

class PaymentMethodKonbini extends StripeEntity1<PaymentMethodKonbini> implements IConvertible
{
    PaymentMethodKonbini();
    PaymentMethodKonbini.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodKonbini";
    TypeContext? context = _ctx;
}

class PaymentMethodLink extends StripeEntity1<PaymentMethodLink> implements IConvertible
{
    String? Email;
    String? PersistentToken;

    PaymentMethodLink({this.Email,this.PersistentToken});
    PaymentMethodLink.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Email = json['Email'];
        PersistentToken = json['PersistentToken'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Email': Email,
        'PersistentToken': PersistentToken
    });

    getTypeName() => "PaymentMethodLink";
    TypeContext? context = _ctx;
}

class PaymentMethodMobilepay extends StripeEntity1<PaymentMethodMobilepay> implements IConvertible
{
    PaymentMethodMobilepay();
    PaymentMethodMobilepay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodMobilepay";
    TypeContext? context = _ctx;
}

class PaymentMethodMultibanco extends StripeEntity1<PaymentMethodMultibanco> implements IConvertible
{
    PaymentMethodMultibanco();
    PaymentMethodMultibanco.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodMultibanco";
    TypeContext? context = _ctx;
}

class PaymentMethodOxxo extends StripeEntity1<PaymentMethodOxxo> implements IConvertible
{
    PaymentMethodOxxo();
    PaymentMethodOxxo.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodOxxo";
    TypeContext? context = _ctx;
}

class PaymentMethodP24 extends StripeEntity1<PaymentMethodP24> implements IConvertible
{
    String? Bank;

    PaymentMethodP24({this.Bank});
    PaymentMethodP24.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Bank = json['Bank'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Bank': Bank
    });

    getTypeName() => "PaymentMethodP24";
    TypeContext? context = _ctx;
}

class PaymentMethodPaynow extends StripeEntity1<PaymentMethodPaynow> implements IConvertible
{
    PaymentMethodPaynow();
    PaymentMethodPaynow.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodPaynow";
    TypeContext? context = _ctx;
}

class PaymentMethodPaypal extends StripeEntity1<PaymentMethodPaypal> implements IConvertible
{
    String? PayerEmail;
    String? PayerId;

    PaymentMethodPaypal({this.PayerEmail,this.PayerId});
    PaymentMethodPaypal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        PayerEmail = json['PayerEmail'];
        PayerId = json['PayerId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'PayerEmail': PayerEmail,
        'PayerId': PayerId
    });

    getTypeName() => "PaymentMethodPaypal";
    TypeContext? context = _ctx;
}

class PaymentMethodPix extends StripeEntity1<PaymentMethodPix> implements IConvertible
{
    PaymentMethodPix();
    PaymentMethodPix.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodPix";
    TypeContext? context = _ctx;
}

class PaymentMethodPromptpay extends StripeEntity1<PaymentMethodPromptpay> implements IConvertible
{
    PaymentMethodPromptpay();
    PaymentMethodPromptpay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodPromptpay";
    TypeContext? context = _ctx;
}

class PaymentMethodRadarOptions extends StripeEntity1<PaymentMethodRadarOptions> implements IConvertible
{
    String? Session;

    PaymentMethodRadarOptions({this.Session});
    PaymentMethodRadarOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Session = json['Session'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Session': Session
    });

    getTypeName() => "PaymentMethodRadarOptions";
    TypeContext? context = _ctx;
}

class PaymentMethodRevolutPay extends StripeEntity1<PaymentMethodRevolutPay> implements IConvertible
{
    PaymentMethodRevolutPay();
    PaymentMethodRevolutPay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodRevolutPay";
    TypeContext? context = _ctx;
}

class PaymentMethodSepaDebitGeneratedFrom extends StripeEntity1<PaymentMethodSepaDebitGeneratedFrom> implements IConvertible
{
    PaymentMethodSepaDebitGeneratedFrom();
    PaymentMethodSepaDebitGeneratedFrom.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodSepaDebitGeneratedFrom";
    TypeContext? context = _ctx;
}

class PaymentMethodSepaDebit extends StripeEntity1<PaymentMethodSepaDebit> implements IConvertible
{
    String? BankCode;
    String? BranchCode;
    String? Country;
    String? Fingerprint;
    PaymentMethodSepaDebitGeneratedFrom? GeneratedFrom;
    String? Last4;

    PaymentMethodSepaDebit({this.BankCode,this.BranchCode,this.Country,this.Fingerprint,this.GeneratedFrom,this.Last4});
    PaymentMethodSepaDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BankCode = json['BankCode'];
        BranchCode = json['BranchCode'];
        Country = json['Country'];
        Fingerprint = json['Fingerprint'];
        GeneratedFrom = JsonConverters.fromJson(json['GeneratedFrom'],'PaymentMethodSepaDebitGeneratedFrom',context!);
        Last4 = json['Last4'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BankCode': BankCode,
        'BranchCode': BranchCode,
        'Country': Country,
        'Fingerprint': Fingerprint,
        'GeneratedFrom': JsonConverters.toJson(GeneratedFrom,'PaymentMethodSepaDebitGeneratedFrom',context!),
        'Last4': Last4
    });

    getTypeName() => "PaymentMethodSepaDebit";
    TypeContext? context = _ctx;
}

class PaymentMethodSofort extends StripeEntity1<PaymentMethodSofort> implements IConvertible
{
    String? Country;

    PaymentMethodSofort({this.Country});
    PaymentMethodSofort.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Country = json['Country'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Country': Country
    });

    getTypeName() => "PaymentMethodSofort";
    TypeContext? context = _ctx;
}

class PaymentMethodSwish extends StripeEntity1<PaymentMethodSwish> implements IConvertible
{
    PaymentMethodSwish();
    PaymentMethodSwish.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodSwish";
    TypeContext? context = _ctx;
}

class PaymentMethodTwint extends StripeEntity1<PaymentMethodTwint> implements IConvertible
{
    PaymentMethodTwint();
    PaymentMethodTwint.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodTwint";
    TypeContext? context = _ctx;
}

class PaymentMethodUsBankAccountNetworks extends StripeEntity1<PaymentMethodUsBankAccountNetworks> implements IConvertible
{
    String? Preferred;
    List<String>? Supported;

    PaymentMethodUsBankAccountNetworks({this.Preferred,this.Supported});
    PaymentMethodUsBankAccountNetworks.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Preferred = json['Preferred'];
        Supported = JsonConverters.fromJson(json['Supported'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Preferred': Preferred,
        'Supported': JsonConverters.toJson(Supported,'List<String>',context!)
    });

    getTypeName() => "PaymentMethodUsBankAccountNetworks";
    TypeContext? context = _ctx;
}

class PaymentMethodUsBankAccountStatusDetailsBlocked extends StripeEntity1<PaymentMethodUsBankAccountStatusDetailsBlocked> implements IConvertible
{
    String? NetworkCode;
    String? Reason;

    PaymentMethodUsBankAccountStatusDetailsBlocked({this.NetworkCode,this.Reason});
    PaymentMethodUsBankAccountStatusDetailsBlocked.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        NetworkCode = json['NetworkCode'];
        Reason = json['Reason'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'NetworkCode': NetworkCode,
        'Reason': Reason
    });

    getTypeName() => "PaymentMethodUsBankAccountStatusDetailsBlocked";
    TypeContext? context = _ctx;
}

class PaymentMethodUsBankAccountStatusDetails extends StripeEntity1<PaymentMethodUsBankAccountStatusDetails> implements IConvertible
{
    PaymentMethodUsBankAccountStatusDetailsBlocked? Blocked;

    PaymentMethodUsBankAccountStatusDetails({this.Blocked});
    PaymentMethodUsBankAccountStatusDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Blocked = JsonConverters.fromJson(json['Blocked'],'PaymentMethodUsBankAccountStatusDetailsBlocked',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Blocked': JsonConverters.toJson(Blocked,'PaymentMethodUsBankAccountStatusDetailsBlocked',context!)
    });

    getTypeName() => "PaymentMethodUsBankAccountStatusDetails";
    TypeContext? context = _ctx;
}

class PaymentMethodUsBankAccount extends StripeEntity1<PaymentMethodUsBankAccount> implements IConvertible
{
    String? AccountHolderType;
    String? AccountType;
    String? BankName;
    String? FinancialConnectionsAccount;
    String? Fingerprint;
    String? Last4;
    PaymentMethodUsBankAccountNetworks? Networks;
    String? RoutingNumber;
    PaymentMethodUsBankAccountStatusDetails? StatusDetails;

    PaymentMethodUsBankAccount({this.AccountHolderType,this.AccountType,this.BankName,this.FinancialConnectionsAccount,this.Fingerprint,this.Last4,this.Networks,this.RoutingNumber,this.StatusDetails});
    PaymentMethodUsBankAccount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountHolderType = json['AccountHolderType'];
        AccountType = json['AccountType'];
        BankName = json['BankName'];
        FinancialConnectionsAccount = json['FinancialConnectionsAccount'];
        Fingerprint = json['Fingerprint'];
        Last4 = json['Last4'];
        Networks = JsonConverters.fromJson(json['Networks'],'PaymentMethodUsBankAccountNetworks',context!);
        RoutingNumber = json['RoutingNumber'];
        StatusDetails = JsonConverters.fromJson(json['StatusDetails'],'PaymentMethodUsBankAccountStatusDetails',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountHolderType': AccountHolderType,
        'AccountType': AccountType,
        'BankName': BankName,
        'FinancialConnectionsAccount': FinancialConnectionsAccount,
        'Fingerprint': Fingerprint,
        'Last4': Last4,
        'Networks': JsonConverters.toJson(Networks,'PaymentMethodUsBankAccountNetworks',context!),
        'RoutingNumber': RoutingNumber,
        'StatusDetails': JsonConverters.toJson(StatusDetails,'PaymentMethodUsBankAccountStatusDetails',context!)
    });

    getTypeName() => "PaymentMethodUsBankAccount";
    TypeContext? context = _ctx;
}

class PaymentMethodWechatPay extends StripeEntity1<PaymentMethodWechatPay> implements IConvertible
{
    PaymentMethodWechatPay();
    PaymentMethodWechatPay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodWechatPay";
    TypeContext? context = _ctx;
}

class PaymentMethodZip extends StripeEntity1<PaymentMethodZip> implements IConvertible
{
    PaymentMethodZip();
    PaymentMethodZip.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentMethodZip";
    TypeContext? context = _ctx;
}

class PaymentMethod extends StripeEntity1<PaymentMethod> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    PaymentMethodAcssDebit? AcssDebit;
    PaymentMethodAffirm? Affirm;
    PaymentMethodAfterpayClearpay? AfterpayClearpay;
    PaymentMethodAlipay? Alipay;
    String? AllowRedisplay;
    PaymentMethodAmazonPay? AmazonPay;
    PaymentMethodAuBecsDebit? AuBecsDebit;
    PaymentMethodBacsDebit? BacsDebit;
    PaymentMethodBancontact? Bancontact;
    PaymentMethodBillingDetails? BillingDetails;
    PaymentMethodBlik? Blik;
    PaymentMethodBoleto? Boleto;
    PaymentMethodCard? Card;
    PaymentMethodCardPresent? CardPresent;
    PaymentMethodCashapp? Cashapp;
    DateTime? Created;
    PaymentMethodCustomerBalance? CustomerBalance;
    PaymentMethodEps? Eps;
    PaymentMethodFpx? Fpx;
    PaymentMethodGiropay? Giropay;
    PaymentMethodGrabpay? Grabpay;
    PaymentMethodIdeal? Ideal;
    PaymentMethodInteracPresent? InteracPresent;
    PaymentMethodKlarna? Klarna;
    PaymentMethodKonbini? Konbini;
    PaymentMethodLink? Link;
    bool? Livemode;
    Map<String,String?>? Metadata;
    PaymentMethodMobilepay? Mobilepay;
    PaymentMethodMultibanco? Multibanco;
    PaymentMethodOxxo? Oxxo;
    PaymentMethodP24? P24;
    PaymentMethodPaynow? Paynow;
    PaymentMethodPaypal? Paypal;
    PaymentMethodPix? Pix;
    PaymentMethodPromptpay? Promptpay;
    PaymentMethodRadarOptions? RadarOptions;
    PaymentMethodRevolutPay? RevolutPay;
    PaymentMethodSepaDebit? SepaDebit;
    PaymentMethodSofort? Sofort;
    PaymentMethodSwish? Swish;
    PaymentMethodTwint? Twint;
    String? Type;
    PaymentMethodUsBankAccount? UsBankAccount;
    PaymentMethodWechatPay? WechatPay;
    PaymentMethodZip? Zip;

    PaymentMethod({this.Id,this.Object,this.AcssDebit,this.Affirm,this.AfterpayClearpay,this.Alipay,this.AllowRedisplay,this.AmazonPay,this.AuBecsDebit,this.BacsDebit,this.Bancontact,this.BillingDetails,this.Blik,this.Boleto,this.Card,this.CardPresent,this.Cashapp,this.Created,this.CustomerBalance,this.Eps,this.Fpx,this.Giropay,this.Grabpay,this.Ideal,this.InteracPresent,this.Klarna,this.Konbini,this.Link,this.Livemode,this.Metadata,this.Mobilepay,this.Multibanco,this.Oxxo,this.P24,this.Paynow,this.Paypal,this.Pix,this.Promptpay,this.RadarOptions,this.RevolutPay,this.SepaDebit,this.Sofort,this.Swish,this.Twint,this.Type,this.UsBankAccount,this.WechatPay,this.Zip});
    PaymentMethod.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        AcssDebit = JsonConverters.fromJson(json['AcssDebit'],'PaymentMethodAcssDebit',context!);
        Affirm = JsonConverters.fromJson(json['Affirm'],'PaymentMethodAffirm',context!);
        AfterpayClearpay = JsonConverters.fromJson(json['AfterpayClearpay'],'PaymentMethodAfterpayClearpay',context!);
        Alipay = JsonConverters.fromJson(json['Alipay'],'PaymentMethodAlipay',context!);
        AllowRedisplay = json['AllowRedisplay'];
        AmazonPay = JsonConverters.fromJson(json['AmazonPay'],'PaymentMethodAmazonPay',context!);
        AuBecsDebit = JsonConverters.fromJson(json['AuBecsDebit'],'PaymentMethodAuBecsDebit',context!);
        BacsDebit = JsonConverters.fromJson(json['BacsDebit'],'PaymentMethodBacsDebit',context!);
        Bancontact = JsonConverters.fromJson(json['Bancontact'],'PaymentMethodBancontact',context!);
        BillingDetails = JsonConverters.fromJson(json['BillingDetails'],'PaymentMethodBillingDetails',context!);
        Blik = JsonConverters.fromJson(json['Blik'],'PaymentMethodBlik',context!);
        Boleto = JsonConverters.fromJson(json['Boleto'],'PaymentMethodBoleto',context!);
        Card = JsonConverters.fromJson(json['Card'],'PaymentMethodCard',context!);
        CardPresent = JsonConverters.fromJson(json['CardPresent'],'PaymentMethodCardPresent',context!);
        Cashapp = JsonConverters.fromJson(json['Cashapp'],'PaymentMethodCashapp',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        CustomerBalance = JsonConverters.fromJson(json['CustomerBalance'],'PaymentMethodCustomerBalance',context!);
        Eps = JsonConverters.fromJson(json['Eps'],'PaymentMethodEps',context!);
        Fpx = JsonConverters.fromJson(json['Fpx'],'PaymentMethodFpx',context!);
        Giropay = JsonConverters.fromJson(json['Giropay'],'PaymentMethodGiropay',context!);
        Grabpay = JsonConverters.fromJson(json['Grabpay'],'PaymentMethodGrabpay',context!);
        Ideal = JsonConverters.fromJson(json['Ideal'],'PaymentMethodIdeal',context!);
        InteracPresent = JsonConverters.fromJson(json['InteracPresent'],'PaymentMethodInteracPresent',context!);
        Klarna = JsonConverters.fromJson(json['Klarna'],'PaymentMethodKlarna',context!);
        Konbini = JsonConverters.fromJson(json['Konbini'],'PaymentMethodKonbini',context!);
        Link = JsonConverters.fromJson(json['Link'],'PaymentMethodLink',context!);
        Livemode = json['Livemode'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Mobilepay = JsonConverters.fromJson(json['Mobilepay'],'PaymentMethodMobilepay',context!);
        Multibanco = JsonConverters.fromJson(json['Multibanco'],'PaymentMethodMultibanco',context!);
        Oxxo = JsonConverters.fromJson(json['Oxxo'],'PaymentMethodOxxo',context!);
        P24 = JsonConverters.fromJson(json['P24'],'PaymentMethodP24',context!);
        Paynow = JsonConverters.fromJson(json['Paynow'],'PaymentMethodPaynow',context!);
        Paypal = JsonConverters.fromJson(json['Paypal'],'PaymentMethodPaypal',context!);
        Pix = JsonConverters.fromJson(json['Pix'],'PaymentMethodPix',context!);
        Promptpay = JsonConverters.fromJson(json['Promptpay'],'PaymentMethodPromptpay',context!);
        RadarOptions = JsonConverters.fromJson(json['RadarOptions'],'PaymentMethodRadarOptions',context!);
        RevolutPay = JsonConverters.fromJson(json['RevolutPay'],'PaymentMethodRevolutPay',context!);
        SepaDebit = JsonConverters.fromJson(json['SepaDebit'],'PaymentMethodSepaDebit',context!);
        Sofort = JsonConverters.fromJson(json['Sofort'],'PaymentMethodSofort',context!);
        Swish = JsonConverters.fromJson(json['Swish'],'PaymentMethodSwish',context!);
        Twint = JsonConverters.fromJson(json['Twint'],'PaymentMethodTwint',context!);
        Type = json['Type'];
        UsBankAccount = JsonConverters.fromJson(json['UsBankAccount'],'PaymentMethodUsBankAccount',context!);
        WechatPay = JsonConverters.fromJson(json['WechatPay'],'PaymentMethodWechatPay',context!);
        Zip = JsonConverters.fromJson(json['Zip'],'PaymentMethodZip',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'AcssDebit': JsonConverters.toJson(AcssDebit,'PaymentMethodAcssDebit',context!),
        'Affirm': JsonConverters.toJson(Affirm,'PaymentMethodAffirm',context!),
        'AfterpayClearpay': JsonConverters.toJson(AfterpayClearpay,'PaymentMethodAfterpayClearpay',context!),
        'Alipay': JsonConverters.toJson(Alipay,'PaymentMethodAlipay',context!),
        'AllowRedisplay': AllowRedisplay,
        'AmazonPay': JsonConverters.toJson(AmazonPay,'PaymentMethodAmazonPay',context!),
        'AuBecsDebit': JsonConverters.toJson(AuBecsDebit,'PaymentMethodAuBecsDebit',context!),
        'BacsDebit': JsonConverters.toJson(BacsDebit,'PaymentMethodBacsDebit',context!),
        'Bancontact': JsonConverters.toJson(Bancontact,'PaymentMethodBancontact',context!),
        'BillingDetails': JsonConverters.toJson(BillingDetails,'PaymentMethodBillingDetails',context!),
        'Blik': JsonConverters.toJson(Blik,'PaymentMethodBlik',context!),
        'Boleto': JsonConverters.toJson(Boleto,'PaymentMethodBoleto',context!),
        'Card': JsonConverters.toJson(Card,'PaymentMethodCard',context!),
        'CardPresent': JsonConverters.toJson(CardPresent,'PaymentMethodCardPresent',context!),
        'Cashapp': JsonConverters.toJson(Cashapp,'PaymentMethodCashapp',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'CustomerBalance': JsonConverters.toJson(CustomerBalance,'PaymentMethodCustomerBalance',context!),
        'Eps': JsonConverters.toJson(Eps,'PaymentMethodEps',context!),
        'Fpx': JsonConverters.toJson(Fpx,'PaymentMethodFpx',context!),
        'Giropay': JsonConverters.toJson(Giropay,'PaymentMethodGiropay',context!),
        'Grabpay': JsonConverters.toJson(Grabpay,'PaymentMethodGrabpay',context!),
        'Ideal': JsonConverters.toJson(Ideal,'PaymentMethodIdeal',context!),
        'InteracPresent': JsonConverters.toJson(InteracPresent,'PaymentMethodInteracPresent',context!),
        'Klarna': JsonConverters.toJson(Klarna,'PaymentMethodKlarna',context!),
        'Konbini': JsonConverters.toJson(Konbini,'PaymentMethodKonbini',context!),
        'Link': JsonConverters.toJson(Link,'PaymentMethodLink',context!),
        'Livemode': Livemode,
        'Metadata': Metadata,
        'Mobilepay': JsonConverters.toJson(Mobilepay,'PaymentMethodMobilepay',context!),
        'Multibanco': JsonConverters.toJson(Multibanco,'PaymentMethodMultibanco',context!),
        'Oxxo': JsonConverters.toJson(Oxxo,'PaymentMethodOxxo',context!),
        'P24': JsonConverters.toJson(P24,'PaymentMethodP24',context!),
        'Paynow': JsonConverters.toJson(Paynow,'PaymentMethodPaynow',context!),
        'Paypal': JsonConverters.toJson(Paypal,'PaymentMethodPaypal',context!),
        'Pix': JsonConverters.toJson(Pix,'PaymentMethodPix',context!),
        'Promptpay': JsonConverters.toJson(Promptpay,'PaymentMethodPromptpay',context!),
        'RadarOptions': JsonConverters.toJson(RadarOptions,'PaymentMethodRadarOptions',context!),
        'RevolutPay': JsonConverters.toJson(RevolutPay,'PaymentMethodRevolutPay',context!),
        'SepaDebit': JsonConverters.toJson(SepaDebit,'PaymentMethodSepaDebit',context!),
        'Sofort': JsonConverters.toJson(Sofort,'PaymentMethodSofort',context!),
        'Swish': JsonConverters.toJson(Swish,'PaymentMethodSwish',context!),
        'Twint': JsonConverters.toJson(Twint,'PaymentMethodTwint',context!),
        'Type': Type,
        'UsBankAccount': JsonConverters.toJson(UsBankAccount,'PaymentMethodUsBankAccount',context!),
        'WechatPay': JsonConverters.toJson(WechatPay,'PaymentMethodWechatPay',context!),
        'Zip': JsonConverters.toJson(Zip,'PaymentMethodZip',context!)
    });

    getTypeName() => "PaymentMethod";
    TypeContext? context = _ctx;
}

class SetupIntentAutomaticPaymentMethods extends StripeEntity1<SetupIntentAutomaticPaymentMethods> implements IConvertible
{
    String? AllowRedirects;
    bool? Enabled;

    SetupIntentAutomaticPaymentMethods({this.AllowRedirects,this.Enabled});
    SetupIntentAutomaticPaymentMethods.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AllowRedirects = json['AllowRedirects'];
        Enabled = json['Enabled'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AllowRedirects': AllowRedirects,
        'Enabled': Enabled
    });

    getTypeName() => "SetupIntentAutomaticPaymentMethods";
    TypeContext? context = _ctx;
}

class SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode extends StripeEntity1<SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode> implements IConvertible
{
    DateTime? ExpiresAt;
    String? ImageUrlPng;
    String? ImageUrlSvg;

    SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode({this.ExpiresAt,this.ImageUrlPng,this.ImageUrlSvg});
    SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        ImageUrlPng = json['ImageUrlPng'];
        ImageUrlSvg = json['ImageUrlSvg'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'ImageUrlPng': ImageUrlPng,
        'ImageUrlSvg': ImageUrlSvg
    });

    getTypeName() => "SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode";
    TypeContext? context = _ctx;
}

class SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode extends StripeEntity1<SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode> implements IConvertible
{
    String? HostedInstructionsUrl;
    String? MobileAuthUrl;
    SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode? QrCode;

    SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode({this.HostedInstructionsUrl,this.MobileAuthUrl,this.QrCode});
    SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        HostedInstructionsUrl = json['HostedInstructionsUrl'];
        MobileAuthUrl = json['MobileAuthUrl'];
        QrCode = JsonConverters.fromJson(json['QrCode'],'SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'HostedInstructionsUrl': HostedInstructionsUrl,
        'MobileAuthUrl': MobileAuthUrl,
        'QrCode': JsonConverters.toJson(QrCode,'SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode',context!)
    });

    getTypeName() => "SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode";
    TypeContext? context = _ctx;
}

class SetupIntentNextActionRedirectToUrl extends StripeEntity1<SetupIntentNextActionRedirectToUrl> implements IConvertible
{
    String? ReturnUrl;
    String? Url;

    SetupIntentNextActionRedirectToUrl({this.ReturnUrl,this.Url});
    SetupIntentNextActionRedirectToUrl.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ReturnUrl = json['ReturnUrl'];
        Url = json['Url'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ReturnUrl': ReturnUrl,
        'Url': Url
    });

    getTypeName() => "SetupIntentNextActionRedirectToUrl";
    TypeContext? context = _ctx;
}

class SetupIntentNextActionUseStripeSdk extends StripeEntity1<SetupIntentNextActionUseStripeSdk> implements IConvertible
{
    SetupIntentNextActionUseStripeSdk();
    SetupIntentNextActionUseStripeSdk.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "SetupIntentNextActionUseStripeSdk";
    TypeContext? context = _ctx;
}

class SetupIntentNextActionVerifyWithMicrodeposits extends StripeEntity1<SetupIntentNextActionVerifyWithMicrodeposits> implements IConvertible
{
    DateTime? ArrivalDate;
    String? HostedVerificationUrl;
    String? MicrodepositType;

    SetupIntentNextActionVerifyWithMicrodeposits({this.ArrivalDate,this.HostedVerificationUrl,this.MicrodepositType});
    SetupIntentNextActionVerifyWithMicrodeposits.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ArrivalDate = JsonConverters.fromJson(json['ArrivalDate'],'DateTime',context!);
        HostedVerificationUrl = json['HostedVerificationUrl'];
        MicrodepositType = json['MicrodepositType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ArrivalDate': JsonConverters.toJson(ArrivalDate,'DateTime',context!),
        'HostedVerificationUrl': HostedVerificationUrl,
        'MicrodepositType': MicrodepositType
    });

    getTypeName() => "SetupIntentNextActionVerifyWithMicrodeposits";
    TypeContext? context = _ctx;
}

class SetupIntentNextAction extends StripeEntity1<SetupIntentNextAction> implements IConvertible
{
    SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode? CashappHandleRedirectOrDisplayQrCode;
    SetupIntentNextActionRedirectToUrl? RedirectToUrl;
    String? Type;
    SetupIntentNextActionUseStripeSdk? UseStripeSdk;
    SetupIntentNextActionVerifyWithMicrodeposits? VerifyWithMicrodeposits;

    SetupIntentNextAction({this.CashappHandleRedirectOrDisplayQrCode,this.RedirectToUrl,this.Type,this.UseStripeSdk,this.VerifyWithMicrodeposits});
    SetupIntentNextAction.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CashappHandleRedirectOrDisplayQrCode = JsonConverters.fromJson(json['CashappHandleRedirectOrDisplayQrCode'],'SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode',context!);
        RedirectToUrl = JsonConverters.fromJson(json['RedirectToUrl'],'SetupIntentNextActionRedirectToUrl',context!);
        Type = json['Type'];
        UseStripeSdk = JsonConverters.fromJson(json['UseStripeSdk'],'SetupIntentNextActionUseStripeSdk',context!);
        VerifyWithMicrodeposits = JsonConverters.fromJson(json['VerifyWithMicrodeposits'],'SetupIntentNextActionVerifyWithMicrodeposits',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CashappHandleRedirectOrDisplayQrCode': JsonConverters.toJson(CashappHandleRedirectOrDisplayQrCode,'SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode',context!),
        'RedirectToUrl': JsonConverters.toJson(RedirectToUrl,'SetupIntentNextActionRedirectToUrl',context!),
        'Type': Type,
        'UseStripeSdk': JsonConverters.toJson(UseStripeSdk,'SetupIntentNextActionUseStripeSdk',context!),
        'VerifyWithMicrodeposits': JsonConverters.toJson(VerifyWithMicrodeposits,'SetupIntentNextActionVerifyWithMicrodeposits',context!)
    });

    getTypeName() => "SetupIntentNextAction";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodConfigurationDetails extends StripeEntity1<SetupIntentPaymentMethodConfigurationDetails> implements IHasId, IConvertible
{
    String? Id;
    String? Parent;

    SetupIntentPaymentMethodConfigurationDetails({this.Id,this.Parent});
    SetupIntentPaymentMethodConfigurationDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Parent = json['Parent'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Parent': Parent
    });

    getTypeName() => "SetupIntentPaymentMethodConfigurationDetails";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsAcssDebitMandateOptions extends StripeEntity1<SetupIntentPaymentMethodOptionsAcssDebitMandateOptions> implements IConvertible
{
    String? CustomMandateUrl;
    List<String>? DefaultFor;
    String? IntervalDescription;
    String? PaymentSchedule;
    String? TransactionType;

    SetupIntentPaymentMethodOptionsAcssDebitMandateOptions({this.CustomMandateUrl,this.DefaultFor,this.IntervalDescription,this.PaymentSchedule,this.TransactionType});
    SetupIntentPaymentMethodOptionsAcssDebitMandateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CustomMandateUrl = json['CustomMandateUrl'];
        DefaultFor = JsonConverters.fromJson(json['DefaultFor'],'List<String>',context!);
        IntervalDescription = json['IntervalDescription'];
        PaymentSchedule = json['PaymentSchedule'];
        TransactionType = json['TransactionType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CustomMandateUrl': CustomMandateUrl,
        'DefaultFor': JsonConverters.toJson(DefaultFor,'List<String>',context!),
        'IntervalDescription': IntervalDescription,
        'PaymentSchedule': PaymentSchedule,
        'TransactionType': TransactionType
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsAcssDebitMandateOptions";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsAcssDebit extends StripeEntity1<SetupIntentPaymentMethodOptionsAcssDebit> implements IConvertible
{
    String? Currency;
    SetupIntentPaymentMethodOptionsAcssDebitMandateOptions? MandateOptions;
    String? VerificationMethod;

    SetupIntentPaymentMethodOptionsAcssDebit({this.Currency,this.MandateOptions,this.VerificationMethod});
    SetupIntentPaymentMethodOptionsAcssDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Currency = json['Currency'];
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'SetupIntentPaymentMethodOptionsAcssDebitMandateOptions',context!);
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Currency': Currency,
        'MandateOptions': JsonConverters.toJson(MandateOptions,'SetupIntentPaymentMethodOptionsAcssDebitMandateOptions',context!),
        'VerificationMethod': VerificationMethod
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsAcssDebit";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsAmazonPay extends StripeEntity1<SetupIntentPaymentMethodOptionsAmazonPay> implements IConvertible
{
    SetupIntentPaymentMethodOptionsAmazonPay();
    SetupIntentPaymentMethodOptionsAmazonPay.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "SetupIntentPaymentMethodOptionsAmazonPay";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsBacsDebitMandateOptions extends StripeEntity1<SetupIntentPaymentMethodOptionsBacsDebitMandateOptions> implements IConvertible
{
    SetupIntentPaymentMethodOptionsBacsDebitMandateOptions();
    SetupIntentPaymentMethodOptionsBacsDebitMandateOptions.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "SetupIntentPaymentMethodOptionsBacsDebitMandateOptions";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsBacsDebit extends StripeEntity1<SetupIntentPaymentMethodOptionsBacsDebit> implements IConvertible
{
    SetupIntentPaymentMethodOptionsBacsDebitMandateOptions? MandateOptions;

    SetupIntentPaymentMethodOptionsBacsDebit({this.MandateOptions});
    SetupIntentPaymentMethodOptionsBacsDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'SetupIntentPaymentMethodOptionsBacsDebitMandateOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'MandateOptions': JsonConverters.toJson(MandateOptions,'SetupIntentPaymentMethodOptionsBacsDebitMandateOptions',context!)
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsBacsDebit";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsCardMandateOptions extends StripeEntity1<SetupIntentPaymentMethodOptionsCardMandateOptions> implements IConvertible
{
    int? Amount;
    String? AmountType;
    String? Currency;
    String? Description;
    DateTime? EndDate;
    String? Interval;
    int? IntervalCount;
    String? Reference;
    DateTime? StartDate;
    List<String>? SupportedTypes;

    SetupIntentPaymentMethodOptionsCardMandateOptions({this.Amount,this.AmountType,this.Currency,this.Description,this.EndDate,this.Interval,this.IntervalCount,this.Reference,this.StartDate,this.SupportedTypes});
    SetupIntentPaymentMethodOptionsCardMandateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        AmountType = json['AmountType'];
        Currency = json['Currency'];
        Description = json['Description'];
        EndDate = JsonConverters.fromJson(json['EndDate'],'DateTime',context!);
        Interval = json['Interval'];
        IntervalCount = json['IntervalCount'];
        Reference = json['Reference'];
        StartDate = JsonConverters.fromJson(json['StartDate'],'DateTime',context!);
        SupportedTypes = JsonConverters.fromJson(json['SupportedTypes'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'AmountType': AmountType,
        'Currency': Currency,
        'Description': Description,
        'EndDate': JsonConverters.toJson(EndDate,'DateTime',context!),
        'Interval': Interval,
        'IntervalCount': IntervalCount,
        'Reference': Reference,
        'StartDate': JsonConverters.toJson(StartDate,'DateTime',context!),
        'SupportedTypes': JsonConverters.toJson(SupportedTypes,'List<String>',context!)
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsCardMandateOptions";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsCard extends StripeEntity1<SetupIntentPaymentMethodOptionsCard> implements IConvertible
{
    SetupIntentPaymentMethodOptionsCardMandateOptions? MandateOptions;
    String? Network;
    String? RequestThreeDSecure;

    SetupIntentPaymentMethodOptionsCard({this.MandateOptions,this.Network,this.RequestThreeDSecure});
    SetupIntentPaymentMethodOptionsCard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'SetupIntentPaymentMethodOptionsCardMandateOptions',context!);
        Network = json['Network'];
        RequestThreeDSecure = json['RequestThreeDSecure'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'MandateOptions': JsonConverters.toJson(MandateOptions,'SetupIntentPaymentMethodOptionsCardMandateOptions',context!),
        'Network': Network,
        'RequestThreeDSecure': RequestThreeDSecure
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsCard";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsCardPresent extends StripeEntity1<SetupIntentPaymentMethodOptionsCardPresent> implements IConvertible
{
    SetupIntentPaymentMethodOptionsCardPresent();
    SetupIntentPaymentMethodOptionsCardPresent.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "SetupIntentPaymentMethodOptionsCardPresent";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsLink extends StripeEntity1<SetupIntentPaymentMethodOptionsLink> implements IConvertible
{
    String? PersistentToken;

    SetupIntentPaymentMethodOptionsLink({this.PersistentToken});
    SetupIntentPaymentMethodOptionsLink.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        PersistentToken = json['PersistentToken'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'PersistentToken': PersistentToken
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsLink";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsPaypal extends StripeEntity1<SetupIntentPaymentMethodOptionsPaypal> implements IConvertible
{
    String? BillingAgreementId;

    SetupIntentPaymentMethodOptionsPaypal({this.BillingAgreementId});
    SetupIntentPaymentMethodOptionsPaypal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BillingAgreementId = json['BillingAgreementId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BillingAgreementId': BillingAgreementId
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsPaypal";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsSepaDebitMandateOptions extends StripeEntity1<SetupIntentPaymentMethodOptionsSepaDebitMandateOptions> implements IConvertible
{
    SetupIntentPaymentMethodOptionsSepaDebitMandateOptions();
    SetupIntentPaymentMethodOptionsSepaDebitMandateOptions.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "SetupIntentPaymentMethodOptionsSepaDebitMandateOptions";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsSepaDebit extends StripeEntity1<SetupIntentPaymentMethodOptionsSepaDebit> implements IConvertible
{
    SetupIntentPaymentMethodOptionsSepaDebitMandateOptions? MandateOptions;

    SetupIntentPaymentMethodOptionsSepaDebit({this.MandateOptions});
    SetupIntentPaymentMethodOptionsSepaDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'SetupIntentPaymentMethodOptionsSepaDebitMandateOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'MandateOptions': JsonConverters.toJson(MandateOptions,'SetupIntentPaymentMethodOptionsSepaDebitMandateOptions',context!)
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsSepaDebit";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters extends StripeEntity1<SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters> implements IConvertible
{
    List<String>? AccountSubcategories;

    SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters({this.AccountSubcategories});
    SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountSubcategories = JsonConverters.fromJson(json['AccountSubcategories'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountSubcategories': JsonConverters.toJson(AccountSubcategories,'List<String>',context!)
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections extends StripeEntity1<SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections> implements IConvertible
{
    SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters? Filters;
    List<String>? Permissions;
    List<String>? Prefetch;
    String? ReturnUrl;

    SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections({this.Filters,this.Permissions,this.Prefetch,this.ReturnUrl});
    SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Filters = JsonConverters.fromJson(json['Filters'],'SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters',context!);
        Permissions = JsonConverters.fromJson(json['Permissions'],'List<String>',context!);
        Prefetch = JsonConverters.fromJson(json['Prefetch'],'List<String>',context!);
        ReturnUrl = json['ReturnUrl'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Filters': JsonConverters.toJson(Filters,'SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters',context!),
        'Permissions': JsonConverters.toJson(Permissions,'List<String>',context!),
        'Prefetch': JsonConverters.toJson(Prefetch,'List<String>',context!),
        'ReturnUrl': ReturnUrl
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions extends StripeEntity1<SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions> implements IConvertible
{
    String? CollectionMethod;

    SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions({this.CollectionMethod});
    SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CollectionMethod = json['CollectionMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CollectionMethod': CollectionMethod
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptionsUsBankAccount extends StripeEntity1<SetupIntentPaymentMethodOptionsUsBankAccount> implements IConvertible
{
    SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections? FinancialConnections;
    SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions? MandateOptions;
    String? VerificationMethod;

    SetupIntentPaymentMethodOptionsUsBankAccount({this.FinancialConnections,this.MandateOptions,this.VerificationMethod});
    SetupIntentPaymentMethodOptionsUsBankAccount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FinancialConnections = JsonConverters.fromJson(json['FinancialConnections'],'SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections',context!);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions',context!);
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FinancialConnections': JsonConverters.toJson(FinancialConnections,'SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections',context!),
        'MandateOptions': JsonConverters.toJson(MandateOptions,'SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions',context!),
        'VerificationMethod': VerificationMethod
    });

    getTypeName() => "SetupIntentPaymentMethodOptionsUsBankAccount";
    TypeContext? context = _ctx;
}

class SetupIntentPaymentMethodOptions extends StripeEntity1<SetupIntentPaymentMethodOptions> implements IConvertible
{
    SetupIntentPaymentMethodOptionsAcssDebit? AcssDebit;
    SetupIntentPaymentMethodOptionsAmazonPay? AmazonPay;
    SetupIntentPaymentMethodOptionsBacsDebit? BacsDebit;
    SetupIntentPaymentMethodOptionsCard? Card;
    SetupIntentPaymentMethodOptionsCardPresent? CardPresent;
    SetupIntentPaymentMethodOptionsLink? Link;
    SetupIntentPaymentMethodOptionsPaypal? Paypal;
    SetupIntentPaymentMethodOptionsSepaDebit? SepaDebit;
    SetupIntentPaymentMethodOptionsUsBankAccount? UsBankAccount;

    SetupIntentPaymentMethodOptions({this.AcssDebit,this.AmazonPay,this.BacsDebit,this.Card,this.CardPresent,this.Link,this.Paypal,this.SepaDebit,this.UsBankAccount});
    SetupIntentPaymentMethodOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AcssDebit = JsonConverters.fromJson(json['AcssDebit'],'SetupIntentPaymentMethodOptionsAcssDebit',context!);
        AmazonPay = JsonConverters.fromJson(json['AmazonPay'],'SetupIntentPaymentMethodOptionsAmazonPay',context!);
        BacsDebit = JsonConverters.fromJson(json['BacsDebit'],'SetupIntentPaymentMethodOptionsBacsDebit',context!);
        Card = JsonConverters.fromJson(json['Card'],'SetupIntentPaymentMethodOptionsCard',context!);
        CardPresent = JsonConverters.fromJson(json['CardPresent'],'SetupIntentPaymentMethodOptionsCardPresent',context!);
        Link = JsonConverters.fromJson(json['Link'],'SetupIntentPaymentMethodOptionsLink',context!);
        Paypal = JsonConverters.fromJson(json['Paypal'],'SetupIntentPaymentMethodOptionsPaypal',context!);
        SepaDebit = JsonConverters.fromJson(json['SepaDebit'],'SetupIntentPaymentMethodOptionsSepaDebit',context!);
        UsBankAccount = JsonConverters.fromJson(json['UsBankAccount'],'SetupIntentPaymentMethodOptionsUsBankAccount',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AcssDebit': JsonConverters.toJson(AcssDebit,'SetupIntentPaymentMethodOptionsAcssDebit',context!),
        'AmazonPay': JsonConverters.toJson(AmazonPay,'SetupIntentPaymentMethodOptionsAmazonPay',context!),
        'BacsDebit': JsonConverters.toJson(BacsDebit,'SetupIntentPaymentMethodOptionsBacsDebit',context!),
        'Card': JsonConverters.toJson(Card,'SetupIntentPaymentMethodOptionsCard',context!),
        'CardPresent': JsonConverters.toJson(CardPresent,'SetupIntentPaymentMethodOptionsCardPresent',context!),
        'Link': JsonConverters.toJson(Link,'SetupIntentPaymentMethodOptionsLink',context!),
        'Paypal': JsonConverters.toJson(Paypal,'SetupIntentPaymentMethodOptionsPaypal',context!),
        'SepaDebit': JsonConverters.toJson(SepaDebit,'SetupIntentPaymentMethodOptionsSepaDebit',context!),
        'UsBankAccount': JsonConverters.toJson(UsBankAccount,'SetupIntentPaymentMethodOptionsUsBankAccount',context!)
    });

    getTypeName() => "SetupIntentPaymentMethodOptions";
    TypeContext? context = _ctx;
}

class SetupIntent extends StripeEntity1<SetupIntent> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    bool? AttachToSelf;
    SetupIntentAutomaticPaymentMethods? AutomaticPaymentMethods;
    String? CancellationReason;
    String? ClientSecret;
    DateTime? Created;
    String? Description;
    List<String>? FlowDirections;
    StripeError? LastSetupError;
    bool? Livemode;
    Map<String,String?>? Metadata;
    SetupIntentNextAction? NextAction;
    SetupIntentPaymentMethodConfigurationDetails? PaymentMethodConfigurationDetails;
    SetupIntentPaymentMethodOptions? PaymentMethodOptions;
    List<String>? PaymentMethodTypes;
    String? Status;
    String? Usage;

    SetupIntent({this.Id,this.Object,this.AttachToSelf,this.AutomaticPaymentMethods,this.CancellationReason,this.ClientSecret,this.Created,this.Description,this.FlowDirections,this.LastSetupError,this.Livemode,this.Metadata,this.NextAction,this.PaymentMethodConfigurationDetails,this.PaymentMethodOptions,this.PaymentMethodTypes,this.Status,this.Usage});
    SetupIntent.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        AttachToSelf = json['AttachToSelf'];
        AutomaticPaymentMethods = JsonConverters.fromJson(json['AutomaticPaymentMethods'],'SetupIntentAutomaticPaymentMethods',context!);
        CancellationReason = json['CancellationReason'];
        ClientSecret = json['ClientSecret'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Description = json['Description'];
        FlowDirections = JsonConverters.fromJson(json['FlowDirections'],'List<String>',context!);
        LastSetupError = JsonConverters.fromJson(json['LastSetupError'],'StripeError',context!);
        Livemode = json['Livemode'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        NextAction = JsonConverters.fromJson(json['NextAction'],'SetupIntentNextAction',context!);
        PaymentMethodConfigurationDetails = JsonConverters.fromJson(json['PaymentMethodConfigurationDetails'],'SetupIntentPaymentMethodConfigurationDetails',context!);
        PaymentMethodOptions = JsonConverters.fromJson(json['PaymentMethodOptions'],'SetupIntentPaymentMethodOptions',context!);
        PaymentMethodTypes = JsonConverters.fromJson(json['PaymentMethodTypes'],'List<String>',context!);
        Status = json['Status'];
        Usage = json['Usage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'AttachToSelf': AttachToSelf,
        'AutomaticPaymentMethods': JsonConverters.toJson(AutomaticPaymentMethods,'SetupIntentAutomaticPaymentMethods',context!),
        'CancellationReason': CancellationReason,
        'ClientSecret': ClientSecret,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Description': Description,
        'FlowDirections': JsonConverters.toJson(FlowDirections,'List<String>',context!),
        'LastSetupError': JsonConverters.toJson(LastSetupError,'StripeError',context!),
        'Livemode': Livemode,
        'Metadata': Metadata,
        'NextAction': JsonConverters.toJson(NextAction,'SetupIntentNextAction',context!),
        'PaymentMethodConfigurationDetails': JsonConverters.toJson(PaymentMethodConfigurationDetails,'SetupIntentPaymentMethodConfigurationDetails',context!),
        'PaymentMethodOptions': JsonConverters.toJson(PaymentMethodOptions,'SetupIntentPaymentMethodOptions',context!),
        'PaymentMethodTypes': JsonConverters.toJson(PaymentMethodTypes,'List<String>',context!),
        'Status': Status,
        'Usage': Usage
    });

    getTypeName() => "SetupIntent";
    TypeContext? context = _ctx;
}

abstract class IPaymentSource extends IStripeEntity, IHasId, IHasObject
{
}

class StripeError extends StripeEntity1<StripeError> implements IConvertible
{
    String? Charge;
    String? Code;
    String? DeclineCode;
    String? DocUrl;
    String? Message;
    String? Param;
    PaymentIntent? PaymentIntent;
    PaymentMethod? PaymentMethod;
    String? PaymentMethodType;
    String? RequestLogUrl;
    SetupIntent? SetupIntent;
    IPaymentSource? Source;
    String? Type;
    String? Error;
    String? ErrorDescription;

    StripeError({this.Charge,this.Code,this.DeclineCode,this.DocUrl,this.Message,this.Param,this.PaymentIntent,this.PaymentMethod,this.PaymentMethodType,this.RequestLogUrl,this.SetupIntent,this.Source,this.Type,this.Error,this.ErrorDescription});
    StripeError.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Charge = json['Charge'];
        Code = json['Code'];
        DeclineCode = json['DeclineCode'];
        DocUrl = json['DocUrl'];
        Message = json['Message'];
        Param = json['Param'];
        PaymentIntent = JsonConverters.fromJson(json['PaymentIntent'],'PaymentIntent',context!);
        PaymentMethod = JsonConverters.fromJson(json['PaymentMethod'],'PaymentMethod',context!);
        PaymentMethodType = json['PaymentMethodType'];
        RequestLogUrl = json['RequestLogUrl'];
        SetupIntent = JsonConverters.fromJson(json['SetupIntent'],'SetupIntent',context!);
        Source = JsonConverters.fromJson(json['Source'],'IPaymentSource',context!);
        Type = json['Type'];
        Error = json['Error'];
        ErrorDescription = json['ErrorDescription'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Charge': Charge,
        'Code': Code,
        'DeclineCode': DeclineCode,
        'DocUrl': DocUrl,
        'Message': Message,
        'Param': Param,
        'PaymentIntent': JsonConverters.toJson(PaymentIntent,'PaymentIntent',context!),
        'PaymentMethod': JsonConverters.toJson(PaymentMethod,'PaymentMethod',context!),
        'PaymentMethodType': PaymentMethodType,
        'RequestLogUrl': RequestLogUrl,
        'SetupIntent': JsonConverters.toJson(SetupIntent,'SetupIntent',context!),
        'Source': JsonConverters.toJson(Source,'IPaymentSource',context!),
        'Type': Type,
        'Error': Error,
        'ErrorDescription': ErrorDescription
    });

    getTypeName() => "StripeError";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionAlipayHandleRedirect extends StripeEntity1<PaymentIntentNextActionAlipayHandleRedirect> implements IConvertible
{
    String? NativeData;
    String? NativeUrl;
    String? ReturnUrl;
    String? Url;

    PaymentIntentNextActionAlipayHandleRedirect({this.NativeData,this.NativeUrl,this.ReturnUrl,this.Url});
    PaymentIntentNextActionAlipayHandleRedirect.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        NativeData = json['NativeData'];
        NativeUrl = json['NativeUrl'];
        ReturnUrl = json['ReturnUrl'];
        Url = json['Url'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'NativeData': NativeData,
        'NativeUrl': NativeUrl,
        'ReturnUrl': ReturnUrl,
        'Url': Url
    });

    getTypeName() => "PaymentIntentNextActionAlipayHandleRedirect";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionBoletoDisplayDetails extends StripeEntity1<PaymentIntentNextActionBoletoDisplayDetails> implements IConvertible
{
    DateTime? ExpiresAt;
    String? HostedVoucherUrl;
    String? Number;
    String? Pdf;

    PaymentIntentNextActionBoletoDisplayDetails({this.ExpiresAt,this.HostedVoucherUrl,this.Number,this.Pdf});
    PaymentIntentNextActionBoletoDisplayDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        HostedVoucherUrl = json['HostedVoucherUrl'];
        Number = json['Number'];
        Pdf = json['Pdf'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'HostedVoucherUrl': HostedVoucherUrl,
        'Number': Number,
        'Pdf': Pdf
    });

    getTypeName() => "PaymentIntentNextActionBoletoDisplayDetails";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionCardAwaitNotification extends StripeEntity1<PaymentIntentNextActionCardAwaitNotification> implements IConvertible
{
    DateTime? ChargeAttemptAt;
    bool? CustomerApprovalRequired;

    PaymentIntentNextActionCardAwaitNotification({this.ChargeAttemptAt,this.CustomerApprovalRequired});
    PaymentIntentNextActionCardAwaitNotification.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ChargeAttemptAt = JsonConverters.fromJson(json['ChargeAttemptAt'],'DateTime',context!);
        CustomerApprovalRequired = json['CustomerApprovalRequired'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ChargeAttemptAt': JsonConverters.toJson(ChargeAttemptAt,'DateTime',context!),
        'CustomerApprovalRequired': CustomerApprovalRequired
    });

    getTypeName() => "PaymentIntentNextActionCardAwaitNotification";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode extends StripeEntity1<PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode> implements IConvertible
{
    DateTime? ExpiresAt;
    String? ImageUrlPng;
    String? ImageUrlSvg;

    PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode({this.ExpiresAt,this.ImageUrlPng,this.ImageUrlSvg});
    PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        ImageUrlPng = json['ImageUrlPng'];
        ImageUrlSvg = json['ImageUrlSvg'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'ImageUrlPng': ImageUrlPng,
        'ImageUrlSvg': ImageUrlSvg
    });

    getTypeName() => "PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode extends StripeEntity1<PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode> implements IConvertible
{
    String? HostedInstructionsUrl;
    String? MobileAuthUrl;
    PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode? QrCode;

    PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode({this.HostedInstructionsUrl,this.MobileAuthUrl,this.QrCode});
    PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        HostedInstructionsUrl = json['HostedInstructionsUrl'];
        MobileAuthUrl = json['MobileAuthUrl'];
        QrCode = JsonConverters.fromJson(json['QrCode'],'PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'HostedInstructionsUrl': HostedInstructionsUrl,
        'MobileAuthUrl': MobileAuthUrl,
        'QrCode': JsonConverters.toJson(QrCode,'PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode',context!)
    });

    getTypeName() => "PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba extends StripeEntity1<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba> implements IConvertible
{
    String? AccountNumber;
    String? BankName;
    String? RoutingNumber;

    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba({this.AccountNumber,this.BankName,this.RoutingNumber});
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountNumber = json['AccountNumber'];
        BankName = json['BankName'];
        RoutingNumber = json['RoutingNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountNumber': AccountNumber,
        'BankName': BankName,
        'RoutingNumber': RoutingNumber
    });

    getTypeName() => "PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban extends StripeEntity1<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban> implements IConvertible
{
    String? AccountHolderName;
    String? Bic;
    String? Country;
    String? Iban;

    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban({this.AccountHolderName,this.Bic,this.Country,this.Iban});
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountHolderName = json['AccountHolderName'];
        Bic = json['Bic'];
        Country = json['Country'];
        Iban = json['Iban'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountHolderName': AccountHolderName,
        'Bic': Bic,
        'Country': Country,
        'Iban': Iban
    });

    getTypeName() => "PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode extends StripeEntity1<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode> implements IConvertible
{
    String? AccountHolderName;
    String? AccountNumber;
    String? SortCode;

    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode({this.AccountHolderName,this.AccountNumber,this.SortCode});
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountHolderName = json['AccountHolderName'];
        AccountNumber = json['AccountNumber'];
        SortCode = json['SortCode'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountHolderName': AccountHolderName,
        'AccountNumber': AccountNumber,
        'SortCode': SortCode
    });

    getTypeName() => "PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei extends StripeEntity1<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei> implements IConvertible
{
    String? BankCode;
    String? BankName;
    String? Clabe;

    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei({this.BankCode,this.BankName,this.Clabe});
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BankCode = json['BankCode'];
        BankName = json['BankName'];
        Clabe = json['Clabe'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BankCode': BankCode,
        'BankName': BankName,
        'Clabe': Clabe
    });

    getTypeName() => "PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift extends StripeEntity1<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift> implements IConvertible
{
    String? AccountNumber;
    String? BankName;
    String? SwiftCode;

    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift({this.AccountNumber,this.BankName,this.SwiftCode});
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountNumber = json['AccountNumber'];
        BankName = json['BankName'];
        SwiftCode = json['SwiftCode'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountNumber': AccountNumber,
        'BankName': BankName,
        'SwiftCode': SwiftCode
    });

    getTypeName() => "PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin extends StripeEntity1<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin> implements IConvertible
{
    String? AccountHolderName;
    String? AccountNumber;
    String? AccountType;
    String? BankCode;
    String? BankName;
    String? BranchCode;
    String? BranchName;

    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin({this.AccountHolderName,this.AccountNumber,this.AccountType,this.BankCode,this.BankName,this.BranchCode,this.BranchName});
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountHolderName = json['AccountHolderName'];
        AccountNumber = json['AccountNumber'];
        AccountType = json['AccountType'];
        BankCode = json['BankCode'];
        BankName = json['BankName'];
        BranchCode = json['BranchCode'];
        BranchName = json['BranchName'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountHolderName': AccountHolderName,
        'AccountNumber': AccountNumber,
        'AccountType': AccountType,
        'BankCode': BankCode,
        'BankName': BankName,
        'BranchCode': BranchCode,
        'BranchName': BranchName
    });

    getTypeName() => "PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress extends StripeEntity1<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress> implements IConvertible
{
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba? Aba;
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban? Iban;
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode? SortCode;
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei? Spei;
    List<String>? SupportedNetworks;
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift? Swift;
    String? Type;
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin? Zengin;

    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress({this.Aba,this.Iban,this.SortCode,this.Spei,this.SupportedNetworks,this.Swift,this.Type,this.Zengin});
    PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Aba = JsonConverters.fromJson(json['Aba'],'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba',context!);
        Iban = JsonConverters.fromJson(json['Iban'],'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban',context!);
        SortCode = JsonConverters.fromJson(json['SortCode'],'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode',context!);
        Spei = JsonConverters.fromJson(json['Spei'],'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei',context!);
        SupportedNetworks = JsonConverters.fromJson(json['SupportedNetworks'],'List<String>',context!);
        Swift = JsonConverters.fromJson(json['Swift'],'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift',context!);
        Type = json['Type'];
        Zengin = JsonConverters.fromJson(json['Zengin'],'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Aba': JsonConverters.toJson(Aba,'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba',context!),
        'Iban': JsonConverters.toJson(Iban,'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban',context!),
        'SortCode': JsonConverters.toJson(SortCode,'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode',context!),
        'Spei': JsonConverters.toJson(Spei,'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei',context!),
        'SupportedNetworks': JsonConverters.toJson(SupportedNetworks,'List<String>',context!),
        'Swift': JsonConverters.toJson(Swift,'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift',context!),
        'Type': Type,
        'Zengin': JsonConverters.toJson(Zengin,'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin',context!)
    });

    getTypeName() => "PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionDisplayBankTransferInstructions extends StripeEntity1<PaymentIntentNextActionDisplayBankTransferInstructions> implements IConvertible
{
    int? AmountRemaining;
    String? Currency;
    List<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress>? FinancialAddresses;
    String? HostedInstructionsUrl;
    String? Reference;
    String? Type;

    PaymentIntentNextActionDisplayBankTransferInstructions({this.AmountRemaining,this.Currency,this.FinancialAddresses,this.HostedInstructionsUrl,this.Reference,this.Type});
    PaymentIntentNextActionDisplayBankTransferInstructions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountRemaining = json['AmountRemaining'];
        Currency = json['Currency'];
        FinancialAddresses = JsonConverters.fromJson(json['FinancialAddresses'],'List<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress>',context!);
        HostedInstructionsUrl = json['HostedInstructionsUrl'];
        Reference = json['Reference'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountRemaining': AmountRemaining,
        'Currency': Currency,
        'FinancialAddresses': JsonConverters.toJson(FinancialAddresses,'List<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress>',context!),
        'HostedInstructionsUrl': HostedInstructionsUrl,
        'Reference': Reference,
        'Type': Type
    });

    getTypeName() => "PaymentIntentNextActionDisplayBankTransferInstructions";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart extends StripeEntity1<PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart> implements IConvertible
{
    String? ConfirmationNumber;
    String? PaymentCode;

    PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart({this.ConfirmationNumber,this.PaymentCode});
    PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ConfirmationNumber = json['ConfirmationNumber'];
        PaymentCode = json['PaymentCode'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ConfirmationNumber': ConfirmationNumber,
        'PaymentCode': PaymentCode
    });

    getTypeName() => "PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson extends StripeEntity1<PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson> implements IConvertible
{
    String? ConfirmationNumber;
    String? PaymentCode;

    PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson({this.ConfirmationNumber,this.PaymentCode});
    PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ConfirmationNumber = json['ConfirmationNumber'];
        PaymentCode = json['PaymentCode'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ConfirmationNumber': ConfirmationNumber,
        'PaymentCode': PaymentCode
    });

    getTypeName() => "PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop extends StripeEntity1<PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop> implements IConvertible
{
    String? ConfirmationNumber;
    String? PaymentCode;

    PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop({this.ConfirmationNumber,this.PaymentCode});
    PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ConfirmationNumber = json['ConfirmationNumber'];
        PaymentCode = json['PaymentCode'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ConfirmationNumber': ConfirmationNumber,
        'PaymentCode': PaymentCode
    });

    getTypeName() => "PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart extends StripeEntity1<PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart> implements IConvertible
{
    String? ConfirmationNumber;
    String? PaymentCode;

    PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart({this.ConfirmationNumber,this.PaymentCode});
    PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ConfirmationNumber = json['ConfirmationNumber'];
        PaymentCode = json['PaymentCode'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ConfirmationNumber': ConfirmationNumber,
        'PaymentCode': PaymentCode
    });

    getTypeName() => "PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionKonbiniDisplayDetailsStores extends StripeEntity1<PaymentIntentNextActionKonbiniDisplayDetailsStores> implements IConvertible
{
    PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart? Familymart;
    PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson? Lawson;
    PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop? Ministop;
    PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart? Seicomart;

    PaymentIntentNextActionKonbiniDisplayDetailsStores({this.Familymart,this.Lawson,this.Ministop,this.Seicomart});
    PaymentIntentNextActionKonbiniDisplayDetailsStores.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Familymart = JsonConverters.fromJson(json['Familymart'],'PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart',context!);
        Lawson = JsonConverters.fromJson(json['Lawson'],'PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson',context!);
        Ministop = JsonConverters.fromJson(json['Ministop'],'PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop',context!);
        Seicomart = JsonConverters.fromJson(json['Seicomart'],'PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Familymart': JsonConverters.toJson(Familymart,'PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart',context!),
        'Lawson': JsonConverters.toJson(Lawson,'PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson',context!),
        'Ministop': JsonConverters.toJson(Ministop,'PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop',context!),
        'Seicomart': JsonConverters.toJson(Seicomart,'PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart',context!)
    });

    getTypeName() => "PaymentIntentNextActionKonbiniDisplayDetailsStores";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionKonbiniDisplayDetails extends StripeEntity1<PaymentIntentNextActionKonbiniDisplayDetails> implements IConvertible
{
    DateTime? ExpiresAt;
    String? HostedVoucherUrl;
    PaymentIntentNextActionKonbiniDisplayDetailsStores? Stores;

    PaymentIntentNextActionKonbiniDisplayDetails({this.ExpiresAt,this.HostedVoucherUrl,this.Stores});
    PaymentIntentNextActionKonbiniDisplayDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        HostedVoucherUrl = json['HostedVoucherUrl'];
        Stores = JsonConverters.fromJson(json['Stores'],'PaymentIntentNextActionKonbiniDisplayDetailsStores',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'HostedVoucherUrl': HostedVoucherUrl,
        'Stores': JsonConverters.toJson(Stores,'PaymentIntentNextActionKonbiniDisplayDetailsStores',context!)
    });

    getTypeName() => "PaymentIntentNextActionKonbiniDisplayDetails";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionMultibancoDisplayDetails extends StripeEntity1<PaymentIntentNextActionMultibancoDisplayDetails> implements IConvertible
{
    String? Entity;
    DateTime? ExpiresAt;
    String? HostedVoucherUrl;
    String? Reference;

    PaymentIntentNextActionMultibancoDisplayDetails({this.Entity,this.ExpiresAt,this.HostedVoucherUrl,this.Reference});
    PaymentIntentNextActionMultibancoDisplayDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Entity = json['Entity'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        HostedVoucherUrl = json['HostedVoucherUrl'];
        Reference = json['Reference'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Entity': Entity,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'HostedVoucherUrl': HostedVoucherUrl,
        'Reference': Reference
    });

    getTypeName() => "PaymentIntentNextActionMultibancoDisplayDetails";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionOxxoDisplayDetails extends StripeEntity1<PaymentIntentNextActionOxxoDisplayDetails> implements IConvertible
{
    DateTime? ExpiresAfter;
    String? HostedVoucherUrl;
    String? Number;

    PaymentIntentNextActionOxxoDisplayDetails({this.ExpiresAfter,this.HostedVoucherUrl,this.Number});
    PaymentIntentNextActionOxxoDisplayDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAfter = JsonConverters.fromJson(json['ExpiresAfter'],'DateTime',context!);
        HostedVoucherUrl = json['HostedVoucherUrl'];
        Number = json['Number'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAfter': JsonConverters.toJson(ExpiresAfter,'DateTime',context!),
        'HostedVoucherUrl': HostedVoucherUrl,
        'Number': Number
    });

    getTypeName() => "PaymentIntentNextActionOxxoDisplayDetails";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionPaynowDisplayQrCode extends StripeEntity1<PaymentIntentNextActionPaynowDisplayQrCode> implements IConvertible
{
    String? Data;
    String? HostedInstructionsUrl;
    String? ImageUrlPng;
    String? ImageUrlSvg;

    PaymentIntentNextActionPaynowDisplayQrCode({this.Data,this.HostedInstructionsUrl,this.ImageUrlPng,this.ImageUrlSvg});
    PaymentIntentNextActionPaynowDisplayQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Data = json['Data'];
        HostedInstructionsUrl = json['HostedInstructionsUrl'];
        ImageUrlPng = json['ImageUrlPng'];
        ImageUrlSvg = json['ImageUrlSvg'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Data': Data,
        'HostedInstructionsUrl': HostedInstructionsUrl,
        'ImageUrlPng': ImageUrlPng,
        'ImageUrlSvg': ImageUrlSvg
    });

    getTypeName() => "PaymentIntentNextActionPaynowDisplayQrCode";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionPixDisplayQrCode extends StripeEntity1<PaymentIntentNextActionPixDisplayQrCode> implements IConvertible
{
    String? Data;
    DateTime? ExpiresAt;
    String? HostedInstructionsUrl;
    String? ImageUrlPng;
    String? ImageUrlSvg;

    PaymentIntentNextActionPixDisplayQrCode({this.Data,this.ExpiresAt,this.HostedInstructionsUrl,this.ImageUrlPng,this.ImageUrlSvg});
    PaymentIntentNextActionPixDisplayQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Data = json['Data'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        HostedInstructionsUrl = json['HostedInstructionsUrl'];
        ImageUrlPng = json['ImageUrlPng'];
        ImageUrlSvg = json['ImageUrlSvg'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Data': Data,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'HostedInstructionsUrl': HostedInstructionsUrl,
        'ImageUrlPng': ImageUrlPng,
        'ImageUrlSvg': ImageUrlSvg
    });

    getTypeName() => "PaymentIntentNextActionPixDisplayQrCode";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionPromptpayDisplayQrCode extends StripeEntity1<PaymentIntentNextActionPromptpayDisplayQrCode> implements IConvertible
{
    String? Data;
    String? HostedInstructionsUrl;
    String? ImageUrlPng;
    String? ImageUrlSvg;

    PaymentIntentNextActionPromptpayDisplayQrCode({this.Data,this.HostedInstructionsUrl,this.ImageUrlPng,this.ImageUrlSvg});
    PaymentIntentNextActionPromptpayDisplayQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Data = json['Data'];
        HostedInstructionsUrl = json['HostedInstructionsUrl'];
        ImageUrlPng = json['ImageUrlPng'];
        ImageUrlSvg = json['ImageUrlSvg'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Data': Data,
        'HostedInstructionsUrl': HostedInstructionsUrl,
        'ImageUrlPng': ImageUrlPng,
        'ImageUrlSvg': ImageUrlSvg
    });

    getTypeName() => "PaymentIntentNextActionPromptpayDisplayQrCode";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionRedirectToUrl extends StripeEntity1<PaymentIntentNextActionRedirectToUrl> implements IConvertible
{
    String? ReturnUrl;
    String? Url;

    PaymentIntentNextActionRedirectToUrl({this.ReturnUrl,this.Url});
    PaymentIntentNextActionRedirectToUrl.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ReturnUrl = json['ReturnUrl'];
        Url = json['Url'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ReturnUrl': ReturnUrl,
        'Url': Url
    });

    getTypeName() => "PaymentIntentNextActionRedirectToUrl";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode extends StripeEntity1<PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode> implements IConvertible
{
    String? Data;
    String? ImageUrlPng;
    String? ImageUrlSvg;

    PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode({this.Data,this.ImageUrlPng,this.ImageUrlSvg});
    PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Data = json['Data'];
        ImageUrlPng = json['ImageUrlPng'];
        ImageUrlSvg = json['ImageUrlSvg'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Data': Data,
        'ImageUrlPng': ImageUrlPng,
        'ImageUrlSvg': ImageUrlSvg
    });

    getTypeName() => "PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode extends StripeEntity1<PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode> implements IConvertible
{
    String? HostedInstructionsUrl;
    String? MobileAuthUrl;
    PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode? QrCode;

    PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode({this.HostedInstructionsUrl,this.MobileAuthUrl,this.QrCode});
    PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        HostedInstructionsUrl = json['HostedInstructionsUrl'];
        MobileAuthUrl = json['MobileAuthUrl'];
        QrCode = JsonConverters.fromJson(json['QrCode'],'PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'HostedInstructionsUrl': HostedInstructionsUrl,
        'MobileAuthUrl': MobileAuthUrl,
        'QrCode': JsonConverters.toJson(QrCode,'PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode',context!)
    });

    getTypeName() => "PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionUseStripeSdk extends StripeEntity1<PaymentIntentNextActionUseStripeSdk> implements IConvertible
{
    PaymentIntentNextActionUseStripeSdk();
    PaymentIntentNextActionUseStripeSdk.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentIntentNextActionUseStripeSdk";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionVerifyWithMicrodeposits extends StripeEntity1<PaymentIntentNextActionVerifyWithMicrodeposits> implements IConvertible
{
    DateTime? ArrivalDate;
    String? HostedVerificationUrl;
    String? MicrodepositType;

    PaymentIntentNextActionVerifyWithMicrodeposits({this.ArrivalDate,this.HostedVerificationUrl,this.MicrodepositType});
    PaymentIntentNextActionVerifyWithMicrodeposits.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ArrivalDate = JsonConverters.fromJson(json['ArrivalDate'],'DateTime',context!);
        HostedVerificationUrl = json['HostedVerificationUrl'];
        MicrodepositType = json['MicrodepositType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ArrivalDate': JsonConverters.toJson(ArrivalDate,'DateTime',context!),
        'HostedVerificationUrl': HostedVerificationUrl,
        'MicrodepositType': MicrodepositType
    });

    getTypeName() => "PaymentIntentNextActionVerifyWithMicrodeposits";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionWechatPayDisplayQrCode extends StripeEntity1<PaymentIntentNextActionWechatPayDisplayQrCode> implements IConvertible
{
    String? Data;
    String? HostedInstructionsUrl;
    String? ImageDataUrl;
    String? ImageUrlPng;
    String? ImageUrlSvg;

    PaymentIntentNextActionWechatPayDisplayQrCode({this.Data,this.HostedInstructionsUrl,this.ImageDataUrl,this.ImageUrlPng,this.ImageUrlSvg});
    PaymentIntentNextActionWechatPayDisplayQrCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Data = json['Data'];
        HostedInstructionsUrl = json['HostedInstructionsUrl'];
        ImageDataUrl = json['ImageDataUrl'];
        ImageUrlPng = json['ImageUrlPng'];
        ImageUrlSvg = json['ImageUrlSvg'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Data': Data,
        'HostedInstructionsUrl': HostedInstructionsUrl,
        'ImageDataUrl': ImageDataUrl,
        'ImageUrlPng': ImageUrlPng,
        'ImageUrlSvg': ImageUrlSvg
    });

    getTypeName() => "PaymentIntentNextActionWechatPayDisplayQrCode";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionWechatPayRedirectToAndroidApp extends StripeEntity1<PaymentIntentNextActionWechatPayRedirectToAndroidApp> implements IConvertible
{
    String? AppId;
    String? NonceStr;
    String? Package;
    String? PartnerId;
    String? PrepayId;
    String? Sign;
    String? Timestamp;

    PaymentIntentNextActionWechatPayRedirectToAndroidApp({this.AppId,this.NonceStr,this.Package,this.PartnerId,this.PrepayId,this.Sign,this.Timestamp});
    PaymentIntentNextActionWechatPayRedirectToAndroidApp.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AppId = json['AppId'];
        NonceStr = json['NonceStr'];
        Package = json['Package'];
        PartnerId = json['PartnerId'];
        PrepayId = json['PrepayId'];
        Sign = json['Sign'];
        Timestamp = json['Timestamp'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AppId': AppId,
        'NonceStr': NonceStr,
        'Package': Package,
        'PartnerId': PartnerId,
        'PrepayId': PrepayId,
        'Sign': Sign,
        'Timestamp': Timestamp
    });

    getTypeName() => "PaymentIntentNextActionWechatPayRedirectToAndroidApp";
    TypeContext? context = _ctx;
}

class PaymentIntentNextActionWechatPayRedirectToIosApp extends StripeEntity1<PaymentIntentNextActionWechatPayRedirectToIosApp> implements IConvertible
{
    String? NativeUrl;

    PaymentIntentNextActionWechatPayRedirectToIosApp({this.NativeUrl});
    PaymentIntentNextActionWechatPayRedirectToIosApp.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        NativeUrl = json['NativeUrl'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'NativeUrl': NativeUrl
    });

    getTypeName() => "PaymentIntentNextActionWechatPayRedirectToIosApp";
    TypeContext? context = _ctx;
}

class PaymentIntentNextAction extends StripeEntity1<PaymentIntentNextAction> implements IConvertible
{
    PaymentIntentNextActionAlipayHandleRedirect? AlipayHandleRedirect;
    PaymentIntentNextActionBoletoDisplayDetails? BoletoDisplayDetails;
    PaymentIntentNextActionCardAwaitNotification? CardAwaitNotification;
    PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode? CashappHandleRedirectOrDisplayQrCode;
    PaymentIntentNextActionDisplayBankTransferInstructions? DisplayBankTransferInstructions;
    PaymentIntentNextActionKonbiniDisplayDetails? KonbiniDisplayDetails;
    PaymentIntentNextActionMultibancoDisplayDetails? MultibancoDisplayDetails;
    PaymentIntentNextActionOxxoDisplayDetails? OxxoDisplayDetails;
    PaymentIntentNextActionPaynowDisplayQrCode? PaynowDisplayQrCode;
    PaymentIntentNextActionPixDisplayQrCode? PixDisplayQrCode;
    PaymentIntentNextActionPromptpayDisplayQrCode? PromptpayDisplayQrCode;
    PaymentIntentNextActionRedirectToUrl? RedirectToUrl;
    PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode? SwishHandleRedirectOrDisplayQrCode;
    String? Type;
    PaymentIntentNextActionUseStripeSdk? UseStripeSdk;
    PaymentIntentNextActionVerifyWithMicrodeposits? VerifyWithMicrodeposits;
    PaymentIntentNextActionWechatPayDisplayQrCode? WechatPayDisplayQrCode;
    PaymentIntentNextActionWechatPayRedirectToAndroidApp? WechatPayRedirectToAndroidApp;
    PaymentIntentNextActionWechatPayRedirectToIosApp? WechatPayRedirectToIosApp;

    PaymentIntentNextAction({this.AlipayHandleRedirect,this.BoletoDisplayDetails,this.CardAwaitNotification,this.CashappHandleRedirectOrDisplayQrCode,this.DisplayBankTransferInstructions,this.KonbiniDisplayDetails,this.MultibancoDisplayDetails,this.OxxoDisplayDetails,this.PaynowDisplayQrCode,this.PixDisplayQrCode,this.PromptpayDisplayQrCode,this.RedirectToUrl,this.SwishHandleRedirectOrDisplayQrCode,this.Type,this.UseStripeSdk,this.VerifyWithMicrodeposits,this.WechatPayDisplayQrCode,this.WechatPayRedirectToAndroidApp,this.WechatPayRedirectToIosApp});
    PaymentIntentNextAction.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AlipayHandleRedirect = JsonConverters.fromJson(json['AlipayHandleRedirect'],'PaymentIntentNextActionAlipayHandleRedirect',context!);
        BoletoDisplayDetails = JsonConverters.fromJson(json['BoletoDisplayDetails'],'PaymentIntentNextActionBoletoDisplayDetails',context!);
        CardAwaitNotification = JsonConverters.fromJson(json['CardAwaitNotification'],'PaymentIntentNextActionCardAwaitNotification',context!);
        CashappHandleRedirectOrDisplayQrCode = JsonConverters.fromJson(json['CashappHandleRedirectOrDisplayQrCode'],'PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode',context!);
        DisplayBankTransferInstructions = JsonConverters.fromJson(json['DisplayBankTransferInstructions'],'PaymentIntentNextActionDisplayBankTransferInstructions',context!);
        KonbiniDisplayDetails = JsonConverters.fromJson(json['KonbiniDisplayDetails'],'PaymentIntentNextActionKonbiniDisplayDetails',context!);
        MultibancoDisplayDetails = JsonConverters.fromJson(json['MultibancoDisplayDetails'],'PaymentIntentNextActionMultibancoDisplayDetails',context!);
        OxxoDisplayDetails = JsonConverters.fromJson(json['OxxoDisplayDetails'],'PaymentIntentNextActionOxxoDisplayDetails',context!);
        PaynowDisplayQrCode = JsonConverters.fromJson(json['PaynowDisplayQrCode'],'PaymentIntentNextActionPaynowDisplayQrCode',context!);
        PixDisplayQrCode = JsonConverters.fromJson(json['PixDisplayQrCode'],'PaymentIntentNextActionPixDisplayQrCode',context!);
        PromptpayDisplayQrCode = JsonConverters.fromJson(json['PromptpayDisplayQrCode'],'PaymentIntentNextActionPromptpayDisplayQrCode',context!);
        RedirectToUrl = JsonConverters.fromJson(json['RedirectToUrl'],'PaymentIntentNextActionRedirectToUrl',context!);
        SwishHandleRedirectOrDisplayQrCode = JsonConverters.fromJson(json['SwishHandleRedirectOrDisplayQrCode'],'PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode',context!);
        Type = json['Type'];
        UseStripeSdk = JsonConverters.fromJson(json['UseStripeSdk'],'PaymentIntentNextActionUseStripeSdk',context!);
        VerifyWithMicrodeposits = JsonConverters.fromJson(json['VerifyWithMicrodeposits'],'PaymentIntentNextActionVerifyWithMicrodeposits',context!);
        WechatPayDisplayQrCode = JsonConverters.fromJson(json['WechatPayDisplayQrCode'],'PaymentIntentNextActionWechatPayDisplayQrCode',context!);
        WechatPayRedirectToAndroidApp = JsonConverters.fromJson(json['WechatPayRedirectToAndroidApp'],'PaymentIntentNextActionWechatPayRedirectToAndroidApp',context!);
        WechatPayRedirectToIosApp = JsonConverters.fromJson(json['WechatPayRedirectToIosApp'],'PaymentIntentNextActionWechatPayRedirectToIosApp',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AlipayHandleRedirect': JsonConverters.toJson(AlipayHandleRedirect,'PaymentIntentNextActionAlipayHandleRedirect',context!),
        'BoletoDisplayDetails': JsonConverters.toJson(BoletoDisplayDetails,'PaymentIntentNextActionBoletoDisplayDetails',context!),
        'CardAwaitNotification': JsonConverters.toJson(CardAwaitNotification,'PaymentIntentNextActionCardAwaitNotification',context!),
        'CashappHandleRedirectOrDisplayQrCode': JsonConverters.toJson(CashappHandleRedirectOrDisplayQrCode,'PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode',context!),
        'DisplayBankTransferInstructions': JsonConverters.toJson(DisplayBankTransferInstructions,'PaymentIntentNextActionDisplayBankTransferInstructions',context!),
        'KonbiniDisplayDetails': JsonConverters.toJson(KonbiniDisplayDetails,'PaymentIntentNextActionKonbiniDisplayDetails',context!),
        'MultibancoDisplayDetails': JsonConverters.toJson(MultibancoDisplayDetails,'PaymentIntentNextActionMultibancoDisplayDetails',context!),
        'OxxoDisplayDetails': JsonConverters.toJson(OxxoDisplayDetails,'PaymentIntentNextActionOxxoDisplayDetails',context!),
        'PaynowDisplayQrCode': JsonConverters.toJson(PaynowDisplayQrCode,'PaymentIntentNextActionPaynowDisplayQrCode',context!),
        'PixDisplayQrCode': JsonConverters.toJson(PixDisplayQrCode,'PaymentIntentNextActionPixDisplayQrCode',context!),
        'PromptpayDisplayQrCode': JsonConverters.toJson(PromptpayDisplayQrCode,'PaymentIntentNextActionPromptpayDisplayQrCode',context!),
        'RedirectToUrl': JsonConverters.toJson(RedirectToUrl,'PaymentIntentNextActionRedirectToUrl',context!),
        'SwishHandleRedirectOrDisplayQrCode': JsonConverters.toJson(SwishHandleRedirectOrDisplayQrCode,'PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode',context!),
        'Type': Type,
        'UseStripeSdk': JsonConverters.toJson(UseStripeSdk,'PaymentIntentNextActionUseStripeSdk',context!),
        'VerifyWithMicrodeposits': JsonConverters.toJson(VerifyWithMicrodeposits,'PaymentIntentNextActionVerifyWithMicrodeposits',context!),
        'WechatPayDisplayQrCode': JsonConverters.toJson(WechatPayDisplayQrCode,'PaymentIntentNextActionWechatPayDisplayQrCode',context!),
        'WechatPayRedirectToAndroidApp': JsonConverters.toJson(WechatPayRedirectToAndroidApp,'PaymentIntentNextActionWechatPayRedirectToAndroidApp',context!),
        'WechatPayRedirectToIosApp': JsonConverters.toJson(WechatPayRedirectToIosApp,'PaymentIntentNextActionWechatPayRedirectToIosApp',context!)
    });

    getTypeName() => "PaymentIntentNextAction";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodConfigurationDetails extends StripeEntity1<PaymentIntentPaymentMethodConfigurationDetails> implements IHasId, IConvertible
{
    String? Id;
    String? Parent;

    PaymentIntentPaymentMethodConfigurationDetails({this.Id,this.Parent});
    PaymentIntentPaymentMethodConfigurationDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Parent = json['Parent'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Parent': Parent
    });

    getTypeName() => "PaymentIntentPaymentMethodConfigurationDetails";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions extends StripeEntity1<PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions> implements IConvertible
{
    String? CustomMandateUrl;
    String? IntervalDescription;
    String? PaymentSchedule;
    String? TransactionType;

    PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions({this.CustomMandateUrl,this.IntervalDescription,this.PaymentSchedule,this.TransactionType});
    PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CustomMandateUrl = json['CustomMandateUrl'];
        IntervalDescription = json['IntervalDescription'];
        PaymentSchedule = json['PaymentSchedule'];
        TransactionType = json['TransactionType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CustomMandateUrl': CustomMandateUrl,
        'IntervalDescription': IntervalDescription,
        'PaymentSchedule': PaymentSchedule,
        'TransactionType': TransactionType
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAcssDebit extends StripeEntity1<PaymentIntentPaymentMethodOptionsAcssDebit> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions? MandateOptions;
    String? SetupFutureUsage;
    String? VerificationMethod;

    PaymentIntentPaymentMethodOptionsAcssDebit({this.MandateOptions,this.SetupFutureUsage,this.VerificationMethod});
    PaymentIntentPaymentMethodOptionsAcssDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsAcssDebit";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAffirm extends StripeEntity1<PaymentIntentPaymentMethodOptionsAffirm> implements IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAffirm({this.CaptureMethod,this.PreferredLocale,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAffirm.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsAffirm";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAfterpayClearpay extends StripeEntity1<PaymentIntentPaymentMethodOptionsAfterpayClearpay> implements IConvertible
{
    String? CaptureMethod;
    String? Reference;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAfterpayClearpay({this.CaptureMethod,this.Reference,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAfterpayClearpay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        Reference = json['Reference'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'Reference': Reference,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsAfterpayClearpay";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAlipay extends StripeEntity1<PaymentIntentPaymentMethodOptionsAlipay> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAlipay({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAlipay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsAlipay";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAmazonPay extends StripeEntity1<PaymentIntentPaymentMethodOptionsAmazonPay> implements IConvertible
{
    String? CaptureMethod;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAmazonPay({this.CaptureMethod,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAmazonPay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsAmazonPay";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsAuBecsDebit extends StripeEntity1<PaymentIntentPaymentMethodOptionsAuBecsDebit> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsAuBecsDebit({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsAuBecsDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsAuBecsDebit";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions extends StripeEntity1<PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions();
    PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBacsDebit extends StripeEntity1<PaymentIntentPaymentMethodOptionsBacsDebit> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions? MandateOptions;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsBacsDebit({this.MandateOptions,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsBacsDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions',context!),
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsBacsDebit";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBancontact extends StripeEntity1<PaymentIntentPaymentMethodOptionsBancontact> implements IConvertible
{
    String? PreferredLanguage;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsBancontact({this.PreferredLanguage,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsBancontact.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        PreferredLanguage = json['PreferredLanguage'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'PreferredLanguage': PreferredLanguage,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsBancontact";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBlik extends StripeEntity1<PaymentIntentPaymentMethodOptionsBlik> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsBlik({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsBlik.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsBlik";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsBoleto extends StripeEntity1<PaymentIntentPaymentMethodOptionsBoleto> implements IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsBoleto({this.ExpiresAfterDays,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsBoleto.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsBoleto";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardInstallmentsPlan extends StripeEntity1<PaymentIntentPaymentMethodOptionsCardInstallmentsPlan> implements IConvertible
{
    int? Count;
    String? Interval;
    String? Type;

    PaymentIntentPaymentMethodOptionsCardInstallmentsPlan({this.Count,this.Interval,this.Type});
    PaymentIntentPaymentMethodOptionsCardInstallmentsPlan.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Count = json['Count'];
        Interval = json['Interval'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Count': Count,
        'Interval': Interval,
        'Type': Type
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardInstallmentsPlan";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardInstallments extends StripeEntity1<PaymentIntentPaymentMethodOptionsCardInstallments> implements IConvertible
{
    List<PaymentIntentPaymentMethodOptionsCardInstallmentsPlan>? AvailablePlans;
    bool? Enabled;
    PaymentIntentPaymentMethodOptionsCardInstallmentsPlan? Plan;

    PaymentIntentPaymentMethodOptionsCardInstallments({this.AvailablePlans,this.Enabled,this.Plan});
    PaymentIntentPaymentMethodOptionsCardInstallments.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AvailablePlans = JsonConverters.fromJson(json['AvailablePlans'],'List<PaymentIntentPaymentMethodOptionsCardInstallmentsPlan>',context!);
        Enabled = json['Enabled'];
        Plan = JsonConverters.fromJson(json['Plan'],'PaymentIntentPaymentMethodOptionsCardInstallmentsPlan',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AvailablePlans': JsonConverters.toJson(AvailablePlans,'List<PaymentIntentPaymentMethodOptionsCardInstallmentsPlan>',context!),
        'Enabled': Enabled,
        'Plan': JsonConverters.toJson(Plan,'PaymentIntentPaymentMethodOptionsCardInstallmentsPlan',context!)
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardInstallments";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardMandateOptions extends StripeEntity1<PaymentIntentPaymentMethodOptionsCardMandateOptions> implements IConvertible
{
    int? Amount;
    String? AmountType;
    String? Description;
    DateTime? EndDate;
    String? Interval;
    int? IntervalCount;
    String? Reference;
    DateTime? StartDate;
    List<String>? SupportedTypes;

    PaymentIntentPaymentMethodOptionsCardMandateOptions({this.Amount,this.AmountType,this.Description,this.EndDate,this.Interval,this.IntervalCount,this.Reference,this.StartDate,this.SupportedTypes});
    PaymentIntentPaymentMethodOptionsCardMandateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        AmountType = json['AmountType'];
        Description = json['Description'];
        EndDate = JsonConverters.fromJson(json['EndDate'],'DateTime',context!);
        Interval = json['Interval'];
        IntervalCount = json['IntervalCount'];
        Reference = json['Reference'];
        StartDate = JsonConverters.fromJson(json['StartDate'],'DateTime',context!);
        SupportedTypes = JsonConverters.fromJson(json['SupportedTypes'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'AmountType': AmountType,
        'Description': Description,
        'EndDate': JsonConverters.toJson(EndDate,'DateTime',context!),
        'Interval': Interval,
        'IntervalCount': IntervalCount,
        'Reference': Reference,
        'StartDate': JsonConverters.toJson(StartDate,'DateTime',context!),
        'SupportedTypes': JsonConverters.toJson(SupportedTypes,'List<String>',context!)
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardMandateOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCard extends StripeEntity1<PaymentIntentPaymentMethodOptionsCard> implements IConvertible
{
    String? CaptureMethod;
    PaymentIntentPaymentMethodOptionsCardInstallments? Installments;
    PaymentIntentPaymentMethodOptionsCardMandateOptions? MandateOptions;
    String? Network;
    String? RequestExtendedAuthorization;
    String? RequestIncrementalAuthorization;
    String? RequestMulticapture;
    String? RequestOvercapture;
    String? RequestThreeDSecure;
    bool? RequireCvcRecollection;
    String? SetupFutureUsage;
    String? StatementDescriptorSuffixKana;
    String? StatementDescriptorSuffixKanji;

    PaymentIntentPaymentMethodOptionsCard({this.CaptureMethod,this.Installments,this.MandateOptions,this.Network,this.RequestExtendedAuthorization,this.RequestIncrementalAuthorization,this.RequestMulticapture,this.RequestOvercapture,this.RequestThreeDSecure,this.RequireCvcRecollection,this.SetupFutureUsage,this.StatementDescriptorSuffixKana,this.StatementDescriptorSuffixKanji});
    PaymentIntentPaymentMethodOptionsCard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        Installments = JsonConverters.fromJson(json['Installments'],'PaymentIntentPaymentMethodOptionsCardInstallments',context!);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsCardMandateOptions',context!);
        Network = json['Network'];
        RequestExtendedAuthorization = json['RequestExtendedAuthorization'];
        RequestIncrementalAuthorization = json['RequestIncrementalAuthorization'];
        RequestMulticapture = json['RequestMulticapture'];
        RequestOvercapture = json['RequestOvercapture'];
        RequestThreeDSecure = json['RequestThreeDSecure'];
        RequireCvcRecollection = json['RequireCvcRecollection'];
        SetupFutureUsage = json['SetupFutureUsage'];
        StatementDescriptorSuffixKana = json['StatementDescriptorSuffixKana'];
        StatementDescriptorSuffixKanji = json['StatementDescriptorSuffixKanji'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'Installments': JsonConverters.toJson(Installments,'PaymentIntentPaymentMethodOptionsCardInstallments',context!),
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsCardMandateOptions',context!),
        'Network': Network,
        'RequestExtendedAuthorization': RequestExtendedAuthorization,
        'RequestIncrementalAuthorization': RequestIncrementalAuthorization,
        'RequestMulticapture': RequestMulticapture,
        'RequestOvercapture': RequestOvercapture,
        'RequestThreeDSecure': RequestThreeDSecure,
        'RequireCvcRecollection': RequireCvcRecollection,
        'SetupFutureUsage': SetupFutureUsage,
        'StatementDescriptorSuffixKana': StatementDescriptorSuffixKana,
        'StatementDescriptorSuffixKanji': StatementDescriptorSuffixKanji
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCard";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardPresentRouting extends StripeEntity1<PaymentIntentPaymentMethodOptionsCardPresentRouting> implements IConvertible
{
    String? RequestedPriority;

    PaymentIntentPaymentMethodOptionsCardPresentRouting({this.RequestedPriority});
    PaymentIntentPaymentMethodOptionsCardPresentRouting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        RequestedPriority = json['RequestedPriority'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'RequestedPriority': RequestedPriority
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardPresentRouting";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCardPresent extends StripeEntity1<PaymentIntentPaymentMethodOptionsCardPresent> implements IConvertible
{
    bool? RequestExtendedAuthorization;
    bool? RequestIncrementalAuthorizationSupport;
    PaymentIntentPaymentMethodOptionsCardPresentRouting? Routing;

    PaymentIntentPaymentMethodOptionsCardPresent({this.RequestExtendedAuthorization,this.RequestIncrementalAuthorizationSupport,this.Routing});
    PaymentIntentPaymentMethodOptionsCardPresent.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        RequestExtendedAuthorization = json['RequestExtendedAuthorization'];
        RequestIncrementalAuthorizationSupport = json['RequestIncrementalAuthorizationSupport'];
        Routing = JsonConverters.fromJson(json['Routing'],'PaymentIntentPaymentMethodOptionsCardPresentRouting',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'RequestExtendedAuthorization': RequestExtendedAuthorization,
        'RequestIncrementalAuthorizationSupport': RequestIncrementalAuthorizationSupport,
        'Routing': JsonConverters.toJson(Routing,'PaymentIntentPaymentMethodOptionsCardPresentRouting',context!)
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCardPresent";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCashapp extends StripeEntity1<PaymentIntentPaymentMethodOptionsCashapp> implements IConvertible
{
    String? CaptureMethod;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsCashapp({this.CaptureMethod,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsCashapp.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCashapp";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer extends StripeEntity1<PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer> implements IConvertible
{
    String? Country;

    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer({this.Country});
    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Country = json['Country'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Country': Country
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer extends StripeEntity1<PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer? EuBankTransfer;
    List<String>? RequestedAddressTypes;
    String? Type;

    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer({this.EuBankTransfer,this.RequestedAddressTypes,this.Type});
    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        EuBankTransfer = JsonConverters.fromJson(json['EuBankTransfer'],'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer',context!);
        RequestedAddressTypes = JsonConverters.fromJson(json['RequestedAddressTypes'],'List<String>',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'EuBankTransfer': JsonConverters.toJson(EuBankTransfer,'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer',context!),
        'RequestedAddressTypes': JsonConverters.toJson(RequestedAddressTypes,'List<String>',context!),
        'Type': Type
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsCustomerBalance extends StripeEntity1<PaymentIntentPaymentMethodOptionsCustomerBalance> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer? BankTransfer;
    String? FundingType;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsCustomerBalance({this.BankTransfer,this.FundingType,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsCustomerBalance.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BankTransfer = JsonConverters.fromJson(json['BankTransfer'],'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer',context!);
        FundingType = json['FundingType'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BankTransfer': JsonConverters.toJson(BankTransfer,'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer',context!),
        'FundingType': FundingType,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsCustomerBalance";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsEps extends StripeEntity1<PaymentIntentPaymentMethodOptionsEps> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsEps({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsEps.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsEps";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsFpx extends StripeEntity1<PaymentIntentPaymentMethodOptionsFpx> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsFpx({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsFpx.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsFpx";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsGiropay extends StripeEntity1<PaymentIntentPaymentMethodOptionsGiropay> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsGiropay({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsGiropay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsGiropay";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsGrabpay extends StripeEntity1<PaymentIntentPaymentMethodOptionsGrabpay> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsGrabpay({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsGrabpay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsGrabpay";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsIdeal extends StripeEntity1<PaymentIntentPaymentMethodOptionsIdeal> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsIdeal({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsIdeal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsIdeal";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsInteracPresent extends StripeEntity1<PaymentIntentPaymentMethodOptionsInteracPresent> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsInteracPresent();
    PaymentIntentPaymentMethodOptionsInteracPresent.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentIntentPaymentMethodOptionsInteracPresent";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsKlarna extends StripeEntity1<PaymentIntentPaymentMethodOptionsKlarna> implements IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsKlarna({this.CaptureMethod,this.PreferredLocale,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsKlarna.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsKlarna";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsKonbini extends StripeEntity1<PaymentIntentPaymentMethodOptionsKonbini> implements IConvertible
{
    String? ConfirmationNumber;
    int? ExpiresAfterDays;
    DateTime? ExpiresAt;
    String? ProductDescription;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsKonbini({this.ConfirmationNumber,this.ExpiresAfterDays,this.ExpiresAt,this.ProductDescription,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsKonbini.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ConfirmationNumber = json['ConfirmationNumber'];
        ExpiresAfterDays = json['ExpiresAfterDays'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        ProductDescription = json['ProductDescription'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ConfirmationNumber': ConfirmationNumber,
        'ExpiresAfterDays': ExpiresAfterDays,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'ProductDescription': ProductDescription,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsKonbini";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsLink extends StripeEntity1<PaymentIntentPaymentMethodOptionsLink> implements IConvertible
{
    String? CaptureMethod;
    String? PersistentToken;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsLink({this.CaptureMethod,this.PersistentToken,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsLink.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        PersistentToken = json['PersistentToken'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'PersistentToken': PersistentToken,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsLink";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsMobilepay extends StripeEntity1<PaymentIntentPaymentMethodOptionsMobilepay> implements IConvertible
{
    String? CaptureMethod;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsMobilepay({this.CaptureMethod,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsMobilepay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsMobilepay";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsMultibanco extends StripeEntity1<PaymentIntentPaymentMethodOptionsMultibanco> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsMultibanco({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsMultibanco.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsMultibanco";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsOxxo extends StripeEntity1<PaymentIntentPaymentMethodOptionsOxxo> implements IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsOxxo({this.ExpiresAfterDays,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsOxxo.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAfterDays = json['ExpiresAfterDays'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAfterDays': ExpiresAfterDays,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsOxxo";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsP24 extends StripeEntity1<PaymentIntentPaymentMethodOptionsP24> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsP24({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsP24.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsP24";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsPaynow extends StripeEntity1<PaymentIntentPaymentMethodOptionsPaynow> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsPaynow({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsPaynow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsPaynow";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsPaypal extends StripeEntity1<PaymentIntentPaymentMethodOptionsPaypal> implements IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? Reference;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsPaypal({this.CaptureMethod,this.PreferredLocale,this.Reference,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsPaypal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        Reference = json['Reference'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'Reference': Reference,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsPaypal";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsPix extends StripeEntity1<PaymentIntentPaymentMethodOptionsPix> implements IConvertible
{
    int? ExpiresAfterSeconds;
    DateTime? ExpiresAt;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsPix({this.ExpiresAfterSeconds,this.ExpiresAt,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsPix.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ExpiresAfterSeconds = json['ExpiresAfterSeconds'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ExpiresAfterSeconds': ExpiresAfterSeconds,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsPix";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsPromptpay extends StripeEntity1<PaymentIntentPaymentMethodOptionsPromptpay> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsPromptpay({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsPromptpay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsPromptpay";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsRevolutPay extends StripeEntity1<PaymentIntentPaymentMethodOptionsRevolutPay> implements IConvertible
{
    String? CaptureMethod;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsRevolutPay({this.CaptureMethod,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsRevolutPay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsRevolutPay";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions extends StripeEntity1<PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions();
    PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsSepaDebit extends StripeEntity1<PaymentIntentPaymentMethodOptionsSepaDebit> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions? MandateOptions;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsSepaDebit({this.MandateOptions,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsSepaDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions',context!),
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsSepaDebit";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsSofort extends StripeEntity1<PaymentIntentPaymentMethodOptionsSofort> implements IConvertible
{
    String? PreferredLanguage;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsSofort({this.PreferredLanguage,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsSofort.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        PreferredLanguage = json['PreferredLanguage'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'PreferredLanguage': PreferredLanguage,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsSofort";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsSwish extends StripeEntity1<PaymentIntentPaymentMethodOptionsSwish> implements IConvertible
{
    String? Reference;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsSwish({this.Reference,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsSwish.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Reference = json['Reference'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Reference': Reference,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsSwish";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsTwint extends StripeEntity1<PaymentIntentPaymentMethodOptionsTwint> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsTwint({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsTwint.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsTwint";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters extends StripeEntity1<PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters> implements IConvertible
{
    List<String>? AccountSubcategories;

    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters({this.AccountSubcategories});
    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountSubcategories = JsonConverters.fromJson(json['AccountSubcategories'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountSubcategories': JsonConverters.toJson(AccountSubcategories,'List<String>',context!)
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections extends StripeEntity1<PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters? Filters;
    List<String>? Permissions;
    List<String>? Prefetch;
    String? ReturnUrl;

    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections({this.Filters,this.Permissions,this.Prefetch,this.ReturnUrl});
    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Filters = JsonConverters.fromJson(json['Filters'],'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters',context!);
        Permissions = JsonConverters.fromJson(json['Permissions'],'List<String>',context!);
        Prefetch = JsonConverters.fromJson(json['Prefetch'],'List<String>',context!);
        ReturnUrl = json['ReturnUrl'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Filters': JsonConverters.toJson(Filters,'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters',context!),
        'Permissions': JsonConverters.toJson(Permissions,'List<String>',context!),
        'Prefetch': JsonConverters.toJson(Prefetch,'List<String>',context!),
        'ReturnUrl': ReturnUrl
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions extends StripeEntity1<PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions> implements IConvertible
{
    String? CollectionMethod;

    PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions({this.CollectionMethod});
    PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CollectionMethod = json['CollectionMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CollectionMethod': CollectionMethod
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsUsBankAccount extends StripeEntity1<PaymentIntentPaymentMethodOptionsUsBankAccount> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections? FinancialConnections;
    PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions? MandateOptions;
    String? PreferredSettlementSpeed;
    String? SetupFutureUsage;
    String? VerificationMethod;

    PaymentIntentPaymentMethodOptionsUsBankAccount({this.FinancialConnections,this.MandateOptions,this.PreferredSettlementSpeed,this.SetupFutureUsage,this.VerificationMethod});
    PaymentIntentPaymentMethodOptionsUsBankAccount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FinancialConnections = JsonConverters.fromJson(json['FinancialConnections'],'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections',context!);
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions',context!);
        PreferredSettlementSpeed = json['PreferredSettlementSpeed'];
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FinancialConnections': JsonConverters.toJson(FinancialConnections,'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections',context!),
        'MandateOptions': JsonConverters.toJson(MandateOptions,'PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions',context!),
        'PreferredSettlementSpeed': PreferredSettlementSpeed,
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsUsBankAccount";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsWechatPay extends StripeEntity1<PaymentIntentPaymentMethodOptionsWechatPay> implements IConvertible
{
    String? AppId;
    String? Client;
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsWechatPay({this.AppId,this.Client,this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsWechatPay.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AppId = json['AppId'];
        Client = json['Client'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AppId': AppId,
        'Client': Client,
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsWechatPay";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptionsZip extends StripeEntity1<PaymentIntentPaymentMethodOptionsZip> implements IConvertible
{
    String? SetupFutureUsage;

    PaymentIntentPaymentMethodOptionsZip({this.SetupFutureUsage});
    PaymentIntentPaymentMethodOptionsZip.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SetupFutureUsage': SetupFutureUsage
    });

    getTypeName() => "PaymentIntentPaymentMethodOptionsZip";
    TypeContext? context = _ctx;
}

class PaymentIntentPaymentMethodOptions extends StripeEntity1<PaymentIntentPaymentMethodOptions> implements IConvertible
{
    PaymentIntentPaymentMethodOptionsAcssDebit? AcssDebit;
    PaymentIntentPaymentMethodOptionsAffirm? Affirm;
    PaymentIntentPaymentMethodOptionsAfterpayClearpay? AfterpayClearpay;
    PaymentIntentPaymentMethodOptionsAlipay? Alipay;
    PaymentIntentPaymentMethodOptionsAmazonPay? AmazonPay;
    PaymentIntentPaymentMethodOptionsAuBecsDebit? AuBecsDebit;
    PaymentIntentPaymentMethodOptionsBacsDebit? BacsDebit;
    PaymentIntentPaymentMethodOptionsBancontact? Bancontact;
    PaymentIntentPaymentMethodOptionsBlik? Blik;
    PaymentIntentPaymentMethodOptionsBoleto? Boleto;
    PaymentIntentPaymentMethodOptionsCard? Card;
    PaymentIntentPaymentMethodOptionsCardPresent? CardPresent;
    PaymentIntentPaymentMethodOptionsCashapp? Cashapp;
    PaymentIntentPaymentMethodOptionsCustomerBalance? CustomerBalance;
    PaymentIntentPaymentMethodOptionsEps? Eps;
    PaymentIntentPaymentMethodOptionsFpx? Fpx;
    PaymentIntentPaymentMethodOptionsGiropay? Giropay;
    PaymentIntentPaymentMethodOptionsGrabpay? Grabpay;
    PaymentIntentPaymentMethodOptionsIdeal? Ideal;
    PaymentIntentPaymentMethodOptionsInteracPresent? InteracPresent;
    PaymentIntentPaymentMethodOptionsKlarna? Klarna;
    PaymentIntentPaymentMethodOptionsKonbini? Konbini;
    PaymentIntentPaymentMethodOptionsLink? Link;
    PaymentIntentPaymentMethodOptionsMobilepay? Mobilepay;
    PaymentIntentPaymentMethodOptionsMultibanco? Multibanco;
    PaymentIntentPaymentMethodOptionsOxxo? Oxxo;
    PaymentIntentPaymentMethodOptionsP24? P24;
    PaymentIntentPaymentMethodOptionsPaynow? Paynow;
    PaymentIntentPaymentMethodOptionsPaypal? Paypal;
    PaymentIntentPaymentMethodOptionsPix? Pix;
    PaymentIntentPaymentMethodOptionsPromptpay? Promptpay;
    PaymentIntentPaymentMethodOptionsRevolutPay? RevolutPay;
    PaymentIntentPaymentMethodOptionsSepaDebit? SepaDebit;
    PaymentIntentPaymentMethodOptionsSofort? Sofort;
    PaymentIntentPaymentMethodOptionsSwish? Swish;
    PaymentIntentPaymentMethodOptionsTwint? Twint;
    PaymentIntentPaymentMethodOptionsUsBankAccount? UsBankAccount;
    PaymentIntentPaymentMethodOptionsWechatPay? WechatPay;
    PaymentIntentPaymentMethodOptionsZip? Zip;

    PaymentIntentPaymentMethodOptions({this.AcssDebit,this.Affirm,this.AfterpayClearpay,this.Alipay,this.AmazonPay,this.AuBecsDebit,this.BacsDebit,this.Bancontact,this.Blik,this.Boleto,this.Card,this.CardPresent,this.Cashapp,this.CustomerBalance,this.Eps,this.Fpx,this.Giropay,this.Grabpay,this.Ideal,this.InteracPresent,this.Klarna,this.Konbini,this.Link,this.Mobilepay,this.Multibanco,this.Oxxo,this.P24,this.Paynow,this.Paypal,this.Pix,this.Promptpay,this.RevolutPay,this.SepaDebit,this.Sofort,this.Swish,this.Twint,this.UsBankAccount,this.WechatPay,this.Zip});
    PaymentIntentPaymentMethodOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AcssDebit = JsonConverters.fromJson(json['AcssDebit'],'PaymentIntentPaymentMethodOptionsAcssDebit',context!);
        Affirm = JsonConverters.fromJson(json['Affirm'],'PaymentIntentPaymentMethodOptionsAffirm',context!);
        AfterpayClearpay = JsonConverters.fromJson(json['AfterpayClearpay'],'PaymentIntentPaymentMethodOptionsAfterpayClearpay',context!);
        Alipay = JsonConverters.fromJson(json['Alipay'],'PaymentIntentPaymentMethodOptionsAlipay',context!);
        AmazonPay = JsonConverters.fromJson(json['AmazonPay'],'PaymentIntentPaymentMethodOptionsAmazonPay',context!);
        AuBecsDebit = JsonConverters.fromJson(json['AuBecsDebit'],'PaymentIntentPaymentMethodOptionsAuBecsDebit',context!);
        BacsDebit = JsonConverters.fromJson(json['BacsDebit'],'PaymentIntentPaymentMethodOptionsBacsDebit',context!);
        Bancontact = JsonConverters.fromJson(json['Bancontact'],'PaymentIntentPaymentMethodOptionsBancontact',context!);
        Blik = JsonConverters.fromJson(json['Blik'],'PaymentIntentPaymentMethodOptionsBlik',context!);
        Boleto = JsonConverters.fromJson(json['Boleto'],'PaymentIntentPaymentMethodOptionsBoleto',context!);
        Card = JsonConverters.fromJson(json['Card'],'PaymentIntentPaymentMethodOptionsCard',context!);
        CardPresent = JsonConverters.fromJson(json['CardPresent'],'PaymentIntentPaymentMethodOptionsCardPresent',context!);
        Cashapp = JsonConverters.fromJson(json['Cashapp'],'PaymentIntentPaymentMethodOptionsCashapp',context!);
        CustomerBalance = JsonConverters.fromJson(json['CustomerBalance'],'PaymentIntentPaymentMethodOptionsCustomerBalance',context!);
        Eps = JsonConverters.fromJson(json['Eps'],'PaymentIntentPaymentMethodOptionsEps',context!);
        Fpx = JsonConverters.fromJson(json['Fpx'],'PaymentIntentPaymentMethodOptionsFpx',context!);
        Giropay = JsonConverters.fromJson(json['Giropay'],'PaymentIntentPaymentMethodOptionsGiropay',context!);
        Grabpay = JsonConverters.fromJson(json['Grabpay'],'PaymentIntentPaymentMethodOptionsGrabpay',context!);
        Ideal = JsonConverters.fromJson(json['Ideal'],'PaymentIntentPaymentMethodOptionsIdeal',context!);
        InteracPresent = JsonConverters.fromJson(json['InteracPresent'],'PaymentIntentPaymentMethodOptionsInteracPresent',context!);
        Klarna = JsonConverters.fromJson(json['Klarna'],'PaymentIntentPaymentMethodOptionsKlarna',context!);
        Konbini = JsonConverters.fromJson(json['Konbini'],'PaymentIntentPaymentMethodOptionsKonbini',context!);
        Link = JsonConverters.fromJson(json['Link'],'PaymentIntentPaymentMethodOptionsLink',context!);
        Mobilepay = JsonConverters.fromJson(json['Mobilepay'],'PaymentIntentPaymentMethodOptionsMobilepay',context!);
        Multibanco = JsonConverters.fromJson(json['Multibanco'],'PaymentIntentPaymentMethodOptionsMultibanco',context!);
        Oxxo = JsonConverters.fromJson(json['Oxxo'],'PaymentIntentPaymentMethodOptionsOxxo',context!);
        P24 = JsonConverters.fromJson(json['P24'],'PaymentIntentPaymentMethodOptionsP24',context!);
        Paynow = JsonConverters.fromJson(json['Paynow'],'PaymentIntentPaymentMethodOptionsPaynow',context!);
        Paypal = JsonConverters.fromJson(json['Paypal'],'PaymentIntentPaymentMethodOptionsPaypal',context!);
        Pix = JsonConverters.fromJson(json['Pix'],'PaymentIntentPaymentMethodOptionsPix',context!);
        Promptpay = JsonConverters.fromJson(json['Promptpay'],'PaymentIntentPaymentMethodOptionsPromptpay',context!);
        RevolutPay = JsonConverters.fromJson(json['RevolutPay'],'PaymentIntentPaymentMethodOptionsRevolutPay',context!);
        SepaDebit = JsonConverters.fromJson(json['SepaDebit'],'PaymentIntentPaymentMethodOptionsSepaDebit',context!);
        Sofort = JsonConverters.fromJson(json['Sofort'],'PaymentIntentPaymentMethodOptionsSofort',context!);
        Swish = JsonConverters.fromJson(json['Swish'],'PaymentIntentPaymentMethodOptionsSwish',context!);
        Twint = JsonConverters.fromJson(json['Twint'],'PaymentIntentPaymentMethodOptionsTwint',context!);
        UsBankAccount = JsonConverters.fromJson(json['UsBankAccount'],'PaymentIntentPaymentMethodOptionsUsBankAccount',context!);
        WechatPay = JsonConverters.fromJson(json['WechatPay'],'PaymentIntentPaymentMethodOptionsWechatPay',context!);
        Zip = JsonConverters.fromJson(json['Zip'],'PaymentIntentPaymentMethodOptionsZip',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AcssDebit': JsonConverters.toJson(AcssDebit,'PaymentIntentPaymentMethodOptionsAcssDebit',context!),
        'Affirm': JsonConverters.toJson(Affirm,'PaymentIntentPaymentMethodOptionsAffirm',context!),
        'AfterpayClearpay': JsonConverters.toJson(AfterpayClearpay,'PaymentIntentPaymentMethodOptionsAfterpayClearpay',context!),
        'Alipay': JsonConverters.toJson(Alipay,'PaymentIntentPaymentMethodOptionsAlipay',context!),
        'AmazonPay': JsonConverters.toJson(AmazonPay,'PaymentIntentPaymentMethodOptionsAmazonPay',context!),
        'AuBecsDebit': JsonConverters.toJson(AuBecsDebit,'PaymentIntentPaymentMethodOptionsAuBecsDebit',context!),
        'BacsDebit': JsonConverters.toJson(BacsDebit,'PaymentIntentPaymentMethodOptionsBacsDebit',context!),
        'Bancontact': JsonConverters.toJson(Bancontact,'PaymentIntentPaymentMethodOptionsBancontact',context!),
        'Blik': JsonConverters.toJson(Blik,'PaymentIntentPaymentMethodOptionsBlik',context!),
        'Boleto': JsonConverters.toJson(Boleto,'PaymentIntentPaymentMethodOptionsBoleto',context!),
        'Card': JsonConverters.toJson(Card,'PaymentIntentPaymentMethodOptionsCard',context!),
        'CardPresent': JsonConverters.toJson(CardPresent,'PaymentIntentPaymentMethodOptionsCardPresent',context!),
        'Cashapp': JsonConverters.toJson(Cashapp,'PaymentIntentPaymentMethodOptionsCashapp',context!),
        'CustomerBalance': JsonConverters.toJson(CustomerBalance,'PaymentIntentPaymentMethodOptionsCustomerBalance',context!),
        'Eps': JsonConverters.toJson(Eps,'PaymentIntentPaymentMethodOptionsEps',context!),
        'Fpx': JsonConverters.toJson(Fpx,'PaymentIntentPaymentMethodOptionsFpx',context!),
        'Giropay': JsonConverters.toJson(Giropay,'PaymentIntentPaymentMethodOptionsGiropay',context!),
        'Grabpay': JsonConverters.toJson(Grabpay,'PaymentIntentPaymentMethodOptionsGrabpay',context!),
        'Ideal': JsonConverters.toJson(Ideal,'PaymentIntentPaymentMethodOptionsIdeal',context!),
        'InteracPresent': JsonConverters.toJson(InteracPresent,'PaymentIntentPaymentMethodOptionsInteracPresent',context!),
        'Klarna': JsonConverters.toJson(Klarna,'PaymentIntentPaymentMethodOptionsKlarna',context!),
        'Konbini': JsonConverters.toJson(Konbini,'PaymentIntentPaymentMethodOptionsKonbini',context!),
        'Link': JsonConverters.toJson(Link,'PaymentIntentPaymentMethodOptionsLink',context!),
        'Mobilepay': JsonConverters.toJson(Mobilepay,'PaymentIntentPaymentMethodOptionsMobilepay',context!),
        'Multibanco': JsonConverters.toJson(Multibanco,'PaymentIntentPaymentMethodOptionsMultibanco',context!),
        'Oxxo': JsonConverters.toJson(Oxxo,'PaymentIntentPaymentMethodOptionsOxxo',context!),
        'P24': JsonConverters.toJson(P24,'PaymentIntentPaymentMethodOptionsP24',context!),
        'Paynow': JsonConverters.toJson(Paynow,'PaymentIntentPaymentMethodOptionsPaynow',context!),
        'Paypal': JsonConverters.toJson(Paypal,'PaymentIntentPaymentMethodOptionsPaypal',context!),
        'Pix': JsonConverters.toJson(Pix,'PaymentIntentPaymentMethodOptionsPix',context!),
        'Promptpay': JsonConverters.toJson(Promptpay,'PaymentIntentPaymentMethodOptionsPromptpay',context!),
        'RevolutPay': JsonConverters.toJson(RevolutPay,'PaymentIntentPaymentMethodOptionsRevolutPay',context!),
        'SepaDebit': JsonConverters.toJson(SepaDebit,'PaymentIntentPaymentMethodOptionsSepaDebit',context!),
        'Sofort': JsonConverters.toJson(Sofort,'PaymentIntentPaymentMethodOptionsSofort',context!),
        'Swish': JsonConverters.toJson(Swish,'PaymentIntentPaymentMethodOptionsSwish',context!),
        'Twint': JsonConverters.toJson(Twint,'PaymentIntentPaymentMethodOptionsTwint',context!),
        'UsBankAccount': JsonConverters.toJson(UsBankAccount,'PaymentIntentPaymentMethodOptionsUsBankAccount',context!),
        'WechatPay': JsonConverters.toJson(WechatPay,'PaymentIntentPaymentMethodOptionsWechatPay',context!),
        'Zip': JsonConverters.toJson(Zip,'PaymentIntentPaymentMethodOptionsZip',context!)
    });

    getTypeName() => "PaymentIntentPaymentMethodOptions";
    TypeContext? context = _ctx;
}

class PaymentIntentProcessingCardCustomerNotification extends StripeEntity1<PaymentIntentProcessingCardCustomerNotification> implements IConvertible
{
    bool? ApprovalRequested;
    DateTime? CompletesAt;

    PaymentIntentProcessingCardCustomerNotification({this.ApprovalRequested,this.CompletesAt});
    PaymentIntentProcessingCardCustomerNotification.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ApprovalRequested = json['ApprovalRequested'];
        CompletesAt = JsonConverters.fromJson(json['CompletesAt'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ApprovalRequested': ApprovalRequested,
        'CompletesAt': JsonConverters.toJson(CompletesAt,'DateTime',context!)
    });

    getTypeName() => "PaymentIntentProcessingCardCustomerNotification";
    TypeContext? context = _ctx;
}

class PaymentIntentProcessingCard extends StripeEntity1<PaymentIntentProcessingCard> implements IConvertible
{
    PaymentIntentProcessingCardCustomerNotification? CustomerNotification;

    PaymentIntentProcessingCard({this.CustomerNotification});
    PaymentIntentProcessingCard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CustomerNotification = JsonConverters.fromJson(json['CustomerNotification'],'PaymentIntentProcessingCardCustomerNotification',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CustomerNotification': JsonConverters.toJson(CustomerNotification,'PaymentIntentProcessingCardCustomerNotification',context!)
    });

    getTypeName() => "PaymentIntentProcessingCard";
    TypeContext? context = _ctx;
}

class PaymentIntentProcessing extends StripeEntity1<PaymentIntentProcessing> implements IConvertible
{
    PaymentIntentProcessingCard? Card;
    String? Type;

    PaymentIntentProcessing({this.Card,this.Type});
    PaymentIntentProcessing.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Card = JsonConverters.fromJson(json['Card'],'PaymentIntentProcessingCard',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Card': JsonConverters.toJson(Card,'PaymentIntentProcessingCard',context!),
        'Type': Type
    });

    getTypeName() => "PaymentIntentProcessing";
    TypeContext? context = _ctx;
}

class PaymentIntentTransferData extends StripeEntity1<PaymentIntentTransferData> implements IConvertible
{
    int? Amount;

    PaymentIntentTransferData({this.Amount});
    PaymentIntentTransferData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount
    });

    getTypeName() => "PaymentIntentTransferData";
    TypeContext? context = _ctx;
}

class PaymentIntent extends StripeEntity1<PaymentIntent> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    int? Amount;
    int? AmountCapturable;
    PaymentIntentAmountDetails? AmountDetails;
    int? AmountReceived;
    int? ApplicationFeeAmount;
    PaymentIntentAutomaticPaymentMethods? AutomaticPaymentMethods;
    DateTime? CanceledAt;
    String? CancellationReason;
    String? CaptureMethod;
    String? ClientSecret;
    String? ConfirmationMethod;
    DateTime? Created;
    String? Currency;
    String? Description;
    StripeError? LastPaymentError;
    bool? Livemode;
    Map<String,String?>? Metadata;
    PaymentIntentNextAction? NextAction;
    PaymentIntentPaymentMethodConfigurationDetails? PaymentMethodConfigurationDetails;
    PaymentIntentPaymentMethodOptions? PaymentMethodOptions;
    List<String>? PaymentMethodTypes;
    PaymentIntentProcessing? Processing;
    String? ReceiptEmail;
    String? SetupFutureUsage;
    Shipping? Shipping;
    String? StatementDescriptor;
    String? StatementDescriptorSuffix;
    String? Status;
    PaymentIntentTransferData? TransferData;
    String? TransferGroup;

    PaymentIntent({this.Id,this.Object,this.Amount,this.AmountCapturable,this.AmountDetails,this.AmountReceived,this.ApplicationFeeAmount,this.AutomaticPaymentMethods,this.CanceledAt,this.CancellationReason,this.CaptureMethod,this.ClientSecret,this.ConfirmationMethod,this.Created,this.Currency,this.Description,this.LastPaymentError,this.Livemode,this.Metadata,this.NextAction,this.PaymentMethodConfigurationDetails,this.PaymentMethodOptions,this.PaymentMethodTypes,this.Processing,this.ReceiptEmail,this.SetupFutureUsage,this.Shipping,this.StatementDescriptor,this.StatementDescriptorSuffix,this.Status,this.TransferData,this.TransferGroup});
    PaymentIntent.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        Amount = json['Amount'];
        AmountCapturable = json['AmountCapturable'];
        AmountDetails = JsonConverters.fromJson(json['AmountDetails'],'PaymentIntentAmountDetails',context!);
        AmountReceived = json['AmountReceived'];
        ApplicationFeeAmount = json['ApplicationFeeAmount'];
        AutomaticPaymentMethods = JsonConverters.fromJson(json['AutomaticPaymentMethods'],'PaymentIntentAutomaticPaymentMethods',context!);
        CanceledAt = JsonConverters.fromJson(json['CanceledAt'],'DateTime',context!);
        CancellationReason = json['CancellationReason'];
        CaptureMethod = json['CaptureMethod'];
        ClientSecret = json['ClientSecret'];
        ConfirmationMethod = json['ConfirmationMethod'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Currency = json['Currency'];
        Description = json['Description'];
        LastPaymentError = JsonConverters.fromJson(json['LastPaymentError'],'StripeError',context!);
        Livemode = json['Livemode'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        NextAction = JsonConverters.fromJson(json['NextAction'],'PaymentIntentNextAction',context!);
        PaymentMethodConfigurationDetails = JsonConverters.fromJson(json['PaymentMethodConfigurationDetails'],'PaymentIntentPaymentMethodConfigurationDetails',context!);
        PaymentMethodOptions = JsonConverters.fromJson(json['PaymentMethodOptions'],'PaymentIntentPaymentMethodOptions',context!);
        PaymentMethodTypes = JsonConverters.fromJson(json['PaymentMethodTypes'],'List<String>',context!);
        Processing = JsonConverters.fromJson(json['Processing'],'PaymentIntentProcessing',context!);
        ReceiptEmail = json['ReceiptEmail'];
        SetupFutureUsage = json['SetupFutureUsage'];
        Shipping = JsonConverters.fromJson(json['Shipping'],'Shipping',context!);
        StatementDescriptor = json['StatementDescriptor'];
        StatementDescriptorSuffix = json['StatementDescriptorSuffix'];
        Status = json['Status'];
        TransferData = JsonConverters.fromJson(json['TransferData'],'PaymentIntentTransferData',context!);
        TransferGroup = json['TransferGroup'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'Amount': Amount,
        'AmountCapturable': AmountCapturable,
        'AmountDetails': JsonConverters.toJson(AmountDetails,'PaymentIntentAmountDetails',context!),
        'AmountReceived': AmountReceived,
        'ApplicationFeeAmount': ApplicationFeeAmount,
        'AutomaticPaymentMethods': JsonConverters.toJson(AutomaticPaymentMethods,'PaymentIntentAutomaticPaymentMethods',context!),
        'CanceledAt': JsonConverters.toJson(CanceledAt,'DateTime',context!),
        'CancellationReason': CancellationReason,
        'CaptureMethod': CaptureMethod,
        'ClientSecret': ClientSecret,
        'ConfirmationMethod': ConfirmationMethod,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Currency': Currency,
        'Description': Description,
        'LastPaymentError': JsonConverters.toJson(LastPaymentError,'StripeError',context!),
        'Livemode': Livemode,
        'Metadata': Metadata,
        'NextAction': JsonConverters.toJson(NextAction,'PaymentIntentNextAction',context!),
        'PaymentMethodConfigurationDetails': JsonConverters.toJson(PaymentMethodConfigurationDetails,'PaymentIntentPaymentMethodConfigurationDetails',context!),
        'PaymentMethodOptions': JsonConverters.toJson(PaymentMethodOptions,'PaymentIntentPaymentMethodOptions',context!),
        'PaymentMethodTypes': JsonConverters.toJson(PaymentMethodTypes,'List<String>',context!),
        'Processing': JsonConverters.toJson(Processing,'PaymentIntentProcessing',context!),
        'ReceiptEmail': ReceiptEmail,
        'SetupFutureUsage': SetupFutureUsage,
        'Shipping': JsonConverters.toJson(Shipping,'Shipping',context!),
        'StatementDescriptor': StatementDescriptor,
        'StatementDescriptorSuffix': StatementDescriptorSuffix,
        'Status': Status,
        'TransferData': JsonConverters.toJson(TransferData,'PaymentIntentTransferData',context!),
        'TransferGroup': TransferGroup
    });

    getTypeName() => "PaymentIntent";
    TypeContext? context = _ctx;
}

class CustomSessionData implements IConvertible
{
    Session? Session;
    List<LineItem>? LineItems;
    PaymentIntent? PaymentIntent;

    CustomSessionData({this.Session,this.LineItems,this.PaymentIntent});
    CustomSessionData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Session = JsonConverters.fromJson(json['Session'],'Session',context!);
        LineItems = JsonConverters.fromJson(json['LineItems'],'List<LineItem>',context!);
        PaymentIntent = JsonConverters.fromJson(json['PaymentIntent'],'PaymentIntent',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Session': JsonConverters.toJson(Session,'Session',context!),
        'LineItems': JsonConverters.toJson(LineItems,'List<LineItem>',context!),
        'PaymentIntent': JsonConverters.toJson(PaymentIntent,'PaymentIntent',context!)
    };

    getTypeName() => "CustomSessionData";
    TypeContext? context = _ctx;
}

class CustomPaymentIntentData implements IConvertible
{
    PaymentIntent? PaymentIntent;

    CustomPaymentIntentData({this.PaymentIntent});
    CustomPaymentIntentData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PaymentIntent = JsonConverters.fromJson(json['PaymentIntent'],'PaymentIntent',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PaymentIntent': JsonConverters.toJson(PaymentIntent,'PaymentIntent',context!)
    };

    getTypeName() => "CustomPaymentIntentData";
    TypeContext? context = _ctx;
}

class CustomCheckoutData implements IConvertible
{
    CustomSessionData? CustomSessionData;
    CustomPaymentIntentData? CustomPaymentIntentData;

    CustomCheckoutData({this.CustomSessionData,this.CustomPaymentIntentData});
    CustomCheckoutData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CustomSessionData = JsonConverters.fromJson(json['CustomSessionData'],'CustomSessionData',context!);
        CustomPaymentIntentData = JsonConverters.fromJson(json['CustomPaymentIntentData'],'CustomPaymentIntentData',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CustomSessionData': JsonConverters.toJson(CustomSessionData,'CustomSessionData',context!),
        'CustomPaymentIntentData': JsonConverters.toJson(CustomPaymentIntentData,'CustomPaymentIntentData',context!)
    };

    getTypeName() => "CustomCheckoutData";
    TypeContext? context = _ctx;
}

abstract class IPaysonPaymentCheckout1
{
}

class PaymentLog extends BaseModel implements IConvertible
{
    // @References(typeof(Currency))
    String? CurrencyId;

    Currency? CurrencyInfo;
    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? InternalReferenceId;

    // @Required()
    int? ArticleTypeId;

    String? PaymentReferenceId;
    int? PaymentProviderId;
    String? OrderItemReferenceId;
    double? Amount;
    double? VAT;
    double? AmountCredited;
    String? Comments;
    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;

    PaymentLog({this.CurrencyId,this.CurrencyInfo,this.CompanyId,this.Id,this.InternalReferenceId,this.ArticleTypeId,this.PaymentReferenceId,this.PaymentProviderId,this.OrderItemReferenceId,this.Amount,this.VAT,this.AmountCredited,this.Comments,this.Created,this.Updated,this.ModifiedDate});
    PaymentLog.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        InternalReferenceId = json['InternalReferenceId'];
        ArticleTypeId = json['ArticleTypeId'];
        PaymentReferenceId = json['PaymentReferenceId'];
        PaymentProviderId = json['PaymentProviderId'];
        OrderItemReferenceId = json['OrderItemReferenceId'];
        Amount = JsonConverters.toDouble(json['Amount']);
        VAT = JsonConverters.toDouble(json['VAT']);
        AmountCredited = JsonConverters.toDouble(json['AmountCredited']);
        Comments = json['Comments'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'InternalReferenceId': InternalReferenceId,
        'ArticleTypeId': ArticleTypeId,
        'PaymentReferenceId': PaymentReferenceId,
        'PaymentProviderId': PaymentProviderId,
        'OrderItemReferenceId': OrderItemReferenceId,
        'Amount': Amount,
        'VAT': VAT,
        'AmountCredited': AmountCredited,
        'Comments': Comments,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "PaymentLog";
    TypeContext? context = _ctx;
}

abstract class PayableEntity extends BaseModel
{
    // @Ignore()
    IDbConnectionFactory? DbFactory;

    // @Ignore()
    IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>? QvicklyPaymentManager;

    // @Ignore()
    IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>? Payson2PaymentManager;

    // @Ignore()
    IBokameraPaymentManager<StripeCreateCheckoutQuery,CustomCheckoutData,CustomCheckoutData>? StripePaymentManager;

    // @Ignore()
    IPaysonPaymentCheckout1? PaysonPaymentCheckout1;

    // @Ignore()
    ILogger<PayableEntity>? Logger;

    // @Ignore()
    String? InternalReferenceId;

    // @Ignore()
    List<PaymentLog>? PaymentLog;

    String? CompanyId;
    double? PriceVat;
    // @References(typeof(Currency))
    String? CurrencyId;

    // @Ignore()
    Customer? Customer;

    // @Ignore()
    List<Customer>? Customers;

    // @Ignore()
    Company? Company;

    PayableEntity({this.DbFactory,this.QvicklyPaymentManager,this.Payson2PaymentManager,this.StripePaymentManager,this.PaysonPaymentCheckout1,this.Logger,this.InternalReferenceId,this.PaymentLog,this.CompanyId,this.PriceVat,this.CurrencyId,this.Customer,this.Customers,this.Company});
    PayableEntity.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DbFactory = JsonConverters.fromJson(json['DbFactory'],'IDbConnectionFactory',context!);
        QvicklyPaymentManager = JsonConverters.fromJson(json['QvicklyPaymentManager'],'IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>',context!);
        Payson2PaymentManager = JsonConverters.fromJson(json['Payson2PaymentManager'],'IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>',context!);
        StripePaymentManager = JsonConverters.fromJson(json['StripePaymentManager'],'IBokameraPaymentManager<StripeCreateCheckoutQuery,CustomCheckoutData,CustomCheckoutData>',context!);
        PaysonPaymentCheckout1 = JsonConverters.fromJson(json['PaysonPaymentCheckout1'],'IPaysonPaymentCheckout1',context!);
        Logger = JsonConverters.fromJson(json['Logger'],'ILogger<PayableEntity>',context!);
        InternalReferenceId = json['InternalReferenceId'];
        PaymentLog = JsonConverters.fromJson(json['PaymentLog'],'List<PaymentLog>',context!);
        CompanyId = json['CompanyId'];
        PriceVat = JsonConverters.toDouble(json['PriceVat']);
        CurrencyId = json['CurrencyId'];
        Customer = JsonConverters.fromJson(json['Customer'],'Customer',context!);
        Customers = JsonConverters.fromJson(json['Customers'],'List<Customer>',context!);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DbFactory': JsonConverters.toJson(DbFactory,'IDbConnectionFactory',context!),
        'QvicklyPaymentManager': JsonConverters.toJson(QvicklyPaymentManager,'IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>',context!),
        'Payson2PaymentManager': JsonConverters.toJson(Payson2PaymentManager,'IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>',context!),
        'StripePaymentManager': JsonConverters.toJson(StripePaymentManager,'IBokameraPaymentManager<StripeCreateCheckoutQuery,CustomCheckoutData,CustomCheckoutData>',context!),
        'PaysonPaymentCheckout1': JsonConverters.toJson(PaysonPaymentCheckout1,'IPaysonPaymentCheckout1',context!),
        'Logger': JsonConverters.toJson(Logger,'ILogger<PayableEntity>',context!),
        'InternalReferenceId': InternalReferenceId,
        'PaymentLog': JsonConverters.toJson(PaymentLog,'List<PaymentLog>',context!),
        'CompanyId': CompanyId,
        'PriceVat': PriceVat,
        'CurrencyId': CurrencyId,
        'Customer': JsonConverters.toJson(Customer,'Customer',context!),
        'Customers': JsonConverters.toJson(Customers,'List<Customer>',context!),
        'Company': JsonConverters.toJson(Company,'Company',context!)
    });

    getTypeName() => "PayableEntity";
    TypeContext? context = _ctx;
}

class RebateCodeStatus extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    String? Description;
    DateTime? ModifiedDate;
    int? Id;

    RebateCodeStatus({this.Name,this.Description,this.ModifiedDate,this.Id});
    RebateCodeStatus.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "RebateCodeStatus";
    TypeContext? context = _ctx;
}

class ArticleServiceRelation extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    int? ServiceId;

    // @Required()
    int? ArticleId;

    ArticleServiceRelation({this.CompanyId,this.Id,this.ServiceId,this.ArticleId});
    ArticleServiceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ServiceId = json['ServiceId'];
        ArticleId = json['ArticleId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'ServiceId': ServiceId,
        'ArticleId': ArticleId
    });

    getTypeName() => "ArticleServiceRelation";
    TypeContext? context = _ctx;
}

enum ArticleTypeEnum
{
    ServiceArticle,
    StandAloneArticle,
    RebateCodePunchTicketArticle,
    RebateCodeGiftCardArticle,
    RebateCodeValueCardArticle,
}

class Article extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    Company? Company;
    Currency? CurrencyInfo;
    List<ArticleServiceRelation>? ArticleServiceRelations;
    // @Ignore()
    List<int>? ServiceIds;

    // @Ignore()
    ArticleTypeEnum? ArticleType;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? Name;

    // @Required()
    int? ArticleTypeId;

    String? Description;
    String? ImageUrl;
    // @Required()
    bool? Active;

    // @Required()
    int? Amount;

    // @Required()
    double? Price;

    double? VAT;
    // @Required()
    // @StringLength(50)
    String? CurrencyId;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

    Article({this.Company,this.CurrencyInfo,this.ArticleServiceRelations,this.ServiceIds,this.ArticleType,this.CompanyId,this.Id,this.Name,this.ArticleTypeId,this.Description,this.ImageUrl,this.Active,this.Amount,this.Price,this.VAT,this.CurrencyId,this.UpdatedDate,this.CreatedDate,this.ModifiedDate});
    Article.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        ArticleServiceRelations = JsonConverters.fromJson(json['ArticleServiceRelations'],'List<ArticleServiceRelation>',context!);
        ServiceIds = JsonConverters.fromJson(json['ServiceIds'],'List<int>',context!);
        ArticleType = JsonConverters.fromJson(json['ArticleType'],'ArticleTypeEnum',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        ArticleTypeId = json['ArticleTypeId'];
        Description = json['Description'];
        ImageUrl = json['ImageUrl'];
        Active = json['Active'];
        Amount = json['Amount'];
        Price = JsonConverters.toDouble(json['Price']);
        VAT = JsonConverters.toDouble(json['VAT']);
        CurrencyId = json['CurrencyId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Company': JsonConverters.toJson(Company,'Company',context!),
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'ArticleServiceRelations': JsonConverters.toJson(ArticleServiceRelations,'List<ArticleServiceRelation>',context!),
        'ServiceIds': JsonConverters.toJson(ServiceIds,'List<int>',context!),
        'ArticleType': JsonConverters.toJson(ArticleType,'ArticleTypeEnum',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'ArticleTypeId': ArticleTypeId,
        'Description': Description,
        'ImageUrl': ImageUrl,
        'Active': Active,
        'Amount': Amount,
        'Price': Price,
        'VAT': VAT,
        'CurrencyId': CurrencyId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "Article";
    TypeContext? context = _ctx;
}

class RebateCodeDayOfWeekRelation extends BaseModel implements IConvertible
{
    // @Ignore()
    BokaMeraDayOfWeek? DayOfWeek;

    // @Required()
    int? DayOfWeekId;

    // @Required()
    int? RebateCodeId;

    // @Required()
    String? CompanyId;

    int? Id;
    DateTime? ModifiedDate;

    RebateCodeDayOfWeekRelation({this.DayOfWeek,this.DayOfWeekId,this.RebateCodeId,this.CompanyId,this.Id,this.ModifiedDate});
    RebateCodeDayOfWeekRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DayOfWeek = JsonConverters.fromJson(json['DayOfWeek'],'BokaMeraDayOfWeek',context!);
        DayOfWeekId = json['DayOfWeekId'];
        RebateCodeId = json['RebateCodeId'];
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DayOfWeek': JsonConverters.toJson(DayOfWeek,'BokaMeraDayOfWeek',context!),
        'DayOfWeekId': DayOfWeekId,
        'RebateCodeId': RebateCodeId,
        'CompanyId': CompanyId,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "RebateCodeDayOfWeekRelation";
    TypeContext? context = _ctx;
}

class RebateCodeServiceRelation extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    int? ServiceId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;

    RebateCodeServiceRelation({this.CompanyId,this.ServiceId,this.RebateCodeId,this.Id,this.ModifiedDate});
    RebateCodeServiceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        ServiceId = json['ServiceId'];
        RebateCodeId = json['RebateCodeId'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'ServiceId': ServiceId,
        'RebateCodeId': RebateCodeId,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "RebateCodeServiceRelation";
    TypeContext? context = _ctx;
}

class RebateCodeBookingPriceRelation extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    int? PriceId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;

    RebateCodeBookingPriceRelation({this.CompanyId,this.PriceId,this.RebateCodeId,this.Id,this.ModifiedDate});
    RebateCodeBookingPriceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        PriceId = json['PriceId'];
        RebateCodeId = json['RebateCodeId'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'PriceId': PriceId,
        'RebateCodeId': RebateCodeId,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "RebateCodeBookingPriceRelation";
    TypeContext? context = _ctx;
}

class RebateCodeCustomerRelation extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    String? CustomerId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;
    bool? RebateCodeEmailSentToCustomer;
    String? MessageToReceiver;
    bool? Buyer;

    RebateCodeCustomerRelation({this.CompanyId,this.CustomerId,this.RebateCodeId,this.Id,this.ModifiedDate,this.RebateCodeEmailSentToCustomer,this.MessageToReceiver,this.Buyer});
    RebateCodeCustomerRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        CustomerId = json['CustomerId'];
        RebateCodeId = json['RebateCodeId'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        RebateCodeEmailSentToCustomer = json['RebateCodeEmailSentToCustomer'];
        MessageToReceiver = json['MessageToReceiver'];
        Buyer = json['Buyer'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'CustomerId': CustomerId,
        'RebateCodeId': RebateCodeId,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'RebateCodeEmailSentToCustomer': RebateCodeEmailSentToCustomer,
        'MessageToReceiver': MessageToReceiver,
        'Buyer': Buyer
    });

    getTypeName() => "RebateCodeCustomerRelation";
    TypeContext? context = _ctx;
}

class DaysOfWeek extends BaseModel implements IConvertible
{
    // @Required()
    String? DayOfWeek;

    // @Required()
    String? DayOfWeekTranslation;

    bool? DayOfWeekActive;
    int? DayOfWeekSortOrder;
    DateTime? ModifiedDate;
    int? Id;

    DaysOfWeek({this.DayOfWeek,this.DayOfWeekTranslation,this.DayOfWeekActive,this.DayOfWeekSortOrder,this.ModifiedDate,this.Id});
    DaysOfWeek.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DayOfWeek = json['DayOfWeek'];
        DayOfWeekTranslation = json['DayOfWeekTranslation'];
        DayOfWeekActive = json['DayOfWeekActive'];
        DayOfWeekSortOrder = json['DayOfWeekSortOrder'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DayOfWeek': DayOfWeek,
        'DayOfWeekTranslation': DayOfWeekTranslation,
        'DayOfWeekActive': DayOfWeekActive,
        'DayOfWeekSortOrder': DayOfWeekSortOrder,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "DaysOfWeek";
    TypeContext? context = _ctx;
}

class CalendarExport extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    // @Required()
    int? ExceptionId;

    bool? CalendarSync;
    String? CalendarId;
    bool? IsExceptionDeleted;
    DateTime? ModifiedDate;
    int? Id;

    CalendarExport({this.CompanyId,this.BookingId,this.ExceptionId,this.CalendarSync,this.CalendarId,this.IsExceptionDeleted,this.ModifiedDate,this.Id});
    CalendarExport.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        ExceptionId = json['ExceptionId'];
        CalendarSync = json['CalendarSync'];
        CalendarId = json['CalendarId'];
        IsExceptionDeleted = json['IsExceptionDeleted'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'ExceptionId': ExceptionId,
        'CalendarSync': CalendarSync,
        'CalendarId': CalendarId,
        'IsExceptionDeleted': IsExceptionDeleted,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "CalendarExport";
    TypeContext? context = _ctx;
}

class BookingLogEventType extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    BookingLogEventType({this.Name,this.Description,this.ModifiedDate,this.Id});
    BookingLogEventType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "BookingLogEventType";
    TypeContext? context = _ctx;
}

class BookingLog extends BaseModel implements IConvertible
{
    // @References(typeof(BookingLogEventType))
    int? EventTypeId;

    BookingLogEventType? EventType;
    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    int? Id;
    String? Comments;
    String? UserId;
    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;

    BookingLog({this.EventTypeId,this.EventType,this.CompanyId,this.BookingId,this.Id,this.Comments,this.UserId,this.Created,this.ModifiedDate});
    BookingLog.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        EventTypeId = json['EventTypeId'];
        EventType = JsonConverters.fromJson(json['EventType'],'BookingLogEventType',context!);
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        Id = json['Id'];
        Comments = json['Comments'];
        UserId = json['UserId'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'EventTypeId': EventTypeId,
        'EventType': JsonConverters.toJson(EventType,'BookingLogEventType',context!),
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'Id': Id,
        'Comments': Comments,
        'UserId': UserId,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "BookingLog";
    TypeContext? context = _ctx;
}

class PaymentDetails extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    QvicklyCheckoutResponse? QvicklyCheckoutSerialized;

    // @Ignore()
    Payson2CheckoutResponse? Payson2CheckoutSerialized;

    // @Ignore()
    CustomCheckoutData? StripeCheckoutSerialized;

    // @Required()
    String? CompanyId;

    // @Required()
    String? InternalReferenceId;

    // @Required()
    int? ArticleTypeId;

    // @Required()
    String? ExternalResponseData;

    // @Required()
    String? ExternalResponseReference;

    // @Required()
    int? PaymentProviderId;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    DateTime? UpdatedDate;

    DateTime? ModifiedDate;

    PaymentDetails({this.QvicklyCheckoutSerialized,this.Payson2CheckoutSerialized,this.StripeCheckoutSerialized,this.CompanyId,this.InternalReferenceId,this.ArticleTypeId,this.ExternalResponseData,this.ExternalResponseReference,this.PaymentProviderId,this.CreatedDate,this.UpdatedDate,this.ModifiedDate});
    PaymentDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        QvicklyCheckoutSerialized = JsonConverters.fromJson(json['QvicklyCheckoutSerialized'],'QvicklyCheckoutResponse',context!);
        Payson2CheckoutSerialized = JsonConverters.fromJson(json['Payson2CheckoutSerialized'],'Payson2CheckoutResponse',context!);
        StripeCheckoutSerialized = JsonConverters.fromJson(json['StripeCheckoutSerialized'],'CustomCheckoutData',context!);
        CompanyId = json['CompanyId'];
        InternalReferenceId = json['InternalReferenceId'];
        ArticleTypeId = json['ArticleTypeId'];
        ExternalResponseData = json['ExternalResponseData'];
        ExternalResponseReference = json['ExternalResponseReference'];
        PaymentProviderId = json['PaymentProviderId'];
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'QvicklyCheckoutSerialized': JsonConverters.toJson(QvicklyCheckoutSerialized,'QvicklyCheckoutResponse',context!),
        'Payson2CheckoutSerialized': JsonConverters.toJson(Payson2CheckoutSerialized,'Payson2CheckoutResponse',context!),
        'StripeCheckoutSerialized': JsonConverters.toJson(StripeCheckoutSerialized,'CustomCheckoutData',context!),
        'CompanyId': CompanyId,
        'InternalReferenceId': InternalReferenceId,
        'ArticleTypeId': ArticleTypeId,
        'ExternalResponseData': ExternalResponseData,
        'ExternalResponseReference': ExternalResponseReference,
        'PaymentProviderId': PaymentProviderId,
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "PaymentDetails";
    TypeContext? context = _ctx;
}

class BookingPrice extends BaseModel implements IConvertible
{
    // @References(typeof(Currency))
    String? CurrencyId;

    int? ServicePriceId;
    ServicePrice? ServicePrice;
    Currency? CurrencyInfo;
    // @Ignore()
    String? PriceText;

    // @Ignore()
    List<AppliedRebateCodes>? AppliedCodes;

    // @Ignore()
    bool? IsRebate;

    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    // @Required()
    int? Quantity;

    double? Price;
    double? VAT;
    String? Category;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    // @Required()
    bool? Invoiced;

    // @Required()
    bool? OccupiesSpot;

    DateTime? ModifiedDate;
    int? Id;

    BookingPrice({this.CurrencyId,this.ServicePriceId,this.ServicePrice,this.CurrencyInfo,this.PriceText,this.AppliedCodes,this.IsRebate,this.CompanyId,this.BookingId,this.Quantity,this.Price,this.VAT,this.Category,this.Updated,this.Created,this.Invoiced,this.OccupiesSpot,this.ModifiedDate,this.Id});
    BookingPrice.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        ServicePriceId = json['ServicePriceId'];
        ServicePrice = JsonConverters.fromJson(json['ServicePrice'],'ServicePrice',context!);
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        PriceText = json['PriceText'];
        AppliedCodes = JsonConverters.fromJson(json['AppliedCodes'],'List<AppliedRebateCodes>',context!);
        IsRebate = json['IsRebate'];
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        Quantity = json['Quantity'];
        Price = JsonConverters.toDouble(json['Price']);
        VAT = JsonConverters.toDouble(json['VAT']);
        Category = json['Category'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Invoiced = json['Invoiced'];
        OccupiesSpot = json['OccupiesSpot'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'ServicePriceId': ServicePriceId,
        'ServicePrice': JsonConverters.toJson(ServicePrice,'ServicePrice',context!),
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'PriceText': PriceText,
        'AppliedCodes': JsonConverters.toJson(AppliedCodes,'List<AppliedRebateCodes>',context!),
        'IsRebate': IsRebate,
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'Quantity': Quantity,
        'Price': Price,
        'VAT': VAT,
        'Category': Category,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Invoiced': Invoiced,
        'OccupiesSpot': OccupiesSpot,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "BookingPrice";
    TypeContext? context = _ctx;
}

class BookingStatus extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Color;

    // @Required()
    String? Icon;

    DateTime? ModifiedDate;
    int? Id;

    BookingStatus({this.Name,this.Description,this.Color,this.Icon,this.ModifiedDate,this.Id});
    BookingStatus.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Color = json['Color'];
        Icon = json['Icon'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Color': Color,
        'Icon': Icon,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "BookingStatus";
    TypeContext? context = _ctx;
}

class BookedResource implements IConvertible
{
    int? Id;
    String? Name;
    String? Color;
    Uri? ImageUrl;
    String? Email;
    String? MobilePhone;
    String? AccessGroup;
    bool? EmailNotification;
    bool? SMSNotification;
    bool? EmailReminder;
    bool? SMSReminder;

    BookedResource({this.Id,this.Name,this.Color,this.ImageUrl,this.Email,this.MobilePhone,this.AccessGroup,this.EmailNotification,this.SMSNotification,this.EmailReminder,this.SMSReminder});
    BookedResource.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Color = json['Color'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        Email = json['Email'];
        MobilePhone = json['MobilePhone'];
        AccessGroup = json['AccessGroup'];
        EmailNotification = json['EmailNotification'];
        SMSNotification = json['SMSNotification'];
        EmailReminder = json['EmailReminder'];
        SMSReminder = json['SMSReminder'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Color': Color,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'Email': Email,
        'MobilePhone': MobilePhone,
        'AccessGroup': AccessGroup,
        'EmailNotification': EmailNotification,
        'SMSNotification': SMSNotification,
        'EmailReminder': EmailReminder,
        'SMSReminder': SMSReminder
    };

    getTypeName() => "BookedResource";
    TypeContext? context = _ctx;
}

class BookedResourceType implements IConvertible
{
    /**
    * The resource type id
    */
    // @ApiMember(Description="The resource type id")
    int? Id;

    /**
    * The resource type name
    */
    // @ApiMember(Description="The resource type name")
    String? Name;

    /**
    * The resources inside resource type
    */
    // @ApiMember(Description="The resources inside resource type")
    List<BookedResource>? Resources;

    BookedResourceType({this.Id,this.Name,this.Resources});
    BookedResourceType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Resources = JsonConverters.fromJson(json['Resources'],'List<BookedResource>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Resources': JsonConverters.toJson(Resources,'List<BookedResource>',context!)
    };

    getTypeName() => "BookedResourceType";
    TypeContext? context = _ctx;
}

class Booking extends PayableEntity implements IInterval, ICustomFieldTable, IBaseModelUpdated, IBaseModelCreated, IConvertible
{
    // @Ignore()
    Service? Service;

    // @Ignore()
    CalendarExport? CalendarExport;

    // @Ignore()
    List<BookingLog>? Log;

    // @Ignore()
    List<PaymentDetails>? CheckoutLogs;

    // @Ignore()
    List<BookingPrice>? Prices;

    // @Ignore()
    BookingStatusEnum? Status;

    // @Ignore()
    bool? IsReserved;

    // @Ignore()
    String? StatusName;

    Currency? CurrencyInfo;
    BookingStatus? BookingStatus;
    // @Ignore()
    double? TotalPrice;

    // @Ignore()
    int? TotalSpots;

    // @Ignore()
    List<Resource>? Resources;

    // @Ignore()
    List<ExternalReference>? ExternalReferences;

    // @Ignore()
    List<BookedResourceType>? BookedResources;

    // @Ignore()
    List<CustomFieldConfig>? CustomFieldsConfig;

    // @Ignore()
    List<CustomFieldDataResponse>? CustomFieldsData;

    // @Ignore()
    String? DeterministicId;

    // @Ignore()
    bool? Active;

    // @Ignore()
    DateTime? LastTimeToUnBook;

    // @Ignore()
    List<PriceMapping>? PriceMappings;

    // @Ignore()
    String? InternalReferenceId;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    int? Id;
    // @Required()
    String? CustomerId;

    // @Required()
    int? ServiceId;

    // @Required()
    int? StatusId;

    DateTime? UnbookedOn;
    String? UnbookedComments;
    String? BookedComments;
    // @Required()
    String? BookedBy;

    String? UnBookedBy;
    // @Required()
    bool? SendSmsReminder;

    // @Required()
    bool? SendEmailReminder;

    // @Required()
    bool? SendSmsConfirmation;

    String? RebateCode;
    String? Comments;
    String? IpAddress;
    // @Required()
    int? NumberOfBookedSpots;

    String? CommentsToCustomer;
    DateTime? PaymentExpiration;
    // @Required()
    bool? SendEmailConfirmation;

    String? CancellationCode;
    DateTime? ModifiedDate;
    String? RatingCode;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;
    // @Required()
    DateTime? From;

    // @Required()
    DateTime? To;

    Booking({this.Service,this.CalendarExport,this.Log,this.CheckoutLogs,this.Prices,this.Status,this.IsReserved,this.StatusName,this.CurrencyInfo,this.BookingStatus,this.TotalPrice,this.TotalSpots,this.Resources,this.ExternalReferences,this.BookedResources,this.CustomFieldsConfig,this.CustomFieldsData,this.DeterministicId,this.Active,this.LastTimeToUnBook,this.PriceMappings,this.InternalReferenceId,this.UpdatedDate,this.CreatedDate,this.Id,this.CustomerId,this.ServiceId,this.StatusId,this.UnbookedOn,this.UnbookedComments,this.BookedComments,this.BookedBy,this.UnBookedBy,this.SendSmsReminder,this.SendEmailReminder,this.SendSmsConfirmation,this.RebateCode,this.Comments,this.IpAddress,this.NumberOfBookedSpots,this.CommentsToCustomer,this.PaymentExpiration,this.SendEmailConfirmation,this.CancellationCode,this.ModifiedDate,this.RatingCode,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20,this.From,this.To});
    Booking.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Service = JsonConverters.fromJson(json['Service'],'Service',context!);
        CalendarExport = JsonConverters.fromJson(json['CalendarExport'],'CalendarExport',context!);
        Log = JsonConverters.fromJson(json['Log'],'List<BookingLog>',context!);
        CheckoutLogs = JsonConverters.fromJson(json['CheckoutLogs'],'List<PaymentDetails>',context!);
        Prices = JsonConverters.fromJson(json['Prices'],'List<BookingPrice>',context!);
        Status = JsonConverters.fromJson(json['Status'],'BookingStatusEnum',context!);
        IsReserved = json['IsReserved'];
        StatusName = json['StatusName'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        BookingStatus = JsonConverters.fromJson(json['BookingStatus'],'BookingStatus',context!);
        TotalPrice = JsonConverters.toDouble(json['TotalPrice']);
        TotalSpots = json['TotalSpots'];
        Resources = JsonConverters.fromJson(json['Resources'],'List<Resource>',context!);
        ExternalReferences = JsonConverters.fromJson(json['ExternalReferences'],'List<ExternalReference>',context!);
        BookedResources = JsonConverters.fromJson(json['BookedResources'],'List<BookedResourceType>',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        DeterministicId = json['DeterministicId'];
        Active = json['Active'];
        LastTimeToUnBook = JsonConverters.fromJson(json['LastTimeToUnBook'],'DateTime',context!);
        PriceMappings = JsonConverters.fromJson(json['PriceMappings'],'List<PriceMapping>',context!);
        InternalReferenceId = json['InternalReferenceId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        Id = json['Id'];
        CustomerId = json['CustomerId'];
        ServiceId = json['ServiceId'];
        StatusId = json['StatusId'];
        UnbookedOn = JsonConverters.fromJson(json['UnbookedOn'],'DateTime',context!);
        UnbookedComments = json['UnbookedComments'];
        BookedComments = json['BookedComments'];
        BookedBy = json['BookedBy'];
        UnBookedBy = json['UnBookedBy'];
        SendSmsReminder = json['SendSmsReminder'];
        SendEmailReminder = json['SendEmailReminder'];
        SendSmsConfirmation = json['SendSmsConfirmation'];
        RebateCode = json['RebateCode'];
        Comments = json['Comments'];
        IpAddress = json['IpAddress'];
        NumberOfBookedSpots = json['NumberOfBookedSpots'];
        CommentsToCustomer = json['CommentsToCustomer'];
        PaymentExpiration = JsonConverters.fromJson(json['PaymentExpiration'],'DateTime',context!);
        SendEmailConfirmation = json['SendEmailConfirmation'];
        CancellationCode = json['CancellationCode'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        RatingCode = json['RatingCode'];
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        From = JsonConverters.fromJson(json['From'],'DateTime',context!);
        To = JsonConverters.fromJson(json['To'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Service': JsonConverters.toJson(Service,'Service',context!),
        'CalendarExport': JsonConverters.toJson(CalendarExport,'CalendarExport',context!),
        'Log': JsonConverters.toJson(Log,'List<BookingLog>',context!),
        'CheckoutLogs': JsonConverters.toJson(CheckoutLogs,'List<PaymentDetails>',context!),
        'Prices': JsonConverters.toJson(Prices,'List<BookingPrice>',context!),
        'Status': JsonConverters.toJson(Status,'BookingStatusEnum',context!),
        'IsReserved': IsReserved,
        'StatusName': StatusName,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'BookingStatus': JsonConverters.toJson(BookingStatus,'BookingStatus',context!),
        'TotalPrice': TotalPrice,
        'TotalSpots': TotalSpots,
        'Resources': JsonConverters.toJson(Resources,'List<Resource>',context!),
        'ExternalReferences': JsonConverters.toJson(ExternalReferences,'List<ExternalReference>',context!),
        'BookedResources': JsonConverters.toJson(BookedResources,'List<BookedResourceType>',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'DeterministicId': DeterministicId,
        'Active': Active,
        'LastTimeToUnBook': JsonConverters.toJson(LastTimeToUnBook,'DateTime',context!),
        'PriceMappings': JsonConverters.toJson(PriceMappings,'List<PriceMapping>',context!),
        'InternalReferenceId': InternalReferenceId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'Id': Id,
        'CustomerId': CustomerId,
        'ServiceId': ServiceId,
        'StatusId': StatusId,
        'UnbookedOn': JsonConverters.toJson(UnbookedOn,'DateTime',context!),
        'UnbookedComments': UnbookedComments,
        'BookedComments': BookedComments,
        'BookedBy': BookedBy,
        'UnBookedBy': UnBookedBy,
        'SendSmsReminder': SendSmsReminder,
        'SendEmailReminder': SendEmailReminder,
        'SendSmsConfirmation': SendSmsConfirmation,
        'RebateCode': RebateCode,
        'Comments': Comments,
        'IpAddress': IpAddress,
        'NumberOfBookedSpots': NumberOfBookedSpots,
        'CommentsToCustomer': CommentsToCustomer,
        'PaymentExpiration': JsonConverters.toJson(PaymentExpiration,'DateTime',context!),
        'SendEmailConfirmation': SendEmailConfirmation,
        'CancellationCode': CancellationCode,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'RatingCode': RatingCode,
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20,
        'From': JsonConverters.toJson(From,'DateTime',context!),
        'To': JsonConverters.toJson(To,'DateTime',context!)
    });

    getTypeName() => "Booking";
    TypeContext? context = _ctx;
}

class RebateCodeTransaction extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    Booking? Booking;

    // @Ignore()
    RebateCode? RebateCode;

    // @Ignore()
    Customer? Customer;

    int? Id;
    String? CompanyId;
    String? Note;
    // @Required()
    int? RebateCodeId;

    // @Required()
    double? Amount;

    // @Required()
    int? Usage;

    int? BookingId;
    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    RebateCodeTransaction({this.Booking,this.RebateCode,this.Customer,this.Id,this.CompanyId,this.Note,this.RebateCodeId,this.Amount,this.Usage,this.BookingId,this.UpdatedDate,this.CreatedDate});
    RebateCodeTransaction.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Booking = JsonConverters.fromJson(json['Booking'],'Booking',context!);
        RebateCode = JsonConverters.fromJson(json['RebateCode'],'RebateCode',context!);
        Customer = JsonConverters.fromJson(json['Customer'],'Customer',context!);
        Id = json['Id'];
        CompanyId = json['CompanyId'];
        Note = json['Note'];
        RebateCodeId = json['RebateCodeId'];
        Amount = JsonConverters.toDouble(json['Amount']);
        Usage = json['Usage'];
        BookingId = json['BookingId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Booking': JsonConverters.toJson(Booking,'Booking',context!),
        'RebateCode': JsonConverters.toJson(RebateCode,'RebateCode',context!),
        'Customer': JsonConverters.toJson(Customer,'Customer',context!),
        'Id': Id,
        'CompanyId': CompanyId,
        'Note': Note,
        'RebateCodeId': RebateCodeId,
        'Amount': Amount,
        'Usage': Usage,
        'BookingId': BookingId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!)
    });

    getTypeName() => "RebateCodeTransaction";
    TypeContext? context = _ctx;
}

class RebateCode extends PayableEntity implements IConvertible
{
    // @References(typeof(RebateCodeType))
    int? RebateCodeTypeId;

    RebateCodeType? RebateCodeTypeInfo;
    // @References(typeof(RebateCodeStatus))
    int? RebateCodeStatusId;

    RebateCodeStatus? RebateCodeStatusInfo;
    // @Ignore()
    Article? Article;

    // @Ignore()
    List<Service>? Services;

    List<RebateCodeDayOfWeekRelation>? RebateCodeDayOfWeekRelation;
    List<RebateCodeServiceRelation>? RebateCodeServiceRelation;
    List<RebateCodeBookingPriceRelation>? RebateCodeBookingPriceRelation;
    List<RebateCodeCustomerRelation>? RebateCodeCustomerRelation;
    // @Ignore()
    String? ServicesNames;

    // @Ignore()
    List<DaysOfWeek>? DaysOfWeek;

    // @Ignore()
    RebateCodeStatus? RebateCodeStatus;

    // @Ignore()
    RebateCodeType? RebateCodeType;

    // @Ignore()
    List<RebateCodeTransaction>? Transactions;

    // @Ignore()
    double? RemainingAmount;

    // @Ignore()
    int? RemainingUsage;

    // @Ignore()
    int? CurrentNumberOfUsesPerCustomer;

    // @Ignore()
    bool? IsSpecificByDayOfWeek;

    // @Ignore()
    bool? Active;

    // @Ignore()
    bool? ActiveByStatus;

    // @Ignore()
    String? RebateCodeCurrencySign;

    Currency? CurrencyInfo;
    // @Ignore()
    bool? PaymentReceived;

    // @Ignore()
    String? InternalReferenceId;

    // @Required()
    DateTime? ValidFrom;

    // @Required()
    DateTime? ValidTo;

    // @Required()
    String? RebateCodeSign;

    // @Required()
    int? RebateCodeValue;

    // @Required()
    int? MaxNumberOfUses;

    // @Required()
    int? MaxNumberOfUsesPerCustomer;

    // @Required()
    int? NumberOfUsesUsed;

    String? PersonalNote;
    // @Required()
    String? CreatedBy;

    // @Required()
    DateTime? Created;

    // @Required()
    String? UpdatedBy;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    Duration? FromTime;

    // @Required()
    Duration? ToTime;

    DateTime? ModifiedDate;
    int? Id;
    int? ArticleId;

    RebateCode({this.RebateCodeTypeId,this.RebateCodeTypeInfo,this.RebateCodeStatusId,this.RebateCodeStatusInfo,this.Article,this.Services,this.RebateCodeDayOfWeekRelation,this.RebateCodeServiceRelation,this.RebateCodeBookingPriceRelation,this.RebateCodeCustomerRelation,this.ServicesNames,this.DaysOfWeek,this.RebateCodeStatus,this.RebateCodeType,this.Transactions,this.RemainingAmount,this.RemainingUsage,this.CurrentNumberOfUsesPerCustomer,this.IsSpecificByDayOfWeek,this.Active,this.ActiveByStatus,this.RebateCodeCurrencySign,this.CurrencyInfo,this.PaymentReceived,this.InternalReferenceId,this.ValidFrom,this.ValidTo,this.RebateCodeSign,this.RebateCodeValue,this.MaxNumberOfUses,this.MaxNumberOfUsesPerCustomer,this.NumberOfUsesUsed,this.PersonalNote,this.CreatedBy,this.Created,this.UpdatedBy,this.UpdatedDate,this.FromTime,this.ToTime,this.ModifiedDate,this.Id,this.ArticleId});
    RebateCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        RebateCodeTypeId = json['RebateCodeTypeId'];
        RebateCodeTypeInfo = JsonConverters.fromJson(json['RebateCodeTypeInfo'],'RebateCodeType',context!);
        RebateCodeStatusId = json['RebateCodeStatusId'];
        RebateCodeStatusInfo = JsonConverters.fromJson(json['RebateCodeStatusInfo'],'RebateCodeStatus',context!);
        Article = JsonConverters.fromJson(json['Article'],'Article',context!);
        Services = JsonConverters.fromJson(json['Services'],'List<Service>',context!);
        RebateCodeDayOfWeekRelation = JsonConverters.fromJson(json['RebateCodeDayOfWeekRelation'],'List<RebateCodeDayOfWeekRelation>',context!);
        RebateCodeServiceRelation = JsonConverters.fromJson(json['RebateCodeServiceRelation'],'List<RebateCodeServiceRelation>',context!);
        RebateCodeBookingPriceRelation = JsonConverters.fromJson(json['RebateCodeBookingPriceRelation'],'List<RebateCodeBookingPriceRelation>',context!);
        RebateCodeCustomerRelation = JsonConverters.fromJson(json['RebateCodeCustomerRelation'],'List<RebateCodeCustomerRelation>',context!);
        ServicesNames = json['ServicesNames'];
        DaysOfWeek = JsonConverters.fromJson(json['DaysOfWeek'],'List<DaysOfWeek>',context!);
        RebateCodeStatus = JsonConverters.fromJson(json['RebateCodeStatus'],'RebateCodeStatus',context!);
        RebateCodeType = JsonConverters.fromJson(json['RebateCodeType'],'RebateCodeType',context!);
        Transactions = JsonConverters.fromJson(json['Transactions'],'List<RebateCodeTransaction>',context!);
        RemainingAmount = JsonConverters.toDouble(json['RemainingAmount']);
        RemainingUsage = json['RemainingUsage'];
        CurrentNumberOfUsesPerCustomer = json['CurrentNumberOfUsesPerCustomer'];
        IsSpecificByDayOfWeek = json['IsSpecificByDayOfWeek'];
        Active = json['Active'];
        ActiveByStatus = json['ActiveByStatus'];
        RebateCodeCurrencySign = json['RebateCodeCurrencySign'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        PaymentReceived = json['PaymentReceived'];
        InternalReferenceId = json['InternalReferenceId'];
        ValidFrom = JsonConverters.fromJson(json['ValidFrom'],'DateTime',context!);
        ValidTo = JsonConverters.fromJson(json['ValidTo'],'DateTime',context!);
        RebateCodeSign = json['RebateCodeSign'];
        RebateCodeValue = json['RebateCodeValue'];
        MaxNumberOfUses = json['MaxNumberOfUses'];
        MaxNumberOfUsesPerCustomer = json['MaxNumberOfUsesPerCustomer'];
        NumberOfUsesUsed = json['NumberOfUsesUsed'];
        PersonalNote = json['PersonalNote'];
        CreatedBy = json['CreatedBy'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        UpdatedBy = json['UpdatedBy'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        ArticleId = json['ArticleId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'RebateCodeTypeId': RebateCodeTypeId,
        'RebateCodeTypeInfo': JsonConverters.toJson(RebateCodeTypeInfo,'RebateCodeType',context!),
        'RebateCodeStatusId': RebateCodeStatusId,
        'RebateCodeStatusInfo': JsonConverters.toJson(RebateCodeStatusInfo,'RebateCodeStatus',context!),
        'Article': JsonConverters.toJson(Article,'Article',context!),
        'Services': JsonConverters.toJson(Services,'List<Service>',context!),
        'RebateCodeDayOfWeekRelation': JsonConverters.toJson(RebateCodeDayOfWeekRelation,'List<RebateCodeDayOfWeekRelation>',context!),
        'RebateCodeServiceRelation': JsonConverters.toJson(RebateCodeServiceRelation,'List<RebateCodeServiceRelation>',context!),
        'RebateCodeBookingPriceRelation': JsonConverters.toJson(RebateCodeBookingPriceRelation,'List<RebateCodeBookingPriceRelation>',context!),
        'RebateCodeCustomerRelation': JsonConverters.toJson(RebateCodeCustomerRelation,'List<RebateCodeCustomerRelation>',context!),
        'ServicesNames': ServicesNames,
        'DaysOfWeek': JsonConverters.toJson(DaysOfWeek,'List<DaysOfWeek>',context!),
        'RebateCodeStatus': JsonConverters.toJson(RebateCodeStatus,'RebateCodeStatus',context!),
        'RebateCodeType': JsonConverters.toJson(RebateCodeType,'RebateCodeType',context!),
        'Transactions': JsonConverters.toJson(Transactions,'List<RebateCodeTransaction>',context!),
        'RemainingAmount': RemainingAmount,
        'RemainingUsage': RemainingUsage,
        'CurrentNumberOfUsesPerCustomer': CurrentNumberOfUsesPerCustomer,
        'IsSpecificByDayOfWeek': IsSpecificByDayOfWeek,
        'Active': Active,
        'ActiveByStatus': ActiveByStatus,
        'RebateCodeCurrencySign': RebateCodeCurrencySign,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'PaymentReceived': PaymentReceived,
        'InternalReferenceId': InternalReferenceId,
        'ValidFrom': JsonConverters.toJson(ValidFrom,'DateTime',context!),
        'ValidTo': JsonConverters.toJson(ValidTo,'DateTime',context!),
        'RebateCodeSign': RebateCodeSign,
        'RebateCodeValue': RebateCodeValue,
        'MaxNumberOfUses': MaxNumberOfUses,
        'MaxNumberOfUsesPerCustomer': MaxNumberOfUsesPerCustomer,
        'NumberOfUsesUsed': NumberOfUsesUsed,
        'PersonalNote': PersonalNote,
        'CreatedBy': CreatedBy,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'UpdatedBy': UpdatedBy,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id,
        'ArticleId': ArticleId
    });

    getTypeName() => "RebateCode";
    TypeContext? context = _ctx;
}

class ServicePrice extends BaseModel implements IInterval, IConvertible
{
    // @References(typeof(Currency))
    String? CurrencyId;

    Currency? CurrencyInfo;
    // @Ignore()
    Service? Service;

    // @Ignore()
    List<PriceMapping>? PriceMappings;

    // @Ignore()
    bool? isTimeSpecific;

    // @Ignore()
    bool? isDaysOfWeekSpecific;

    List<ServicePriceDayOfWeekRelation>? DayOfWeeks;
    // @Ignore()
    double? PriceBeforeRebate;

    // @Ignore()
    List<RebateCode>? RebateCodesApplied;

    // @Ignore()
    String? PriceText;

    // @Ignore()
    List<ServicePrice>? OverlappingPrices;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    int? ServiceId;

    double? Price;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    // @Required()
    Duration? FromTime;

    // @Required()
    Duration? ToTime;

    // @Required()
    double? VAT;

    String? Category;
    DateTime? ModifiedDate;
    // @Required()
    DateTime? From;

    // @Required()
    DateTime? To;

    // @Required()
    int? CalculationTypeId;

    ServicePrice({this.CurrencyId,this.CurrencyInfo,this.Service,this.PriceMappings,this.isTimeSpecific,this.isDaysOfWeekSpecific,this.DayOfWeeks,this.PriceBeforeRebate,this.RebateCodesApplied,this.PriceText,this.OverlappingPrices,this.CompanyId,this.Id,this.ServiceId,this.Price,this.Updated,this.Created,this.FromTime,this.ToTime,this.VAT,this.Category,this.ModifiedDate,this.From,this.To,this.CalculationTypeId});
    ServicePrice.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        Service = JsonConverters.fromJson(json['Service'],'Service',context!);
        PriceMappings = JsonConverters.fromJson(json['PriceMappings'],'List<PriceMapping>',context!);
        isTimeSpecific = json['isTimeSpecific'];
        isDaysOfWeekSpecific = json['isDaysOfWeekSpecific'];
        DayOfWeeks = JsonConverters.fromJson(json['DayOfWeeks'],'List<ServicePriceDayOfWeekRelation>',context!);
        PriceBeforeRebate = JsonConverters.toDouble(json['PriceBeforeRebate']);
        RebateCodesApplied = JsonConverters.fromJson(json['RebateCodesApplied'],'List<RebateCode>',context!);
        PriceText = json['PriceText'];
        OverlappingPrices = JsonConverters.fromJson(json['OverlappingPrices'],'List<ServicePrice>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ServiceId = json['ServiceId'];
        Price = JsonConverters.toDouble(json['Price']);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        VAT = JsonConverters.toDouble(json['VAT']);
        Category = json['Category'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        From = JsonConverters.fromJson(json['From'],'DateTime',context!);
        To = JsonConverters.fromJson(json['To'],'DateTime',context!);
        CalculationTypeId = json['CalculationTypeId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'Service': JsonConverters.toJson(Service,'Service',context!),
        'PriceMappings': JsonConverters.toJson(PriceMappings,'List<PriceMapping>',context!),
        'isTimeSpecific': isTimeSpecific,
        'isDaysOfWeekSpecific': isDaysOfWeekSpecific,
        'DayOfWeeks': JsonConverters.toJson(DayOfWeeks,'List<ServicePriceDayOfWeekRelation>',context!),
        'PriceBeforeRebate': PriceBeforeRebate,
        'RebateCodesApplied': JsonConverters.toJson(RebateCodesApplied,'List<RebateCode>',context!),
        'PriceText': PriceText,
        'OverlappingPrices': JsonConverters.toJson(OverlappingPrices,'List<ServicePrice>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'ServiceId': ServiceId,
        'Price': Price,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'VAT': VAT,
        'Category': Category,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'From': JsonConverters.toJson(From,'DateTime',context!),
        'To': JsonConverters.toJson(To,'DateTime',context!),
        'CalculationTypeId': CalculationTypeId
    });

    getTypeName() => "ServicePrice";
    TypeContext? context = _ctx;
}

class Service extends BaseModel implements ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    List<ResourceType>? ResourceTypes;

    // @Ignore()
    List<Resource>? Resources;

    // @Ignore()
    TotalPriceInformation? TotalPrice;

    // @Ignore()
    List<ServicePrice>? Prices;

    // @Ignore()
    List<BookingStatusOptions>? BookingStatusOptions;

    // @Ignore()
    bool? IsGroupBooking;

    // @Ignore()
    bool? IsMultipleResource;

    // @Ignore()
    BookingSettings? Settings;

    // @Ignore()
    PaymentSetting? PaymentSetting;

    // @Ignore()
    List<CustomFieldConfig>? BookingCustomFieldsConfig;

    // @Ignore()
    List<CustomFieldConfig>? CustomerCustomFieldsConfig;

    // @Ignore()
    List<CustomFieldConfig>? CustomFieldsConfig;

    // @Ignore()
    List<CustomFieldDataResponse>? CustomFieldsData;

    // @Ignore()
    List<ISchedule>? Schedules;

    // @Ignore()
    List<Booking>? CustomerActiveBookings;

    // @Ignore()
    ScheduleType? ScheduleType;

    // @Ignore()
    Duration? LastTimeToUnbookThreshold;

    // @Ignore()
    Duration? LastTimeToBookThreshold;

    // @Ignore()
    AverageRatingScore? RatingScore;

    // @Ignore()
    List<Rating>? Ratings;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    String? Group;
    // @Required()
    bool? Active;

    // @Required()
    int? SortOrder;

    // @Required()
    int? PauseAfterBooking;

    // @Required()
    int? UnbookBeforeDays;

    // @Required()
    int? UnbookBeforeHours;

    // @Required()
    int? UnbookBeforeMinutes;

    // @Required()
    int? BookBeforeDays;

    // @Required()
    int? BookBeforeHours;

    // @Required()
    int? BookBeforeMinutes;

    int? Duration;
    int? DurationTypeId;
    int? MinDuration;
    int? MaxDuration;
    int? DurationInterval;
    int? TotalSpots;
    String? ImageUrl;
    // @Required()
    int? ScheduleTypeId;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    bool? OnlyVisibleByAdmin;

    // @Required()
    int? MinNumberOfSpotsPerBooking;

    // @Required()
    int? MaxNumberOfSpotsPerBooking;

    // @Required()
    int? MinNumberOfResourcesToBook;

    // @Required()
    int? MaxNumberOfResourcesToBook;

    // @Required()
    bool? IsPaymentEnabled;

    // @Required()
    int? MaxPaymentTime;

    // @Required()
    bool? LockSpotsToBooking;

    // @Required()
    bool? EnableBookingQueue;

    DateTime? ModifiedDate;
    // @Required()
    int? BookingStatusId;

    // @Required()
    bool? EnableCodeLockSync;

    // @Required()
    bool? EnableCustomerManualPayment;

    int? PriceViewTypeId;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;

    Service({this.ResourceTypes,this.Resources,this.TotalPrice,this.Prices,this.BookingStatusOptions,this.IsGroupBooking,this.IsMultipleResource,this.Settings,this.PaymentSetting,this.BookingCustomFieldsConfig,this.CustomerCustomFieldsConfig,this.CustomFieldsConfig,this.CustomFieldsData,this.Schedules,this.CustomerActiveBookings,this.ScheduleType,this.LastTimeToUnbookThreshold,this.LastTimeToBookThreshold,this.RatingScore,this.Ratings,this.CompanyId,this.Id,this.Name,this.Description,this.Group,this.Active,this.SortOrder,this.PauseAfterBooking,this.UnbookBeforeDays,this.UnbookBeforeHours,this.UnbookBeforeMinutes,this.BookBeforeDays,this.BookBeforeHours,this.BookBeforeMinutes,this.Duration,this.DurationTypeId,this.MinDuration,this.MaxDuration,this.DurationInterval,this.TotalSpots,this.ImageUrl,this.ScheduleTypeId,this.UpdatedDate,this.CreatedDate,this.OnlyVisibleByAdmin,this.MinNumberOfSpotsPerBooking,this.MaxNumberOfSpotsPerBooking,this.MinNumberOfResourcesToBook,this.MaxNumberOfResourcesToBook,this.IsPaymentEnabled,this.MaxPaymentTime,this.LockSpotsToBooking,this.EnableBookingQueue,this.ModifiedDate,this.BookingStatusId,this.EnableCodeLockSync,this.EnableCustomerManualPayment,this.PriceViewTypeId,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20});
    Service.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ResourceTypes = JsonConverters.fromJson(json['ResourceTypes'],'List<ResourceType>',context!);
        Resources = JsonConverters.fromJson(json['Resources'],'List<Resource>',context!);
        TotalPrice = JsonConverters.fromJson(json['TotalPrice'],'TotalPriceInformation',context!);
        Prices = JsonConverters.fromJson(json['Prices'],'List<ServicePrice>',context!);
        BookingStatusOptions = JsonConverters.fromJson(json['BookingStatusOptions'],'List<BookingStatusOptions>',context!);
        IsGroupBooking = json['IsGroupBooking'];
        IsMultipleResource = json['IsMultipleResource'];
        Settings = JsonConverters.fromJson(json['Settings'],'BookingSettings',context!);
        PaymentSetting = JsonConverters.fromJson(json['PaymentSetting'],'PaymentSetting',context!);
        BookingCustomFieldsConfig = JsonConverters.fromJson(json['BookingCustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomerCustomFieldsConfig = JsonConverters.fromJson(json['CustomerCustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        Schedules = JsonConverters.fromJson(json['Schedules'],'List<ISchedule>',context!);
        CustomerActiveBookings = JsonConverters.fromJson(json['CustomerActiveBookings'],'List<Booking>',context!);
        ScheduleType = JsonConverters.fromJson(json['ScheduleType'],'ScheduleType',context!);
        LastTimeToUnbookThreshold = JsonConverters.fromJson(json['LastTimeToUnbookThreshold'],'Duration',context!);
        LastTimeToBookThreshold = JsonConverters.fromJson(json['LastTimeToBookThreshold'],'Duration',context!);
        RatingScore = JsonConverters.fromJson(json['RatingScore'],'AverageRatingScore',context!);
        Ratings = JsonConverters.fromJson(json['Ratings'],'List<Rating>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        Group = json['Group'];
        Active = json['Active'];
        SortOrder = json['SortOrder'];
        PauseAfterBooking = json['PauseAfterBooking'];
        UnbookBeforeDays = json['UnbookBeforeDays'];
        UnbookBeforeHours = json['UnbookBeforeHours'];
        UnbookBeforeMinutes = json['UnbookBeforeMinutes'];
        BookBeforeDays = json['BookBeforeDays'];
        BookBeforeHours = json['BookBeforeHours'];
        BookBeforeMinutes = json['BookBeforeMinutes'];
        Duration = json['Duration'];
        DurationTypeId = json['DurationTypeId'];
        MinDuration = json['MinDuration'];
        MaxDuration = json['MaxDuration'];
        DurationInterval = json['DurationInterval'];
        TotalSpots = json['TotalSpots'];
        ImageUrl = json['ImageUrl'];
        ScheduleTypeId = json['ScheduleTypeId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        OnlyVisibleByAdmin = json['OnlyVisibleByAdmin'];
        MinNumberOfSpotsPerBooking = json['MinNumberOfSpotsPerBooking'];
        MaxNumberOfSpotsPerBooking = json['MaxNumberOfSpotsPerBooking'];
        MinNumberOfResourcesToBook = json['MinNumberOfResourcesToBook'];
        MaxNumberOfResourcesToBook = json['MaxNumberOfResourcesToBook'];
        IsPaymentEnabled = json['IsPaymentEnabled'];
        MaxPaymentTime = json['MaxPaymentTime'];
        LockSpotsToBooking = json['LockSpotsToBooking'];
        EnableBookingQueue = json['EnableBookingQueue'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        BookingStatusId = json['BookingStatusId'];
        EnableCodeLockSync = json['EnableCodeLockSync'];
        EnableCustomerManualPayment = json['EnableCustomerManualPayment'];
        PriceViewTypeId = json['PriceViewTypeId'];
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ResourceTypes': JsonConverters.toJson(ResourceTypes,'List<ResourceType>',context!),
        'Resources': JsonConverters.toJson(Resources,'List<Resource>',context!),
        'TotalPrice': JsonConverters.toJson(TotalPrice,'TotalPriceInformation',context!),
        'Prices': JsonConverters.toJson(Prices,'List<ServicePrice>',context!),
        'BookingStatusOptions': JsonConverters.toJson(BookingStatusOptions,'List<BookingStatusOptions>',context!),
        'IsGroupBooking': IsGroupBooking,
        'IsMultipleResource': IsMultipleResource,
        'Settings': JsonConverters.toJson(Settings,'BookingSettings',context!),
        'PaymentSetting': JsonConverters.toJson(PaymentSetting,'PaymentSetting',context!),
        'BookingCustomFieldsConfig': JsonConverters.toJson(BookingCustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomerCustomFieldsConfig': JsonConverters.toJson(CustomerCustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'Schedules': JsonConverters.toJson(Schedules,'List<ISchedule>',context!),
        'CustomerActiveBookings': JsonConverters.toJson(CustomerActiveBookings,'List<Booking>',context!),
        'ScheduleType': JsonConverters.toJson(ScheduleType,'ScheduleType',context!),
        'LastTimeToUnbookThreshold': JsonConverters.toJson(LastTimeToUnbookThreshold,'Duration',context!),
        'LastTimeToBookThreshold': JsonConverters.toJson(LastTimeToBookThreshold,'Duration',context!),
        'RatingScore': JsonConverters.toJson(RatingScore,'AverageRatingScore',context!),
        'Ratings': JsonConverters.toJson(Ratings,'List<Rating>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Group': Group,
        'Active': Active,
        'SortOrder': SortOrder,
        'PauseAfterBooking': PauseAfterBooking,
        'UnbookBeforeDays': UnbookBeforeDays,
        'UnbookBeforeHours': UnbookBeforeHours,
        'UnbookBeforeMinutes': UnbookBeforeMinutes,
        'BookBeforeDays': BookBeforeDays,
        'BookBeforeHours': BookBeforeHours,
        'BookBeforeMinutes': BookBeforeMinutes,
        'Duration': Duration,
        'DurationTypeId': DurationTypeId,
        'MinDuration': MinDuration,
        'MaxDuration': MaxDuration,
        'DurationInterval': DurationInterval,
        'TotalSpots': TotalSpots,
        'ImageUrl': ImageUrl,
        'ScheduleTypeId': ScheduleTypeId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'OnlyVisibleByAdmin': OnlyVisibleByAdmin,
        'MinNumberOfSpotsPerBooking': MinNumberOfSpotsPerBooking,
        'MaxNumberOfSpotsPerBooking': MaxNumberOfSpotsPerBooking,
        'MinNumberOfResourcesToBook': MinNumberOfResourcesToBook,
        'MaxNumberOfResourcesToBook': MaxNumberOfResourcesToBook,
        'IsPaymentEnabled': IsPaymentEnabled,
        'MaxPaymentTime': MaxPaymentTime,
        'LockSpotsToBooking': LockSpotsToBooking,
        'EnableBookingQueue': EnableBookingQueue,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'BookingStatusId': BookingStatusId,
        'EnableCodeLockSync': EnableCodeLockSync,
        'EnableCustomerManualPayment': EnableCustomerManualPayment,
        'PriceViewTypeId': PriceViewTypeId,
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20
    });

    getTypeName() => "Service";
    TypeContext? context = _ctx;
}

class CustomFieldServiceRelation extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    int? CustomFieldConfigId;

    // @Required()
    int? ServiceId;

    DateTime? ModifiedDate;

    CustomFieldServiceRelation({this.CompanyId,this.Id,this.CustomFieldConfigId,this.ServiceId,this.ModifiedDate});
    CustomFieldServiceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        CustomFieldConfigId = json['CustomFieldConfigId'];
        ServiceId = json['ServiceId'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'CustomFieldConfigId': CustomFieldConfigId,
        'ServiceId': ServiceId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "CustomFieldServiceRelation";
    TypeContext? context = _ctx;
}

class CustomFieldConfig extends BaseModel implements IConvertible
{
    // @Ignore()
    List<CustomFieldValue>? Values;

    CustomField? CustomField;
    // @Ignore()
    RegEx? RegEx;

    // @Ignore()
    List<Service>? Services;

    List<CustomFieldServiceRelation>? CustomFieldServiceRelation;
    // @Required()
    String? CompanyId;

    int? Id;
    int? GroupId;
    // @Required()
    int? FieldId;

    // @Required()
    int? IconId;

    int? RegExId;
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Datatype;

    // @Required()
    int? MaxLength;

    // @Required()
    bool? IsPublic;

    // @Required()
    bool? IsHidden;

    // @Required()
    bool? IsMandatory;

    String? DefaultValue;
    String? RegExErrorMessage;
    String? MandatoryErrorMessage;
    int? Width;
    // @Required()
    bool? MultipleLineText;

    DateTime? ModifiedDate;

    CustomFieldConfig({this.Values,this.CustomField,this.RegEx,this.Services,this.CustomFieldServiceRelation,this.CompanyId,this.Id,this.GroupId,this.FieldId,this.IconId,this.RegExId,this.Name,this.Description,this.Datatype,this.MaxLength,this.IsPublic,this.IsHidden,this.IsMandatory,this.DefaultValue,this.RegExErrorMessage,this.MandatoryErrorMessage,this.Width,this.MultipleLineText,this.ModifiedDate});
    CustomFieldConfig.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Values = JsonConverters.fromJson(json['Values'],'List<CustomFieldValue>',context!);
        CustomField = JsonConverters.fromJson(json['CustomField'],'CustomField',context!);
        RegEx = JsonConverters.fromJson(json['RegEx'],'RegEx',context!);
        Services = JsonConverters.fromJson(json['Services'],'List<Service>',context!);
        CustomFieldServiceRelation = JsonConverters.fromJson(json['CustomFieldServiceRelation'],'List<CustomFieldServiceRelation>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        GroupId = json['GroupId'];
        FieldId = json['FieldId'];
        IconId = json['IconId'];
        RegExId = json['RegExId'];
        Name = json['Name'];
        Description = json['Description'];
        Datatype = json['Datatype'];
        MaxLength = json['MaxLength'];
        IsPublic = json['IsPublic'];
        IsHidden = json['IsHidden'];
        IsMandatory = json['IsMandatory'];
        DefaultValue = json['DefaultValue'];
        RegExErrorMessage = json['RegExErrorMessage'];
        MandatoryErrorMessage = json['MandatoryErrorMessage'];
        Width = json['Width'];
        MultipleLineText = json['MultipleLineText'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Values': JsonConverters.toJson(Values,'List<CustomFieldValue>',context!),
        'CustomField': JsonConverters.toJson(CustomField,'CustomField',context!),
        'RegEx': JsonConverters.toJson(RegEx,'RegEx',context!),
        'Services': JsonConverters.toJson(Services,'List<Service>',context!),
        'CustomFieldServiceRelation': JsonConverters.toJson(CustomFieldServiceRelation,'List<CustomFieldServiceRelation>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'GroupId': GroupId,
        'FieldId': FieldId,
        'IconId': IconId,
        'RegExId': RegExId,
        'Name': Name,
        'Description': Description,
        'Datatype': Datatype,
        'MaxLength': MaxLength,
        'IsPublic': IsPublic,
        'IsHidden': IsHidden,
        'IsMandatory': IsMandatory,
        'DefaultValue': DefaultValue,
        'RegExErrorMessage': RegExErrorMessage,
        'MandatoryErrorMessage': MandatoryErrorMessage,
        'Width': Width,
        'MultipleLineText': MultipleLineText,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "CustomFieldConfig";
    TypeContext? context = _ctx;
}

class Resource extends BaseModel implements ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    int? Priority;

    // @Ignore()
    List<ISchedule>? Schedules;

    // @Ignore()
    List<ITimeException>? Exceptions;

    // @Ignore()
    List<IBookedTime>? Bookings;

    // @Ignore()
    List<CustomFieldConfig>? CustomFieldsConfig;

    // @Ignore()
    List<CustomFieldDataResponse>? CustomFieldsData;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? Name;

    // @Required()
    bool? Active;

    String? Description;
    String? ImageUrl;
    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    String? Color;

    String? Email;
    String? MobilePhone;
    bool? EmailNotification;
    bool? SMSNotification;
    // @Required()
    bool? SendSMSReminder;

    // @Required()
    bool? SendEmailReminder;

    DateTime? ModifiedDate;
    String? AccessGroup;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;

    Resource({this.Priority,this.Schedules,this.Exceptions,this.Bookings,this.CustomFieldsConfig,this.CustomFieldsData,this.CompanyId,this.Id,this.Name,this.Active,this.Description,this.ImageUrl,this.UpdatedDate,this.CreatedDate,this.Color,this.Email,this.MobilePhone,this.EmailNotification,this.SMSNotification,this.SendSMSReminder,this.SendEmailReminder,this.ModifiedDate,this.AccessGroup,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20});
    Resource.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Priority = json['Priority'];
        Schedules = JsonConverters.fromJson(json['Schedules'],'List<ISchedule>',context!);
        Exceptions = JsonConverters.fromJson(json['Exceptions'],'List<ITimeException>',context!);
        Bookings = JsonConverters.fromJson(json['Bookings'],'List<IBookedTime>',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        Active = json['Active'];
        Description = json['Description'];
        ImageUrl = json['ImageUrl'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        Color = json['Color'];
        Email = json['Email'];
        MobilePhone = json['MobilePhone'];
        EmailNotification = json['EmailNotification'];
        SMSNotification = json['SMSNotification'];
        SendSMSReminder = json['SendSMSReminder'];
        SendEmailReminder = json['SendEmailReminder'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        AccessGroup = json['AccessGroup'];
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Priority': Priority,
        'Schedules': JsonConverters.toJson(Schedules,'List<ISchedule>',context!),
        'Exceptions': JsonConverters.toJson(Exceptions,'List<ITimeException>',context!),
        'Bookings': JsonConverters.toJson(Bookings,'List<IBookedTime>',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'Active': Active,
        'Description': Description,
        'ImageUrl': ImageUrl,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'Color': Color,
        'Email': Email,
        'MobilePhone': MobilePhone,
        'EmailNotification': EmailNotification,
        'SMSNotification': SMSNotification,
        'SendSMSReminder': SendSMSReminder,
        'SendEmailReminder': SendEmailReminder,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'AccessGroup': AccessGroup,
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20
    });

    getTypeName() => "Resource";
    TypeContext? context = _ctx;
}

class ResourceType extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    bool? SelectableByUser;

    // @Ignore()
    List<Resource>? Resources;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? Name;

    String? Description;
    // @Required()
    bool? Active;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

    ResourceType({this.SelectableByUser,this.Resources,this.CompanyId,this.Id,this.Name,this.Description,this.Active,this.UpdatedDate,this.CreatedDate,this.ModifiedDate});
    ResourceType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SelectableByUser = json['SelectableByUser'];
        Resources = JsonConverters.fromJson(json['Resources'],'List<Resource>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        Active = json['Active'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SelectableByUser': SelectableByUser,
        'Resources': JsonConverters.toJson(Resources,'List<Resource>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Active': Active,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

    getTypeName() => "ResourceType";
    TypeContext? context = _ctx;
}

// @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
// @ApiResponse(Description="You have too low privilegies to call this service", StatusCode=403)
// @ValidateRequest(Validator="IsAuthenticated")
class ResourceTypeQuery extends QueryDb2<ResourceType,ResourceTypeQueryResponse> implements IConvertible
{
    /**
    * Enter the company and id you want to see the information for a resourcetype, if blank company id and you are an admin, your company id will be used. If blank id, all resources will be shown 
    */
    // @ApiMember(Description="Enter the company and id you want to see the information for a resourcetype, if blank company id and you are an admin, your company id will be used. If blank id, all resources will be shown ", IsRequired=true, ParameterType="query")
    String? CompanyId;

    /**
    * Enter the id for a resourcetype. If blank id, all resourctypes will be shown 
    */
    // @ApiMember(Description="Enter the id for a resourcetype. If blank id, all resourctypes will be shown ", ParameterType="query")
    int? Id;

    /**
    * Filter on active or deactivated resourcetypes. If blank status, all resourctypes will be shown 
    */
    // @ApiMember(Description="Filter on active or deactivated resourcetypes. If blank status, all resourctypes will be shown ", ParameterType="query")
    bool? Active;

    /**
    * If you want to include the connected resources
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the connected resources", ParameterType="query")
    bool? IncludeResources;

    ResourceTypeQuery({this.CompanyId,this.Id,this.Active,this.IncludeResources});
    ResourceTypeQuery.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Active = json['Active'];
        IncludeResources = json['IncludeResources'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'Active': Active,
        'IncludeResources': IncludeResources
    });

    getTypeName() => "ResourceTypeQuery";
    TypeContext? context = _ctx;
}

class Currency extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? CurrencySign;

    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    // @Required()
    String? Id;

    Currency({this.Name,this.CurrencySign,this.Active,this.ModifiedDate,this.Id});
    Currency.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        CurrencySign = json['CurrencySign'];
        Active = json['Active'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'CurrencySign': CurrencySign,
        'Active': Active,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "Currency";
    TypeContext? context = _ctx;
}

abstract class IBokameraPaymentManager<TCreatedCheckoutResponse,TCheckoutResponse,TPaymentResponse>
{
}

class QvicklyArticle implements IConvertible
{
    String? artnr;
    String? title;
    int? quantity;
    int? aprice;
    int? tax;
    int? discount;
    int? withouttax;
    int? taxrate;

    QvicklyArticle({this.artnr,this.title,this.quantity,this.aprice,this.tax,this.discount,this.withouttax,this.taxrate});
    QvicklyArticle.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        artnr = json['artnr'];
        title = json['title'];
        quantity = json['quantity'];
        aprice = json['aprice'];
        tax = json['tax'];
        discount = json['discount'];
        withouttax = json['withouttax'];
        taxrate = json['taxrate'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'artnr': artnr,
        'title': title,
        'quantity': quantity,
        'aprice': aprice,
        'tax': tax,
        'discount': discount,
        'withouttax': withouttax,
        'taxrate': taxrate
    };

    getTypeName() => "QvicklyArticle";
    TypeContext? context = _ctx;
}

class Shipping implements IConvertible
{
    String? firstname;
    String? lastname;
    String? company;
    String? street;
    String? street2;
    String? zip;
    String? city;
    String? country;
    String? phone;
    String? withouttax;
    String? taxrate;

    Shipping({this.firstname,this.lastname,this.company,this.street,this.street2,this.zip,this.city,this.country,this.phone,this.withouttax,this.taxrate});
    Shipping.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        firstname = json['firstname'];
        lastname = json['lastname'];
        company = json['company'];
        street = json['street'];
        street2 = json['street2'];
        zip = json['zip'];
        city = json['city'];
        country = json['country'];
        phone = json['phone'];
        withouttax = json['withouttax'];
        taxrate = json['taxrate'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'firstname': firstname,
        'lastname': lastname,
        'company': company,
        'street': street,
        'street2': street2,
        'zip': zip,
        'city': city,
        'country': country,
        'phone': phone,
        'withouttax': withouttax,
        'taxrate': taxrate
    };

    getTypeName() => "Shipping";
    TypeContext? context = _ctx;
}

class Customer implements IConvertible
{
    String? City;
    String? CountryCode;
    String? IdentityNumber;
    String? Email;
    String? FirstName;
    String? LastName;
    String? Phone;
    String? PostalCode;
    String? Street;
    String? Reference;
    CustomerType? Type;

    Customer({this.City,this.CountryCode,this.IdentityNumber,this.Email,this.FirstName,this.LastName,this.Phone,this.PostalCode,this.Street,this.Reference,this.Type});
    Customer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        City = json['City'];
        CountryCode = json['CountryCode'];
        IdentityNumber = json['IdentityNumber'];
        Email = json['Email'];
        FirstName = json['FirstName'];
        LastName = json['LastName'];
        Phone = json['Phone'];
        PostalCode = json['PostalCode'];
        Street = json['Street'];
        Reference = json['Reference'];
        Type = JsonConverters.fromJson(json['Type'],'CustomerType',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'City': City,
        'CountryCode': CountryCode,
        'IdentityNumber': IdentityNumber,
        'Email': Email,
        'FirstName': FirstName,
        'LastName': LastName,
        'Phone': Phone,
        'PostalCode': PostalCode,
        'Street': Street,
        'Reference': Reference,
        'Type': JsonConverters.toJson(Type,'CustomerType',context!)
    };

    getTypeName() => "Customer";
    TypeContext? context = _ctx;
}

abstract class AnyOf implements IAnyOf
{
    dynamic? Value;
    String? Type;

    AnyOf({this.Value,this.Type});
    AnyOf.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Value = JsonConverters.fromJson(json['Value'],'dynamic',context!);
        Type = JsonConverters.fromJson(json['Type'],'String',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Value': JsonConverters.toJson(Value,'dynamic',context!),
        'Type': JsonConverters.toJson(Type,'String',context!)
    };

    getTypeName() => "AnyOf";
    TypeContext? context = _ctx;
}

class AnyOf2<T1,T2> extends AnyOf implements IConvertible
{
    dynamic? Value;
    String? Type;

    AnyOf2({this.Value,this.Type});
    AnyOf2.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Value = JsonConverters.fromJson(json['Value'],'dynamic',context!);
        Type = JsonConverters.fromJson(json['Type'],'String',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Value': JsonConverters.toJson(Value,'dynamic',context!),
        'Type': JsonConverters.toJson(Type,'String',context!)
    });

    getTypeName() => "AnyOf<$T1,$T2>";
    TypeContext? context = _ctx;
}

abstract class StripeEntity implements IStripeEntity
{
    StripeEntity();
    StripeEntity.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "StripeEntity";
    TypeContext? context = _ctx;
}

abstract class StripeEntity1<T> extends StripeEntity
{
    StripeEntity1();
    StripeEntity1.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "StripeEntity<$T>";
    TypeContext? context = _ctx;
}

class StripeList<T> extends StripeEntity1<StripeList<T>> implements IHasObject, IConvertible
{
    StripeList();
    StripeList.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "StripeList<$T>";
    TypeContext? context = _ctx;
}

abstract class ILogger<TCategoryName> extends ILogger
{
}

class AccessKeyTypeResponse implements IConvertible
{
    int? Id;
    String? KeyType;
    String? Description;

    AccessKeyTypeResponse({this.Id,this.KeyType,this.Description});
    AccessKeyTypeResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        KeyType = json['KeyType'];
        Description = json['Description'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'KeyType': KeyType,
        'Description': Description
    };

    getTypeName() => "AccessKeyTypeResponse";
    TypeContext? context = _ctx;
}

// @DataContract
class QueryResponse<AccessKeyTypeResponse> implements IConvertible
{
    // @DataMember(Order=1)
    int? Offset;

    // @DataMember(Order=2)
    int? Total;

    // @DataMember(Order=3)
    List<AccessKeyTypeResponse>? Results;

    // @DataMember(Order=4)
    Map<String,String?>? Meta;

    // @DataMember(Order=5)
    ResponseStatus? ResponseStatus;

    QueryResponse({this.Offset,this.Total,this.Results,this.Meta,this.ResponseStatus});
    QueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Offset = json['Offset'];
        Total = json['Total'];
        Results = JsonConverters.fromJson(json['Results'],'List<${runtimeGenericTypeDefs(this,[0]).join(",")}>',context!);
        Meta = JsonConverters.toStringMap(json['Meta']);
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Offset': Offset,
        'Total': Total,
        'Results': JsonConverters.toJson(Results,'List<AccessKeyTypeResponse>',context!),
        'Meta': Meta,
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!)
    };

    getTypeName() => "QueryResponse<$AccessKeyTypeResponse>";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'testapi.bokamera.se', types: <String, TypeInfo> {
    'ResourceTypeResource': TypeInfo(TypeOf.Class, create:() => ResourceTypeResource()),
    'Uri': TypeInfo(TypeOf.Class, create:() => Uri()),
    'ResourceTypeQueryResponse': TypeInfo(TypeOf.Class, create:() => ResourceTypeQueryResponse()),
    'List<ResourceTypeResource>': TypeInfo(TypeOf.Class, create:() => <ResourceTypeResource>[]),
    'BaseModel': TypeInfo(TypeOf.Class, create:() => BaseModel()),
    'ScheduleType': TypeInfo(TypeOf.Enum, enumValues:ScheduleType.values),
    'ISchedule': TypeInfo(TypeOf.Interface),
    'ITimeException': TypeInfo(TypeOf.Interface),
    'BookingStatusEnum': TypeInfo(TypeOf.Enum, enumValues:BookingStatusEnum.values),
    'BookedCustomer': TypeInfo(TypeOf.Class, create:() => BookedCustomer()),
    'IBookedTime': TypeInfo(TypeOf.Interface),
    'CustomFieldValue': TypeInfo(TypeOf.Class, create:() => CustomFieldValue()),
    'CustomField': TypeInfo(TypeOf.Class, create:() => CustomField()),
    'RegEx': TypeInfo(TypeOf.Class, create:() => RegEx()),
    'RebateCodeType': TypeInfo(TypeOf.Class, create:() => RebateCodeType()),
    'AppliedRebateCodes': TypeInfo(TypeOf.Class, create:() => AppliedRebateCodes()),
    'TotalPriceInformation': TypeInfo(TypeOf.Class, create:() => TotalPriceInformation()),
    'List<AppliedRebateCodes>': TypeInfo(TypeOf.Class, create:() => <AppliedRebateCodes>[]),
    'Currency': TypeInfo(TypeOf.Enum, enumValues:Currency.values),
    'PriceMapping': TypeInfo(TypeOf.Class, create:() => PriceMapping()),
    'BokaMeraDayOfWeek': TypeInfo(TypeOf.Enum, enumValues:BokaMeraDayOfWeek.values),
    'ServicePriceDayOfWeekRelation': TypeInfo(TypeOf.Class, create:() => ServicePriceDayOfWeekRelation()),
    'IDbConnectionFactory': TypeInfo(TypeOf.Interface),
    'ServerData': TypeInfo(TypeOf.Class, create:() => ServerData()),
    'Credentials': TypeInfo(TypeOf.Class, create:() => Credentials()),
    'CheckoutData': TypeInfo(TypeOf.Class, create:() => CheckoutData()),
    'CheckoutPaymentData': TypeInfo(TypeOf.Class, create:() => CheckoutPaymentData()),
    'PaymentInfo': TypeInfo(TypeOf.Class, create:() => PaymentInfo()),
    'CartHandling': TypeInfo(TypeOf.Class, create:() => CartHandling()),
    'CartTotal': TypeInfo(TypeOf.Class, create:() => CartTotal()),
    'Address': TypeInfo(TypeOf.Class, create:() => Address()),
    'Shipping': TypeInfo(TypeOf.Class, create:() => Shipping()),
    'Cart': TypeInfo(TypeOf.Class, create:() => Cart()),
    'CustomerBilling': TypeInfo(TypeOf.Class, create:() => CustomerBilling()),
    'QvicklyCustomer': TypeInfo(TypeOf.Class, create:() => QvicklyCustomer()),
    'InitCheckoutData': TypeInfo(TypeOf.Class, create:() => InitCheckoutData()),
    'List<QvicklyArticle>': TypeInfo(TypeOf.Class, create:() => <QvicklyArticle>[]),
    'QvicklyArticle': TypeInfo(TypeOf.Class, create:() => QvicklyArticle()),
    'InitCheckoutRequestBody': TypeInfo(TypeOf.Class, create:() => InitCheckoutRequestBody()),
    'QvicklyCheckoutResponse': TypeInfo(TypeOf.Class, create:() => QvicklyCheckoutResponse()),
    'QvikclyPaymentData': TypeInfo(TypeOf.Class, create:() => QvikclyPaymentData()),
    'Card': TypeInfo(TypeOf.Class, create:() => Card()),
    'Settlement': TypeInfo(TypeOf.Class, create:() => Settlement()),
    'QvicklyPaymentResponse': TypeInfo(TypeOf.Class, create:() => QvicklyPaymentResponse()),
    'Payson2CheckoutStatus': TypeInfo(TypeOf.Enum, enumValues:Payson2CheckoutStatus.values),
    'CustomerType': TypeInfo(TypeOf.Enum, enumValues:CustomerType.values),
    'UserAccessKeys': TypeInfo(TypeOf.Class, create:() => UserAccessKeys()),
    'ExternalReference': TypeInfo(TypeOf.Class, create:() => ExternalReference()),
    'CompanyStatus': TypeInfo(TypeOf.Enum, enumValues:CompanyStatus.values),
    'ScheduleView': TypeInfo(TypeOf.Class, create:() => ScheduleView()),
    'WeekNumberSetting': TypeInfo(TypeOf.Class, create:() => WeekNumberSetting()),
    'BookingTemplate': TypeInfo(TypeOf.Class, create:() => BookingTemplate()),
    'CalendarType': TypeInfo(TypeOf.Class, create:() => CalendarType()),
    'FreeSpotTexts': TypeInfo(TypeOf.Class, create:() => FreeSpotTexts()),
    'BookingStatusOptions': TypeInfo(TypeOf.Class, create:() => BookingStatusOptions()),
    'BookingSettings': TypeInfo(TypeOf.Class, create:() => BookingSettings()),
    'List<ScheduleView>': TypeInfo(TypeOf.Class, create:() => <ScheduleView>[]),
    'List<WeekNumberSetting>': TypeInfo(TypeOf.Class, create:() => <WeekNumberSetting>[]),
    'List<BookingTemplate>': TypeInfo(TypeOf.Class, create:() => <BookingTemplate>[]),
    'List<CalendarType>': TypeInfo(TypeOf.Class, create:() => <CalendarType>[]),
    'List<FreeSpotTexts>': TypeInfo(TypeOf.Class, create:() => <FreeSpotTexts>[]),
    'List<BookingStatusOptions>': TypeInfo(TypeOf.Class, create:() => <BookingStatusOptions>[]),
    'CompanyType': TypeInfo(TypeOf.Class, create:() => CompanyType()),
    'CodeLockSystem': TypeInfo(TypeOf.Class, create:() => CodeLockSystem()),
    'CodeLockSetting': TypeInfo(TypeOf.Class, create:() => CodeLockSetting()),
    'List<CodeLockSystem>': TypeInfo(TypeOf.Class, create:() => <CodeLockSystem>[]),
    'AdminPaymentOptions': TypeInfo(TypeOf.Class, create:() => AdminPaymentOptions()),
    'PaymentProviders': TypeInfo(TypeOf.Class, create:() => PaymentProviders()),
    'PaymentSetting': TypeInfo(TypeOf.Class, create:() => PaymentSetting()),
    'List<AdminPaymentOptions>': TypeInfo(TypeOf.Class, create:() => <AdminPaymentOptions>[]),
    'List<PaymentProviders>': TypeInfo(TypeOf.Class, create:() => <PaymentProviders>[]),
    'LanguageResponse': TypeInfo(TypeOf.Class, create:() => LanguageResponse()),
    'CompanySetting': TypeInfo(TypeOf.Class, create:() => CompanySetting()),
    'List<LanguageResponse>': TypeInfo(TypeOf.Class, create:() => <LanguageResponse>[]),
    'WidgetServiceLayouts': TypeInfo(TypeOf.Class, create:() => WidgetServiceLayouts()),
    'WidgetTimeLayouts': TypeInfo(TypeOf.Class, create:() => WidgetTimeLayouts()),
    'WidgetBookingLayouts': TypeInfo(TypeOf.Class, create:() => WidgetBookingLayouts()),
    'WidgetBookingMethods': TypeInfo(TypeOf.Class, create:() => WidgetBookingMethods()),
    'HomepageWidgetSetting': TypeInfo(TypeOf.Class, create:() => HomepageWidgetSetting()),
    'List<WidgetServiceLayouts>': TypeInfo(TypeOf.Class, create:() => <WidgetServiceLayouts>[]),
    'List<WidgetTimeLayouts>': TypeInfo(TypeOf.Class, create:() => <WidgetTimeLayouts>[]),
    'List<WidgetBookingLayouts>': TypeInfo(TypeOf.Class, create:() => <WidgetBookingLayouts>[]),
    'List<WidgetBookingMethods>': TypeInfo(TypeOf.Class, create:() => <WidgetBookingMethods>[]),
    'HomepageTemplate': TypeInfo(TypeOf.Class, create:() => HomepageTemplate()),
    'HeroSectionStyle': TypeInfo(TypeOf.Class, create:() => HeroSectionStyle()),
    'HomepageSetting': TypeInfo(TypeOf.Class, create:() => HomepageSetting()),
    'List<HomepageTemplate>': TypeInfo(TypeOf.Class, create:() => <HomepageTemplate>[]),
    'List<HeroSectionStyle>': TypeInfo(TypeOf.Class, create:() => <HeroSectionStyle>[]),
    'AverageRatingScore': TypeInfo(TypeOf.Class, create:() => AverageRatingScore()),
    'Review': TypeInfo(TypeOf.Class, create:() => Review()),
    'Rating': TypeInfo(TypeOf.Class, create:() => Rating()),
    'LicenseTypeItem': TypeInfo(TypeOf.Class, create:() => LicenseTypeItem()),
    'LicenseType': TypeInfo(TypeOf.Class, create:() => LicenseType()),
    'Country': TypeInfo(TypeOf.Class, create:() => Country()),
    'LicensePrice': TypeInfo(TypeOf.Class, create:() => LicensePrice()),
    'List<LicenseTypeItem>': TypeInfo(TypeOf.Class, create:() => <LicenseTypeItem>[]),
    'List<LicensePrice>': TypeInfo(TypeOf.Class, create:() => <LicensePrice>[]),
    'License': TypeInfo(TypeOf.Class, create:() => License()),
    'BillingMethodCountriesRelation': TypeInfo(TypeOf.Class, create:() => BillingMethodCountriesRelation()),
    'BillingMethod': TypeInfo(TypeOf.Class, create:() => BillingMethod()),
    'List<BillingMethodCountriesRelation>': TypeInfo(TypeOf.Class, create:() => <BillingMethodCountriesRelation>[]),
    'BillingInformation': TypeInfo(TypeOf.Class, create:() => BillingInformation()),
    'KeyCloakRole': TypeInfo(TypeOf.Class, create:() => KeyCloakRole()),
    'CompanyUser': TypeInfo(TypeOf.Class, create:() => CompanyUser()),
    'Resource': TypeInfo(TypeOf.Class, create:() => Resource()),
    'List<KeyCloakRole>': TypeInfo(TypeOf.Class, create:() => <KeyCloakRole>[]),
    'Company': TypeInfo(TypeOf.Class, create:() => Company()),
    'CompanyCategory': TypeInfo(TypeOf.Class, create:() => CompanyCategory()),
    'List<CustomFieldConfig>': TypeInfo(TypeOf.Class, create:() => <CustomFieldConfig>[]),
    'CustomFieldConfig': TypeInfo(TypeOf.Class, create:() => CustomFieldConfig()),
    'List<Rating>': TypeInfo(TypeOf.Class, create:() => <Rating>[]),
    'List<License>': TypeInfo(TypeOf.Class, create:() => <License>[]),
    'List<CompanyUser>': TypeInfo(TypeOf.Class, create:() => <CompanyUser>[]),
    'CultureInfo': TypeInfo(TypeOf.Class, create:() => CultureInfo()),
    'List<ExternalReference>': TypeInfo(TypeOf.Class, create:() => <ExternalReference>[]),
    'CustomFieldDataResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldDataResponse()),
    'CustomerComment': TypeInfo(TypeOf.Class, create:() => CustomerComment()),
    'Customer': TypeInfo(TypeOf.Class, create:() => Customer()),
    'List<UserAccessKeys>': TypeInfo(TypeOf.Class, create:() => <UserAccessKeys>[]),
    'List<CustomFieldDataResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldDataResponse>[]),
    'List<CustomerComment>': TypeInfo(TypeOf.Class, create:() => <CustomerComment>[]),
    'List<RebateCode>': TypeInfo(TypeOf.Class, create:() => <RebateCode>[]),
    'RebateCode': TypeInfo(TypeOf.Class, create:() => RebateCode()),
    'ItemType': TypeInfo(TypeOf.Enum, enumValues:ItemType.values),
    'Item': TypeInfo(TypeOf.Class, create:() => Item()),
    'Order': TypeInfo(TypeOf.Class, create:() => Order()),
    'List<Item>': TypeInfo(TypeOf.Class, create:() => <Item>[]),
    'Merchant': TypeInfo(TypeOf.Class, create:() => Merchant()),
    'ColorScheme': TypeInfo(TypeOf.Enum, enumValues:ColorScheme.values),
    'Gui': TypeInfo(TypeOf.Class, create:() => Gui()),
    'History': TypeInfo(TypeOf.Class, create:() => History()),
    'Payson2CheckoutResponse': TypeInfo(TypeOf.Class, create:() => Payson2CheckoutResponse()),
    'BaseOptions': TypeInfo(TypeOf.Class, create:() => BaseOptions()),
    'Map<String,dynamic?>': TypeInfo(TypeOf.Class, create:() => Map<String,dynamic?>()),
    'SessionAfterExpirationRecoveryOptions': TypeInfo(TypeOf.Class, create:() => SessionAfterExpirationRecoveryOptions()),
    'SessionAfterExpirationOptions': TypeInfo(TypeOf.Class, create:() => SessionAfterExpirationOptions()),
    'SessionAutomaticTaxLiabilityOptions': TypeInfo(TypeOf.Class, create:() => SessionAutomaticTaxLiabilityOptions()),
    'SessionAutomaticTaxOptions': TypeInfo(TypeOf.Class, create:() => SessionAutomaticTaxOptions()),
    'SessionConsentCollectionPaymentMethodReuseAgreementOptions': TypeInfo(TypeOf.Class, create:() => SessionConsentCollectionPaymentMethodReuseAgreementOptions()),
    'SessionConsentCollectionOptions': TypeInfo(TypeOf.Class, create:() => SessionConsentCollectionOptions()),
    'SessionCustomFieldDropdownOptionOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldDropdownOptionOptions()),
    'SessionCustomFieldDropdownOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldDropdownOptions()),
    'List<SessionCustomFieldDropdownOptionOptions>': TypeInfo(TypeOf.Class, create:() => <SessionCustomFieldDropdownOptionOptions>[]),
    'SessionCustomFieldLabelOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldLabelOptions()),
    'SessionCustomFieldNumericOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldNumericOptions()),
    'SessionCustomFieldTextOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldTextOptions()),
    'SessionCustomFieldOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldOptions()),
    'SessionCustomTextAfterSubmitOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextAfterSubmitOptions()),
    'SessionCustomTextShippingAddressOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextShippingAddressOptions()),
    'SessionCustomTextSubmitOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextSubmitOptions()),
    'SessionCustomTextTermsOfServiceAcceptanceOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextTermsOfServiceAcceptanceOptions()),
    'SessionCustomTextOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextOptions()),
    'SessionCustomerUpdateOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomerUpdateOptions()),
    'SessionDiscountOptions': TypeInfo(TypeOf.Class, create:() => SessionDiscountOptions()),
    'SessionInvoiceCreationInvoiceDataCustomFieldOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataCustomFieldOptions()),
    'SessionInvoiceCreationInvoiceDataIssuerOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataIssuerOptions()),
    'SessionInvoiceCreationInvoiceDataRenderingOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataRenderingOptionsOptions()),
    'SessionInvoiceCreationInvoiceDataOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataOptions()),
    'List<SessionInvoiceCreationInvoiceDataCustomFieldOptions>': TypeInfo(TypeOf.Class, create:() => <SessionInvoiceCreationInvoiceDataCustomFieldOptions>[]),
    'SessionInvoiceCreationOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationOptions()),
    'SessionLineItemAdjustableQuantityOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemAdjustableQuantityOptions()),
    'SessionLineItemPriceDataProductDataOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemPriceDataProductDataOptions()),
    'SessionLineItemPriceDataRecurringOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemPriceDataRecurringOptions()),
    'SessionLineItemPriceDataOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemPriceDataOptions()),
    'SessionLineItemOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemOptions()),
    'AddressOptions': TypeInfo(TypeOf.Class, create:() => AddressOptions()),
    'ChargeShippingOptions': TypeInfo(TypeOf.Class, create:() => ChargeShippingOptions()),
    'SessionPaymentIntentDataTransferDataOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentIntentDataTransferDataOptions()),
    'SessionPaymentIntentDataOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentIntentDataOptions()),
    'SessionPaymentMethodDataOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodDataOptions()),
    'SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions()),
    'SessionPaymentMethodOptionsAcssDebitOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAcssDebitOptions()),
    'SessionPaymentMethodOptionsAffirmOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAffirmOptions()),
    'SessionPaymentMethodOptionsAfterpayClearpayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAfterpayClearpayOptions()),
    'SessionPaymentMethodOptionsAlipayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAlipayOptions()),
    'SessionPaymentMethodOptionsAmazonPayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAmazonPayOptions()),
    'SessionPaymentMethodOptionsAuBecsDebitOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAuBecsDebitOptions()),
    'SessionPaymentMethodOptionsBacsDebitOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBacsDebitOptions()),
    'SessionPaymentMethodOptionsBancontactOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBancontactOptions()),
    'SessionPaymentMethodOptionsBoletoOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBoletoOptions()),
    'SessionPaymentMethodOptionsCardInstallmentsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCardInstallmentsOptions()),
    'SessionPaymentMethodOptionsCardOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCardOptions()),
    'SessionPaymentMethodOptionsCashappOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCashappOptions()),
    'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions()),
    'SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions()),
    'SessionPaymentMethodOptionsCustomerBalanceOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceOptions()),
    'SessionPaymentMethodOptionsEpsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsEpsOptions()),
    'SessionPaymentMethodOptionsFpxOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsFpxOptions()),
    'SessionPaymentMethodOptionsGiropayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsGiropayOptions()),
    'SessionPaymentMethodOptionsGrabpayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsGrabpayOptions()),
    'SessionPaymentMethodOptionsIdealOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsIdealOptions()),
    'SessionPaymentMethodOptionsKlarnaOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsKlarnaOptions()),
    'SessionPaymentMethodOptionsKonbiniOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsKonbiniOptions()),
    'SessionPaymentMethodOptionsLinkOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsLinkOptions()),
    'SessionPaymentMethodOptionsMobilepayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsMobilepayOptions()),
    'SessionPaymentMethodOptionsMultibancoOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsMultibancoOptions()),
    'SessionPaymentMethodOptionsOxxoOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsOxxoOptions()),
    'SessionPaymentMethodOptionsP24Options': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsP24Options()),
    'SessionPaymentMethodOptionsPaynowOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPaynowOptions()),
    'SessionPaymentMethodOptionsPaypalOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPaypalOptions()),
    'SessionPaymentMethodOptionsPixOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPixOptions()),
    'SessionPaymentMethodOptionsRevolutPayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsRevolutPayOptions()),
    'SessionPaymentMethodOptionsSepaDebitOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSepaDebitOptions()),
    'SessionPaymentMethodOptionsSofortOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSofortOptions()),
    'SessionPaymentMethodOptionsSwishOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSwishOptions()),
    'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions()),
    'SessionPaymentMethodOptionsUsBankAccountOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccountOptions()),
    'SessionPaymentMethodOptionsWechatPayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsWechatPayOptions()),
    'SessionPaymentMethodOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsOptions()),
    'SessionPhoneNumberCollectionOptions': TypeInfo(TypeOf.Class, create:() => SessionPhoneNumberCollectionOptions()),
    'SessionSavedPaymentMethodOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionSavedPaymentMethodOptionsOptions()),
    'SessionSetupIntentDataOptions': TypeInfo(TypeOf.Class, create:() => SessionSetupIntentDataOptions()),
    'SessionShippingAddressCollectionOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingAddressCollectionOptions()),
    'SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions()),
    'SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions()),
    'SessionShippingOptionShippingRateDataDeliveryEstimateOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataDeliveryEstimateOptions()),
    'SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions()),
    'SessionShippingOptionShippingRateDataFixedAmountOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataFixedAmountOptions()),
    'Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>': TypeInfo(TypeOf.Class, create:() => Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>()),
    'SessionShippingOptionShippingRateDataOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataOptions()),
    'SessionShippingOptionOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionOptions()),
    'SessionSubscriptionDataInvoiceSettingsIssuerOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataInvoiceSettingsIssuerOptions()),
    'SessionSubscriptionDataInvoiceSettingsOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataInvoiceSettingsOptions()),
    'SessionSubscriptionDataTransferDataOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataTransferDataOptions()),
    'SessionSubscriptionDataTrialSettingsEndBehaviorOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataTrialSettingsEndBehaviorOptions()),
    'SessionSubscriptionDataTrialSettingsOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataTrialSettingsOptions()),
    'SessionSubscriptionDataOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataOptions()),
    'SessionTaxIdCollectionOptions': TypeInfo(TypeOf.Class, create:() => SessionTaxIdCollectionOptions()),
    'SessionCreateOptions': TypeInfo(TypeOf.Class, create:() => SessionCreateOptions()),
    'List<SessionCustomFieldOptions>': TypeInfo(TypeOf.Class, create:() => <SessionCustomFieldOptions>[]),
    'List<SessionDiscountOptions>': TypeInfo(TypeOf.Class, create:() => <SessionDiscountOptions>[]),
    'List<SessionLineItemOptions>': TypeInfo(TypeOf.Class, create:() => <SessionLineItemOptions>[]),
    'List<SessionShippingOptionOptions>': TypeInfo(TypeOf.Class, create:() => <SessionShippingOptionOptions>[]),
    'PaymentIntentAutomaticPaymentMethodsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentAutomaticPaymentMethodsOptions()),
    'PaymentIntentMandateDataCustomerAcceptanceOfflineOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentMandateDataCustomerAcceptanceOfflineOptions()),
    'PaymentIntentMandateDataCustomerAcceptanceOnlineOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentMandateDataCustomerAcceptanceOnlineOptions()),
    'PaymentIntentMandateDataCustomerAcceptanceOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentMandateDataCustomerAcceptanceOptions()),
    'PaymentIntentMandateDataOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentMandateDataOptions()),
    'PaymentIntentPaymentMethodDataAcssDebitOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataAcssDebitOptions()),
    'PaymentIntentPaymentMethodDataAffirmOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataAffirmOptions()),
    'PaymentIntentPaymentMethodDataAfterpayClearpayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataAfterpayClearpayOptions()),
    'PaymentIntentPaymentMethodDataAlipayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataAlipayOptions()),
    'PaymentIntentPaymentMethodDataAmazonPayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataAmazonPayOptions()),
    'PaymentIntentPaymentMethodDataAuBecsDebitOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataAuBecsDebitOptions()),
    'PaymentIntentPaymentMethodDataBacsDebitOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataBacsDebitOptions()),
    'PaymentIntentPaymentMethodDataBancontactOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataBancontactOptions()),
    'PaymentIntentPaymentMethodDataBillingDetailsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataBillingDetailsOptions()),
    'PaymentIntentPaymentMethodDataBlikOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataBlikOptions()),
    'PaymentIntentPaymentMethodDataBoletoOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataBoletoOptions()),
    'PaymentIntentPaymentMethodDataCashappOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataCashappOptions()),
    'PaymentIntentPaymentMethodDataCustomerBalanceOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataCustomerBalanceOptions()),
    'PaymentIntentPaymentMethodDataEpsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataEpsOptions()),
    'PaymentIntentPaymentMethodDataFpxOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataFpxOptions()),
    'PaymentIntentPaymentMethodDataGiropayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataGiropayOptions()),
    'PaymentIntentPaymentMethodDataGrabpayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataGrabpayOptions()),
    'PaymentIntentPaymentMethodDataIdealOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataIdealOptions()),
    'PaymentIntentPaymentMethodDataInteracPresentOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataInteracPresentOptions()),
    'DobOptions': TypeInfo(TypeOf.Class, create:() => DobOptions()),
    'PaymentIntentPaymentMethodDataKlarnaOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataKlarnaOptions()),
    'PaymentIntentPaymentMethodDataKonbiniOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataKonbiniOptions()),
    'PaymentIntentPaymentMethodDataLinkOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataLinkOptions()),
    'PaymentIntentPaymentMethodDataMobilepayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataMobilepayOptions()),
    'PaymentIntentPaymentMethodDataMultibancoOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataMultibancoOptions()),
    'PaymentIntentPaymentMethodDataOxxoOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataOxxoOptions()),
    'PaymentIntentPaymentMethodDataP24Options': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataP24Options()),
    'PaymentIntentPaymentMethodDataPaynowOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataPaynowOptions()),
    'PaymentIntentPaymentMethodDataPaypalOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataPaypalOptions()),
    'PaymentIntentPaymentMethodDataPixOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataPixOptions()),
    'PaymentIntentPaymentMethodDataPromptpayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataPromptpayOptions()),
    'PaymentIntentPaymentMethodDataRadarOptionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataRadarOptionsOptions()),
    'PaymentIntentPaymentMethodDataRevolutPayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataRevolutPayOptions()),
    'PaymentIntentPaymentMethodDataSepaDebitOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataSepaDebitOptions()),
    'PaymentIntentPaymentMethodDataSofortOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataSofortOptions()),
    'PaymentIntentPaymentMethodDataSwishOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataSwishOptions()),
    'PaymentIntentPaymentMethodDataTwintOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataTwintOptions()),
    'PaymentIntentPaymentMethodDataUsBankAccountOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataUsBankAccountOptions()),
    'PaymentIntentPaymentMethodDataWechatPayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataWechatPayOptions()),
    'PaymentIntentPaymentMethodDataZipOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataZipOptions()),
    'PaymentIntentPaymentMethodDataOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodDataOptions()),
    'PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions()),
    'PaymentIntentPaymentMethodOptionsAcssDebitOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAcssDebitOptions()),
    'PaymentIntentPaymentMethodOptionsAffirmOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAffirmOptions()),
    'PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions()),
    'PaymentIntentPaymentMethodOptionsAlipayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAlipayOptions()),
    'PaymentIntentPaymentMethodOptionsAmazonPayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAmazonPayOptions()),
    'PaymentIntentPaymentMethodOptionsAuBecsDebitOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAuBecsDebitOptions()),
    'PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions()),
    'PaymentIntentPaymentMethodOptionsBacsDebitOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBacsDebitOptions()),
    'PaymentIntentPaymentMethodOptionsBancontactOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBancontactOptions()),
    'PaymentIntentPaymentMethodOptionsBlikOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBlikOptions()),
    'PaymentIntentPaymentMethodOptionsBoletoOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBoletoOptions()),
    'PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions()),
    'PaymentIntentPaymentMethodOptionsCardInstallmentsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardInstallmentsOptions()),
    'PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions()),
    'PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions()),
    'PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions()),
    'PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions()),
    'PaymentIntentPaymentMethodOptionsCardOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardOptions()),
    'PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions()),
    'PaymentIntentPaymentMethodOptionsCardPresentOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardPresentOptions()),
    'PaymentIntentPaymentMethodOptionsCashappOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCashappOptions()),
    'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions()),
    'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions()),
    'PaymentIntentPaymentMethodOptionsCustomerBalanceOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCustomerBalanceOptions()),
    'PaymentIntentPaymentMethodOptionsEpsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsEpsOptions()),
    'PaymentIntentPaymentMethodOptionsFpxOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsFpxOptions()),
    'PaymentIntentPaymentMethodOptionsGiropayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsGiropayOptions()),
    'PaymentIntentPaymentMethodOptionsGrabpayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsGrabpayOptions()),
    'PaymentIntentPaymentMethodOptionsIdealOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsIdealOptions()),
    'PaymentIntentPaymentMethodOptionsInteracPresentOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsInteracPresentOptions()),
    'PaymentIntentPaymentMethodOptionsKlarnaOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsKlarnaOptions()),
    'PaymentIntentPaymentMethodOptionsKonbiniOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsKonbiniOptions()),
    'PaymentIntentPaymentMethodOptionsLinkOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsLinkOptions()),
    'PaymentIntentPaymentMethodOptionsMobilepayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsMobilepayOptions()),
    'PaymentIntentPaymentMethodOptionsMultibancoOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsMultibancoOptions()),
    'PaymentIntentPaymentMethodOptionsOxxoOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsOxxoOptions()),
    'PaymentIntentPaymentMethodOptionsP24Options': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsP24Options()),
    'PaymentIntentPaymentMethodOptionsPaynowOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsPaynowOptions()),
    'PaymentIntentPaymentMethodOptionsPaypalOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsPaypalOptions()),
    'PaymentIntentPaymentMethodOptionsPixOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsPixOptions()),
    'PaymentIntentPaymentMethodOptionsPromptpayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsPromptpayOptions()),
    'PaymentIntentPaymentMethodOptionsRevolutPayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsRevolutPayOptions()),
    'PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions()),
    'PaymentIntentPaymentMethodOptionsSepaDebitOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsSepaDebitOptions()),
    'PaymentIntentPaymentMethodOptionsSofortOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsSofortOptions()),
    'PaymentIntentPaymentMethodOptionsSwishOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsSwishOptions()),
    'PaymentIntentPaymentMethodOptionsTwintOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsTwintOptions()),
    'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions()),
    'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions()),
    'PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions()),
    'PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions()),
    'PaymentIntentPaymentMethodOptionsUsBankAccountOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsUsBankAccountOptions()),
    'PaymentIntentPaymentMethodOptionsWechatPayOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsWechatPayOptions()),
    'PaymentIntentPaymentMethodOptionsZipOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsZipOptions()),
    'PaymentIntentPaymentMethodOptionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsOptions()),
    'PaymentIntentRadarOptionsOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentRadarOptionsOptions()),
    'PaymentIntentTransferDataOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentTransferDataOptions()),
    'PaymentIntentCreateOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentCreateOptions()),
    'CustomerCashBalanceSettingsOptions': TypeInfo(TypeOf.Class, create:() => CustomerCashBalanceSettingsOptions()),
    'CustomerCashBalanceOptions': TypeInfo(TypeOf.Class, create:() => CustomerCashBalanceOptions()),
    'CustomerInvoiceSettingsCustomFieldOptions': TypeInfo(TypeOf.Class, create:() => CustomerInvoiceSettingsCustomFieldOptions()),
    'CustomerInvoiceSettingsRenderingOptionsOptions': TypeInfo(TypeOf.Class, create:() => CustomerInvoiceSettingsRenderingOptionsOptions()),
    'CustomerInvoiceSettingsOptions': TypeInfo(TypeOf.Class, create:() => CustomerInvoiceSettingsOptions()),
    'List<CustomerInvoiceSettingsCustomFieldOptions>': TypeInfo(TypeOf.Class, create:() => <CustomerInvoiceSettingsCustomFieldOptions>[]),
    'ShippingOptions': TypeInfo(TypeOf.Class, create:() => ShippingOptions()),
    'CardCreateNestedOptions': TypeInfo(TypeOf.Class, create:() => CardCreateNestedOptions()),
    'CustomerTaxOptions': TypeInfo(TypeOf.Class, create:() => CustomerTaxOptions()),
    'CustomerTaxIdDataOptions': TypeInfo(TypeOf.Class, create:() => CustomerTaxIdDataOptions()),
    'CustomerCreateOptions': TypeInfo(TypeOf.Class, create:() => CustomerCreateOptions()),
    'AnyOf2<String,CardCreateNestedOptions>': TypeInfo(TypeOf.Class, create:() => AnyOf2<String,CardCreateNestedOptions>()),
    'List<CustomerTaxIdDataOptions>': TypeInfo(TypeOf.Class, create:() => <CustomerTaxIdDataOptions>[]),
    'StripeCreatePaymentOptions': TypeInfo(TypeOf.Class, create:() => StripeCreatePaymentOptions()),
    'RequestOptions': TypeInfo(TypeOf.Class, create:() => RequestOptions()),
    'StripeCreateCheckoutQuery': TypeInfo(TypeOf.Class, create:() => StripeCreateCheckoutQuery()),
    'SessionAfterExpirationRecovery': TypeInfo(TypeOf.Class, create:() => SessionAfterExpirationRecovery()),
    'SessionAfterExpiration': TypeInfo(TypeOf.Class, create:() => SessionAfterExpiration()),
    'SessionAutomaticTaxLiability': TypeInfo(TypeOf.Class, create:() => SessionAutomaticTaxLiability()),
    'SessionAutomaticTax': TypeInfo(TypeOf.Class, create:() => SessionAutomaticTax()),
    'SessionConsent': TypeInfo(TypeOf.Class, create:() => SessionConsent()),
    'SessionConsentCollectionPaymentMethodReuseAgreement': TypeInfo(TypeOf.Class, create:() => SessionConsentCollectionPaymentMethodReuseAgreement()),
    'SessionConsentCollection': TypeInfo(TypeOf.Class, create:() => SessionConsentCollection()),
    'SessionCurrencyConversion': TypeInfo(TypeOf.Class, create:() => SessionCurrencyConversion()),
    'SessionCustomFieldDropdownOption': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldDropdownOption()),
    'SessionCustomFieldDropdown': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldDropdown()),
    'List<SessionCustomFieldDropdownOption>': TypeInfo(TypeOf.Class, create:() => <SessionCustomFieldDropdownOption>[]),
    'SessionCustomFieldLabel': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldLabel()),
    'SessionCustomFieldNumeric': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldNumeric()),
    'SessionCustomFieldText': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldText()),
    'SessionCustomField': TypeInfo(TypeOf.Class, create:() => SessionCustomField()),
    'SessionCustomTextAfterSubmit': TypeInfo(TypeOf.Class, create:() => SessionCustomTextAfterSubmit()),
    'SessionCustomTextShippingAddress': TypeInfo(TypeOf.Class, create:() => SessionCustomTextShippingAddress()),
    'SessionCustomTextSubmit': TypeInfo(TypeOf.Class, create:() => SessionCustomTextSubmit()),
    'SessionCustomTextTermsOfServiceAcceptance': TypeInfo(TypeOf.Class, create:() => SessionCustomTextTermsOfServiceAcceptance()),
    'SessionCustomText': TypeInfo(TypeOf.Class, create:() => SessionCustomText()),
    'SessionCustomerDetailsTaxId': TypeInfo(TypeOf.Class, create:() => SessionCustomerDetailsTaxId()),
    'SessionCustomerDetails': TypeInfo(TypeOf.Class, create:() => SessionCustomerDetails()),
    'List<SessionCustomerDetailsTaxId>': TypeInfo(TypeOf.Class, create:() => <SessionCustomerDetailsTaxId>[]),
    'SessionInvoiceCreationInvoiceDataCustomField': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataCustomField()),
    'SessionInvoiceCreationInvoiceDataIssuer': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataIssuer()),
    'SessionInvoiceCreationInvoiceDataRenderingOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataRenderingOptions()),
    'SessionInvoiceCreationInvoiceData': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceData()),
    'List<SessionInvoiceCreationInvoiceDataCustomField>': TypeInfo(TypeOf.Class, create:() => <SessionInvoiceCreationInvoiceDataCustomField>[]),
    'SessionInvoiceCreation': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreation()),
    'CouponAppliesTo': TypeInfo(TypeOf.Class, create:() => CouponAppliesTo()),
    'CouponCurrencyOptions': TypeInfo(TypeOf.Class, create:() => CouponCurrencyOptions()),
    'Coupon': TypeInfo(TypeOf.Class, create:() => Coupon()),
    'Map<String,CouponCurrencyOptions?>': TypeInfo(TypeOf.Class, create:() => Map<String,CouponCurrencyOptions?>()),
    'Discount': TypeInfo(TypeOf.Class, create:() => Discount()),
    'LineItemDiscount': TypeInfo(TypeOf.Class, create:() => LineItemDiscount()),
    'PriceCurrencyOptionsCustomUnitAmount': TypeInfo(TypeOf.Class, create:() => PriceCurrencyOptionsCustomUnitAmount()),
    'PriceCurrencyOptionsTier': TypeInfo(TypeOf.Class, create:() => PriceCurrencyOptionsTier()),
    'PriceCurrencyOptions': TypeInfo(TypeOf.Class, create:() => PriceCurrencyOptions()),
    'List<PriceCurrencyOptionsTier>': TypeInfo(TypeOf.Class, create:() => <PriceCurrencyOptionsTier>[]),
    'PriceCustomUnitAmount': TypeInfo(TypeOf.Class, create:() => PriceCustomUnitAmount()),
    'PriceRecurring': TypeInfo(TypeOf.Class, create:() => PriceRecurring()),
    'PriceTier': TypeInfo(TypeOf.Class, create:() => PriceTier()),
    'PriceTransformQuantity': TypeInfo(TypeOf.Class, create:() => PriceTransformQuantity()),
    'Price': TypeInfo(TypeOf.Class, create:() => Price()),
    'Map<String,PriceCurrencyOptions?>': TypeInfo(TypeOf.Class, create:() => Map<String,PriceCurrencyOptions?>()),
    'List<PriceTier>': TypeInfo(TypeOf.Class, create:() => <PriceTier>[]),
    'TaxRate': TypeInfo(TypeOf.Class, create:() => TaxRate()),
    'LineItemTax': TypeInfo(TypeOf.Class, create:() => LineItemTax()),
    'LineItem': TypeInfo(TypeOf.Class, create:() => LineItem()),
    'List<LineItemDiscount>': TypeInfo(TypeOf.Class, create:() => <LineItemDiscount>[]),
    'List<LineItemTax>': TypeInfo(TypeOf.Class, create:() => <LineItemTax>[]),
    'SessionPaymentMethodConfigurationDetails': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodConfigurationDetails()),
    'SessionPaymentMethodOptionsAcssDebitMandateOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAcssDebitMandateOptions()),
    'SessionPaymentMethodOptionsAcssDebit': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAcssDebit()),
    'SessionPaymentMethodOptionsAffirm': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAffirm()),
    'SessionPaymentMethodOptionsAfterpayClearpay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAfterpayClearpay()),
    'SessionPaymentMethodOptionsAlipay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAlipay()),
    'SessionPaymentMethodOptionsAmazonPay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAmazonPay()),
    'SessionPaymentMethodOptionsAuBecsDebit': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAuBecsDebit()),
    'SessionPaymentMethodOptionsBacsDebit': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBacsDebit()),
    'SessionPaymentMethodOptionsBancontact': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBancontact()),
    'SessionPaymentMethodOptionsBoleto': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBoleto()),
    'SessionPaymentMethodOptionsCardInstallments': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCardInstallments()),
    'SessionPaymentMethodOptionsCard': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCard()),
    'SessionPaymentMethodOptionsCashapp': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCashapp()),
    'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer()),
    'SessionPaymentMethodOptionsCustomerBalanceBankTransfer': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceBankTransfer()),
    'SessionPaymentMethodOptionsCustomerBalance': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalance()),
    'SessionPaymentMethodOptionsEps': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsEps()),
    'SessionPaymentMethodOptionsFpx': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsFpx()),
    'SessionPaymentMethodOptionsGiropay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsGiropay()),
    'SessionPaymentMethodOptionsGrabpay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsGrabpay()),
    'SessionPaymentMethodOptionsIdeal': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsIdeal()),
    'SessionPaymentMethodOptionsKlarna': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsKlarna()),
    'SessionPaymentMethodOptionsKonbini': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsKonbini()),
    'SessionPaymentMethodOptionsLink': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsLink()),
    'SessionPaymentMethodOptionsMobilepay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsMobilepay()),
    'SessionPaymentMethodOptionsMultibanco': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsMultibanco()),
    'SessionPaymentMethodOptionsOxxo': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsOxxo()),
    'SessionPaymentMethodOptionsP24': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsP24()),
    'SessionPaymentMethodOptionsPaynow': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPaynow()),
    'SessionPaymentMethodOptionsPaypal': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPaypal()),
    'SessionPaymentMethodOptionsPix': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPix()),
    'SessionPaymentMethodOptionsRevolutPay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsRevolutPay()),
    'SessionPaymentMethodOptionsSepaDebit': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSepaDebit()),
    'SessionPaymentMethodOptionsSofort': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSofort()),
    'SessionPaymentMethodOptionsSwish': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSwish()),
    'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters()),
    'SessionPaymentMethodOptionsUsBankAccountFinancialConnections': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccountFinancialConnections()),
    'SessionPaymentMethodOptionsUsBankAccount': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccount()),
    'SessionPaymentMethodOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptions()),
    'SessionPhoneNumberCollection': TypeInfo(TypeOf.Class, create:() => SessionPhoneNumberCollection()),
    'SessionSavedPaymentMethodOptions': TypeInfo(TypeOf.Class, create:() => SessionSavedPaymentMethodOptions()),
    'SessionShippingAddressCollection': TypeInfo(TypeOf.Class, create:() => SessionShippingAddressCollection()),
    'SessionShippingCostTax': TypeInfo(TypeOf.Class, create:() => SessionShippingCostTax()),
    'SessionShippingCost': TypeInfo(TypeOf.Class, create:() => SessionShippingCost()),
    'List<SessionShippingCostTax>': TypeInfo(TypeOf.Class, create:() => <SessionShippingCostTax>[]),
    'SessionShippingDetails': TypeInfo(TypeOf.Class, create:() => SessionShippingDetails()),
    'SessionShippingOption': TypeInfo(TypeOf.Class, create:() => SessionShippingOption()),
    'SessionTaxIdCollection': TypeInfo(TypeOf.Class, create:() => SessionTaxIdCollection()),
    'SessionTotalDetailsBreakdownDiscount': TypeInfo(TypeOf.Class, create:() => SessionTotalDetailsBreakdownDiscount()),
    'SessionTotalDetailsBreakdownTax': TypeInfo(TypeOf.Class, create:() => SessionTotalDetailsBreakdownTax()),
    'SessionTotalDetailsBreakdown': TypeInfo(TypeOf.Class, create:() => SessionTotalDetailsBreakdown()),
    'List<SessionTotalDetailsBreakdownDiscount>': TypeInfo(TypeOf.Class, create:() => <SessionTotalDetailsBreakdownDiscount>[]),
    'List<SessionTotalDetailsBreakdownTax>': TypeInfo(TypeOf.Class, create:() => <SessionTotalDetailsBreakdownTax>[]),
    'SessionTotalDetails': TypeInfo(TypeOf.Class, create:() => SessionTotalDetails()),
    'Session': TypeInfo(TypeOf.Class, create:() => Session()),
    'List<SessionCustomField>': TypeInfo(TypeOf.Class, create:() => <SessionCustomField>[]),
    'StripeList<LineItem>': TypeInfo(TypeOf.Class, create:() => StripeList<LineItem>()),
    'List<SessionShippingOption>': TypeInfo(TypeOf.Class, create:() => <SessionShippingOption>[]),
    'PaymentIntentAmountDetailsTip': TypeInfo(TypeOf.Class, create:() => PaymentIntentAmountDetailsTip()),
    'PaymentIntentAmountDetails': TypeInfo(TypeOf.Class, create:() => PaymentIntentAmountDetails()),
    'PaymentIntentAutomaticPaymentMethods': TypeInfo(TypeOf.Class, create:() => PaymentIntentAutomaticPaymentMethods()),
    'PaymentMethodAcssDebit': TypeInfo(TypeOf.Class, create:() => PaymentMethodAcssDebit()),
    'PaymentMethodAffirm': TypeInfo(TypeOf.Class, create:() => PaymentMethodAffirm()),
    'PaymentMethodAfterpayClearpay': TypeInfo(TypeOf.Class, create:() => PaymentMethodAfterpayClearpay()),
    'PaymentMethodAlipay': TypeInfo(TypeOf.Class, create:() => PaymentMethodAlipay()),
    'PaymentMethodAmazonPay': TypeInfo(TypeOf.Class, create:() => PaymentMethodAmazonPay()),
    'PaymentMethodAuBecsDebit': TypeInfo(TypeOf.Class, create:() => PaymentMethodAuBecsDebit()),
    'PaymentMethodBacsDebit': TypeInfo(TypeOf.Class, create:() => PaymentMethodBacsDebit()),
    'PaymentMethodBancontact': TypeInfo(TypeOf.Class, create:() => PaymentMethodBancontact()),
    'PaymentMethodBillingDetails': TypeInfo(TypeOf.Class, create:() => PaymentMethodBillingDetails()),
    'PaymentMethodBlik': TypeInfo(TypeOf.Class, create:() => PaymentMethodBlik()),
    'PaymentMethodBoleto': TypeInfo(TypeOf.Class, create:() => PaymentMethodBoleto()),
    'PaymentMethodCardChecks': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardChecks()),
    'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline()),
    'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt()),
    'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet()),
    'PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent()),
    'PaymentMethodCardGeneratedFromPaymentMethodDetails': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardGeneratedFromPaymentMethodDetails()),
    'PaymentMethodCardGeneratedFrom': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardGeneratedFrom()),
    'PaymentMethodCardNetworks': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardNetworks()),
    'PaymentMethodCardThreeDSecureUsage': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardThreeDSecureUsage()),
    'PaymentMethodCardWalletAmexExpressCheckout': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardWalletAmexExpressCheckout()),
    'PaymentMethodCardWalletApplePay': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardWalletApplePay()),
    'PaymentMethodCardWalletGooglePay': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardWalletGooglePay()),
    'PaymentMethodCardWalletLink': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardWalletLink()),
    'PaymentMethodCardWalletMasterpass': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardWalletMasterpass()),
    'PaymentMethodCardWalletSamsungPay': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardWalletSamsungPay()),
    'PaymentMethodCardWalletVisaCheckout': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardWalletVisaCheckout()),
    'PaymentMethodCardWallet': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardWallet()),
    'PaymentMethodCard': TypeInfo(TypeOf.Class, create:() => PaymentMethodCard()),
    'PaymentMethodCardPresentNetworks': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardPresentNetworks()),
    'PaymentMethodCardPresentOffline': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardPresentOffline()),
    'PaymentMethodCardPresentWallet': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardPresentWallet()),
    'PaymentMethodCardPresent': TypeInfo(TypeOf.Class, create:() => PaymentMethodCardPresent()),
    'PaymentMethodCashapp': TypeInfo(TypeOf.Class, create:() => PaymentMethodCashapp()),
    'PaymentMethodCustomerBalance': TypeInfo(TypeOf.Class, create:() => PaymentMethodCustomerBalance()),
    'PaymentMethodEps': TypeInfo(TypeOf.Class, create:() => PaymentMethodEps()),
    'PaymentMethodFpx': TypeInfo(TypeOf.Class, create:() => PaymentMethodFpx()),
    'PaymentMethodGiropay': TypeInfo(TypeOf.Class, create:() => PaymentMethodGiropay()),
    'PaymentMethodGrabpay': TypeInfo(TypeOf.Class, create:() => PaymentMethodGrabpay()),
    'PaymentMethodIdeal': TypeInfo(TypeOf.Class, create:() => PaymentMethodIdeal()),
    'PaymentMethodInteracPresentNetworks': TypeInfo(TypeOf.Class, create:() => PaymentMethodInteracPresentNetworks()),
    'PaymentMethodInteracPresent': TypeInfo(TypeOf.Class, create:() => PaymentMethodInteracPresent()),
    'PaymentMethodKlarnaDob': TypeInfo(TypeOf.Class, create:() => PaymentMethodKlarnaDob()),
    'PaymentMethodKlarna': TypeInfo(TypeOf.Class, create:() => PaymentMethodKlarna()),
    'PaymentMethodKonbini': TypeInfo(TypeOf.Class, create:() => PaymentMethodKonbini()),
    'PaymentMethodLink': TypeInfo(TypeOf.Class, create:() => PaymentMethodLink()),
    'PaymentMethodMobilepay': TypeInfo(TypeOf.Class, create:() => PaymentMethodMobilepay()),
    'PaymentMethodMultibanco': TypeInfo(TypeOf.Class, create:() => PaymentMethodMultibanco()),
    'PaymentMethodOxxo': TypeInfo(TypeOf.Class, create:() => PaymentMethodOxxo()),
    'PaymentMethodP24': TypeInfo(TypeOf.Class, create:() => PaymentMethodP24()),
    'PaymentMethodPaynow': TypeInfo(TypeOf.Class, create:() => PaymentMethodPaynow()),
    'PaymentMethodPaypal': TypeInfo(TypeOf.Class, create:() => PaymentMethodPaypal()),
    'PaymentMethodPix': TypeInfo(TypeOf.Class, create:() => PaymentMethodPix()),
    'PaymentMethodPromptpay': TypeInfo(TypeOf.Class, create:() => PaymentMethodPromptpay()),
    'PaymentMethodRadarOptions': TypeInfo(TypeOf.Class, create:() => PaymentMethodRadarOptions()),
    'PaymentMethodRevolutPay': TypeInfo(TypeOf.Class, create:() => PaymentMethodRevolutPay()),
    'PaymentMethodSepaDebitGeneratedFrom': TypeInfo(TypeOf.Class, create:() => PaymentMethodSepaDebitGeneratedFrom()),
    'PaymentMethodSepaDebit': TypeInfo(TypeOf.Class, create:() => PaymentMethodSepaDebit()),
    'PaymentMethodSofort': TypeInfo(TypeOf.Class, create:() => PaymentMethodSofort()),
    'PaymentMethodSwish': TypeInfo(TypeOf.Class, create:() => PaymentMethodSwish()),
    'PaymentMethodTwint': TypeInfo(TypeOf.Class, create:() => PaymentMethodTwint()),
    'PaymentMethodUsBankAccountNetworks': TypeInfo(TypeOf.Class, create:() => PaymentMethodUsBankAccountNetworks()),
    'PaymentMethodUsBankAccountStatusDetailsBlocked': TypeInfo(TypeOf.Class, create:() => PaymentMethodUsBankAccountStatusDetailsBlocked()),
    'PaymentMethodUsBankAccountStatusDetails': TypeInfo(TypeOf.Class, create:() => PaymentMethodUsBankAccountStatusDetails()),
    'PaymentMethodUsBankAccount': TypeInfo(TypeOf.Class, create:() => PaymentMethodUsBankAccount()),
    'PaymentMethodWechatPay': TypeInfo(TypeOf.Class, create:() => PaymentMethodWechatPay()),
    'PaymentMethodZip': TypeInfo(TypeOf.Class, create:() => PaymentMethodZip()),
    'PaymentMethod': TypeInfo(TypeOf.Class, create:() => PaymentMethod()),
    'SetupIntentAutomaticPaymentMethods': TypeInfo(TypeOf.Class, create:() => SetupIntentAutomaticPaymentMethods()),
    'SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode': TypeInfo(TypeOf.Class, create:() => SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode()),
    'SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode': TypeInfo(TypeOf.Class, create:() => SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode()),
    'SetupIntentNextActionRedirectToUrl': TypeInfo(TypeOf.Class, create:() => SetupIntentNextActionRedirectToUrl()),
    'SetupIntentNextActionUseStripeSdk': TypeInfo(TypeOf.Class, create:() => SetupIntentNextActionUseStripeSdk()),
    'SetupIntentNextActionVerifyWithMicrodeposits': TypeInfo(TypeOf.Class, create:() => SetupIntentNextActionVerifyWithMicrodeposits()),
    'SetupIntentNextAction': TypeInfo(TypeOf.Class, create:() => SetupIntentNextAction()),
    'SetupIntentPaymentMethodConfigurationDetails': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodConfigurationDetails()),
    'SetupIntentPaymentMethodOptionsAcssDebitMandateOptions': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsAcssDebitMandateOptions()),
    'SetupIntentPaymentMethodOptionsAcssDebit': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsAcssDebit()),
    'SetupIntentPaymentMethodOptionsAmazonPay': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsAmazonPay()),
    'SetupIntentPaymentMethodOptionsBacsDebitMandateOptions': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsBacsDebitMandateOptions()),
    'SetupIntentPaymentMethodOptionsBacsDebit': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsBacsDebit()),
    'SetupIntentPaymentMethodOptionsCardMandateOptions': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsCardMandateOptions()),
    'SetupIntentPaymentMethodOptionsCard': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsCard()),
    'SetupIntentPaymentMethodOptionsCardPresent': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsCardPresent()),
    'SetupIntentPaymentMethodOptionsLink': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsLink()),
    'SetupIntentPaymentMethodOptionsPaypal': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsPaypal()),
    'SetupIntentPaymentMethodOptionsSepaDebitMandateOptions': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsSepaDebitMandateOptions()),
    'SetupIntentPaymentMethodOptionsSepaDebit': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsSepaDebit()),
    'SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters()),
    'SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections()),
    'SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions()),
    'SetupIntentPaymentMethodOptionsUsBankAccount': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptionsUsBankAccount()),
    'SetupIntentPaymentMethodOptions': TypeInfo(TypeOf.Class, create:() => SetupIntentPaymentMethodOptions()),
    'SetupIntent': TypeInfo(TypeOf.Class, create:() => SetupIntent()),
    'StripeError': TypeInfo(TypeOf.Class, create:() => StripeError()),
    'IPaymentSource': TypeInfo(TypeOf.Interface),
    'PaymentIntent': TypeInfo(TypeOf.Class, create:() => PaymentIntent()),
    'PaymentIntentNextActionAlipayHandleRedirect': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionAlipayHandleRedirect()),
    'PaymentIntentNextActionBoletoDisplayDetails': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionBoletoDisplayDetails()),
    'PaymentIntentNextActionCardAwaitNotification': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionCardAwaitNotification()),
    'PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode()),
    'PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode()),
    'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba()),
    'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban()),
    'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode()),
    'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei()),
    'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift()),
    'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin()),
    'PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress()),
    'PaymentIntentNextActionDisplayBankTransferInstructions': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionDisplayBankTransferInstructions()),
    'List<PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress>': TypeInfo(TypeOf.Class, create:() => <PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress>[]),
    'PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart()),
    'PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson()),
    'PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop()),
    'PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart()),
    'PaymentIntentNextActionKonbiniDisplayDetailsStores': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionKonbiniDisplayDetailsStores()),
    'PaymentIntentNextActionKonbiniDisplayDetails': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionKonbiniDisplayDetails()),
    'PaymentIntentNextActionMultibancoDisplayDetails': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionMultibancoDisplayDetails()),
    'PaymentIntentNextActionOxxoDisplayDetails': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionOxxoDisplayDetails()),
    'PaymentIntentNextActionPaynowDisplayQrCode': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionPaynowDisplayQrCode()),
    'PaymentIntentNextActionPixDisplayQrCode': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionPixDisplayQrCode()),
    'PaymentIntentNextActionPromptpayDisplayQrCode': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionPromptpayDisplayQrCode()),
    'PaymentIntentNextActionRedirectToUrl': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionRedirectToUrl()),
    'PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode()),
    'PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode()),
    'PaymentIntentNextActionUseStripeSdk': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionUseStripeSdk()),
    'PaymentIntentNextActionVerifyWithMicrodeposits': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionVerifyWithMicrodeposits()),
    'PaymentIntentNextActionWechatPayDisplayQrCode': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionWechatPayDisplayQrCode()),
    'PaymentIntentNextActionWechatPayRedirectToAndroidApp': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionWechatPayRedirectToAndroidApp()),
    'PaymentIntentNextActionWechatPayRedirectToIosApp': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextActionWechatPayRedirectToIosApp()),
    'PaymentIntentNextAction': TypeInfo(TypeOf.Class, create:() => PaymentIntentNextAction()),
    'PaymentIntentPaymentMethodConfigurationDetails': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodConfigurationDetails()),
    'PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions()),
    'PaymentIntentPaymentMethodOptionsAcssDebit': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAcssDebit()),
    'PaymentIntentPaymentMethodOptionsAffirm': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAffirm()),
    'PaymentIntentPaymentMethodOptionsAfterpayClearpay': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAfterpayClearpay()),
    'PaymentIntentPaymentMethodOptionsAlipay': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAlipay()),
    'PaymentIntentPaymentMethodOptionsAmazonPay': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAmazonPay()),
    'PaymentIntentPaymentMethodOptionsAuBecsDebit': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsAuBecsDebit()),
    'PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions()),
    'PaymentIntentPaymentMethodOptionsBacsDebit': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBacsDebit()),
    'PaymentIntentPaymentMethodOptionsBancontact': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBancontact()),
    'PaymentIntentPaymentMethodOptionsBlik': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBlik()),
    'PaymentIntentPaymentMethodOptionsBoleto': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsBoleto()),
    'PaymentIntentPaymentMethodOptionsCardInstallmentsPlan': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardInstallmentsPlan()),
    'PaymentIntentPaymentMethodOptionsCardInstallments': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardInstallments()),
    'List<PaymentIntentPaymentMethodOptionsCardInstallmentsPlan>': TypeInfo(TypeOf.Class, create:() => <PaymentIntentPaymentMethodOptionsCardInstallmentsPlan>[]),
    'PaymentIntentPaymentMethodOptionsCardMandateOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardMandateOptions()),
    'PaymentIntentPaymentMethodOptionsCard': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCard()),
    'PaymentIntentPaymentMethodOptionsCardPresentRouting': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardPresentRouting()),
    'PaymentIntentPaymentMethodOptionsCardPresent': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCardPresent()),
    'PaymentIntentPaymentMethodOptionsCashapp': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCashapp()),
    'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer()),
    'PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer()),
    'PaymentIntentPaymentMethodOptionsCustomerBalance': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsCustomerBalance()),
    'PaymentIntentPaymentMethodOptionsEps': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsEps()),
    'PaymentIntentPaymentMethodOptionsFpx': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsFpx()),
    'PaymentIntentPaymentMethodOptionsGiropay': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsGiropay()),
    'PaymentIntentPaymentMethodOptionsGrabpay': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsGrabpay()),
    'PaymentIntentPaymentMethodOptionsIdeal': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsIdeal()),
    'PaymentIntentPaymentMethodOptionsInteracPresent': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsInteracPresent()),
    'PaymentIntentPaymentMethodOptionsKlarna': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsKlarna()),
    'PaymentIntentPaymentMethodOptionsKonbini': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsKonbini()),
    'PaymentIntentPaymentMethodOptionsLink': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsLink()),
    'PaymentIntentPaymentMethodOptionsMobilepay': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsMobilepay()),
    'PaymentIntentPaymentMethodOptionsMultibanco': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsMultibanco()),
    'PaymentIntentPaymentMethodOptionsOxxo': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsOxxo()),
    'PaymentIntentPaymentMethodOptionsP24': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsP24()),
    'PaymentIntentPaymentMethodOptionsPaynow': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsPaynow()),
    'PaymentIntentPaymentMethodOptionsPaypal': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsPaypal()),
    'PaymentIntentPaymentMethodOptionsPix': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsPix()),
    'PaymentIntentPaymentMethodOptionsPromptpay': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsPromptpay()),
    'PaymentIntentPaymentMethodOptionsRevolutPay': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsRevolutPay()),
    'PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions()),
    'PaymentIntentPaymentMethodOptionsSepaDebit': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsSepaDebit()),
    'PaymentIntentPaymentMethodOptionsSofort': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsSofort()),
    'PaymentIntentPaymentMethodOptionsSwish': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsSwish()),
    'PaymentIntentPaymentMethodOptionsTwint': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsTwint()),
    'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters()),
    'PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections()),
    'PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions()),
    'PaymentIntentPaymentMethodOptionsUsBankAccount': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsUsBankAccount()),
    'PaymentIntentPaymentMethodOptionsWechatPay': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsWechatPay()),
    'PaymentIntentPaymentMethodOptionsZip': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptionsZip()),
    'PaymentIntentPaymentMethodOptions': TypeInfo(TypeOf.Class, create:() => PaymentIntentPaymentMethodOptions()),
    'PaymentIntentProcessingCardCustomerNotification': TypeInfo(TypeOf.Class, create:() => PaymentIntentProcessingCardCustomerNotification()),
    'PaymentIntentProcessingCard': TypeInfo(TypeOf.Class, create:() => PaymentIntentProcessingCard()),
    'PaymentIntentProcessing': TypeInfo(TypeOf.Class, create:() => PaymentIntentProcessing()),
    'PaymentIntentTransferData': TypeInfo(TypeOf.Class, create:() => PaymentIntentTransferData()),
    'CustomSessionData': TypeInfo(TypeOf.Class, create:() => CustomSessionData()),
    'List<LineItem>': TypeInfo(TypeOf.Class, create:() => <LineItem>[]),
    'CustomPaymentIntentData': TypeInfo(TypeOf.Class, create:() => CustomPaymentIntentData()),
    'CustomCheckoutData': TypeInfo(TypeOf.Class, create:() => CustomCheckoutData()),
    'IPaysonPaymentCheckout1': TypeInfo(TypeOf.Interface),
    'PaymentLog': TypeInfo(TypeOf.Class, create:() => PaymentLog()),
    'PayableEntity': TypeInfo(TypeOf.AbstractClass),
    'IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>': TypeInfo(TypeOf.Class, create:() => IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>()),
    'IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>': TypeInfo(TypeOf.Class, create:() => IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>()),
    'IBokameraPaymentManager<StripeCreateCheckoutQuery,CustomCheckoutData,CustomCheckoutData>': TypeInfo(TypeOf.Class, create:() => IBokameraPaymentManager<StripeCreateCheckoutQuery,CustomCheckoutData,CustomCheckoutData>()),
    'ILogger<PayableEntity>': TypeInfo(TypeOf.Class, create:() => ILogger<PayableEntity>()),
    'List<PaymentLog>': TypeInfo(TypeOf.Class, create:() => <PaymentLog>[]),
    'List<Customer>': TypeInfo(TypeOf.Class, create:() => <Customer>[]),
    'RebateCodeStatus': TypeInfo(TypeOf.Class, create:() => RebateCodeStatus()),
    'ArticleServiceRelation': TypeInfo(TypeOf.Class, create:() => ArticleServiceRelation()),
    'ArticleTypeEnum': TypeInfo(TypeOf.Enum, enumValues:ArticleTypeEnum.values),
    'Article': TypeInfo(TypeOf.Class, create:() => Article()),
    'List<ArticleServiceRelation>': TypeInfo(TypeOf.Class, create:() => <ArticleServiceRelation>[]),
    'RebateCodeDayOfWeekRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeDayOfWeekRelation()),
    'RebateCodeServiceRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeServiceRelation()),
    'RebateCodeBookingPriceRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeBookingPriceRelation()),
    'RebateCodeCustomerRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeCustomerRelation()),
    'DaysOfWeek': TypeInfo(TypeOf.Class, create:() => DaysOfWeek()),
    'CalendarExport': TypeInfo(TypeOf.Class, create:() => CalendarExport()),
    'BookingLogEventType': TypeInfo(TypeOf.Class, create:() => BookingLogEventType()),
    'BookingLog': TypeInfo(TypeOf.Class, create:() => BookingLog()),
    'PaymentDetails': TypeInfo(TypeOf.Class, create:() => PaymentDetails()),
    'BookingPrice': TypeInfo(TypeOf.Class, create:() => BookingPrice()),
    'ServicePrice': TypeInfo(TypeOf.Class, create:() => ServicePrice()),
    'BookingStatus': TypeInfo(TypeOf.Class, create:() => BookingStatus()),
    'BookedResource': TypeInfo(TypeOf.Class, create:() => BookedResource()),
    'BookedResourceType': TypeInfo(TypeOf.Class, create:() => BookedResourceType()),
    'List<BookedResource>': TypeInfo(TypeOf.Class, create:() => <BookedResource>[]),
    'Booking': TypeInfo(TypeOf.Class, create:() => Booking()),
    'Service': TypeInfo(TypeOf.Class, create:() => Service()),
    'List<BookingLog>': TypeInfo(TypeOf.Class, create:() => <BookingLog>[]),
    'List<PaymentDetails>': TypeInfo(TypeOf.Class, create:() => <PaymentDetails>[]),
    'List<BookingPrice>': TypeInfo(TypeOf.Class, create:() => <BookingPrice>[]),
    'List<Resource>': TypeInfo(TypeOf.Class, create:() => <Resource>[]),
    'List<BookedResourceType>': TypeInfo(TypeOf.Class, create:() => <BookedResourceType>[]),
    'List<PriceMapping>': TypeInfo(TypeOf.Class, create:() => <PriceMapping>[]),
    'RebateCodeTransaction': TypeInfo(TypeOf.Class, create:() => RebateCodeTransaction()),
    'List<Service>': TypeInfo(TypeOf.Class, create:() => <Service>[]),
    'List<RebateCodeDayOfWeekRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeDayOfWeekRelation>[]),
    'List<RebateCodeServiceRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeServiceRelation>[]),
    'List<RebateCodeBookingPriceRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeBookingPriceRelation>[]),
    'List<RebateCodeCustomerRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeCustomerRelation>[]),
    'List<DaysOfWeek>': TypeInfo(TypeOf.Class, create:() => <DaysOfWeek>[]),
    'List<RebateCodeTransaction>': TypeInfo(TypeOf.Class, create:() => <RebateCodeTransaction>[]),
    'List<ServicePriceDayOfWeekRelation>': TypeInfo(TypeOf.Class, create:() => <ServicePriceDayOfWeekRelation>[]),
    'List<ServicePrice>': TypeInfo(TypeOf.Class, create:() => <ServicePrice>[]),
    'List<ResourceType>': TypeInfo(TypeOf.Class, create:() => <ResourceType>[]),
    'ResourceType': TypeInfo(TypeOf.Class, create:() => ResourceType()),
    'List<ISchedule>': TypeInfo(TypeOf.Class, create:() => <ISchedule>[]),
    'List<Booking>': TypeInfo(TypeOf.Class, create:() => <Booking>[]),
    'CustomFieldServiceRelation': TypeInfo(TypeOf.Class, create:() => CustomFieldServiceRelation()),
    'List<CustomFieldValue>': TypeInfo(TypeOf.Class, create:() => <CustomFieldValue>[]),
    'List<CustomFieldServiceRelation>': TypeInfo(TypeOf.Class, create:() => <CustomFieldServiceRelation>[]),
    'List<ITimeException>': TypeInfo(TypeOf.Class, create:() => <ITimeException>[]),
    'List<IBookedTime>': TypeInfo(TypeOf.Class, create:() => <IBookedTime>[]),
    'ResourceTypeQuery': TypeInfo(TypeOf.Class, create:() => ResourceTypeQuery()),
    'List<ResourceTypeQueryResponse>': TypeInfo(TypeOf.Class, create:() => <ResourceTypeQueryResponse>[]),
    'IBokameraPaymentManager<TCreatedCheckoutResponse,TCheckoutResponse,TPaymentResponse>': TypeInfo(TypeOf.Interface),
    'AnyOf': TypeInfo(TypeOf.AbstractClass),
    'AnyOf2<T1,T2>': TypeInfo(TypeOf.Class, create:() => AnyOf2<T1,T2>()),
    'StripeEntity': TypeInfo(TypeOf.AbstractClass),
    'StripeEntity1<T>': TypeInfo(TypeOf.AbstractClass),
    'StripeList<T>': TypeInfo(TypeOf.Class, create:() => StripeList<T>()),
    'ILogger<TCategoryName>': TypeInfo(TypeOf.Interface),
    'AccessKeyTypeResponse': TypeInfo(TypeOf.Class, create:() => AccessKeyTypeResponse()),
    'QueryResponse<AccessKeyTypeResponse>': TypeInfo(TypeOf.Class, create:() => QueryResponse<AccessKeyTypeResponse>()),
});

Dart ResourceTypeQuery DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .json suffix or ?format=json

To embed the response in a jsonp callback, append ?callback=myCallback

HTTP + JSON

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /resourcetypes HTTP/1.1 
Host: testapi.bokamera.se 
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: length

{"Offset":0,"Total":0,"Results":[{"Id":0,"Name":"String","Description":"String","Resources":[{"Id":0,"Name":"String","Active":false,"Description":"String","Email":"String","Phone":"String","Color":"String","Priority":0,"EmailNotification":false,"SMSNotification":false,"EmailReminder":false,"SMSReminder":false}],"Active":false}],"Meta":{"String":"String"},"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}