/* Options:
Date: 2025-03-15 20:10:08
Version: 8.30
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.sanctionssearch.com/v2

//GlobalNamespace: 
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: UpdatePepSearch.*
//ExcludeTypes: 
//DefaultImports: package:servicestack/servicestack.dart,dart:typed_data
*/

import 'package:servicestack/servicestack.dart';
import 'dart:typed_data';

// @DataContract
class Authentication implements IConvertible
{
    /**
    * The API User ID provided by us when you signed up to use our API
    */
    // @DataMember
    // @ApiMember(Description="The API User ID provided by us when you signed up to use our API", IsRequired=true, ParameterType="header, body")
    String? apiUserId;

    /**
    * The API User Key provided by us when you signed up to use our API
    */
    // @DataMember
    // @ApiMember(Description="The API User Key provided by us when you signed up to use our API", IsRequired=true, ParameterType="header, body")
    String? apiUserKey;

    Authentication({this.apiUserId,this.apiUserKey});
    Authentication.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

// @DataContract
class BaseRequest implements IBaseRequest, IConvertible
{
    /**
    * The authentication credentials
    */
    // @DataMember
    // @ApiMember(Description="The authentication credentials", IsRequired=true, ParameterType="header, body")
    Authentication? authentication;

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

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

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

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

abstract class IBaseRequest
{
    Authentication? authentication;
}

class ArrayOfSearchResultId extends ListBase<int> implements IConvertible
{
    final List<int> l = [];
    set length(int newLength) { l.length = newLength; }
    int get length => l.length;
    int operator [](int index) => l[index];
    void operator []=(int index, int value) { l[index] = value; }
    ArrayOfSearchResultId();
    ArrayOfSearchResultId.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

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

class UpdatePepSearchRequest implements IConvertible
{
    int? id;
    bool? clientInResults;
    bool? clientNotInResults;
    ArrayOfSearchResultId? searchResultIds;

    UpdatePepSearchRequest({this.id,this.clientInResults,this.clientNotInResults,this.searchResultIds});
    UpdatePepSearchRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        id = json['id'];
        clientInResults = json['clientInResults'];
        clientNotInResults = json['clientNotInResults'];
        searchResultIds = JsonConverters.fromJson(json['searchResultIds'],'ArrayOfSearchResultId',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'id': id,
        'clientInResults': clientInResults,
        'clientNotInResults': clientNotInResults,
        'searchResultIds': JsonConverters.toJson(searchResultIds,'ArrayOfSearchResultId',context!)
    };

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

class BaseResponse implements IBaseDataResponse, IHasResponseStatus, IConvertible
{
    /**
    * The status of the response
    */
    // @ApiMember(Description="The status of the response")
    ResponseStatus? responseStatus;

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

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

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

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

class UpdatePepSearchData extends BaseResponse implements IConvertible
{
    bool? success;

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

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

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'success': success
    });

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

abstract class IBaseDataResponse
{
    ResponseStatus? responseStatus;
}

abstract class IHasResponseStatus
{
    ResponseStatus? responseStatus;
}

// @DataContract
class UpdatePepSearchResponse implements IConvertible
{
    // @DataMember
    UpdatePepSearchData? data;

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

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

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

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

// @Route("/peps/update", "PUT")
// @DataContract
class UpdatePepSearch extends BaseRequest implements IReturn<UpdatePepSearchResponse>, IConvertible, IPut
{
    // @DataMember
    UpdatePepSearchRequest? request;

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

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

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'request': JsonConverters.toJson(request,'UpdatePepSearchRequest',context!)
    });

    createResponse() => UpdatePepSearchResponse();
    getResponseTypeName() => "UpdatePepSearchResponse";
    getTypeName() => "UpdatePepSearch";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'api.sanctionssearch.com', types: <String, TypeInfo> {
    'Authentication': TypeInfo(TypeOf.Class, create:() => Authentication()),
    'BaseRequest': TypeInfo(TypeOf.Class, create:() => BaseRequest()),
    'IBaseRequest': TypeInfo(TypeOf.Interface),
    'ArrayOfSearchResultId': TypeInfo(TypeOf.Class, create:() => ArrayOfSearchResultId()),
    'UpdatePepSearchRequest': TypeInfo(TypeOf.Class, create:() => UpdatePepSearchRequest()),
    'BaseResponse': TypeInfo(TypeOf.Class, create:() => BaseResponse()),
    'UpdatePepSearchData': TypeInfo(TypeOf.Class, create:() => UpdatePepSearchData()),
    'IBaseDataResponse': TypeInfo(TypeOf.Interface),
    'IHasResponseStatus': TypeInfo(TypeOf.Interface),
    'UpdatePepSearchResponse': TypeInfo(TypeOf.Class, create:() => UpdatePepSearchResponse()),
    'UpdatePepSearch': TypeInfo(TypeOf.Class, create:() => UpdatePepSearch()),
});