Test

<back to all web services

DummyTypes

<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


class HelloResponse implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $result=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['result'])) $this->result = $o['result'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->result)) $o['result'] = $this->result;
        return empty($o) ? new class(){} : $o;
    }
}

class ListResult implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $result=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['result'])) $this->result = $o['result'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->result)) $o['result'] = $this->result;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class CancelRequest implements IPost, IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $tag=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['tag'])) $this->tag = $o['tag'];
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->tag)) $o['tag'] = $this->tag;
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class CancelRequestResponse implements IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $tag=null,

        // @DataMember(Order=2)
        /** @var DateInterval|null */
        public ?DateInterval $elapsed=null,

        // @DataMember(Order=3)
        /** @var array<string,string>|null */
        public ?array $meta=null,

        // @DataMember(Order=4)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['tag'])) $this->tag = $o['tag'];
        if (isset($o['elapsed'])) $this->elapsed = JsonConverters::from('DateInterval', $o['elapsed']);
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->tag)) $o['tag'] = $this->tag;
        if (isset($this->elapsed)) $o['elapsed'] = JsonConverters::to('DateInterval', $this->elapsed);
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class UpdateEventSubscriber implements IPost, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $id=null,

        // @DataMember(Order=2)
        /** @var string[]|null */
        public ?array $subscribeChannels=null,

        // @DataMember(Order=3)
        /** @var string[]|null */
        public ?array $unsubscribeChannels=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['subscribeChannels'])) $this->subscribeChannels = JsonConverters::fromArray('string', $o['subscribeChannels']);
        if (isset($o['unsubscribeChannels'])) $this->unsubscribeChannels = JsonConverters::fromArray('string', $o['unsubscribeChannels']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->subscribeChannels)) $o['subscribeChannels'] = JsonConverters::toArray('string', $this->subscribeChannels);
        if (isset($this->unsubscribeChannels)) $o['unsubscribeChannels'] = JsonConverters::toArray('string', $this->unsubscribeChannels);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class UpdateEventSubscriberResponse implements JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class GetApiKeys implements IGet, IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $environment=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['environment'])) $this->environment = $o['environment'];
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->environment)) $o['environment'] = $this->environment;
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class UserApiKey implements IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $key=null,

        // @DataMember(Order=2)
        /** @var string|null */
        public ?string $keyType=null,

        // @DataMember(Order=3)
        /** @var DateTime|null */
        public ?DateTime $expiryDate=null,

        // @DataMember(Order=4)
        /** @var array<string,string>|null */
        public ?array $meta=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['key'])) $this->key = $o['key'];
        if (isset($o['keyType'])) $this->keyType = $o['keyType'];
        if (isset($o['expiryDate'])) $this->expiryDate = JsonConverters::from('DateTime', $o['expiryDate']);
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->key)) $o['key'] = $this->key;
        if (isset($this->keyType)) $o['keyType'] = $this->keyType;
        if (isset($this->expiryDate)) $o['expiryDate'] = JsonConverters::to('DateTime', $this->expiryDate);
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class GetApiKeysResponse implements IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var array<UserApiKey>|null */
        public ?array $results=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null,

        // @DataMember(Order=3)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['results'])) $this->results = JsonConverters::fromArray('UserApiKey', $o['results']);
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->results)) $o['results'] = JsonConverters::toArray('UserApiKey', $this->results);
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class RegenerateApiKeys implements IPost, IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $environment=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['environment'])) $this->environment = $o['environment'];
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->environment)) $o['environment'] = $this->environment;
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class RegenerateApiKeysResponse implements IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var array<UserApiKey>|null */
        public ?array $results=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null,

        // @DataMember(Order=3)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['results'])) $this->results = JsonConverters::fromArray('UserApiKey', $o['results']);
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->results)) $o['results'] = JsonConverters::toArray('UserApiKey', $this->results);
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class ConvertSessionToToken implements IPost, IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var bool|null */
        public ?bool $preserveSession=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['preserveSession'])) $this->preserveSession = $o['preserveSession'];
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->preserveSession)) $o['preserveSession'] = $this->preserveSession;
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class ConvertSessionToTokenResponse implements IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var array<string,string>|null */
        public ?array $meta=null,

        // @DataMember(Order=2)
        /** @var string|null */
        public ?string $accessToken=null,

        // @DataMember(Order=3)
        /** @var string|null */
        public ?string $refreshToken=null,

        // @DataMember(Order=4)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
        if (isset($o['accessToken'])) $this->accessToken = $o['accessToken'];
        if (isset($o['refreshToken'])) $this->refreshToken = $o['refreshToken'];
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        if (isset($this->accessToken)) $o['accessToken'] = $this->accessToken;
        if (isset($this->refreshToken)) $o['refreshToken'] = $this->refreshToken;
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class GetAccessToken implements IPost, IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $refreshToken=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['refreshToken'])) $this->refreshToken = $o['refreshToken'];
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->refreshToken)) $o['refreshToken'] = $this->refreshToken;
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class GetAccessTokenResponse implements IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $accessToken=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null,

        // @DataMember(Order=3)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['accessToken'])) $this->accessToken = $o['accessToken'];
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->accessToken)) $o['accessToken'] = $this->accessToken;
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

class NavItem implements IMeta, JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $label=null,
        /** @var string|null */
        public ?string $href=null,
        /** @var bool|null */
        public ?bool $exact=null,
        /** @var string|null */
        public ?string $id=null,
        /** @var string|null */
        public ?string $className=null,
        /** @var string|null */
        public ?string $iconClass=null,
        /** @var string|null */
        public ?string $iconSrc=null,
        /** @var string|null */
        public ?string $show=null,
        /** @var string|null */
        public ?string $hide=null,
        /** @var array<NavItem>|null */
        public ?array $children=null,
        /** @var array<string,string>|null */
        public ?array $meta=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['label'])) $this->label = $o['label'];
        if (isset($o['href'])) $this->href = $o['href'];
        if (isset($o['exact'])) $this->exact = $o['exact'];
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['className'])) $this->className = $o['className'];
        if (isset($o['iconClass'])) $this->iconClass = $o['iconClass'];
        if (isset($o['iconSrc'])) $this->iconSrc = $o['iconSrc'];
        if (isset($o['show'])) $this->show = $o['show'];
        if (isset($o['hide'])) $this->hide = $o['hide'];
        if (isset($o['children'])) $this->children = JsonConverters::fromArray('NavItem', $o['children']);
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->label)) $o['label'] = $this->label;
        if (isset($this->href)) $o['href'] = $this->href;
        if (isset($this->exact)) $o['exact'] = $this->exact;
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->className)) $o['className'] = $this->className;
        if (isset($this->iconClass)) $o['iconClass'] = $this->iconClass;
        if (isset($this->iconSrc)) $o['iconSrc'] = $this->iconSrc;
        if (isset($this->show)) $o['show'] = $this->show;
        if (isset($this->hide)) $o['hide'] = $this->hide;
        if (isset($this->children)) $o['children'] = JsonConverters::toArray('NavItem', $this->children);
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class GetNavItems implements JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $name=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['name'])) $this->name = $o['name'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->name)) $o['name'] = $this->name;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class GetNavItemsResponse implements IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $baseUrl=null,

        // @DataMember(Order=2)
        /** @var array<NavItem>|null */
        public ?array $results=null,

        // @DataMember(Order=3)
        /** @var array<string,NavItem[]>|null */
        public ?array $navItemsMap=null,

        // @DataMember(Order=4)
        /** @var array<string,string>|null */
        public ?array $meta=null,

        // @DataMember(Order=5)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['baseUrl'])) $this->baseUrl = $o['baseUrl'];
        if (isset($o['results'])) $this->results = JsonConverters::fromArray('NavItem', $o['results']);
        if (isset($o['navItemsMap'])) $this->navItemsMap = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','List<NavItem>']), $o['navItemsMap']);
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->baseUrl)) $o['baseUrl'] = $this->baseUrl;
        if (isset($this->results)) $o['results'] = JsonConverters::toArray('NavItem', $this->results);
        if (isset($this->navItemsMap)) $o['navItemsMap'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','List<NavItem>']), $this->navItemsMap);
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class EmptyResponse implements JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class IdResponse implements JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $id=null,

        // @DataMember(Order=2)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class StringResponse implements IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var string|null */
        public ?string $result=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null,

        // @DataMember(Order=3)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['result'])) $this->result = $o['result'];
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->result)) $o['result'] = $this->result;
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class StringsResponse implements IMeta, JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var array<string>|null */
        public ?array $results=null,

        // @DataMember(Order=2)
        /** @var array<string,string>|null */
        public ?array $meta=null,

        // @DataMember(Order=3)
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['results'])) $this->results = JsonConverters::fromArray('string', $o['results']);
        if (isset($o['meta'])) $this->meta = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','string']), $o['meta']);
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->results)) $o['results'] = JsonConverters::toArray('string', $this->results);
        if (isset($this->meta)) $o['meta'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','string']), $this->meta);
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class AuditBase implements JsonSerializable
{
    public function __construct(
        // @DataMember(Order=1)
        /** @var DateTime */
        public DateTime $createdDate=new DateTime(),

        // @DataMember(Order=2)
        // @Required()
        /** @var string */
        public string $createdBy='',

        // @DataMember(Order=3)
        /** @var DateTime */
        public DateTime $modifiedDate=new DateTime(),

        // @DataMember(Order=4)
        // @Required()
        /** @var string */
        public string $modifiedBy='',

        // @DataMember(Order=5)
        /** @var DateTime|null */
        public ?DateTime $deletedDate=null,

        // @DataMember(Order=6)
        /** @var string|null */
        public ?string $deletedBy=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['createdDate'])) $this->createdDate = JsonConverters::from('DateTime', $o['createdDate']);
        if (isset($o['createdBy'])) $this->createdBy = $o['createdBy'];
        if (isset($o['modifiedDate'])) $this->modifiedDate = JsonConverters::from('DateTime', $o['modifiedDate']);
        if (isset($o['modifiedBy'])) $this->modifiedBy = $o['modifiedBy'];
        if (isset($o['deletedDate'])) $this->deletedDate = JsonConverters::from('DateTime', $o['deletedDate']);
        if (isset($o['deletedBy'])) $this->deletedBy = $o['deletedBy'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->createdDate)) $o['createdDate'] = JsonConverters::to('DateTime', $this->createdDate);
        if (isset($this->createdBy)) $o['createdBy'] = $this->createdBy;
        if (isset($this->modifiedDate)) $o['modifiedDate'] = JsonConverters::to('DateTime', $this->modifiedDate);
        if (isset($this->modifiedBy)) $o['modifiedBy'] = $this->modifiedBy;
        if (isset($this->deletedDate)) $o['deletedDate'] = JsonConverters::to('DateTime', $this->deletedDate);
        if (isset($this->deletedBy)) $o['deletedBy'] = $this->deletedBy;
        return empty($o) ? new class(){} : $o;
    }
}

class DummyTypes implements JsonSerializable
{
    public function __construct(
        /** @var array<HelloResponse>|null */
        public ?array $helloResponses=null,
        /** @var array<ListResult>|null */
        public ?array $listResult=null,
        /** @var ArrayResult[]|null */
        public ?array $arrayResult=null,
        /** @var CancelRequest|null */
        public ?CancelRequest $cancelRequest=null,
        /** @var CancelRequestResponse|null */
        public ?CancelRequestResponse $cancelRequestResponse=null,
        /** @var UpdateEventSubscriber|null */
        public ?UpdateEventSubscriber $updateEventSubscriber=null,
        /** @var UpdateEventSubscriberResponse|null */
        public ?UpdateEventSubscriberResponse $updateEventSubscriberResponse=null,
        /** @var GetApiKeys|null */
        public ?GetApiKeys $getApiKeys=null,
        /** @var GetApiKeysResponse|null */
        public ?GetApiKeysResponse $getApiKeysResponse=null,
        /** @var RegenerateApiKeys|null */
        public ?RegenerateApiKeys $regenerateApiKeys=null,
        /** @var RegenerateApiKeysResponse|null */
        public ?RegenerateApiKeysResponse $regenerateApiKeysResponse=null,
        /** @var UserApiKey|null */
        public ?UserApiKey $userApiKey=null,
        /** @var ConvertSessionToToken|null */
        public ?ConvertSessionToToken $convertSessionToToken=null,
        /** @var ConvertSessionToTokenResponse|null */
        public ?ConvertSessionToTokenResponse $convertSessionToTokenResponse=null,
        /** @var GetAccessToken|null */
        public ?GetAccessToken $getAccessToken=null,
        /** @var GetAccessTokenResponse|null */
        public ?GetAccessTokenResponse $getAccessTokenResponse=null,
        /** @var NavItem|null */
        public ?NavItem $navItem=null,
        /** @var GetNavItems|null */
        public ?GetNavItems $getNavItems=null,
        /** @var GetNavItemsResponse|null */
        public ?GetNavItemsResponse $getNavItemsResponse=null,
        /** @var EmptyResponse|null */
        public ?EmptyResponse $emptyResponse=null,
        /** @var IdResponse|null */
        public ?IdResponse $idResponse=null,
        /** @var StringResponse|null */
        public ?StringResponse $stringResponse=null,
        /** @var StringsResponse|null */
        public ?StringsResponse $stringsResponse=null,
        /** @var AuditBase|null */
        public ?AuditBase $auditBase=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['helloResponses'])) $this->helloResponses = JsonConverters::fromArray('HelloResponse', $o['helloResponses']);
        if (isset($o['listResult'])) $this->listResult = JsonConverters::fromArray('ListResult', $o['listResult']);
        if (isset($o['arrayResult'])) $this->arrayResult = JsonConverters::fromArray('ArrayResult', $o['arrayResult']);
        if (isset($o['cancelRequest'])) $this->cancelRequest = JsonConverters::from('CancelRequest', $o['cancelRequest']);
        if (isset($o['cancelRequestResponse'])) $this->cancelRequestResponse = JsonConverters::from('CancelRequestResponse', $o['cancelRequestResponse']);
        if (isset($o['updateEventSubscriber'])) $this->updateEventSubscriber = JsonConverters::from('UpdateEventSubscriber', $o['updateEventSubscriber']);
        if (isset($o['updateEventSubscriberResponse'])) $this->updateEventSubscriberResponse = JsonConverters::from('UpdateEventSubscriberResponse', $o['updateEventSubscriberResponse']);
        if (isset($o['getApiKeys'])) $this->getApiKeys = JsonConverters::from('GetApiKeys', $o['getApiKeys']);
        if (isset($o['getApiKeysResponse'])) $this->getApiKeysResponse = JsonConverters::from('GetApiKeysResponse', $o['getApiKeysResponse']);
        if (isset($o['regenerateApiKeys'])) $this->regenerateApiKeys = JsonConverters::from('RegenerateApiKeys', $o['regenerateApiKeys']);
        if (isset($o['regenerateApiKeysResponse'])) $this->regenerateApiKeysResponse = JsonConverters::from('RegenerateApiKeysResponse', $o['regenerateApiKeysResponse']);
        if (isset($o['userApiKey'])) $this->userApiKey = JsonConverters::from('UserApiKey', $o['userApiKey']);
        if (isset($o['convertSessionToToken'])) $this->convertSessionToToken = JsonConverters::from('ConvertSessionToToken', $o['convertSessionToToken']);
        if (isset($o['convertSessionToTokenResponse'])) $this->convertSessionToTokenResponse = JsonConverters::from('ConvertSessionToTokenResponse', $o['convertSessionToTokenResponse']);
        if (isset($o['getAccessToken'])) $this->getAccessToken = JsonConverters::from('GetAccessToken', $o['getAccessToken']);
        if (isset($o['getAccessTokenResponse'])) $this->getAccessTokenResponse = JsonConverters::from('GetAccessTokenResponse', $o['getAccessTokenResponse']);
        if (isset($o['navItem'])) $this->navItem = JsonConverters::from('NavItem', $o['navItem']);
        if (isset($o['getNavItems'])) $this->getNavItems = JsonConverters::from('GetNavItems', $o['getNavItems']);
        if (isset($o['getNavItemsResponse'])) $this->getNavItemsResponse = JsonConverters::from('GetNavItemsResponse', $o['getNavItemsResponse']);
        if (isset($o['emptyResponse'])) $this->emptyResponse = JsonConverters::from('EmptyResponse', $o['emptyResponse']);
        if (isset($o['idResponse'])) $this->idResponse = JsonConverters::from('IdResponse', $o['idResponse']);
        if (isset($o['stringResponse'])) $this->stringResponse = JsonConverters::from('StringResponse', $o['stringResponse']);
        if (isset($o['stringsResponse'])) $this->stringsResponse = JsonConverters::from('StringsResponse', $o['stringsResponse']);
        if (isset($o['auditBase'])) $this->auditBase = JsonConverters::from('AuditBase', $o['auditBase']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->helloResponses)) $o['helloResponses'] = JsonConverters::toArray('HelloResponse', $this->helloResponses);
        if (isset($this->listResult)) $o['listResult'] = JsonConverters::toArray('ListResult', $this->listResult);
        if (isset($this->arrayResult)) $o['arrayResult'] = JsonConverters::toArray('ArrayResult', $this->arrayResult);
        if (isset($this->cancelRequest)) $o['cancelRequest'] = JsonConverters::to('CancelRequest', $this->cancelRequest);
        if (isset($this->cancelRequestResponse)) $o['cancelRequestResponse'] = JsonConverters::to('CancelRequestResponse', $this->cancelRequestResponse);
        if (isset($this->updateEventSubscriber)) $o['updateEventSubscriber'] = JsonConverters::to('UpdateEventSubscriber', $this->updateEventSubscriber);
        if (isset($this->updateEventSubscriberResponse)) $o['updateEventSubscriberResponse'] = JsonConverters::to('UpdateEventSubscriberResponse', $this->updateEventSubscriberResponse);
        if (isset($this->getApiKeys)) $o['getApiKeys'] = JsonConverters::to('GetApiKeys', $this->getApiKeys);
        if (isset($this->getApiKeysResponse)) $o['getApiKeysResponse'] = JsonConverters::to('GetApiKeysResponse', $this->getApiKeysResponse);
        if (isset($this->regenerateApiKeys)) $o['regenerateApiKeys'] = JsonConverters::to('RegenerateApiKeys', $this->regenerateApiKeys);
        if (isset($this->regenerateApiKeysResponse)) $o['regenerateApiKeysResponse'] = JsonConverters::to('RegenerateApiKeysResponse', $this->regenerateApiKeysResponse);
        if (isset($this->userApiKey)) $o['userApiKey'] = JsonConverters::to('UserApiKey', $this->userApiKey);
        if (isset($this->convertSessionToToken)) $o['convertSessionToToken'] = JsonConverters::to('ConvertSessionToToken', $this->convertSessionToToken);
        if (isset($this->convertSessionToTokenResponse)) $o['convertSessionToTokenResponse'] = JsonConverters::to('ConvertSessionToTokenResponse', $this->convertSessionToTokenResponse);
        if (isset($this->getAccessToken)) $o['getAccessToken'] = JsonConverters::to('GetAccessToken', $this->getAccessToken);
        if (isset($this->getAccessTokenResponse)) $o['getAccessTokenResponse'] = JsonConverters::to('GetAccessTokenResponse', $this->getAccessTokenResponse);
        if (isset($this->navItem)) $o['navItem'] = JsonConverters::to('NavItem', $this->navItem);
        if (isset($this->getNavItems)) $o['getNavItems'] = JsonConverters::to('GetNavItems', $this->getNavItems);
        if (isset($this->getNavItemsResponse)) $o['getNavItemsResponse'] = JsonConverters::to('GetNavItemsResponse', $this->getNavItemsResponse);
        if (isset($this->emptyResponse)) $o['emptyResponse'] = JsonConverters::to('EmptyResponse', $this->emptyResponse);
        if (isset($this->idResponse)) $o['idResponse'] = JsonConverters::to('IdResponse', $this->idResponse);
        if (isset($this->stringResponse)) $o['stringResponse'] = JsonConverters::to('StringResponse', $this->stringResponse);
        if (isset($this->stringsResponse)) $o['stringsResponse'] = JsonConverters::to('StringsResponse', $this->stringsResponse);
        if (isset($this->auditBase)) $o['auditBase'] = JsonConverters::to('AuditBase', $this->auditBase);
        return empty($o) ? new class(){} : $o;
    }
}

class ArrayResult implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $result=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['result'])) $this->result = $o['result'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->result)) $o['result'] = $this->result;
        return empty($o) ? new class(){} : $o;
    }
}

PHP DummyTypes 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.

POST /json/oneway/DummyTypes HTTP/1.1 
Host: test.servicestack.net 
Accept: application/json
Content-Type: application/json
Content-Length: length

{"helloResponses":[{"result":"String"}],"listResult":[{"result":"String"}],"arrayResult":[{"result":"String"}],"cancelRequest":{"tag":"String","meta":{"String":"String"}},"cancelRequestResponse":{"tag":"String","elapsed":"PT0S","meta":{"String":"String"},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"updateEventSubscriber":{"id":"String","subscribeChannels":["String"],"unsubscribeChannels":["String"]},"updateEventSubscriberResponse":{"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"getApiKeys":{"environment":"String","meta":{"String":"String"}},"getApiKeysResponse":{"results":[{"key":"String","keyType":"String","expiryDate":"\/Date(-62135596800000-0000)\/","meta":{"String":"String"}}],"meta":{"String":"String"},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"regenerateApiKeys":{"environment":"String","meta":{"String":"String"}},"regenerateApiKeysResponse":{"results":[{"key":"String","keyType":"String","expiryDate":"\/Date(-62135596800000-0000)\/","meta":{"String":"String"}}],"meta":{"String":"String"},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"userApiKey":{"key":"String","keyType":"String","expiryDate":"\/Date(-62135596800000-0000)\/","meta":{"String":"String"}},"convertSessionToToken":{"preserveSession":false,"meta":{"String":"String"}},"convertSessionToTokenResponse":{"meta":{"String":"String"},"accessToken":"String","refreshToken":"String","responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"getAccessToken":{"refreshToken":"String","meta":{"String":"String"}},"getAccessTokenResponse":{"accessToken":"String","meta":{"String":"String"},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"navItem":{"label":"String","href":"String","exact":false,"id":"String","className":"String","iconClass":"String","iconSrc":"String","show":"String","hide":"String","children":[{"label":"String","href":"String","exact":false,"id":"String","className":"String","iconClass":"String","iconSrc":"String","show":"String","hide":"String","children":[{"label":"String","href":"String","exact":false,"id":"String","className":"String","iconClass":"String","iconSrc":"String","show":"String","hide":"String","children":[{}],"meta":{"String":"String"}}],"meta":{"String":"String"}}],"meta":{"String":"String"}},"getNavItems":{"name":"String"},"getNavItemsResponse":{"baseUrl":"String","results":[{"label":"String","href":"String","exact":false,"id":"String","className":"String","iconClass":"String","iconSrc":"String","show":"String","hide":"String","children":[{"label":"String","href":"String","exact":false,"id":"String","className":"String","iconClass":"String","iconSrc":"String","show":"String","hide":"String","children":[{"label":"String","href":"String","exact":false,"id":"String","className":"String","iconClass":"String","iconSrc":"String","show":"String","hide":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}],"meta":{"String":"String"}}],"navItemsMap":{"String":[{"label":"String","href":"String","exact":false,"id":"String","className":"String","iconClass":"String","iconSrc":"String","show":"String","hide":"String","children":[{"label":"String","href":"String","exact":false,"id":"String","className":"String","iconClass":"String","iconSrc":"String","show":"String","hide":"String","children":[{"label":"String","href":"String","exact":false,"id":"String","className":"String","iconClass":"String","iconSrc":"String","show":"String","hide":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}],"meta":{"String":"String"}}]},"meta":{"String":"String"},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"emptyResponse":{"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"idResponse":{"id":"String","responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"stringResponse":{"result":"String","meta":{"String":"String"},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}},"stringsResponse":{"results":["String"],"meta":{"String":"String"},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}}}