Repository: modiimedia/arri (language: rust)

Issue:
bug: `modelPrefix` causes dart codegen to output invalid subclasses of sealed classes
**Describe the bug**

This affects the dart code generator's ability to generate tagged unions / discriminated unions when using the `modelPrefix` option

Given the following arri config:

```ts
export default defineConfig({
    generators: [
        generators.dartClient({
            clientName: "MyClient",
            outputFile: "my_client.g.dart",
            modelPrefix: "MyPrefix",
        }),
    ],
});
```

And the following schema:

```ts
export const Shape = a.discriminator("Shape", "type", {
    RECTANGLE: a.object("Rectangle", {
        width: a.float64(),
        height: a.float64(),
    }),
    CIRCLE: a.object("Circle", {
        radius: a.float64(),
    }),
});
```

The code generator will output something akin to the following when encountering a discriminator schema

```dart
sealed class MyPrefixShape implements ArriModel {}

class MyPrefixRectangle implements Shape {} // shape doesn't exist

class MyPrefixCircle implements Shape {} // shape doesn't exist
```

**Additional context**

<!-- Add any other context about the problem here. -->




Discussion / hints:

Fix patch:
diff --git a/.gitignore b/.gitignore
index aa370285..a7fcce21 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,4 +58,7 @@ build
 **/.idea
 
 # swift builds
-**/.build
\ No newline at end of file
+**/.build
+
+# kotlin builds
+**/.kotlin
\ No newline at end of file
diff --git a/languages/dart/dart-codegen/src/_index.ts b/languages/dart/dart-codegen/src/_index.ts
index 985efd1e..24f3af95 100644
--- a/languages/dart/dart-codegen/src/_index.ts
+++ b/languages/dart/dart-codegen/src/_index.ts
@@ -48,7 +48,10 @@ import { dartRefFromSchema } from './ref';
 export interface DartClientGeneratorOptions {
     outputFile: string;
     clientName?: string;
-    modelPrefix?: string;
+    /**
+     * Add a prefix to the generated class names
+     */
+    typePrefix?: string;
     format?: boolean;
 }
 
@@ -84,7 +87,7 @@ export function createDartClient(
     const typeParts: string[] = [];
     const context: CodegenContext = {
         clientName: options.clientName ?? 'Client',
-        modelPrefix: options.modelPrefix ?? '',
+        modelPrefix: options.typePrefix ?? '',
         generatedTypes: [],
         instancePath: '',
         schemaPath: '',
diff --git a/languages/dart/dart-codegen/src/object.ts b/languages/dart/dart-codegen/src/object.ts
index ccb7351c..315628bc 100644
--- a/languages/dart/dart-codegen/src/object.ts
+++ b/languages/dart/dart-codegen/src/object.ts
@@ -166,7 +166,7 @@ export function dartClassFromSchema(
 `;
     }
 
-    result.content = `${getCodeComments(schema.metadata)}class ${finalClassName} implements ${context.discriminatorParentId ?? 'ArriModel'} {
+    result.content = `${getCodeComments(schema.metadata)}class ${finalClassName} implements ${context.discriminatorParentId ? `${context.modelPrefix}${context.discriminatorParentId}` : 'ArriModel'} {
 ${fieldParts.join('\n')}
   const ${finalClassName}({
 ${constructorParts.join('\n')}
diff --git a/languages/kotlin/kotlin-codegen-reference/src/main/kotlin/ExampleClient.kt b/languages/kotlin/kotlin-codegen-reference/src/main/kotlin/ExampleClient.kt
index 8976efd6..b533b1a7 100644
--- a/languages/kotlin/kotlin-codegen-reference/src/main/kotlin/ExampleClient.kt
+++ b/languages/kotlin/kotlin-codegen-reference/src/main/kotlin/ExampleClient.kt
@@ -30,13 +30,12 @@ private val JsonInstance = Json {
     encodeDefaults = true
     ignoreUnknownKeys = true
 }
-private typealias headersFn = (() -> MutableMap<String, String>?)?
-
+private typealias __ExampleClientHeadersFn = (() -> MutableMap<String, String>?)?
 
 class ExampleClient(
     private val httpClient: HttpClient,
     private val baseUrl: String,
-    private val headers: headersFn,
+    private val headers: __ExampleClientHeadersFn,
     private val onError: ((err: Exception) -> Unit) = {},
 ) {
     suspend fun sendObject(params: NestedObject): NestedObject {
@@ -77,7 +76,7 @@ class ExampleClient(
 class ExampleClientBooksService(
     private val httpClient: HttpClient,
     private val baseUrl: String,
-    private val headers: headersFn,
+    private val headers: __ExampleClientHeadersFn,
     private val onError: ((err: Exception) -> Unit) = {},
 ) {
     /**
@@ -1808,7 +1807,7 @@ data class RecursiveObject(
 }
 
 // Implementation copied from https://github.com/Kotlin/kotlinx.serialization/blob/d0ae697b9394103879e6c7f836d0f7cf128f4b1e/formats/json/commonMain/src/kotlinx/serialization/json/internal/StringOps.kt#L45
-internal const val STRING = '"'
+private const val STRING = '"'
 
 private fun toHexChar(i: Int): Char {
     val d = i and 0xf
@@ -1816,7 +1815,7 @@ private fun toHexChar(i: Int): Char {
     else (d - 10 + 'a'.code).toChar()
 }
 
-internal val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
+private val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
     for (c in 0..0x1f) {
         val c1 = toHexChar(c shr 12)
         val c2 = toHexChar(c shr 8)
@@ -1833,7 +1832,7 @@ internal val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
     this[0x0c] = "\\f"
 }
 
-internal val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
+private val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
     for (c in 0..0x1f) {
         this[c] = 1.toByte()
     }
@@ -1846,7 +1845,7 @@ internal val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
     this[0x0c] = 'f'.code.toByte()
 }
 
-internal fun StringBuilder.printQuoted(value: String) {
+private fun StringBuilder.printQuoted(value: String) {
     append(STRING)
     var lastPos = 0
     for (i in value.indices) {
@@ -1904,7 +1903,7 @@ private suspend fun __prepareRequest(
 }
 
 // SSE_FN_START
-private enum class SseEventLineType {
+private enum class __ExampleClientSseEventLineType {
     Id,
     Event,
     Data,
@@ -1912,36 +1911,36 @@ private enum class SseEventLineType {
     None,
 }
 
-private fun __parseSseEventLine(line: String): Pair<SseEventLineType, String> {
+private fun __parseSseEventLine(line: String): Pair<__ExampleClientSseEventLineType, String> {
     if (line.startsWith("id:")) {
-        return Pair(SseEventLineType.Id, line.substring(3).trim())
+        return Pair(__ExampleClientSseEventLineType.Id, line.substring(3).trim())
     }
     if (line.startsWith("event:")) {
-        return Pair(SseEventLineType.Event, line.substring(6).trim())
+        return Pair(__ExampleClientSseEventLineType.Event, line.substring(6).trim())
     }
     if (line.startsWith("data:")) {
-        return Pair(SseEventLineType.Data, line.substring(5).trim())
+        return Pair(__ExampleClientSseEventLineType.Data, line.substring(5).trim())
     }
     if (line.startsWith("retry:")) {
-        return Pair(SseEventLineType.Retry, line.substring(6).trim())
+        return Pair(__ExampleClientSseEventLineType.Retry, line.substring(6).trim())
     }
-    return Pair(SseEventLineType.None, "")
+    return Pair(__ExampleClientSseEventLineType.None, "")
 }
 
-private data class __SseEvent(
+private data class __ExampleClientSseEvent(
     val id: String? = null,
     val event: String,
     val data: String,
     val retry: Int? = null
 )
 
-private class __SseEventParsingResult(val events: List<__SseEvent>, val leftover: String)
+private class __ExampleClientSseEventParsingResult(val events: List<__ExampleClientSseEvent>, val leftover: String)
 
-private fun __parseSseEvents(input: String): __SseEventParsingResult {
-    val events = mutableListOf<__SseEvent>()
+private fun __parseSseEvents(input: String): __ExampleClientSseEventParsingResult {
+    val events = mutableListOf<__ExampleClientSseEvent>()
     val lines = input.lines()
     if (lines.isEmpty()) {
-        return __SseEventParsingResult(events = listOf(), leftover = "")
+        return __ExampleClientSseEventParsingResult(events = listOf(), leftover = "")
     }
     var id: String? = null
     var event: String? = null
@@ -1952,18 +1951,18 @@ private fun __parseSseEvents(input: String): __SseEventParsingResult {
         if (line.isNotEmpty()) {
             val (type, value) = __parseSseEventLine(line)
             when (type) {
-                SseEventLineType.Id -> id = value
-                SseEventLineType.Event -> event = value
-                SseEventLineType.Data -> data = value
-                SseEventLineType.Retry -> retry = value.toInt()
-                SseEventLineType.None -> {}
+                __ExampleClientSseEventLineType.Id -> id = value
+                __ExampleClientSseEventLineType.Event -> event = value
+                __ExampleClientSseEventLineType.Data -> data = value
+                __ExampleClientSseEventLineType.Retry -> retry = value.toInt()
+                __ExampleClientSseEventLineType.None -> {}
             }
         }
         val isEnd = line == ""
         if (isEnd) {
             if (data != null) {
                 events.add(
-                    __SseEvent(
+                    __ExampleClientSseEvent(
                         id = id,
                         event = event ?: "message",
                         data = data!!,
@@ -1978,7 +1977,7 @@ private fun __parseSseEvents(input: String): __SseEventParsingResult {
             lastIndex = if (index + 1 < lines.size) index + 1 else null
         }
     }
-    return __SseEventParsingResult(
+    return __ExampleClientSseEventParsingResult(
         events = events,
         leftover = if (lastIndex != null) lines.subList(lastIndex!!, lines.size).joinToString(separator = "\n") else ""
     )
@@ -1991,7 +1990,7 @@ private suspend fun __handleSseRequest(
     url: String,
     method: HttpMethod,
     params: ExampleClientModel?,
-    headers: headersFn,
+    headers: __ExampleClientHeadersFn,
     backoffTime: Long,
     maxBackoffTime: Long,
     lastEventId: String?,
diff --git a/languages/kotlin/kotlin-codegen/src/_index.ts b/languages/kotlin/kotlin-codegen/src/_index.ts
index 95e56f44..0b37d7b5 100644
--- a/languages/kotlin/kotlin-codegen/src/_index.ts
+++ b/languages/kotlin/kotlin-codegen/src/_index.ts
@@ -146,7 +146,7 @@ ${getUtilityFunctions(clientName)}`;
 class ${clientName}(
     private val httpClient: HttpClient,
     private val baseUrl: String,
-    private val headers: headersFn,
+    private val headers: __${clientName}HeadersFn,
     private val onError: ((err: Exception) -> Unit) = {},
 ) {
     ${procedureParts.join('\n\n    ')}
@@ -331,7 +331,7 @@ data class ${clientName}Error(
 
 function getUtilityFunctions(clientName: string): string {
     return `// Implementation copied from https://github.com/Kotlin/kotlinx.serialization/blob/d0ae697b9394103879e6c7f836d0f7cf128f4b1e/formats/json/commonMain/src/kotlinx/serialization/json/internal/StringOps.kt#L45
-internal const val STRING = '"'
+private const val STRING = '"'
 
 private fun toHexChar(i: Int): Char {
     val d = i and 0xf
@@ -339,7 +339,7 @@ private fun toHexChar(i: Int): Char {
     else (d - 10 + 'a'.code).toChar()
 }
 
-internal val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
+private val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
     for (c in 0..0x1f) {
         val c1 = toHexChar(c shr 12)
         val c2 = toHexChar(c shr 8)
@@ -356,7 +356,7 @@ internal val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
     this[0x0c] = "\\\\f"
 }
 
-internal val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
+private val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
     for (c in 0..0x1f) {
         this[c] = 1.toByte()
     }
@@ -369,7 +369,7 @@ internal val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
     this[0x0c] = 'f'.code.toByte()
 }
 
-internal fun StringBuilder.printQuoted(value: String) {
+private fun StringBuilder.printQuoted(value: String) {
     append(STRING)
     var lastPos = 0
     for (i in value.indices) {
@@ -427,7 +427,7 @@ private suspend fun __prepareRequest(
 }
 
 // SSE_FN_START
-private enum class SseEventLineType {
+private enum class __${clientName}SseEventLineType {
     Id,
     Event,
     Data,
@@ -435,36 +435,36 @@ private enum class SseEventLineType {
     None,
 }
 
-private fun __parseSseEventLine(line: String): Pair<SseEventLineType, String> {
+private fun __parseSseEventLine(line: String): Pair<__${clientName}SseEventLineType, String> {
     if (line.startsWith("id:")) {
-        return Pair(SseEventLineType.Id, line.substring(3).trim())
+        return Pair(__${clientName}SseEventLineType.Id, line.substring(3).trim())
     }
     if (line.startsWith("event:")) {
-        return Pair(SseEventLineType.Event, line.substring(6).trim())
+        return Pair(__${clientName}SseEventLineType.Event, line.substring(6).trim())
     }
     if (line.startsWith("data:")) {
-        return Pair(SseEventLineType.Data, line.substring(5).trim())
+        return Pair(__${clientName}SseEventLineType.Data, line.substring(5).trim())
     }
     if (line.startsWith("retry:")) {
-        return Pair(SseEventLineType.Retry, line.substring(6).trim())
+        return Pair(__${clientName}SseEventLineType.Retry, line.substring(6).trim())
     }
-    return Pair(SseEventLineType.None, "")
+    return Pair(__${clientName}SseEventLineType.None, "")
 }
 
-private data class __SseEvent(
+private data class __${clientName}SseEvent(
     val id: String? = null,
     val event: String,
     val data: String,
     val retry: Int? = null
 )
 
-private class __SseEventParsingResult(val events: List<__SseEvent>, val leftover: String)
+private class __${clientName}SseEventParsingResult(val events: List<__${clientName}SseEvent>, val leftover: String)
 
-private fun __parseSseEvents(input: String): __SseEventParsingResult {
-    val events = mutableListOf<__SseEvent>()
+private fun __parseSseEvents(input: String): __${clientName}SseEventParsingResult {
+    val events = mutableListOf<__${clientName}SseEvent>()
     val lines = input.lines()
     if (lines.isEmpty()) {
-        return __SseEventParsingResult(events = listOf(), leftover = "")
+        return __${clientName}SseEventParsingResult(events = listOf(), leftover = "")
     }
     var id: String? = null
     var event: String? = null
@@ -475,18 +475,18 @@ private fun __parseSseEvents(input: String): __SseEventParsingResult {
         if (line.isNotEmpty()) {
             val (type, value) = __parseSseEventLine(line)
             when (type) {
-                SseEventLineType.Id -> id = value
-                SseEventLineType.Event -> event = value
-                SseEventLineType.Data -> data = value
-                SseEventLineType.Retry -> retry = value.toInt()
-                SseEventLineType.None -> {}
+                __${clientName}SseEventLineType.Id -> id = value
+                __${clientName}SseEventLineType.Event -> event = value
+                __${clientName}SseEventLineType.Data -> data = value
+                __${clientName}SseEventLineType.Retry -> retry = value.toInt()
+                __${clientName}SseEventLineType.None -> {}
             }
         }
         val isEnd = line == ""
         if (isEnd) {
             if (data != null) {
                 events.add(
-                    __SseEvent(
+                    __${clientName}SseEvent(
                         id = id,
                         event = event ?: "message",
                         data = data!!,
@@ -501,7 +501,7 @@ private fun __parseSseEvents(input: String): __SseEventParsingResult {
             lastIndex = if (index + 1 < lines.size) index + 1 else null
         }
     }
-    return __SseEventParsingResult(
+    return __${clientName}SseEventParsingResult(
         events = events,
         leftover = if (lastIndex != null) lines.subList(lastIndex!!, lines.size).joinToString(separator = "\\n") else ""
     )
@@ -513,7 +513,7 @@ private suspend fun __handleSseRequest(
     url: String,
     method: HttpMethod,
     params: ${clientName}Model?,
-    headers: headersFn,
+    headers: __${clientName}HeadersFn,
     backoffTime: Long,
     maxBackoffTime: Long,
     lastEventId: String?,
@@ -759,5 +759,5 @@ private val JsonInstance = Json {
     encodeDefaults = true
     ignoreUnknownKeys = true
 }
-private typealias headersFn = (() -> MutableMap<String, String>?)?`;
+private typealias __${options.clientName}HeadersFn = (() -> MutableMap<String, String>?)?`;
 }
diff --git a/languages/kotlin/kotlin-codegen/src/procedures.ts b/languages/kotlin/kotlin-codegen/src/procedures.ts
index 1cf6ba01..f1499672 100644
--- a/languages/kotlin/kotlin-codegen/src/procedures.ts
+++ b/languages/kotlin/kotlin-codegen/src/procedures.ts
@@ -169,7 +169,7 @@ export function kotlinServiceFromSchema(
         content: `class ${name}(
     private val httpClient: HttpClient,
     private val baseUrl: String,
-    private val headers: headersFn,
+    private val headers: __${context.clientName}HeadersFn,
     private val onError: ((err: Exception) -> Unit) = {},
 ) {
     ${procedureParts.join('\n\n    ')}
diff --git a/languages/rust/rust-codegen/src/procedures.ts b/languages/rust/rust-codegen/src/procedures.ts
index e60c0def..6b7956d9 100644
--- a/languages/rust/rust-codegen/src/procedures.ts
+++ b/languages/rust/rust-codegen/src/procedures.ts
@@ -45,19 +45,22 @@ export function rustHttpRpcFromSchema(
     if (schema.isDeprecated) {
         leading += '#[deprecated]\n';
     }
-    const params = schema.params ? validRustName(schema.params) : undefined;
+    const params = schema.params
+        ? context.typeNamePrefix + validRustName(schema.params)
+        : undefined;
     const response = schema.response
-        ? validRustName(schema.response)
+        ? context.typeNamePrefix + validRustName(schema.response)
         : undefined;
+
     if (schema.isEventStream) {
         return `${leading}pub async fn ${functionName}<OnEvent>(
             &self,
-            ${params ? `params: ${context.typeNamePrefix}${params},` : ''}
+            ${params ? `params: ${params},` : ''}
             on_event: &mut OnEvent,
             max_retry_count: Option<u64>,
             max_retry_interval: Option<u64>,
         ) where
-            OnEvent: FnMut(SseEvent<${response ? `${context.typeNamePrefix}${response}` : 'EmptyArriModel'}>, &mut SseController) + std::marker::Send + std::marker::Sync,
+            OnEvent: FnMut(SseEvent<${response ? response : 'EmptyArriModel'}>, &mut SseController) + std::marker::Send + std::marker::Sync,
         {
             parsed_arri_sse_request(
                 ArriParsedSseRequestOptions {
@@ -77,8 +80,8 @@ export function rustHttpRpcFromSchema(
     }
     return `${leading}pub async fn ${functionName}(
         &self,
-        ${params ? `params: ${context.typeNamePrefix}${params},` : ''}
-    ) -> Result<${context.typeNamePrefix}${response ?? '()'}, ArriError> {
+        ${params ? `params: ${params},` : ''}
+    ) -> Result<${response ?? '()'}, ArriError> {
         parsed_arri_request(
             ArriParsedRequestOptions {
                 http_client: &self._config.http_client,
@@ -88,7 +91,7 @@ export function rustHttpRpcFromSchema(
                 client_version: "${context.clientVersion}".to_string(),
             },
             ${params ? `Some(params)` : 'None::<EmptyArriModel>'},
-            |body| ${response ? `return ${context.typeNamePrefix}${response}::from_json_string(body)` : '{}'},
+            |body| ${response ? `return ${response}::from_json_string(body)` : '{}'},
         )
         .await
     }`;
diff --git a/languages/swift/swift-codegen/src/enum.ts b/languages/swift/swift-codegen/src/enum.ts
index 8e8829ff..ba00b55c 100644
--- a/languages/swift/swift-codegen/src/enum.ts
+++ b/languages/swift/swift-codegen/src/enum.ts
@@ -24,7 +24,7 @@ export function swiftEnumFromSchema(
         ? ''
         : `${prefixedTypeName}.${defaultEnumValue}`;
     const result: SwiftProperty = {
-        typeName: isNullable ? `${typeName}?` : typeName,
+        typeName: isNullable ? `${prefixedTypeName}?` : prefixedTypeName,
         isNullable,
         defaultValue,
         canBeQueryString: true,


Test patch:
diff --git a/languages/kotlin/kotlin-codegen-reference/src/test/kotlin/SseEventTests.kt b/languages/kotlin/kotlin-codegen-reference/src/test/kotlin/SseEventTests.kt
index 8703e5d8..67dc3e73 100644
--- a/languages/kotlin/kotlin-codegen-reference/src/test/kotlin/SseEventTests.kt
+++ b/languages/kotlin/kotlin-codegen-reference/src/test/kotlin/SseEventTests.kt
@@ -2,7 +2,7 @@ import kotlin.test.Test
 import kotlin.test.assertEquals
 
 // SSE_FN_START
-private enum class SseEventLineType {
+private enum class __ExampleClientSseEventLineType {
     Id,
     Event,
     Data,
@@ -10,36 +10,36 @@ private enum class SseEventLineType {
     None,
 }
 
-private fun __parseSseEventLine(line: String): Pair<SseEventLineType, String> {
+private fun __parseSseEventLine(line: String): Pair<__ExampleClientSseEventLineType, String> {
     if (line.startsWith("id:")) {
-        return Pair(SseEventLineType.Id, line.substring(3).trim())
+        return Pair(__ExampleClientSseEventLineType.Id, line.substring(3).trim())
     }
     if (line.startsWith("event:")) {
-        return Pair(SseEventLineType.Event, line.substring(6).trim())
+        return Pair(__ExampleClientSseEventLineType.Event, line.substring(6).trim())
     }
     if (line.startsWith("data:")) {
-        return Pair(SseEventLineType.Data, line.substring(5).trim())
+        return Pair(__ExampleClientSseEventLineType.Data, line.substring(5).trim())
     }
     if (line.startsWith("retry:")) {
-        return Pair(SseEventLineType.Retry, line.substring(6).trim())
+        return Pair(__ExampleClientSseEventLineType.Retry, line.substring(6).trim())
     }
-    return Pair(SseEventLineType.None, "")
+    return Pair(__ExampleClientSseEventLineType.None, "")
 }
 
-private data class __SseEvent(
+private data class __ExampleClientSseEvent(
     val id: String? = null,
     val event: String,
     val data: String,
     val retry: Int? = null
 )
 
-private class __SseEventParsingResult(val events: List<__SseEvent>, val leftover: String)
+private class __ExampleClientSseEventParsingResult(val events: List<__ExampleClientSseEvent>, val leftover: String)
 
-private fun __parseSseEvents(input: String): __SseEventParsingResult {
-    val events = mutableListOf<__SseEvent>()
+private fun __parseSseEvents(input: String): __ExampleClientSseEventParsingResult {
+    val events = mutableListOf<__ExampleClientSseEvent>()
     val lines = input.lines()
     if (lines.isEmpty()) {
-        return __SseEventParsingResult(events = listOf(), leftover = "")
+        return __ExampleClientSseEventParsingResult(events = listOf(), leftover = "")
     }
     var id: String? = null
     var event: String? = null
@@ -50,18 +50,18 @@ private fun __parseSseEvents(input: String): __SseEventParsingResult {
         if (line.isNotEmpty()) {
             val (type, value) = __parseSseEventLine(line)
             when (type) {
-                SseEventLineType.Id -> id = value
-                SseEventLineType.Event -> event = value
-                SseEventLineType.Data -> data = value
-                SseEventLineType.Retry -> retry = value.toInt()
-                SseEventLineType.None -> {}
+                __ExampleClientSseEventLineType.Id -> id = value
+                __ExampleClientSseEventLineType.Event -> event = value
+                __ExampleClientSseEventLineType.Data -> data = value
+                __ExampleClientSseEventLineType.Retry -> retry = value.toInt()
+                __ExampleClientSseEventLineType.None -> {}
             }
         }
         val isEnd = line == ""
         if (isEnd) {
             if (data != null) {
                 events.add(
-                    __SseEvent(
+                    __ExampleClientSseEvent(
                         id = id,
                         event = event ?: "message",
                         data = data!!,
@@ -76,7 +76,7 @@ private fun __parseSseEvents(input: String): __SseEventParsingResult {
             lastIndex = if (index + 1 < lines.size) index + 1 else null
         }
     }
-    return __SseEventParsingResult(
+    return __ExampleClientSseEventParsingResult(
         events = events,
         leftover = if (lastIndex != null) lines.subList(lastIndex!!, lines.size).joinToString(separator = "\n") else ""
     )
@@ -90,25 +90,25 @@ class SseEventTests {
         val idInputs = listOf("id:1", "id: 1")
         idInputs.forEach {
             val (type, value) = __parseSseEventLine(it)
-            assertEquals(type, SseEventLineType.Id)
+            assertEquals(type, __ExampleClientSseEventLineType.Id)
             assertEquals(value, "1")
         }
         val eventInputs = listOf("event:foo", "event: foo")
         eventInputs.forEach {
             val (type, value) = __parseSseEventLine(it)
-            assertEquals(type, SseEventLineType.Event)
+            assertEquals(type, __ExampleClientSseEventLineType.Event)
             assertEquals(value, "foo")
         }
         val dataInputs = listOf("data:foo", "data: foo")
         dataInputs.forEach {
             val (type, value) = __parseSseEventLine(it)
-            assertEquals(type, SseEventLineType.Data)
+            assertEquals(type, __ExampleClientSseEventLineType.Data)
             assertEquals(value, "foo")
         }
         val retryInputs = listOf("retry:150", "retry: 150")
         retryInputs.forEach {
             val (type, value) = __parseSseEventLine(it)
-            assertEquals(type, SseEventLineType.Retry)
+            assertEquals(type, __ExampleClientSseEventLineType.Retry)
             assertEquals(value, "150")
         }
     }
@@ -130,9 +130,9 @@ class SseEventTests {
             "data: hello world"
         )
         val expectedOutput = listOf(
-            __SseEvent(id = "1", event = "message", data = "hello world"),
-            __SseEvent(event = "message", data = "hello world"),
-            __SseEvent(id = "2", event = "foo", data = "hello world", retry = 150)
+            __ExampleClientSseEvent(id = "1", event = "message", data = "hello world"),
+            __ExampleClientSseEvent(event = "message", data = "hello world"),
+            __ExampleClientSseEvent(id = "2", event = "foo", data = "hello world", retry = 150)
         )
         val expectedLeftover = "id: 3\ndata: hello world"
 
@@ -165,7 +165,7 @@ class SseEventTests {
             "id: 1",
             "data: {\"id\":\"foo"
         )
-        val expectedOutput = listOf(__SseEvent(event = "message", data = "foo"))
+        val expectedOutput = listOf(__ExampleClientSseEvent(event = "message", data = "foo"))
         val expectedLeftover = "id: 1\ndata: {\"id\":\"foo"
 
         val newLineResult = __parseSseEvents(lines.joinToString("\n"))
diff --git a/tests/clients/dart/lib/test_client.rpc.dart b/tests/clients/dart/lib/test_client.g.dart
similarity index 100%
rename from tests/clients/dart/lib/test_client.rpc.dart
rename to tests/clients/dart/lib/test_client.g.dart
diff --git a/tests/clients/dart/lib/test_client_prefixed.g.dart b/tests/clients/dart/lib/test_client_prefixed.g.dart
new file mode 100644
index 00000000..f1095158
--- /dev/null
+++ b/tests/clients/dart/lib/test_client_prefixed.g.dart
@@ -0,0 +1,6517 @@
+// this file was autogenerated by arri
+// ignore_for_file: type=lint, unused_field, unnecessary_cast
+import 'dart:async';
+import 'dart:convert';
+import 'package:arri_client/arri_client.dart';
+import 'package:http/http.dart' as http;
+
+class TestClientPrefixed {
+  final http.Client? _httpClient;
+  final String _baseUrl;
+  final String _clientVersion = "10";
+  final FutureOr<Map<String, String>> Function()? _headers;
+  final Function(Object)? _onError;
+  TestClientPrefixed({
+    http.Client? httpClient,
+    required String baseUrl,
+    FutureOr<Map<String, String>> Function()? headers,
+    Function(Object)? onError,
+  })  : _httpClient = httpClient,
+        _baseUrl = baseUrl,
+        _headers = headers,
+        _onError = onError;
+
+  TestClientPrefixedTestsService get tests => TestClientPrefixedTestsService(
+        baseUrl: _baseUrl,
+        headers: _headers,
+        httpClient: _httpClient,
+        onError: _onError,
+      );
+
+  TestClientPrefixedUsersService get users => TestClientPrefixedUsersService(
+        baseUrl: _baseUrl,
+        headers: _headers,
+        httpClient: _httpClient,
+        onError: _onError,
+      );
+}
+
+class TestClientPrefixedTestsService {
+  final http.Client? _httpClient;
+  final String _baseUrl;
+  final String _clientVersion = "10";
+  final FutureOr<Map<String, String>> Function()? _headers;
+  final Function(Object)? _onError;
+  TestClientPrefixedTestsService({
+    http.Client? httpClient,
+    required String baseUrl,
+    FutureOr<Map<String, String>> Function()? headers,
+    Function(Object)? onError,
+  })  : _httpClient = httpClient,
+        _baseUrl = baseUrl,
+        _headers = headers,
+        _onError = onError;
+
+  Future<FooDefaultPayload> emptyParamsGetRequest() async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/empty-params-get-request",
+      method: HttpMethod.get,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      parser: (body) => FooDefaultPayload.fromJsonString(body),
+      onError: _onError,
+    );
+  }
+
+  Future<FooDefaultPayload> emptyParamsPostRequest() async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/empty-params-post-request",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      parser: (body) => FooDefaultPayload.fromJsonString(body),
+      onError: _onError,
+    );
+  }
+
+  Future<void> emptyResponseGetRequest(FooDefaultPayload params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/empty-response-get-request",
+      method: HttpMethod.get,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) {},
+      onError: _onError,
+    );
+  }
+
+  Future<void> emptyResponsePostRequest(FooDefaultPayload params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/empty-response-post-request",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) {},
+      onError: _onError,
+    );
+  }
+
+  /// If the target language supports it. Generated code should mark this procedure as deprecated.
+  @deprecated
+  Future<void> deprecatedRpc(FooDeprecatedRpcParams params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/deprecated-rpc",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) {},
+      onError: _onError,
+    );
+  }
+
+  Future<void> sendError(FooSendErrorParams params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/send-error",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) {},
+      onError: _onError,
+    );
+  }
+
+  Future<FooObjectWithEveryType> sendObject(
+      FooObjectWithEveryType params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/send-object",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) => FooObjectWithEveryType.fromJsonString(body),
+      onError: _onError,
+    );
+  }
+
+  Future<FooObjectWithEveryNullableType> sendObjectWithNullableFields(
+      FooObjectWithEveryNullableType params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/send-object-with-nullable-fields",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) => FooObjectWithEveryNullableType.fromJsonString(body),
+      onError: _onError,
+    );
+  }
+
+  Future<FooObjectWithPascalCaseKeys> sendObjectWithPascalCaseKeys(
+      FooObjectWithPascalCaseKeys params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/send-object-with-pascal-case-keys",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) => FooObjectWithPascalCaseKeys.fromJsonString(body),
+      onError: _onError,
+    );
+  }
+
+  Future<FooObjectWithSnakeCaseKeys> sendObjectWithSnakeCaseKeys(
+      FooObjectWithSnakeCaseKeys params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/send-object-with-snake-case-keys",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) => FooObjectWithSnakeCaseKeys.fromJsonString(body),
+      onError: _onError,
+    );
+  }
+
+  Future<FooObjectWithEveryOptionalType> sendPartialObject(
+      FooObjectWithEveryOptionalType params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/send-partial-object",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) => FooObjectWithEveryOptionalType.fromJsonString(body),
+      onError: _onError,
+    );
+  }
+
+  Future<FooRecursiveObject> sendRecursiveObject(
+      FooRecursiveObject params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/send-recursive-object",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) => FooRecursiveObject.fromJsonString(body),
+      onError: _onError,
+    );
+  }
+
+  Future<FooRecursiveUnion> sendRecursiveUnion(FooRecursiveUnion params) async {
+    return parsedArriRequest(
+      "$_baseUrl/rpcs/tests/send-recursive-union",
+      method: HttpMethod.post,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      params: params.toJson(),
+      parser: (body) => FooRecursiveUnion.fromJsonString(body),
+      onError: _onError,
+    );
+  }
+
+  EventSource<FooAutoReconnectResponse> streamAutoReconnect(
+    FooAutoReconnectParams params, {
+    void Function(FooAutoReconnectResponse data,
+            EventSource<FooAutoReconnectResponse> connection)?
+        onMessage,
+    void Function(http.StreamedResponse response,
+            EventSource<FooAutoReconnectResponse> connection)?
+        onOpen,
+    void Function(EventSource<FooAutoReconnectResponse> connection)? onClose,
+    void Function(
+            ArriError error, EventSource<FooAutoReconnectResponse> connection)?
+        onError,
+    Duration? retryDelay,
+    int? maxRetryCount,
+    String? lastEventId,
+  }) {
+    return parsedArriSseRequest(
+      "$_baseUrl/rpcs/tests/stream-auto-reconnect",
+      method: HttpMethod.get,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      retryDelay: retryDelay,
+      maxRetryCount: maxRetryCount,
+      lastEventId: lastEventId,
+      params: params.toJson(),
+      parser: (body) => FooAutoReconnectResponse.fromJsonString(body),
+      onMessage: onMessage,
+      onOpen: onOpen,
+      onClose: onClose,
+      onError: onError != null && _onError != null
+          ? (err, es) {
+              _onError.call(onError);
+              return onError(err, es);
+            }
+          : onError != null
+              ? onError
+              : _onError != null
+                  ? (err, _) => _onError.call(err)
+                  : null,
+    );
+  }
+
+  /// This route will always return an error. The client should automatically retry with exponential backoff.
+  EventSource<FooStreamConnectionErrorTestResponse> streamConnectionErrorTest(
+    FooStreamConnectionErrorTestParams params, {
+    void Function(FooStreamConnectionErrorTestResponse data,
+            EventSource<FooStreamConnectionErrorTestResponse> connection)?
+        onMessage,
+    void Function(http.StreamedResponse response,
+            EventSource<FooStreamConnectionErrorTestResponse> connection)?
+        onOpen,
+    void Function(EventSource<FooStreamConnectionErrorTestResponse> connection)?
+        onClose,
+    void Function(ArriError error,
+            EventSource<FooStreamConnectionErrorTestResponse> connection)?
+        onError,
+    Duration? retryDelay,
+    int? maxRetryCount,
+    String? lastEventId,
+  }) {
+    return parsedArriSseRequest(
+      "$_baseUrl/rpcs/tests/stream-connection-error-test",
+      method: HttpMethod.get,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      retryDelay: retryDelay,
+      maxRetryCount: maxRetryCount,
+      lastEventId: lastEventId,
+      params: params.toJson(),
+      parser: (body) =>
+          FooStreamConnectionErrorTestResponse.fromJsonString(body),
+      onMessage: onMessage,
+      onOpen: onOpen,
+      onClose: onClose,
+      onError: onError != null && _onError != null
+          ? (err, es) {
+              _onError.call(onError);
+              return onError(err, es);
+            }
+          : onError != null
+              ? onError
+              : _onError != null
+                  ? (err, _) => _onError.call(err)
+                  : null,
+    );
+  }
+
+  /// Test to ensure that the client can handle receiving streams of large objects. When objects are large messages will sometimes get sent in chunks. Meaning you have to handle receiving a partial message
+  EventSource<FooStreamLargeObjectsResponse> streamLargeObjects({
+    void Function(FooStreamLargeObjectsResponse data,
+            EventSource<FooStreamLargeObjectsResponse> connection)?
+        onMessage,
+    void Function(http.StreamedResponse response,
+            EventSource<FooStreamLargeObjectsResponse> connection)?
+        onOpen,
+    void Function(EventSource<FooStreamLargeObjectsResponse> connection)?
+        onClose,
+    void Function(ArriError error,
+            EventSource<FooStreamLargeObjectsResponse> connection)?
+        onError,
+    Duration? retryDelay,
+    int? maxRetryCount,
+    String? lastEventId,
+  }) {
+    return parsedArriSseRequest(
+      "$_baseUrl/rpcs/tests/stream-large-objects",
+      method: HttpMethod.get,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      retryDelay: retryDelay,
+      maxRetryCount: maxRetryCount,
+      lastEventId: lastEventId,
+      parser: (body) => FooStreamLargeObjectsResponse.fromJsonString(body),
+      onMessage: onMessage,
+      onOpen: onOpen,
+      onClose: onClose,
+      onError: onError != null && _onError != null
+          ? (err, es) {
+              _onError.call(onError);
+              return onError(err, es);
+            }
+          : onError != null
+              ? onError
+              : _onError != null
+                  ? (err, _) => _onError.call(err)
+                  : null,
+    );
+  }
+
+  EventSource<FooChatMessage> streamMessages(
+    FooChatMessageParams params, {
+    void Function(FooChatMessage data, EventSource<FooChatMessage> connection)?
+        onMessage,
+    void Function(http.StreamedResponse response,
+            EventSource<FooChatMessage> connection)?
+        onOpen,
+    void Function(EventSource<FooChatMessage> connection)? onClose,
+    void Function(ArriError error, EventSource<FooChatMessage> connection)?
+        onError,
+    Duration? retryDelay,
+    int? maxRetryCount,
+    String? lastEventId,
+  }) {
+    return parsedArriSseRequest(
+      "$_baseUrl/rpcs/tests/stream-messages",
+      method: HttpMethod.get,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      retryDelay: retryDelay,
+      maxRetryCount: maxRetryCount,
+      lastEventId: lastEventId,
+      params: params.toJson(),
+      parser: (body) => FooChatMessage.fromJsonString(body),
+      onMessage: onMessage,
+      onOpen: onOpen,
+      onClose: onClose,
+      onError: onError != null && _onError != null
+          ? (err, es) {
+              _onError.call(onError);
+              return onError(err, es);
+            }
+          : onError != null
+              ? onError
+              : _onError != null
+                  ? (err, _) => _onError.call(err)
+                  : null,
+    );
+  }
+
+  EventSource<FooTestsStreamRetryWithNewCredentialsResponse>
+      streamRetryWithNewCredentials({
+    void Function(
+            FooTestsStreamRetryWithNewCredentialsResponse data,
+            EventSource<FooTestsStreamRetryWithNewCredentialsResponse>
+                connection)?
+        onMessage,
+    void Function(
+            http.StreamedResponse response,
+            EventSource<FooTestsStreamRetryWithNewCredentialsResponse>
+                connection)?
+        onOpen,
+    void Function(
+            EventSource<FooTestsStreamRetryWithNewCredentialsResponse>
+                connection)?
+        onClose,
+    void Function(
+            ArriError error,
+            EventSource<FooTestsStreamRetryWithNewCredentialsResponse>
+                connection)?
+        onError,
+    Duration? retryDelay,
+    int? maxRetryCount,
+    String? lastEventId,
+  }) {
+    return parsedArriSseRequest(
+      "$_baseUrl/rpcs/tests/stream-retry-with-new-credentials",
+      method: HttpMethod.get,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      retryDelay: retryDelay,
+      maxRetryCount: maxRetryCount,
+      lastEventId: lastEventId,
+      parser: (body) =>
+          FooTestsStreamRetryWithNewCredentialsResponse.fromJsonString(body),
+      onMessage: onMessage,
+      onOpen: onOpen,
+      onClose: onClose,
+      onError: onError != null && _onError != null
+          ? (err, es) {
+              _onError.call(onError);
+              return onError(err, es);
+            }
+          : onError != null
+              ? onError
+              : _onError != null
+                  ? (err, _) => _onError.call(err)
+                  : null,
+    );
+  }
+
+  /// When the client receives the 'done' event, it should close the connection and NOT reconnect
+  EventSource<FooChatMessage> streamTenEventsThenEnd({
+    void Function(FooChatMessage data, EventSource<FooChatMessage> connection)?
+        onMessage,
+    void Function(http.StreamedResponse response,
+            EventSource<FooChatMessage> connection)?
+        onOpen,
+    void Function(EventSource<FooChatMessage> connection)? onClose,
+    void Function(ArriError error, EventSource<FooChatMessage> connection)?
+        onError,
+    Duration? retryDelay,
+    int? maxRetryCount,
+    String? lastEventId,
+  }) {
+    return parsedArriSseRequest(
+      "$_baseUrl/rpcs/tests/stream-ten-events-then-end",
+      method: HttpMethod.get,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      retryDelay: retryDelay,
+      maxRetryCount: maxRetryCount,
+      lastEventId: lastEventId,
+      parser: (body) => FooChatMessage.fromJsonString(body),
+      onMessage: onMessage,
+      onOpen: onOpen,
+      onClose: onClose,
+      onError: onError != null && _onError != null
+          ? (err, es) {
+              _onError.call(onError);
+              return onError(err, es);
+            }
+          : onError != null
+              ? onError
+              : _onError != null
+                  ? (err, _) => _onError.call(err)
+                  : null,
+    );
+  }
+}
+
+class TestClientPrefixedUsersService {
+  final http.Client? _httpClient;
+  final String _baseUrl;
+  final String _clientVersion = "10";
+  final FutureOr<Map<String, String>> Function()? _headers;
+  final Function(Object)? _onError;
+  TestClientPrefixedUsersService({
+    http.Client? httpClient,
+    required String baseUrl,
+    FutureOr<Map<String, String>> Function()? headers,
+    Function(Object)? onError,
+  })  : _httpClient = httpClient,
+        _baseUrl = baseUrl,
+        _headers = headers,
+        _onError = onError;
+
+  EventSource<FooUsersWatchUserResponse> watchUser(
+    FooUsersWatchUserParams params, {
+    void Function(FooUsersWatchUserResponse data,
+            EventSource<FooUsersWatchUserResponse> connection)?
+        onMessage,
+    void Function(http.StreamedResponse response,
+            EventSource<FooUsersWatchUserResponse> connection)?
+        onOpen,
+    void Function(EventSource<FooUsersWatchUserResponse> connection)? onClose,
+    void Function(
+            ArriError error, EventSource<FooUsersWatchUserResponse> connection)?
+        onError,
+    Duration? retryDelay,
+    int? maxRetryCount,
+    String? lastEventId,
+  }) {
+    return parsedArriSseRequest(
+      "$_baseUrl/rpcs/users/watch-user",
+      method: HttpMethod.get,
+      httpClient: _httpClient,
+      headers: _headers,
+      clientVersion: _clientVersion,
+      retryDelay: retryDelay,
+      maxRetryCount: maxRetryCount,
+      lastEventId: lastEventId,
+      params: params.toJson(),
+      parser: (body) => FooUsersWatchUserResponse.fromJsonString(body),
+      onMessage: onMessage,
+      onOpen: onOpen,
+      onClose: onClose,
+      onError: onError != null && _onError != null
+          ? (err, es) {
+              _onError.call(onError);
+              return onError(err, es);
+            }
+          : onError != null
+              ? onError
+              : _onError != null
+                  ? (err, _) => _onError.call(err)
+                  : null,
+    );
+  }
+}
+
+class FooManuallyAddedModel implements ArriModel {
+  final String hello;
+  const FooManuallyAddedModel({
+    required this.hello,
+  });
+
+  factory FooManuallyAddedModel.empty() {
+    return FooManuallyAddedModel(
+      hello: "",
+    );
+  }
+
+  factory FooManuallyAddedModel.fromJson(Map<String, dynamic> _input_) {
+    final hello = typeFromDynamic<String>(_input_["hello"], "");
+    return FooManuallyAddedModel(
+      hello: hello,
+    );
+  }
+
+  factory FooManuallyAddedModel.fromJsonString(String input) {
+    return FooManuallyAddedModel.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "hello": hello,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("hello=$hello");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooManuallyAddedModel copyWith({
+    String? hello,
+  }) {
+    return FooManuallyAddedModel(
+      hello: hello ?? this.hello,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        hello,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooManuallyAddedModel && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooManuallyAddedModel ${toJsonString()}";
+  }
+}
+
+class FooDefaultPayload implements ArriModel {
+  final String message;
+  const FooDefaultPayload({
+    required this.message,
+  });
+
+  factory FooDefaultPayload.empty() {
+    return FooDefaultPayload(
+      message: "",
+    );
+  }
+
+  factory FooDefaultPayload.fromJson(Map<String, dynamic> _input_) {
+    final message = typeFromDynamic<String>(_input_["message"], "");
+    return FooDefaultPayload(
+      message: message,
+    );
+  }
+
+  factory FooDefaultPayload.fromJsonString(String input) {
+    return FooDefaultPayload.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "message": message,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("message=$message");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooDefaultPayload copyWith({
+    String? message,
+  }) {
+    return FooDefaultPayload(
+      message: message ?? this.message,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        message,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooDefaultPayload && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooDefaultPayload ${toJsonString()}";
+  }
+}
+
+@deprecated
+class FooDeprecatedRpcParams implements ArriModel {
+  @deprecated
+  final String deprecatedField;
+  const FooDeprecatedRpcParams({
+    required this.deprecatedField,
+  });
+
+  factory FooDeprecatedRpcParams.empty() {
+    return FooDeprecatedRpcParams(
+      deprecatedField: "",
+    );
+  }
+
+  factory FooDeprecatedRpcParams.fromJson(Map<String, dynamic> _input_) {
+    final deprecatedField =
+        typeFromDynamic<String>(_input_["deprecatedField"], "");
+    return FooDeprecatedRpcParams(
+      deprecatedField: deprecatedField,
+    );
+  }
+
+  factory FooDeprecatedRpcParams.fromJsonString(String input) {
+    return FooDeprecatedRpcParams.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "deprecatedField": deprecatedField,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("deprecatedField=$deprecatedField");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooDeprecatedRpcParams copyWith({
+    String? deprecatedField,
+  }) {
+    return FooDeprecatedRpcParams(
+      deprecatedField: deprecatedField ?? this.deprecatedField,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        deprecatedField,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooDeprecatedRpcParams && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooDeprecatedRpcParams ${toJsonString()}";
+  }
+}
+
+class FooSendErrorParams implements ArriModel {
+  final int code;
+  final String message;
+  const FooSendErrorParams({
+    required this.code,
+    required this.message,
+  });
+
+  factory FooSendErrorParams.empty() {
+    return FooSendErrorParams(
+      code: 0,
+      message: "",
+    );
+  }
+
+  factory FooSendErrorParams.fromJson(Map<String, dynamic> _input_) {
+    final code = intFromDynamic(_input_["code"], 0);
+    final message = typeFromDynamic<String>(_input_["message"], "");
+    return FooSendErrorParams(
+      code: code,
+      message: message,
+    );
+  }
+
+  factory FooSendErrorParams.fromJsonString(String input) {
+    return FooSendErrorParams.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "code": code,
+      "message": message,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("code=$code");
+    _queryParts_.add("message=$message");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooSendErrorParams copyWith({
+    int? code,
+    String? message,
+  }) {
+    return FooSendErrorParams(
+      code: code ?? this.code,
+      message: message ?? this.message,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        code,
+        message,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooSendErrorParams && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooSendErrorParams ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryType implements ArriModel {
+  final dynamic any;
+  final bool boolean;
+  final String string;
+  final DateTime timestamp;
+  final double float32;
+  final double float64;
+  final int int8;
+  final int uint8;
+  final int int16;
+  final int uint16;
+  final int int32;
+  final int uint32;
+  final BigInt int64;
+  final BigInt uint64;
+  final FooObjectWithEveryTypeEnumerator enumerator;
+  final List<bool> array;
+  final FooObjectWithEveryTypeObject object;
+  final Map<String, BigInt> record;
+  final FooObjectWithEveryTypeDiscriminator discriminator;
+  final FooObjectWithEveryTypeNestedObject nestedObject;
+  final List<List<FooObjectWithEveryTypeNestedArrayElementElement>> nestedArray;
+  const FooObjectWithEveryType({
+    required this.any,
+    required this.boolean,
+    required this.string,
+    required this.timestamp,
+    required this.float32,
+    required this.float64,
+    required this.int8,
+    required this.uint8,
+    required this.int16,
+    required this.uint16,
+    required this.int32,
+    required this.uint32,
+    required this.int64,
+    required this.uint64,
+    required this.enumerator,
+    required this.array,
+    required this.object,
+    required this.record,
+    required this.discriminator,
+    required this.nestedObject,
+    required this.nestedArray,
+  });
+
+  factory FooObjectWithEveryType.empty() {
+    return FooObjectWithEveryType(
+      any: null,
+      boolean: false,
+      string: "",
+      timestamp: DateTime.now(),
+      float32: 0.0,
+      float64: 0.0,
+      int8: 0,
+      uint8: 0,
+      int16: 0,
+      uint16: 0,
+      int32: 0,
+      uint32: 0,
+      int64: BigInt.zero,
+      uint64: BigInt.zero,
+      enumerator: FooObjectWithEveryTypeEnumerator.a,
+      array: [],
+      object: FooObjectWithEveryTypeObject.empty(),
+      record: {},
+      discriminator: FooObjectWithEveryTypeDiscriminator.empty(),
+      nestedObject: FooObjectWithEveryTypeNestedObject.empty(),
+      nestedArray: [],
+    );
+  }
+
+  factory FooObjectWithEveryType.fromJson(Map<String, dynamic> _input_) {
+    final any = _input_["any"];
+    final boolean = typeFromDynamic<bool>(_input_["boolean"], false);
+    final string = typeFromDynamic<String>(_input_["string"], "");
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    final float32 = doubleFromDynamic(_input_["float32"], 0.0);
+    final float64 = doubleFromDynamic(_input_["float64"], 0.0);
+    final int8 = intFromDynamic(_input_["int8"], 0);
+    final uint8 = intFromDynamic(_input_["uint8"], 0);
+    final int16 = intFromDynamic(_input_["int16"], 0);
+    final uint16 = intFromDynamic(_input_["uint16"], 0);
+    final int32 = intFromDynamic(_input_["int32"], 0);
+    final uint32 = intFromDynamic(_input_["uint32"], 0);
+    final int64 = bigIntFromDynamic(_input_["int64"], BigInt.zero);
+    final uint64 = bigIntFromDynamic(_input_["uint64"], BigInt.zero);
+    final enumerator = FooObjectWithEveryTypeEnumerator.fromString(
+        typeFromDynamic<String>(_input_["enumerator"], ""));
+    final array = _input_["array"] is List
+        ? (_input_["array"] as List)
+            .map((_el_) => typeFromDynamic<bool>(_el_, false))
+            .toList()
+        : <bool>[];
+    final object = _input_["object"] is Map<String, dynamic>
+        ? FooObjectWithEveryTypeObject.fromJson(_input_["object"])
+        : FooObjectWithEveryTypeObject.empty();
+    final record = _input_["record"] is Map<String, dynamic>
+        ? (_input_["record"] as Map<String, dynamic>).map(
+            (_key_, _val_) => MapEntry(
+              _key_,
+              bigIntFromDynamic(_val_, BigInt.zero),
+            ),
+          )
+        : <String, BigInt>{};
+    final discriminator = _input_["discriminator"] is Map<String, dynamic>
+        ? FooObjectWithEveryTypeDiscriminator.fromJson(_input_["discriminator"])
+        : FooObjectWithEveryTypeDiscriminator.empty();
+    final nestedObject = _input_["nestedObject"] is Map<String, dynamic>
+        ? FooObjectWithEveryTypeNestedObject.fromJson(_input_["nestedObject"])
+        : FooObjectWithEveryTypeNestedObject.empty();
+    final nestedArray = _input_["nestedArray"] is List
+        ? (_input_["nestedArray"] as List)
+            .map((_el_) => _el_ is List
+                ? (_el_ as List)
+                    .map((_el_) => _el_ is Map<String, dynamic>
+                        ? FooObjectWithEveryTypeNestedArrayElementElement
+                            .fromJson(_el_)
+                        : FooObjectWithEveryTypeNestedArrayElementElement
+                            .empty())
+                    .toList()
+                : <FooObjectWithEveryTypeNestedArrayElementElement>[])
+            .toList()
+        : <List<FooObjectWithEveryTypeNestedArrayElementElement>>[];
+    return FooObjectWithEveryType(
+      any: any,
+      boolean: boolean,
+      string: string,
+      timestamp: timestamp,
+      float32: float32,
+      float64: float64,
+      int8: int8,
+      uint8: uint8,
+      int16: int16,
+      uint16: uint16,
+      int32: int32,
+      uint32: uint32,
+      int64: int64,
+      uint64: uint64,
+      enumerator: enumerator,
+      array: array,
+      object: object,
+      record: record,
+      discriminator: discriminator,
+      nestedObject: nestedObject,
+      nestedArray: nestedArray,
+    );
+  }
+
+  factory FooObjectWithEveryType.fromJsonString(String input) {
+    return FooObjectWithEveryType.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "any": any,
+      "boolean": boolean,
+      "string": string,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+      "float32": float32,
+      "float64": float64,
+      "int8": int8,
+      "uint8": uint8,
+      "int16": int16,
+      "uint16": uint16,
+      "int32": int32,
+      "uint32": uint32,
+      "int64": int64.toString(),
+      "uint64": uint64.toString(),
+      "enumerator": enumerator.serialValue,
+      "array": array.map((_el_) => _el_).toList(),
+      "object": object.toJson(),
+      "record": record.map(
+        (_key_, _val_) => MapEntry(
+          _key_,
+          _val_.toString(),
+        ),
+      ),
+      "discriminator": discriminator.toJson(),
+      "nestedObject": nestedObject.toJson(),
+      "nestedArray": nestedArray
+          .map((_el_) => _el_.map((_el_) => _el_.toJson()).toList())
+          .toList(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    print(
+        "[WARNING] any's cannot be serialized to query params. Skipping field at /ObjectWithEveryType/any.");
+    _queryParts_.add("boolean=$boolean");
+    _queryParts_.add("string=$string");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    _queryParts_.add("float32=$float32");
+    _queryParts_.add("float64=$float64");
+    _queryParts_.add("int8=$int8");
+    _queryParts_.add("uint8=$uint8");
+    _queryParts_.add("int16=$int16");
+    _queryParts_.add("uint16=$uint16");
+    _queryParts_.add("int32=$int32");
+    _queryParts_.add("uint32=$uint32");
+    _queryParts_.add("int64=$int64");
+    _queryParts_.add("uint64=$uint64");
+    _queryParts_.add("enumerator=${enumerator.serialValue}");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryType/array.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryType/object.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryType/record.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryType/discriminator.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryType/nestedObject.");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryType/nestedArray.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryType copyWith({
+    dynamic any,
+    bool? boolean,
+    String? string,
+    DateTime? timestamp,
+    double? float32,
+    double? float64,
+    int? int8,
+    int? uint8,
+    int? int16,
+    int? uint16,
+    int? int32,
+    int? uint32,
+    BigInt? int64,
+    BigInt? uint64,
+    FooObjectWithEveryTypeEnumerator? enumerator,
+    List<bool>? array,
+    FooObjectWithEveryTypeObject? object,
+    Map<String, BigInt>? record,
+    FooObjectWithEveryTypeDiscriminator? discriminator,
+    FooObjectWithEveryTypeNestedObject? nestedObject,
+    List<List<FooObjectWithEveryTypeNestedArrayElementElement>>? nestedArray,
+  }) {
+    return FooObjectWithEveryType(
+      any: any ?? this.any,
+      boolean: boolean ?? this.boolean,
+      string: string ?? this.string,
+      timestamp: timestamp ?? this.timestamp,
+      float32: float32 ?? this.float32,
+      float64: float64 ?? this.float64,
+      int8: int8 ?? this.int8,
+      uint8: uint8 ?? this.uint8,
+      int16: int16 ?? this.int16,
+      uint16: uint16 ?? this.uint16,
+      int32: int32 ?? this.int32,
+      uint32: uint32 ?? this.uint32,
+      int64: int64 ?? this.int64,
+      uint64: uint64 ?? this.uint64,
+      enumerator: enumerator ?? this.enumerator,
+      array: array ?? this.array,
+      object: object ?? this.object,
+      record: record ?? this.record,
+      discriminator: discriminator ?? this.discriminator,
+      nestedObject: nestedObject ?? this.nestedObject,
+      nestedArray: nestedArray ?? this.nestedArray,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        any,
+        boolean,
+        string,
+        timestamp,
+        float32,
+        float64,
+        int8,
+        uint8,
+        int16,
+        uint16,
+        int32,
+        uint32,
+        int64,
+        uint64,
+        enumerator,
+        array,
+        object,
+        record,
+        discriminator,
+        nestedObject,
+        nestedArray,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryType && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryType ${toJsonString()}";
+  }
+}
+
+enum FooObjectWithEveryTypeEnumerator
+    implements Comparable<FooObjectWithEveryTypeEnumerator> {
+  a("A"),
+  b("B"),
+  c("C");
+
+  const FooObjectWithEveryTypeEnumerator(this.serialValue);
+  final String serialValue;
+
+  factory FooObjectWithEveryTypeEnumerator.fromString(String input) {
+    for (final val in values) {
+      if (val.serialValue == input) {
+        return val;
+      }
+    }
+    return a;
+  }
+
+  @override
+  int compareTo(FooObjectWithEveryTypeEnumerator other) =>
+      name.compareTo(other.name);
+}
+
+class FooObjectWithEveryTypeObject implements ArriModel {
+  final String string;
+  final bool boolean;
+  final DateTime timestamp;
+  const FooObjectWithEveryTypeObject({
+    required this.string,
+    required this.boolean,
+    required this.timestamp,
+  });
+
+  factory FooObjectWithEveryTypeObject.empty() {
+    return FooObjectWithEveryTypeObject(
+      string: "",
+      boolean: false,
+      timestamp: DateTime.now(),
+    );
+  }
+
+  factory FooObjectWithEveryTypeObject.fromJson(Map<String, dynamic> _input_) {
+    final string = typeFromDynamic<String>(_input_["string"], "");
+    final boolean = typeFromDynamic<bool>(_input_["boolean"], false);
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    return FooObjectWithEveryTypeObject(
+      string: string,
+      boolean: boolean,
+      timestamp: timestamp,
+    );
+  }
+
+  factory FooObjectWithEveryTypeObject.fromJsonString(String input) {
+    return FooObjectWithEveryTypeObject.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "string": string,
+      "boolean": boolean,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("string=$string");
+    _queryParts_.add("boolean=$boolean");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryTypeObject copyWith({
+    String? string,
+    bool? boolean,
+    DateTime? timestamp,
+  }) {
+    return FooObjectWithEveryTypeObject(
+      string: string ?? this.string,
+      boolean: boolean ?? this.boolean,
+      timestamp: timestamp ?? this.timestamp,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        string,
+        boolean,
+        timestamp,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryTypeObject &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryTypeObject ${toJsonString()}";
+  }
+}
+
+sealed class FooObjectWithEveryTypeDiscriminator implements ArriModel {
+  String get type;
+  const FooObjectWithEveryTypeDiscriminator();
+
+  factory FooObjectWithEveryTypeDiscriminator.empty() {
+    return FooObjectWithEveryTypeDiscriminatorA.empty();
+  }
+
+  factory FooObjectWithEveryTypeDiscriminator.fromJson(
+      Map<String, dynamic> _input_) {
+    final type = typeFromDynamic<String>(_input_["type"], "");
+    switch (type) {
+      case "A":
+        return FooObjectWithEveryTypeDiscriminatorA.fromJson(_input_);
+      case "B":
+        return FooObjectWithEveryTypeDiscriminatorB.fromJson(_input_);
+      default:
+        return FooObjectWithEveryTypeDiscriminator.empty();
+    }
+  }
+
+  factory FooObjectWithEveryTypeDiscriminator.fromJsonString(String input) {
+    return FooObjectWithEveryTypeDiscriminator.fromJson(json.decode(input));
+  }
+}
+
+class FooObjectWithEveryTypeDiscriminatorA
+    implements FooObjectWithEveryTypeDiscriminator {
+  final String title;
+  const FooObjectWithEveryTypeDiscriminatorA({
+    required this.title,
+  });
+
+  @override
+  String get type => "A";
+
+  factory FooObjectWithEveryTypeDiscriminatorA.empty() {
+    return FooObjectWithEveryTypeDiscriminatorA(
+      title: "",
+    );
+  }
+
+  factory FooObjectWithEveryTypeDiscriminatorA.fromJson(
+      Map<String, dynamic> _input_) {
+    final title = typeFromDynamic<String>(_input_["title"], "");
+    return FooObjectWithEveryTypeDiscriminatorA(
+      title: title,
+    );
+  }
+
+  factory FooObjectWithEveryTypeDiscriminatorA.fromJsonString(String input) {
+    return FooObjectWithEveryTypeDiscriminatorA.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "title": title,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    _queryParts_.add("title=$title");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryTypeDiscriminatorA copyWith({
+    String? title,
+  }) {
+    return FooObjectWithEveryTypeDiscriminatorA(
+      title: title ?? this.title,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        title,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryTypeDiscriminatorA &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryTypeDiscriminatorA ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryTypeDiscriminatorB
+    implements FooObjectWithEveryTypeDiscriminator {
+  final String title;
+  final String description;
+  const FooObjectWithEveryTypeDiscriminatorB({
+    required this.title,
+    required this.description,
+  });
+
+  @override
+  String get type => "B";
+
+  factory FooObjectWithEveryTypeDiscriminatorB.empty() {
+    return FooObjectWithEveryTypeDiscriminatorB(
+      title: "",
+      description: "",
+    );
+  }
+
+  factory FooObjectWithEveryTypeDiscriminatorB.fromJson(
+      Map<String, dynamic> _input_) {
+    final title = typeFromDynamic<String>(_input_["title"], "");
+    final description = typeFromDynamic<String>(_input_["description"], "");
+    return FooObjectWithEveryTypeDiscriminatorB(
+      title: title,
+      description: description,
+    );
+  }
+
+  factory FooObjectWithEveryTypeDiscriminatorB.fromJsonString(String input) {
+    return FooObjectWithEveryTypeDiscriminatorB.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "title": title,
+      "description": description,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    _queryParts_.add("title=$title");
+    _queryParts_.add("description=$description");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryTypeDiscriminatorB copyWith({
+    String? title,
+    String? description,
+  }) {
+    return FooObjectWithEveryTypeDiscriminatorB(
+      title: title ?? this.title,
+      description: description ?? this.description,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        title,
+        description,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryTypeDiscriminatorB &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryTypeDiscriminatorB ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryTypeNestedObject implements ArriModel {
+  final String id;
+  final DateTime timestamp;
+  final FooObjectWithEveryTypeNestedObjectData data;
+  const FooObjectWithEveryTypeNestedObject({
+    required this.id,
+    required this.timestamp,
+    required this.data,
+  });
+
+  factory FooObjectWithEveryTypeNestedObject.empty() {
+    return FooObjectWithEveryTypeNestedObject(
+      id: "",
+      timestamp: DateTime.now(),
+      data: FooObjectWithEveryTypeNestedObjectData.empty(),
+    );
+  }
+
+  factory FooObjectWithEveryTypeNestedObject.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    final data = _input_["data"] is Map<String, dynamic>
+        ? FooObjectWithEveryTypeNestedObjectData.fromJson(_input_["data"])
+        : FooObjectWithEveryTypeNestedObjectData.empty();
+    return FooObjectWithEveryTypeNestedObject(
+      id: id,
+      timestamp: timestamp,
+      data: data,
+    );
+  }
+
+  factory FooObjectWithEveryTypeNestedObject.fromJsonString(String input) {
+    return FooObjectWithEveryTypeNestedObject.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+      "data": data.toJson(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryTypeNestedObject/data.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryTypeNestedObject copyWith({
+    String? id,
+    DateTime? timestamp,
+    FooObjectWithEveryTypeNestedObjectData? data,
+  }) {
+    return FooObjectWithEveryTypeNestedObject(
+      id: id ?? this.id,
+      timestamp: timestamp ?? this.timestamp,
+      data: data ?? this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryTypeNestedObject &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryTypeNestedObject ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryTypeNestedObjectData implements ArriModel {
+  final String id;
+  final DateTime timestamp;
+  final FooObjectWithEveryTypeNestedObjectDataData data;
+  const FooObjectWithEveryTypeNestedObjectData({
+    required this.id,
+    required this.timestamp,
+    required this.data,
+  });
+
+  factory FooObjectWithEveryTypeNestedObjectData.empty() {
+    return FooObjectWithEveryTypeNestedObjectData(
+      id: "",
+      timestamp: DateTime.now(),
+      data: FooObjectWithEveryTypeNestedObjectDataData.empty(),
+    );
+  }
+
+  factory FooObjectWithEveryTypeNestedObjectData.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    final data = _input_["data"] is Map<String, dynamic>
+        ? FooObjectWithEveryTypeNestedObjectDataData.fromJson(_input_["data"])
+        : FooObjectWithEveryTypeNestedObjectDataData.empty();
+    return FooObjectWithEveryTypeNestedObjectData(
+      id: id,
+      timestamp: timestamp,
+      data: data,
+    );
+  }
+
+  factory FooObjectWithEveryTypeNestedObjectData.fromJsonString(String input) {
+    return FooObjectWithEveryTypeNestedObjectData.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+      "data": data.toJson(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryTypeNestedObjectData/data.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryTypeNestedObjectData copyWith({
+    String? id,
+    DateTime? timestamp,
+    FooObjectWithEveryTypeNestedObjectDataData? data,
+  }) {
+    return FooObjectWithEveryTypeNestedObjectData(
+      id: id ?? this.id,
+      timestamp: timestamp ?? this.timestamp,
+      data: data ?? this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryTypeNestedObjectData &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryTypeNestedObjectData ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryTypeNestedObjectDataData implements ArriModel {
+  final String id;
+  final DateTime timestamp;
+  const FooObjectWithEveryTypeNestedObjectDataData({
+    required this.id,
+    required this.timestamp,
+  });
+
+  factory FooObjectWithEveryTypeNestedObjectDataData.empty() {
+    return FooObjectWithEveryTypeNestedObjectDataData(
+      id: "",
+      timestamp: DateTime.now(),
+    );
+  }
+
+  factory FooObjectWithEveryTypeNestedObjectDataData.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    return FooObjectWithEveryTypeNestedObjectDataData(
+      id: id,
+      timestamp: timestamp,
+    );
+  }
+
+  factory FooObjectWithEveryTypeNestedObjectDataData.fromJsonString(
+      String input) {
+    return FooObjectWithEveryTypeNestedObjectDataData.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryTypeNestedObjectDataData copyWith({
+    String? id,
+    DateTime? timestamp,
+  }) {
+    return FooObjectWithEveryTypeNestedObjectDataData(
+      id: id ?? this.id,
+      timestamp: timestamp ?? this.timestamp,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryTypeNestedObjectDataData &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryTypeNestedObjectDataData ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryTypeNestedArrayElementElement implements ArriModel {
+  final String id;
+  final DateTime timestamp;
+  const FooObjectWithEveryTypeNestedArrayElementElement({
+    required this.id,
+    required this.timestamp,
+  });
+
+  factory FooObjectWithEveryTypeNestedArrayElementElement.empty() {
+    return FooObjectWithEveryTypeNestedArrayElementElement(
+      id: "",
+      timestamp: DateTime.now(),
+    );
+  }
+
+  factory FooObjectWithEveryTypeNestedArrayElementElement.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    return FooObjectWithEveryTypeNestedArrayElementElement(
+      id: id,
+      timestamp: timestamp,
+    );
+  }
+
+  factory FooObjectWithEveryTypeNestedArrayElementElement.fromJsonString(
+      String input) {
+    return FooObjectWithEveryTypeNestedArrayElementElement.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryTypeNestedArrayElementElement copyWith({
+    String? id,
+    DateTime? timestamp,
+  }) {
+    return FooObjectWithEveryTypeNestedArrayElementElement(
+      id: id ?? this.id,
+      timestamp: timestamp ?? this.timestamp,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryTypeNestedArrayElementElement &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryTypeNestedArrayElementElement ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryNullableType implements ArriModel {
+  final dynamic any;
+  final bool? boolean;
+  final String? string;
+  final DateTime? timestamp;
+  final double? float32;
+  final double? float64;
+  final int? int8;
+  final int? uint8;
+  final int? int16;
+  final int? uint16;
+  final int? int32;
+  final int? uint32;
+  final BigInt? int64;
+  final BigInt? uint64;
+  final FooObjectWithEveryNullableTypeEnumerator? enumerator;
+  final List<bool?>? array;
+  final FooObjectWithEveryNullableTypeObject? object;
+  final Map<String, BigInt?>? record;
+  final FooObjectWithEveryNullableTypeDiscriminator? discriminator;
+  final FooObjectWithEveryNullableTypeNestedObject? nestedObject;
+  final List<List<FooObjectWithEveryNullableTypeNestedArrayElementElement?>?>?
+      nestedArray;
+  const FooObjectWithEveryNullableType({
+    required this.any,
+    required this.boolean,
+    required this.string,
+    required this.timestamp,
+    required this.float32,
+    required this.float64,
+    required this.int8,
+    required this.uint8,
+    required this.int16,
+    required this.uint16,
+    required this.int32,
+    required this.uint32,
+    required this.int64,
+    required this.uint64,
+    required this.enumerator,
+    required this.array,
+    required this.object,
+    required this.record,
+    required this.discriminator,
+    required this.nestedObject,
+    required this.nestedArray,
+  });
+
+  factory FooObjectWithEveryNullableType.empty() {
+    return FooObjectWithEveryNullableType(
+      any: null,
+      boolean: null,
+      string: null,
+      timestamp: null,
+      float32: null,
+      float64: null,
+      int8: null,
+      uint8: null,
+      int16: null,
+      uint16: null,
+      int32: null,
+      uint32: null,
+      int64: null,
+      uint64: null,
+      enumerator: null,
+      array: null,
+      object: null,
+      record: null,
+      discriminator: null,
+      nestedObject: null,
+      nestedArray: null,
+    );
+  }
+
+  factory FooObjectWithEveryNullableType.fromJson(
+      Map<String, dynamic> _input_) {
+    final any = _input_["any"];
+    final boolean = nullableTypeFromDynamic<bool>(_input_["boolean"]);
+    final string = nullableTypeFromDynamic<String>(_input_["string"]);
+    final timestamp = nullableDateTimeFromDynamic(_input_["timestamp"]);
+    final float32 = nullableDoubleFromDynamic(_input_["float32"]);
+    final float64 = nullableDoubleFromDynamic(_input_["float64"]);
+    final int8 = nullableIntFromDynamic(_input_["int8"]);
+    final uint8 = nullableIntFromDynamic(_input_["uint8"]);
+    final int16 = nullableIntFromDynamic(_input_["int16"]);
+    final uint16 = nullableIntFromDynamic(_input_["uint16"]);
+    final int32 = nullableIntFromDynamic(_input_["int32"]);
+    final uint32 = nullableIntFromDynamic(_input_["uint32"]);
+    final int64 = nullableBigIntFromDynamic(_input_["int64"]);
+    final uint64 = nullableBigIntFromDynamic(_input_["uint64"]);
+    final enumerator = _input_["enumerator"] is String
+        ? FooObjectWithEveryNullableTypeEnumerator.fromString(
+            _input_["enumerator"])
+        : null;
+    final array = _input_["array"] is List
+        ? (_input_["array"] as List)
+            .map((_el_) => nullableTypeFromDynamic<bool>(_el_))
+            .toList()
+        : null;
+    final object = _input_["object"] is Map<String, dynamic>
+        ? FooObjectWithEveryNullableTypeObject.fromJson(_input_["object"])
+        : null;
+    final record = _input_["record"] is Map<String, dynamic>
+        ? (_input_["record"] as Map<String, dynamic>).map(
+            (_key_, _val_) => MapEntry(
+              _key_,
+              nullableBigIntFromDynamic(_val_),
+            ),
+          )
+        : null;
+    final discriminator = _input_["discriminator"] is Map<String, dynamic>
+        ? FooObjectWithEveryNullableTypeDiscriminator.fromJson(
+            _input_["discriminator"])
+        : null;
+    final nestedObject = _input_["nestedObject"] is Map<String, dynamic>
+        ? FooObjectWithEveryNullableTypeNestedObject.fromJson(
+            _input_["nestedObject"])
+        : null;
+    final nestedArray = _input_["nestedArray"] is List
+        ? (_input_["nestedArray"] as List)
+            .map((_el_) => _el_ is List
+                ? (_el_ as List)
+                    .map((_el_) => _el_ is Map<String, dynamic>
+                        ? FooObjectWithEveryNullableTypeNestedArrayElementElement
+                            .fromJson(_el_)
+                        : null)
+                    .toList()
+                : null)
+            .toList()
+        : null;
+    return FooObjectWithEveryNullableType(
+      any: any,
+      boolean: boolean,
+      string: string,
+      timestamp: timestamp,
+      float32: float32,
+      float64: float64,
+      int8: int8,
+      uint8: uint8,
+      int16: int16,
+      uint16: uint16,
+      int32: int32,
+      uint32: uint32,
+      int64: int64,
+      uint64: uint64,
+      enumerator: enumerator,
+      array: array,
+      object: object,
+      record: record,
+      discriminator: discriminator,
+      nestedObject: nestedObject,
+      nestedArray: nestedArray,
+    );
+  }
+
+  factory FooObjectWithEveryNullableType.fromJsonString(String input) {
+    return FooObjectWithEveryNullableType.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "any": any,
+      "boolean": boolean,
+      "string": string,
+      "timestamp": timestamp?.toUtc().toIso8601String(),
+      "float32": float32,
+      "float64": float64,
+      "int8": int8,
+      "uint8": uint8,
+      "int16": int16,
+      "uint16": uint16,
+      "int32": int32,
+      "uint32": uint32,
+      "int64": int64?.toString(),
+      "uint64": uint64?.toString(),
+      "enumerator": enumerator?.serialValue,
+      "array": array?.map((_el_) => _el_).toList(),
+      "object": object?.toJson(),
+      "record": record?.map(
+        (_key_, _val_) => MapEntry(
+          _key_,
+          _val_?.toString(),
+        ),
+      ),
+      "discriminator": discriminator?.toJson(),
+      "nestedObject": nestedObject?.toJson(),
+      "nestedArray": nestedArray
+          ?.map((_el_) => _el_?.map((_el_) => _el_?.toJson()).toList())
+          .toList(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    print(
+        "[WARNING] any's cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/any.");
+    _queryParts_.add("boolean=$boolean");
+    _queryParts_.add("string=$string");
+    _queryParts_.add("timestamp=${timestamp?.toUtc().toIso8601String()}");
+    _queryParts_.add("float32=$float32");
+    _queryParts_.add("float64=$float64");
+    _queryParts_.add("int8=$int8");
+    _queryParts_.add("uint8=$uint8");
+    _queryParts_.add("int16=$int16");
+    _queryParts_.add("uint16=$uint16");
+    _queryParts_.add("int32=$int32");
+    _queryParts_.add("uint32=$uint32");
+    _queryParts_.add("int64=$int64");
+    _queryParts_.add("uint64=$uint64");
+    _queryParts_.add("enumerator=${enumerator?.serialValue}");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/array.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/object.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/record.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/discriminator.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/nestedObject.");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/nestedArray.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryNullableType copyWith({
+    dynamic Function()? any,
+    bool? Function()? boolean,
+    String? Function()? string,
+    DateTime? Function()? timestamp,
+    double? Function()? float32,
+    double? Function()? float64,
+    int? Function()? int8,
+    int? Function()? uint8,
+    int? Function()? int16,
+    int? Function()? uint16,
+    int? Function()? int32,
+    int? Function()? uint32,
+    BigInt? Function()? int64,
+    BigInt? Function()? uint64,
+    FooObjectWithEveryNullableTypeEnumerator? Function()? enumerator,
+    List<bool?>? Function()? array,
+    FooObjectWithEveryNullableTypeObject? Function()? object,
+    Map<String, BigInt?>? Function()? record,
+    FooObjectWithEveryNullableTypeDiscriminator? Function()? discriminator,
+    FooObjectWithEveryNullableTypeNestedObject? Function()? nestedObject,
+    List<List<FooObjectWithEveryNullableTypeNestedArrayElementElement?>?>?
+            Function()?
+        nestedArray,
+  }) {
+    return FooObjectWithEveryNullableType(
+      any: any != null ? any() : this.any,
+      boolean: boolean != null ? boolean() : this.boolean,
+      string: string != null ? string() : this.string,
+      timestamp: timestamp != null ? timestamp() : this.timestamp,
+      float32: float32 != null ? float32() : this.float32,
+      float64: float64 != null ? float64() : this.float64,
+      int8: int8 != null ? int8() : this.int8,
+      uint8: uint8 != null ? uint8() : this.uint8,
+      int16: int16 != null ? int16() : this.int16,
+      uint16: uint16 != null ? uint16() : this.uint16,
+      int32: int32 != null ? int32() : this.int32,
+      uint32: uint32 != null ? uint32() : this.uint32,
+      int64: int64 != null ? int64() : this.int64,
+      uint64: uint64 != null ? uint64() : this.uint64,
+      enumerator: enumerator != null ? enumerator() : this.enumerator,
+      array: array != null ? array() : this.array,
+      object: object != null ? object() : this.object,
+      record: record != null ? record() : this.record,
+      discriminator:
+          discriminator != null ? discriminator() : this.discriminator,
+      nestedObject: nestedObject != null ? nestedObject() : this.nestedObject,
+      nestedArray: nestedArray != null ? nestedArray() : this.nestedArray,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        any,
+        boolean,
+        string,
+        timestamp,
+        float32,
+        float64,
+        int8,
+        uint8,
+        int16,
+        uint16,
+        int32,
+        uint32,
+        int64,
+        uint64,
+        enumerator,
+        array,
+        object,
+        record,
+        discriminator,
+        nestedObject,
+        nestedArray,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryNullableType &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryNullableType ${toJsonString()}";
+  }
+}
+
+enum FooObjectWithEveryNullableTypeEnumerator
+    implements Comparable<FooObjectWithEveryNullableTypeEnumerator> {
+  a("A"),
+  b("B"),
+  c("C");
+
+  const FooObjectWithEveryNullableTypeEnumerator(this.serialValue);
+  final String serialValue;
+
+  factory FooObjectWithEveryNullableTypeEnumerator.fromString(String input) {
+    for (final val in values) {
+      if (val.serialValue == input) {
+        return val;
+      }
+    }
+    return a;
+  }
+
+  @override
+  int compareTo(FooObjectWithEveryNullableTypeEnumerator other) =>
+      name.compareTo(other.name);
+}
+
+class FooObjectWithEveryNullableTypeObject implements ArriModel {
+  final String? string;
+  final bool? boolean;
+  final DateTime? timestamp;
+  const FooObjectWithEveryNullableTypeObject({
+    required this.string,
+    required this.boolean,
+    required this.timestamp,
+  });
+
+  factory FooObjectWithEveryNullableTypeObject.empty() {
+    return FooObjectWithEveryNullableTypeObject(
+      string: null,
+      boolean: null,
+      timestamp: null,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeObject.fromJson(
+      Map<String, dynamic> _input_) {
+    final string = nullableTypeFromDynamic<String>(_input_["string"]);
+    final boolean = nullableTypeFromDynamic<bool>(_input_["boolean"]);
+    final timestamp = nullableDateTimeFromDynamic(_input_["timestamp"]);
+    return FooObjectWithEveryNullableTypeObject(
+      string: string,
+      boolean: boolean,
+      timestamp: timestamp,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeObject.fromJsonString(String input) {
+    return FooObjectWithEveryNullableTypeObject.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "string": string,
+      "boolean": boolean,
+      "timestamp": timestamp?.toUtc().toIso8601String(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("string=$string");
+    _queryParts_.add("boolean=$boolean");
+    _queryParts_.add("timestamp=${timestamp?.toUtc().toIso8601String()}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryNullableTypeObject copyWith({
+    String? Function()? string,
+    bool? Function()? boolean,
+    DateTime? Function()? timestamp,
+  }) {
+    return FooObjectWithEveryNullableTypeObject(
+      string: string != null ? string() : this.string,
+      boolean: boolean != null ? boolean() : this.boolean,
+      timestamp: timestamp != null ? timestamp() : this.timestamp,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        string,
+        boolean,
+        timestamp,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryNullableTypeObject &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryNullableTypeObject ${toJsonString()}";
+  }
+}
+
+sealed class FooObjectWithEveryNullableTypeDiscriminator implements ArriModel {
+  String get type;
+  const FooObjectWithEveryNullableTypeDiscriminator();
+
+  factory FooObjectWithEveryNullableTypeDiscriminator.empty() {
+    return FooObjectWithEveryNullableTypeDiscriminatorA.empty();
+  }
+
+  factory FooObjectWithEveryNullableTypeDiscriminator.fromJson(
+      Map<String, dynamic> _input_) {
+    final type = typeFromDynamic<String>(_input_["type"], "");
+    switch (type) {
+      case "A":
+        return FooObjectWithEveryNullableTypeDiscriminatorA.fromJson(_input_);
+      case "B":
+        return FooObjectWithEveryNullableTypeDiscriminatorB.fromJson(_input_);
+      default:
+        return FooObjectWithEveryNullableTypeDiscriminator.empty();
+    }
+  }
+
+  factory FooObjectWithEveryNullableTypeDiscriminator.fromJsonString(
+      String input) {
+    return FooObjectWithEveryNullableTypeDiscriminator.fromJson(
+        json.decode(input));
+  }
+}
+
+class FooObjectWithEveryNullableTypeDiscriminatorA
+    implements FooObjectWithEveryNullableTypeDiscriminator {
+  final String? title;
+  const FooObjectWithEveryNullableTypeDiscriminatorA({
+    required this.title,
+  });
+
+  @override
+  String get type => "A";
+
+  factory FooObjectWithEveryNullableTypeDiscriminatorA.empty() {
+    return FooObjectWithEveryNullableTypeDiscriminatorA(
+      title: null,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeDiscriminatorA.fromJson(
+      Map<String, dynamic> _input_) {
+    final title = nullableTypeFromDynamic<String>(_input_["title"]);
+    return FooObjectWithEveryNullableTypeDiscriminatorA(
+      title: title,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeDiscriminatorA.fromJsonString(
+      String input) {
+    return FooObjectWithEveryNullableTypeDiscriminatorA.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "title": title,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    _queryParts_.add("title=$title");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryNullableTypeDiscriminatorA copyWith({
+    String? Function()? title,
+  }) {
+    return FooObjectWithEveryNullableTypeDiscriminatorA(
+      title: title != null ? title() : this.title,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        title,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryNullableTypeDiscriminatorA &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryNullableTypeDiscriminatorA ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryNullableTypeDiscriminatorB
+    implements FooObjectWithEveryNullableTypeDiscriminator {
+  final String? title;
+  final String? description;
+  const FooObjectWithEveryNullableTypeDiscriminatorB({
+    required this.title,
+    required this.description,
+  });
+
+  @override
+  String get type => "B";
+
+  factory FooObjectWithEveryNullableTypeDiscriminatorB.empty() {
+    return FooObjectWithEveryNullableTypeDiscriminatorB(
+      title: null,
+      description: null,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeDiscriminatorB.fromJson(
+      Map<String, dynamic> _input_) {
+    final title = nullableTypeFromDynamic<String>(_input_["title"]);
+    final description = nullableTypeFromDynamic<String>(_input_["description"]);
+    return FooObjectWithEveryNullableTypeDiscriminatorB(
+      title: title,
+      description: description,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeDiscriminatorB.fromJsonString(
+      String input) {
+    return FooObjectWithEveryNullableTypeDiscriminatorB.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "title": title,
+      "description": description,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    _queryParts_.add("title=$title");
+    _queryParts_.add("description=$description");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryNullableTypeDiscriminatorB copyWith({
+    String? Function()? title,
+    String? Function()? description,
+  }) {
+    return FooObjectWithEveryNullableTypeDiscriminatorB(
+      title: title != null ? title() : this.title,
+      description: description != null ? description() : this.description,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        title,
+        description,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryNullableTypeDiscriminatorB &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryNullableTypeDiscriminatorB ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryNullableTypeNestedObject implements ArriModel {
+  final String? id;
+  final DateTime? timestamp;
+  final FooObjectWithEveryNullableTypeNestedObjectData? data;
+  const FooObjectWithEveryNullableTypeNestedObject({
+    required this.id,
+    required this.timestamp,
+    required this.data,
+  });
+
+  factory FooObjectWithEveryNullableTypeNestedObject.empty() {
+    return FooObjectWithEveryNullableTypeNestedObject(
+      id: null,
+      timestamp: null,
+      data: null,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeNestedObject.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = nullableTypeFromDynamic<String>(_input_["id"]);
+    final timestamp = nullableDateTimeFromDynamic(_input_["timestamp"]);
+    final data = _input_["data"] is Map<String, dynamic>
+        ? FooObjectWithEveryNullableTypeNestedObjectData.fromJson(
+            _input_["data"])
+        : null;
+    return FooObjectWithEveryNullableTypeNestedObject(
+      id: id,
+      timestamp: timestamp,
+      data: data,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeNestedObject.fromJsonString(
+      String input) {
+    return FooObjectWithEveryNullableTypeNestedObject.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp?.toUtc().toIso8601String(),
+      "data": data?.toJson(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp?.toUtc().toIso8601String()}");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableTypeNestedObject/data.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryNullableTypeNestedObject copyWith({
+    String? Function()? id,
+    DateTime? Function()? timestamp,
+    FooObjectWithEveryNullableTypeNestedObjectData? Function()? data,
+  }) {
+    return FooObjectWithEveryNullableTypeNestedObject(
+      id: id != null ? id() : this.id,
+      timestamp: timestamp != null ? timestamp() : this.timestamp,
+      data: data != null ? data() : this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryNullableTypeNestedObject &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryNullableTypeNestedObject ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryNullableTypeNestedObjectData implements ArriModel {
+  final String? id;
+  final DateTime? timestamp;
+  final FooObjectWithEveryNullableTypeNestedObjectDataData? data;
+  const FooObjectWithEveryNullableTypeNestedObjectData({
+    required this.id,
+    required this.timestamp,
+    required this.data,
+  });
+
+  factory FooObjectWithEveryNullableTypeNestedObjectData.empty() {
+    return FooObjectWithEveryNullableTypeNestedObjectData(
+      id: null,
+      timestamp: null,
+      data: null,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeNestedObjectData.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = nullableTypeFromDynamic<String>(_input_["id"]);
+    final timestamp = nullableDateTimeFromDynamic(_input_["timestamp"]);
+    final data = _input_["data"] is Map<String, dynamic>
+        ? FooObjectWithEveryNullableTypeNestedObjectDataData.fromJson(
+            _input_["data"])
+        : null;
+    return FooObjectWithEveryNullableTypeNestedObjectData(
+      id: id,
+      timestamp: timestamp,
+      data: data,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeNestedObjectData.fromJsonString(
+      String input) {
+    return FooObjectWithEveryNullableTypeNestedObjectData.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp?.toUtc().toIso8601String(),
+      "data": data?.toJson(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp?.toUtc().toIso8601String()}");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableTypeNestedObjectData/data.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryNullableTypeNestedObjectData copyWith({
+    String? Function()? id,
+    DateTime? Function()? timestamp,
+    FooObjectWithEveryNullableTypeNestedObjectDataData? Function()? data,
+  }) {
+    return FooObjectWithEveryNullableTypeNestedObjectData(
+      id: id != null ? id() : this.id,
+      timestamp: timestamp != null ? timestamp() : this.timestamp,
+      data: data != null ? data() : this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryNullableTypeNestedObjectData &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryNullableTypeNestedObjectData ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryNullableTypeNestedObjectDataData implements ArriModel {
+  final String? id;
+  final DateTime? timestamp;
+  const FooObjectWithEveryNullableTypeNestedObjectDataData({
+    required this.id,
+    required this.timestamp,
+  });
+
+  factory FooObjectWithEveryNullableTypeNestedObjectDataData.empty() {
+    return FooObjectWithEveryNullableTypeNestedObjectDataData(
+      id: null,
+      timestamp: null,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeNestedObjectDataData.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = nullableTypeFromDynamic<String>(_input_["id"]);
+    final timestamp = nullableDateTimeFromDynamic(_input_["timestamp"]);
+    return FooObjectWithEveryNullableTypeNestedObjectDataData(
+      id: id,
+      timestamp: timestamp,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeNestedObjectDataData.fromJsonString(
+      String input) {
+    return FooObjectWithEveryNullableTypeNestedObjectDataData.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp?.toUtc().toIso8601String(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp?.toUtc().toIso8601String()}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryNullableTypeNestedObjectDataData copyWith({
+    String? Function()? id,
+    DateTime? Function()? timestamp,
+  }) {
+    return FooObjectWithEveryNullableTypeNestedObjectDataData(
+      id: id != null ? id() : this.id,
+      timestamp: timestamp != null ? timestamp() : this.timestamp,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryNullableTypeNestedObjectDataData &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryNullableTypeNestedObjectDataData ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryNullableTypeNestedArrayElementElement
+    implements ArriModel {
+  final String? id;
+  final DateTime? timestamp;
+  const FooObjectWithEveryNullableTypeNestedArrayElementElement({
+    required this.id,
+    required this.timestamp,
+  });
+
+  factory FooObjectWithEveryNullableTypeNestedArrayElementElement.empty() {
+    return FooObjectWithEveryNullableTypeNestedArrayElementElement(
+      id: null,
+      timestamp: null,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeNestedArrayElementElement.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = nullableTypeFromDynamic<String>(_input_["id"]);
+    final timestamp = nullableDateTimeFromDynamic(_input_["timestamp"]);
+    return FooObjectWithEveryNullableTypeNestedArrayElementElement(
+      id: id,
+      timestamp: timestamp,
+    );
+  }
+
+  factory FooObjectWithEveryNullableTypeNestedArrayElementElement.fromJsonString(
+      String input) {
+    return FooObjectWithEveryNullableTypeNestedArrayElementElement.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp?.toUtc().toIso8601String(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp?.toUtc().toIso8601String()}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryNullableTypeNestedArrayElementElement copyWith({
+    String? Function()? id,
+    DateTime? Function()? timestamp,
+  }) {
+    return FooObjectWithEveryNullableTypeNestedArrayElementElement(
+      id: id != null ? id() : this.id,
+      timestamp: timestamp != null ? timestamp() : this.timestamp,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryNullableTypeNestedArrayElementElement &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryNullableTypeNestedArrayElementElement ${toJsonString()}";
+  }
+}
+
+class FooObjectWithPascalCaseKeys implements ArriModel {
+  final DateTime createdAt;
+  final String displayName;
+  final String? phoneNumber;
+  final String? emailAddress;
+  final bool? isAdmin;
+  const FooObjectWithPascalCaseKeys({
+    required this.createdAt,
+    required this.displayName,
+    required this.phoneNumber,
+    this.emailAddress,
+    this.isAdmin,
+  });
+
+  factory FooObjectWithPascalCaseKeys.empty() {
+    return FooObjectWithPascalCaseKeys(
+      createdAt: DateTime.now(),
+      displayName: "",
+      phoneNumber: null,
+    );
+  }
+
+  factory FooObjectWithPascalCaseKeys.fromJson(Map<String, dynamic> _input_) {
+    final createdAt = dateTimeFromDynamic(_input_["CreatedAt"], DateTime.now());
+    final displayName = typeFromDynamic<String>(_input_["DisplayName"], "");
+    final phoneNumber = nullableTypeFromDynamic<String>(_input_["PhoneNumber"]);
+    final emailAddress =
+        nullableTypeFromDynamic<String>(_input_["EmailAddress"]);
+    final isAdmin = nullableTypeFromDynamic<bool>(_input_["IsAdmin"]);
+    return FooObjectWithPascalCaseKeys(
+      createdAt: createdAt,
+      displayName: displayName,
+      phoneNumber: phoneNumber,
+      emailAddress: emailAddress,
+      isAdmin: isAdmin,
+    );
+  }
+
+  factory FooObjectWithPascalCaseKeys.fromJsonString(String input) {
+    return FooObjectWithPascalCaseKeys.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "CreatedAt": createdAt.toUtc().toIso8601String(),
+      "DisplayName": displayName,
+      "PhoneNumber": phoneNumber,
+    };
+    if (emailAddress != null) _output_["EmailAddress"] = emailAddress;
+    if (isAdmin != null) _output_["IsAdmin"] = isAdmin;
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("CreatedAt=${createdAt.toUtc().toIso8601String()}");
+    _queryParts_.add("DisplayName=$displayName");
+    _queryParts_.add("PhoneNumber=$phoneNumber");
+    if (emailAddress != null) _queryParts_.add("EmailAddress=$emailAddress");
+    if (isAdmin != null) _queryParts_.add("IsAdmin=$isAdmin");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithPascalCaseKeys copyWith({
+    DateTime? createdAt,
+    String? displayName,
+    String? Function()? phoneNumber,
+    String? Function()? emailAddress,
+    bool? Function()? isAdmin,
+  }) {
+    return FooObjectWithPascalCaseKeys(
+      createdAt: createdAt ?? this.createdAt,
+      displayName: displayName ?? this.displayName,
+      phoneNumber: phoneNumber != null ? phoneNumber() : this.phoneNumber,
+      emailAddress: emailAddress != null ? emailAddress() : this.emailAddress,
+      isAdmin: isAdmin != null ? isAdmin() : this.isAdmin,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        createdAt,
+        displayName,
+        phoneNumber,
+        emailAddress,
+        isAdmin,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithPascalCaseKeys &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithPascalCaseKeys ${toJsonString()}";
+  }
+}
+
+class FooObjectWithSnakeCaseKeys implements ArriModel {
+  final DateTime createdAt;
+  final String displayName;
+  final String? phoneNumber;
+  final String? emailAddress;
+  final bool? isAdmin;
+  const FooObjectWithSnakeCaseKeys({
+    required this.createdAt,
+    required this.displayName,
+    required this.phoneNumber,
+    this.emailAddress,
+    this.isAdmin,
+  });
+
+  factory FooObjectWithSnakeCaseKeys.empty() {
+    return FooObjectWithSnakeCaseKeys(
+      createdAt: DateTime.now(),
+      displayName: "",
+      phoneNumber: null,
+    );
+  }
+
+  factory FooObjectWithSnakeCaseKeys.fromJson(Map<String, dynamic> _input_) {
+    final createdAt =
+        dateTimeFromDynamic(_input_["created_at"], DateTime.now());
+    final displayName = typeFromDynamic<String>(_input_["display_name"], "");
+    final phoneNumber =
+        nullableTypeFromDynamic<String>(_input_["phone_number"]);
+    final emailAddress =
+        nullableTypeFromDynamic<String>(_input_["email_address"]);
+    final isAdmin = nullableTypeFromDynamic<bool>(_input_["is_admin"]);
+    return FooObjectWithSnakeCaseKeys(
+      createdAt: createdAt,
+      displayName: displayName,
+      phoneNumber: phoneNumber,
+      emailAddress: emailAddress,
+      isAdmin: isAdmin,
+    );
+  }
+
+  factory FooObjectWithSnakeCaseKeys.fromJsonString(String input) {
+    return FooObjectWithSnakeCaseKeys.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "created_at": createdAt.toUtc().toIso8601String(),
+      "display_name": displayName,
+      "phone_number": phoneNumber,
+    };
+    if (emailAddress != null) _output_["email_address"] = emailAddress;
+    if (isAdmin != null) _output_["is_admin"] = isAdmin;
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("created_at=${createdAt.toUtc().toIso8601String()}");
+    _queryParts_.add("display_name=$displayName");
+    _queryParts_.add("phone_number=$phoneNumber");
+    if (emailAddress != null) _queryParts_.add("email_address=$emailAddress");
+    if (isAdmin != null) _queryParts_.add("is_admin=$isAdmin");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithSnakeCaseKeys copyWith({
+    DateTime? createdAt,
+    String? displayName,
+    String? Function()? phoneNumber,
+    String? Function()? emailAddress,
+    bool? Function()? isAdmin,
+  }) {
+    return FooObjectWithSnakeCaseKeys(
+      createdAt: createdAt ?? this.createdAt,
+      displayName: displayName ?? this.displayName,
+      phoneNumber: phoneNumber != null ? phoneNumber() : this.phoneNumber,
+      emailAddress: emailAddress != null ? emailAddress() : this.emailAddress,
+      isAdmin: isAdmin != null ? isAdmin() : this.isAdmin,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        createdAt,
+        displayName,
+        phoneNumber,
+        emailAddress,
+        isAdmin,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithSnakeCaseKeys &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithSnakeCaseKeys ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryOptionalType implements ArriModel {
+  final dynamic any;
+  final bool? boolean;
+  final String? string;
+  final DateTime? timestamp;
+  final double? float32;
+  final double? float64;
+  final int? int8;
+  final int? uint8;
+  final int? int16;
+  final int? uint16;
+  final int? int32;
+  final int? uint32;
+  final BigInt? int64;
+  final BigInt? uint64;
+  final FooObjectWithEveryOptionalTypeEnumerator? enumerator;
+  final List<bool>? array;
+  final FooObjectWithEveryOptionalTypeObject? object;
+  final Map<String, BigInt>? record;
+  final FooObjectWithEveryOptionalTypeDiscriminator? discriminator;
+  final FooObjectWithEveryOptionalTypeNestedObject? nestedObject;
+  final List<List<FooObjectWithEveryOptionalTypeNestedArrayElementElement>>?
+      nestedArray;
+  const FooObjectWithEveryOptionalType({
+    this.any,
+    this.boolean,
+    this.string,
+    this.timestamp,
+    this.float32,
+    this.float64,
+    this.int8,
+    this.uint8,
+    this.int16,
+    this.uint16,
+    this.int32,
+    this.uint32,
+    this.int64,
+    this.uint64,
+    this.enumerator,
+    this.array,
+    this.object,
+    this.record,
+    this.discriminator,
+    this.nestedObject,
+    this.nestedArray,
+  });
+
+  factory FooObjectWithEveryOptionalType.empty() {
+    return FooObjectWithEveryOptionalType();
+  }
+
+  factory FooObjectWithEveryOptionalType.fromJson(
+      Map<String, dynamic> _input_) {
+    final any = _input_["any"];
+    final boolean = nullableTypeFromDynamic<bool>(_input_["boolean"]);
+    final string = nullableTypeFromDynamic<String>(_input_["string"]);
+    final timestamp = nullableDateTimeFromDynamic(_input_["timestamp"]);
+    final float32 = nullableDoubleFromDynamic(_input_["float32"]);
+    final float64 = nullableDoubleFromDynamic(_input_["float64"]);
+    final int8 = nullableIntFromDynamic(_input_["int8"]);
+    final uint8 = nullableIntFromDynamic(_input_["uint8"]);
+    final int16 = nullableIntFromDynamic(_input_["int16"]);
+    final uint16 = nullableIntFromDynamic(_input_["uint16"]);
+    final int32 = nullableIntFromDynamic(_input_["int32"]);
+    final uint32 = nullableIntFromDynamic(_input_["uint32"]);
+    final int64 = nullableBigIntFromDynamic(_input_["int64"]);
+    final uint64 = nullableBigIntFromDynamic(_input_["uint64"]);
+    final enumerator = _input_["enumerator"] is String
+        ? FooObjectWithEveryOptionalTypeEnumerator.fromString(
+            _input_["enumerator"])
+        : null;
+    final array = _input_["array"] is List
+        ? (_input_["array"] as List)
+            .map((_el_) => typeFromDynamic<bool>(_el_, false))
+            .toList()
+        : null;
+    final object = _input_["object"] is Map<String, dynamic>
+        ? FooObjectWithEveryOptionalTypeObject.fromJson(_input_["object"])
+        : null;
+    final record = _input_["record"] is Map<String, dynamic>
+        ? (_input_["record"] as Map<String, dynamic>).map(
+            (_key_, _val_) => MapEntry(
+              _key_,
+              bigIntFromDynamic(_val_, BigInt.zero),
+            ),
+          )
+        : null;
+    final discriminator = _input_["discriminator"] is Map<String, dynamic>
+        ? FooObjectWithEveryOptionalTypeDiscriminator.fromJson(
+            _input_["discriminator"])
+        : null;
+    final nestedObject = _input_["nestedObject"] is Map<String, dynamic>
+        ? FooObjectWithEveryOptionalTypeNestedObject.fromJson(
+            _input_["nestedObject"])
+        : null;
+    final nestedArray = _input_["nestedArray"] is List
+        ? (_input_["nestedArray"] as List)
+            .map((_el_) => _el_ is List
+                ? (_el_ as List)
+                    .map((_el_) => _el_ is Map<String, dynamic>
+                        ? FooObjectWithEveryOptionalTypeNestedArrayElementElement
+                            .fromJson(_el_)
+                        : FooObjectWithEveryOptionalTypeNestedArrayElementElement
+                            .empty())
+                    .toList()
+                : <FooObjectWithEveryOptionalTypeNestedArrayElementElement>[])
+            .toList()
+        : null;
+    return FooObjectWithEveryOptionalType(
+      any: any,
+      boolean: boolean,
+      string: string,
+      timestamp: timestamp,
+      float32: float32,
+      float64: float64,
+      int8: int8,
+      uint8: uint8,
+      int16: int16,
+      uint16: uint16,
+      int32: int32,
+      uint32: uint32,
+      int64: int64,
+      uint64: uint64,
+      enumerator: enumerator,
+      array: array,
+      object: object,
+      record: record,
+      discriminator: discriminator,
+      nestedObject: nestedObject,
+      nestedArray: nestedArray,
+    );
+  }
+
+  factory FooObjectWithEveryOptionalType.fromJsonString(String input) {
+    return FooObjectWithEveryOptionalType.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{};
+    if (any != null) _output_["any"] = any;
+    if (boolean != null) _output_["boolean"] = boolean;
+    if (string != null) _output_["string"] = string;
+    if (timestamp != null)
+      _output_["timestamp"] = timestamp!.toUtc().toIso8601String();
+    if (float32 != null) _output_["float32"] = float32;
+    if (float64 != null) _output_["float64"] = float64;
+    if (int8 != null) _output_["int8"] = int8;
+    if (uint8 != null) _output_["uint8"] = uint8;
+    if (int16 != null) _output_["int16"] = int16;
+    if (uint16 != null) _output_["uint16"] = uint16;
+    if (int32 != null) _output_["int32"] = int32;
+    if (uint32 != null) _output_["uint32"] = uint32;
+    if (int64 != null) _output_["int64"] = int64!.toString();
+    if (uint64 != null) _output_["uint64"] = uint64!.toString();
+    if (enumerator != null) _output_["enumerator"] = enumerator!.serialValue;
+    if (array != null) _output_["array"] = array!.map((_el_) => _el_).toList();
+    if (object != null) _output_["object"] = object!.toJson();
+    if (record != null)
+      _output_["record"] = record!.map(
+        (_key_, _val_) => MapEntry(
+          _key_,
+          _val_.toString(),
+        ),
+      );
+    if (discriminator != null)
+      _output_["discriminator"] = discriminator!.toJson();
+    if (nestedObject != null) _output_["nestedObject"] = nestedObject!.toJson();
+    if (nestedArray != null)
+      _output_["nestedArray"] = nestedArray!
+          .map((_el_) => _el_.map((_el_) => _el_.toJson()).toList())
+          .toList();
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    print(
+        "[WARNING] any's cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/any.");
+    if (boolean != null) _queryParts_.add("boolean=$boolean");
+    if (string != null) _queryParts_.add("string=$string");
+    if (timestamp != null)
+      _queryParts_.add("timestamp=${timestamp!.toUtc().toIso8601String()}");
+    if (float32 != null) _queryParts_.add("float32=$float32");
+    if (float64 != null) _queryParts_.add("float64=$float64");
+    if (int8 != null) _queryParts_.add("int8=$int8");
+    if (uint8 != null) _queryParts_.add("uint8=$uint8");
+    if (int16 != null) _queryParts_.add("int16=$int16");
+    if (uint16 != null) _queryParts_.add("uint16=$uint16");
+    if (int32 != null) _queryParts_.add("int32=$int32");
+    if (uint32 != null) _queryParts_.add("uint32=$uint32");
+    if (int64 != null) _queryParts_.add("int64=$int64");
+    if (uint64 != null) _queryParts_.add("uint64=$uint64");
+    if (enumerator != null)
+      _queryParts_.add("enumerator=${enumerator!.serialValue}");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/array.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/object.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/record.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/discriminator.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/nestedObject.");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/nestedArray.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryOptionalType copyWith({
+    dynamic Function()? any,
+    bool? Function()? boolean,
+    String? Function()? string,
+    DateTime? Function()? timestamp,
+    double? Function()? float32,
+    double? Function()? float64,
+    int? Function()? int8,
+    int? Function()? uint8,
+    int? Function()? int16,
+    int? Function()? uint16,
+    int? Function()? int32,
+    int? Function()? uint32,
+    BigInt? Function()? int64,
+    BigInt? Function()? uint64,
+    FooObjectWithEveryOptionalTypeEnumerator? Function()? enumerator,
+    List<bool>? Function()? array,
+    FooObjectWithEveryOptionalTypeObject? Function()? object,
+    Map<String, BigInt>? Function()? record,
+    FooObjectWithEveryOptionalTypeDiscriminator? Function()? discriminator,
+    FooObjectWithEveryOptionalTypeNestedObject? Function()? nestedObject,
+    List<List<FooObjectWithEveryOptionalTypeNestedArrayElementElement>>?
+            Function()?
+        nestedArray,
+  }) {
+    return FooObjectWithEveryOptionalType(
+      any: any != null ? any() : this.any,
+      boolean: boolean != null ? boolean() : this.boolean,
+      string: string != null ? string() : this.string,
+      timestamp: timestamp != null ? timestamp() : this.timestamp,
+      float32: float32 != null ? float32() : this.float32,
+      float64: float64 != null ? float64() : this.float64,
+      int8: int8 != null ? int8() : this.int8,
+      uint8: uint8 != null ? uint8() : this.uint8,
+      int16: int16 != null ? int16() : this.int16,
+      uint16: uint16 != null ? uint16() : this.uint16,
+      int32: int32 != null ? int32() : this.int32,
+      uint32: uint32 != null ? uint32() : this.uint32,
+      int64: int64 != null ? int64() : this.int64,
+      uint64: uint64 != null ? uint64() : this.uint64,
+      enumerator: enumerator != null ? enumerator() : this.enumerator,
+      array: array != null ? array() : this.array,
+      object: object != null ? object() : this.object,
+      record: record != null ? record() : this.record,
+      discriminator:
+          discriminator != null ? discriminator() : this.discriminator,
+      nestedObject: nestedObject != null ? nestedObject() : this.nestedObject,
+      nestedArray: nestedArray != null ? nestedArray() : this.nestedArray,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        any,
+        boolean,
+        string,
+        timestamp,
+        float32,
+        float64,
+        int8,
+        uint8,
+        int16,
+        uint16,
+        int32,
+        uint32,
+        int64,
+        uint64,
+        enumerator,
+        array,
+        object,
+        record,
+        discriminator,
+        nestedObject,
+        nestedArray,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryOptionalType &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryOptionalType ${toJsonString()}";
+  }
+}
+
+enum FooObjectWithEveryOptionalTypeEnumerator
+    implements Comparable<FooObjectWithEveryOptionalTypeEnumerator> {
+  a("A"),
+  b("B"),
+  c("C");
+
+  const FooObjectWithEveryOptionalTypeEnumerator(this.serialValue);
+  final String serialValue;
+
+  factory FooObjectWithEveryOptionalTypeEnumerator.fromString(String input) {
+    for (final val in values) {
+      if (val.serialValue == input) {
+        return val;
+      }
+    }
+    return a;
+  }
+
+  @override
+  int compareTo(FooObjectWithEveryOptionalTypeEnumerator other) =>
+      name.compareTo(other.name);
+}
+
+class FooObjectWithEveryOptionalTypeObject implements ArriModel {
+  final String string;
+  final bool boolean;
+  final DateTime timestamp;
+  const FooObjectWithEveryOptionalTypeObject({
+    required this.string,
+    required this.boolean,
+    required this.timestamp,
+  });
+
+  factory FooObjectWithEveryOptionalTypeObject.empty() {
+    return FooObjectWithEveryOptionalTypeObject(
+      string: "",
+      boolean: false,
+      timestamp: DateTime.now(),
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeObject.fromJson(
+      Map<String, dynamic> _input_) {
+    final string = typeFromDynamic<String>(_input_["string"], "");
+    final boolean = typeFromDynamic<bool>(_input_["boolean"], false);
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    return FooObjectWithEveryOptionalTypeObject(
+      string: string,
+      boolean: boolean,
+      timestamp: timestamp,
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeObject.fromJsonString(String input) {
+    return FooObjectWithEveryOptionalTypeObject.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "string": string,
+      "boolean": boolean,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("string=$string");
+    _queryParts_.add("boolean=$boolean");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryOptionalTypeObject copyWith({
+    String? string,
+    bool? boolean,
+    DateTime? timestamp,
+  }) {
+    return FooObjectWithEveryOptionalTypeObject(
+      string: string ?? this.string,
+      boolean: boolean ?? this.boolean,
+      timestamp: timestamp ?? this.timestamp,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        string,
+        boolean,
+        timestamp,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryOptionalTypeObject &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryOptionalTypeObject ${toJsonString()}";
+  }
+}
+
+sealed class FooObjectWithEveryOptionalTypeDiscriminator implements ArriModel {
+  String get type;
+  const FooObjectWithEveryOptionalTypeDiscriminator();
+
+  factory FooObjectWithEveryOptionalTypeDiscriminator.empty() {
+    return FooObjectWithEveryOptionalTypeDiscriminatorA.empty();
+  }
+
+  factory FooObjectWithEveryOptionalTypeDiscriminator.fromJson(
+      Map<String, dynamic> _input_) {
+    final type = typeFromDynamic<String>(_input_["type"], "");
+    switch (type) {
+      case "A":
+        return FooObjectWithEveryOptionalTypeDiscriminatorA.fromJson(_input_);
+      case "B":
+        return FooObjectWithEveryOptionalTypeDiscriminatorB.fromJson(_input_);
+      default:
+        return FooObjectWithEveryOptionalTypeDiscriminator.empty();
+    }
+  }
+
+  factory FooObjectWithEveryOptionalTypeDiscriminator.fromJsonString(
+      String input) {
+    return FooObjectWithEveryOptionalTypeDiscriminator.fromJson(
+        json.decode(input));
+  }
+}
+
+class FooObjectWithEveryOptionalTypeDiscriminatorA
+    implements FooObjectWithEveryOptionalTypeDiscriminator {
+  final String title;
+  const FooObjectWithEveryOptionalTypeDiscriminatorA({
+    required this.title,
+  });
+
+  @override
+  String get type => "A";
+
+  factory FooObjectWithEveryOptionalTypeDiscriminatorA.empty() {
+    return FooObjectWithEveryOptionalTypeDiscriminatorA(
+      title: "",
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeDiscriminatorA.fromJson(
+      Map<String, dynamic> _input_) {
+    final title = typeFromDynamic<String>(_input_["title"], "");
+    return FooObjectWithEveryOptionalTypeDiscriminatorA(
+      title: title,
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeDiscriminatorA.fromJsonString(
+      String input) {
+    return FooObjectWithEveryOptionalTypeDiscriminatorA.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "title": title,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    _queryParts_.add("title=$title");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryOptionalTypeDiscriminatorA copyWith({
+    String? title,
+  }) {
+    return FooObjectWithEveryOptionalTypeDiscriminatorA(
+      title: title ?? this.title,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        title,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryOptionalTypeDiscriminatorA &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryOptionalTypeDiscriminatorA ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryOptionalTypeDiscriminatorB
+    implements FooObjectWithEveryOptionalTypeDiscriminator {
+  final String title;
+  final String description;
+  const FooObjectWithEveryOptionalTypeDiscriminatorB({
+    required this.title,
+    required this.description,
+  });
+
+  @override
+  String get type => "B";
+
+  factory FooObjectWithEveryOptionalTypeDiscriminatorB.empty() {
+    return FooObjectWithEveryOptionalTypeDiscriminatorB(
+      title: "",
+      description: "",
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeDiscriminatorB.fromJson(
+      Map<String, dynamic> _input_) {
+    final title = typeFromDynamic<String>(_input_["title"], "");
+    final description = typeFromDynamic<String>(_input_["description"], "");
+    return FooObjectWithEveryOptionalTypeDiscriminatorB(
+      title: title,
+      description: description,
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeDiscriminatorB.fromJsonString(
+      String input) {
+    return FooObjectWithEveryOptionalTypeDiscriminatorB.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "title": title,
+      "description": description,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    _queryParts_.add("title=$title");
+    _queryParts_.add("description=$description");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryOptionalTypeDiscriminatorB copyWith({
+    String? title,
+    String? description,
+  }) {
+    return FooObjectWithEveryOptionalTypeDiscriminatorB(
+      title: title ?? this.title,
+      description: description ?? this.description,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        title,
+        description,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryOptionalTypeDiscriminatorB &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryOptionalTypeDiscriminatorB ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryOptionalTypeNestedObject implements ArriModel {
+  final String id;
+  final DateTime timestamp;
+  final FooObjectWithEveryOptionalTypeNestedObjectData data;
+  const FooObjectWithEveryOptionalTypeNestedObject({
+    required this.id,
+    required this.timestamp,
+    required this.data,
+  });
+
+  factory FooObjectWithEveryOptionalTypeNestedObject.empty() {
+    return FooObjectWithEveryOptionalTypeNestedObject(
+      id: "",
+      timestamp: DateTime.now(),
+      data: FooObjectWithEveryOptionalTypeNestedObjectData.empty(),
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeNestedObject.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    final data = _input_["data"] is Map<String, dynamic>
+        ? FooObjectWithEveryOptionalTypeNestedObjectData.fromJson(
+            _input_["data"])
+        : FooObjectWithEveryOptionalTypeNestedObjectData.empty();
+    return FooObjectWithEveryOptionalTypeNestedObject(
+      id: id,
+      timestamp: timestamp,
+      data: data,
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeNestedObject.fromJsonString(
+      String input) {
+    return FooObjectWithEveryOptionalTypeNestedObject.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+      "data": data.toJson(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalTypeNestedObject/data.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryOptionalTypeNestedObject copyWith({
+    String? id,
+    DateTime? timestamp,
+    FooObjectWithEveryOptionalTypeNestedObjectData? data,
+  }) {
+    return FooObjectWithEveryOptionalTypeNestedObject(
+      id: id ?? this.id,
+      timestamp: timestamp ?? this.timestamp,
+      data: data ?? this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryOptionalTypeNestedObject &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryOptionalTypeNestedObject ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryOptionalTypeNestedObjectData implements ArriModel {
+  final String id;
+  final DateTime timestamp;
+  final FooObjectWithEveryOptionalTypeNestedObjectDataData data;
+  const FooObjectWithEveryOptionalTypeNestedObjectData({
+    required this.id,
+    required this.timestamp,
+    required this.data,
+  });
+
+  factory FooObjectWithEveryOptionalTypeNestedObjectData.empty() {
+    return FooObjectWithEveryOptionalTypeNestedObjectData(
+      id: "",
+      timestamp: DateTime.now(),
+      data: FooObjectWithEveryOptionalTypeNestedObjectDataData.empty(),
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeNestedObjectData.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    final data = _input_["data"] is Map<String, dynamic>
+        ? FooObjectWithEveryOptionalTypeNestedObjectDataData.fromJson(
+            _input_["data"])
+        : FooObjectWithEveryOptionalTypeNestedObjectDataData.empty();
+    return FooObjectWithEveryOptionalTypeNestedObjectData(
+      id: id,
+      timestamp: timestamp,
+      data: data,
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeNestedObjectData.fromJsonString(
+      String input) {
+    return FooObjectWithEveryOptionalTypeNestedObjectData.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+      "data": data.toJson(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalTypeNestedObjectData/data.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryOptionalTypeNestedObjectData copyWith({
+    String? id,
+    DateTime? timestamp,
+    FooObjectWithEveryOptionalTypeNestedObjectDataData? data,
+  }) {
+    return FooObjectWithEveryOptionalTypeNestedObjectData(
+      id: id ?? this.id,
+      timestamp: timestamp ?? this.timestamp,
+      data: data ?? this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryOptionalTypeNestedObjectData &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryOptionalTypeNestedObjectData ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryOptionalTypeNestedObjectDataData implements ArriModel {
+  final String id;
+  final DateTime timestamp;
+  const FooObjectWithEveryOptionalTypeNestedObjectDataData({
+    required this.id,
+    required this.timestamp,
+  });
+
+  factory FooObjectWithEveryOptionalTypeNestedObjectDataData.empty() {
+    return FooObjectWithEveryOptionalTypeNestedObjectDataData(
+      id: "",
+      timestamp: DateTime.now(),
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeNestedObjectDataData.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    return FooObjectWithEveryOptionalTypeNestedObjectDataData(
+      id: id,
+      timestamp: timestamp,
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeNestedObjectDataData.fromJsonString(
+      String input) {
+    return FooObjectWithEveryOptionalTypeNestedObjectDataData.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryOptionalTypeNestedObjectDataData copyWith({
+    String? id,
+    DateTime? timestamp,
+  }) {
+    return FooObjectWithEveryOptionalTypeNestedObjectDataData(
+      id: id ?? this.id,
+      timestamp: timestamp ?? this.timestamp,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryOptionalTypeNestedObjectDataData &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryOptionalTypeNestedObjectDataData ${toJsonString()}";
+  }
+}
+
+class FooObjectWithEveryOptionalTypeNestedArrayElementElement
+    implements ArriModel {
+  final String id;
+  final DateTime timestamp;
+  const FooObjectWithEveryOptionalTypeNestedArrayElementElement({
+    required this.id,
+    required this.timestamp,
+  });
+
+  factory FooObjectWithEveryOptionalTypeNestedArrayElementElement.empty() {
+    return FooObjectWithEveryOptionalTypeNestedArrayElementElement(
+      id: "",
+      timestamp: DateTime.now(),
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeNestedArrayElementElement.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final timestamp = dateTimeFromDynamic(_input_["timestamp"], DateTime.now());
+    return FooObjectWithEveryOptionalTypeNestedArrayElementElement(
+      id: id,
+      timestamp: timestamp,
+    );
+  }
+
+  factory FooObjectWithEveryOptionalTypeNestedArrayElementElement.fromJsonString(
+      String input) {
+    return FooObjectWithEveryOptionalTypeNestedArrayElementElement.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "timestamp": timestamp.toUtc().toIso8601String(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("timestamp=${timestamp.toUtc().toIso8601String()}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooObjectWithEveryOptionalTypeNestedArrayElementElement copyWith({
+    String? id,
+    DateTime? timestamp,
+  }) {
+    return FooObjectWithEveryOptionalTypeNestedArrayElementElement(
+      id: id ?? this.id,
+      timestamp: timestamp ?? this.timestamp,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        timestamp,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooObjectWithEveryOptionalTypeNestedArrayElementElement &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooObjectWithEveryOptionalTypeNestedArrayElementElement ${toJsonString()}";
+  }
+}
+
+class FooRecursiveObject implements ArriModel {
+  final FooRecursiveObject? left;
+  final FooRecursiveObject? right;
+  final String value;
+  const FooRecursiveObject({
+    required this.left,
+    required this.right,
+    required this.value,
+  });
+
+  factory FooRecursiveObject.empty() {
+    return FooRecursiveObject(
+      left: null,
+      right: null,
+      value: "",
+    );
+  }
+
+  factory FooRecursiveObject.fromJson(Map<String, dynamic> _input_) {
+    final left = _input_["left"] is Map<String, dynamic>
+        ? FooRecursiveObject.fromJson(_input_["left"])
+        : null;
+    final right = _input_["right"] is Map<String, dynamic>
+        ? FooRecursiveObject.fromJson(_input_["right"])
+        : null;
+    final value = typeFromDynamic<String>(_input_["value"], "");
+    return FooRecursiveObject(
+      left: left,
+      right: right,
+      value: value,
+    );
+  }
+
+  factory FooRecursiveObject.fromJsonString(String input) {
+    return FooRecursiveObject.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "left": left?.toJson(),
+      "right": right?.toJson(),
+      "value": value,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /RecursiveObject/left.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /RecursiveObject/right.");
+    _queryParts_.add("value=$value");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooRecursiveObject copyWith({
+    FooRecursiveObject? Function()? left,
+    FooRecursiveObject? Function()? right,
+    String? value,
+  }) {
+    return FooRecursiveObject(
+      left: left != null ? left() : this.left,
+      right: right != null ? right() : this.right,
+      value: value ?? this.value,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        left,
+        right,
+        value,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooRecursiveObject && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooRecursiveObject ${toJsonString()}";
+  }
+}
+
+sealed class FooRecursiveUnion implements ArriModel {
+  String get type;
+  const FooRecursiveUnion();
+
+  factory FooRecursiveUnion.empty() {
+    return FooRecursiveUnionChild.empty();
+  }
+
+  factory FooRecursiveUnion.fromJson(Map<String, dynamic> _input_) {
+    final type = typeFromDynamic<String>(_input_["type"], "");
+    switch (type) {
+      case "CHILD":
+        return FooRecursiveUnionChild.fromJson(_input_);
+      case "CHILDREN":
+        return FooRecursiveUnionChildren.fromJson(_input_);
+      case "TEXT":
+        return FooRecursiveUnionText.fromJson(_input_);
+      case "SHAPE":
+        return FooRecursiveUnionShape.fromJson(_input_);
+      default:
+        return FooRecursiveUnion.empty();
+    }
+  }
+
+  factory FooRecursiveUnion.fromJsonString(String input) {
+    return FooRecursiveUnion.fromJson(json.decode(input));
+  }
+}
+
+/// Child node
+class FooRecursiveUnionChild implements FooRecursiveUnion {
+  final FooRecursiveUnion data;
+  const FooRecursiveUnionChild({
+    required this.data,
+  });
+
+  @override
+  String get type => "CHILD";
+
+  factory FooRecursiveUnionChild.empty() {
+    return FooRecursiveUnionChild(
+      data: FooRecursiveUnion.empty(),
+    );
+  }
+
+  factory FooRecursiveUnionChild.fromJson(Map<String, dynamic> _input_) {
+    final data = _input_["data"] is Map<String, dynamic>
+        ? FooRecursiveUnion.fromJson(_input_["data"])
+        : FooRecursiveUnion.empty();
+    return FooRecursiveUnionChild(
+      data: data,
+    );
+  }
+
+  factory FooRecursiveUnionChild.fromJsonString(String input) {
+    return FooRecursiveUnionChild.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "data": data.toJson(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /RecursiveUnionChild/data.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooRecursiveUnionChild copyWith({
+    FooRecursiveUnion? data,
+  }) {
+    return FooRecursiveUnionChild(
+      data: data ?? this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooRecursiveUnionChild && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooRecursiveUnionChild ${toJsonString()}";
+  }
+}
+
+/// List of children node
+class FooRecursiveUnionChildren implements FooRecursiveUnion {
+  final List<FooRecursiveUnion> data;
+  const FooRecursiveUnionChildren({
+    required this.data,
+  });
+
+  @override
+  String get type => "CHILDREN";
+
+  factory FooRecursiveUnionChildren.empty() {
+    return FooRecursiveUnionChildren(
+      data: [],
+    );
+  }
+
+  factory FooRecursiveUnionChildren.fromJson(Map<String, dynamic> _input_) {
+    final data = _input_["data"] is List
+        ? (_input_["data"] as List)
+            .map((_el_) => _el_ is Map<String, dynamic>
+                ? FooRecursiveUnion.fromJson(_el_)
+                : FooRecursiveUnion.empty())
+            .toList()
+        : <FooRecursiveUnion>[];
+    return FooRecursiveUnionChildren(
+      data: data,
+    );
+  }
+
+  factory FooRecursiveUnionChildren.fromJsonString(String input) {
+    return FooRecursiveUnionChildren.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "data": data.map((_el_) => _el_.toJson()).toList(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /RecursiveUnionChildren/data.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooRecursiveUnionChildren copyWith({
+    List<FooRecursiveUnion>? data,
+  }) {
+    return FooRecursiveUnionChildren(
+      data: data ?? this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooRecursiveUnionChildren &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooRecursiveUnionChildren ${toJsonString()}";
+  }
+}
+
+/// Text node
+class FooRecursiveUnionText implements FooRecursiveUnion {
+  final String data;
+  const FooRecursiveUnionText({
+    required this.data,
+  });
+
+  @override
+  String get type => "TEXT";
+
+  factory FooRecursiveUnionText.empty() {
+    return FooRecursiveUnionText(
+      data: "",
+    );
+  }
+
+  factory FooRecursiveUnionText.fromJson(Map<String, dynamic> _input_) {
+    final data = typeFromDynamic<String>(_input_["data"], "");
+    return FooRecursiveUnionText(
+      data: data,
+    );
+  }
+
+  factory FooRecursiveUnionText.fromJsonString(String input) {
+    return FooRecursiveUnionText.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "data": data,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    _queryParts_.add("data=$data");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooRecursiveUnionText copyWith({
+    String? data,
+  }) {
+    return FooRecursiveUnionText(
+      data: data ?? this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooRecursiveUnionText && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooRecursiveUnionText ${toJsonString()}";
+  }
+}
+
+/// Shape node
+class FooRecursiveUnionShape implements FooRecursiveUnion {
+  final FooRecursiveUnionShapeData data;
+  const FooRecursiveUnionShape({
+    required this.data,
+  });
+
+  @override
+  String get type => "SHAPE";
+
+  factory FooRecursiveUnionShape.empty() {
+    return FooRecursiveUnionShape(
+      data: FooRecursiveUnionShapeData.empty(),
+    );
+  }
+
+  factory FooRecursiveUnionShape.fromJson(Map<String, dynamic> _input_) {
+    final data = _input_["data"] is Map<String, dynamic>
+        ? FooRecursiveUnionShapeData.fromJson(_input_["data"])
+        : FooRecursiveUnionShapeData.empty();
+    return FooRecursiveUnionShape(
+      data: data,
+    );
+  }
+
+  factory FooRecursiveUnionShape.fromJsonString(String input) {
+    return FooRecursiveUnionShape.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "type": type,
+      "data": data.toJson(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("type=$type");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /RecursiveUnionShape/data.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooRecursiveUnionShape copyWith({
+    FooRecursiveUnionShapeData? data,
+  }) {
+    return FooRecursiveUnionShape(
+      data: data ?? this.data,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        data,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooRecursiveUnionShape && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooRecursiveUnionShape ${toJsonString()}";
+  }
+}
+
+class FooRecursiveUnionShapeData implements ArriModel {
+  final double width;
+  final double height;
+  final String color;
+  const FooRecursiveUnionShapeData({
+    required this.width,
+    required this.height,
+    required this.color,
+  });
+
+  factory FooRecursiveUnionShapeData.empty() {
+    return FooRecursiveUnionShapeData(
+      width: 0.0,
+      height: 0.0,
+      color: "",
+    );
+  }
+
+  factory FooRecursiveUnionShapeData.fromJson(Map<String, dynamic> _input_) {
+    final width = doubleFromDynamic(_input_["width"], 0.0);
+    final height = doubleFromDynamic(_input_["height"], 0.0);
+    final color = typeFromDynamic<String>(_input_["color"], "");
+    return FooRecursiveUnionShapeData(
+      width: width,
+      height: height,
+      color: color,
+    );
+  }
+
+  factory FooRecursiveUnionShapeData.fromJsonString(String input) {
+    return FooRecursiveUnionShapeData.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "width": width,
+      "height": height,
+      "color": color,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("width=$width");
+    _queryParts_.add("height=$height");
+    _queryParts_.add("color=$color");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooRecursiveUnionShapeData copyWith({
+    double? width,
+    double? height,
+    String? color,
+  }) {
+    return FooRecursiveUnionShapeData(
+      width: width ?? this.width,
+      height: height ?? this.height,
+      color: color ?? this.color,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        width,
+        height,
+        color,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooRecursiveUnionShapeData &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooRecursiveUnionShapeData ${toJsonString()}";
+  }
+}
+
+class FooAutoReconnectParams implements ArriModel {
+  final int messageCount;
+  const FooAutoReconnectParams({
+    required this.messageCount,
+  });
+
+  factory FooAutoReconnectParams.empty() {
+    return FooAutoReconnectParams(
+      messageCount: 0,
+    );
+  }
+
+  factory FooAutoReconnectParams.fromJson(Map<String, dynamic> _input_) {
+    final messageCount = intFromDynamic(_input_["messageCount"], 0);
+    return FooAutoReconnectParams(
+      messageCount: messageCount,
+    );
+  }
+
+  factory FooAutoReconnectParams.fromJsonString(String input) {
+    return FooAutoReconnectParams.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "messageCount": messageCount,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("messageCount=$messageCount");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooAutoReconnectParams copyWith({
+    int? messageCount,
+  }) {
+    return FooAutoReconnectParams(
+      messageCount: messageCount ?? this.messageCount,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        messageCount,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooAutoReconnectParams && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooAutoReconnectParams ${toJsonString()}";
+  }
+}
+
+class FooAutoReconnectResponse implements ArriModel {
+  final int count;
+  final String message;
+  const FooAutoReconnectResponse({
+    required this.count,
+    required this.message,
+  });
+
+  factory FooAutoReconnectResponse.empty() {
+    return FooAutoReconnectResponse(
+      count: 0,
+      message: "",
+    );
+  }
+
+  factory FooAutoReconnectResponse.fromJson(Map<String, dynamic> _input_) {
+    final count = intFromDynamic(_input_["count"], 0);
+    final message = typeFromDynamic<String>(_input_["message"], "");
+    return FooAutoReconnectResponse(
+      count: count,
+      message: message,
+    );
+  }
+
+  factory FooAutoReconnectResponse.fromJsonString(String input) {
+    return FooAutoReconnectResponse.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "count": count,
+      "message": message,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("count=$count");
+    _queryParts_.add("message=$message");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooAutoReconnectResponse copyWith({
+    int? count,
+    String? message,
+  }) {
+    return FooAutoReconnectResponse(
+      count: count ?? this.count,
+      message: message ?? this.message,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        count,
+        message,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooAutoReconnectResponse &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooAutoReconnectResponse ${toJsonString()}";
+  }
+}
+
+class FooStreamConnectionErrorTestParams implements ArriModel {
+  final int statusCode;
+  final String statusMessage;
+  const FooStreamConnectionErrorTestParams({
+    required this.statusCode,
+    required this.statusMessage,
+  });
+
+  factory FooStreamConnectionErrorTestParams.empty() {
+    return FooStreamConnectionErrorTestParams(
+      statusCode: 0,
+      statusMessage: "",
+    );
+  }
+
+  factory FooStreamConnectionErrorTestParams.fromJson(
+      Map<String, dynamic> _input_) {
+    final statusCode = intFromDynamic(_input_["statusCode"], 0);
+    final statusMessage = typeFromDynamic<String>(_input_["statusMessage"], "");
+    return FooStreamConnectionErrorTestParams(
+      statusCode: statusCode,
+      statusMessage: statusMessage,
+    );
+  }
+
+  factory FooStreamConnectionErrorTestParams.fromJsonString(String input) {
+    return FooStreamConnectionErrorTestParams.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "statusCode": statusCode,
+      "statusMessage": statusMessage,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("statusCode=$statusCode");
+    _queryParts_.add("statusMessage=$statusMessage");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooStreamConnectionErrorTestParams copyWith({
+    int? statusCode,
+    String? statusMessage,
+  }) {
+    return FooStreamConnectionErrorTestParams(
+      statusCode: statusCode ?? this.statusCode,
+      statusMessage: statusMessage ?? this.statusMessage,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        statusCode,
+        statusMessage,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooStreamConnectionErrorTestParams &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooStreamConnectionErrorTestParams ${toJsonString()}";
+  }
+}
+
+class FooStreamConnectionErrorTestResponse implements ArriModel {
+  final String message;
+  const FooStreamConnectionErrorTestResponse({
+    required this.message,
+  });
+
+  factory FooStreamConnectionErrorTestResponse.empty() {
+    return FooStreamConnectionErrorTestResponse(
+      message: "",
+    );
+  }
+
+  factory FooStreamConnectionErrorTestResponse.fromJson(
+      Map<String, dynamic> _input_) {
+    final message = typeFromDynamic<String>(_input_["message"], "");
+    return FooStreamConnectionErrorTestResponse(
+      message: message,
+    );
+  }
+
+  factory FooStreamConnectionErrorTestResponse.fromJsonString(String input) {
+    return FooStreamConnectionErrorTestResponse.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "message": message,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("message=$message");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooStreamConnectionErrorTestResponse copyWith({
+    String? message,
+  }) {
+    return FooStreamConnectionErrorTestResponse(
+      message: message ?? this.message,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        message,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooStreamConnectionErrorTestResponse &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooStreamConnectionErrorTestResponse ${toJsonString()}";
+  }
+}
+
+class FooStreamLargeObjectsResponse implements ArriModel {
+  final List<double> numbers;
+  final List<FooStreamLargeObjectsResponseObjectsElement> objects;
+  const FooStreamLargeObjectsResponse({
+    required this.numbers,
+    required this.objects,
+  });
+
+  factory FooStreamLargeObjectsResponse.empty() {
+    return FooStreamLargeObjectsResponse(
+      numbers: [],
+      objects: [],
+    );
+  }
+
+  factory FooStreamLargeObjectsResponse.fromJson(Map<String, dynamic> _input_) {
+    final numbers = _input_["numbers"] is List
+        ? (_input_["numbers"] as List)
+            .map((_el_) => doubleFromDynamic(_el_, 0.0))
+            .toList()
+        : <double>[];
+    final objects = _input_["objects"] is List
+        ? (_input_["objects"] as List)
+            .map((_el_) => _el_ is Map<String, dynamic>
+                ? FooStreamLargeObjectsResponseObjectsElement.fromJson(_el_)
+                : FooStreamLargeObjectsResponseObjectsElement.empty())
+            .toList()
+        : <FooStreamLargeObjectsResponseObjectsElement>[];
+    return FooStreamLargeObjectsResponse(
+      numbers: numbers,
+      objects: objects,
+    );
+  }
+
+  factory FooStreamLargeObjectsResponse.fromJsonString(String input) {
+    return FooStreamLargeObjectsResponse.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "numbers": numbers.map((_el_) => _el_).toList(),
+      "objects": objects.map((_el_) => _el_.toJson()).toList(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /StreamLargeObjectsResponse/numbers.");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /StreamLargeObjectsResponse/objects.");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooStreamLargeObjectsResponse copyWith({
+    List<double>? numbers,
+    List<FooStreamLargeObjectsResponseObjectsElement>? objects,
+  }) {
+    return FooStreamLargeObjectsResponse(
+      numbers: numbers ?? this.numbers,
+      objects: objects ?? this.objects,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        numbers,
+        objects,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooStreamLargeObjectsResponse &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooStreamLargeObjectsResponse ${toJsonString()}";
+  }
+}
+
+class FooStreamLargeObjectsResponseObjectsElement implements ArriModel {
+  final String id;
+  final String name;
+  final String email;
+  const FooStreamLargeObjectsResponseObjectsElement({
+    required this.id,
+    required this.name,
+    required this.email,
+  });
+
+  factory FooStreamLargeObjectsResponseObjectsElement.empty() {
+    return FooStreamLargeObjectsResponseObjectsElement(
+      id: "",
+      name: "",
+      email: "",
+    );
+  }
+
+  factory FooStreamLargeObjectsResponseObjectsElement.fromJson(
+      Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final name = typeFromDynamic<String>(_input_["name"], "");
+    final email = typeFromDynamic<String>(_input_["email"], "");
+    return FooStreamLargeObjectsResponseObjectsElement(
+      id: id,
+      name: name,
+      email: email,
+    );
+  }
+
+  factory FooStreamLargeObjectsResponseObjectsElement.fromJsonString(
+      String input) {
+    return FooStreamLargeObjectsResponseObjectsElement.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "name": name,
+      "email": email,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("name=$name");
+    _queryParts_.add("email=$email");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooStreamLargeObjectsResponseObjectsElement copyWith({
+    String? id,
+    String? name,
+    String? email,
+  }) {
+    return FooStreamLargeObjectsResponseObjectsElement(
+      id: id ?? this.id,
+      name: name ?? this.name,
+      email: email ?? this.email,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        name,
+        email,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooStreamLargeObjectsResponseObjectsElement &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooStreamLargeObjectsResponseObjectsElement ${toJsonString()}";
+  }
+}
+
+class FooChatMessageParams implements ArriModel {
+  final String channelId;
+  const FooChatMessageParams({
+    required this.channelId,
+  });
+
+  factory FooChatMessageParams.empty() {
+    return FooChatMessageParams(
+      channelId: "",
+    );
+  }
+
+  factory FooChatMessageParams.fromJson(Map<String, dynamic> _input_) {
+    final channelId = typeFromDynamic<String>(_input_["channelId"], "");
+    return FooChatMessageParams(
+      channelId: channelId,
+    );
+  }
+
+  factory FooChatMessageParams.fromJsonString(String input) {
+    return FooChatMessageParams.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "channelId": channelId,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("channelId=$channelId");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooChatMessageParams copyWith({
+    String? channelId,
+  }) {
+    return FooChatMessageParams(
+      channelId: channelId ?? this.channelId,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        channelId,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooChatMessageParams && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooChatMessageParams ${toJsonString()}";
+  }
+}
+
+sealed class FooChatMessage implements ArriModel {
+  String get messageType;
+  const FooChatMessage();
+
+  factory FooChatMessage.empty() {
+    return FooChatMessageText.empty();
+  }
+
+  factory FooChatMessage.fromJson(Map<String, dynamic> _input_) {
+    final messageType = typeFromDynamic<String>(_input_["messageType"], "");
+    switch (messageType) {
+      case "TEXT":
+        return FooChatMessageText.fromJson(_input_);
+      case "IMAGE":
+        return FooChatMessageImage.fromJson(_input_);
+      case "URL":
+        return FooChatMessageUrl.fromJson(_input_);
+      default:
+        return FooChatMessage.empty();
+    }
+  }
+
+  factory FooChatMessage.fromJsonString(String input) {
+    return FooChatMessage.fromJson(json.decode(input));
+  }
+}
+
+class FooChatMessageText implements FooChatMessage {
+  final String id;
+  final String channelId;
+  final String userId;
+  final DateTime date;
+  final String text;
+  const FooChatMessageText({
+    required this.id,
+    required this.channelId,
+    required this.userId,
+    required this.date,
+    required this.text,
+  });
+
+  @override
+  String get messageType => "TEXT";
+
+  factory FooChatMessageText.empty() {
+    return FooChatMessageText(
+      id: "",
+      channelId: "",
+      userId: "",
+      date: DateTime.now(),
+      text: "",
+    );
+  }
+
+  factory FooChatMessageText.fromJson(Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final channelId = typeFromDynamic<String>(_input_["channelId"], "");
+    final userId = typeFromDynamic<String>(_input_["userId"], "");
+    final date = dateTimeFromDynamic(_input_["date"], DateTime.now());
+    final text = typeFromDynamic<String>(_input_["text"], "");
+    return FooChatMessageText(
+      id: id,
+      channelId: channelId,
+      userId: userId,
+      date: date,
+      text: text,
+    );
+  }
+
+  factory FooChatMessageText.fromJsonString(String input) {
+    return FooChatMessageText.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "messageType": messageType,
+      "id": id,
+      "channelId": channelId,
+      "userId": userId,
+      "date": date.toUtc().toIso8601String(),
+      "text": text,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("messageType=$messageType");
+    _queryParts_.add("id=$id");
+    _queryParts_.add("channelId=$channelId");
+    _queryParts_.add("userId=$userId");
+    _queryParts_.add("date=${date.toUtc().toIso8601String()}");
+    _queryParts_.add("text=$text");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooChatMessageText copyWith({
+    String? id,
+    String? channelId,
+    String? userId,
+    DateTime? date,
+    String? text,
+  }) {
+    return FooChatMessageText(
+      id: id ?? this.id,
+      channelId: channelId ?? this.channelId,
+      userId: userId ?? this.userId,
+      date: date ?? this.date,
+      text: text ?? this.text,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        channelId,
+        userId,
+        date,
+        text,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooChatMessageText && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooChatMessageText ${toJsonString()}";
+  }
+}
+
+class FooChatMessageImage implements FooChatMessage {
+  final String id;
+  final String channelId;
+  final String userId;
+  final DateTime date;
+  final String image;
+  const FooChatMessageImage({
+    required this.id,
+    required this.channelId,
+    required this.userId,
+    required this.date,
+    required this.image,
+  });
+
+  @override
+  String get messageType => "IMAGE";
+
+  factory FooChatMessageImage.empty() {
+    return FooChatMessageImage(
+      id: "",
+      channelId: "",
+      userId: "",
+      date: DateTime.now(),
+      image: "",
+    );
+  }
+
+  factory FooChatMessageImage.fromJson(Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final channelId = typeFromDynamic<String>(_input_["channelId"], "");
+    final userId = typeFromDynamic<String>(_input_["userId"], "");
+    final date = dateTimeFromDynamic(_input_["date"], DateTime.now());
+    final image = typeFromDynamic<String>(_input_["image"], "");
+    return FooChatMessageImage(
+      id: id,
+      channelId: channelId,
+      userId: userId,
+      date: date,
+      image: image,
+    );
+  }
+
+  factory FooChatMessageImage.fromJsonString(String input) {
+    return FooChatMessageImage.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "messageType": messageType,
+      "id": id,
+      "channelId": channelId,
+      "userId": userId,
+      "date": date.toUtc().toIso8601String(),
+      "image": image,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("messageType=$messageType");
+    _queryParts_.add("id=$id");
+    _queryParts_.add("channelId=$channelId");
+    _queryParts_.add("userId=$userId");
+    _queryParts_.add("date=${date.toUtc().toIso8601String()}");
+    _queryParts_.add("image=$image");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooChatMessageImage copyWith({
+    String? id,
+    String? channelId,
+    String? userId,
+    DateTime? date,
+    String? image,
+  }) {
+    return FooChatMessageImage(
+      id: id ?? this.id,
+      channelId: channelId ?? this.channelId,
+      userId: userId ?? this.userId,
+      date: date ?? this.date,
+      image: image ?? this.image,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        channelId,
+        userId,
+        date,
+        image,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooChatMessageImage && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooChatMessageImage ${toJsonString()}";
+  }
+}
+
+class FooChatMessageUrl implements FooChatMessage {
+  final String id;
+  final String channelId;
+  final String userId;
+  final DateTime date;
+  final String url;
+  const FooChatMessageUrl({
+    required this.id,
+    required this.channelId,
+    required this.userId,
+    required this.date,
+    required this.url,
+  });
+
+  @override
+  String get messageType => "URL";
+
+  factory FooChatMessageUrl.empty() {
+    return FooChatMessageUrl(
+      id: "",
+      channelId: "",
+      userId: "",
+      date: DateTime.now(),
+      url: "",
+    );
+  }
+
+  factory FooChatMessageUrl.fromJson(Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final channelId = typeFromDynamic<String>(_input_["channelId"], "");
+    final userId = typeFromDynamic<String>(_input_["userId"], "");
+    final date = dateTimeFromDynamic(_input_["date"], DateTime.now());
+    final url = typeFromDynamic<String>(_input_["url"], "");
+    return FooChatMessageUrl(
+      id: id,
+      channelId: channelId,
+      userId: userId,
+      date: date,
+      url: url,
+    );
+  }
+
+  factory FooChatMessageUrl.fromJsonString(String input) {
+    return FooChatMessageUrl.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "messageType": messageType,
+      "id": id,
+      "channelId": channelId,
+      "userId": userId,
+      "date": date.toUtc().toIso8601String(),
+      "url": url,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("messageType=$messageType");
+    _queryParts_.add("id=$id");
+    _queryParts_.add("channelId=$channelId");
+    _queryParts_.add("userId=$userId");
+    _queryParts_.add("date=${date.toUtc().toIso8601String()}");
+    _queryParts_.add("url=$url");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooChatMessageUrl copyWith({
+    String? id,
+    String? channelId,
+    String? userId,
+    DateTime? date,
+    String? url,
+  }) {
+    return FooChatMessageUrl(
+      id: id ?? this.id,
+      channelId: channelId ?? this.channelId,
+      userId: userId ?? this.userId,
+      date: date ?? this.date,
+      url: url ?? this.url,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        channelId,
+        userId,
+        date,
+        url,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooChatMessageUrl && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooChatMessageUrl ${toJsonString()}";
+  }
+}
+
+class FooTestsStreamRetryWithNewCredentialsResponse implements ArriModel {
+  final String message;
+  const FooTestsStreamRetryWithNewCredentialsResponse({
+    required this.message,
+  });
+
+  factory FooTestsStreamRetryWithNewCredentialsResponse.empty() {
+    return FooTestsStreamRetryWithNewCredentialsResponse(
+      message: "",
+    );
+  }
+
+  factory FooTestsStreamRetryWithNewCredentialsResponse.fromJson(
+      Map<String, dynamic> _input_) {
+    final message = typeFromDynamic<String>(_input_["message"], "");
+    return FooTestsStreamRetryWithNewCredentialsResponse(
+      message: message,
+    );
+  }
+
+  factory FooTestsStreamRetryWithNewCredentialsResponse.fromJsonString(
+      String input) {
+    return FooTestsStreamRetryWithNewCredentialsResponse.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "message": message,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("message=$message");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooTestsStreamRetryWithNewCredentialsResponse copyWith({
+    String? message,
+  }) {
+    return FooTestsStreamRetryWithNewCredentialsResponse(
+      message: message ?? this.message,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        message,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooTestsStreamRetryWithNewCredentialsResponse &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooTestsStreamRetryWithNewCredentialsResponse ${toJsonString()}";
+  }
+}
+
+class FooUsersWatchUserParams implements ArriModel {
+  final String userId;
+  const FooUsersWatchUserParams({
+    required this.userId,
+  });
+
+  factory FooUsersWatchUserParams.empty() {
+    return FooUsersWatchUserParams(
+      userId: "",
+    );
+  }
+
+  factory FooUsersWatchUserParams.fromJson(Map<String, dynamic> _input_) {
+    final userId = typeFromDynamic<String>(_input_["userId"], "");
+    return FooUsersWatchUserParams(
+      userId: userId,
+    );
+  }
+
+  factory FooUsersWatchUserParams.fromJsonString(String input) {
+    return FooUsersWatchUserParams.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "userId": userId,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("userId=$userId");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooUsersWatchUserParams copyWith({
+    String? userId,
+  }) {
+    return FooUsersWatchUserParams(
+      userId: userId ?? this.userId,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        userId,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooUsersWatchUserParams &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooUsersWatchUserParams ${toJsonString()}";
+  }
+}
+
+class FooUsersWatchUserResponse implements ArriModel {
+  final String id;
+  final FooUsersWatchUserResponseRole role;
+
+  /// A profile picture
+  final FooUserPhoto? photo;
+  final DateTime createdAt;
+  final int numFollowers;
+  final FooUserSettings settings;
+  final List<FooUsersWatchUserResponseRecentNotificationsElement>
+      recentNotifications;
+  final Map<String, FooUsersWatchUserResponseBookmarksentry> bookmarks;
+  final Map<String, dynamic> metadata;
+  final List<dynamic> randomList;
+  final String? bio;
+  const FooUsersWatchUserResponse({
+    required this.id,
+    required this.role,
+    required this.photo,
+    required this.createdAt,
+    required this.numFollowers,
+    required this.settings,
+    required this.recentNotifications,
+    required this.bookmarks,
+    required this.metadata,
+    required this.randomList,
+    this.bio,
+  });
+
+  factory FooUsersWatchUserResponse.empty() {
+    return FooUsersWatchUserResponse(
+      id: "",
+      role: FooUsersWatchUserResponseRole.standard,
+      photo: null,
+      createdAt: DateTime.now(),
+      numFollowers: 0,
+      settings: FooUserSettings.empty(),
+      recentNotifications: [],
+      bookmarks: {},
+      metadata: {},
+      randomList: [],
+    );
+  }
+
+  factory FooUsersWatchUserResponse.fromJson(Map<String, dynamic> _input_) {
+    final id = typeFromDynamic<String>(_input_["id"], "");
+    final role = FooUsersWatchUserResponseRole.fromString(
+        typeFromDynamic<String>(_input_["role"], ""));
+    final photo = _input_["photo"] is Map<String, dynamic>
+        ? FooUserPhoto.fromJson(_input_["photo"])
+        : null;
+    final createdAt = dateTimeFromDynamic(_input_["createdAt"], DateTime.now());
+    final numFollowers = intFromDynamic(_input_["numFollowers"], 0);
+    final settings = _input_["settings"] is Map<String, dynamic>
+        ? FooUserSettings.fromJson(_input_["settings"])
+        : FooUserSettings.empty();
+    final recentNotifications = _input_["recentNotifications"] is List
+        ? (_input_["recentNotifications"] as List)
+            .map((_el_) => _el_ is Map<String, dynamic>
+                ? FooUsersWatchUserResponseRecentNotificationsElement.fromJson(
+                    _el_)
+                : FooUsersWatchUserResponseRecentNotificationsElement.empty())
+            .toList()
+        : <FooUsersWatchUserResponseRecentNotificationsElement>[];
+    final bookmarks = _input_["bookmarks"] is Map<String, dynamic>
+        ? (_input_["bookmarks"] as Map<String, dynamic>).map(
+            (_key_, _val_) => MapEntry(
+              _key_,
+              _val_ is Map<String, dynamic>
+                  ? FooUsersWatchUserResponseBookmarksentry.fromJson(_val_)
+                  : FooUsersWatchUserResponseBookmarksentry.empty(),
+            ),
+          )
+        : <String, FooUsersWatchUserResponseBookmarksentry>{};
+    final metadata = _input_["metadata"] is Map<String, dynamic>
+        ? (_input_["metadata"] as Map<String, dynamic>).map(
+            (_key_, _val_) => MapEntry(
+              _key_,
+              _val_,
+            ),
+          )
+        : <String, dynamic>{};
+    final randomList = _input_["randomList"] is List
+        ? (_input_["randomList"] as List).map((_el_) => _el_).toList()
+        : <dynamic>[];
+    final bio = nullableTypeFromDynamic<String>(_input_["bio"]);
+    return FooUsersWatchUserResponse(
+      id: id,
+      role: role,
+      photo: photo,
+      createdAt: createdAt,
+      numFollowers: numFollowers,
+      settings: settings,
+      recentNotifications: recentNotifications,
+      bookmarks: bookmarks,
+      metadata: metadata,
+      randomList: randomList,
+      bio: bio,
+    );
+  }
+
+  factory FooUsersWatchUserResponse.fromJsonString(String input) {
+    return FooUsersWatchUserResponse.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "id": id,
+      "role": role.serialValue,
+      "photo": photo?.toJson(),
+      "createdAt": createdAt.toUtc().toIso8601String(),
+      "numFollowers": numFollowers,
+      "settings": settings.toJson(),
+      "recentNotifications":
+          recentNotifications.map((_el_) => _el_.toJson()).toList(),
+      "bookmarks": bookmarks.map(
+        (_key_, _val_) => MapEntry(
+          _key_,
+          _val_.toJson(),
+        ),
+      ),
+      "metadata": metadata.map(
+        (_key_, _val_) => MapEntry(
+          _key_,
+          _val_,
+        ),
+      ),
+      "randomList": randomList.map((_el_) => _el_).toList(),
+    };
+    if (bio != null) _output_["bio"] = bio;
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("id=$id");
+    _queryParts_.add("role=${role.serialValue}");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/photo.");
+    _queryParts_.add("createdAt=${createdAt.toUtc().toIso8601String()}");
+    _queryParts_.add("numFollowers=$numFollowers");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/settings.");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/recentNotifications.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/bookmarks.");
+    print(
+        "[WARNING] nested objects cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/metadata.");
+    print(
+        "[WARNING] arrays cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/randomList.");
+    if (bio != null) _queryParts_.add("bio=$bio");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooUsersWatchUserResponse copyWith({
+    String? id,
+    FooUsersWatchUserResponseRole? role,
+    FooUserPhoto? Function()? photo,
+    DateTime? createdAt,
+    int? numFollowers,
+    FooUserSettings? settings,
+    List<FooUsersWatchUserResponseRecentNotificationsElement>?
+        recentNotifications,
+    Map<String, FooUsersWatchUserResponseBookmarksentry>? bookmarks,
+    Map<String, dynamic>? metadata,
+    List<dynamic>? randomList,
+    String? Function()? bio,
+  }) {
+    return FooUsersWatchUserResponse(
+      id: id ?? this.id,
+      role: role ?? this.role,
+      photo: photo != null ? photo() : this.photo,
+      createdAt: createdAt ?? this.createdAt,
+      numFollowers: numFollowers ?? this.numFollowers,
+      settings: settings ?? this.settings,
+      recentNotifications: recentNotifications ?? this.recentNotifications,
+      bookmarks: bookmarks ?? this.bookmarks,
+      metadata: metadata ?? this.metadata,
+      randomList: randomList ?? this.randomList,
+      bio: bio != null ? bio() : this.bio,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        id,
+        role,
+        photo,
+        createdAt,
+        numFollowers,
+        settings,
+        recentNotifications,
+        bookmarks,
+        metadata,
+        randomList,
+        bio,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooUsersWatchUserResponse &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooUsersWatchUserResponse ${toJsonString()}";
+  }
+}
+
+enum FooUsersWatchUserResponseRole
+    implements Comparable<FooUsersWatchUserResponseRole> {
+  standard("standard"),
+  admin("admin");
+
+  const FooUsersWatchUserResponseRole(this.serialValue);
+  final String serialValue;
+
+  factory FooUsersWatchUserResponseRole.fromString(String input) {
+    for (final val in values) {
+      if (val.serialValue == input) {
+        return val;
+      }
+    }
+    return standard;
+  }
+
+  @override
+  int compareTo(FooUsersWatchUserResponseRole other) =>
+      name.compareTo(other.name);
+}
+
+/// A profile picture
+class FooUserPhoto implements ArriModel {
+  final String url;
+  final double width;
+  final double height;
+  final BigInt bytes;
+
+  /// When the photo was last updated in nanoseconds
+  final BigInt nanoseconds;
+  const FooUserPhoto({
+    required this.url,
+    required this.width,
+    required this.height,
+    required this.bytes,
+    required this.nanoseconds,
+  });
+
+  factory FooUserPhoto.empty() {
+    return FooUserPhoto(
+      url: "",
+      width: 0.0,
+      height: 0.0,
+      bytes: BigInt.zero,
+      nanoseconds: BigInt.zero,
+    );
+  }
+
+  factory FooUserPhoto.fromJson(Map<String, dynamic> _input_) {
+    final url = typeFromDynamic<String>(_input_["url"], "");
+    final width = doubleFromDynamic(_input_["width"], 0.0);
+    final height = doubleFromDynamic(_input_["height"], 0.0);
+    final bytes = bigIntFromDynamic(_input_["bytes"], BigInt.zero);
+    final nanoseconds = bigIntFromDynamic(_input_["nanoseconds"], BigInt.zero);
+    return FooUserPhoto(
+      url: url,
+      width: width,
+      height: height,
+      bytes: bytes,
+      nanoseconds: nanoseconds,
+    );
+  }
+
+  factory FooUserPhoto.fromJsonString(String input) {
+    return FooUserPhoto.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "url": url,
+      "width": width,
+      "height": height,
+      "bytes": bytes.toString(),
+      "nanoseconds": nanoseconds.toString(),
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("url=$url");
+    _queryParts_.add("width=$width");
+    _queryParts_.add("height=$height");
+    _queryParts_.add("bytes=$bytes");
+    _queryParts_.add("nanoseconds=$nanoseconds");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooUserPhoto copyWith({
+    String? url,
+    double? width,
+    double? height,
+    BigInt? bytes,
+    BigInt? nanoseconds,
+  }) {
+    return FooUserPhoto(
+      url: url ?? this.url,
+      width: width ?? this.width,
+      height: height ?? this.height,
+      bytes: bytes ?? this.bytes,
+      nanoseconds: nanoseconds ?? this.nanoseconds,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        url,
+        width,
+        height,
+        bytes,
+        nanoseconds,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooUserPhoto && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooUserPhoto ${toJsonString()}";
+  }
+}
+
+class FooUserSettings implements ArriModel {
+  final bool notificationsEnabled;
+  final FooUserSettingsPreferredTheme preferredTheme;
+  const FooUserSettings({
+    required this.notificationsEnabled,
+    required this.preferredTheme,
+  });
+
+  factory FooUserSettings.empty() {
+    return FooUserSettings(
+      notificationsEnabled: false,
+      preferredTheme: FooUserSettingsPreferredTheme.darkMode,
+    );
+  }
+
+  factory FooUserSettings.fromJson(Map<String, dynamic> _input_) {
+    final notificationsEnabled =
+        typeFromDynamic<bool>(_input_["notificationsEnabled"], false);
+    final preferredTheme = FooUserSettingsPreferredTheme.fromString(
+        typeFromDynamic<String>(_input_["preferredTheme"], ""));
+    return FooUserSettings(
+      notificationsEnabled: notificationsEnabled,
+      preferredTheme: preferredTheme,
+    );
+  }
+
+  factory FooUserSettings.fromJsonString(String input) {
+    return FooUserSettings.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "notificationsEnabled": notificationsEnabled,
+      "preferredTheme": preferredTheme.serialValue,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("notificationsEnabled=$notificationsEnabled");
+    _queryParts_.add("preferredTheme=${preferredTheme.serialValue}");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooUserSettings copyWith({
+    bool? notificationsEnabled,
+    FooUserSettingsPreferredTheme? preferredTheme,
+  }) {
+    return FooUserSettings(
+      notificationsEnabled: notificationsEnabled ?? this.notificationsEnabled,
+      preferredTheme: preferredTheme ?? this.preferredTheme,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        notificationsEnabled,
+        preferredTheme,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooUserSettings && listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooUserSettings ${toJsonString()}";
+  }
+}
+
+enum FooUserSettingsPreferredTheme
+    implements Comparable<FooUserSettingsPreferredTheme> {
+  darkMode("dark-mode"),
+  lightMode("light-mode"),
+  system("system");
+
+  const FooUserSettingsPreferredTheme(this.serialValue);
+  final String serialValue;
+
+  factory FooUserSettingsPreferredTheme.fromString(String input) {
+    for (final val in values) {
+      if (val.serialValue == input) {
+        return val;
+      }
+    }
+    return darkMode;
+  }
+
+  @override
+  int compareTo(FooUserSettingsPreferredTheme other) =>
+      name.compareTo(other.name);
+}
+
+sealed class FooUsersWatchUserResponseRecentNotificationsElement
+    implements ArriModel {
+  String get notificationType;
+  const FooUsersWatchUserResponseRecentNotificationsElement();
+
+  factory FooUsersWatchUserResponseRecentNotificationsElement.empty() {
+    return FooUsersWatchUserResponseRecentNotificationsElementPostLike.empty();
+  }
+
+  factory FooUsersWatchUserResponseRecentNotificationsElement.fromJson(
+      Map<String, dynamic> _input_) {
+    final notificationType =
+        typeFromDynamic<String>(_input_["notificationType"], "");
+    switch (notificationType) {
+      case "POST_LIKE":
+        return FooUsersWatchUserResponseRecentNotificationsElementPostLike
+            .fromJson(_input_);
+      case "POST_COMMENT":
+        return FooUsersWatchUserResponseRecentNotificationsElementPostComment
+            .fromJson(_input_);
+      default:
+        return FooUsersWatchUserResponseRecentNotificationsElement.empty();
+    }
+  }
+
+  factory FooUsersWatchUserResponseRecentNotificationsElement.fromJsonString(
+      String input) {
+    return FooUsersWatchUserResponseRecentNotificationsElement.fromJson(
+        json.decode(input));
+  }
+}
+
+class FooUsersWatchUserResponseRecentNotificationsElementPostLike
+    implements FooUsersWatchUserResponseRecentNotificationsElement {
+  final String postId;
+  final String userId;
+  const FooUsersWatchUserResponseRecentNotificationsElementPostLike({
+    required this.postId,
+    required this.userId,
+  });
+
+  @override
+  String get notificationType => "POST_LIKE";
+
+  factory FooUsersWatchUserResponseRecentNotificationsElementPostLike.empty() {
+    return FooUsersWatchUserResponseRecentNotificationsElementPostLike(
+      postId: "",
+      userId: "",
+    );
+  }
+
+  factory FooUsersWatchUserResponseRecentNotificationsElementPostLike.fromJson(
+      Map<String, dynamic> _input_) {
+    final postId = typeFromDynamic<String>(_input_["postId"], "");
+    final userId = typeFromDynamic<String>(_input_["userId"], "");
+    return FooUsersWatchUserResponseRecentNotificationsElementPostLike(
+      postId: postId,
+      userId: userId,
+    );
+  }
+
+  factory FooUsersWatchUserResponseRecentNotificationsElementPostLike.fromJsonString(
+      String input) {
+    return FooUsersWatchUserResponseRecentNotificationsElementPostLike.fromJson(
+        json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "notificationType": notificationType,
+      "postId": postId,
+      "userId": userId,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("notificationType=$notificationType");
+    _queryParts_.add("postId=$postId");
+    _queryParts_.add("userId=$userId");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooUsersWatchUserResponseRecentNotificationsElementPostLike copyWith({
+    String? postId,
+    String? userId,
+  }) {
+    return FooUsersWatchUserResponseRecentNotificationsElementPostLike(
+      postId: postId ?? this.postId,
+      userId: userId ?? this.userId,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        postId,
+        userId,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other
+            is FooUsersWatchUserResponseRecentNotificationsElementPostLike &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooUsersWatchUserResponseRecentNotificationsElementPostLike ${toJsonString()}";
+  }
+}
+
+class FooUsersWatchUserResponseRecentNotificationsElementPostComment
+    implements FooUsersWatchUserResponseRecentNotificationsElement {
+  final String postId;
+  final String userId;
+  final String commentText;
+  const FooUsersWatchUserResponseRecentNotificationsElementPostComment({
+    required this.postId,
+    required this.userId,
+    required this.commentText,
+  });
+
+  @override
+  String get notificationType => "POST_COMMENT";
+
+  factory FooUsersWatchUserResponseRecentNotificationsElementPostComment.empty() {
+    return FooUsersWatchUserResponseRecentNotificationsElementPostComment(
+      postId: "",
+      userId: "",
+      commentText: "",
+    );
+  }
+
+  factory FooUsersWatchUserResponseRecentNotificationsElementPostComment.fromJson(
+      Map<String, dynamic> _input_) {
+    final postId = typeFromDynamic<String>(_input_["postId"], "");
+    final userId = typeFromDynamic<String>(_input_["userId"], "");
+    final commentText = typeFromDynamic<String>(_input_["commentText"], "");
+    return FooUsersWatchUserResponseRecentNotificationsElementPostComment(
+      postId: postId,
+      userId: userId,
+      commentText: commentText,
+    );
+  }
+
+  factory FooUsersWatchUserResponseRecentNotificationsElementPostComment.fromJsonString(
+      String input) {
+    return FooUsersWatchUserResponseRecentNotificationsElementPostComment
+        .fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "notificationType": notificationType,
+      "postId": postId,
+      "userId": userId,
+      "commentText": commentText,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("notificationType=$notificationType");
+    _queryParts_.add("postId=$postId");
+    _queryParts_.add("userId=$userId");
+    _queryParts_.add("commentText=$commentText");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooUsersWatchUserResponseRecentNotificationsElementPostComment copyWith({
+    String? postId,
+    String? userId,
+    String? commentText,
+  }) {
+    return FooUsersWatchUserResponseRecentNotificationsElementPostComment(
+      postId: postId ?? this.postId,
+      userId: userId ?? this.userId,
+      commentText: commentText ?? this.commentText,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        postId,
+        userId,
+        commentText,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other
+            is FooUsersWatchUserResponseRecentNotificationsElementPostComment &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooUsersWatchUserResponseRecentNotificationsElementPostComment ${toJsonString()}";
+  }
+}
+
+class FooUsersWatchUserResponseBookmarksentry implements ArriModel {
+  final String postId;
+  final String userId;
+  const FooUsersWatchUserResponseBookmarksentry({
+    required this.postId,
+    required this.userId,
+  });
+
+  factory FooUsersWatchUserResponseBookmarksentry.empty() {
+    return FooUsersWatchUserResponseBookmarksentry(
+      postId: "",
+      userId: "",
+    );
+  }
+
+  factory FooUsersWatchUserResponseBookmarksentry.fromJson(
+      Map<String, dynamic> _input_) {
+    final postId = typeFromDynamic<String>(_input_["postId"], "");
+    final userId = typeFromDynamic<String>(_input_["userId"], "");
+    return FooUsersWatchUserResponseBookmarksentry(
+      postId: postId,
+      userId: userId,
+    );
+  }
+
+  factory FooUsersWatchUserResponseBookmarksentry.fromJsonString(String input) {
+    return FooUsersWatchUserResponseBookmarksentry.fromJson(json.decode(input));
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    final _output_ = <String, dynamic>{
+      "postId": postId,
+      "userId": userId,
+    };
+
+    return _output_;
+  }
+
+  @override
+  String toJsonString() {
+    return json.encode(toJson());
+  }
+
+  @override
+  String toUrlQueryParams() {
+    final _queryParts_ = <String>[];
+    _queryParts_.add("postId=$postId");
+    _queryParts_.add("userId=$userId");
+    return _queryParts_.join("&");
+  }
+
+  @override
+  FooUsersWatchUserResponseBookmarksentry copyWith({
+    String? postId,
+    String? userId,
+  }) {
+    return FooUsersWatchUserResponseBookmarksentry(
+      postId: postId ?? this.postId,
+      userId: userId ?? this.userId,
+    );
+  }
+
+  @override
+  List<Object?> get props => [
+        postId,
+        userId,
+      ];
+
+  @override
+  bool operator ==(Object other) {
+    return other is FooUsersWatchUserResponseBookmarksentry &&
+        listsAreEqual(props, other.props);
+  }
+
+  @override
+  int get hashCode => listToHashCode(props);
+
+  @override
+  String toString() {
+    return "FooUsersWatchUserResponseBookmarksentry ${toJsonString()}";
+  }
+}
diff --git a/tests/clients/dart/test/test_client_test.dart b/tests/clients/dart/test/test_client_test.dart
index 40d30c2b..e7813897 100644
--- a/tests/clients/dart/test/test_client_test.dart
+++ b/tests/clients/dart/test/test_client_test.dart
@@ -4,7 +4,7 @@ import 'dart:math';
 
 import 'package:arri_client/arri_client.dart';
 import "package:test/test.dart";
-import 'package:test_client_dart/test_client.rpc.dart';
+import 'package:test_client_dart/test_client.g.dart';
 // ignore: depend_on_referenced_packages
 import 'package:http/io_client.dart';
 
diff --git a/tests/clients/kotlin/src/main/kotlin/TestClient.rpc.kt b/tests/clients/kotlin/src/main/kotlin/TestClient.g.kt
similarity index 99%
rename from tests/clients/kotlin/src/main/kotlin/TestClient.rpc.kt
rename to tests/clients/kotlin/src/main/kotlin/TestClient.g.kt
index 9c68a743..bb3f6888 100644
--- a/tests/clients/kotlin/src/main/kotlin/TestClient.rpc.kt
+++ b/tests/clients/kotlin/src/main/kotlin/TestClient.g.kt
@@ -30,12 +30,12 @@ private val JsonInstance = Json {
     encodeDefaults = true
     ignoreUnknownKeys = true
 }
-private typealias headersFn = (() -> MutableMap<String, String>?)?
+private typealias __TestClientHeadersFn = (() -> MutableMap<String, String>?)?
 
 class TestClient(
     private val httpClient: HttpClient,
     private val baseUrl: String,
-    private val headers: headersFn,
+    private val headers: __TestClientHeadersFn,
     private val onError: ((err: Exception) -> Unit) = {},
 ) {
     val tests: TestClientTestsService = TestClientTestsService(
@@ -56,7 +56,7 @@ class TestClient(
 class TestClientTestsService(
     private val httpClient: HttpClient,
     private val baseUrl: String,
-    private val headers: headersFn,
+    private val headers: __TestClientHeadersFn,
     private val onError: ((err: Exception) -> Unit) = {},
 ) {
     suspend fun emptyParamsGetRequest(): DefaultPayload {
@@ -599,7 +599,7 @@ suspend fun streamTenEventsThenEnd(
 class TestClientUsersService(
     private val httpClient: HttpClient,
     private val baseUrl: String,
-    private val headers: headersFn,
+    private val headers: __TestClientHeadersFn,
     private val onError: ((err: Exception) -> Unit) = {},
 ) {
     suspend fun watchUser(
@@ -6102,7 +6102,7 @@ val userId: String = when (__input.jsonObject["userId"]) {
 
 
 // Implementation copied from https://github.com/Kotlin/kotlinx.serialization/blob/d0ae697b9394103879e6c7f836d0f7cf128f4b1e/formats/json/commonMain/src/kotlinx/serialization/json/internal/StringOps.kt#L45
-internal const val STRING = '"'
+private const val STRING = '"'
 
 private fun toHexChar(i: Int): Char {
     val d = i and 0xf
@@ -6110,7 +6110,7 @@ private fun toHexChar(i: Int): Char {
     else (d - 10 + 'a'.code).toChar()
 }
 
-internal val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
+private val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
     for (c in 0..0x1f) {
         val c1 = toHexChar(c shr 12)
         val c2 = toHexChar(c shr 8)
@@ -6127,7 +6127,7 @@ internal val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
     this[0x0c] = "\\f"
 }
 
-internal val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
+private val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
     for (c in 0..0x1f) {
         this[c] = 1.toByte()
     }
@@ -6140,7 +6140,7 @@ internal val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
     this[0x0c] = 'f'.code.toByte()
 }
 
-internal fun StringBuilder.printQuoted(value: String) {
+private fun StringBuilder.printQuoted(value: String) {
     append(STRING)
     var lastPos = 0
     for (i in value.indices) {
@@ -6198,7 +6198,7 @@ private suspend fun __prepareRequest(
 }
 
 // SSE_FN_START
-private enum class SseEventLineType {
+private enum class __TestClientSseEventLineType {
     Id,
     Event,
     Data,
@@ -6206,36 +6206,36 @@ private enum class SseEventLineType {
     None,
 }
 
-private fun __parseSseEventLine(line: String): Pair<SseEventLineType, String> {
+private fun __parseSseEventLine(line: String): Pair<__TestClientSseEventLineType, String> {
     if (line.startsWith("id:")) {
-        return Pair(SseEventLineType.Id, line.substring(3).trim())
+        return Pair(__TestClientSseEventLineType.Id, line.substring(3).trim())
     }
     if (line.startsWith("event:")) {
-        return Pair(SseEventLineType.Event, line.substring(6).trim())
+        return Pair(__TestClientSseEventLineType.Event, line.substring(6).trim())
     }
     if (line.startsWith("data:")) {
-        return Pair(SseEventLineType.Data, line.substring(5).trim())
+        return Pair(__TestClientSseEventLineType.Data, line.substring(5).trim())
     }
     if (line.startsWith("retry:")) {
-        return Pair(SseEventLineType.Retry, line.substring(6).trim())
+        return Pair(__TestClientSseEventLineType.Retry, line.substring(6).trim())
     }
-    return Pair(SseEventLineType.None, "")
+    return Pair(__TestClientSseEventLineType.None, "")
 }
 
-private data class __SseEvent(
+private data class __TestClientSseEvent(
     val id: String? = null,
     val event: String,
     val data: String,
     val retry: Int? = null
 )
 
-private class __SseEventParsingResult(val events: List<__SseEvent>, val leftover: String)
+private class __TestClientSseEventParsingResult(val events: List<__TestClientSseEvent>, val leftover: String)
 
-private fun __parseSseEvents(input: String): __SseEventParsingResult {
-    val events = mutableListOf<__SseEvent>()
+private fun __parseSseEvents(input: String): __TestClientSseEventParsingResult {
+    val events = mutableListOf<__TestClientSseEvent>()
     val lines = input.lines()
     if (lines.isEmpty()) {
-        return __SseEventParsingResult(events = listOf(), leftover = "")
+        return __TestClientSseEventParsingResult(events = listOf(), leftover = "")
     }
     var id: String? = null
     var event: String? = null
@@ -6246,18 +6246,18 @@ private fun __parseSseEvents(input: String): __SseEventParsingResult {
         if (line.isNotEmpty()) {
             val (type, value) = __parseSseEventLine(line)
             when (type) {
-                SseEventLineType.Id -> id = value
-                SseEventLineType.Event -> event = value
-                SseEventLineType.Data -> data = value
-                SseEventLineType.Retry -> retry = value.toInt()
-                SseEventLineType.None -> {}
+                __TestClientSseEventLineType.Id -> id = value
+                __TestClientSseEventLineType.Event -> event = value
+                __TestClientSseEventLineType.Data -> data = value
+                __TestClientSseEventLineType.Retry -> retry = value.toInt()
+                __TestClientSseEventLineType.None -> {}
             }
         }
         val isEnd = line == ""
         if (isEnd) {
             if (data != null) {
                 events.add(
-                    __SseEvent(
+                    __TestClientSseEvent(
                         id = id,
                         event = event ?: "message",
                         data = data!!,
@@ -6272,7 +6272,7 @@ private fun __parseSseEvents(input: String): __SseEventParsingResult {
             lastIndex = if (index + 1 < lines.size) index + 1 else null
         }
     }
-    return __SseEventParsingResult(
+    return __TestClientSseEventParsingResult(
         events = events,
         leftover = if (lastIndex != null) lines.subList(lastIndex!!, lines.size).joinToString(separator = "\n") else ""
     )
@@ -6284,7 +6284,7 @@ private suspend fun __handleSseRequest(
     url: String,
     method: HttpMethod,
     params: TestClientModel?,
-    headers: headersFn,
+    headers: __TestClientHeadersFn,
     backoffTime: Long,
     maxBackoffTime: Long,
     lastEventId: String?,
diff --git a/tests/clients/kotlin/src/main/kotlin/TestClientPrefixed.g.kt b/tests/clients/kotlin/src/main/kotlin/TestClientPrefixed.g.kt
new file mode 100644
index 00000000..647a6860
--- /dev/null
+++ b/tests/clients/kotlin/src/main/kotlin/TestClientPrefixed.g.kt
@@ -0,0 +1,6493 @@
+@file:Suppress(
+    "FunctionName", "LocalVariableName", "UNNECESSARY_NOT_NULL_ASSERTION", "ClassName", "NAME_SHADOWING",
+    "USELESS_IS_CHECK", "unused", "RemoveRedundantQualifierName", "CanBeParameter", "RedundantUnitReturnType",
+    "RedundantExplicitType"
+)
+
+import io.ktor.client.*
+import io.ktor.client.call.*
+import io.ktor.client.plugins.*
+import io.ktor.client.request.*
+import io.ktor.client.statement.*
+import io.ktor.http.*
+import io.ktor.utils.io.*
+import kotlinx.coroutines.cancel
+import kotlinx.coroutines.currentCoroutineContext
+import kotlinx.coroutines.withContext
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.*
+import java.nio.ByteBuffer
+import java.time.Instant
+import java.time.ZoneId
+import java.time.ZoneOffset
+import java.time.format.DateTimeFormatter
+
+private const val generatedClientVersion = "10"
+private val timestampFormatter =
+    DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
+        .withZone(ZoneId.ofOffset("GMT", ZoneOffset.UTC))
+private val JsonInstance = Json {
+    encodeDefaults = true
+    ignoreUnknownKeys = true
+}
+private typealias __TestClientPrefixedHeadersFn = (() -> MutableMap<String, String>?)?
+
+class TestClientPrefixed(
+    private val httpClient: HttpClient,
+    private val baseUrl: String,
+    private val headers: __TestClientPrefixedHeadersFn,
+    private val onError: ((err: Exception) -> Unit) = {},
+) {
+    val tests: TestClientPrefixedTestsService = TestClientPrefixedTestsService(
+                httpClient = httpClient,
+                baseUrl = baseUrl,
+                headers = headers,
+                onError = onError,
+            )
+
+    val users: TestClientPrefixedUsersService = TestClientPrefixedUsersService(
+                httpClient = httpClient,
+                baseUrl = baseUrl,
+                headers = headers,
+                onError = onError,
+            )
+}
+
+class TestClientPrefixedTestsService(
+    private val httpClient: HttpClient,
+    private val baseUrl: String,
+    private val headers: __TestClientPrefixedHeadersFn,
+    private val onError: ((err: Exception) -> Unit) = {},
+) {
+    suspend fun emptyParamsGetRequest(): FooDefaultPayload {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/empty-params-get-request",
+                method = HttpMethod.Get,
+                params = null,
+                headers = headers?.invoke(),
+            ).execute()
+            if (response.headers["Content-Type"] != "application/json") {
+            throw TestClientPrefixedError(
+                code = 0,
+                errorMessage = "Expected server to return Content-Type \"application/json\". Got \"${response.headers["Content-Type"]}\"",
+                data = JsonPrimitive(response.bodyAsText()),
+                stack = null,
+            )
+        }
+            if (response.status.value in 200..299) {
+                return FooDefaultPayload.fromJson(response.bodyAsText())
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun emptyParamsPostRequest(): FooDefaultPayload {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/empty-params-post-request",
+                method = HttpMethod.Post,
+                params = null,
+                headers = headers?.invoke(),
+            ).execute()
+            if (response.headers["Content-Type"] != "application/json") {
+            throw TestClientPrefixedError(
+                code = 0,
+                errorMessage = "Expected server to return Content-Type \"application/json\". Got \"${response.headers["Content-Type"]}\"",
+                data = JsonPrimitive(response.bodyAsText()),
+                stack = null,
+            )
+        }
+            if (response.status.value in 200..299) {
+                return FooDefaultPayload.fromJson(response.bodyAsText())
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun emptyResponseGetRequest(params: FooDefaultPayload): Unit {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/empty-response-get-request",
+                method = HttpMethod.Get,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            
+            if (response.status.value in 200..299) {
+                return 
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun emptyResponsePostRequest(params: FooDefaultPayload): Unit {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/empty-response-post-request",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            
+            if (response.status.value in 200..299) {
+                return 
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    /**
+* If the target language supports it. Generated code should mark this procedure as deprecated.
+*/
+@Deprecated(message = "This method was marked as deprecated by the server")
+suspend fun deprecatedRpc(params: FooDeprecatedRpcParams): Unit {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/deprecated-rpc",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            
+            if (response.status.value in 200..299) {
+                return 
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun sendError(params: FooSendErrorParams): Unit {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/send-error",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            
+            if (response.status.value in 200..299) {
+                return 
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun sendObject(params: FooObjectWithEveryType): FooObjectWithEveryType {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/send-object",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            if (response.headers["Content-Type"] != "application/json") {
+            throw TestClientPrefixedError(
+                code = 0,
+                errorMessage = "Expected server to return Content-Type \"application/json\". Got \"${response.headers["Content-Type"]}\"",
+                data = JsonPrimitive(response.bodyAsText()),
+                stack = null,
+            )
+        }
+            if (response.status.value in 200..299) {
+                return FooObjectWithEveryType.fromJson(response.bodyAsText())
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun sendObjectWithNullableFields(params: FooObjectWithEveryNullableType): FooObjectWithEveryNullableType {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/send-object-with-nullable-fields",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            if (response.headers["Content-Type"] != "application/json") {
+            throw TestClientPrefixedError(
+                code = 0,
+                errorMessage = "Expected server to return Content-Type \"application/json\". Got \"${response.headers["Content-Type"]}\"",
+                data = JsonPrimitive(response.bodyAsText()),
+                stack = null,
+            )
+        }
+            if (response.status.value in 200..299) {
+                return FooObjectWithEveryNullableType.fromJson(response.bodyAsText())
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun sendObjectWithPascalCaseKeys(params: FooObjectWithPascalCaseKeys): FooObjectWithPascalCaseKeys {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/send-object-with-pascal-case-keys",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            if (response.headers["Content-Type"] != "application/json") {
+            throw TestClientPrefixedError(
+                code = 0,
+                errorMessage = "Expected server to return Content-Type \"application/json\". Got \"${response.headers["Content-Type"]}\"",
+                data = JsonPrimitive(response.bodyAsText()),
+                stack = null,
+            )
+        }
+            if (response.status.value in 200..299) {
+                return FooObjectWithPascalCaseKeys.fromJson(response.bodyAsText())
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun sendObjectWithSnakeCaseKeys(params: FooObjectWithSnakeCaseKeys): FooObjectWithSnakeCaseKeys {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/send-object-with-snake-case-keys",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            if (response.headers["Content-Type"] != "application/json") {
+            throw TestClientPrefixedError(
+                code = 0,
+                errorMessage = "Expected server to return Content-Type \"application/json\". Got \"${response.headers["Content-Type"]}\"",
+                data = JsonPrimitive(response.bodyAsText()),
+                stack = null,
+            )
+        }
+            if (response.status.value in 200..299) {
+                return FooObjectWithSnakeCaseKeys.fromJson(response.bodyAsText())
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun sendPartialObject(params: FooObjectWithEveryOptionalType): FooObjectWithEveryOptionalType {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/send-partial-object",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            if (response.headers["Content-Type"] != "application/json") {
+            throw TestClientPrefixedError(
+                code = 0,
+                errorMessage = "Expected server to return Content-Type \"application/json\". Got \"${response.headers["Content-Type"]}\"",
+                data = JsonPrimitive(response.bodyAsText()),
+                stack = null,
+            )
+        }
+            if (response.status.value in 200..299) {
+                return FooObjectWithEveryOptionalType.fromJson(response.bodyAsText())
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun sendRecursiveObject(params: FooRecursiveObject): FooRecursiveObject {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/send-recursive-object",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            if (response.headers["Content-Type"] != "application/json") {
+            throw TestClientPrefixedError(
+                code = 0,
+                errorMessage = "Expected server to return Content-Type \"application/json\". Got \"${response.headers["Content-Type"]}\"",
+                data = JsonPrimitive(response.bodyAsText()),
+                stack = null,
+            )
+        }
+            if (response.status.value in 200..299) {
+                return FooRecursiveObject.fromJson(response.bodyAsText())
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun sendRecursiveUnion(params: FooRecursiveUnion): FooRecursiveUnion {
+        try {
+            val response = __prepareRequest(
+                client = httpClient,
+                url = "$baseUrl/rpcs/tests/send-recursive-union",
+                method = HttpMethod.Post,
+                params = params,
+                headers = headers?.invoke(),
+            ).execute()
+            if (response.headers["Content-Type"] != "application/json") {
+            throw TestClientPrefixedError(
+                code = 0,
+                errorMessage = "Expected server to return Content-Type \"application/json\". Got \"${response.headers["Content-Type"]}\"",
+                data = JsonPrimitive(response.bodyAsText()),
+                stack = null,
+            )
+        }
+            if (response.status.value in 200..299) {
+                return FooRecursiveUnion.fromJson(response.bodyAsText())
+            }
+            throw TestClientPrefixedError.fromJson(response.bodyAsText())    
+        } catch (e: Exception) {
+            onError(e)
+            throw e
+        }
+    }
+
+    suspend fun streamAutoReconnect(
+            params: FooAutoReconnectParams,
+            lastEventId: String? = null,
+            bufferCapacity: Int = 1024 * 1024,
+            onOpen: ((response: HttpResponse) -> Unit) = {},
+            onClose: (() -> Unit) = {},
+            onRequestError: ((error: Exception) -> Unit) = {},
+            onResponseError: ((error: TestClientPrefixedError) -> Unit) = {},
+            onData: ((data: FooAutoReconnectResponse) -> Unit) = {},
+            maxBackoffTime: Long? = null,
+        ): Unit {
+            __handleSseRequest(
+                httpClient = httpClient,
+                url = "$baseUrl/rpcs/tests/stream-auto-reconnect",
+                method = HttpMethod.Get,
+                params = params,
+                headers = headers,
+                backoffTime = 0,
+                maxBackoffTime = maxBackoffTime ?: 30000L,
+                lastEventId = lastEventId,
+                bufferCapacity = bufferCapacity,
+                onOpen = onOpen,
+                onClose = onClose,
+                onError = onError,
+                onRequestError = onRequestError,
+                onResponseError = onResponseError,
+                onData = { str ->
+                    val data = FooAutoReconnectResponse.fromJson(str)
+                    onData(data)
+                }
+            )
+        }
+
+    /**
+* This route will always return an error. The client should automatically retry with exponential backoff.
+*/
+suspend fun streamConnectionErrorTest(
+            params: FooStreamConnectionErrorTestParams,
+            lastEventId: String? = null,
+            bufferCapacity: Int = 1024 * 1024,
+            onOpen: ((response: HttpResponse) -> Unit) = {},
+            onClose: (() -> Unit) = {},
+            onRequestError: ((error: Exception) -> Unit) = {},
+            onResponseError: ((error: TestClientPrefixedError) -> Unit) = {},
+            onData: ((data: FooStreamConnectionErrorTestResponse) -> Unit) = {},
+            maxBackoffTime: Long? = null,
+        ): Unit {
+            __handleSseRequest(
+                httpClient = httpClient,
+                url = "$baseUrl/rpcs/tests/stream-connection-error-test",
+                method = HttpMethod.Get,
+                params = params,
+                headers = headers,
+                backoffTime = 0,
+                maxBackoffTime = maxBackoffTime ?: 30000L,
+                lastEventId = lastEventId,
+                bufferCapacity = bufferCapacity,
+                onOpen = onOpen,
+                onClose = onClose,
+                onError = onError,
+                onRequestError = onRequestError,
+                onResponseError = onResponseError,
+                onData = { str ->
+                    val data = FooStreamConnectionErrorTestResponse.fromJson(str)
+                    onData(data)
+                }
+            )
+        }
+
+    /**
+* Test to ensure that the client can handle receiving streams of large objects. When objects are large messages will sometimes get sent in chunks. Meaning you have to handle receiving a partial message
+*/
+suspend fun streamLargeObjects(
+            
+            lastEventId: String? = null,
+            bufferCapacity: Int = 1024 * 1024,
+            onOpen: ((response: HttpResponse) -> Unit) = {},
+            onClose: (() -> Unit) = {},
+            onRequestError: ((error: Exception) -> Unit) = {},
+            onResponseError: ((error: TestClientPrefixedError) -> Unit) = {},
+            onData: ((data: FooStreamLargeObjectsResponse) -> Unit) = {},
+            maxBackoffTime: Long? = null,
+        ): Unit {
+            __handleSseRequest(
+                httpClient = httpClient,
+                url = "$baseUrl/rpcs/tests/stream-large-objects",
+                method = HttpMethod.Get,
+                params = null,
+                headers = headers,
+                backoffTime = 0,
+                maxBackoffTime = maxBackoffTime ?: 30000L,
+                lastEventId = lastEventId,
+                bufferCapacity = bufferCapacity,
+                onOpen = onOpen,
+                onClose = onClose,
+                onError = onError,
+                onRequestError = onRequestError,
+                onResponseError = onResponseError,
+                onData = { str ->
+                    val data = FooStreamLargeObjectsResponse.fromJson(str)
+                    onData(data)
+                }
+            )
+        }
+
+    suspend fun streamMessages(
+            params: FooChatMessageParams,
+            lastEventId: String? = null,
+            bufferCapacity: Int = 1024 * 1024,
+            onOpen: ((response: HttpResponse) -> Unit) = {},
+            onClose: (() -> Unit) = {},
+            onRequestError: ((error: Exception) -> Unit) = {},
+            onResponseError: ((error: TestClientPrefixedError) -> Unit) = {},
+            onData: ((data: FooChatMessage) -> Unit) = {},
+            maxBackoffTime: Long? = null,
+        ): Unit {
+            __handleSseRequest(
+                httpClient = httpClient,
+                url = "$baseUrl/rpcs/tests/stream-messages",
+                method = HttpMethod.Get,
+                params = params,
+                headers = headers,
+                backoffTime = 0,
+                maxBackoffTime = maxBackoffTime ?: 30000L,
+                lastEventId = lastEventId,
+                bufferCapacity = bufferCapacity,
+                onOpen = onOpen,
+                onClose = onClose,
+                onError = onError,
+                onRequestError = onRequestError,
+                onResponseError = onResponseError,
+                onData = { str ->
+                    val data = FooChatMessage.fromJson(str)
+                    onData(data)
+                }
+            )
+        }
+
+    suspend fun streamRetryWithNewCredentials(
+            
+            lastEventId: String? = null,
+            bufferCapacity: Int = 1024 * 1024,
+            onOpen: ((response: HttpResponse) -> Unit) = {},
+            onClose: (() -> Unit) = {},
+            onRequestError: ((error: Exception) -> Unit) = {},
+            onResponseError: ((error: TestClientPrefixedError) -> Unit) = {},
+            onData: ((data: FooTestsStreamRetryWithNewCredentialsResponse) -> Unit) = {},
+            maxBackoffTime: Long? = null,
+        ): Unit {
+            __handleSseRequest(
+                httpClient = httpClient,
+                url = "$baseUrl/rpcs/tests/stream-retry-with-new-credentials",
+                method = HttpMethod.Get,
+                params = null,
+                headers = headers,
+                backoffTime = 0,
+                maxBackoffTime = maxBackoffTime ?: 30000L,
+                lastEventId = lastEventId,
+                bufferCapacity = bufferCapacity,
+                onOpen = onOpen,
+                onClose = onClose,
+                onError = onError,
+                onRequestError = onRequestError,
+                onResponseError = onResponseError,
+                onData = { str ->
+                    val data = FooTestsStreamRetryWithNewCredentialsResponse.fromJson(str)
+                    onData(data)
+                }
+            )
+        }
+
+    /**
+* When the client receives the 'done' event, it should close the connection and NOT reconnect
+*/
+suspend fun streamTenEventsThenEnd(
+            
+            lastEventId: String? = null,
+            bufferCapacity: Int = 1024 * 1024,
+            onOpen: ((response: HttpResponse) -> Unit) = {},
+            onClose: (() -> Unit) = {},
+            onRequestError: ((error: Exception) -> Unit) = {},
+            onResponseError: ((error: TestClientPrefixedError) -> Unit) = {},
+            onData: ((data: FooChatMessage) -> Unit) = {},
+            maxBackoffTime: Long? = null,
+        ): Unit {
+            __handleSseRequest(
+                httpClient = httpClient,
+                url = "$baseUrl/rpcs/tests/stream-ten-events-then-end",
+                method = HttpMethod.Get,
+                params = null,
+                headers = headers,
+                backoffTime = 0,
+                maxBackoffTime = maxBackoffTime ?: 30000L,
+                lastEventId = lastEventId,
+                bufferCapacity = bufferCapacity,
+                onOpen = onOpen,
+                onClose = onClose,
+                onError = onError,
+                onRequestError = onRequestError,
+                onResponseError = onResponseError,
+                onData = { str ->
+                    val data = FooChatMessage.fromJson(str)
+                    onData(data)
+                }
+            )
+        }
+}
+
+
+
+class TestClientPrefixedUsersService(
+    private val httpClient: HttpClient,
+    private val baseUrl: String,
+    private val headers: __TestClientPrefixedHeadersFn,
+    private val onError: ((err: Exception) -> Unit) = {},
+) {
+    suspend fun watchUser(
+            params: FooUsersWatchUserParams,
+            lastEventId: String? = null,
+            bufferCapacity: Int = 1024 * 1024,
+            onOpen: ((response: HttpResponse) -> Unit) = {},
+            onClose: (() -> Unit) = {},
+            onRequestError: ((error: Exception) -> Unit) = {},
+            onResponseError: ((error: TestClientPrefixedError) -> Unit) = {},
+            onData: ((data: FooUsersWatchUserResponse) -> Unit) = {},
+            maxBackoffTime: Long? = null,
+        ): Unit {
+            __handleSseRequest(
+                httpClient = httpClient,
+                url = "$baseUrl/rpcs/users/watch-user",
+                method = HttpMethod.Get,
+                params = params,
+                headers = headers,
+                backoffTime = 0,
+                maxBackoffTime = maxBackoffTime ?: 30000L,
+                lastEventId = lastEventId,
+                bufferCapacity = bufferCapacity,
+                onOpen = onOpen,
+                onClose = onClose,
+                onError = onError,
+                onRequestError = onRequestError,
+                onResponseError = onResponseError,
+                onData = { str ->
+                    val data = FooUsersWatchUserResponse.fromJson(str)
+                    onData(data)
+                }
+            )
+        }
+}
+
+
+
+interface TestClientPrefixedModel {
+    fun toJson(): String
+    fun toUrlQueryParams(): String
+}
+
+interface TestClientPrefixedModelFactory<T> {
+    fun new(): T
+    fun fromJson(input: String): T
+    fun fromJsonElement(
+        __input: JsonElement,
+        instancePath: String = "",
+    ): T
+}
+
+data class TestClientPrefixedError(
+    val code: Int,
+    val errorMessage: String,
+    val data: JsonElement?,
+    val stack: List<String>?,
+) : Exception(errorMessage), TestClientPrefixedModel {
+    override fun toJson(): String {
+        var output = "{"
+        output += "\"code\":"
+        output += "$code"
+        output += ",\"message\":"
+        output += buildString { printQuoted(errorMessage) }
+        if (data != null) {
+            output += ",\"data\":"
+            output += JsonInstance.encodeToString(data)
+        }
+        if (stack != null) {
+            output += ",\"stack\":"
+            output += "["
+            for ((__index, __element) in stack.withIndex()) {
+                if (__index > 0) {
+                    output += ","
+                }
+                output += buildString { printQuoted(__element) }
+            }
+            output += "]"
+        }
+        output += "}"
+        return output
+    }
+
+    override fun toUrlQueryParams(): String {
+        val queryParts = mutableListOf<String>()
+        queryParts.add("code=${code}")
+        queryParts.add("message=${errorMessage}")
+        return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<TestClientPrefixedError> {
+        override fun new(): TestClientPrefixedError {
+            return TestClientPrefixedError(
+                code = 0,
+                errorMessage = "",
+                data = null,
+                stack = null
+            )
+        }
+
+        override fun fromJson(input: String): TestClientPrefixedError {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): TestClientPrefixedError {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] TestClientPrefixedError.fromJsonElement() expected JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty TestClientPrefixedError.")
+            }
+            val code = when (__input.jsonObject["code"]) {
+                is JsonPrimitive -> __input.jsonObject["code"]!!.jsonPrimitive.intOrNull ?: 0
+                else -> 0
+            }
+            val errorMessage = when (__input.jsonObject["message"]) {
+                is JsonPrimitive -> __input.jsonObject["message"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            val data = when (__input.jsonObject["data"]) {
+                is JsonNull -> null
+                is JsonElement -> __input.jsonObject["data"]!!
+                else -> null
+            }
+            val stack = when (__input.jsonObject["stack"]) {
+                is JsonArray -> {
+                    val stackVal = mutableListOf<String>()
+                    for (item in __input.jsonObject["stack"]!!.jsonArray) {
+                        stackVal.add(
+                            when (item) {
+                                is JsonPrimitive -> item.contentOrNull ?: ""
+                                else -> ""
+                            }
+                        )
+                    }
+                    stackVal
+                }
+
+                else -> null
+
+            }
+            return TestClientPrefixedError(
+                code,
+                errorMessage,
+                data,
+                stack,
+            )
+        }
+
+    }
+}
+
+data class FooManuallyAddedModel(
+    val hello: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"hello\":"
+output += buildString { printQuoted(hello) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("hello=$hello")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooManuallyAddedModel> {
+        @JvmStatic
+        override fun new(): FooManuallyAddedModel {
+            return FooManuallyAddedModel(
+                hello = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooManuallyAddedModel {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooManuallyAddedModel {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooManuallyAddedModel.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooManuallyAddedModel.")
+                return new()
+            }
+val hello: String = when (__input.jsonObject["hello"]) {
+                is JsonPrimitive -> __input.jsonObject["hello"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooManuallyAddedModel(
+                hello,
+            )
+        }
+    }
+}
+
+
+
+data class FooDefaultPayload(
+    val message: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"message\":"
+output += buildString { printQuoted(message) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("message=$message")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooDefaultPayload> {
+        @JvmStatic
+        override fun new(): FooDefaultPayload {
+            return FooDefaultPayload(
+                message = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooDefaultPayload {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooDefaultPayload {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooDefaultPayload.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooDefaultPayload.")
+                return new()
+            }
+val message: String = when (__input.jsonObject["message"]) {
+                is JsonPrimitive -> __input.jsonObject["message"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooDefaultPayload(
+                message,
+            )
+        }
+    }
+}
+
+
+
+@Deprecated(message = "This class was marked as deprecated by the server")
+data class FooDeprecatedRpcParams(
+@Deprecated(message = "This field was marked as deprecated by the server")
+    val deprecatedField: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"deprecatedField\":"
+output += buildString { printQuoted(deprecatedField) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("deprecatedField=$deprecatedField")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooDeprecatedRpcParams> {
+        @JvmStatic
+        override fun new(): FooDeprecatedRpcParams {
+            return FooDeprecatedRpcParams(
+                deprecatedField = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooDeprecatedRpcParams {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooDeprecatedRpcParams {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooDeprecatedRpcParams.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooDeprecatedRpcParams.")
+                return new()
+            }
+val deprecatedField: String = when (__input.jsonObject["deprecatedField"]) {
+                is JsonPrimitive -> __input.jsonObject["deprecatedField"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooDeprecatedRpcParams(
+                deprecatedField,
+            )
+        }
+    }
+}
+
+
+
+data class FooSendErrorParams(
+    val code: UShort,
+    val message: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"code\":"
+output += code
+output += ",\"message\":"
+output += buildString { printQuoted(message) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("code=$code")
+queryParts.add("message=$message")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooSendErrorParams> {
+        @JvmStatic
+        override fun new(): FooSendErrorParams {
+            return FooSendErrorParams(
+                code = 0u,
+                message = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooSendErrorParams {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooSendErrorParams {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooSendErrorParams.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooSendErrorParams.")
+                return new()
+            }
+val code: UShort = when (__input.jsonObject["code"]) {
+                is JsonPrimitive -> __input.jsonObject["code"]!!.jsonPrimitive.contentOrNull?.toUShortOrNull() ?: 0u
+                else -> 0u
+            }
+val message: String = when (__input.jsonObject["message"]) {
+                is JsonPrimitive -> __input.jsonObject["message"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooSendErrorParams(
+                code,
+                message,
+            )
+        }
+    }
+}
+
+
+
+data class FooObjectWithEveryType(
+    val any: JsonElement,
+    val boolean: Boolean,
+    val string: String,
+    val timestamp: Instant,
+    val float32: Float,
+    val float64: Double,
+    val int8: Byte,
+    val uint8: UByte,
+    val int16: Short,
+    val uint16: UShort,
+    val int32: Int,
+    val uint32: UInt,
+    val int64: Long,
+    val uint64: ULong,
+    val enumerator: FooFooObjectWithEveryTypeEnumerator,
+    val array: MutableList<Boolean>,
+    val `object`: FooFooObjectWithEveryTypeObject,
+    val record: MutableMap<String, ULong>,
+    val discriminator: FooFooObjectWithEveryTypeDiscriminator,
+    val nestedObject: FooFooObjectWithEveryTypeNestedObject,
+    val nestedArray: MutableList<MutableList<FooFooObjectWithEveryTypeNestedArrayElementElement>>,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"any\":"
+output += JsonInstance.encodeToString(any)
+output += ",\"boolean\":"
+output += boolean
+output += ",\"string\":"
+output += buildString { printQuoted(string) }
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += ",\"float32\":"
+output += float32
+output += ",\"float64\":"
+output += float64
+output += ",\"int8\":"
+output += int8
+output += ",\"uint8\":"
+output += uint8
+output += ",\"int16\":"
+output += int16
+output += ",\"uint16\":"
+output += uint16
+output += ",\"int32\":"
+output += int32
+output += ",\"uint32\":"
+output += uint32
+output += ",\"int64\":"
+output += "\"${int64}\""
+output += ",\"uint64\":"
+output += "\"${uint64}\""
+output += ",\"enumerator\":"
+output += "\"${enumerator.serialValue}\""
+output += ",\"array\":"
+output += "["
+                for ((__index, __element) in array.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += __element
+                }
+                output += "]"
+output += ",\"object\":"
+output += `object`.toJson()
+output += ",\"record\":"
+output += "{"
+            for ((__index, __entry) in record.entries.withIndex()) {
+                if (__index != 0) {
+                    output += ","
+                }
+                output += "${buildString { printQuoted(__entry.key) }}:"
+                output += "\"${__entry.value}\""
+            }
+            output += "}"
+output += ",\"discriminator\":"
+output += discriminator.toJson()
+output += ",\"nestedObject\":"
+output += nestedObject.toJson()
+output += ",\"nestedArray\":"
+output += "["
+                for ((__index, __element) in nestedArray.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += "["
+                for ((__index, __element) in __element.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += __element.toJson()
+                }
+                output += "]"
+                }
+                output += "]"
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+__logError("[WARNING] any's cannot be serialized to query params. Skipping field at /FooObjectWithEveryType/any.")
+queryParts.add("boolean=$boolean")
+queryParts.add("string=$string")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+queryParts.add("float32=$float32")
+queryParts.add("float64=$float64")
+queryParts.add("int8=$int8")
+queryParts.add("uint8=$uint8")
+queryParts.add("int16=$int16")
+queryParts.add("uint16=$uint16")
+queryParts.add("int32=$int32")
+queryParts.add("uint32=$uint32")
+queryParts.add("int64=$int64")
+queryParts.add("uint64=$uint64")
+queryParts.add("enumerator=${enumerator.serialValue}")
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooObjectWithEveryType/array.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryType/object.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryType/record.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryType/discriminator.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryType/nestedObject.")
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooObjectWithEveryType/nestedArray.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooObjectWithEveryType> {
+        @JvmStatic
+        override fun new(): FooObjectWithEveryType {
+            return FooObjectWithEveryType(
+                any = JsonNull,
+                boolean = false,
+                string = "",
+                timestamp = Instant.now(),
+                float32 = 0.0F,
+                float64 = 0.0,
+                int8 = 0,
+                uint8 = 0u,
+                int16 = 0,
+                uint16 = 0u,
+                int32 = 0,
+                uint32 = 0u,
+                int64 = 0L,
+                uint64 = 0UL,
+                enumerator = FooFooObjectWithEveryTypeEnumerator.new(),
+                array = mutableListOf(),
+                `object` = FooFooObjectWithEveryTypeObject.new(),
+                record = mutableMapOf(),
+                discriminator = FooFooObjectWithEveryTypeDiscriminator.new(),
+                nestedObject = FooFooObjectWithEveryTypeNestedObject.new(),
+                nestedArray = mutableListOf(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooObjectWithEveryType {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooObjectWithEveryType {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooObjectWithEveryType.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooObjectWithEveryType.")
+                return new()
+            }
+val any: JsonElement = when (__input.jsonObject["any"]) {
+                is JsonElement -> __input.jsonObject["any"]!!
+                else -> JsonNull
+            }
+val boolean: Boolean = when (__input.jsonObject["boolean"]) {
+                is JsonPrimitive -> __input.jsonObject["boolean"]!!.jsonPrimitive.booleanOrNull ?: false
+                else -> false
+            }
+val string: String = when (__input.jsonObject["string"]) {
+                is JsonPrimitive -> __input.jsonObject["string"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val float32: Float = when (__input.jsonObject["float32"]) {
+                is JsonPrimitive -> __input.jsonObject["float32"]!!.jsonPrimitive.floatOrNull ?: 0.0F
+                else -> 0.0F
+            }
+val float64: Double = when (__input.jsonObject["float64"]) {
+                is JsonPrimitive -> __input.jsonObject["float64"]!!.jsonPrimitive.doubleOrNull ?: 0.0
+                else -> 0.0
+            }
+val int8: Byte = when (__input.jsonObject["int8"]) {
+                is JsonPrimitive -> __input.jsonObject["int8"]!!.jsonPrimitive.contentOrNull?.toByteOrNull() ?: 0
+                else -> 0
+            }
+val uint8: UByte = when (__input.jsonObject["uint8"]) {
+                is JsonPrimitive -> __input.jsonObject["uint8"]!!.jsonPrimitive.contentOrNull?.toUByteOrNull() ?: 0u
+                else -> 0u
+            }
+val int16: Short = when (__input.jsonObject["int16"]) {
+                is JsonPrimitive -> __input.jsonObject["int16"]!!.jsonPrimitive.contentOrNull?.toShortOrNull() ?: 0
+                else -> 0
+            }
+val uint16: UShort = when (__input.jsonObject["uint16"]) {
+                is JsonPrimitive -> __input.jsonObject["uint16"]!!.jsonPrimitive.contentOrNull?.toUShortOrNull() ?: 0u
+                else -> 0u
+            }
+val int32: Int = when (__input.jsonObject["int32"]) {
+                is JsonPrimitive -> __input.jsonObject["int32"]!!.jsonPrimitive.intOrNull ?: 0
+                else -> 0
+            }
+val uint32: UInt = when (__input.jsonObject["uint32"]) {
+                is JsonPrimitive -> __input.jsonObject["uint32"]!!.jsonPrimitive.contentOrNull?.toUIntOrNull() ?: 0u
+                else -> 0u
+            }
+val int64: Long = when (__input.jsonObject["int64"]) {
+                is JsonPrimitive -> __input.jsonObject["int64"]!!.jsonPrimitive.longOrNull ?: 0L
+                else -> 0L
+            }
+val uint64: ULong = when (__input.jsonObject["uint64"]) {
+                is JsonPrimitive -> __input.jsonObject["uint64"]!!.jsonPrimitive.contentOrNull?.toULongOrNull() ?: 0UL
+                else -> 0UL
+            }
+val enumerator: FooFooObjectWithEveryTypeEnumerator = when (__input.jsonObject["enumerator"]) {
+                is JsonNull -> FooFooObjectWithEveryTypeEnumerator.new()
+                is JsonPrimitive -> FooFooObjectWithEveryTypeEnumerator.fromJsonElement(__input.jsonObject["enumerator"]!!, "$instancePath/enumerator")
+                else -> FooFooObjectWithEveryTypeEnumerator.new()
+            }
+val array: MutableList<Boolean> = when (__input.jsonObject["array"]) {
+                is JsonArray -> {
+                    val __value: MutableList<Boolean> = mutableListOf()
+                    for (__element in __input.jsonObject["array"]!!.jsonArray) {
+                        __value.add(
+                            when (__element) {
+                is JsonPrimitive -> __element!!.jsonPrimitive.booleanOrNull ?: false
+                else -> false
+            }
+                        )
+                    }
+                    __value
+                }
+
+                else -> mutableListOf()
+            }
+val `object`: FooFooObjectWithEveryTypeObject = when (__input.jsonObject["object"]) {
+                is JsonObject -> FooFooObjectWithEveryTypeObject.fromJsonElement(
+                    __input.jsonObject["object"]!!,
+                    "$instancePath/object",
+                )
+
+                else -> FooFooObjectWithEveryTypeObject.new()
+            }
+val record: MutableMap<String, ULong> = when (__input.jsonObject["record"]) {
+                is JsonObject -> {
+                    val __value: MutableMap<String, ULong> = mutableMapOf()
+                    for (__entry in __input.jsonObject["record"]!!.jsonObject.entries) {
+                        __value[__entry.key] = when (__entry.value) {
+                is JsonPrimitive -> __entry.value!!.jsonPrimitive.contentOrNull?.toULongOrNull() ?: 0UL
+                else -> 0UL
+            }
+                    }
+                    __value
+                }
+
+                else -> mutableMapOf()
+            }
+val discriminator: FooFooObjectWithEveryTypeDiscriminator = when (__input.jsonObject["discriminator"]) {
+                is JsonObject -> FooFooObjectWithEveryTypeDiscriminator.fromJsonElement(
+                    __input.jsonObject["discriminator"]!!,
+                    "$instancePath/discriminator",
+                )
+                else -> FooFooObjectWithEveryTypeDiscriminator.new()
+            }
+val nestedObject: FooFooObjectWithEveryTypeNestedObject = when (__input.jsonObject["nestedObject"]) {
+                is JsonObject -> FooFooObjectWithEveryTypeNestedObject.fromJsonElement(
+                    __input.jsonObject["nestedObject"]!!,
+                    "$instancePath/nestedObject",
+                )
+
+                else -> FooFooObjectWithEveryTypeNestedObject.new()
+            }
+val nestedArray: MutableList<MutableList<FooFooObjectWithEveryTypeNestedArrayElementElement>> = when (__input.jsonObject["nestedArray"]) {
+                is JsonArray -> {
+                    val __value: MutableList<MutableList<FooFooObjectWithEveryTypeNestedArrayElementElement>> = mutableListOf()
+                    for (__element in __input.jsonObject["nestedArray"]!!.jsonArray) {
+                        __value.add(
+                            when (__element) {
+                is JsonArray -> {
+                    val __value: MutableList<FooFooObjectWithEveryTypeNestedArrayElementElement> = mutableListOf()
+                    for (__element in __element!!.jsonArray) {
+                        __value.add(
+                            when (__element) {
+                is JsonObject -> FooFooObjectWithEveryTypeNestedArrayElementElement.fromJsonElement(
+                    __element!!,
+                    "$instancePath/undefined",
+                )
+
+                else -> FooFooObjectWithEveryTypeNestedArrayElementElement.new()
+            }
+                        )
+                    }
+                    __value
+                }
+
+                else -> mutableListOf()
+            }
+                        )
+                    }
+                    __value
+                }
+
+                else -> mutableListOf()
+            }
+            return FooObjectWithEveryType(
+                any,
+                boolean,
+                string,
+                timestamp,
+                float32,
+                float64,
+                int8,
+                uint8,
+                int16,
+                uint16,
+                int32,
+                uint32,
+                int64,
+                uint64,
+                enumerator,
+                array,
+                `object`,
+                record,
+                discriminator,
+                nestedObject,
+                nestedArray,
+            )
+        }
+    }
+}
+
+enum class FooFooObjectWithEveryTypeEnumerator {
+    A,
+    B,
+    C;
+    val serialValue: String
+        get() = when (this) {
+            A -> "A"
+            B -> "B"
+            C -> "C"
+        }
+    
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryTypeEnumerator> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryTypeEnumerator {
+            return A
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryTypeEnumerator {
+            return when (input) {
+                A.serialValue -> A
+                B.serialValue -> B
+                C.serialValue -> C
+                else -> A
+            }
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryTypeEnumerator {
+            if (__input !is JsonPrimitive) {
+                __logError("[WARNING] FooFooObjectWithEveryTypeEnumerator.fromJsonElement() expected kotlinx.serialization.json.JsonPrimitive at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryTypeEnumerator.")
+                return new()
+            }
+            return when (__input.jsonPrimitive.contentOrNull) {
+                "A" -> A
+                "B" -> B
+                "C" -> C
+                else -> new()
+            }
+        }
+    }
+}
+
+data class FooFooObjectWithEveryTypeObject(
+    val string: String,
+    val boolean: Boolean,
+    val timestamp: Instant,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"string\":"
+output += buildString { printQuoted(string) }
+output += ",\"boolean\":"
+output += boolean
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("string=$string")
+queryParts.add("boolean=$boolean")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryTypeObject> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryTypeObject {
+            return FooFooObjectWithEveryTypeObject(
+                string = "",
+                boolean = false,
+                timestamp = Instant.now(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryTypeObject {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryTypeObject {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooObjectWithEveryTypeObject.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryTypeObject.")
+                return new()
+            }
+val string: String = when (__input.jsonObject["string"]) {
+                is JsonPrimitive -> __input.jsonObject["string"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val boolean: Boolean = when (__input.jsonObject["boolean"]) {
+                is JsonPrimitive -> __input.jsonObject["boolean"]!!.jsonPrimitive.booleanOrNull ?: false
+                else -> false
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+            return FooFooObjectWithEveryTypeObject(
+                string,
+                boolean,
+                timestamp,
+            )
+        }
+    }
+}
+
+
+
+sealed interface FooFooObjectWithEveryTypeDiscriminator : TestClientPrefixedModel {
+    val type: String
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryTypeDiscriminator> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryTypeDiscriminator {
+            return FooFooFooObjectWithEveryTypeDiscriminatorA.new()
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryTypeDiscriminator {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryTypeDiscriminator {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] Discriminator.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryTypeDiscriminator.")
+                return new()
+            }
+            return when (__input.jsonObject["type"]) {
+                is JsonPrimitive -> when (__input.jsonObject["type"]!!.jsonPrimitive.contentOrNull) {
+                    "A" -> FooFooFooObjectWithEveryTypeDiscriminatorA.fromJsonElement(__input, instancePath)
+"B" -> FooFooFooObjectWithEveryTypeDiscriminatorB.fromJsonElement(__input, instancePath)
+                    else -> new()
+                }
+
+                else -> new()
+            }
+        }
+    }
+}
+
+data class FooFooFooObjectWithEveryTypeDiscriminatorA(
+    val title: String,
+) : FooFooObjectWithEveryTypeDiscriminator {
+    override val type get() = "A"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"A\""
+output += ",\"title\":"
+output += buildString { printQuoted(title) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=A")
+queryParts.add("title=$title")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooObjectWithEveryTypeDiscriminatorA> {
+        @JvmStatic
+        override fun new(): FooFooFooObjectWithEveryTypeDiscriminatorA {
+            return FooFooFooObjectWithEveryTypeDiscriminatorA(
+                title = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooObjectWithEveryTypeDiscriminatorA {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooObjectWithEveryTypeDiscriminatorA {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooObjectWithEveryTypeDiscriminatorA.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooObjectWithEveryTypeDiscriminatorA.")
+                return new()
+            }
+val title: String = when (__input.jsonObject["title"]) {
+                is JsonPrimitive -> __input.jsonObject["title"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooFooObjectWithEveryTypeDiscriminatorA(
+                title,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooFooObjectWithEveryTypeDiscriminatorB(
+    val title: String,
+    val description: String,
+) : FooFooObjectWithEveryTypeDiscriminator {
+    override val type get() = "B"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"B\""
+output += ",\"title\":"
+output += buildString { printQuoted(title) }
+output += ",\"description\":"
+output += buildString { printQuoted(description) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=B")
+queryParts.add("title=$title")
+queryParts.add("description=$description")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooObjectWithEveryTypeDiscriminatorB> {
+        @JvmStatic
+        override fun new(): FooFooFooObjectWithEveryTypeDiscriminatorB {
+            return FooFooFooObjectWithEveryTypeDiscriminatorB(
+                title = "",
+                description = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooObjectWithEveryTypeDiscriminatorB {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooObjectWithEveryTypeDiscriminatorB {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooObjectWithEveryTypeDiscriminatorB.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooObjectWithEveryTypeDiscriminatorB.")
+                return new()
+            }
+val title: String = when (__input.jsonObject["title"]) {
+                is JsonPrimitive -> __input.jsonObject["title"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val description: String = when (__input.jsonObject["description"]) {
+                is JsonPrimitive -> __input.jsonObject["description"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooFooObjectWithEveryTypeDiscriminatorB(
+                title,
+                description,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooObjectWithEveryTypeNestedObject(
+    val id: String,
+    val timestamp: Instant,
+    val data: FooFooFooObjectWithEveryTypeNestedObjectData,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += ",\"data\":"
+output += data.toJson()
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooFooObjectWithEveryTypeNestedObject/data.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryTypeNestedObject> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryTypeNestedObject {
+            return FooFooObjectWithEveryTypeNestedObject(
+                id = "",
+                timestamp = Instant.now(),
+                data = FooFooFooObjectWithEveryTypeNestedObjectData.new(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryTypeNestedObject {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryTypeNestedObject {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooObjectWithEveryTypeNestedObject.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryTypeNestedObject.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val data: FooFooFooObjectWithEveryTypeNestedObjectData = when (__input.jsonObject["data"]) {
+                is JsonObject -> FooFooFooObjectWithEveryTypeNestedObjectData.fromJsonElement(
+                    __input.jsonObject["data"]!!,
+                    "$instancePath/data",
+                )
+
+                else -> FooFooFooObjectWithEveryTypeNestedObjectData.new()
+            }
+            return FooFooObjectWithEveryTypeNestedObject(
+                id,
+                timestamp,
+                data,
+            )
+        }
+    }
+}
+
+data class FooFooFooObjectWithEveryTypeNestedObjectData(
+    val id: String,
+    val timestamp: Instant,
+    val data: FooFooFooFooObjectWithEveryTypeNestedObjectDataData,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += ",\"data\":"
+output += data.toJson()
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooFooFooObjectWithEveryTypeNestedObjectData/data.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooObjectWithEveryTypeNestedObjectData> {
+        @JvmStatic
+        override fun new(): FooFooFooObjectWithEveryTypeNestedObjectData {
+            return FooFooFooObjectWithEveryTypeNestedObjectData(
+                id = "",
+                timestamp = Instant.now(),
+                data = FooFooFooFooObjectWithEveryTypeNestedObjectDataData.new(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooObjectWithEveryTypeNestedObjectData {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooObjectWithEveryTypeNestedObjectData {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooObjectWithEveryTypeNestedObjectData.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooObjectWithEveryTypeNestedObjectData.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val data: FooFooFooFooObjectWithEveryTypeNestedObjectDataData = when (__input.jsonObject["data"]) {
+                is JsonObject -> FooFooFooFooObjectWithEveryTypeNestedObjectDataData.fromJsonElement(
+                    __input.jsonObject["data"]!!,
+                    "$instancePath/data",
+                )
+
+                else -> FooFooFooFooObjectWithEveryTypeNestedObjectDataData.new()
+            }
+            return FooFooFooObjectWithEveryTypeNestedObjectData(
+                id,
+                timestamp,
+                data,
+            )
+        }
+    }
+}
+
+data class FooFooFooFooObjectWithEveryTypeNestedObjectDataData(
+    val id: String,
+    val timestamp: Instant,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooFooObjectWithEveryTypeNestedObjectDataData> {
+        @JvmStatic
+        override fun new(): FooFooFooFooObjectWithEveryTypeNestedObjectDataData {
+            return FooFooFooFooObjectWithEveryTypeNestedObjectDataData(
+                id = "",
+                timestamp = Instant.now(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooFooObjectWithEveryTypeNestedObjectDataData {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooFooObjectWithEveryTypeNestedObjectDataData {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooFooObjectWithEveryTypeNestedObjectDataData.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooFooObjectWithEveryTypeNestedObjectDataData.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+            return FooFooFooFooObjectWithEveryTypeNestedObjectDataData(
+                id,
+                timestamp,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooObjectWithEveryTypeNestedArrayElementElement(
+    val id: String,
+    val timestamp: Instant,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryTypeNestedArrayElementElement> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryTypeNestedArrayElementElement {
+            return FooFooObjectWithEveryTypeNestedArrayElementElement(
+                id = "",
+                timestamp = Instant.now(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryTypeNestedArrayElementElement {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryTypeNestedArrayElementElement {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooObjectWithEveryTypeNestedArrayElementElement.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryTypeNestedArrayElementElement.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+            return FooFooObjectWithEveryTypeNestedArrayElementElement(
+                id,
+                timestamp,
+            )
+        }
+    }
+}
+
+
+
+data class FooObjectWithEveryNullableType(
+    val any: JsonElement?,
+    val boolean: Boolean?,
+    val string: String?,
+    val timestamp: Instant?,
+    val float32: Float?,
+    val float64: Double?,
+    val int8: Byte?,
+    val uint8: UByte?,
+    val int16: Short?,
+    val uint16: UShort?,
+    val int32: Int?,
+    val uint32: UInt?,
+    val int64: Long?,
+    val uint64: ULong?,
+    val enumerator: FooFooObjectWithEveryNullableTypeEnumerator?,
+    val array: MutableList<Boolean?>?,
+    val `object`: FooFooObjectWithEveryNullableTypeObject?,
+    val record: MutableMap<String, ULong?>?,
+    val discriminator: FooFooObjectWithEveryNullableTypeDiscriminator?,
+    val nestedObject: FooFooObjectWithEveryNullableTypeNestedObject?,
+    val nestedArray: MutableList<MutableList<FooFooObjectWithEveryNullableTypeNestedArrayElementElement?>?>?,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"any\":"
+output += when (any) {
+                    null -> "null"
+                    else -> JsonInstance.encodeToString(any)
+                }
+output += ",\"boolean\":"
+output += boolean
+output += ",\"string\":"
+output += when (string) {
+                    is String -> buildString { printQuoted(string) }
+                    else -> "null"
+                }
+output += ",\"timestamp\":"
+output += when (timestamp) {
+                    is Instant -> "\"${timestampFormatter.format(timestamp)}\""
+                    else -> "null"
+                }
+output += ",\"float32\":"
+output += float32
+output += ",\"float64\":"
+output += float64
+output += ",\"int8\":"
+output += int8
+output += ",\"uint8\":"
+output += uint8
+output += ",\"int16\":"
+output += int16
+output += ",\"uint16\":"
+output += uint16
+output += ",\"int32\":"
+output += int32
+output += ",\"uint32\":"
+output += uint32
+output += ",\"int64\":"
+output += when (int64) {
+                    is Long -> "\"${int64}\""
+                    else -> "null"
+                }
+output += ",\"uint64\":"
+output += when (uint64) {
+                    is ULong -> "\"${uint64}\""
+                    else -> "null"
+                }
+output += ",\"enumerator\":"
+output += when (enumerator) {
+                    is FooFooObjectWithEveryNullableTypeEnumerator -> "\"${enumerator.serialValue}\""
+                    else -> "null"
+                }
+output += ",\"array\":"
+if (array == null) {
+                    output += "null"
+                } else {
+                    output += "["
+                    for ((__index, __element) in array.withIndex()) {
+                        if (__index != 0) {
+                            output += ","
+                        }
+                        output += __element
+                    }
+                    output += "]"
+                }
+output += ",\"object\":"
+output += `object`?.toJson()
+output += ",\"record\":"
+if (record == null) {
+                    output += "null"
+                } else {
+                    output += "{"
+                    for ((__index, __entry) in record.entries.withIndex()) {
+                        if (__index != 0) {
+                            output += ","
+                        }
+                        output += "${buildString { printQuoted(__entry.key) }}:"
+                        output += when (__entry.value) {
+                    is ULong -> "\"${__entry.value}\""
+                    else -> "null"
+                }
+                    }
+                    output += "}"
+                }
+output += ",\"discriminator\":"
+output += discriminator?.toJson()
+output += ",\"nestedObject\":"
+output += nestedObject?.toJson()
+output += ",\"nestedArray\":"
+if (nestedArray == null) {
+                    output += "null"
+                } else {
+                    output += "["
+                    for ((__index, __element) in nestedArray.withIndex()) {
+                        if (__index != 0) {
+                            output += ","
+                        }
+                        if (__element == null) {
+                    output += "null"
+                } else {
+                    output += "["
+                    for ((__index, __element) in __element.withIndex()) {
+                        if (__index != 0) {
+                            output += ","
+                        }
+                        output += __element?.toJson()
+                    }
+                    output += "]"
+                }
+                    }
+                    output += "]"
+                }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+__logError("[WARNING] any's cannot be serialized to query params. Skipping field at /FooObjectWithEveryNullableType/any.")
+queryParts.add("boolean=$boolean")
+queryParts.add("string=$string")
+queryParts.add(
+                    "timestamp=${
+                        when (timestamp) {
+                            is Instant -> timestampFormatter.format(timestamp)
+                            else -> "null"
+                        }
+                    }"
+        )
+queryParts.add("float32=$float32")
+queryParts.add("float64=$float64")
+queryParts.add("int8=$int8")
+queryParts.add("uint8=$uint8")
+queryParts.add("int16=$int16")
+queryParts.add("uint16=$uint16")
+queryParts.add("int32=$int32")
+queryParts.add("uint32=$uint32")
+queryParts.add("int64=$int64")
+queryParts.add("uint64=$uint64")
+queryParts.add("enumerator=${enumerator?.serialValue}")
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooObjectWithEveryNullableType/array.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryNullableType/object.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryNullableType/record.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryNullableType/discriminator.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryNullableType/nestedObject.")
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooObjectWithEveryNullableType/nestedArray.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooObjectWithEveryNullableType> {
+        @JvmStatic
+        override fun new(): FooObjectWithEveryNullableType {
+            return FooObjectWithEveryNullableType(
+                any = null,
+                boolean = null,
+                string = null,
+                timestamp = null,
+                float32 = null,
+                float64 = null,
+                int8 = null,
+                uint8 = null,
+                int16 = null,
+                uint16 = null,
+                int32 = null,
+                uint32 = null,
+                int64 = null,
+                uint64 = null,
+                enumerator = null,
+                array = null,
+                `object` = null,
+                record = null,
+                discriminator = null,
+                nestedObject = null,
+                nestedArray = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooObjectWithEveryNullableType {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooObjectWithEveryNullableType {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooObjectWithEveryNullableType.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooObjectWithEveryNullableType.")
+                return new()
+            }
+val any: JsonElement? = when (__input.jsonObject["any"]) {
+                    JsonNull -> null
+                    null -> null
+                    else -> __input.jsonObject["any"]
+                }
+val boolean: Boolean? = when (__input.jsonObject["boolean"]) {
+                    is JsonPrimitive -> __input.jsonObject["boolean"]!!.jsonPrimitive.booleanOrNull
+                    else -> null
+                }
+val string: String? = when (__input.jsonObject["string"]) {
+                    is JsonPrimitive -> __input.jsonObject["string"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val timestamp: Instant? = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        null
+                else -> null
+            }
+val float32: Float? = when (__input.jsonObject["float32"]) {
+                    is JsonPrimitive -> __input.jsonObject["float32"]!!.jsonPrimitive.floatOrNull
+                    else -> null
+                }
+val float64: Double? = when (__input.jsonObject["float64"]) {
+                    is JsonPrimitive -> __input.jsonObject["float64"]!!.jsonPrimitive.doubleOrNull
+                    else -> null
+                }
+val int8: Byte? = when (__input.jsonObject["int8"]) {
+                    is JsonPrimitive -> __input.jsonObject["int8"]!!.jsonPrimitive.contentOrNull?.toByteOrNull()
+                    else -> null
+                }
+val uint8: UByte? = when (__input.jsonObject["uint8"]) {
+                    is JsonPrimitive -> __input.jsonObject["uint8"]!!.jsonPrimitive.contentOrNull?.toUByteOrNull()
+                    else -> null
+                }
+val int16: Short? = when (__input.jsonObject["int16"]) {
+                    is JsonPrimitive -> __input.jsonObject["int16"]!!.jsonPrimitive.contentOrNull?.toShortOrNull()
+                    else -> null
+                }
+val uint16: UShort? = when (__input.jsonObject["uint16"]) {
+                    is JsonPrimitive -> __input.jsonObject["uint16"]!!.jsonPrimitive.contentOrNull?.toUShortOrNull()
+                    else -> null
+                }
+val int32: Int? = when (__input.jsonObject["int32"]) {
+                    is JsonPrimitive -> __input.jsonObject["int32"]!!.jsonPrimitive.intOrNull
+                    else -> null
+                }
+val uint32: UInt? = when (__input.jsonObject["uint32"]) {
+                    is JsonPrimitive -> __input.jsonObject["uint32"]!!.jsonPrimitive.contentOrNull?.toUIntOrNull()
+                    else -> null
+                }
+val int64: Long? = when (__input.jsonObject["int64"]) {
+                    is JsonPrimitive -> __input.jsonObject["int64"]!!.jsonPrimitive.longOrNull
+                    else -> null
+                }
+val uint64: ULong? = when (__input.jsonObject["uint64"]) {
+                    is JsonPrimitive -> __input.jsonObject["uint64"]!!.jsonPrimitive.contentOrNull?.toULongOrNull()
+                    else -> null
+                }
+val enumerator: FooFooObjectWithEveryNullableTypeEnumerator? = when (__input.jsonObject["enumerator"]) {
+                    is JsonNull -> null
+                    is JsonPrimitive -> FooFooObjectWithEveryNullableTypeEnumerator.fromJsonElement(__input.jsonObject["enumerator"]!!, "$instancePath/enumerator")
+                    else -> null
+                }
+val array: MutableList<Boolean?>? = when (__input.jsonObject["array"]) {
+                    is JsonArray -> {
+                        val __value: MutableList<Boolean?> = mutableListOf()
+                        for (__element in __input.jsonObject["array"]!!.jsonArray) {
+                            __value.add(
+                                when (__element) {
+                    is JsonPrimitive -> __element!!.jsonPrimitive.booleanOrNull
+                    else -> null
+                }
+                            )
+                        }
+                        __value
+                    }
+
+                    else -> null
+                }
+val `object`: FooFooObjectWithEveryNullableTypeObject? = when (__input.jsonObject["object"]) {
+                    is JsonObject -> FooFooObjectWithEveryNullableTypeObject.fromJsonElement(
+                        __input.jsonObject["object"]!!,
+                        "$instancePath/object",
+                    )
+                    else -> null
+                }
+val record: MutableMap<String, ULong?>? = when (__input.jsonObject["record"]) {
+                is JsonObject -> {
+                    val __value: MutableMap<String, ULong?> = mutableMapOf()
+                    for (__entry in __input.jsonObject["record"]!!.jsonObject.entries) {
+                        __value[__entry.key] = when (__entry.value) {
+                    is JsonPrimitive -> __entry.value!!.jsonPrimitive.contentOrNull?.toULongOrNull()
+                    else -> null
+                }
+                    }
+                    __value
+                }
+
+                else -> null
+            }
+val discriminator: FooFooObjectWithEveryNullableTypeDiscriminator? = when (__input.jsonObject["discriminator"]) {
+                is JsonObject -> FooFooObjectWithEveryNullableTypeDiscriminator.fromJsonElement(
+                    __input.jsonObject["discriminator"]!!,
+                    "$instancePath/discriminator",
+                )
+                else -> null
+            }
+val nestedObject: FooFooObjectWithEveryNullableTypeNestedObject? = when (__input.jsonObject["nestedObject"]) {
+                    is JsonObject -> FooFooObjectWithEveryNullableTypeNestedObject.fromJsonElement(
+                        __input.jsonObject["nestedObject"]!!,
+                        "$instancePath/nestedObject",
+                    )
+                    else -> null
+                }
+val nestedArray: MutableList<MutableList<FooFooObjectWithEveryNullableTypeNestedArrayElementElement?>?>? = when (__input.jsonObject["nestedArray"]) {
+                    is JsonArray -> {
+                        val __value: MutableList<MutableList<FooFooObjectWithEveryNullableTypeNestedArrayElementElement?>?> = mutableListOf()
+                        for (__element in __input.jsonObject["nestedArray"]!!.jsonArray) {
+                            __value.add(
+                                when (__element) {
+                    is JsonArray -> {
+                        val __value: MutableList<FooFooObjectWithEveryNullableTypeNestedArrayElementElement?> = mutableListOf()
+                        for (__element in __element!!.jsonArray) {
+                            __value.add(
+                                when (__element) {
+                    is JsonObject -> FooFooObjectWithEveryNullableTypeNestedArrayElementElement.fromJsonElement(
+                        __element!!,
+                        "$instancePath/undefined",
+                    )
+                    else -> null
+                }
+                            )
+                        }
+                        __value
+                    }
+
+                    else -> null
+                }
+                            )
+                        }
+                        __value
+                    }
+
+                    else -> null
+                }
+            return FooObjectWithEveryNullableType(
+                any,
+                boolean,
+                string,
+                timestamp,
+                float32,
+                float64,
+                int8,
+                uint8,
+                int16,
+                uint16,
+                int32,
+                uint32,
+                int64,
+                uint64,
+                enumerator,
+                array,
+                `object`,
+                record,
+                discriminator,
+                nestedObject,
+                nestedArray,
+            )
+        }
+    }
+}
+
+enum class FooFooObjectWithEveryNullableTypeEnumerator {
+    A,
+    B,
+    C;
+    val serialValue: String
+        get() = when (this) {
+            A -> "A"
+            B -> "B"
+            C -> "C"
+        }
+    
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryNullableTypeEnumerator> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryNullableTypeEnumerator {
+            return A
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryNullableTypeEnumerator {
+            return when (input) {
+                A.serialValue -> A
+                B.serialValue -> B
+                C.serialValue -> C
+                else -> A
+            }
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryNullableTypeEnumerator {
+            if (__input !is JsonPrimitive) {
+                __logError("[WARNING] FooFooObjectWithEveryNullableTypeEnumerator.fromJsonElement() expected kotlinx.serialization.json.JsonPrimitive at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryNullableTypeEnumerator.")
+                return new()
+            }
+            return when (__input.jsonPrimitive.contentOrNull) {
+                "A" -> A
+                "B" -> B
+                "C" -> C
+                else -> new()
+            }
+        }
+    }
+}
+
+data class FooFooObjectWithEveryNullableTypeObject(
+    val string: String?,
+    val boolean: Boolean?,
+    val timestamp: Instant?,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"string\":"
+output += when (string) {
+                    is String -> buildString { printQuoted(string) }
+                    else -> "null"
+                }
+output += ",\"boolean\":"
+output += boolean
+output += ",\"timestamp\":"
+output += when (timestamp) {
+                    is Instant -> "\"${timestampFormatter.format(timestamp)}\""
+                    else -> "null"
+                }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("string=$string")
+queryParts.add("boolean=$boolean")
+queryParts.add(
+                    "timestamp=${
+                        when (timestamp) {
+                            is Instant -> timestampFormatter.format(timestamp)
+                            else -> "null"
+                        }
+                    }"
+        )
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryNullableTypeObject> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryNullableTypeObject {
+            return FooFooObjectWithEveryNullableTypeObject(
+                string = null,
+                boolean = null,
+                timestamp = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryNullableTypeObject {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryNullableTypeObject {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooObjectWithEveryNullableTypeObject.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryNullableTypeObject.")
+                return new()
+            }
+val string: String? = when (__input.jsonObject["string"]) {
+                    is JsonPrimitive -> __input.jsonObject["string"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val boolean: Boolean? = when (__input.jsonObject["boolean"]) {
+                    is JsonPrimitive -> __input.jsonObject["boolean"]!!.jsonPrimitive.booleanOrNull
+                    else -> null
+                }
+val timestamp: Instant? = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        null
+                else -> null
+            }
+            return FooFooObjectWithEveryNullableTypeObject(
+                string,
+                boolean,
+                timestamp,
+            )
+        }
+    }
+}
+
+
+
+sealed interface FooFooObjectWithEveryNullableTypeDiscriminator : TestClientPrefixedModel {
+    val type: String
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryNullableTypeDiscriminator> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryNullableTypeDiscriminator {
+            return FooFooFooObjectWithEveryNullableTypeDiscriminatorA.new()
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryNullableTypeDiscriminator {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryNullableTypeDiscriminator {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] Discriminator.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryNullableTypeDiscriminator.")
+                return new()
+            }
+            return when (__input.jsonObject["type"]) {
+                is JsonPrimitive -> when (__input.jsonObject["type"]!!.jsonPrimitive.contentOrNull) {
+                    "A" -> FooFooFooObjectWithEveryNullableTypeDiscriminatorA.fromJsonElement(__input, instancePath)
+"B" -> FooFooFooObjectWithEveryNullableTypeDiscriminatorB.fromJsonElement(__input, instancePath)
+                    else -> new()
+                }
+
+                else -> new()
+            }
+        }
+    }
+}
+
+data class FooFooFooObjectWithEveryNullableTypeDiscriminatorA(
+    val title: String?,
+) : FooFooObjectWithEveryNullableTypeDiscriminator {
+    override val type get() = "A"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"A\""
+output += ",\"title\":"
+output += when (title) {
+                    is String -> buildString { printQuoted(title) }
+                    else -> "null"
+                }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=A")
+queryParts.add("title=$title")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooObjectWithEveryNullableTypeDiscriminatorA> {
+        @JvmStatic
+        override fun new(): FooFooFooObjectWithEveryNullableTypeDiscriminatorA {
+            return FooFooFooObjectWithEveryNullableTypeDiscriminatorA(
+                title = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooObjectWithEveryNullableTypeDiscriminatorA {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooObjectWithEveryNullableTypeDiscriminatorA {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooObjectWithEveryNullableTypeDiscriminatorA.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooObjectWithEveryNullableTypeDiscriminatorA.")
+                return new()
+            }
+val title: String? = when (__input.jsonObject["title"]) {
+                    is JsonPrimitive -> __input.jsonObject["title"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+            return FooFooFooObjectWithEveryNullableTypeDiscriminatorA(
+                title,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooFooObjectWithEveryNullableTypeDiscriminatorB(
+    val title: String?,
+    val description: String?,
+) : FooFooObjectWithEveryNullableTypeDiscriminator {
+    override val type get() = "B"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"B\""
+output += ",\"title\":"
+output += when (title) {
+                    is String -> buildString { printQuoted(title) }
+                    else -> "null"
+                }
+output += ",\"description\":"
+output += when (description) {
+                    is String -> buildString { printQuoted(description) }
+                    else -> "null"
+                }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=B")
+queryParts.add("title=$title")
+queryParts.add("description=$description")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooObjectWithEveryNullableTypeDiscriminatorB> {
+        @JvmStatic
+        override fun new(): FooFooFooObjectWithEveryNullableTypeDiscriminatorB {
+            return FooFooFooObjectWithEveryNullableTypeDiscriminatorB(
+                title = null,
+                description = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooObjectWithEveryNullableTypeDiscriminatorB {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooObjectWithEveryNullableTypeDiscriminatorB {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooObjectWithEveryNullableTypeDiscriminatorB.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooObjectWithEveryNullableTypeDiscriminatorB.")
+                return new()
+            }
+val title: String? = when (__input.jsonObject["title"]) {
+                    is JsonPrimitive -> __input.jsonObject["title"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val description: String? = when (__input.jsonObject["description"]) {
+                    is JsonPrimitive -> __input.jsonObject["description"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+            return FooFooFooObjectWithEveryNullableTypeDiscriminatorB(
+                title,
+                description,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooObjectWithEveryNullableTypeNestedObject(
+    val id: String?,
+    val timestamp: Instant?,
+    val data: FooFooFooObjectWithEveryNullableTypeNestedObjectData?,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += when (id) {
+                    is String -> buildString { printQuoted(id) }
+                    else -> "null"
+                }
+output += ",\"timestamp\":"
+output += when (timestamp) {
+                    is Instant -> "\"${timestampFormatter.format(timestamp)}\""
+                    else -> "null"
+                }
+output += ",\"data\":"
+output += data?.toJson()
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                    "timestamp=${
+                        when (timestamp) {
+                            is Instant -> timestampFormatter.format(timestamp)
+                            else -> "null"
+                        }
+                    }"
+        )
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooFooObjectWithEveryNullableTypeNestedObject/data.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryNullableTypeNestedObject> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryNullableTypeNestedObject {
+            return FooFooObjectWithEveryNullableTypeNestedObject(
+                id = null,
+                timestamp = null,
+                data = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryNullableTypeNestedObject {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryNullableTypeNestedObject {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooObjectWithEveryNullableTypeNestedObject.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryNullableTypeNestedObject.")
+                return new()
+            }
+val id: String? = when (__input.jsonObject["id"]) {
+                    is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val timestamp: Instant? = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        null
+                else -> null
+            }
+val data: FooFooFooObjectWithEveryNullableTypeNestedObjectData? = when (__input.jsonObject["data"]) {
+                    is JsonObject -> FooFooFooObjectWithEveryNullableTypeNestedObjectData.fromJsonElement(
+                        __input.jsonObject["data"]!!,
+                        "$instancePath/data",
+                    )
+                    else -> null
+                }
+            return FooFooObjectWithEveryNullableTypeNestedObject(
+                id,
+                timestamp,
+                data,
+            )
+        }
+    }
+}
+
+data class FooFooFooObjectWithEveryNullableTypeNestedObjectData(
+    val id: String?,
+    val timestamp: Instant?,
+    val data: FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData?,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += when (id) {
+                    is String -> buildString { printQuoted(id) }
+                    else -> "null"
+                }
+output += ",\"timestamp\":"
+output += when (timestamp) {
+                    is Instant -> "\"${timestampFormatter.format(timestamp)}\""
+                    else -> "null"
+                }
+output += ",\"data\":"
+output += data?.toJson()
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                    "timestamp=${
+                        when (timestamp) {
+                            is Instant -> timestampFormatter.format(timestamp)
+                            else -> "null"
+                        }
+                    }"
+        )
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooFooFooObjectWithEveryNullableTypeNestedObjectData/data.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooObjectWithEveryNullableTypeNestedObjectData> {
+        @JvmStatic
+        override fun new(): FooFooFooObjectWithEveryNullableTypeNestedObjectData {
+            return FooFooFooObjectWithEveryNullableTypeNestedObjectData(
+                id = null,
+                timestamp = null,
+                data = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooObjectWithEveryNullableTypeNestedObjectData {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooObjectWithEveryNullableTypeNestedObjectData {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooObjectWithEveryNullableTypeNestedObjectData.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooObjectWithEveryNullableTypeNestedObjectData.")
+                return new()
+            }
+val id: String? = when (__input.jsonObject["id"]) {
+                    is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val timestamp: Instant? = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        null
+                else -> null
+            }
+val data: FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData? = when (__input.jsonObject["data"]) {
+                    is JsonObject -> FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData.fromJsonElement(
+                        __input.jsonObject["data"]!!,
+                        "$instancePath/data",
+                    )
+                    else -> null
+                }
+            return FooFooFooObjectWithEveryNullableTypeNestedObjectData(
+                id,
+                timestamp,
+                data,
+            )
+        }
+    }
+}
+
+data class FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData(
+    val id: String?,
+    val timestamp: Instant?,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += when (id) {
+                    is String -> buildString { printQuoted(id) }
+                    else -> "null"
+                }
+output += ",\"timestamp\":"
+output += when (timestamp) {
+                    is Instant -> "\"${timestampFormatter.format(timestamp)}\""
+                    else -> "null"
+                }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                    "timestamp=${
+                        when (timestamp) {
+                            is Instant -> timestampFormatter.format(timestamp)
+                            else -> "null"
+                        }
+                    }"
+        )
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData> {
+        @JvmStatic
+        override fun new(): FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData {
+            return FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData(
+                id = null,
+                timestamp = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData.")
+                return new()
+            }
+val id: String? = when (__input.jsonObject["id"]) {
+                    is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val timestamp: Instant? = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        null
+                else -> null
+            }
+            return FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData(
+                id,
+                timestamp,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooObjectWithEveryNullableTypeNestedArrayElementElement(
+    val id: String?,
+    val timestamp: Instant?,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += when (id) {
+                    is String -> buildString { printQuoted(id) }
+                    else -> "null"
+                }
+output += ",\"timestamp\":"
+output += when (timestamp) {
+                    is Instant -> "\"${timestampFormatter.format(timestamp)}\""
+                    else -> "null"
+                }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                    "timestamp=${
+                        when (timestamp) {
+                            is Instant -> timestampFormatter.format(timestamp)
+                            else -> "null"
+                        }
+                    }"
+        )
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryNullableTypeNestedArrayElementElement> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryNullableTypeNestedArrayElementElement {
+            return FooFooObjectWithEveryNullableTypeNestedArrayElementElement(
+                id = null,
+                timestamp = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryNullableTypeNestedArrayElementElement {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryNullableTypeNestedArrayElementElement {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooObjectWithEveryNullableTypeNestedArrayElementElement.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryNullableTypeNestedArrayElementElement.")
+                return new()
+            }
+val id: String? = when (__input.jsonObject["id"]) {
+                    is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val timestamp: Instant? = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        null
+                else -> null
+            }
+            return FooFooObjectWithEveryNullableTypeNestedArrayElementElement(
+                id,
+                timestamp,
+            )
+        }
+    }
+}
+
+
+
+data class FooObjectWithPascalCaseKeys(
+    val createdAt: Instant,
+    val displayName: String,
+    val phoneNumber: String?,
+    val emailAddress: String? = null,
+    val isAdmin: Boolean? = null,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"CreatedAt\":"
+output += "\"${timestampFormatter.format(createdAt)}\""
+output += ",\"DisplayName\":"
+output += buildString { printQuoted(displayName) }
+output += ",\"PhoneNumber\":"
+output += when (phoneNumber) {
+                    is String -> buildString { printQuoted(phoneNumber) }
+                    else -> "null"
+                }
+if (emailAddress != null) {
+                output += ",\"EmailAddress\":"
+                output += buildString { printQuoted(emailAddress) }
+            }
+if (isAdmin != null) {
+                output += ",\"IsAdmin\":"
+                output += isAdmin
+            }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add(
+                "CreatedAt=${
+                    timestampFormatter.format(createdAt)
+                }"
+        )
+queryParts.add("DisplayName=$displayName")
+queryParts.add("PhoneNumber=$phoneNumber")
+if (emailAddress != null) {
+            queryParts.add("EmailAddress=$emailAddress")
+        }
+if (isAdmin != null) {
+            queryParts.add("IsAdmin=$isAdmin")
+        }
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooObjectWithPascalCaseKeys> {
+        @JvmStatic
+        override fun new(): FooObjectWithPascalCaseKeys {
+            return FooObjectWithPascalCaseKeys(
+                createdAt = Instant.now(),
+                displayName = "",
+                phoneNumber = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooObjectWithPascalCaseKeys {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooObjectWithPascalCaseKeys {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooObjectWithPascalCaseKeys.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooObjectWithPascalCaseKeys.")
+                return new()
+            }
+val createdAt: Instant = when (__input.jsonObject["CreatedAt"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["CreatedAt"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["CreatedAt"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val displayName: String = when (__input.jsonObject["DisplayName"]) {
+                is JsonPrimitive -> __input.jsonObject["DisplayName"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val phoneNumber: String? = when (__input.jsonObject["PhoneNumber"]) {
+                    is JsonPrimitive -> __input.jsonObject["PhoneNumber"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val emailAddress: String? = when (__input.jsonObject["EmailAddress"]) {
+                    is JsonPrimitive -> __input.jsonObject["EmailAddress"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val isAdmin: Boolean? = when (__input.jsonObject["IsAdmin"]) {
+                    is JsonPrimitive -> __input.jsonObject["IsAdmin"]!!.jsonPrimitive.booleanOrNull
+                    else -> null
+                }
+            return FooObjectWithPascalCaseKeys(
+                createdAt,
+                displayName,
+                phoneNumber,
+                emailAddress,
+                isAdmin,
+            )
+        }
+    }
+}
+
+
+
+data class FooObjectWithSnakeCaseKeys(
+    val createdAt: Instant,
+    val displayName: String,
+    val phoneNumber: String?,
+    val emailAddress: String? = null,
+    val isAdmin: Boolean? = null,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"created_at\":"
+output += "\"${timestampFormatter.format(createdAt)}\""
+output += ",\"display_name\":"
+output += buildString { printQuoted(displayName) }
+output += ",\"phone_number\":"
+output += when (phoneNumber) {
+                    is String -> buildString { printQuoted(phoneNumber) }
+                    else -> "null"
+                }
+if (emailAddress != null) {
+                output += ",\"email_address\":"
+                output += buildString { printQuoted(emailAddress) }
+            }
+if (isAdmin != null) {
+                output += ",\"is_admin\":"
+                output += isAdmin
+            }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add(
+                "created_at=${
+                    timestampFormatter.format(createdAt)
+                }"
+        )
+queryParts.add("display_name=$displayName")
+queryParts.add("phone_number=$phoneNumber")
+if (emailAddress != null) {
+            queryParts.add("email_address=$emailAddress")
+        }
+if (isAdmin != null) {
+            queryParts.add("is_admin=$isAdmin")
+        }
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooObjectWithSnakeCaseKeys> {
+        @JvmStatic
+        override fun new(): FooObjectWithSnakeCaseKeys {
+            return FooObjectWithSnakeCaseKeys(
+                createdAt = Instant.now(),
+                displayName = "",
+                phoneNumber = null,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooObjectWithSnakeCaseKeys {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooObjectWithSnakeCaseKeys {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooObjectWithSnakeCaseKeys.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooObjectWithSnakeCaseKeys.")
+                return new()
+            }
+val createdAt: Instant = when (__input.jsonObject["created_at"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["created_at"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["created_at"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val displayName: String = when (__input.jsonObject["display_name"]) {
+                is JsonPrimitive -> __input.jsonObject["display_name"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val phoneNumber: String? = when (__input.jsonObject["phone_number"]) {
+                    is JsonPrimitive -> __input.jsonObject["phone_number"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val emailAddress: String? = when (__input.jsonObject["email_address"]) {
+                    is JsonPrimitive -> __input.jsonObject["email_address"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val isAdmin: Boolean? = when (__input.jsonObject["is_admin"]) {
+                    is JsonPrimitive -> __input.jsonObject["is_admin"]!!.jsonPrimitive.booleanOrNull
+                    else -> null
+                }
+            return FooObjectWithSnakeCaseKeys(
+                createdAt,
+                displayName,
+                phoneNumber,
+                emailAddress,
+                isAdmin,
+            )
+        }
+    }
+}
+
+
+
+data class FooObjectWithEveryOptionalType(
+    val any: JsonElement? = null,
+    val boolean: Boolean? = null,
+    val string: String? = null,
+    val timestamp: Instant? = null,
+    val float32: Float? = null,
+    val float64: Double? = null,
+    val int8: Byte? = null,
+    val uint8: UByte? = null,
+    val int16: Short? = null,
+    val uint16: UShort? = null,
+    val int32: Int? = null,
+    val uint32: UInt? = null,
+    val int64: Long? = null,
+    val uint64: ULong? = null,
+    val enumerator: FooFooObjectWithEveryOptionalTypeEnumerator? = null,
+    val array: MutableList<Boolean>? = null,
+    val `object`: FooFooObjectWithEveryOptionalTypeObject? = null,
+    val record: MutableMap<String, ULong>? = null,
+    val discriminator: FooFooObjectWithEveryOptionalTypeDiscriminator? = null,
+    val nestedObject: FooFooObjectWithEveryOptionalTypeNestedObject? = null,
+    val nestedArray: MutableList<MutableList<FooFooObjectWithEveryOptionalTypeNestedArrayElementElement>>? = null,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+var hasProperties = false
+if (any != null) {
+    output += "\"any\":"
+    output += JsonInstance.encodeToString(any)
+    hasProperties = true
+}
+if (boolean != null) {
+        if (hasProperties) output += ","
+
+    output += "\"boolean\":"
+    output += boolean
+    hasProperties = true
+}
+if (string != null) {
+        if (hasProperties) output += ","
+
+    output += "\"string\":"
+    output += buildString { printQuoted(string) }
+    hasProperties = true
+}
+if (timestamp != null) {
+        if (hasProperties) output += ","
+
+    output += "\"timestamp\":"
+    output += "\"${timestampFormatter.format(timestamp)}\""
+    hasProperties = true
+}
+if (float32 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"float32\":"
+    output += float32
+    hasProperties = true
+}
+if (float64 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"float64\":"
+    output += float64
+    hasProperties = true
+}
+if (int8 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"int8\":"
+    output += int8
+    hasProperties = true
+}
+if (uint8 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"uint8\":"
+    output += uint8
+    hasProperties = true
+}
+if (int16 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"int16\":"
+    output += int16
+    hasProperties = true
+}
+if (uint16 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"uint16\":"
+    output += uint16
+    hasProperties = true
+}
+if (int32 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"int32\":"
+    output += int32
+    hasProperties = true
+}
+if (uint32 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"uint32\":"
+    output += uint32
+    hasProperties = true
+}
+if (int64 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"int64\":"
+    output += "\"${int64}\""
+    hasProperties = true
+}
+if (uint64 != null) {
+        if (hasProperties) output += ","
+
+    output += "\"uint64\":"
+    output += "\"${uint64}\""
+    hasProperties = true
+}
+if (enumerator != null) {
+        if (hasProperties) output += ","
+
+    output += "\"enumerator\":"
+    output += "\"${enumerator.serialValue}\""
+    hasProperties = true
+}
+if (array != null) {
+        if (hasProperties) output += ","
+
+    output += "\"array\":"
+    output += "["
+                for ((__index, __element) in array.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += __element
+                }
+                output += "]"
+    hasProperties = true
+}
+if (`object` != null) {
+        if (hasProperties) output += ","
+
+    output += "\"object\":"
+    output += `object`.toJson()
+    hasProperties = true
+}
+if (record != null) {
+        if (hasProperties) output += ","
+
+    output += "\"record\":"
+    output += "{"
+            for ((__index, __entry) in record.entries.withIndex()) {
+                if (__index != 0) {
+                    output += ","
+                }
+                output += "${buildString { printQuoted(__entry.key) }}:"
+                output += "\"${__entry.value}\""
+            }
+            output += "}"
+    hasProperties = true
+}
+if (discriminator != null) {
+        if (hasProperties) output += ","
+
+    output += "\"discriminator\":"
+    output += discriminator.toJson()
+    hasProperties = true
+}
+if (nestedObject != null) {
+        if (hasProperties) output += ","
+
+    output += "\"nestedObject\":"
+    output += nestedObject.toJson()
+    hasProperties = true
+}
+if (nestedArray != null) {
+        if (hasProperties) output += ","
+
+    output += "\"nestedArray\":"
+    output += "["
+                for ((__index, __element) in nestedArray.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += "["
+                for ((__index, __element) in __element.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += __element.toJson()
+                }
+                output += "]"
+                }
+                output += "]"
+
+}
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+__logError("[WARNING] any's cannot be serialized to query params. Skipping field at /FooObjectWithEveryOptionalType/any.")
+if (boolean != null) {
+            queryParts.add("boolean=$boolean")
+        }
+if (string != null) {
+            queryParts.add("string=$string")
+        }
+if (timestamp != null) {
+                    queryParts.add(
+                        "timestamp=${
+                            timestampFormatter.format(timestamp)
+                        }"
+                )
+            }
+if (float32 != null) {
+            queryParts.add("float32=$float32")
+        }
+if (float64 != null) {
+            queryParts.add("float64=$float64")
+        }
+if (int8 != null) {
+            queryParts.add("int8=$int8")
+        }
+if (uint8 != null) {
+            queryParts.add("uint8=$uint8")
+        }
+if (int16 != null) {
+            queryParts.add("int16=$int16")
+        }
+if (uint16 != null) {
+            queryParts.add("uint16=$uint16")
+        }
+if (int32 != null) {
+            queryParts.add("int32=$int32")
+        }
+if (uint32 != null) {
+            queryParts.add("uint32=$uint32")
+        }
+if (int64 != null) {
+            queryParts.add("int64=$int64")
+        }
+if (uint64 != null) {
+            queryParts.add("uint64=$uint64")
+        }
+if (enumerator != null) {
+                    queryParts.add("enumerator=${enumerator.serialValue}")
+                }
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooObjectWithEveryOptionalType/array.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryOptionalType/object.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryOptionalType/record.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryOptionalType/discriminator.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooObjectWithEveryOptionalType/nestedObject.")
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooObjectWithEveryOptionalType/nestedArray.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooObjectWithEveryOptionalType> {
+        @JvmStatic
+        override fun new(): FooObjectWithEveryOptionalType {
+            return FooObjectWithEveryOptionalType(
+
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooObjectWithEveryOptionalType {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooObjectWithEveryOptionalType {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooObjectWithEveryOptionalType.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooObjectWithEveryOptionalType.")
+                return new()
+            }
+val any: JsonElement? = when (__input.jsonObject["any"]) {
+                    null -> null
+                    else -> __input.jsonObject["any"] 
+                }
+val boolean: Boolean? = when (__input.jsonObject["boolean"]) {
+                    is JsonPrimitive -> __input.jsonObject["boolean"]!!.jsonPrimitive.booleanOrNull
+                    else -> null
+                }
+val string: String? = when (__input.jsonObject["string"]) {
+                    is JsonPrimitive -> __input.jsonObject["string"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+val timestamp: Instant? = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        null
+                else -> null
+            }
+val float32: Float? = when (__input.jsonObject["float32"]) {
+                    is JsonPrimitive -> __input.jsonObject["float32"]!!.jsonPrimitive.floatOrNull
+                    else -> null
+                }
+val float64: Double? = when (__input.jsonObject["float64"]) {
+                    is JsonPrimitive -> __input.jsonObject["float64"]!!.jsonPrimitive.doubleOrNull
+                    else -> null
+                }
+val int8: Byte? = when (__input.jsonObject["int8"]) {
+                    is JsonPrimitive -> __input.jsonObject["int8"]!!.jsonPrimitive.contentOrNull?.toByteOrNull()
+                    else -> null
+                }
+val uint8: UByte? = when (__input.jsonObject["uint8"]) {
+                    is JsonPrimitive -> __input.jsonObject["uint8"]!!.jsonPrimitive.contentOrNull?.toUByteOrNull()
+                    else -> null
+                }
+val int16: Short? = when (__input.jsonObject["int16"]) {
+                    is JsonPrimitive -> __input.jsonObject["int16"]!!.jsonPrimitive.contentOrNull?.toShortOrNull()
+                    else -> null
+                }
+val uint16: UShort? = when (__input.jsonObject["uint16"]) {
+                    is JsonPrimitive -> __input.jsonObject["uint16"]!!.jsonPrimitive.contentOrNull?.toUShortOrNull()
+                    else -> null
+                }
+val int32: Int? = when (__input.jsonObject["int32"]) {
+                    is JsonPrimitive -> __input.jsonObject["int32"]!!.jsonPrimitive.intOrNull
+                    else -> null
+                }
+val uint32: UInt? = when (__input.jsonObject["uint32"]) {
+                    is JsonPrimitive -> __input.jsonObject["uint32"]!!.jsonPrimitive.contentOrNull?.toUIntOrNull()
+                    else -> null
+                }
+val int64: Long? = when (__input.jsonObject["int64"]) {
+                    is JsonPrimitive -> __input.jsonObject["int64"]!!.jsonPrimitive.longOrNull
+                    else -> null
+                }
+val uint64: ULong? = when (__input.jsonObject["uint64"]) {
+                    is JsonPrimitive -> __input.jsonObject["uint64"]!!.jsonPrimitive.contentOrNull?.toULongOrNull()
+                    else -> null
+                }
+val enumerator: FooFooObjectWithEveryOptionalTypeEnumerator? = when (__input.jsonObject["enumerator"]) {
+                    is JsonNull -> null
+                    is JsonPrimitive -> FooFooObjectWithEveryOptionalTypeEnumerator.fromJsonElement(__input.jsonObject["enumerator"]!!, "$instancePath/enumerator")
+                    else -> null
+                }
+val array: MutableList<Boolean>? = when (__input.jsonObject["array"]) {
+                    is JsonArray -> {
+                        val __value: MutableList<Boolean> = mutableListOf()
+                        for (__element in __input.jsonObject["array"]!!.jsonArray) {
+                            __value.add(
+                                when (__element) {
+                is JsonPrimitive -> __element!!.jsonPrimitive.booleanOrNull ?: false
+                else -> false
+            }
+                            )
+                        }
+                        __value
+                    }
+
+                    else -> null
+                }
+val `object`: FooFooObjectWithEveryOptionalTypeObject? = when (__input.jsonObject["object"]) {
+                    is JsonObject -> FooFooObjectWithEveryOptionalTypeObject.fromJsonElement(
+                        __input.jsonObject["object"]!!,
+                        "$instancePath/object",
+                    )
+                    else -> null
+                }
+val record: MutableMap<String, ULong>? = when (__input.jsonObject["record"]) {
+                is JsonObject -> {
+                    val __value: MutableMap<String, ULong> = mutableMapOf()
+                    for (__entry in __input.jsonObject["record"]!!.jsonObject.entries) {
+                        __value[__entry.key] = when (__entry.value) {
+                is JsonPrimitive -> __entry.value!!.jsonPrimitive.contentOrNull?.toULongOrNull() ?: 0UL
+                else -> 0UL
+            }
+                    }
+                    __value
+                }
+
+                else -> null
+            }
+val discriminator: FooFooObjectWithEveryOptionalTypeDiscriminator? = when (__input.jsonObject["discriminator"]) {
+                is JsonObject -> FooFooObjectWithEveryOptionalTypeDiscriminator.fromJsonElement(
+                    __input.jsonObject["discriminator"]!!,
+                    "$instancePath/discriminator",
+                )
+                else -> null
+            }
+val nestedObject: FooFooObjectWithEveryOptionalTypeNestedObject? = when (__input.jsonObject["nestedObject"]) {
+                    is JsonObject -> FooFooObjectWithEveryOptionalTypeNestedObject.fromJsonElement(
+                        __input.jsonObject["nestedObject"]!!,
+                        "$instancePath/nestedObject",
+                    )
+                    else -> null
+                }
+val nestedArray: MutableList<MutableList<FooFooObjectWithEveryOptionalTypeNestedArrayElementElement>>? = when (__input.jsonObject["nestedArray"]) {
+                    is JsonArray -> {
+                        val __value: MutableList<MutableList<FooFooObjectWithEveryOptionalTypeNestedArrayElementElement>> = mutableListOf()
+                        for (__element in __input.jsonObject["nestedArray"]!!.jsonArray) {
+                            __value.add(
+                                when (__element) {
+                is JsonArray -> {
+                    val __value: MutableList<FooFooObjectWithEveryOptionalTypeNestedArrayElementElement> = mutableListOf()
+                    for (__element in __element!!.jsonArray) {
+                        __value.add(
+                            when (__element) {
+                is JsonObject -> FooFooObjectWithEveryOptionalTypeNestedArrayElementElement.fromJsonElement(
+                    __element!!,
+                    "$instancePath/undefined",
+                )
+
+                else -> FooFooObjectWithEveryOptionalTypeNestedArrayElementElement.new()
+            }
+                        )
+                    }
+                    __value
+                }
+
+                else -> mutableListOf()
+            }
+                            )
+                        }
+                        __value
+                    }
+
+                    else -> null
+                }
+            return FooObjectWithEveryOptionalType(
+                any,
+                boolean,
+                string,
+                timestamp,
+                float32,
+                float64,
+                int8,
+                uint8,
+                int16,
+                uint16,
+                int32,
+                uint32,
+                int64,
+                uint64,
+                enumerator,
+                array,
+                `object`,
+                record,
+                discriminator,
+                nestedObject,
+                nestedArray,
+            )
+        }
+    }
+}
+
+enum class FooFooObjectWithEveryOptionalTypeEnumerator {
+    A,
+    B,
+    C;
+    val serialValue: String
+        get() = when (this) {
+            A -> "A"
+            B -> "B"
+            C -> "C"
+        }
+    
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryOptionalTypeEnumerator> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryOptionalTypeEnumerator {
+            return A
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryOptionalTypeEnumerator {
+            return when (input) {
+                A.serialValue -> A
+                B.serialValue -> B
+                C.serialValue -> C
+                else -> A
+            }
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryOptionalTypeEnumerator {
+            if (__input !is JsonPrimitive) {
+                __logError("[WARNING] FooFooObjectWithEveryOptionalTypeEnumerator.fromJsonElement() expected kotlinx.serialization.json.JsonPrimitive at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryOptionalTypeEnumerator.")
+                return new()
+            }
+            return when (__input.jsonPrimitive.contentOrNull) {
+                "A" -> A
+                "B" -> B
+                "C" -> C
+                else -> new()
+            }
+        }
+    }
+}
+
+data class FooFooObjectWithEveryOptionalTypeObject(
+    val string: String,
+    val boolean: Boolean,
+    val timestamp: Instant,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"string\":"
+output += buildString { printQuoted(string) }
+output += ",\"boolean\":"
+output += boolean
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("string=$string")
+queryParts.add("boolean=$boolean")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryOptionalTypeObject> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryOptionalTypeObject {
+            return FooFooObjectWithEveryOptionalTypeObject(
+                string = "",
+                boolean = false,
+                timestamp = Instant.now(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryOptionalTypeObject {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryOptionalTypeObject {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooObjectWithEveryOptionalTypeObject.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryOptionalTypeObject.")
+                return new()
+            }
+val string: String = when (__input.jsonObject["string"]) {
+                is JsonPrimitive -> __input.jsonObject["string"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val boolean: Boolean = when (__input.jsonObject["boolean"]) {
+                is JsonPrimitive -> __input.jsonObject["boolean"]!!.jsonPrimitive.booleanOrNull ?: false
+                else -> false
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+            return FooFooObjectWithEveryOptionalTypeObject(
+                string,
+                boolean,
+                timestamp,
+            )
+        }
+    }
+}
+
+
+
+sealed interface FooFooObjectWithEveryOptionalTypeDiscriminator : TestClientPrefixedModel {
+    val type: String
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryOptionalTypeDiscriminator> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryOptionalTypeDiscriminator {
+            return FooFooFooObjectWithEveryOptionalTypeDiscriminatorA.new()
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryOptionalTypeDiscriminator {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryOptionalTypeDiscriminator {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] Discriminator.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryOptionalTypeDiscriminator.")
+                return new()
+            }
+            return when (__input.jsonObject["type"]) {
+                is JsonPrimitive -> when (__input.jsonObject["type"]!!.jsonPrimitive.contentOrNull) {
+                    "A" -> FooFooFooObjectWithEveryOptionalTypeDiscriminatorA.fromJsonElement(__input, instancePath)
+"B" -> FooFooFooObjectWithEveryOptionalTypeDiscriminatorB.fromJsonElement(__input, instancePath)
+                    else -> new()
+                }
+
+                else -> new()
+            }
+        }
+    }
+}
+
+data class FooFooFooObjectWithEveryOptionalTypeDiscriminatorA(
+    val title: String,
+) : FooFooObjectWithEveryOptionalTypeDiscriminator {
+    override val type get() = "A"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"A\""
+output += ",\"title\":"
+output += buildString { printQuoted(title) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=A")
+queryParts.add("title=$title")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooObjectWithEveryOptionalTypeDiscriminatorA> {
+        @JvmStatic
+        override fun new(): FooFooFooObjectWithEveryOptionalTypeDiscriminatorA {
+            return FooFooFooObjectWithEveryOptionalTypeDiscriminatorA(
+                title = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooObjectWithEveryOptionalTypeDiscriminatorA {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooObjectWithEveryOptionalTypeDiscriminatorA {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooObjectWithEveryOptionalTypeDiscriminatorA.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooObjectWithEveryOptionalTypeDiscriminatorA.")
+                return new()
+            }
+val title: String = when (__input.jsonObject["title"]) {
+                is JsonPrimitive -> __input.jsonObject["title"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooFooObjectWithEveryOptionalTypeDiscriminatorA(
+                title,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooFooObjectWithEveryOptionalTypeDiscriminatorB(
+    val title: String,
+    val description: String,
+) : FooFooObjectWithEveryOptionalTypeDiscriminator {
+    override val type get() = "B"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"B\""
+output += ",\"title\":"
+output += buildString { printQuoted(title) }
+output += ",\"description\":"
+output += buildString { printQuoted(description) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=B")
+queryParts.add("title=$title")
+queryParts.add("description=$description")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooObjectWithEveryOptionalTypeDiscriminatorB> {
+        @JvmStatic
+        override fun new(): FooFooFooObjectWithEveryOptionalTypeDiscriminatorB {
+            return FooFooFooObjectWithEveryOptionalTypeDiscriminatorB(
+                title = "",
+                description = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooObjectWithEveryOptionalTypeDiscriminatorB {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooObjectWithEveryOptionalTypeDiscriminatorB {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooObjectWithEveryOptionalTypeDiscriminatorB.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooObjectWithEveryOptionalTypeDiscriminatorB.")
+                return new()
+            }
+val title: String = when (__input.jsonObject["title"]) {
+                is JsonPrimitive -> __input.jsonObject["title"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val description: String = when (__input.jsonObject["description"]) {
+                is JsonPrimitive -> __input.jsonObject["description"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooFooObjectWithEveryOptionalTypeDiscriminatorB(
+                title,
+                description,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooObjectWithEveryOptionalTypeNestedObject(
+    val id: String,
+    val timestamp: Instant,
+    val data: FooFooFooObjectWithEveryOptionalTypeNestedObjectData,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += ",\"data\":"
+output += data.toJson()
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooFooObjectWithEveryOptionalTypeNestedObject/data.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryOptionalTypeNestedObject> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryOptionalTypeNestedObject {
+            return FooFooObjectWithEveryOptionalTypeNestedObject(
+                id = "",
+                timestamp = Instant.now(),
+                data = FooFooFooObjectWithEveryOptionalTypeNestedObjectData.new(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryOptionalTypeNestedObject {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryOptionalTypeNestedObject {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooObjectWithEveryOptionalTypeNestedObject.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryOptionalTypeNestedObject.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val data: FooFooFooObjectWithEveryOptionalTypeNestedObjectData = when (__input.jsonObject["data"]) {
+                is JsonObject -> FooFooFooObjectWithEveryOptionalTypeNestedObjectData.fromJsonElement(
+                    __input.jsonObject["data"]!!,
+                    "$instancePath/data",
+                )
+
+                else -> FooFooFooObjectWithEveryOptionalTypeNestedObjectData.new()
+            }
+            return FooFooObjectWithEveryOptionalTypeNestedObject(
+                id,
+                timestamp,
+                data,
+            )
+        }
+    }
+}
+
+data class FooFooFooObjectWithEveryOptionalTypeNestedObjectData(
+    val id: String,
+    val timestamp: Instant,
+    val data: FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += ",\"data\":"
+output += data.toJson()
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooFooFooObjectWithEveryOptionalTypeNestedObjectData/data.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooObjectWithEveryOptionalTypeNestedObjectData> {
+        @JvmStatic
+        override fun new(): FooFooFooObjectWithEveryOptionalTypeNestedObjectData {
+            return FooFooFooObjectWithEveryOptionalTypeNestedObjectData(
+                id = "",
+                timestamp = Instant.now(),
+                data = FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData.new(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooObjectWithEveryOptionalTypeNestedObjectData {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooObjectWithEveryOptionalTypeNestedObjectData {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooObjectWithEveryOptionalTypeNestedObjectData.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooObjectWithEveryOptionalTypeNestedObjectData.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val data: FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData = when (__input.jsonObject["data"]) {
+                is JsonObject -> FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData.fromJsonElement(
+                    __input.jsonObject["data"]!!,
+                    "$instancePath/data",
+                )
+
+                else -> FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData.new()
+            }
+            return FooFooFooObjectWithEveryOptionalTypeNestedObjectData(
+                id,
+                timestamp,
+                data,
+            )
+        }
+    }
+}
+
+data class FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData(
+    val id: String,
+    val timestamp: Instant,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData> {
+        @JvmStatic
+        override fun new(): FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData {
+            return FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData(
+                id = "",
+                timestamp = Instant.now(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+            return FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData(
+                id,
+                timestamp,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooObjectWithEveryOptionalTypeNestedArrayElementElement(
+    val id: String,
+    val timestamp: Instant,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"timestamp\":"
+output += "\"${timestampFormatter.format(timestamp)}\""
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add(
+                "timestamp=${
+                    timestampFormatter.format(timestamp)
+                }"
+        )
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooObjectWithEveryOptionalTypeNestedArrayElementElement> {
+        @JvmStatic
+        override fun new(): FooFooObjectWithEveryOptionalTypeNestedArrayElementElement {
+            return FooFooObjectWithEveryOptionalTypeNestedArrayElementElement(
+                id = "",
+                timestamp = Instant.now(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooObjectWithEveryOptionalTypeNestedArrayElementElement {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooObjectWithEveryOptionalTypeNestedArrayElementElement {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooObjectWithEveryOptionalTypeNestedArrayElementElement.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooObjectWithEveryOptionalTypeNestedArrayElementElement.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val timestamp: Instant = when (__input.jsonObject["timestamp"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["timestamp"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["timestamp"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+            return FooFooObjectWithEveryOptionalTypeNestedArrayElementElement(
+                id,
+                timestamp,
+            )
+        }
+    }
+}
+
+
+
+data class FooRecursiveObject(
+    val left: RecursiveObject?,
+    val right: RecursiveObject?,
+    val value: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"left\":"
+output += left?.toJson()
+output += ",\"right\":"
+output += right?.toJson()
+output += ",\"value\":"
+output += buildString { printQuoted(value) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooRecursiveObject/left.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooRecursiveObject/right.")
+queryParts.add("value=$value")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooRecursiveObject> {
+        @JvmStatic
+        override fun new(): FooRecursiveObject {
+            return FooRecursiveObject(
+                left = null,
+                right = null,
+                value = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooRecursiveObject {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooRecursiveObject {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooRecursiveObject.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooRecursiveObject.")
+                return new()
+            }
+val left: RecursiveObject? = when (__input.jsonObject["left"]) {
+                is JsonObject -> RecursiveObject.fromJsonElement(
+                    __input.jsonObject["left"]!!,
+                    "$instancePath/left",
+                )
+                else -> null
+            }
+val right: RecursiveObject? = when (__input.jsonObject["right"]) {
+                is JsonObject -> RecursiveObject.fromJsonElement(
+                    __input.jsonObject["right"]!!,
+                    "$instancePath/right",
+                )
+                else -> null
+            }
+val value: String = when (__input.jsonObject["value"]) {
+                is JsonPrimitive -> __input.jsonObject["value"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooRecursiveObject(
+                left,
+                right,
+                value,
+            )
+        }
+    }
+}
+
+
+
+sealed interface FooRecursiveUnion : TestClientPrefixedModel {
+    val type: String
+
+    companion object Factory : TestClientPrefixedModelFactory<FooRecursiveUnion> {
+        @JvmStatic
+        override fun new(): FooRecursiveUnion {
+            return FooFooRecursiveUnionChild.new()
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooRecursiveUnion {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooRecursiveUnion {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] Discriminator.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooRecursiveUnion.")
+                return new()
+            }
+            return when (__input.jsonObject["type"]) {
+                is JsonPrimitive -> when (__input.jsonObject["type"]!!.jsonPrimitive.contentOrNull) {
+                    "CHILD" -> FooFooRecursiveUnionChild.fromJsonElement(__input, instancePath)
+"CHILDREN" -> FooFooRecursiveUnionChildren.fromJsonElement(__input, instancePath)
+"TEXT" -> FooFooRecursiveUnionText.fromJsonElement(__input, instancePath)
+"SHAPE" -> FooFooRecursiveUnionShape.fromJsonElement(__input, instancePath)
+                    else -> new()
+                }
+
+                else -> new()
+            }
+        }
+    }
+}
+
+/**
+* Child node
+*/
+data class FooFooRecursiveUnionChild(
+    val data: RecursiveUnion,
+) : FooRecursiveUnion {
+    override val type get() = "CHILD"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"CHILD\""
+output += ",\"data\":"
+output += data.toJson()
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=CHILD")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooFooRecursiveUnionChild/data.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooRecursiveUnionChild> {
+        @JvmStatic
+        override fun new(): FooFooRecursiveUnionChild {
+            return FooFooRecursiveUnionChild(
+                data = RecursiveUnion.new(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooRecursiveUnionChild {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooRecursiveUnionChild {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooRecursiveUnionChild.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooRecursiveUnionChild.")
+                return new()
+            }
+val data: RecursiveUnion = when (__input.jsonObject["data"]) {
+                is JsonObject -> RecursiveUnion.fromJsonElement(
+                    __input.jsonObject["data"]!!,
+                    "$instancePath/data",
+                )
+                else -> RecursiveUnion.new()
+            }
+            return FooFooRecursiveUnionChild(
+                data,
+            )
+        }
+    }
+}
+
+
+
+/**
+* List of children node
+*/
+data class FooFooRecursiveUnionChildren(
+    val data: MutableList<RecursiveUnion>,
+) : FooRecursiveUnion {
+    override val type get() = "CHILDREN"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"CHILDREN\""
+output += ",\"data\":"
+output += "["
+                for ((__index, __element) in data.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += __element.toJson()
+                }
+                output += "]"
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=CHILDREN")
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooFooRecursiveUnionChildren/data.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooRecursiveUnionChildren> {
+        @JvmStatic
+        override fun new(): FooFooRecursiveUnionChildren {
+            return FooFooRecursiveUnionChildren(
+                data = mutableListOf(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooRecursiveUnionChildren {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooRecursiveUnionChildren {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooRecursiveUnionChildren.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooRecursiveUnionChildren.")
+                return new()
+            }
+val data: MutableList<RecursiveUnion> = when (__input.jsonObject["data"]) {
+                is JsonArray -> {
+                    val __value: MutableList<RecursiveUnion> = mutableListOf()
+                    for (__element in __input.jsonObject["data"]!!.jsonArray) {
+                        __value.add(
+                            when (__element) {
+                is JsonObject -> RecursiveUnion.fromJsonElement(
+                    __element!!,
+                    "$instancePath/undefined",
+                )
+                else -> RecursiveUnion.new()
+            }
+                        )
+                    }
+                    __value
+                }
+
+                else -> mutableListOf()
+            }
+            return FooFooRecursiveUnionChildren(
+                data,
+            )
+        }
+    }
+}
+
+
+
+/**
+* Text node
+*/
+data class FooFooRecursiveUnionText(
+    val data: String,
+) : FooRecursiveUnion {
+    override val type get() = "TEXT"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"TEXT\""
+output += ",\"data\":"
+output += buildString { printQuoted(data) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=TEXT")
+queryParts.add("data=$data")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooRecursiveUnionText> {
+        @JvmStatic
+        override fun new(): FooFooRecursiveUnionText {
+            return FooFooRecursiveUnionText(
+                data = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooRecursiveUnionText {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooRecursiveUnionText {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooRecursiveUnionText.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooRecursiveUnionText.")
+                return new()
+            }
+val data: String = when (__input.jsonObject["data"]) {
+                is JsonPrimitive -> __input.jsonObject["data"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooRecursiveUnionText(
+                data,
+            )
+        }
+    }
+}
+
+
+
+/**
+* Shape node
+*/
+data class FooFooRecursiveUnionShape(
+    val data: FooFooFooRecursiveUnionShapeData,
+) : FooRecursiveUnion {
+    override val type get() = "SHAPE"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"type\":\"SHAPE\""
+output += ",\"data\":"
+output += data.toJson()
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("type=SHAPE")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooFooRecursiveUnionShape/data.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooRecursiveUnionShape> {
+        @JvmStatic
+        override fun new(): FooFooRecursiveUnionShape {
+            return FooFooRecursiveUnionShape(
+                data = FooFooFooRecursiveUnionShapeData.new(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooRecursiveUnionShape {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooRecursiveUnionShape {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooRecursiveUnionShape.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooRecursiveUnionShape.")
+                return new()
+            }
+val data: FooFooFooRecursiveUnionShapeData = when (__input.jsonObject["data"]) {
+                is JsonObject -> FooFooFooRecursiveUnionShapeData.fromJsonElement(
+                    __input.jsonObject["data"]!!,
+                    "$instancePath/data",
+                )
+
+                else -> FooFooFooRecursiveUnionShapeData.new()
+            }
+            return FooFooRecursiveUnionShape(
+                data,
+            )
+        }
+    }
+}
+
+data class FooFooFooRecursiveUnionShapeData(
+    val width: Double,
+    val height: Double,
+    val color: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"width\":"
+output += width
+output += ",\"height\":"
+output += height
+output += ",\"color\":"
+output += buildString { printQuoted(color) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("width=$width")
+queryParts.add("height=$height")
+queryParts.add("color=$color")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooRecursiveUnionShapeData> {
+        @JvmStatic
+        override fun new(): FooFooFooRecursiveUnionShapeData {
+            return FooFooFooRecursiveUnionShapeData(
+                width = 0.0,
+                height = 0.0,
+                color = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooRecursiveUnionShapeData {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooRecursiveUnionShapeData {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooRecursiveUnionShapeData.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooRecursiveUnionShapeData.")
+                return new()
+            }
+val width: Double = when (__input.jsonObject["width"]) {
+                is JsonPrimitive -> __input.jsonObject["width"]!!.jsonPrimitive.doubleOrNull ?: 0.0
+                else -> 0.0
+            }
+val height: Double = when (__input.jsonObject["height"]) {
+                is JsonPrimitive -> __input.jsonObject["height"]!!.jsonPrimitive.doubleOrNull ?: 0.0
+                else -> 0.0
+            }
+val color: String = when (__input.jsonObject["color"]) {
+                is JsonPrimitive -> __input.jsonObject["color"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooFooRecursiveUnionShapeData(
+                width,
+                height,
+                color,
+            )
+        }
+    }
+}
+
+
+
+data class FooAutoReconnectParams(
+    val messageCount: UByte,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"messageCount\":"
+output += messageCount
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("messageCount=$messageCount")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooAutoReconnectParams> {
+        @JvmStatic
+        override fun new(): FooAutoReconnectParams {
+            return FooAutoReconnectParams(
+                messageCount = 0u,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooAutoReconnectParams {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooAutoReconnectParams {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooAutoReconnectParams.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooAutoReconnectParams.")
+                return new()
+            }
+val messageCount: UByte = when (__input.jsonObject["messageCount"]) {
+                is JsonPrimitive -> __input.jsonObject["messageCount"]!!.jsonPrimitive.contentOrNull?.toUByteOrNull() ?: 0u
+                else -> 0u
+            }
+            return FooAutoReconnectParams(
+                messageCount,
+            )
+        }
+    }
+}
+
+
+
+data class FooAutoReconnectResponse(
+    val count: UByte,
+    val message: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"count\":"
+output += count
+output += ",\"message\":"
+output += buildString { printQuoted(message) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("count=$count")
+queryParts.add("message=$message")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooAutoReconnectResponse> {
+        @JvmStatic
+        override fun new(): FooAutoReconnectResponse {
+            return FooAutoReconnectResponse(
+                count = 0u,
+                message = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooAutoReconnectResponse {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooAutoReconnectResponse {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooAutoReconnectResponse.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooAutoReconnectResponse.")
+                return new()
+            }
+val count: UByte = when (__input.jsonObject["count"]) {
+                is JsonPrimitive -> __input.jsonObject["count"]!!.jsonPrimitive.contentOrNull?.toUByteOrNull() ?: 0u
+                else -> 0u
+            }
+val message: String = when (__input.jsonObject["message"]) {
+                is JsonPrimitive -> __input.jsonObject["message"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooAutoReconnectResponse(
+                count,
+                message,
+            )
+        }
+    }
+}
+
+
+
+data class FooStreamConnectionErrorTestParams(
+    val statusCode: Int,
+    val statusMessage: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"statusCode\":"
+output += statusCode
+output += ",\"statusMessage\":"
+output += buildString { printQuoted(statusMessage) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("statusCode=$statusCode")
+queryParts.add("statusMessage=$statusMessage")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooStreamConnectionErrorTestParams> {
+        @JvmStatic
+        override fun new(): FooStreamConnectionErrorTestParams {
+            return FooStreamConnectionErrorTestParams(
+                statusCode = 0,
+                statusMessage = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooStreamConnectionErrorTestParams {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooStreamConnectionErrorTestParams {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooStreamConnectionErrorTestParams.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooStreamConnectionErrorTestParams.")
+                return new()
+            }
+val statusCode: Int = when (__input.jsonObject["statusCode"]) {
+                is JsonPrimitive -> __input.jsonObject["statusCode"]!!.jsonPrimitive.intOrNull ?: 0
+                else -> 0
+            }
+val statusMessage: String = when (__input.jsonObject["statusMessage"]) {
+                is JsonPrimitive -> __input.jsonObject["statusMessage"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooStreamConnectionErrorTestParams(
+                statusCode,
+                statusMessage,
+            )
+        }
+    }
+}
+
+
+
+data class FooStreamConnectionErrorTestResponse(
+    val message: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"message\":"
+output += buildString { printQuoted(message) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("message=$message")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooStreamConnectionErrorTestResponse> {
+        @JvmStatic
+        override fun new(): FooStreamConnectionErrorTestResponse {
+            return FooStreamConnectionErrorTestResponse(
+                message = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooStreamConnectionErrorTestResponse {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooStreamConnectionErrorTestResponse {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooStreamConnectionErrorTestResponse.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooStreamConnectionErrorTestResponse.")
+                return new()
+            }
+val message: String = when (__input.jsonObject["message"]) {
+                is JsonPrimitive -> __input.jsonObject["message"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooStreamConnectionErrorTestResponse(
+                message,
+            )
+        }
+    }
+}
+
+
+
+data class FooStreamLargeObjectsResponse(
+    val numbers: MutableList<Double>,
+    val objects: MutableList<FooFooStreamLargeObjectsResponseObjectsElement>,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"numbers\":"
+output += "["
+                for ((__index, __element) in numbers.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += __element
+                }
+                output += "]"
+output += ",\"objects\":"
+output += "["
+                for ((__index, __element) in objects.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += __element.toJson()
+                }
+                output += "]"
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooStreamLargeObjectsResponse/numbers.")
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooStreamLargeObjectsResponse/objects.")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooStreamLargeObjectsResponse> {
+        @JvmStatic
+        override fun new(): FooStreamLargeObjectsResponse {
+            return FooStreamLargeObjectsResponse(
+                numbers = mutableListOf(),
+                objects = mutableListOf(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooStreamLargeObjectsResponse {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooStreamLargeObjectsResponse {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooStreamLargeObjectsResponse.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooStreamLargeObjectsResponse.")
+                return new()
+            }
+val numbers: MutableList<Double> = when (__input.jsonObject["numbers"]) {
+                is JsonArray -> {
+                    val __value: MutableList<Double> = mutableListOf()
+                    for (__element in __input.jsonObject["numbers"]!!.jsonArray) {
+                        __value.add(
+                            when (__element) {
+                is JsonPrimitive -> __element!!.jsonPrimitive.doubleOrNull ?: 0.0
+                else -> 0.0
+            }
+                        )
+                    }
+                    __value
+                }
+
+                else -> mutableListOf()
+            }
+val objects: MutableList<FooFooStreamLargeObjectsResponseObjectsElement> = when (__input.jsonObject["objects"]) {
+                is JsonArray -> {
+                    val __value: MutableList<FooFooStreamLargeObjectsResponseObjectsElement> = mutableListOf()
+                    for (__element in __input.jsonObject["objects"]!!.jsonArray) {
+                        __value.add(
+                            when (__element) {
+                is JsonObject -> FooFooStreamLargeObjectsResponseObjectsElement.fromJsonElement(
+                    __element!!,
+                    "$instancePath/undefined",
+                )
+
+                else -> FooFooStreamLargeObjectsResponseObjectsElement.new()
+            }
+                        )
+                    }
+                    __value
+                }
+
+                else -> mutableListOf()
+            }
+            return FooStreamLargeObjectsResponse(
+                numbers,
+                objects,
+            )
+        }
+    }
+}
+
+data class FooFooStreamLargeObjectsResponseObjectsElement(
+    val id: String,
+    val name: String,
+    val email: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"name\":"
+output += buildString { printQuoted(name) }
+output += ",\"email\":"
+output += buildString { printQuoted(email) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add("name=$name")
+queryParts.add("email=$email")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooStreamLargeObjectsResponseObjectsElement> {
+        @JvmStatic
+        override fun new(): FooFooStreamLargeObjectsResponseObjectsElement {
+            return FooFooStreamLargeObjectsResponseObjectsElement(
+                id = "",
+                name = "",
+                email = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooStreamLargeObjectsResponseObjectsElement {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooStreamLargeObjectsResponseObjectsElement {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooStreamLargeObjectsResponseObjectsElement.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooStreamLargeObjectsResponseObjectsElement.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val name: String = when (__input.jsonObject["name"]) {
+                is JsonPrimitive -> __input.jsonObject["name"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val email: String = when (__input.jsonObject["email"]) {
+                is JsonPrimitive -> __input.jsonObject["email"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooStreamLargeObjectsResponseObjectsElement(
+                id,
+                name,
+                email,
+            )
+        }
+    }
+}
+
+
+
+data class FooChatMessageParams(
+    val channelId: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"channelId\":"
+output += buildString { printQuoted(channelId) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("channelId=$channelId")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooChatMessageParams> {
+        @JvmStatic
+        override fun new(): FooChatMessageParams {
+            return FooChatMessageParams(
+                channelId = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooChatMessageParams {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooChatMessageParams {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooChatMessageParams.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooChatMessageParams.")
+                return new()
+            }
+val channelId: String = when (__input.jsonObject["channelId"]) {
+                is JsonPrimitive -> __input.jsonObject["channelId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooChatMessageParams(
+                channelId,
+            )
+        }
+    }
+}
+
+
+
+sealed interface FooChatMessage : TestClientPrefixedModel {
+    val messageType: String
+
+    companion object Factory : TestClientPrefixedModelFactory<FooChatMessage> {
+        @JvmStatic
+        override fun new(): FooChatMessage {
+            return FooFooChatMessageText.new()
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooChatMessage {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooChatMessage {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] Discriminator.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooChatMessage.")
+                return new()
+            }
+            return when (__input.jsonObject["messageType"]) {
+                is JsonPrimitive -> when (__input.jsonObject["messageType"]!!.jsonPrimitive.contentOrNull) {
+                    "TEXT" -> FooFooChatMessageText.fromJsonElement(__input, instancePath)
+"IMAGE" -> FooFooChatMessageImage.fromJsonElement(__input, instancePath)
+"URL" -> FooFooChatMessageUrl.fromJsonElement(__input, instancePath)
+                    else -> new()
+                }
+
+                else -> new()
+            }
+        }
+    }
+}
+
+data class FooFooChatMessageText(
+    val id: String,
+    val channelId: String,
+    val userId: String,
+    val date: Instant,
+    val text: String,
+) : FooChatMessage {
+    override val messageType get() = "TEXT"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"messageType\":\"TEXT\""
+output += ",\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"channelId\":"
+output += buildString { printQuoted(channelId) }
+output += ",\"userId\":"
+output += buildString { printQuoted(userId) }
+output += ",\"date\":"
+output += "\"${timestampFormatter.format(date)}\""
+output += ",\"text\":"
+output += buildString { printQuoted(text) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("messageType=TEXT")
+queryParts.add("id=$id")
+queryParts.add("channelId=$channelId")
+queryParts.add("userId=$userId")
+queryParts.add(
+                "date=${
+                    timestampFormatter.format(date)
+                }"
+        )
+queryParts.add("text=$text")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooChatMessageText> {
+        @JvmStatic
+        override fun new(): FooFooChatMessageText {
+            return FooFooChatMessageText(
+                id = "",
+                channelId = "",
+                userId = "",
+                date = Instant.now(),
+                text = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooChatMessageText {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooChatMessageText {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooChatMessageText.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooChatMessageText.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val channelId: String = when (__input.jsonObject["channelId"]) {
+                is JsonPrimitive -> __input.jsonObject["channelId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val userId: String = when (__input.jsonObject["userId"]) {
+                is JsonPrimitive -> __input.jsonObject["userId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val date: Instant = when (__input.jsonObject["date"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["date"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["date"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val text: String = when (__input.jsonObject["text"]) {
+                is JsonPrimitive -> __input.jsonObject["text"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooChatMessageText(
+                id,
+                channelId,
+                userId,
+                date,
+                text,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooChatMessageImage(
+    val id: String,
+    val channelId: String,
+    val userId: String,
+    val date: Instant,
+    val image: String,
+) : FooChatMessage {
+    override val messageType get() = "IMAGE"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"messageType\":\"IMAGE\""
+output += ",\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"channelId\":"
+output += buildString { printQuoted(channelId) }
+output += ",\"userId\":"
+output += buildString { printQuoted(userId) }
+output += ",\"date\":"
+output += "\"${timestampFormatter.format(date)}\""
+output += ",\"image\":"
+output += buildString { printQuoted(image) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("messageType=IMAGE")
+queryParts.add("id=$id")
+queryParts.add("channelId=$channelId")
+queryParts.add("userId=$userId")
+queryParts.add(
+                "date=${
+                    timestampFormatter.format(date)
+                }"
+        )
+queryParts.add("image=$image")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooChatMessageImage> {
+        @JvmStatic
+        override fun new(): FooFooChatMessageImage {
+            return FooFooChatMessageImage(
+                id = "",
+                channelId = "",
+                userId = "",
+                date = Instant.now(),
+                image = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooChatMessageImage {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooChatMessageImage {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooChatMessageImage.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooChatMessageImage.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val channelId: String = when (__input.jsonObject["channelId"]) {
+                is JsonPrimitive -> __input.jsonObject["channelId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val userId: String = when (__input.jsonObject["userId"]) {
+                is JsonPrimitive -> __input.jsonObject["userId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val date: Instant = when (__input.jsonObject["date"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["date"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["date"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val image: String = when (__input.jsonObject["image"]) {
+                is JsonPrimitive -> __input.jsonObject["image"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooChatMessageImage(
+                id,
+                channelId,
+                userId,
+                date,
+                image,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooChatMessageUrl(
+    val id: String,
+    val channelId: String,
+    val userId: String,
+    val date: Instant,
+    val url: String,
+) : FooChatMessage {
+    override val messageType get() = "URL"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"messageType\":\"URL\""
+output += ",\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"channelId\":"
+output += buildString { printQuoted(channelId) }
+output += ",\"userId\":"
+output += buildString { printQuoted(userId) }
+output += ",\"date\":"
+output += "\"${timestampFormatter.format(date)}\""
+output += ",\"url\":"
+output += buildString { printQuoted(url) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("messageType=URL")
+queryParts.add("id=$id")
+queryParts.add("channelId=$channelId")
+queryParts.add("userId=$userId")
+queryParts.add(
+                "date=${
+                    timestampFormatter.format(date)
+                }"
+        )
+queryParts.add("url=$url")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooChatMessageUrl> {
+        @JvmStatic
+        override fun new(): FooFooChatMessageUrl {
+            return FooFooChatMessageUrl(
+                id = "",
+                channelId = "",
+                userId = "",
+                date = Instant.now(),
+                url = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooChatMessageUrl {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooChatMessageUrl {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooChatMessageUrl.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooChatMessageUrl.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val channelId: String = when (__input.jsonObject["channelId"]) {
+                is JsonPrimitive -> __input.jsonObject["channelId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val userId: String = when (__input.jsonObject["userId"]) {
+                is JsonPrimitive -> __input.jsonObject["userId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val date: Instant = when (__input.jsonObject["date"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["date"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["date"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val url: String = when (__input.jsonObject["url"]) {
+                is JsonPrimitive -> __input.jsonObject["url"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooChatMessageUrl(
+                id,
+                channelId,
+                userId,
+                date,
+                url,
+            )
+        }
+    }
+}
+
+
+
+data class FooTestsStreamRetryWithNewCredentialsResponse(
+    val message: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"message\":"
+output += buildString { printQuoted(message) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("message=$message")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooTestsStreamRetryWithNewCredentialsResponse> {
+        @JvmStatic
+        override fun new(): FooTestsStreamRetryWithNewCredentialsResponse {
+            return FooTestsStreamRetryWithNewCredentialsResponse(
+                message = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooTestsStreamRetryWithNewCredentialsResponse {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooTestsStreamRetryWithNewCredentialsResponse {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooTestsStreamRetryWithNewCredentialsResponse.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooTestsStreamRetryWithNewCredentialsResponse.")
+                return new()
+            }
+val message: String = when (__input.jsonObject["message"]) {
+                is JsonPrimitive -> __input.jsonObject["message"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooTestsStreamRetryWithNewCredentialsResponse(
+                message,
+            )
+        }
+    }
+}
+
+
+
+data class FooUsersWatchUserParams(
+    val userId: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"userId\":"
+output += buildString { printQuoted(userId) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("userId=$userId")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooUsersWatchUserParams> {
+        @JvmStatic
+        override fun new(): FooUsersWatchUserParams {
+            return FooUsersWatchUserParams(
+                userId = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooUsersWatchUserParams {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooUsersWatchUserParams {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooUsersWatchUserParams.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooUsersWatchUserParams.")
+                return new()
+            }
+val userId: String = when (__input.jsonObject["userId"]) {
+                is JsonPrimitive -> __input.jsonObject["userId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooUsersWatchUserParams(
+                userId,
+            )
+        }
+    }
+}
+
+
+
+data class FooUsersWatchUserResponse(
+    val id: String,
+    val role: FooFooUsersWatchUserResponseRole,
+    /**
+    * A profile picture    
+*/
+    val photo: FooUserPhoto?,
+    val createdAt: Instant,
+    val numFollowers: Int,
+    val settings: FooUserSettings,
+    val recentNotifications: MutableList<FooFooUsersWatchUserResponseRecentNotificationsElement>,
+    val bookmarks: MutableMap<String, FooFooUsersWatchUserResponseBookmarksValue>,
+    val metadata: MutableMap<String, JsonElement>,
+    val randomList: MutableList<JsonElement>,
+    val bio: String? = null,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"id\":"
+output += buildString { printQuoted(id) }
+output += ",\"role\":"
+output += "\"${role.serialValue}\""
+output += ",\"photo\":"
+output += photo?.toJson()
+output += ",\"createdAt\":"
+output += "\"${timestampFormatter.format(createdAt)}\""
+output += ",\"numFollowers\":"
+output += numFollowers
+output += ",\"settings\":"
+output += settings.toJson()
+output += ",\"recentNotifications\":"
+output += "["
+                for ((__index, __element) in recentNotifications.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += __element.toJson()
+                }
+                output += "]"
+output += ",\"bookmarks\":"
+output += "{"
+            for ((__index, __entry) in bookmarks.entries.withIndex()) {
+                if (__index != 0) {
+                    output += ","
+                }
+                output += "${buildString { printQuoted(__entry.key) }}:"
+                output += __entry.value.toJson()
+            }
+            output += "}"
+output += ",\"metadata\":"
+output += "{"
+            for ((__index, __entry) in metadata.entries.withIndex()) {
+                if (__index != 0) {
+                    output += ","
+                }
+                output += "${buildString { printQuoted(__entry.key) }}:"
+                output += JsonInstance.encodeToString(__entry.value)
+            }
+            output += "}"
+output += ",\"randomList\":"
+output += "["
+                for ((__index, __element) in randomList.withIndex()) {
+                    if (__index != 0) {
+                        output += ","
+                    }
+                    output += JsonInstance.encodeToString(__element)
+                }
+                output += "]"
+if (bio != null) {
+                output += ",\"bio\":"
+                output += buildString { printQuoted(bio) }
+            }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("id=$id")
+queryParts.add("role=${role.serialValue}")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooUsersWatchUserResponse/photo.")
+queryParts.add(
+                "createdAt=${
+                    timestampFormatter.format(createdAt)
+                }"
+        )
+queryParts.add("numFollowers=$numFollowers")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooUsersWatchUserResponse/settings.")
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooUsersWatchUserResponse/recentNotifications.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooUsersWatchUserResponse/bookmarks.")
+__logError("[WARNING] nested objects cannot be serialized to query params. Skipping field at /FooUsersWatchUserResponse/metadata.")
+__logError("[WARNING] arrays cannot be serialized to query params. Skipping field at /FooUsersWatchUserResponse/randomList.")
+if (bio != null) {
+            queryParts.add("bio=$bio")
+        }
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooUsersWatchUserResponse> {
+        @JvmStatic
+        override fun new(): FooUsersWatchUserResponse {
+            return FooUsersWatchUserResponse(
+                id = "",
+                role = FooFooUsersWatchUserResponseRole.new(),
+                photo = null,
+                createdAt = Instant.now(),
+                numFollowers = 0,
+                settings = FooUserSettings.new(),
+                recentNotifications = mutableListOf(),
+                bookmarks = mutableMapOf(),
+                metadata = mutableMapOf(),
+                randomList = mutableListOf(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooUsersWatchUserResponse {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooUsersWatchUserResponse {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooUsersWatchUserResponse.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooUsersWatchUserResponse.")
+                return new()
+            }
+val id: String = when (__input.jsonObject["id"]) {
+                is JsonPrimitive -> __input.jsonObject["id"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val role: FooFooUsersWatchUserResponseRole = when (__input.jsonObject["role"]) {
+                is JsonNull -> FooFooUsersWatchUserResponseRole.new()
+                is JsonPrimitive -> FooFooUsersWatchUserResponseRole.fromJsonElement(__input.jsonObject["role"]!!, "$instancePath/role")
+                else -> FooFooUsersWatchUserResponseRole.new()
+            }
+val photo: FooUserPhoto? = when (__input.jsonObject["photo"]) {
+                    is JsonObject -> FooUserPhoto.fromJsonElement(
+                        __input.jsonObject["photo"]!!,
+                        "$instancePath/photo",
+                    )
+                    else -> null
+                }
+val createdAt: Instant = when (__input.jsonObject["createdAt"]) {
+                is JsonPrimitive ->
+                    if (__input.jsonObject["createdAt"]!!.jsonPrimitive.isString)
+                        Instant.parse(__input.jsonObject["createdAt"]!!.jsonPrimitive.content)
+                    else
+                        Instant.now()
+                else -> Instant.now()
+            }
+val numFollowers: Int = when (__input.jsonObject["numFollowers"]) {
+                is JsonPrimitive -> __input.jsonObject["numFollowers"]!!.jsonPrimitive.intOrNull ?: 0
+                else -> 0
+            }
+val settings: FooUserSettings = when (__input.jsonObject["settings"]) {
+                is JsonObject -> FooUserSettings.fromJsonElement(
+                    __input.jsonObject["settings"]!!,
+                    "$instancePath/settings",
+                )
+
+                else -> FooUserSettings.new()
+            }
+val recentNotifications: MutableList<FooFooUsersWatchUserResponseRecentNotificationsElement> = when (__input.jsonObject["recentNotifications"]) {
+                is JsonArray -> {
+                    val __value: MutableList<FooFooUsersWatchUserResponseRecentNotificationsElement> = mutableListOf()
+                    for (__element in __input.jsonObject["recentNotifications"]!!.jsonArray) {
+                        __value.add(
+                            when (__element) {
+                is JsonObject -> FooFooUsersWatchUserResponseRecentNotificationsElement.fromJsonElement(
+                    __element!!,
+                    "$instancePath/undefined",
+                )
+                else -> FooFooUsersWatchUserResponseRecentNotificationsElement.new()
+            }
+                        )
+                    }
+                    __value
+                }
+
+                else -> mutableListOf()
+            }
+val bookmarks: MutableMap<String, FooFooUsersWatchUserResponseBookmarksValue> = when (__input.jsonObject["bookmarks"]) {
+                is JsonObject -> {
+                    val __value: MutableMap<String, FooFooUsersWatchUserResponseBookmarksValue> = mutableMapOf()
+                    for (__entry in __input.jsonObject["bookmarks"]!!.jsonObject.entries) {
+                        __value[__entry.key] = when (__entry.value) {
+                is JsonObject -> FooFooUsersWatchUserResponseBookmarksValue.fromJsonElement(
+                    __entry.value!!,
+                    "$instancePath/bookmarks",
+                )
+
+                else -> FooFooUsersWatchUserResponseBookmarksValue.new()
+            }
+                    }
+                    __value
+                }
+
+                else -> mutableMapOf()
+            }
+val metadata: MutableMap<String, JsonElement> = when (__input.jsonObject["metadata"]) {
+                is JsonObject -> {
+                    val __value: MutableMap<String, JsonElement> = mutableMapOf()
+                    for (__entry in __input.jsonObject["metadata"]!!.jsonObject.entries) {
+                        __value[__entry.key] = when (__entry.value) {
+                is JsonElement -> __entry.value!!
+                else -> JsonNull
+            }
+                    }
+                    __value
+                }
+
+                else -> mutableMapOf()
+            }
+val randomList: MutableList<JsonElement> = when (__input.jsonObject["randomList"]) {
+                is JsonArray -> {
+                    val __value: MutableList<JsonElement> = mutableListOf()
+                    for (__element in __input.jsonObject["randomList"]!!.jsonArray) {
+                        __value.add(
+                            when (__element) {
+                is JsonElement -> __element!!
+                else -> JsonNull
+            }
+                        )
+                    }
+                    __value
+                }
+
+                else -> mutableListOf()
+            }
+val bio: String? = when (__input.jsonObject["bio"]) {
+                    is JsonPrimitive -> __input.jsonObject["bio"]!!.jsonPrimitive.contentOrNull
+                    else -> null
+                }
+            return FooUsersWatchUserResponse(
+                id,
+                role,
+                photo,
+                createdAt,
+                numFollowers,
+                settings,
+                recentNotifications,
+                bookmarks,
+                metadata,
+                randomList,
+                bio,
+            )
+        }
+    }
+}
+
+enum class FooFooUsersWatchUserResponseRole {
+    Standard,
+    Admin;
+    val serialValue: String
+        get() = when (this) {
+            Standard -> "standard"
+            Admin -> "admin"
+        }
+    
+    companion object Factory : TestClientPrefixedModelFactory<FooFooUsersWatchUserResponseRole> {
+        @JvmStatic
+        override fun new(): FooFooUsersWatchUserResponseRole {
+            return Standard
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooUsersWatchUserResponseRole {
+            return when (input) {
+                Standard.serialValue -> Standard
+                Admin.serialValue -> Admin
+                else -> Standard
+            }
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooUsersWatchUserResponseRole {
+            if (__input !is JsonPrimitive) {
+                __logError("[WARNING] FooFooUsersWatchUserResponseRole.fromJsonElement() expected kotlinx.serialization.json.JsonPrimitive at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooUsersWatchUserResponseRole.")
+                return new()
+            }
+            return when (__input.jsonPrimitive.contentOrNull) {
+                "standard" -> Standard
+                "admin" -> Admin
+                else -> new()
+            }
+        }
+    }
+}
+
+/**
+* A profile picture
+*/
+data class FooUserPhoto(
+    val url: String,
+    val width: Double,
+    val height: Double,
+    val bytes: Long,
+    /**
+    * When the photo was last updated in nanoseconds    
+*/
+    val nanoseconds: ULong,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"url\":"
+output += buildString { printQuoted(url) }
+output += ",\"width\":"
+output += width
+output += ",\"height\":"
+output += height
+output += ",\"bytes\":"
+output += "\"${bytes}\""
+output += ",\"nanoseconds\":"
+output += "\"${nanoseconds}\""
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("url=$url")
+queryParts.add("width=$width")
+queryParts.add("height=$height")
+queryParts.add("bytes=$bytes")
+queryParts.add("nanoseconds=$nanoseconds")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooUserPhoto> {
+        @JvmStatic
+        override fun new(): FooUserPhoto {
+            return FooUserPhoto(
+                url = "",
+                width = 0.0,
+                height = 0.0,
+                bytes = 0L,
+                nanoseconds = 0UL,
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooUserPhoto {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooUserPhoto {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooUserPhoto.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooUserPhoto.")
+                return new()
+            }
+val url: String = when (__input.jsonObject["url"]) {
+                is JsonPrimitive -> __input.jsonObject["url"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val width: Double = when (__input.jsonObject["width"]) {
+                is JsonPrimitive -> __input.jsonObject["width"]!!.jsonPrimitive.doubleOrNull ?: 0.0
+                else -> 0.0
+            }
+val height: Double = when (__input.jsonObject["height"]) {
+                is JsonPrimitive -> __input.jsonObject["height"]!!.jsonPrimitive.doubleOrNull ?: 0.0
+                else -> 0.0
+            }
+val bytes: Long = when (__input.jsonObject["bytes"]) {
+                is JsonPrimitive -> __input.jsonObject["bytes"]!!.jsonPrimitive.longOrNull ?: 0L
+                else -> 0L
+            }
+val nanoseconds: ULong = when (__input.jsonObject["nanoseconds"]) {
+                is JsonPrimitive -> __input.jsonObject["nanoseconds"]!!.jsonPrimitive.contentOrNull?.toULongOrNull() ?: 0UL
+                else -> 0UL
+            }
+            return FooUserPhoto(
+                url,
+                width,
+                height,
+                bytes,
+                nanoseconds,
+            )
+        }
+    }
+}
+
+
+
+data class FooUserSettings(
+    val notificationsEnabled: Boolean,
+    val preferredTheme: FooFooUserSettingsPreferredTheme,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"notificationsEnabled\":"
+output += notificationsEnabled
+output += ",\"preferredTheme\":"
+output += "\"${preferredTheme.serialValue}\""
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("notificationsEnabled=$notificationsEnabled")
+queryParts.add("preferredTheme=${preferredTheme.serialValue}")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooUserSettings> {
+        @JvmStatic
+        override fun new(): FooUserSettings {
+            return FooUserSettings(
+                notificationsEnabled = false,
+                preferredTheme = FooFooUserSettingsPreferredTheme.new(),
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooUserSettings {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooUserSettings {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooUserSettings.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooUserSettings.")
+                return new()
+            }
+val notificationsEnabled: Boolean = when (__input.jsonObject["notificationsEnabled"]) {
+                is JsonPrimitive -> __input.jsonObject["notificationsEnabled"]!!.jsonPrimitive.booleanOrNull ?: false
+                else -> false
+            }
+val preferredTheme: FooFooUserSettingsPreferredTheme = when (__input.jsonObject["preferredTheme"]) {
+                is JsonNull -> FooFooUserSettingsPreferredTheme.new()
+                is JsonPrimitive -> FooFooUserSettingsPreferredTheme.fromJsonElement(__input.jsonObject["preferredTheme"]!!, "$instancePath/preferredTheme")
+                else -> FooFooUserSettingsPreferredTheme.new()
+            }
+            return FooUserSettings(
+                notificationsEnabled,
+                preferredTheme,
+            )
+        }
+    }
+}
+
+enum class FooFooUserSettingsPreferredTheme {
+    DarkMode,
+    LightMode,
+    System;
+    val serialValue: String
+        get() = when (this) {
+            DarkMode -> "dark-mode"
+            LightMode -> "light-mode"
+            System -> "system"
+        }
+    
+    companion object Factory : TestClientPrefixedModelFactory<FooFooUserSettingsPreferredTheme> {
+        @JvmStatic
+        override fun new(): FooFooUserSettingsPreferredTheme {
+            return DarkMode
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooUserSettingsPreferredTheme {
+            return when (input) {
+                DarkMode.serialValue -> DarkMode
+                LightMode.serialValue -> LightMode
+                System.serialValue -> System
+                else -> DarkMode
+            }
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooUserSettingsPreferredTheme {
+            if (__input !is JsonPrimitive) {
+                __logError("[WARNING] FooFooUserSettingsPreferredTheme.fromJsonElement() expected kotlinx.serialization.json.JsonPrimitive at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooUserSettingsPreferredTheme.")
+                return new()
+            }
+            return when (__input.jsonPrimitive.contentOrNull) {
+                "dark-mode" -> DarkMode
+                "light-mode" -> LightMode
+                "system" -> System
+                else -> new()
+            }
+        }
+    }
+}
+
+sealed interface FooFooUsersWatchUserResponseRecentNotificationsElement : TestClientPrefixedModel {
+    val notificationType: String
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooUsersWatchUserResponseRecentNotificationsElement> {
+        @JvmStatic
+        override fun new(): FooFooUsersWatchUserResponseRecentNotificationsElement {
+            return FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike.new()
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooUsersWatchUserResponseRecentNotificationsElement {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooUsersWatchUserResponseRecentNotificationsElement {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] Discriminator.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooUsersWatchUserResponseRecentNotificationsElement.")
+                return new()
+            }
+            return when (__input.jsonObject["notificationType"]) {
+                is JsonPrimitive -> when (__input.jsonObject["notificationType"]!!.jsonPrimitive.contentOrNull) {
+                    "POST_LIKE" -> FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike.fromJsonElement(__input, instancePath)
+"POST_COMMENT" -> FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment.fromJsonElement(__input, instancePath)
+                    else -> new()
+                }
+
+                else -> new()
+            }
+        }
+    }
+}
+
+data class FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike(
+    val postId: String,
+    val userId: String,
+) : FooFooUsersWatchUserResponseRecentNotificationsElement {
+    override val notificationType get() = "POST_LIKE"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"notificationType\":\"POST_LIKE\""
+output += ",\"postId\":"
+output += buildString { printQuoted(postId) }
+output += ",\"userId\":"
+output += buildString { printQuoted(userId) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("notificationType=POST_LIKE")
+queryParts.add("postId=$postId")
+queryParts.add("userId=$userId")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike> {
+        @JvmStatic
+        override fun new(): FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike {
+            return FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike(
+                postId = "",
+                userId = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike.")
+                return new()
+            }
+val postId: String = when (__input.jsonObject["postId"]) {
+                is JsonPrimitive -> __input.jsonObject["postId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val userId: String = when (__input.jsonObject["userId"]) {
+                is JsonPrimitive -> __input.jsonObject["userId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooFooUsersWatchUserResponseRecentNotificationsElementPostLike(
+                postId,
+                userId,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment(
+    val postId: String,
+    val userId: String,
+    val commentText: String,
+) : FooFooUsersWatchUserResponseRecentNotificationsElement {
+    override val notificationType get() = "POST_COMMENT"
+
+    override fun toJson(): String {
+var output = "{"
+output += "\"notificationType\":\"POST_COMMENT\""
+output += ",\"postId\":"
+output += buildString { printQuoted(postId) }
+output += ",\"userId\":"
+output += buildString { printQuoted(userId) }
+output += ",\"commentText\":"
+output += buildString { printQuoted(commentText) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("notificationType=POST_COMMENT")
+queryParts.add("postId=$postId")
+queryParts.add("userId=$userId")
+queryParts.add("commentText=$commentText")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment> {
+        @JvmStatic
+        override fun new(): FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment {
+            return FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment(
+                postId = "",
+                userId = "",
+                commentText = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment.")
+                return new()
+            }
+val postId: String = when (__input.jsonObject["postId"]) {
+                is JsonPrimitive -> __input.jsonObject["postId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val userId: String = when (__input.jsonObject["userId"]) {
+                is JsonPrimitive -> __input.jsonObject["userId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val commentText: String = when (__input.jsonObject["commentText"]) {
+                is JsonPrimitive -> __input.jsonObject["commentText"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooFooUsersWatchUserResponseRecentNotificationsElementPostComment(
+                postId,
+                userId,
+                commentText,
+            )
+        }
+    }
+}
+
+
+
+data class FooFooUsersWatchUserResponseBookmarksValue(
+    val postId: String,
+    val userId: String,
+) : TestClientPrefixedModel {
+    override fun toJson(): String {
+var output = "{"
+output += "\"postId\":"
+output += buildString { printQuoted(postId) }
+output += ",\"userId\":"
+output += buildString { printQuoted(userId) }
+output += "}"
+return output    
+    }
+
+    override fun toUrlQueryParams(): String {
+val queryParts = mutableListOf<String>()
+queryParts.add("postId=$postId")
+queryParts.add("userId=$userId")
+return queryParts.joinToString("&")
+    }
+
+    companion object Factory : TestClientPrefixedModelFactory<FooFooUsersWatchUserResponseBookmarksValue> {
+        @JvmStatic
+        override fun new(): FooFooUsersWatchUserResponseBookmarksValue {
+            return FooFooUsersWatchUserResponseBookmarksValue(
+                postId = "",
+                userId = "",
+            )
+        }
+
+        @JvmStatic
+        override fun fromJson(input: String): FooFooUsersWatchUserResponseBookmarksValue {
+            return fromJsonElement(JsonInstance.parseToJsonElement(input))
+        }
+
+        @JvmStatic
+        override fun fromJsonElement(__input: JsonElement, instancePath: String): FooFooUsersWatchUserResponseBookmarksValue {
+            if (__input !is JsonObject) {
+                __logError("[WARNING] FooFooUsersWatchUserResponseBookmarksValue.fromJsonElement() expected kotlinx.serialization.json.JsonObject at $instancePath. Got ${__input.javaClass}. Initializing empty FooFooUsersWatchUserResponseBookmarksValue.")
+                return new()
+            }
+val postId: String = when (__input.jsonObject["postId"]) {
+                is JsonPrimitive -> __input.jsonObject["postId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+val userId: String = when (__input.jsonObject["userId"]) {
+                is JsonPrimitive -> __input.jsonObject["userId"]!!.jsonPrimitive.contentOrNull ?: ""
+                else -> ""
+            }
+            return FooFooUsersWatchUserResponseBookmarksValue(
+                postId,
+                userId,
+            )
+        }
+    }
+}
+
+
+
+// Implementation copied from https://github.com/Kotlin/kotlinx.serialization/blob/d0ae697b9394103879e6c7f836d0f7cf128f4b1e/formats/json/commonMain/src/kotlinx/serialization/json/internal/StringOps.kt#L45
+private const val STRING = '"'
+
+private fun toHexChar(i: Int): Char {
+    val d = i and 0xf
+    return if (d < 10) (d + '0'.code).toChar()
+    else (d - 10 + 'a'.code).toChar()
+}
+
+private val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply {
+    for (c in 0..0x1f) {
+        val c1 = toHexChar(c shr 12)
+        val c2 = toHexChar(c shr 8)
+        val c3 = toHexChar(c shr 4)
+        val c4 = toHexChar(c)
+        this[c] = "\\u$c1$c2$c3$c4"
+    }
+    this['"'.code] = "\\\""
+    this['\\'.code] = "\\\\"
+    this['\t'.code] = "\\t"
+    this['\b'.code] = "\\b"
+    this['\n'.code] = "\\n"
+    this['\r'.code] = "\\r"
+    this[0x0c] = "\\f"
+}
+
+private val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply {
+    for (c in 0..0x1f) {
+        this[c] = 1.toByte()
+    }
+    this['"'.code] = '"'.code.toByte()
+    this['\\'.code] = '\\'.code.toByte()
+    this['\t'.code] = 't'.code.toByte()
+    this['\b'.code] = 'b'.code.toByte()
+    this['\n'.code] = 'n'.code.toByte()
+    this['\r'.code] = 'r'.code.toByte()
+    this[0x0c] = 'f'.code.toByte()
+}
+
+private fun StringBuilder.printQuoted(value: String) {
+    append(STRING)
+    var lastPos = 0
+    for (i in value.indices) {
+        val c = value[i].code
+        if (c < ESCAPE_STRINGS.size && ESCAPE_STRINGS[c] != null) {
+            append(value, lastPos, i) // flush prev
+            append(ESCAPE_STRINGS[c])
+            lastPos = i + 1
+        }
+    }
+
+    if (lastPos != 0) append(value, lastPos, value.length)
+    else append(value)
+    append(STRING)
+}
+
+private fun __logError(string: String) {
+    System.err.println(string)
+}
+
+private suspend fun __prepareRequest(
+    client: HttpClient,
+    url: String,
+    method: HttpMethod,
+    params: TestClientPrefixedModel?,
+    headers: MutableMap<String, String>?,
+): HttpStatement {
+    var finalUrl = url
+    var finalBody = ""
+    when (method) {
+        HttpMethod.Get, HttpMethod.Head -> {
+            finalUrl = "$finalUrl?${params?.toUrlQueryParams() ?: ""}"
+        }
+
+        HttpMethod.Post, HttpMethod.Put, HttpMethod.Patch, HttpMethod.Delete -> {
+            finalBody = params?.toJson() ?: ""
+        }
+    }
+    val builder = HttpRequestBuilder()
+    builder.method = method
+    builder.url(finalUrl)
+    builder.timeout {
+        requestTimeoutMillis = 10 * 60 * 1000
+    }
+    if (headers != null) {
+        for (entry in headers.entries) {
+            builder.headers[entry.key] = entry.value
+        }
+    }
+    builder.headers["client-version"] = generatedClientVersion
+    if (method != HttpMethod.Get && method != HttpMethod.Head) {
+        builder.setBody(finalBody)
+    }
+    return client.prepareRequest(builder)
+}
+
+// SSE_FN_START
+private enum class __TestClientPrefixedSseEventLineType {
+    Id,
+    Event,
+    Data,
+    Retry,
+    None,
+}
+
+private fun __parseSseEventLine(line: String): Pair<__TestClientPrefixedSseEventLineType, String> {
+    if (line.startsWith("id:")) {
+        return Pair(__TestClientPrefixedSseEventLineType.Id, line.substring(3).trim())
+    }
+    if (line.startsWith("event:")) {
+        return Pair(__TestClientPrefixedSseEventLineType.Event, line.substring(6).trim())
+    }
+    if (line.startsWith("data:")) {
+        return Pair(__TestClientPrefixedSseEventLineType.Data, line.substring(5).trim())
+    }
+    if (line.startsWith("retry:")) {
+        return Pair(__TestClientPrefixedSseEventLineType.Retry, line.substring(6).trim())
+    }
+    return Pair(__TestClientPrefixedSseEventLineType.None, "")
+}
+
+private data class __TestClientPrefixedSseEvent(
+    val id: String? = null,
+    val event: String,
+    val data: String,
+    val retry: Int? = null
+)
+
+private class __TestClientPrefixedSseEventParsingResult(val events: List<__TestClientPrefixedSseEvent>, val leftover: String)
+
+private fun __parseSseEvents(input: String): __TestClientPrefixedSseEventParsingResult {
+    val events = mutableListOf<__TestClientPrefixedSseEvent>()
+    val lines = input.lines()
+    if (lines.isEmpty()) {
+        return __TestClientPrefixedSseEventParsingResult(events = listOf(), leftover = "")
+    }
+    var id: String? = null
+    var event: String? = null
+    var data: String? = null
+    var retry: Int? = null
+    var lastIndex: Int? = 0
+    lines.forEachIndexed { index, line ->
+        if (line.isNotEmpty()) {
+            val (type, value) = __parseSseEventLine(line)
+            when (type) {
+                __TestClientPrefixedSseEventLineType.Id -> id = value
+                __TestClientPrefixedSseEventLineType.Event -> event = value
+                __TestClientPrefixedSseEventLineType.Data -> data = value
+                __TestClientPrefixedSseEventLineType.Retry -> retry = value.toInt()
+                __TestClientPrefixedSseEventLineType.None -> {}
+            }
+        }
+        val isEnd = line == ""
+        if (isEnd) {
+            if (data != null) {
+                events.add(
+                    __TestClientPrefixedSseEvent(
+                        id = id,
+                        event = event ?: "message",
+                        data = data!!,
+                        retry = retry,
+                    )
+                )
+            }
+            id = null
+            event = null
+            data = null
+            retry = null
+            lastIndex = if (index + 1 < lines.size) index + 1 else null
+        }
+    }
+    return __TestClientPrefixedSseEventParsingResult(
+        events = events,
+        leftover = if (lastIndex != null) lines.subList(lastIndex!!, lines.size).joinToString(separator = "\n") else ""
+    )
+}
+// SSE_FN_END
+
+private suspend fun __handleSseRequest(
+    httpClient: HttpClient,
+    url: String,
+    method: HttpMethod,
+    params: TestClientPrefixedModel?,
+    headers: __TestClientPrefixedHeadersFn,
+    backoffTime: Long,
+    maxBackoffTime: Long,
+    lastEventId: String?,
+    onOpen: ((response: HttpResponse) -> Unit) = {},
+    onClose: (() -> Unit) = {},
+    onData: ((data: String) -> Unit) = {},
+    onError: ((err: Exception) -> Unit) = {},
+    onRequestError: ((err: Exception) -> Unit) = {},
+    onResponseError: ((err: TestClientPrefixedError) -> Unit) = {},
+    bufferCapacity: Int,
+) {
+    val finalHeaders = headers?.invoke() ?: mutableMapOf()
+    var lastId = lastEventId
+    // exponential backoff maxing out at 32 seconds
+    if (backoffTime > 0) {
+        withContext(currentCoroutineContext()) {
+            Thread.sleep(backoffTime)
+        }
+    }
+    var newBackoffTime =
+        if (backoffTime == 0L) 2L else if (backoffTime * 2L >= maxBackoffTime) maxBackoffTime else backoffTime * 2L
+    if (lastId != null) {
+        finalHeaders["Last-Event-ID"] = lastId.toString()
+    }
+    val request = __prepareRequest(
+        client = httpClient,
+        url = url,
+        method = method,
+        params = params,
+        headers = finalHeaders,
+    )
+    try {
+        request.execute { httpResponse ->
+            try {
+                onOpen(httpResponse)
+            } catch (e: CancellationException) {
+                onClose()
+                httpResponse.cancel()
+                return@execute
+            }
+            if (httpResponse.status.value !in 200..299) {
+                try {
+                    if (httpResponse.headers["Content-Type"] == "application/json") {
+                        val err = TestClientPrefixedError.fromJson(httpResponse.bodyAsText()) 
+                        onError(err)
+                        onResponseError(err)
+                    } else {
+                        val err = TestClientPrefixedError(
+                            code = httpResponse.status.value,
+                            errorMessage = httpResponse.status.description,
+                            data = JsonPrimitive(httpResponse.bodyAsText()),
+                            stack = null,
+                        )
+                        onError(err)
+                        onResponseError(err)
+                    }
+                } catch (e: CancellationException) {
+                    onClose()
+                    httpResponse.cancel()
+                    return@execute
+                }
+                return@execute __handleSseRequest(
+                    httpClient = httpClient,
+                    url = url,
+                    method = method,
+                    params = params,
+                    headers = headers,
+                    backoffTime = newBackoffTime,
+                    maxBackoffTime = maxBackoffTime,
+                    lastEventId = lastId,
+                    bufferCapacity = bufferCapacity,
+                    onOpen = onOpen,
+                    onClose = onClose,
+                    onData = onData,
+                    onError = onError,
+                    onRequestError = onRequestError,
+                    onResponseError = onResponseError,
+                )
+            }
+            if (httpResponse.headers["Content-Type"] != "text/event-stream") {
+                try {
+                    val err = TestClientPrefixedError(
+                        code = 0,
+                        errorMessage = "Expected server to return Content-Type \"text/event-stream\". Got \"${httpResponse.headers["Content-Type"]}\"",
+                        data = JsonPrimitive(httpResponse.bodyAsText()),
+                        stack = null,
+                    )
+                    onError(err)
+                    onResponseError(err)
+                } catch (e: CancellationException) {
+                    httpResponse.cancel()
+                    return@execute
+                }
+                return@execute __handleSseRequest(
+                    httpClient = httpClient,
+                    url = url,
+                    method = method,
+                    params = params,
+                    headers = headers,
+                    backoffTime = newBackoffTime,
+                    maxBackoffTime = maxBackoffTime,
+                    lastEventId = lastId,
+                    bufferCapacity = bufferCapacity,
+                    onOpen = onOpen,
+                    onClose = onClose,
+                    onData = onData,
+                    onError = onError,
+                    onRequestError = onRequestError,
+                    onResponseError = onResponseError,
+                )
+            }
+            newBackoffTime = 0
+            val channel: ByteReadChannel = httpResponse.body()
+            var pendingData = ""
+            while (!channel.isClosedForRead) {
+                val buffer = ByteBuffer.allocateDirect(bufferCapacity)
+                val read = channel.readAvailable(buffer)
+                if (read == -1) break
+                buffer.flip()
+                val input = Charsets.UTF_8.decode(buffer).toString()
+                val parsedResult = __parseSseEvents("${pendingData}${input}")
+                pendingData = parsedResult.leftover
+                for (event in parsedResult.events) {
+                    if (event.id != null) {
+                        lastId = event.id
+                    }
+                    when (event.event) {
+                        "message" -> {
+                            try {
+                                onData(event.data)
+                            } catch (e: CancellationException) {
+                                onClose()
+                                httpResponse.cancel()
+                                return@execute
+                            }
+                        }
+
+                        "done" -> {
+                            onClose()
+                            return@execute
+                        }
+
+                        else -> {}
+                    }
+                }
+            }
+            return@execute __handleSseRequest(
+                httpClient = httpClient,
+                url = url,
+                method = method,
+                params = params,
+                headers = headers,
+                backoffTime = newBackoffTime,
+                maxBackoffTime = maxBackoffTime,
+                lastEventId = lastId,
+                bufferCapacity = bufferCapacity,
+                onOpen = onOpen,
+                onClose = onClose,
+                onData = onData,
+                onError = onError,
+                onRequestError = onRequestError,
+                onResponseError = onResponseError,
+            )
+        }
+    } catch (e: java.net.ConnectException) {
+        onError(e)
+        onRequestError(e)
+        return __handleSseRequest(
+            httpClient = httpClient,
+            url = url,
+            method = method,
+            params = params,
+            headers = headers,
+            backoffTime = newBackoffTime,
+            maxBackoffTime = maxBackoffTime,
+            lastEventId = lastId,
+            bufferCapacity = bufferCapacity,
+            onOpen = onOpen,
+            onClose = onClose,
+            onData = onData,
+            onError = onError,
+            onRequestError = onRequestError,
+            onResponseError = onResponseError,
+        )
+    } catch (e: Exception) {
+        onError(e)
+        onRequestError(e)
+        return __handleSseRequest(
+            httpClient = httpClient,
+            url = url,
+            method = method,
+            params = params,
+            headers = headers,
+            backoffTime = newBackoffTime,
+            maxBackoffTime = maxBackoffTime,
+            lastEventId = lastId,
+            bufferCapacity = bufferCapacity,
+            onOpen = onOpen,
+            onClose = onClose,
+            onData = onData,
+            onError = onError,
+            onRequestError = onRequestError,
+            onResponseError = onResponseError,
+        )
+    }
+}
\ No newline at end of file
diff --git a/tests/clients/rust/src/main.rs b/tests/clients/rust/src/main.rs
index 62274c73..fbbee2c1 100644
--- a/tests/clients/rust/src/main.rs
+++ b/tests/clients/rust/src/main.rs
@@ -1,5 +1,7 @@
 #[path = "test_client.g.rs"]
 mod test_client;
+#[path = "test_client_prefixed.g.rs"]
+mod test_client_prefixed;
 fn main() {}
 
 #[cfg(test)]
diff --git a/tests/clients/rust/src/test_client_prefixed.g.rs b/tests/clients/rust/src/test_client_prefixed.g.rs
new file mode 100644
index 00000000..a9b115b4
--- /dev/null
+++ b/tests/clients/rust/src/test_client_prefixed.g.rs
@@ -0,0 +1,6048 @@
+#![allow(
+    dead_code,
+    unused_imports,
+    unused_variables,
+    unconditional_recursion,
+    deprecated
+)]
+use arri_client::{
+    chrono::{DateTime, FixedOffset},
+    parsed_arri_request,
+    reqwest::{self, Request},
+    serde_json::{self, Map},
+    sse::{parsed_arri_sse_request, ArriParsedSseRequestOptions, SseController, SseEvent},
+    utils::{serialize_date_time, serialize_string},
+    ArriClientConfig, ArriClientService, ArriEnum, ArriError, ArriModel, ArriParsedRequestOptions,
+    EmptyArriModel, InternalArriClientConfig,
+};
+use std::collections::{BTreeMap, HashMap};
+
+#[derive(Clone)]
+pub struct TestClientPrefixed {
+    _config: InternalArriClientConfig,
+    pub tests: TestClientPrefixedTestsService,
+    pub users: TestClientPrefixedUsersService,
+}
+
+impl ArriClientService for TestClientPrefixed {
+    fn create(config: ArriClientConfig) -> Self {
+        Self {
+            _config: InternalArriClientConfig::from(config.clone()),
+            tests: TestClientPrefixedTestsService::create(config.clone()),
+            users: TestClientPrefixedUsersService::create(config),
+        }
+    }
+    fn update_headers(&self, headers: HashMap<&'static str, String>) {
+        let mut unwrapped_headers = self._config.headers.write().unwrap();
+        *unwrapped_headers = headers.clone();
+        self.tests.update_headers(headers.clone());
+        self.users.update_headers(headers);
+    }
+}
+
+impl TestClientPrefixed {}
+
+#[derive(Clone)]
+pub struct TestClientPrefixedTestsService {
+    _config: InternalArriClientConfig,
+}
+
+impl ArriClientService for TestClientPrefixedTestsService {
+    fn create(config: ArriClientConfig) -> Self {
+        Self {
+            _config: InternalArriClientConfig::from(config),
+        }
+    }
+    fn update_headers(&self, headers: HashMap<&'static str, String>) {
+        let mut unwrapped_headers = self._config.headers.write().unwrap();
+        *unwrapped_headers = headers.clone();
+    }
+}
+
+impl TestClientPrefixedTestsService {
+    pub async fn empty_params_get_request(&self) -> Result<FooDefaultPayload, ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/empty-params-get-request",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::GET,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            None::<EmptyArriModel>,
+            |body| return FooDefaultPayload::from_json_string(body),
+        )
+        .await
+    }
+    pub async fn empty_params_post_request(&self) -> Result<FooDefaultPayload, ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/empty-params-post-request",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            None::<EmptyArriModel>,
+            |body| return FooDefaultPayload::from_json_string(body),
+        )
+        .await
+    }
+    pub async fn empty_response_get_request(
+        &self,
+        params: FooDefaultPayload,
+    ) -> Result<(), ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/empty-response-get-request",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::GET,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| {},
+        )
+        .await
+    }
+    pub async fn empty_response_post_request(
+        &self,
+        params: FooDefaultPayload,
+    ) -> Result<(), ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/empty-response-post-request",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| {},
+        )
+        .await
+    }
+    /// If the target language supports it. Generated code should mark this procedure as deprecated.
+    #[deprecated]
+    pub async fn deprecated_rpc(&self, params: FooDeprecatedRpcParams) -> Result<(), ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!("{}/rpcs/tests/deprecated-rpc", &self._config.base_url),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| {},
+        )
+        .await
+    }
+    pub async fn send_error(&self, params: FooSendErrorParams) -> Result<(), ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!("{}/rpcs/tests/send-error", &self._config.base_url),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| {},
+        )
+        .await
+    }
+    pub async fn send_object(
+        &self,
+        params: FooObjectWithEveryType,
+    ) -> Result<FooObjectWithEveryType, ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!("{}/rpcs/tests/send-object", &self._config.base_url),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| return FooObjectWithEveryType::from_json_string(body),
+        )
+        .await
+    }
+    pub async fn send_object_with_nullable_fields(
+        &self,
+        params: FooObjectWithEveryNullableType,
+    ) -> Result<FooObjectWithEveryNullableType, ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/send-object-with-nullable-fields",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| return FooObjectWithEveryNullableType::from_json_string(body),
+        )
+        .await
+    }
+    pub async fn send_object_with_pascal_case_keys(
+        &self,
+        params: FooObjectWithPascalCaseKeys,
+    ) -> Result<FooObjectWithPascalCaseKeys, ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/send-object-with-pascal-case-keys",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| return FooObjectWithPascalCaseKeys::from_json_string(body),
+        )
+        .await
+    }
+    pub async fn send_object_with_snake_case_keys(
+        &self,
+        params: FooObjectWithSnakeCaseKeys,
+    ) -> Result<FooObjectWithSnakeCaseKeys, ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/send-object-with-snake-case-keys",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| return FooObjectWithSnakeCaseKeys::from_json_string(body),
+        )
+        .await
+    }
+    pub async fn send_partial_object(
+        &self,
+        params: FooObjectWithEveryOptionalType,
+    ) -> Result<FooObjectWithEveryOptionalType, ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!("{}/rpcs/tests/send-partial-object", &self._config.base_url),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| return FooObjectWithEveryOptionalType::from_json_string(body),
+        )
+        .await
+    }
+    pub async fn send_recursive_object(
+        &self,
+        params: FooRecursiveObject,
+    ) -> Result<FooRecursiveObject, ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/send-recursive-object",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| return FooRecursiveObject::from_json_string(body),
+        )
+        .await
+    }
+    pub async fn send_recursive_union(
+        &self,
+        params: FooRecursiveUnion,
+    ) -> Result<FooRecursiveUnion, ArriError> {
+        parsed_arri_request(
+            ArriParsedRequestOptions {
+                http_client: &self._config.http_client,
+                url: format!("{}/rpcs/tests/send-recursive-union", &self._config.base_url),
+                method: reqwest::Method::POST,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+            },
+            Some(params),
+            |body| return FooRecursiveUnion::from_json_string(body),
+        )
+        .await
+    }
+    pub async fn stream_auto_reconnect<OnEvent>(
+        &self,
+        params: FooAutoReconnectParams,
+        on_event: &mut OnEvent,
+        max_retry_count: Option<u64>,
+        max_retry_interval: Option<u64>,
+    ) where
+        OnEvent: FnMut(SseEvent<FooAutoReconnectResponse>, &mut SseController)
+            + std::marker::Send
+            + std::marker::Sync,
+    {
+        parsed_arri_sse_request(
+            ArriParsedSseRequestOptions {
+                client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/stream-auto-reconnect",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::GET,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+                max_retry_count,
+                max_retry_interval,
+            },
+            Some(params),
+            on_event,
+        )
+        .await;
+    }
+    /// This route will always return an error. The client should automatically retry with exponential backoff.
+    pub async fn stream_connection_error_test<OnEvent>(
+        &self,
+        params: FooStreamConnectionErrorTestParams,
+        on_event: &mut OnEvent,
+        max_retry_count: Option<u64>,
+        max_retry_interval: Option<u64>,
+    ) where
+        OnEvent: FnMut(SseEvent<FooStreamConnectionErrorTestResponse>, &mut SseController)
+            + std::marker::Send
+            + std::marker::Sync,
+    {
+        parsed_arri_sse_request(
+            ArriParsedSseRequestOptions {
+                client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/stream-connection-error-test",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::GET,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+                max_retry_count,
+                max_retry_interval,
+            },
+            Some(params),
+            on_event,
+        )
+        .await;
+    }
+    /// Test to ensure that the client can handle receiving streams of large objects. When objects are large messages will sometimes get sent in chunks. Meaning you have to handle receiving a partial message
+    pub async fn stream_large_objects<OnEvent>(
+        &self,
+
+        on_event: &mut OnEvent,
+        max_retry_count: Option<u64>,
+        max_retry_interval: Option<u64>,
+    ) where
+        OnEvent: FnMut(SseEvent<FooStreamLargeObjectsResponse>, &mut SseController)
+            + std::marker::Send
+            + std::marker::Sync,
+    {
+        parsed_arri_sse_request(
+            ArriParsedSseRequestOptions {
+                client: &self._config.http_client,
+                url: format!("{}/rpcs/tests/stream-large-objects", &self._config.base_url),
+                method: reqwest::Method::GET,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+                max_retry_count,
+                max_retry_interval,
+            },
+            None::<EmptyArriModel>,
+            on_event,
+        )
+        .await;
+    }
+    pub async fn stream_messages<OnEvent>(
+        &self,
+        params: FooChatMessageParams,
+        on_event: &mut OnEvent,
+        max_retry_count: Option<u64>,
+        max_retry_interval: Option<u64>,
+    ) where
+        OnEvent: FnMut(SseEvent<FooChatMessage>, &mut SseController)
+            + std::marker::Send
+            + std::marker::Sync,
+    {
+        parsed_arri_sse_request(
+            ArriParsedSseRequestOptions {
+                client: &self._config.http_client,
+                url: format!("{}/rpcs/tests/stream-messages", &self._config.base_url),
+                method: reqwest::Method::GET,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+                max_retry_count,
+                max_retry_interval,
+            },
+            Some(params),
+            on_event,
+        )
+        .await;
+    }
+    pub async fn stream_retry_with_new_credentials<OnEvent>(
+        &self,
+
+        on_event: &mut OnEvent,
+        max_retry_count: Option<u64>,
+        max_retry_interval: Option<u64>,
+    ) where
+        OnEvent: FnMut(SseEvent<FooTestsStreamRetryWithNewCredentialsResponse>, &mut SseController)
+            + std::marker::Send
+            + std::marker::Sync,
+    {
+        parsed_arri_sse_request(
+            ArriParsedSseRequestOptions {
+                client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/stream-retry-with-new-credentials",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::GET,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+                max_retry_count,
+                max_retry_interval,
+            },
+            None::<EmptyArriModel>,
+            on_event,
+        )
+        .await;
+    }
+    /// When the client receives the 'done' event, it should close the connection and NOT reconnect
+    pub async fn stream_ten_events_then_end<OnEvent>(
+        &self,
+
+        on_event: &mut OnEvent,
+        max_retry_count: Option<u64>,
+        max_retry_interval: Option<u64>,
+    ) where
+        OnEvent: FnMut(SseEvent<FooChatMessage>, &mut SseController)
+            + std::marker::Send
+            + std::marker::Sync,
+    {
+        parsed_arri_sse_request(
+            ArriParsedSseRequestOptions {
+                client: &self._config.http_client,
+                url: format!(
+                    "{}/rpcs/tests/stream-ten-events-then-end",
+                    &self._config.base_url
+                ),
+                method: reqwest::Method::GET,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+                max_retry_count,
+                max_retry_interval,
+            },
+            None::<EmptyArriModel>,
+            on_event,
+        )
+        .await;
+    }
+}
+
+#[derive(Clone)]
+pub struct TestClientPrefixedUsersService {
+    _config: InternalArriClientConfig,
+}
+
+impl ArriClientService for TestClientPrefixedUsersService {
+    fn create(config: ArriClientConfig) -> Self {
+        Self {
+            _config: InternalArriClientConfig::from(config),
+        }
+    }
+    fn update_headers(&self, headers: HashMap<&'static str, String>) {
+        let mut unwrapped_headers = self._config.headers.write().unwrap();
+        *unwrapped_headers = headers.clone();
+    }
+}
+
+impl TestClientPrefixedUsersService {
+    pub async fn watch_user<OnEvent>(
+        &self,
+        params: FooUsersWatchUserParams,
+        on_event: &mut OnEvent,
+        max_retry_count: Option<u64>,
+        max_retry_interval: Option<u64>,
+    ) where
+        OnEvent: FnMut(SseEvent<FooUsersWatchUserResponse>, &mut SseController)
+            + std::marker::Send
+            + std::marker::Sync,
+    {
+        parsed_arri_sse_request(
+            ArriParsedSseRequestOptions {
+                client: &self._config.http_client,
+                url: format!("{}/rpcs/users/watch-user", &self._config.base_url),
+                method: reqwest::Method::GET,
+                headers: self._config.headers.clone(),
+                client_version: "10".to_string(),
+                max_retry_count,
+                max_retry_interval,
+            },
+            Some(params),
+            on_event,
+        )
+        .await;
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooManuallyAddedModel {
+    pub hello: String,
+}
+
+impl ArriModel for FooManuallyAddedModel {
+    fn new() -> Self {
+        Self {
+            hello: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let hello = match _val_.get("hello") {
+                    Some(serde_json::Value::String(hello_val)) => hello_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { hello }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"hello\":");
+        _json_output_.push_str(serialize_string(&self.hello).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("hello={}", &self.hello));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooDefaultPayload {
+    pub message: String,
+}
+
+impl ArriModel for FooDefaultPayload {
+    fn new() -> Self {
+        Self {
+            message: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let message = match _val_.get("message") {
+                    Some(serde_json::Value::String(message_val)) => message_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { message }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"message\":");
+        _json_output_.push_str(serialize_string(&self.message).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("message={}", &self.message));
+        _query_parts_.join("&")
+    }
+}
+
+#[deprecated]
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooDeprecatedRpcParams {
+    #[deprecated]
+    pub deprecated_field: String,
+}
+
+impl ArriModel for FooDeprecatedRpcParams {
+    fn new() -> Self {
+        Self {
+            deprecated_field: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let deprecated_field = match _val_.get("deprecatedField") {
+                    Some(serde_json::Value::String(deprecated_field_val)) => {
+                        deprecated_field_val.to_owned()
+                    }
+                    _ => "".to_string(),
+                };
+                Self { deprecated_field }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"deprecatedField\":");
+        _json_output_.push_str(serialize_string(&self.deprecated_field).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("deprecatedField={}", &self.deprecated_field));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooSendErrorParams {
+    pub code: u16,
+    pub message: String,
+}
+
+impl ArriModel for FooSendErrorParams {
+    fn new() -> Self {
+        Self {
+            code: 0,
+            message: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let code = match _val_.get("code") {
+                    Some(serde_json::Value::Number(code_val)) => {
+                        u16::try_from(code_val.as_u64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let message = match _val_.get("message") {
+                    Some(serde_json::Value::String(message_val)) => message_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { code, message }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"code\":");
+        _json_output_.push_str(&self.code.to_string().as_str());
+        _json_output_.push_str(",\"message\":");
+        _json_output_.push_str(serialize_string(&self.message).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("code={}", &self.code));
+        _query_parts_.push(format!("message={}", &self.message));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooObjectWithEveryType {
+    pub any: serde_json::Value,
+    pub boolean: bool,
+    pub string: String,
+    pub timestamp: DateTime<FixedOffset>,
+    pub float32: f32,
+    pub float64: f64,
+    pub int8: i8,
+    pub uint8: u8,
+    pub int16: i16,
+    pub uint16: u16,
+    pub int32: i32,
+    pub uint32: u32,
+    pub int64: i64,
+    pub uint64: u64,
+    pub enumerator: FooFooObjectWithEveryTypeEnumerator,
+    pub array: Vec<bool>,
+    pub object: FooFooObjectWithEveryTypeObject,
+    pub record: BTreeMap<String, u64>,
+    pub discriminator: FooFooObjectWithEveryTypeDiscriminator,
+    pub nested_object: FooFooObjectWithEveryTypeNestedObject,
+    pub nested_array: Vec<Vec<FooFooObjectWithEveryTypeNestedArrayElementElement>>,
+}
+
+impl ArriModel for FooObjectWithEveryType {
+    fn new() -> Self {
+        Self {
+            any: serde_json::Value::Null,
+            boolean: false,
+            string: "".to_string(),
+            timestamp: DateTime::default(),
+            float32: 0.0,
+            float64: 0.0,
+            int8: 0,
+            uint8: 0,
+            int16: 0,
+            uint16: 0,
+            int32: 0,
+            uint32: 0,
+            int64: 0,
+            uint64: 0,
+            enumerator: FooFooObjectWithEveryTypeEnumerator::default(),
+            array: Vec::new(),
+            object: FooFooObjectWithEveryTypeObject::new(),
+            record: BTreeMap::new(),
+            discriminator: FooFooObjectWithEveryTypeDiscriminator::new(),
+            nested_object: FooFooObjectWithEveryTypeNestedObject::new(),
+            nested_array: Vec::new(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let any = match _val_.get("any") {
+                    Some(any_val) => any_val.to_owned(),
+                    _ => serde_json::Value::Null,
+                };
+                let boolean = match _val_.get("boolean") {
+                    Some(serde_json::Value::Bool(boolean_val)) => boolean_val.to_owned(),
+                    _ => false,
+                };
+                let string = match _val_.get("string") {
+                    Some(serde_json::Value::String(string_val)) => string_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                let float32 = match _val_.get("float32") {
+                    Some(serde_json::Value::Number(float32_val)) => {
+                        float32_val.as_f64().unwrap_or(0.0) as f32
+                    }
+                    _ => 0.0,
+                };
+                let float64 = match _val_.get("float64") {
+                    Some(serde_json::Value::Number(float64_val)) => {
+                        float64_val.as_f64().unwrap_or(0.0)
+                    }
+                    _ => 0.0,
+                };
+                let int8 = match _val_.get("int8") {
+                    Some(serde_json::Value::Number(int8_val)) => {
+                        i8::try_from(int8_val.as_i64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let uint8 = match _val_.get("uint8") {
+                    Some(serde_json::Value::Number(uint8_val)) => {
+                        u8::try_from(uint8_val.as_u64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let int16 = match _val_.get("int16") {
+                    Some(serde_json::Value::Number(int16_val)) => {
+                        i16::try_from(int16_val.as_i64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let uint16 = match _val_.get("uint16") {
+                    Some(serde_json::Value::Number(uint16_val)) => {
+                        u16::try_from(uint16_val.as_u64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let int32 = match _val_.get("int32") {
+                    Some(serde_json::Value::Number(int32_val)) => {
+                        i32::try_from(int32_val.as_i64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let uint32 = match _val_.get("uint32") {
+                    Some(serde_json::Value::Number(uint32_val)) => {
+                        u32::try_from(uint32_val.as_u64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let int64 = match _val_.get("int64") {
+                    Some(serde_json::Value::String(int64_val)) => {
+                        int64_val.parse::<i64>().unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let uint64 = match _val_.get("uint64") {
+                    Some(serde_json::Value::String(uint64_val)) => {
+                        uint64_val.parse::<u64>().unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let enumerator = match _val_.get("enumerator") {
+                    Some(serde_json::Value::String(enumerator_val)) => {
+                        FooFooObjectWithEveryTypeEnumerator::from_string(enumerator_val.to_owned())
+                    }
+                    _ => FooFooObjectWithEveryTypeEnumerator::default(),
+                };
+                let array = match _val_.get("array") {
+                    Some(serde_json::Value::Array(array_val)) => {
+                        let mut array_val_result: Vec<bool> = Vec::new();
+                        for array_val_element in array_val {
+                            array_val_result.push(match Some(array_val_element) {
+                                Some(serde_json::Value::Bool(array_val_element_val)) => {
+                                    array_val_element_val.to_owned()
+                                }
+                                _ => false,
+                            });
+                        }
+                        array_val_result
+                    }
+                    _ => Vec::new(),
+                };
+                let object = match _val_.get("object") {
+                    Some(object_val) => {
+                        FooFooObjectWithEveryTypeObject::from_json(object_val.to_owned())
+                    }
+                    _ => FooFooObjectWithEveryTypeObject::new(),
+                };
+                let record = match _val_.get("record") {
+                    Some(serde_json::Value::Object(record_val)) => {
+                        let mut record_val_result: BTreeMap<String, u64> = BTreeMap::new();
+                        for (_key_, _value_) in record_val.into_iter() {
+                            record_val_result.insert(
+                                _key_.to_owned(),
+                                match Some(_value_.to_owned()) {
+                                    Some(serde_json::Value::String(value_val)) => {
+                                        value_val.parse::<u64>().unwrap_or(0)
+                                    }
+                                    _ => 0,
+                                },
+                            );
+                        }
+                        record_val_result
+                    }
+                    _ => BTreeMap::new(),
+                };
+                let discriminator = match _val_.get("discriminator") {
+                    Some(discriminator_val) => match discriminator_val {
+                        serde_json::Value::Object(_) => {
+                            FooFooObjectWithEveryTypeDiscriminator::from_json(
+                                discriminator_val.to_owned(),
+                            )
+                        }
+                        _ => FooFooObjectWithEveryTypeDiscriminator::new(),
+                    },
+                    _ => FooFooObjectWithEveryTypeDiscriminator::new(),
+                };
+                let nested_object = match _val_.get("nestedObject") {
+                    Some(nested_object_val) => FooFooObjectWithEveryTypeNestedObject::from_json(
+                        nested_object_val.to_owned(),
+                    ),
+                    _ => FooFooObjectWithEveryTypeNestedObject::new(),
+                };
+                let nested_array = match _val_.get("nestedArray") {
+                    Some(serde_json::Value::Array(nested_array_val)) => {
+                        let mut nested_array_val_result: Vec<
+                            Vec<FooFooObjectWithEveryTypeNestedArrayElementElement>,
+                        > = Vec::new();
+                        for nested_array_val_element in nested_array_val {
+                            nested_array_val_result.push(match Some(nested_array_val_element) {
+                Some(serde_json::Value::Array(nested_array_val_element_val)) => {
+                    let mut nested_array_val_element_val_result: Vec<FooFooObjectWithEveryTypeNestedArrayElementElement> = Vec::new();
+                    for nested_array_val_element_val_element in nested_array_val_element_val {
+                        nested_array_val_element_val_result.push(match Some(nested_array_val_element_val_element) {
+                Some(nested_array_val_element_val_element_val) => FooFooObjectWithEveryTypeNestedArrayElementElement::from_json(nested_array_val_element_val_element_val.to_owned()),
+                _ => FooFooObjectWithEveryTypeNestedArrayElementElement::new(),
+            });
+                    }
+                    nested_array_val_element_val_result
+                }
+                _ => Vec::new(),
+            });
+                        }
+                        nested_array_val_result
+                    }
+                    _ => Vec::new(),
+                };
+                Self {
+                    any,
+                    boolean,
+                    string,
+                    timestamp,
+                    float32,
+                    float64,
+                    int8,
+                    uint8,
+                    int16,
+                    uint16,
+                    int32,
+                    uint32,
+                    int64,
+                    uint64,
+                    enumerator,
+                    array,
+                    object,
+                    record,
+                    discriminator,
+                    nested_object,
+                    nested_array,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"any\":");
+        _json_output_.push_str(
+            serde_json::to_string(&self.any)
+                .unwrap_or("null".to_string())
+                .as_str(),
+        );
+        _json_output_.push_str(",\"boolean\":");
+        _json_output_.push_str(&self.boolean.to_string().as_str());
+        _json_output_.push_str(",\"string\":");
+        _json_output_.push_str(serialize_string(&self.string).as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push_str(",\"float32\":");
+        _json_output_.push_str(&self.float32.to_string().as_str());
+        _json_output_.push_str(",\"float64\":");
+        _json_output_.push_str(&self.float64.to_string().as_str());
+        _json_output_.push_str(",\"int8\":");
+        _json_output_.push_str(&self.int8.to_string().as_str());
+        _json_output_.push_str(",\"uint8\":");
+        _json_output_.push_str(&self.uint8.to_string().as_str());
+        _json_output_.push_str(",\"int16\":");
+        _json_output_.push_str(&self.int16.to_string().as_str());
+        _json_output_.push_str(",\"uint16\":");
+        _json_output_.push_str(&self.uint16.to_string().as_str());
+        _json_output_.push_str(",\"int32\":");
+        _json_output_.push_str(&self.int32.to_string().as_str());
+        _json_output_.push_str(",\"uint32\":");
+        _json_output_.push_str(&self.uint32.to_string().as_str());
+        _json_output_.push_str(",\"int64\":");
+        _json_output_.push_str(format!("\"{}\"", &self.int64).as_str());
+        _json_output_.push_str(",\"uint64\":");
+        _json_output_.push_str(format!("\"{}\"", &self.uint64).as_str());
+        _json_output_.push_str(",\"enumerator\":");
+        _json_output_.push_str(format!("\"{}\"", &self.enumerator.serial_value()).as_str());
+        _json_output_.push_str(",\"array\":");
+        _json_output_.push('[');
+        for (_index_, _element_) in self.array.iter().enumerate() {
+            if _index_ != 0 {
+                _json_output_.push(',');
+            }
+            _json_output_.push_str(_element_.to_string().as_str());
+        }
+        _json_output_.push(']');
+        _json_output_.push_str(",\"object\":");
+        _json_output_.push_str(&self.object.to_json_string().as_str());
+        _json_output_.push_str(",\"record\":");
+        _json_output_.push('{');
+        for (_index_, (_key_, _value_)) in self.record.iter().enumerate() {
+            if _index_ != 0 {
+                _json_output_.push(',');
+            }
+            _json_output_.push_str(format!("{}:", serialize_string(_key_)).as_str());
+            _json_output_.push_str(format!("\"{}\"", _value_).as_str());
+        }
+        _json_output_.push('}');
+        _json_output_.push_str(",\"discriminator\":");
+        _json_output_.push_str(&self.discriminator.to_json_string().as_str());
+        _json_output_.push_str(",\"nestedObject\":");
+        _json_output_.push_str(&self.nested_object.to_json_string().as_str());
+        _json_output_.push_str(",\"nestedArray\":");
+        _json_output_.push('[');
+        for (_index_, _element_) in self.nested_array.iter().enumerate() {
+            if _index_ != 0 {
+                _json_output_.push(',');
+            }
+            _json_output_.push('[');
+            for (_index_, _element_) in _element_.iter().enumerate() {
+                if _index_ != 0 {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str(_element_.to_json_string().as_str());
+            }
+            _json_output_.push(']');
+        }
+        _json_output_.push(']');
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        println!("[WARNING] cannot serialize any's to query params. Skipping field at /FooObjectWithEveryType/any.");
+        _query_parts_.push(format!("boolean={}", &self.boolean));
+        _query_parts_.push(format!("string={}", &self.string));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        _query_parts_.push(format!("float32={}", &self.float32));
+        _query_parts_.push(format!("float64={}", &self.float64));
+        _query_parts_.push(format!("int8={}", &self.int8));
+        _query_parts_.push(format!("uint8={}", &self.uint8));
+        _query_parts_.push(format!("int16={}", &self.int16));
+        _query_parts_.push(format!("uint16={}", &self.uint16));
+        _query_parts_.push(format!("int32={}", &self.int32));
+        _query_parts_.push(format!("uint32={}", &self.uint32));
+        _query_parts_.push(format!("int64={}", &self.int64));
+        _query_parts_.push(format!("uint64={}", &self.uint64));
+        _query_parts_.push(format!("enumerator={}", &self.enumerator.serial_value()));
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooObjectWithEveryType/array.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryType/object.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryType/record.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryType/discriminator.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryType/nestedObject.");
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooObjectWithEveryType/nestedArray.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooFooObjectWithEveryTypeEnumerator {
+    A,
+    B,
+    C,
+}
+
+impl ArriEnum for FooFooObjectWithEveryTypeEnumerator {
+    fn default() -> Self {
+        FooFooObjectWithEveryTypeEnumerator::A
+    }
+    fn from_string(input: String) -> Self {
+        match input.as_str() {
+            "A" => Self::A,
+            "B" => Self::B,
+            "C" => Self::C,
+            _ => Self::default(),
+        }
+    }
+    fn serial_value(&self) -> String {
+        match &self {
+            FooFooObjectWithEveryTypeEnumerator::A => "A".to_string(),
+            FooFooObjectWithEveryTypeEnumerator::B => "B".to_string(),
+            FooFooObjectWithEveryTypeEnumerator::C => "C".to_string(),
+        }
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooObjectWithEveryTypeObject {
+    pub string: String,
+    pub boolean: bool,
+    pub timestamp: DateTime<FixedOffset>,
+}
+
+impl ArriModel for FooFooObjectWithEveryTypeObject {
+    fn new() -> Self {
+        Self {
+            string: "".to_string(),
+            boolean: false,
+            timestamp: DateTime::default(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let string = match _val_.get("string") {
+                    Some(serde_json::Value::String(string_val)) => string_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let boolean = match _val_.get("boolean") {
+                    Some(serde_json::Value::Bool(boolean_val)) => boolean_val.to_owned(),
+                    _ => false,
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                Self {
+                    string,
+                    boolean,
+                    timestamp,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"string\":");
+        _json_output_.push_str(serialize_string(&self.string).as_str());
+        _json_output_.push_str(",\"boolean\":");
+        _json_output_.push_str(&self.boolean.to_string().as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("string={}", &self.string));
+        _query_parts_.push(format!("boolean={}", &self.boolean));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooFooObjectWithEveryTypeDiscriminator {
+    A { title: String },
+    B { title: String, description: String },
+}
+
+impl ArriModel for FooFooObjectWithEveryTypeDiscriminator {
+    fn new() -> Self {
+        Self::A {
+            title: "".to_string(),
+        }
+    }
+
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let r#type = match _val_.get("type") {
+                    Some(serde_json::Value::String(r#type_val)) => r#type_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                match r#type.as_str() {
+                    "A" => {
+                        let title = match _val_.get("title") {
+                            Some(serde_json::Value::String(title_val)) => title_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        Self::A { title }
+                    }
+                    "B" => {
+                        let title = match _val_.get("title") {
+                            Some(serde_json::Value::String(title_val)) => title_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let description = match _val_.get("description") {
+                            Some(serde_json::Value::String(description_val)) => {
+                                description_val.to_owned()
+                            }
+                            _ => "".to_string(),
+                        };
+                        Self::B { title, description }
+                    }
+                    _ => Self::new(),
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+        match &self {
+            Self::A { title } => {
+                _json_output_.push_str("\"type\":\"A\"");
+                _json_output_.push_str(",\"title\":");
+                _json_output_.push_str(serialize_string(title).as_str());
+            }
+            Self::B { title, description } => {
+                _json_output_.push_str("\"type\":\"B\"");
+                _json_output_.push_str(",\"title\":");
+                _json_output_.push_str(serialize_string(title).as_str());
+                _json_output_.push_str(",\"description\":");
+                _json_output_.push_str(serialize_string(description).as_str());
+            }
+        }
+        _json_output_.push('}');
+        _json_output_
+    }
+
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self {
+            Self::A { title } => {
+                _query_parts_.push(format!("type=A"));
+                _query_parts_.push(format!("title={}", title));
+            }
+            Self::B { title, description } => {
+                _query_parts_.push(format!("type=B"));
+                _query_parts_.push(format!("title={}", title));
+                _query_parts_.push(format!("description={}", description));
+            }
+        }
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooObjectWithEveryTypeNestedObject {
+    pub id: String,
+    pub timestamp: DateTime<FixedOffset>,
+    pub data: FooFooFooObjectWithEveryTypeNestedObjectData,
+}
+
+impl ArriModel for FooFooObjectWithEveryTypeNestedObject {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            timestamp: DateTime::default(),
+            data: FooFooFooObjectWithEveryTypeNestedObjectData::new(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                let data = match _val_.get("data") {
+                    Some(data_val) => {
+                        FooFooFooObjectWithEveryTypeNestedObjectData::from_json(data_val.to_owned())
+                    }
+                    _ => FooFooFooObjectWithEveryTypeNestedObjectData::new(),
+                };
+                Self {
+                    id,
+                    timestamp,
+                    data,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push_str(",\"data\":");
+        _json_output_.push_str(&self.data.to_json_string().as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooFooObjectWithEveryTypeNestedObject/data.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooFooObjectWithEveryTypeNestedObjectData {
+    pub id: String,
+    pub timestamp: DateTime<FixedOffset>,
+    pub data: FooFooFooFooObjectWithEveryTypeNestedObjectDataData,
+}
+
+impl ArriModel for FooFooFooObjectWithEveryTypeNestedObjectData {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            timestamp: DateTime::default(),
+            data: FooFooFooFooObjectWithEveryTypeNestedObjectDataData::new(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                let data = match _val_.get("data") {
+                    Some(data_val) => {
+                        FooFooFooFooObjectWithEveryTypeNestedObjectDataData::from_json(
+                            data_val.to_owned(),
+                        )
+                    }
+                    _ => FooFooFooFooObjectWithEveryTypeNestedObjectDataData::new(),
+                };
+                Self {
+                    id,
+                    timestamp,
+                    data,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push_str(",\"data\":");
+        _json_output_.push_str(&self.data.to_json_string().as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooFooFooObjectWithEveryTypeNestedObjectData/data.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooFooFooObjectWithEveryTypeNestedObjectDataData {
+    pub id: String,
+    pub timestamp: DateTime<FixedOffset>,
+}
+
+impl ArriModel for FooFooFooFooObjectWithEveryTypeNestedObjectDataData {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            timestamp: DateTime::default(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                Self { id, timestamp }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooObjectWithEveryTypeNestedArrayElementElement {
+    pub id: String,
+    pub timestamp: DateTime<FixedOffset>,
+}
+
+impl ArriModel for FooFooObjectWithEveryTypeNestedArrayElementElement {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            timestamp: DateTime::default(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                Self { id, timestamp }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooObjectWithEveryNullableType {
+    pub any: serde_json::Value,
+    pub boolean: Option<bool>,
+    pub string: Option<String>,
+    pub timestamp: Option<DateTime<FixedOffset>>,
+    pub float32: Option<f32>,
+    pub float64: Option<f64>,
+    pub int8: Option<i8>,
+    pub uint8: Option<u8>,
+    pub int16: Option<i16>,
+    pub uint16: Option<u16>,
+    pub int32: Option<i32>,
+    pub uint32: Option<u32>,
+    pub int64: Option<i64>,
+    pub uint64: Option<u64>,
+    pub enumerator: Option<FooFooObjectWithEveryNullableTypeEnumerator>,
+    pub array: Option<Vec<Option<bool>>>,
+    pub object: Option<FooFooObjectWithEveryNullableTypeObject>,
+    pub record: Option<BTreeMap<String, Option<u64>>>,
+    pub discriminator: Option<FooFooObjectWithEveryNullableTypeDiscriminator>,
+    pub nested_object: Option<FooFooObjectWithEveryNullableTypeNestedObject>,
+    pub nested_array: Option<
+        Vec<Option<Vec<Option<FooFooObjectWithEveryNullableTypeNestedArrayElementElement>>>>,
+    >,
+}
+
+impl ArriModel for FooObjectWithEveryNullableType {
+    fn new() -> Self {
+        Self {
+            any: serde_json::Value::Null,
+            boolean: None,
+            string: None,
+            timestamp: None,
+            float32: None,
+            float64: None,
+            int8: None,
+            uint8: None,
+            int16: None,
+            uint16: None,
+            int32: None,
+            uint32: None,
+            int64: None,
+            uint64: None,
+            enumerator: None,
+            array: None,
+            object: None,
+            record: None,
+            discriminator: None,
+            nested_object: None,
+            nested_array: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let any = match _val_.get("any") {
+                    Some(any_val) => any_val.to_owned(),
+                    _ => serde_json::Value::Null,
+                };
+                let boolean = match _val_.get("boolean") {
+                    Some(serde_json::Value::Bool(boolean_val)) => Some(boolean_val.to_owned()),
+                    _ => None,
+                };
+                let string = match _val_.get("string") {
+                    Some(serde_json::Value::String(string_val)) => Some(string_val.to_owned()),
+                    _ => None,
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        match DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val) {
+                            Ok(timestamp_val_result) => Some(timestamp_val_result),
+                            Err(_) => None,
+                        }
+                    }
+                    _ => None,
+                };
+                let float32 = match _val_.get("float32") {
+                    Some(serde_json::Value::Number(float32_val)) => match float32_val.as_f64() {
+                        Some(float32_val_result) => Some(float32_val_result as f32),
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let float64 = match _val_.get("float64") {
+                    Some(serde_json::Value::Number(float64_val)) => match float64_val.as_f64() {
+                        Some(float64_val_result) => Some(float64_val_result),
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let int8 = match _val_.get("int8") {
+                    Some(serde_json::Value::Number(int8_val)) => match int8_val.as_i64() {
+                        Some(int8_val_result) => match i8::try_from(int8_val_result) {
+                            Ok(int8_val_result_val) => Some(int8_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let uint8 = match _val_.get("uint8") {
+                    Some(serde_json::Value::Number(uint8_val)) => match uint8_val.as_u64() {
+                        Some(uint8_val_result) => match u8::try_from(uint8_val_result) {
+                            Ok(uint8_val_result_val) => Some(uint8_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let int16 = match _val_.get("int16") {
+                    Some(serde_json::Value::Number(int16_val)) => match int16_val.as_i64() {
+                        Some(int16_val_result) => match i16::try_from(int16_val_result) {
+                            Ok(int16_val_result_val) => Some(int16_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let uint16 = match _val_.get("uint16") {
+                    Some(serde_json::Value::Number(uint16_val)) => match uint16_val.as_u64() {
+                        Some(uint16_val_result) => match u16::try_from(uint16_val_result) {
+                            Ok(uint16_val_result_val) => Some(uint16_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let int32 = match _val_.get("int32") {
+                    Some(serde_json::Value::Number(int32_val)) => match int32_val.as_i64() {
+                        Some(int32_val_result) => match i32::try_from(int32_val_result) {
+                            Ok(int32_val_result_val) => Some(int32_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let uint32 = match _val_.get("uint32") {
+                    Some(serde_json::Value::Number(uint32_val)) => match uint32_val.as_u64() {
+                        Some(uint32_val_result) => match u32::try_from(uint32_val_result) {
+                            Ok(uint32_val_result_val) => Some(uint32_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let int64 = match _val_.get("int64") {
+                    Some(serde_json::Value::String(int64_val)) => match int64_val.parse::<i64>() {
+                        Ok(int64_val_result) => Some(int64_val_result),
+                        Err(_) => None,
+                    },
+                    _ => None,
+                };
+                let uint64 = match _val_.get("uint64") {
+                    Some(serde_json::Value::String(uint64_val)) => {
+                        match uint64_val.parse::<u64>() {
+                            Ok(uint64_val_result) => Some(uint64_val_result),
+                            Err(_) => None,
+                        }
+                    }
+                    _ => None,
+                };
+                let enumerator = match _val_.get("enumerator") {
+                    Some(serde_json::Value::String(enumerator_val)) => {
+                        Some(FooFooObjectWithEveryNullableTypeEnumerator::from_string(
+                            enumerator_val.to_owned(),
+                        ))
+                    }
+                    _ => None,
+                };
+                let array = match _val_.get("array") {
+                    Some(serde_json::Value::Array(array_val)) => {
+                        let mut array_val_result: Vec<Option<bool>> = Vec::new();
+                        for array_val_element in array_val {
+                            array_val_result.push(match Some(array_val_element) {
+                                Some(serde_json::Value::Bool(array_val_element_val)) => {
+                                    Some(array_val_element_val.to_owned())
+                                }
+                                _ => None,
+                            });
+                        }
+                        Some(array_val_result)
+                    }
+                    _ => None,
+                };
+                let object = match _val_.get("object") {
+                    Some(object_val) => match object_val {
+                        serde_json::Value::Object(_) => {
+                            Some(FooFooObjectWithEveryNullableTypeObject::from_json(
+                                object_val.to_owned(),
+                            ))
+                        }
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let record = match _val_.get("record") {
+                    Some(serde_json::Value::Object(record_val)) => {
+                        let mut record_val_result: BTreeMap<String, Option<u64>> = BTreeMap::new();
+                        for (_key_, _value_) in record_val.into_iter() {
+                            record_val_result.insert(
+                                _key_.to_owned(),
+                                match Some(_value_.to_owned()) {
+                                    Some(serde_json::Value::String(value_val)) => {
+                                        match value_val.parse::<u64>() {
+                                            Ok(value_val_result) => Some(value_val_result),
+                                            Err(_) => None,
+                                        }
+                                    }
+                                    _ => None,
+                                },
+                            );
+                        }
+                        Some(record_val_result)
+                    }
+                    _ => None,
+                };
+                let discriminator = match _val_.get("discriminator") {
+                    Some(discriminator_val) => match discriminator_val {
+                        serde_json::Value::Object(_) => {
+                            Some(FooFooObjectWithEveryNullableTypeDiscriminator::from_json(
+                                discriminator_val.to_owned(),
+                            ))
+                        }
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let nested_object = match _val_.get("nestedObject") {
+                    Some(nested_object_val) => match nested_object_val {
+                        serde_json::Value::Object(_) => {
+                            Some(FooFooObjectWithEveryNullableTypeNestedObject::from_json(
+                                nested_object_val.to_owned(),
+                            ))
+                        }
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let nested_array = match _val_.get("nestedArray") {
+                    Some(serde_json::Value::Array(nested_array_val)) => {
+                        let mut nested_array_val_result: Vec<
+                            Option<
+                                Vec<
+                                    Option<
+                                        FooFooObjectWithEveryNullableTypeNestedArrayElementElement,
+                                    >,
+                                >,
+                            >,
+                        > = Vec::new();
+                        for nested_array_val_element in nested_array_val {
+                            nested_array_val_result.push(match Some(nested_array_val_element) {
+                    Some(serde_json::Value::Array(nested_array_val_element_val)) => {
+                        let mut nested_array_val_element_val_result: Vec<Option<FooFooObjectWithEveryNullableTypeNestedArrayElementElement>> = Vec::new();
+                        for nested_array_val_element_val_element in nested_array_val_element_val {
+                            nested_array_val_element_val_result.push(match Some(nested_array_val_element_val_element) {
+                    Some(nested_array_val_element_val_element_val) => match nested_array_val_element_val_element_val {
+                        serde_json::Value::Object(_) => {
+                            Some(FooFooObjectWithEveryNullableTypeNestedArrayElementElement::from_json(nested_array_val_element_val_element_val.to_owned()))
+                        }
+                        _ => None,
+                    },
+                    _ => None,
+                });
+                        }
+                        Some(nested_array_val_element_val_result)
+                    }
+                    _ => None,
+                });
+                        }
+                        Some(nested_array_val_result)
+                    }
+                    _ => None,
+                };
+                Self {
+                    any,
+                    boolean,
+                    string,
+                    timestamp,
+                    float32,
+                    float64,
+                    int8,
+                    uint8,
+                    int16,
+                    uint16,
+                    int32,
+                    uint32,
+                    int64,
+                    uint64,
+                    enumerator,
+                    array,
+                    object,
+                    record,
+                    discriminator,
+                    nested_object,
+                    nested_array,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"any\":");
+        _json_output_.push_str(
+            serde_json::to_string(&self.any)
+                .unwrap_or("null".to_string())
+                .as_str(),
+        );
+        _json_output_.push_str(",\"boolean\":");
+        match &self.boolean {
+            Some(boolean_val) => {
+                _json_output_.push_str(boolean_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"string\":");
+        match &self.string {
+            Some(string_val) => {
+                _json_output_.push_str(serialize_string(string_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"timestamp\":");
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _json_output_.push_str(serialize_date_time(timestamp_val, true).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"float32\":");
+        match &self.float32 {
+            Some(float32_val) => {
+                _json_output_.push_str(float32_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"float64\":");
+        match &self.float64 {
+            Some(float64_val) => {
+                _json_output_.push_str(float64_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"int8\":");
+        match &self.int8 {
+            Some(int8_val) => {
+                _json_output_.push_str(int8_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"uint8\":");
+        match &self.uint8 {
+            Some(uint8_val) => {
+                _json_output_.push_str(uint8_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"int16\":");
+        match &self.int16 {
+            Some(int16_val) => {
+                _json_output_.push_str(int16_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"uint16\":");
+        match &self.uint16 {
+            Some(uint16_val) => {
+                _json_output_.push_str(uint16_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"int32\":");
+        match &self.int32 {
+            Some(int32_val) => {
+                _json_output_.push_str(int32_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"uint32\":");
+        match &self.uint32 {
+            Some(uint32_val) => {
+                _json_output_.push_str(uint32_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"int64\":");
+        match &self.int64 {
+            Some(int64_val) => {
+                _json_output_.push_str(format!("\"{}\"", int64_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"uint64\":");
+        match &self.uint64 {
+            Some(uint64_val) => {
+                _json_output_.push_str(format!("\"{}\"", uint64_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"enumerator\":");
+        match &self.enumerator {
+            Some(enumerator_val) => {
+                _json_output_.push_str(format!("\"{}\"", enumerator_val.serial_value()).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"array\":");
+        match &self.array {
+            Some(array_val) => {
+                _json_output_.push('[');
+                for (_index_, _element_) in array_val.iter().enumerate() {
+                    if _index_ != 0 {
+                        _json_output_.push(',');
+                    }
+                    match _element_ {
+                        Some(_element_val_) => {
+                            _json_output_.push_str(_element_val_.to_string().as_str());
+                        }
+                        _ => {
+                            _json_output_.push_str("null");
+                        }
+                    };
+                }
+                _json_output_.push(']');
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"object\":");
+        match &self.object {
+            Some(object_val) => {
+                _json_output_.push_str(object_val.to_json_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"record\":");
+        match &self.record {
+            Some(record_val) => {
+                _json_output_.push('{');
+                for (_index_, (_key_, _value_)) in record_val.iter().enumerate() {
+                    if _index_ != 0 {
+                        _json_output_.push(',');
+                    }
+                    _json_output_.push_str(format!("{}:", serialize_string(_key_)).as_str());
+                    match _value_ {
+                        Some(value_val) => {
+                            _json_output_.push_str(format!("\"{}\"", value_val).as_str());
+                        }
+                        _ => {
+                            _json_output_.push_str("null");
+                        }
+                    }
+                }
+                _json_output_.push('}');
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"discriminator\":");
+        match &self.discriminator {
+            Some(discriminator_val) => {
+                _json_output_.push_str(discriminator_val.to_json_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"nestedObject\":");
+        match &self.nested_object {
+            Some(nested_object_val) => {
+                _json_output_.push_str(nested_object_val.to_json_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"nestedArray\":");
+        match &self.nested_array {
+            Some(nested_array_val) => {
+                _json_output_.push('[');
+                for (_index_, _element_) in nested_array_val.iter().enumerate() {
+                    if _index_ != 0 {
+                        _json_output_.push(',');
+                    }
+                    match _element_ {
+                        Some(_element_val_) => {
+                            _json_output_.push('[');
+                            for (_index_, _element_) in _element_val_.iter().enumerate() {
+                                if _index_ != 0 {
+                                    _json_output_.push(',');
+                                }
+                                match _element_ {
+                                    Some(_element_val_) => {
+                                        _json_output_
+                                            .push_str(_element_val_.to_json_string().as_str());
+                                    }
+                                    _ => {
+                                        _json_output_.push_str("null");
+                                    }
+                                };
+                            }
+                            _json_output_.push(']');
+                        }
+                        _ => {
+                            _json_output_.push_str("null");
+                        }
+                    };
+                }
+                _json_output_.push(']');
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        println!("[WARNING] cannot serialize any's to query params. Skipping field at /FooObjectWithEveryNullableType/any.");
+        match &self.boolean {
+            Some(boolean_val) => {
+                _query_parts_.push(format!("boolean={}", boolean_val));
+            }
+            _ => {
+                _query_parts_.push("boolean=null".to_string());
+            }
+        };
+        match &self.string {
+            Some(string_val) => {
+                _query_parts_.push(format!("string={}", string_val));
+            }
+            _ => {
+                _query_parts_.push("string=null".to_string());
+            }
+        };
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _query_parts_.push(format!(
+                    "timestamp={}",
+                    serialize_date_time(timestamp_val, false)
+                ));
+            }
+            _ => {
+                _query_parts_.push("timestamp=null".to_string());
+            }
+        };
+        match &self.float32 {
+            Some(float32_val) => {
+                _query_parts_.push(format!("float32={}", float32_val));
+            }
+            _ => {
+                _query_parts_.push("float32=null".to_string());
+            }
+        };
+        match &self.float64 {
+            Some(float64_val) => {
+                _query_parts_.push(format!("float64={}", float64_val));
+            }
+            _ => {
+                _query_parts_.push("float64=null".to_string());
+            }
+        };
+        match &self.int8 {
+            Some(int8_val) => {
+                _query_parts_.push(format!("int8={}", int8_val));
+            }
+            _ => {
+                _query_parts_.push("int8=null".to_string());
+            }
+        };
+        match &self.uint8 {
+            Some(uint8_val) => {
+                _query_parts_.push(format!("uint8={}", uint8_val));
+            }
+            _ => {
+                _query_parts_.push("uint8=null".to_string());
+            }
+        };
+        match &self.int16 {
+            Some(int16_val) => {
+                _query_parts_.push(format!("int16={}", int16_val));
+            }
+            _ => {
+                _query_parts_.push("int16=null".to_string());
+            }
+        };
+        match &self.uint16 {
+            Some(uint16_val) => {
+                _query_parts_.push(format!("uint16={}", uint16_val));
+            }
+            _ => {
+                _query_parts_.push("uint16=null".to_string());
+            }
+        };
+        match &self.int32 {
+            Some(int32_val) => {
+                _query_parts_.push(format!("int32={}", int32_val));
+            }
+            _ => {
+                _query_parts_.push("int32=null".to_string());
+            }
+        };
+        match &self.uint32 {
+            Some(uint32_val) => {
+                _query_parts_.push(format!("uint32={}", uint32_val));
+            }
+            _ => {
+                _query_parts_.push("uint32=null".to_string());
+            }
+        };
+        match &self.int64 {
+            Some(int64_val) => {
+                _query_parts_.push(format!("int64={}", int64_val));
+            }
+            _ => {
+                _query_parts_.push("int64=null".to_string());
+            }
+        };
+        match &self.uint64 {
+            Some(uint64_val) => {
+                _query_parts_.push(format!("uint64={}", uint64_val));
+            }
+            _ => {
+                _query_parts_.push("uint64=null".to_string());
+            }
+        };
+        match &self.enumerator {
+            Some(enumerator_val) => {
+                _query_parts_.push(format!("enumerator={}", enumerator_val.serial_value()));
+            }
+            _ => {
+                _query_parts_.push("enumerator=null".to_string());
+            }
+        };
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooObjectWithEveryNullableType/array.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryNullableType/object.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryNullableType/record.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryNullableType/discriminator.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryNullableType/nestedObject.");
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooObjectWithEveryNullableType/nestedArray.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooFooObjectWithEveryNullableTypeEnumerator {
+    A,
+    B,
+    C,
+}
+
+impl ArriEnum for FooFooObjectWithEveryNullableTypeEnumerator {
+    fn default() -> Self {
+        FooFooObjectWithEveryNullableTypeEnumerator::A
+    }
+    fn from_string(input: String) -> Self {
+        match input.as_str() {
+            "A" => Self::A,
+            "B" => Self::B,
+            "C" => Self::C,
+            _ => Self::default(),
+        }
+    }
+    fn serial_value(&self) -> String {
+        match &self {
+            FooFooObjectWithEveryNullableTypeEnumerator::A => "A".to_string(),
+            FooFooObjectWithEveryNullableTypeEnumerator::B => "B".to_string(),
+            FooFooObjectWithEveryNullableTypeEnumerator::C => "C".to_string(),
+        }
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooObjectWithEveryNullableTypeObject {
+    pub string: Option<String>,
+    pub boolean: Option<bool>,
+    pub timestamp: Option<DateTime<FixedOffset>>,
+}
+
+impl ArriModel for FooFooObjectWithEveryNullableTypeObject {
+    fn new() -> Self {
+        Self {
+            string: None,
+            boolean: None,
+            timestamp: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let string = match _val_.get("string") {
+                    Some(serde_json::Value::String(string_val)) => Some(string_val.to_owned()),
+                    _ => None,
+                };
+                let boolean = match _val_.get("boolean") {
+                    Some(serde_json::Value::Bool(boolean_val)) => Some(boolean_val.to_owned()),
+                    _ => None,
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        match DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val) {
+                            Ok(timestamp_val_result) => Some(timestamp_val_result),
+                            Err(_) => None,
+                        }
+                    }
+                    _ => None,
+                };
+                Self {
+                    string,
+                    boolean,
+                    timestamp,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"string\":");
+        match &self.string {
+            Some(string_val) => {
+                _json_output_.push_str(serialize_string(string_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"boolean\":");
+        match &self.boolean {
+            Some(boolean_val) => {
+                _json_output_.push_str(boolean_val.to_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"timestamp\":");
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _json_output_.push_str(serialize_date_time(timestamp_val, true).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self.string {
+            Some(string_val) => {
+                _query_parts_.push(format!("string={}", string_val));
+            }
+            _ => {
+                _query_parts_.push("string=null".to_string());
+            }
+        };
+        match &self.boolean {
+            Some(boolean_val) => {
+                _query_parts_.push(format!("boolean={}", boolean_val));
+            }
+            _ => {
+                _query_parts_.push("boolean=null".to_string());
+            }
+        };
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _query_parts_.push(format!(
+                    "timestamp={}",
+                    serialize_date_time(timestamp_val, false)
+                ));
+            }
+            _ => {
+                _query_parts_.push("timestamp=null".to_string());
+            }
+        };
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooFooObjectWithEveryNullableTypeDiscriminator {
+    A {
+        title: Option<String>,
+    },
+    B {
+        title: Option<String>,
+        description: Option<String>,
+    },
+}
+
+impl ArriModel for FooFooObjectWithEveryNullableTypeDiscriminator {
+    fn new() -> Self {
+        Self::A { title: None }
+    }
+
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let r#type = match _val_.get("type") {
+                    Some(serde_json::Value::String(r#type_val)) => r#type_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                match r#type.as_str() {
+                    "A" => {
+                        let title = match _val_.get("title") {
+                            Some(serde_json::Value::String(title_val)) => {
+                                Some(title_val.to_owned())
+                            }
+                            _ => None,
+                        };
+                        Self::A { title }
+                    }
+                    "B" => {
+                        let title = match _val_.get("title") {
+                            Some(serde_json::Value::String(title_val)) => {
+                                Some(title_val.to_owned())
+                            }
+                            _ => None,
+                        };
+                        let description = match _val_.get("description") {
+                            Some(serde_json::Value::String(description_val)) => {
+                                Some(description_val.to_owned())
+                            }
+                            _ => None,
+                        };
+                        Self::B { title, description }
+                    }
+                    _ => Self::new(),
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+        match &self {
+            Self::A { title } => {
+                _json_output_.push_str("\"type\":\"A\"");
+                _json_output_.push_str(",\"title\":");
+                match title {
+                    Some(title_val) => {
+                        _json_output_.push_str(serialize_string(title_val).as_str());
+                    }
+                    _ => {
+                        _json_output_.push_str("null");
+                    }
+                };
+            }
+            Self::B { title, description } => {
+                _json_output_.push_str("\"type\":\"B\"");
+                _json_output_.push_str(",\"title\":");
+                match title {
+                    Some(title_val) => {
+                        _json_output_.push_str(serialize_string(title_val).as_str());
+                    }
+                    _ => {
+                        _json_output_.push_str("null");
+                    }
+                };
+                _json_output_.push_str(",\"description\":");
+                match description {
+                    Some(description_val) => {
+                        _json_output_.push_str(serialize_string(description_val).as_str());
+                    }
+                    _ => {
+                        _json_output_.push_str("null");
+                    }
+                };
+            }
+        }
+        _json_output_.push('}');
+        _json_output_
+    }
+
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self {
+            Self::A { title } => {
+                _query_parts_.push(format!("type=A"));
+                match title {
+                    Some(title_val) => {
+                        _query_parts_.push(format!("title={}", title_val));
+                    }
+                    _ => {
+                        _query_parts_.push("title=null".to_string());
+                    }
+                };
+            }
+            Self::B { title, description } => {
+                _query_parts_.push(format!("type=B"));
+                match title {
+                    Some(title_val) => {
+                        _query_parts_.push(format!("title={}", title_val));
+                    }
+                    _ => {
+                        _query_parts_.push("title=null".to_string());
+                    }
+                };
+                match description {
+                    Some(description_val) => {
+                        _query_parts_.push(format!("description={}", description_val));
+                    }
+                    _ => {
+                        _query_parts_.push("description=null".to_string());
+                    }
+                };
+            }
+        }
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooObjectWithEveryNullableTypeNestedObject {
+    pub id: Option<String>,
+    pub timestamp: Option<DateTime<FixedOffset>>,
+    pub data: Option<FooFooFooObjectWithEveryNullableTypeNestedObjectData>,
+}
+
+impl ArriModel for FooFooObjectWithEveryNullableTypeNestedObject {
+    fn new() -> Self {
+        Self {
+            id: None,
+            timestamp: None,
+            data: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => Some(id_val.to_owned()),
+                    _ => None,
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        match DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val) {
+                            Ok(timestamp_val_result) => Some(timestamp_val_result),
+                            Err(_) => None,
+                        }
+                    }
+                    _ => None,
+                };
+                let data = match _val_.get("data") {
+                    Some(data_val) => match data_val {
+                        serde_json::Value::Object(_) => Some(
+                            FooFooFooObjectWithEveryNullableTypeNestedObjectData::from_json(
+                                data_val.to_owned(),
+                            ),
+                        ),
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                Self {
+                    id,
+                    timestamp,
+                    data,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        match &self.id {
+            Some(id_val) => {
+                _json_output_.push_str(serialize_string(id_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"timestamp\":");
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _json_output_.push_str(serialize_date_time(timestamp_val, true).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"data\":");
+        match &self.data {
+            Some(data_val) => {
+                _json_output_.push_str(data_val.to_json_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self.id {
+            Some(id_val) => {
+                _query_parts_.push(format!("id={}", id_val));
+            }
+            _ => {
+                _query_parts_.push("id=null".to_string());
+            }
+        };
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _query_parts_.push(format!(
+                    "timestamp={}",
+                    serialize_date_time(timestamp_val, false)
+                ));
+            }
+            _ => {
+                _query_parts_.push("timestamp=null".to_string());
+            }
+        };
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooFooObjectWithEveryNullableTypeNestedObject/data.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooFooObjectWithEveryNullableTypeNestedObjectData {
+    pub id: Option<String>,
+    pub timestamp: Option<DateTime<FixedOffset>>,
+    pub data: Option<FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData>,
+}
+
+impl ArriModel for FooFooFooObjectWithEveryNullableTypeNestedObjectData {
+    fn new() -> Self {
+        Self {
+            id: None,
+            timestamp: None,
+            data: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => Some(id_val.to_owned()),
+                    _ => None,
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        match DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val) {
+                            Ok(timestamp_val_result) => Some(timestamp_val_result),
+                            Err(_) => None,
+                        }
+                    }
+                    _ => None,
+                };
+                let data = match _val_.get("data") {
+                    Some(data_val) => match data_val {
+                        serde_json::Value::Object(_) => Some(
+                            FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData::from_json(
+                                data_val.to_owned(),
+                            ),
+                        ),
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                Self {
+                    id,
+                    timestamp,
+                    data,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        match &self.id {
+            Some(id_val) => {
+                _json_output_.push_str(serialize_string(id_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"timestamp\":");
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _json_output_.push_str(serialize_date_time(timestamp_val, true).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"data\":");
+        match &self.data {
+            Some(data_val) => {
+                _json_output_.push_str(data_val.to_json_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self.id {
+            Some(id_val) => {
+                _query_parts_.push(format!("id={}", id_val));
+            }
+            _ => {
+                _query_parts_.push("id=null".to_string());
+            }
+        };
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _query_parts_.push(format!(
+                    "timestamp={}",
+                    serialize_date_time(timestamp_val, false)
+                ));
+            }
+            _ => {
+                _query_parts_.push("timestamp=null".to_string());
+            }
+        };
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooFooFooObjectWithEveryNullableTypeNestedObjectData/data.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData {
+    pub id: Option<String>,
+    pub timestamp: Option<DateTime<FixedOffset>>,
+}
+
+impl ArriModel for FooFooFooFooObjectWithEveryNullableTypeNestedObjectDataData {
+    fn new() -> Self {
+        Self {
+            id: None,
+            timestamp: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => Some(id_val.to_owned()),
+                    _ => None,
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        match DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val) {
+                            Ok(timestamp_val_result) => Some(timestamp_val_result),
+                            Err(_) => None,
+                        }
+                    }
+                    _ => None,
+                };
+                Self { id, timestamp }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        match &self.id {
+            Some(id_val) => {
+                _json_output_.push_str(serialize_string(id_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"timestamp\":");
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _json_output_.push_str(serialize_date_time(timestamp_val, true).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self.id {
+            Some(id_val) => {
+                _query_parts_.push(format!("id={}", id_val));
+            }
+            _ => {
+                _query_parts_.push("id=null".to_string());
+            }
+        };
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _query_parts_.push(format!(
+                    "timestamp={}",
+                    serialize_date_time(timestamp_val, false)
+                ));
+            }
+            _ => {
+                _query_parts_.push("timestamp=null".to_string());
+            }
+        };
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooObjectWithEveryNullableTypeNestedArrayElementElement {
+    pub id: Option<String>,
+    pub timestamp: Option<DateTime<FixedOffset>>,
+}
+
+impl ArriModel for FooFooObjectWithEveryNullableTypeNestedArrayElementElement {
+    fn new() -> Self {
+        Self {
+            id: None,
+            timestamp: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => Some(id_val.to_owned()),
+                    _ => None,
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        match DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val) {
+                            Ok(timestamp_val_result) => Some(timestamp_val_result),
+                            Err(_) => None,
+                        }
+                    }
+                    _ => None,
+                };
+                Self { id, timestamp }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        match &self.id {
+            Some(id_val) => {
+                _json_output_.push_str(serialize_string(id_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"timestamp\":");
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _json_output_.push_str(serialize_date_time(timestamp_val, true).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self.id {
+            Some(id_val) => {
+                _query_parts_.push(format!("id={}", id_val));
+            }
+            _ => {
+                _query_parts_.push("id=null".to_string());
+            }
+        };
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _query_parts_.push(format!(
+                    "timestamp={}",
+                    serialize_date_time(timestamp_val, false)
+                ));
+            }
+            _ => {
+                _query_parts_.push("timestamp=null".to_string());
+            }
+        };
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooObjectWithPascalCaseKeys {
+    pub created_at: DateTime<FixedOffset>,
+    pub display_name: String,
+    pub phone_number: Option<String>,
+    pub email_address: Option<String>,
+    pub is_admin: Option<bool>,
+}
+
+impl ArriModel for FooObjectWithPascalCaseKeys {
+    fn new() -> Self {
+        Self {
+            created_at: DateTime::default(),
+            display_name: "".to_string(),
+            phone_number: None,
+            email_address: None,
+            is_admin: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let created_at = match _val_.get("CreatedAt") {
+                    Some(serde_json::Value::String(created_at_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(created_at_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                let display_name = match _val_.get("DisplayName") {
+                    Some(serde_json::Value::String(display_name_val)) => {
+                        display_name_val.to_owned()
+                    }
+                    _ => "".to_string(),
+                };
+                let phone_number = match _val_.get("PhoneNumber") {
+                    Some(serde_json::Value::String(phone_number_val)) => {
+                        Some(phone_number_val.to_owned())
+                    }
+                    _ => None,
+                };
+                let email_address = match _val_.get("EmailAddress") {
+                    Some(serde_json::Value::String(email_address_val)) => {
+                        Some(email_address_val.to_owned())
+                    }
+                    _ => None,
+                };
+                let is_admin = match _val_.get("IsAdmin") {
+                    Some(serde_json::Value::Bool(is_admin_val)) => Some(is_admin_val.to_owned()),
+                    _ => None,
+                };
+                Self {
+                    created_at,
+                    display_name,
+                    phone_number,
+                    email_address,
+                    is_admin,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"CreatedAt\":");
+        _json_output_.push_str(serialize_date_time(&self.created_at, true).as_str());
+        _json_output_.push_str(",\"DisplayName\":");
+        _json_output_.push_str(serialize_string(&self.display_name).as_str());
+        _json_output_.push_str(",\"PhoneNumber\":");
+        match &self.phone_number {
+            Some(phone_number_val) => {
+                _json_output_.push_str(serialize_string(phone_number_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        match &self.email_address {
+            Some(email_address_val) => {
+                _json_output_.push_str(",\"EmailAddress\":");
+                _json_output_.push_str(serialize_string(email_address_val).as_str())
+            }
+            _ => {}
+        };
+        match &self.is_admin {
+            Some(is_admin_val) => {
+                _json_output_.push_str(",\"IsAdmin\":");
+                _json_output_.push_str(is_admin_val.to_string().as_str())
+            }
+            _ => {}
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!(
+            "CreatedAt={}",
+            serialize_date_time(&self.created_at, false)
+        ));
+        _query_parts_.push(format!("DisplayName={}", &self.display_name));
+        match &self.phone_number {
+            Some(phone_number_val) => {
+                _query_parts_.push(format!("PhoneNumber={}", phone_number_val));
+            }
+            _ => {
+                _query_parts_.push("PhoneNumber=null".to_string());
+            }
+        };
+        match &self.email_address {
+            Some(email_address_val) => {
+                _query_parts_.push(format!("EmailAddress={}", email_address_val));
+            }
+            _ => {}
+        };
+        match &self.is_admin {
+            Some(is_admin_val) => {
+                _query_parts_.push(format!("IsAdmin={}", is_admin_val));
+            }
+            _ => {}
+        };
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooObjectWithSnakeCaseKeys {
+    pub created_at: DateTime<FixedOffset>,
+    pub display_name: String,
+    pub phone_number: Option<String>,
+    pub email_address: Option<String>,
+    pub is_admin: Option<bool>,
+}
+
+impl ArriModel for FooObjectWithSnakeCaseKeys {
+    fn new() -> Self {
+        Self {
+            created_at: DateTime::default(),
+            display_name: "".to_string(),
+            phone_number: None,
+            email_address: None,
+            is_admin: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let created_at = match _val_.get("created_at") {
+                    Some(serde_json::Value::String(created_at_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(created_at_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                let display_name = match _val_.get("display_name") {
+                    Some(serde_json::Value::String(display_name_val)) => {
+                        display_name_val.to_owned()
+                    }
+                    _ => "".to_string(),
+                };
+                let phone_number = match _val_.get("phone_number") {
+                    Some(serde_json::Value::String(phone_number_val)) => {
+                        Some(phone_number_val.to_owned())
+                    }
+                    _ => None,
+                };
+                let email_address = match _val_.get("email_address") {
+                    Some(serde_json::Value::String(email_address_val)) => {
+                        Some(email_address_val.to_owned())
+                    }
+                    _ => None,
+                };
+                let is_admin = match _val_.get("is_admin") {
+                    Some(serde_json::Value::Bool(is_admin_val)) => Some(is_admin_val.to_owned()),
+                    _ => None,
+                };
+                Self {
+                    created_at,
+                    display_name,
+                    phone_number,
+                    email_address,
+                    is_admin,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"created_at\":");
+        _json_output_.push_str(serialize_date_time(&self.created_at, true).as_str());
+        _json_output_.push_str(",\"display_name\":");
+        _json_output_.push_str(serialize_string(&self.display_name).as_str());
+        _json_output_.push_str(",\"phone_number\":");
+        match &self.phone_number {
+            Some(phone_number_val) => {
+                _json_output_.push_str(serialize_string(phone_number_val).as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        match &self.email_address {
+            Some(email_address_val) => {
+                _json_output_.push_str(",\"email_address\":");
+                _json_output_.push_str(serialize_string(email_address_val).as_str())
+            }
+            _ => {}
+        };
+        match &self.is_admin {
+            Some(is_admin_val) => {
+                _json_output_.push_str(",\"is_admin\":");
+                _json_output_.push_str(is_admin_val.to_string().as_str())
+            }
+            _ => {}
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!(
+            "created_at={}",
+            serialize_date_time(&self.created_at, false)
+        ));
+        _query_parts_.push(format!("display_name={}", &self.display_name));
+        match &self.phone_number {
+            Some(phone_number_val) => {
+                _query_parts_.push(format!("phone_number={}", phone_number_val));
+            }
+            _ => {
+                _query_parts_.push("phone_number=null".to_string());
+            }
+        };
+        match &self.email_address {
+            Some(email_address_val) => {
+                _query_parts_.push(format!("email_address={}", email_address_val));
+            }
+            _ => {}
+        };
+        match &self.is_admin {
+            Some(is_admin_val) => {
+                _query_parts_.push(format!("is_admin={}", is_admin_val));
+            }
+            _ => {}
+        };
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooObjectWithEveryOptionalType {
+    pub any: Option<serde_json::Value>,
+    pub boolean: Option<bool>,
+    pub string: Option<String>,
+    pub timestamp: Option<DateTime<FixedOffset>>,
+    pub float32: Option<f32>,
+    pub float64: Option<f64>,
+    pub int8: Option<i8>,
+    pub uint8: Option<u8>,
+    pub int16: Option<i16>,
+    pub uint16: Option<u16>,
+    pub int32: Option<i32>,
+    pub uint32: Option<u32>,
+    pub int64: Option<i64>,
+    pub uint64: Option<u64>,
+    pub enumerator: Option<FooFooObjectWithEveryOptionalTypeEnumerator>,
+    pub array: Option<Vec<bool>>,
+    pub object: Option<FooFooObjectWithEveryOptionalTypeObject>,
+    pub record: Option<BTreeMap<String, u64>>,
+    pub discriminator: Option<FooFooObjectWithEveryOptionalTypeDiscriminator>,
+    pub nested_object: Option<FooFooObjectWithEveryOptionalTypeNestedObject>,
+    pub nested_array: Option<Vec<Vec<FooFooObjectWithEveryOptionalTypeNestedArrayElementElement>>>,
+}
+
+impl ArriModel for FooObjectWithEveryOptionalType {
+    fn new() -> Self {
+        Self {
+            any: None,
+            boolean: None,
+            string: None,
+            timestamp: None,
+            float32: None,
+            float64: None,
+            int8: None,
+            uint8: None,
+            int16: None,
+            uint16: None,
+            int32: None,
+            uint32: None,
+            int64: None,
+            uint64: None,
+            enumerator: None,
+            array: None,
+            object: None,
+            record: None,
+            discriminator: None,
+            nested_object: None,
+            nested_array: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let any = match _val_.get("any") {
+                    Some(any_val) => Some(any_val.to_owned()),
+                    _ => None,
+                };
+                let boolean = match _val_.get("boolean") {
+                    Some(serde_json::Value::Bool(boolean_val)) => Some(boolean_val.to_owned()),
+                    _ => None,
+                };
+                let string = match _val_.get("string") {
+                    Some(serde_json::Value::String(string_val)) => Some(string_val.to_owned()),
+                    _ => None,
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        match DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val) {
+                            Ok(timestamp_val_result) => Some(timestamp_val_result),
+                            Err(_) => None,
+                        }
+                    }
+                    _ => None,
+                };
+                let float32 = match _val_.get("float32") {
+                    Some(serde_json::Value::Number(float32_val)) => match float32_val.as_f64() {
+                        Some(float32_val_result) => Some(float32_val_result as f32),
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let float64 = match _val_.get("float64") {
+                    Some(serde_json::Value::Number(float64_val)) => match float64_val.as_f64() {
+                        Some(float64_val_result) => Some(float64_val_result),
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let int8 = match _val_.get("int8") {
+                    Some(serde_json::Value::Number(int8_val)) => match int8_val.as_i64() {
+                        Some(int8_val_result) => match i8::try_from(int8_val_result) {
+                            Ok(int8_val_result_val) => Some(int8_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let uint8 = match _val_.get("uint8") {
+                    Some(serde_json::Value::Number(uint8_val)) => match uint8_val.as_u64() {
+                        Some(uint8_val_result) => match u8::try_from(uint8_val_result) {
+                            Ok(uint8_val_result_val) => Some(uint8_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let int16 = match _val_.get("int16") {
+                    Some(serde_json::Value::Number(int16_val)) => match int16_val.as_i64() {
+                        Some(int16_val_result) => match i16::try_from(int16_val_result) {
+                            Ok(int16_val_result_val) => Some(int16_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let uint16 = match _val_.get("uint16") {
+                    Some(serde_json::Value::Number(uint16_val)) => match uint16_val.as_u64() {
+                        Some(uint16_val_result) => match u16::try_from(uint16_val_result) {
+                            Ok(uint16_val_result_val) => Some(uint16_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let int32 = match _val_.get("int32") {
+                    Some(serde_json::Value::Number(int32_val)) => match int32_val.as_i64() {
+                        Some(int32_val_result) => match i32::try_from(int32_val_result) {
+                            Ok(int32_val_result_val) => Some(int32_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let uint32 = match _val_.get("uint32") {
+                    Some(serde_json::Value::Number(uint32_val)) => match uint32_val.as_u64() {
+                        Some(uint32_val_result) => match u32::try_from(uint32_val_result) {
+                            Ok(uint32_val_result_val) => Some(uint32_val_result_val),
+                            Err(_) => None,
+                        },
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let int64 = match _val_.get("int64") {
+                    Some(serde_json::Value::String(int64_val)) => match int64_val.parse::<i64>() {
+                        Ok(int64_val_result) => Some(int64_val_result),
+                        Err(_) => None,
+                    },
+                    _ => None,
+                };
+                let uint64 = match _val_.get("uint64") {
+                    Some(serde_json::Value::String(uint64_val)) => {
+                        match uint64_val.parse::<u64>() {
+                            Ok(uint64_val_result) => Some(uint64_val_result),
+                            Err(_) => None,
+                        }
+                    }
+                    _ => None,
+                };
+                let enumerator = match _val_.get("enumerator") {
+                    Some(serde_json::Value::String(enumerator_val)) => {
+                        Some(FooFooObjectWithEveryOptionalTypeEnumerator::from_string(
+                            enumerator_val.to_owned(),
+                        ))
+                    }
+                    _ => None,
+                };
+                let array = match _val_.get("array") {
+                    Some(serde_json::Value::Array(array_val)) => {
+                        let mut array_val_result: Vec<bool> = Vec::new();
+                        for array_val_element in array_val {
+                            array_val_result.push(match Some(array_val_element) {
+                                Some(serde_json::Value::Bool(array_val_element_val)) => {
+                                    array_val_element_val.to_owned()
+                                }
+                                _ => false,
+                            });
+                        }
+                        Some(array_val_result)
+                    }
+                    _ => None,
+                };
+                let object = match _val_.get("object") {
+                    Some(object_val) => match object_val {
+                        serde_json::Value::Object(_) => {
+                            Some(FooFooObjectWithEveryOptionalTypeObject::from_json(
+                                object_val.to_owned(),
+                            ))
+                        }
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let record = match _val_.get("record") {
+                    Some(serde_json::Value::Object(record_val)) => {
+                        let mut record_val_result: BTreeMap<String, u64> = BTreeMap::new();
+                        for (_key_, _value_) in record_val.into_iter() {
+                            record_val_result.insert(
+                                _key_.to_owned(),
+                                match Some(_value_.to_owned()) {
+                                    Some(serde_json::Value::String(value_val)) => {
+                                        value_val.parse::<u64>().unwrap_or(0)
+                                    }
+                                    _ => 0,
+                                },
+                            );
+                        }
+                        Some(record_val_result)
+                    }
+                    _ => None,
+                };
+                let discriminator = match _val_.get("discriminator") {
+                    Some(discriminator_val) => match discriminator_val {
+                        serde_json::Value::Object(_) => {
+                            Some(FooFooObjectWithEveryOptionalTypeDiscriminator::from_json(
+                                discriminator_val.to_owned(),
+                            ))
+                        }
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let nested_object = match _val_.get("nestedObject") {
+                    Some(nested_object_val) => match nested_object_val {
+                        serde_json::Value::Object(_) => {
+                            Some(FooFooObjectWithEveryOptionalTypeNestedObject::from_json(
+                                nested_object_val.to_owned(),
+                            ))
+                        }
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let nested_array = match _val_.get("nestedArray") {
+                    Some(serde_json::Value::Array(nested_array_val)) => {
+                        let mut nested_array_val_result: Vec<
+                            Vec<FooFooObjectWithEveryOptionalTypeNestedArrayElementElement>,
+                        > = Vec::new();
+                        for nested_array_val_element in nested_array_val {
+                            nested_array_val_result.push(match Some(nested_array_val_element) {
+                Some(serde_json::Value::Array(nested_array_val_element_val)) => {
+                    let mut nested_array_val_element_val_result: Vec<FooFooObjectWithEveryOptionalTypeNestedArrayElementElement> = Vec::new();
+                    for nested_array_val_element_val_element in nested_array_val_element_val {
+                        nested_array_val_element_val_result.push(match Some(nested_array_val_element_val_element) {
+                Some(nested_array_val_element_val_element_val) => FooFooObjectWithEveryOptionalTypeNestedArrayElementElement::from_json(nested_array_val_element_val_element_val.to_owned()),
+                _ => FooFooObjectWithEveryOptionalTypeNestedArrayElementElement::new(),
+            });
+                    }
+                    nested_array_val_element_val_result
+                }
+                _ => Vec::new(),
+            });
+                        }
+                        Some(nested_array_val_result)
+                    }
+                    _ => None,
+                };
+                Self {
+                    any,
+                    boolean,
+                    string,
+                    timestamp,
+                    float32,
+                    float64,
+                    int8,
+                    uint8,
+                    int16,
+                    uint16,
+                    int32,
+                    uint32,
+                    int64,
+                    uint64,
+                    enumerator,
+                    array,
+                    object,
+                    record,
+                    discriminator,
+                    nested_object,
+                    nested_array,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+        let mut _has_keys_ = false;
+        match &self.any {
+            Some(any_val) => {
+                _json_output_.push_str("\"any\":");
+                _json_output_.push_str(
+                    serde_json::to_string(any_val)
+                        .unwrap_or("null".to_string())
+                        .as_str(),
+                );
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.boolean {
+            Some(boolean_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"boolean\":");
+                _json_output_.push_str(boolean_val.to_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.string {
+            Some(string_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"string\":");
+                _json_output_.push_str(serialize_string(string_val).as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"timestamp\":");
+                _json_output_.push_str(serialize_date_time(timestamp_val, true).as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.float32 {
+            Some(float32_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"float32\":");
+                _json_output_.push_str(float32_val.to_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.float64 {
+            Some(float64_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"float64\":");
+                _json_output_.push_str(float64_val.to_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.int8 {
+            Some(int8_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"int8\":");
+                _json_output_.push_str(int8_val.to_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.uint8 {
+            Some(uint8_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"uint8\":");
+                _json_output_.push_str(uint8_val.to_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.int16 {
+            Some(int16_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"int16\":");
+                _json_output_.push_str(int16_val.to_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.uint16 {
+            Some(uint16_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"uint16\":");
+                _json_output_.push_str(uint16_val.to_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.int32 {
+            Some(int32_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"int32\":");
+                _json_output_.push_str(int32_val.to_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.uint32 {
+            Some(uint32_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"uint32\":");
+                _json_output_.push_str(uint32_val.to_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.int64 {
+            Some(int64_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"int64\":");
+                _json_output_.push_str(format!("\"{}\"", int64_val).as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.uint64 {
+            Some(uint64_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"uint64\":");
+                _json_output_.push_str(format!("\"{}\"", uint64_val).as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.enumerator {
+            Some(enumerator_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"enumerator\":");
+                _json_output_.push_str(format!("\"{}\"", enumerator_val.serial_value()).as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.array {
+            Some(array_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"array\":");
+                _json_output_.push('[');
+                for (_index_, _element_) in array_val.iter().enumerate() {
+                    if _index_ != 0 {
+                        _json_output_.push(',');
+                    }
+                    _json_output_.push_str(_element_.to_string().as_str());
+                }
+                _json_output_.push(']');
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.object {
+            Some(object_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"object\":");
+                _json_output_.push_str(object_val.to_json_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.record {
+            Some(record_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"record\":");
+                _json_output_.push('{');
+                for (_index_, (_key_, _value_)) in record_val.iter().enumerate() {
+                    if _index_ != 0 {
+                        _json_output_.push(',');
+                    }
+                    _json_output_.push_str(format!("{}:", serialize_string(_key_)).as_str());
+                    _json_output_.push_str(format!("\"{}\"", _value_).as_str());
+                }
+                _json_output_.push('}');
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.discriminator {
+            Some(discriminator_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"discriminator\":");
+                _json_output_.push_str(discriminator_val.to_json_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.nested_object {
+            Some(nested_object_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"nestedObject\":");
+                _json_output_.push_str(nested_object_val.to_json_string().as_str());
+                _has_keys_ = true;
+            }
+            _ => {}
+        };
+        match &self.nested_array {
+            Some(nested_array_val) => {
+                if _has_keys_ {
+                    _json_output_.push(',');
+                }
+                _json_output_.push_str("\"nestedArray\":");
+                _json_output_.push('[');
+                for (_index_, _element_) in nested_array_val.iter().enumerate() {
+                    if _index_ != 0 {
+                        _json_output_.push(',');
+                    }
+                    _json_output_.push('[');
+                    for (_index_, _element_) in _element_.iter().enumerate() {
+                        if _index_ != 0 {
+                            _json_output_.push(',');
+                        }
+                        _json_output_.push_str(_element_.to_json_string().as_str());
+                    }
+                    _json_output_.push(']');
+                }
+                _json_output_.push(']');
+            }
+            _ => {}
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        println!("[WARNING] cannot serialize any's to query params. Skipping field at /FooObjectWithEveryOptionalType/any.");
+        match &self.boolean {
+            Some(boolean_val) => {
+                _query_parts_.push(format!("boolean={}", boolean_val));
+            }
+            _ => {}
+        };
+        match &self.string {
+            Some(string_val) => {
+                _query_parts_.push(format!("string={}", string_val));
+            }
+            _ => {}
+        };
+        match &self.timestamp {
+            Some(timestamp_val) => {
+                _query_parts_.push(format!(
+                    "timestamp={}",
+                    serialize_date_time(timestamp_val, false)
+                ));
+            }
+            _ => {}
+        };
+        match &self.float32 {
+            Some(float32_val) => {
+                _query_parts_.push(format!("float32={}", float32_val));
+            }
+            _ => {}
+        };
+        match &self.float64 {
+            Some(float64_val) => {
+                _query_parts_.push(format!("float64={}", float64_val));
+            }
+            _ => {}
+        };
+        match &self.int8 {
+            Some(int8_val) => {
+                _query_parts_.push(format!("int8={}", int8_val));
+            }
+            _ => {}
+        };
+        match &self.uint8 {
+            Some(uint8_val) => {
+                _query_parts_.push(format!("uint8={}", uint8_val));
+            }
+            _ => {}
+        };
+        match &self.int16 {
+            Some(int16_val) => {
+                _query_parts_.push(format!("int16={}", int16_val));
+            }
+            _ => {}
+        };
+        match &self.uint16 {
+            Some(uint16_val) => {
+                _query_parts_.push(format!("uint16={}", uint16_val));
+            }
+            _ => {}
+        };
+        match &self.int32 {
+            Some(int32_val) => {
+                _query_parts_.push(format!("int32={}", int32_val));
+            }
+            _ => {}
+        };
+        match &self.uint32 {
+            Some(uint32_val) => {
+                _query_parts_.push(format!("uint32={}", uint32_val));
+            }
+            _ => {}
+        };
+        match &self.int64 {
+            Some(int64_val) => {
+                _query_parts_.push(format!("int64={}", int64_val));
+            }
+            _ => {}
+        };
+        match &self.uint64 {
+            Some(uint64_val) => {
+                _query_parts_.push(format!("uint64={}", uint64_val));
+            }
+            _ => {}
+        };
+        match &self.enumerator {
+            Some(enumerator_val) => {
+                _query_parts_.push(format!("enumerator={}", enumerator_val.serial_value()));
+            }
+            _ => {}
+        };
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooObjectWithEveryOptionalType/array.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryOptionalType/object.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryOptionalType/record.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryOptionalType/discriminator.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooObjectWithEveryOptionalType/nestedObject.");
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooObjectWithEveryOptionalType/nestedArray.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooFooObjectWithEveryOptionalTypeEnumerator {
+    A,
+    B,
+    C,
+}
+
+impl ArriEnum for FooFooObjectWithEveryOptionalTypeEnumerator {
+    fn default() -> Self {
+        FooFooObjectWithEveryOptionalTypeEnumerator::A
+    }
+    fn from_string(input: String) -> Self {
+        match input.as_str() {
+            "A" => Self::A,
+            "B" => Self::B,
+            "C" => Self::C,
+            _ => Self::default(),
+        }
+    }
+    fn serial_value(&self) -> String {
+        match &self {
+            FooFooObjectWithEveryOptionalTypeEnumerator::A => "A".to_string(),
+            FooFooObjectWithEveryOptionalTypeEnumerator::B => "B".to_string(),
+            FooFooObjectWithEveryOptionalTypeEnumerator::C => "C".to_string(),
+        }
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooObjectWithEveryOptionalTypeObject {
+    pub string: String,
+    pub boolean: bool,
+    pub timestamp: DateTime<FixedOffset>,
+}
+
+impl ArriModel for FooFooObjectWithEveryOptionalTypeObject {
+    fn new() -> Self {
+        Self {
+            string: "".to_string(),
+            boolean: false,
+            timestamp: DateTime::default(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let string = match _val_.get("string") {
+                    Some(serde_json::Value::String(string_val)) => string_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let boolean = match _val_.get("boolean") {
+                    Some(serde_json::Value::Bool(boolean_val)) => boolean_val.to_owned(),
+                    _ => false,
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                Self {
+                    string,
+                    boolean,
+                    timestamp,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"string\":");
+        _json_output_.push_str(serialize_string(&self.string).as_str());
+        _json_output_.push_str(",\"boolean\":");
+        _json_output_.push_str(&self.boolean.to_string().as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("string={}", &self.string));
+        _query_parts_.push(format!("boolean={}", &self.boolean));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooFooObjectWithEveryOptionalTypeDiscriminator {
+    A { title: String },
+    B { title: String, description: String },
+}
+
+impl ArriModel for FooFooObjectWithEveryOptionalTypeDiscriminator {
+    fn new() -> Self {
+        Self::A {
+            title: "".to_string(),
+        }
+    }
+
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let r#type = match _val_.get("type") {
+                    Some(serde_json::Value::String(r#type_val)) => r#type_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                match r#type.as_str() {
+                    "A" => {
+                        let title = match _val_.get("title") {
+                            Some(serde_json::Value::String(title_val)) => title_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        Self::A { title }
+                    }
+                    "B" => {
+                        let title = match _val_.get("title") {
+                            Some(serde_json::Value::String(title_val)) => title_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let description = match _val_.get("description") {
+                            Some(serde_json::Value::String(description_val)) => {
+                                description_val.to_owned()
+                            }
+                            _ => "".to_string(),
+                        };
+                        Self::B { title, description }
+                    }
+                    _ => Self::new(),
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+        match &self {
+            Self::A { title } => {
+                _json_output_.push_str("\"type\":\"A\"");
+                _json_output_.push_str(",\"title\":");
+                _json_output_.push_str(serialize_string(title).as_str());
+            }
+            Self::B { title, description } => {
+                _json_output_.push_str("\"type\":\"B\"");
+                _json_output_.push_str(",\"title\":");
+                _json_output_.push_str(serialize_string(title).as_str());
+                _json_output_.push_str(",\"description\":");
+                _json_output_.push_str(serialize_string(description).as_str());
+            }
+        }
+        _json_output_.push('}');
+        _json_output_
+    }
+
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self {
+            Self::A { title } => {
+                _query_parts_.push(format!("type=A"));
+                _query_parts_.push(format!("title={}", title));
+            }
+            Self::B { title, description } => {
+                _query_parts_.push(format!("type=B"));
+                _query_parts_.push(format!("title={}", title));
+                _query_parts_.push(format!("description={}", description));
+            }
+        }
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooObjectWithEveryOptionalTypeNestedObject {
+    pub id: String,
+    pub timestamp: DateTime<FixedOffset>,
+    pub data: FooFooFooObjectWithEveryOptionalTypeNestedObjectData,
+}
+
+impl ArriModel for FooFooObjectWithEveryOptionalTypeNestedObject {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            timestamp: DateTime::default(),
+            data: FooFooFooObjectWithEveryOptionalTypeNestedObjectData::new(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                let data = match _val_.get("data") {
+                    Some(data_val) => {
+                        FooFooFooObjectWithEveryOptionalTypeNestedObjectData::from_json(
+                            data_val.to_owned(),
+                        )
+                    }
+                    _ => FooFooFooObjectWithEveryOptionalTypeNestedObjectData::new(),
+                };
+                Self {
+                    id,
+                    timestamp,
+                    data,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push_str(",\"data\":");
+        _json_output_.push_str(&self.data.to_json_string().as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooFooObjectWithEveryOptionalTypeNestedObject/data.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooFooObjectWithEveryOptionalTypeNestedObjectData {
+    pub id: String,
+    pub timestamp: DateTime<FixedOffset>,
+    pub data: FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData,
+}
+
+impl ArriModel for FooFooFooObjectWithEveryOptionalTypeNestedObjectData {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            timestamp: DateTime::default(),
+            data: FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData::new(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                let data = match _val_.get("data") {
+                    Some(data_val) => {
+                        FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData::from_json(
+                            data_val.to_owned(),
+                        )
+                    }
+                    _ => FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData::new(),
+                };
+                Self {
+                    id,
+                    timestamp,
+                    data,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push_str(",\"data\":");
+        _json_output_.push_str(&self.data.to_json_string().as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooFooFooObjectWithEveryOptionalTypeNestedObjectData/data.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData {
+    pub id: String,
+    pub timestamp: DateTime<FixedOffset>,
+}
+
+impl ArriModel for FooFooFooFooObjectWithEveryOptionalTypeNestedObjectDataData {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            timestamp: DateTime::default(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                Self { id, timestamp }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooObjectWithEveryOptionalTypeNestedArrayElementElement {
+    pub id: String,
+    pub timestamp: DateTime<FixedOffset>,
+}
+
+impl ArriModel for FooFooObjectWithEveryOptionalTypeNestedArrayElementElement {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            timestamp: DateTime::default(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let timestamp = match _val_.get("timestamp") {
+                    Some(serde_json::Value::String(timestamp_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(timestamp_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                Self { id, timestamp }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"timestamp\":");
+        _json_output_.push_str(serialize_date_time(&self.timestamp, true).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!(
+            "timestamp={}",
+            serialize_date_time(&self.timestamp, false)
+        ));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooRecursiveObject {
+    pub left: Option<Box<FooRecursiveObject>>,
+    pub right: Option<Box<FooRecursiveObject>>,
+    pub value: String,
+}
+
+impl ArriModel for FooRecursiveObject {
+    fn new() -> Self {
+        Self {
+            left: None,
+            right: None,
+            value: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let left = match _val_.get("left") {
+                    Some(left_val) => match left_val {
+                        serde_json::Value::Object(_) => {
+                            Some(Box::new(FooRecursiveObject::from_json(left_val.to_owned())))
+                        }
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let right = match _val_.get("right") {
+                    Some(right_val) => match right_val {
+                        serde_json::Value::Object(_) => Some(Box::new(
+                            FooRecursiveObject::from_json(right_val.to_owned()),
+                        )),
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let value = match _val_.get("value") {
+                    Some(serde_json::Value::String(value_val)) => value_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { left, right, value }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"left\":");
+        match &self.left {
+            Some(left_val) => {
+                _json_output_.push_str(left_val.to_json_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"right\":");
+        match &self.right {
+            Some(right_val) => {
+                _json_output_.push_str(right_val.to_json_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"value\":");
+        _json_output_.push_str(serialize_string(&self.value).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooRecursiveObject/left.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooRecursiveObject/right.");
+        _query_parts_.push(format!("value={}", &self.value));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooRecursiveUnion {
+    /// Child node
+    Child { data: Box<FooRecursiveUnion> },
+    /// List of children node
+    Children { data: Vec<Box<FooRecursiveUnion>> },
+    /// Text node
+    Text { data: String },
+    /// Shape node
+    Shape { data: FooRecursiveUnionDataShape },
+}
+
+impl ArriModel for FooRecursiveUnion {
+    fn new() -> Self {
+        Self::Child {
+            data: Box::new(FooRecursiveUnion::new()),
+        }
+    }
+
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let r#type = match _val_.get("type") {
+                    Some(serde_json::Value::String(r#type_val)) => r#type_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                match r#type.as_str() {
+                    "CHILD" => {
+                        let data = match _val_.get("data") {
+                            Some(data_val) => match data_val {
+                                serde_json::Value::Object(_) => {
+                                    Box::new(FooRecursiveUnion::from_json(data_val.to_owned()))
+                                }
+                                _ => Box::new(FooRecursiveUnion::from_json(data_val.to_owned())),
+                            },
+                            _ => Box::new(FooRecursiveUnion::new()),
+                        };
+                        Self::Child { data }
+                    }
+                    "CHILDREN" => {
+                        let data = match _val_.get("data") {
+                            Some(serde_json::Value::Array(data_val)) => {
+                                let mut data_val_result: Vec<Box<FooRecursiveUnion>> = Vec::new();
+                                for data_val_element in data_val {
+                                    data_val_result.push(match Some(data_val_element) {
+                                        Some(data_val_element_val) => match data_val_element_val {
+                                            serde_json::Value::Object(_) => {
+                                                Box::new(FooRecursiveUnion::from_json(
+                                                    data_val_element_val.to_owned(),
+                                                ))
+                                            }
+                                            _ => Box::new(FooRecursiveUnion::from_json(
+                                                data_val_element_val.to_owned(),
+                                            )),
+                                        },
+                                        _ => Box::new(FooRecursiveUnion::new()),
+                                    });
+                                }
+                                data_val_result
+                            }
+                            _ => Vec::new(),
+                        };
+                        Self::Children { data }
+                    }
+                    "TEXT" => {
+                        let data = match _val_.get("data") {
+                            Some(serde_json::Value::String(data_val)) => data_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        Self::Text { data }
+                    }
+                    "SHAPE" => {
+                        let data = match _val_.get("data") {
+                            Some(data_val) => {
+                                FooRecursiveUnionDataShape::from_json(data_val.to_owned())
+                            }
+                            _ => FooRecursiveUnionDataShape::new(),
+                        };
+                        Self::Shape { data }
+                    }
+                    _ => Self::new(),
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+        match &self {
+            Self::Child { data } => {
+                _json_output_.push_str("\"type\":\"CHILD\"");
+                _json_output_.push_str(",\"data\":");
+                _json_output_.push_str(data.to_json_string().as_str());
+            }
+            Self::Children { data } => {
+                _json_output_.push_str("\"type\":\"CHILDREN\"");
+                _json_output_.push_str(",\"data\":");
+                _json_output_.push('[');
+                for (_index_, _element_) in data.iter().enumerate() {
+                    if _index_ != 0 {
+                        _json_output_.push(',');
+                    }
+                    _json_output_.push_str(_element_.to_json_string().as_str());
+                }
+                _json_output_.push(']');
+            }
+            Self::Text { data } => {
+                _json_output_.push_str("\"type\":\"TEXT\"");
+                _json_output_.push_str(",\"data\":");
+                _json_output_.push_str(serialize_string(data).as_str());
+            }
+            Self::Shape { data } => {
+                _json_output_.push_str("\"type\":\"SHAPE\"");
+                _json_output_.push_str(",\"data\":");
+                _json_output_.push_str(data.to_json_string().as_str());
+            }
+        }
+        _json_output_.push('}');
+        _json_output_
+    }
+
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self {
+            Self::Child { data } => {
+                _query_parts_.push(format!("type=CHILD"));
+                println!("[WARNING] cannot serialize nested objects to query params. Skipping field at RecursiveUnion/data.");
+            }
+            Self::Children { data } => {
+                _query_parts_.push(format!("type=CHILDREN"));
+                println!("[WARNING] cannot serialize arrays to query params. Skipping field at RecursiveUnion/data.");
+            }
+            Self::Text { data } => {
+                _query_parts_.push(format!("type=TEXT"));
+                _query_parts_.push(format!("data={}", data));
+            }
+            Self::Shape { data } => {
+                _query_parts_.push(format!("type=SHAPE"));
+                println!("[WARNING] cannot serialize nested objects to query params. Skipping field at RecursiveUnion/data.");
+            }
+        }
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooRecursiveUnionDataShape {
+    pub width: f64,
+    pub height: f64,
+    pub color: String,
+}
+
+impl ArriModel for FooRecursiveUnionDataShape {
+    fn new() -> Self {
+        Self {
+            width: 0.0,
+            height: 0.0,
+            color: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let width = match _val_.get("width") {
+                    Some(serde_json::Value::Number(width_val)) => width_val.as_f64().unwrap_or(0.0),
+                    _ => 0.0,
+                };
+                let height = match _val_.get("height") {
+                    Some(serde_json::Value::Number(height_val)) => {
+                        height_val.as_f64().unwrap_or(0.0)
+                    }
+                    _ => 0.0,
+                };
+                let color = match _val_.get("color") {
+                    Some(serde_json::Value::String(color_val)) => color_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self {
+                    width,
+                    height,
+                    color,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"width\":");
+        _json_output_.push_str(&self.width.to_string().as_str());
+        _json_output_.push_str(",\"height\":");
+        _json_output_.push_str(&self.height.to_string().as_str());
+        _json_output_.push_str(",\"color\":");
+        _json_output_.push_str(serialize_string(&self.color).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("width={}", &self.width));
+        _query_parts_.push(format!("height={}", &self.height));
+        _query_parts_.push(format!("color={}", &self.color));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooAutoReconnectParams {
+    pub message_count: u8,
+}
+
+impl ArriModel for FooAutoReconnectParams {
+    fn new() -> Self {
+        Self { message_count: 0 }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let message_count = match _val_.get("messageCount") {
+                    Some(serde_json::Value::Number(message_count_val)) => {
+                        u8::try_from(message_count_val.as_u64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                Self { message_count }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"messageCount\":");
+        _json_output_.push_str(&self.message_count.to_string().as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("messageCount={}", &self.message_count));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooAutoReconnectResponse {
+    pub count: u8,
+    pub message: String,
+}
+
+impl ArriModel for FooAutoReconnectResponse {
+    fn new() -> Self {
+        Self {
+            count: 0,
+            message: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let count = match _val_.get("count") {
+                    Some(serde_json::Value::Number(count_val)) => {
+                        u8::try_from(count_val.as_u64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let message = match _val_.get("message") {
+                    Some(serde_json::Value::String(message_val)) => message_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { count, message }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"count\":");
+        _json_output_.push_str(&self.count.to_string().as_str());
+        _json_output_.push_str(",\"message\":");
+        _json_output_.push_str(serialize_string(&self.message).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("count={}", &self.count));
+        _query_parts_.push(format!("message={}", &self.message));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooStreamConnectionErrorTestParams {
+    pub status_code: i32,
+    pub status_message: String,
+}
+
+impl ArriModel for FooStreamConnectionErrorTestParams {
+    fn new() -> Self {
+        Self {
+            status_code: 0,
+            status_message: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let status_code = match _val_.get("statusCode") {
+                    Some(serde_json::Value::Number(status_code_val)) => {
+                        i32::try_from(status_code_val.as_i64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let status_message = match _val_.get("statusMessage") {
+                    Some(serde_json::Value::String(status_message_val)) => {
+                        status_message_val.to_owned()
+                    }
+                    _ => "".to_string(),
+                };
+                Self {
+                    status_code,
+                    status_message,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"statusCode\":");
+        _json_output_.push_str(&self.status_code.to_string().as_str());
+        _json_output_.push_str(",\"statusMessage\":");
+        _json_output_.push_str(serialize_string(&self.status_message).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("statusCode={}", &self.status_code));
+        _query_parts_.push(format!("statusMessage={}", &self.status_message));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooStreamConnectionErrorTestResponse {
+    pub message: String,
+}
+
+impl ArriModel for FooStreamConnectionErrorTestResponse {
+    fn new() -> Self {
+        Self {
+            message: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let message = match _val_.get("message") {
+                    Some(serde_json::Value::String(message_val)) => message_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { message }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"message\":");
+        _json_output_.push_str(serialize_string(&self.message).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("message={}", &self.message));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooStreamLargeObjectsResponse {
+    pub numbers: Vec<f64>,
+    pub objects: Vec<FooFooStreamLargeObjectsResponseObjectsElement>,
+}
+
+impl ArriModel for FooStreamLargeObjectsResponse {
+    fn new() -> Self {
+        Self {
+            numbers: Vec::new(),
+            objects: Vec::new(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let numbers = match _val_.get("numbers") {
+                    Some(serde_json::Value::Array(numbers_val)) => {
+                        let mut numbers_val_result: Vec<f64> = Vec::new();
+                        for numbers_val_element in numbers_val {
+                            numbers_val_result.push(match Some(numbers_val_element) {
+                                Some(serde_json::Value::Number(numbers_val_element_val)) => {
+                                    numbers_val_element_val.as_f64().unwrap_or(0.0)
+                                }
+                                _ => 0.0,
+                            });
+                        }
+                        numbers_val_result
+                    }
+                    _ => Vec::new(),
+                };
+                let objects = match _val_.get("objects") {
+                    Some(serde_json::Value::Array(objects_val)) => {
+                        let mut objects_val_result: Vec<
+                            FooFooStreamLargeObjectsResponseObjectsElement,
+                        > = Vec::new();
+                        for objects_val_element in objects_val {
+                            objects_val_result.push(match Some(objects_val_element) {
+                                Some(objects_val_element_val) => {
+                                    FooFooStreamLargeObjectsResponseObjectsElement::from_json(
+                                        objects_val_element_val.to_owned(),
+                                    )
+                                }
+                                _ => FooFooStreamLargeObjectsResponseObjectsElement::new(),
+                            });
+                        }
+                        objects_val_result
+                    }
+                    _ => Vec::new(),
+                };
+                Self { numbers, objects }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"numbers\":");
+        _json_output_.push('[');
+        for (_index_, _element_) in self.numbers.iter().enumerate() {
+            if _index_ != 0 {
+                _json_output_.push(',');
+            }
+            _json_output_.push_str(_element_.to_string().as_str());
+        }
+        _json_output_.push(']');
+        _json_output_.push_str(",\"objects\":");
+        _json_output_.push('[');
+        for (_index_, _element_) in self.objects.iter().enumerate() {
+            if _index_ != 0 {
+                _json_output_.push(',');
+            }
+            _json_output_.push_str(_element_.to_json_string().as_str());
+        }
+        _json_output_.push(']');
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooStreamLargeObjectsResponse/numbers.");
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooStreamLargeObjectsResponse/objects.");
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooStreamLargeObjectsResponseObjectsElement {
+    pub id: String,
+    pub name: String,
+    pub email: String,
+}
+
+impl ArriModel for FooFooStreamLargeObjectsResponseObjectsElement {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            name: "".to_string(),
+            email: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let name = match _val_.get("name") {
+                    Some(serde_json::Value::String(name_val)) => name_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let email = match _val_.get("email") {
+                    Some(serde_json::Value::String(email_val)) => email_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { id, name, email }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"name\":");
+        _json_output_.push_str(serialize_string(&self.name).as_str());
+        _json_output_.push_str(",\"email\":");
+        _json_output_.push_str(serialize_string(&self.email).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!("name={}", &self.name));
+        _query_parts_.push(format!("email={}", &self.email));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooChatMessageParams {
+    pub channel_id: String,
+}
+
+impl ArriModel for FooChatMessageParams {
+    fn new() -> Self {
+        Self {
+            channel_id: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let channel_id = match _val_.get("channelId") {
+                    Some(serde_json::Value::String(channel_id_val)) => channel_id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { channel_id }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"channelId\":");
+        _json_output_.push_str(serialize_string(&self.channel_id).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("channelId={}", &self.channel_id));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooChatMessage {
+    Text {
+        id: String,
+        channel_id: String,
+        user_id: String,
+        date: DateTime<FixedOffset>,
+        text: String,
+    },
+    Image {
+        id: String,
+        channel_id: String,
+        user_id: String,
+        date: DateTime<FixedOffset>,
+        image: String,
+    },
+    Url {
+        id: String,
+        channel_id: String,
+        user_id: String,
+        date: DateTime<FixedOffset>,
+        url: String,
+    },
+}
+
+impl ArriModel for FooChatMessage {
+    fn new() -> Self {
+        Self::Text {
+            id: "".to_string(),
+            channel_id: "".to_string(),
+            user_id: "".to_string(),
+            date: DateTime::default(),
+            text: "".to_string(),
+        }
+    }
+
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let message_type = match _val_.get("messageType") {
+                    Some(serde_json::Value::String(message_type_val)) => {
+                        message_type_val.to_owned()
+                    }
+                    _ => "".to_string(),
+                };
+                match message_type.as_str() {
+                    "TEXT" => {
+                        let id = match _val_.get("id") {
+                            Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let channel_id = match _val_.get("channelId") {
+                            Some(serde_json::Value::String(channel_id_val)) => {
+                                channel_id_val.to_owned()
+                            }
+                            _ => "".to_string(),
+                        };
+                        let user_id = match _val_.get("userId") {
+                            Some(serde_json::Value::String(user_id_val)) => user_id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let date = match _val_.get("date") {
+                            Some(serde_json::Value::String(date_val)) => {
+                                DateTime::<FixedOffset>::parse_from_rfc3339(date_val)
+                                    .unwrap_or(DateTime::default())
+                            }
+                            _ => DateTime::default(),
+                        };
+                        let text = match _val_.get("text") {
+                            Some(serde_json::Value::String(text_val)) => text_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        Self::Text {
+                            id,
+                            channel_id,
+                            user_id,
+                            date,
+                            text,
+                        }
+                    }
+                    "IMAGE" => {
+                        let id = match _val_.get("id") {
+                            Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let channel_id = match _val_.get("channelId") {
+                            Some(serde_json::Value::String(channel_id_val)) => {
+                                channel_id_val.to_owned()
+                            }
+                            _ => "".to_string(),
+                        };
+                        let user_id = match _val_.get("userId") {
+                            Some(serde_json::Value::String(user_id_val)) => user_id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let date = match _val_.get("date") {
+                            Some(serde_json::Value::String(date_val)) => {
+                                DateTime::<FixedOffset>::parse_from_rfc3339(date_val)
+                                    .unwrap_or(DateTime::default())
+                            }
+                            _ => DateTime::default(),
+                        };
+                        let image = match _val_.get("image") {
+                            Some(serde_json::Value::String(image_val)) => image_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        Self::Image {
+                            id,
+                            channel_id,
+                            user_id,
+                            date,
+                            image,
+                        }
+                    }
+                    "URL" => {
+                        let id = match _val_.get("id") {
+                            Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let channel_id = match _val_.get("channelId") {
+                            Some(serde_json::Value::String(channel_id_val)) => {
+                                channel_id_val.to_owned()
+                            }
+                            _ => "".to_string(),
+                        };
+                        let user_id = match _val_.get("userId") {
+                            Some(serde_json::Value::String(user_id_val)) => user_id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let date = match _val_.get("date") {
+                            Some(serde_json::Value::String(date_val)) => {
+                                DateTime::<FixedOffset>::parse_from_rfc3339(date_val)
+                                    .unwrap_or(DateTime::default())
+                            }
+                            _ => DateTime::default(),
+                        };
+                        let url = match _val_.get("url") {
+                            Some(serde_json::Value::String(url_val)) => url_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        Self::Url {
+                            id,
+                            channel_id,
+                            user_id,
+                            date,
+                            url,
+                        }
+                    }
+                    _ => Self::new(),
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+        match &self {
+            Self::Text {
+                id,
+                channel_id,
+                user_id,
+                date,
+                text,
+            } => {
+                _json_output_.push_str("\"messageType\":\"TEXT\"");
+                _json_output_.push_str(",\"id\":");
+                _json_output_.push_str(serialize_string(id).as_str());
+                _json_output_.push_str(",\"channelId\":");
+                _json_output_.push_str(serialize_string(channel_id).as_str());
+                _json_output_.push_str(",\"userId\":");
+                _json_output_.push_str(serialize_string(user_id).as_str());
+                _json_output_.push_str(",\"date\":");
+                _json_output_.push_str(serialize_date_time(date, true).as_str());
+                _json_output_.push_str(",\"text\":");
+                _json_output_.push_str(serialize_string(text).as_str());
+            }
+            Self::Image {
+                id,
+                channel_id,
+                user_id,
+                date,
+                image,
+            } => {
+                _json_output_.push_str("\"messageType\":\"IMAGE\"");
+                _json_output_.push_str(",\"id\":");
+                _json_output_.push_str(serialize_string(id).as_str());
+                _json_output_.push_str(",\"channelId\":");
+                _json_output_.push_str(serialize_string(channel_id).as_str());
+                _json_output_.push_str(",\"userId\":");
+                _json_output_.push_str(serialize_string(user_id).as_str());
+                _json_output_.push_str(",\"date\":");
+                _json_output_.push_str(serialize_date_time(date, true).as_str());
+                _json_output_.push_str(",\"image\":");
+                _json_output_.push_str(serialize_string(image).as_str());
+            }
+            Self::Url {
+                id,
+                channel_id,
+                user_id,
+                date,
+                url,
+            } => {
+                _json_output_.push_str("\"messageType\":\"URL\"");
+                _json_output_.push_str(",\"id\":");
+                _json_output_.push_str(serialize_string(id).as_str());
+                _json_output_.push_str(",\"channelId\":");
+                _json_output_.push_str(serialize_string(channel_id).as_str());
+                _json_output_.push_str(",\"userId\":");
+                _json_output_.push_str(serialize_string(user_id).as_str());
+                _json_output_.push_str(",\"date\":");
+                _json_output_.push_str(serialize_date_time(date, true).as_str());
+                _json_output_.push_str(",\"url\":");
+                _json_output_.push_str(serialize_string(url).as_str());
+            }
+        }
+        _json_output_.push('}');
+        _json_output_
+    }
+
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self {
+            Self::Text {
+                id,
+                channel_id,
+                user_id,
+                date,
+                text,
+            } => {
+                _query_parts_.push(format!("messageType=TEXT"));
+                _query_parts_.push(format!("id={}", id));
+                _query_parts_.push(format!("channelId={}", channel_id));
+                _query_parts_.push(format!("userId={}", user_id));
+                _query_parts_.push(format!("date={}", serialize_date_time(date, false)));
+                _query_parts_.push(format!("text={}", text));
+            }
+            Self::Image {
+                id,
+                channel_id,
+                user_id,
+                date,
+                image,
+            } => {
+                _query_parts_.push(format!("messageType=IMAGE"));
+                _query_parts_.push(format!("id={}", id));
+                _query_parts_.push(format!("channelId={}", channel_id));
+                _query_parts_.push(format!("userId={}", user_id));
+                _query_parts_.push(format!("date={}", serialize_date_time(date, false)));
+                _query_parts_.push(format!("image={}", image));
+            }
+            Self::Url {
+                id,
+                channel_id,
+                user_id,
+                date,
+                url,
+            } => {
+                _query_parts_.push(format!("messageType=URL"));
+                _query_parts_.push(format!("id={}", id));
+                _query_parts_.push(format!("channelId={}", channel_id));
+                _query_parts_.push(format!("userId={}", user_id));
+                _query_parts_.push(format!("date={}", serialize_date_time(date, false)));
+                _query_parts_.push(format!("url={}", url));
+            }
+        }
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooTestsStreamRetryWithNewCredentialsResponse {
+    pub message: String,
+}
+
+impl ArriModel for FooTestsStreamRetryWithNewCredentialsResponse {
+    fn new() -> Self {
+        Self {
+            message: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let message = match _val_.get("message") {
+                    Some(serde_json::Value::String(message_val)) => message_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { message }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"message\":");
+        _json_output_.push_str(serialize_string(&self.message).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("message={}", &self.message));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooUsersWatchUserParams {
+    pub user_id: String,
+}
+
+impl ArriModel for FooUsersWatchUserParams {
+    fn new() -> Self {
+        Self {
+            user_id: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let user_id = match _val_.get("userId") {
+                    Some(serde_json::Value::String(user_id_val)) => user_id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { user_id }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"userId\":");
+        _json_output_.push_str(serialize_string(&self.user_id).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("userId={}", &self.user_id));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooUsersWatchUserResponse {
+    pub id: String,
+    pub role: FooFooUsersWatchUserResponseRole,
+    /// A profile picture
+    pub photo: Option<FooUserPhoto>,
+    pub created_at: DateTime<FixedOffset>,
+    pub num_followers: i32,
+    pub settings: FooUserSettings,
+    pub recent_notifications: Vec<FooFooUsersWatchUserResponseRecentNotificationsElement>,
+    pub bookmarks: BTreeMap<String, FooFooUsersWatchUserResponseBookmarksValue>,
+    pub metadata: BTreeMap<String, serde_json::Value>,
+    pub random_list: Vec<serde_json::Value>,
+    pub bio: Option<String>,
+}
+
+impl ArriModel for FooUsersWatchUserResponse {
+    fn new() -> Self {
+        Self {
+            id: "".to_string(),
+            role: FooFooUsersWatchUserResponseRole::default(),
+            photo: None,
+            created_at: DateTime::default(),
+            num_followers: 0,
+            settings: FooUserSettings::new(),
+            recent_notifications: Vec::new(),
+            bookmarks: BTreeMap::new(),
+            metadata: BTreeMap::new(),
+            random_list: Vec::new(),
+            bio: None,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let id = match _val_.get("id") {
+                    Some(serde_json::Value::String(id_val)) => id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let role = match _val_.get("role") {
+                    Some(serde_json::Value::String(role_val)) => {
+                        FooFooUsersWatchUserResponseRole::from_string(role_val.to_owned())
+                    }
+                    _ => FooFooUsersWatchUserResponseRole::default(),
+                };
+                let photo = match _val_.get("photo") {
+                    Some(photo_val) => match photo_val {
+                        serde_json::Value::Object(_) => {
+                            Some(FooUserPhoto::from_json(photo_val.to_owned()))
+                        }
+                        _ => None,
+                    },
+                    _ => None,
+                };
+                let created_at = match _val_.get("createdAt") {
+                    Some(serde_json::Value::String(created_at_val)) => {
+                        DateTime::<FixedOffset>::parse_from_rfc3339(created_at_val)
+                            .unwrap_or(DateTime::default())
+                    }
+                    _ => DateTime::default(),
+                };
+                let num_followers = match _val_.get("numFollowers") {
+                    Some(serde_json::Value::Number(num_followers_val)) => {
+                        i32::try_from(num_followers_val.as_i64().unwrap_or(0)).unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let settings = match _val_.get("settings") {
+                    Some(settings_val) => FooUserSettings::from_json(settings_val.to_owned()),
+                    _ => FooUserSettings::new(),
+                };
+                let recent_notifications = match _val_.get("recentNotifications") {
+                    Some(serde_json::Value::Array(recent_notifications_val)) => {
+                        let mut recent_notifications_val_result: Vec<
+                            FooFooUsersWatchUserResponseRecentNotificationsElement,
+                        > = Vec::new();
+                        for recent_notifications_val_element in recent_notifications_val {
+                            recent_notifications_val_result.push(match Some(recent_notifications_val_element) {
+                Some(recent_notifications_val_element_val) => match recent_notifications_val_element_val {
+                    serde_json::Value::Object(_) => {
+                        FooFooUsersWatchUserResponseRecentNotificationsElement::from_json(recent_notifications_val_element_val.to_owned())
+                    }
+                    _ => FooFooUsersWatchUserResponseRecentNotificationsElement::new(),
+                },
+                _ => FooFooUsersWatchUserResponseRecentNotificationsElement::new(),
+            });
+                        }
+                        recent_notifications_val_result
+                    }
+                    _ => Vec::new(),
+                };
+                let bookmarks = match _val_.get("bookmarks") {
+                    Some(serde_json::Value::Object(bookmarks_val)) => {
+                        let mut bookmarks_val_result: BTreeMap<
+                            String,
+                            FooFooUsersWatchUserResponseBookmarksValue,
+                        > = BTreeMap::new();
+                        for (_key_, _value_) in bookmarks_val.into_iter() {
+                            bookmarks_val_result.insert(
+                                _key_.to_owned(),
+                                match Some(_value_.to_owned()) {
+                                    Some(value_val) => {
+                                        FooFooUsersWatchUserResponseBookmarksValue::from_json(
+                                            value_val.to_owned(),
+                                        )
+                                    }
+                                    _ => FooFooUsersWatchUserResponseBookmarksValue::new(),
+                                },
+                            );
+                        }
+                        bookmarks_val_result
+                    }
+                    _ => BTreeMap::new(),
+                };
+                let metadata = match _val_.get("metadata") {
+                    Some(serde_json::Value::Object(metadata_val)) => {
+                        let mut metadata_val_result: BTreeMap<String, serde_json::Value> =
+                            BTreeMap::new();
+                        for (_key_, _value_) in metadata_val.into_iter() {
+                            metadata_val_result.insert(
+                                _key_.to_owned(),
+                                match Some(_value_.to_owned()) {
+                                    Some(value_val) => value_val.to_owned(),
+                                    _ => serde_json::Value::Null,
+                                },
+                            );
+                        }
+                        metadata_val_result
+                    }
+                    _ => BTreeMap::new(),
+                };
+                let random_list = match _val_.get("randomList") {
+                    Some(serde_json::Value::Array(random_list_val)) => {
+                        let mut random_list_val_result: Vec<serde_json::Value> = Vec::new();
+                        for random_list_val_element in random_list_val {
+                            random_list_val_result.push(match Some(random_list_val_element) {
+                                Some(random_list_val_element_val) => {
+                                    random_list_val_element_val.to_owned()
+                                }
+                                _ => serde_json::Value::Null,
+                            });
+                        }
+                        random_list_val_result
+                    }
+                    _ => Vec::new(),
+                };
+                let bio = match _val_.get("bio") {
+                    Some(serde_json::Value::String(bio_val)) => Some(bio_val.to_owned()),
+                    _ => None,
+                };
+                Self {
+                    id,
+                    role,
+                    photo,
+                    created_at,
+                    num_followers,
+                    settings,
+                    recent_notifications,
+                    bookmarks,
+                    metadata,
+                    random_list,
+                    bio,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"id\":");
+        _json_output_.push_str(serialize_string(&self.id).as_str());
+        _json_output_.push_str(",\"role\":");
+        _json_output_.push_str(format!("\"{}\"", &self.role.serial_value()).as_str());
+        _json_output_.push_str(",\"photo\":");
+        match &self.photo {
+            Some(photo_val) => {
+                _json_output_.push_str(photo_val.to_json_string().as_str());
+            }
+            _ => {
+                _json_output_.push_str("null");
+            }
+        };
+        _json_output_.push_str(",\"createdAt\":");
+        _json_output_.push_str(serialize_date_time(&self.created_at, true).as_str());
+        _json_output_.push_str(",\"numFollowers\":");
+        _json_output_.push_str(&self.num_followers.to_string().as_str());
+        _json_output_.push_str(",\"settings\":");
+        _json_output_.push_str(&self.settings.to_json_string().as_str());
+        _json_output_.push_str(",\"recentNotifications\":");
+        _json_output_.push('[');
+        for (_index_, _element_) in self.recent_notifications.iter().enumerate() {
+            if _index_ != 0 {
+                _json_output_.push(',');
+            }
+            _json_output_.push_str(_element_.to_json_string().as_str());
+        }
+        _json_output_.push(']');
+        _json_output_.push_str(",\"bookmarks\":");
+        _json_output_.push('{');
+        for (_index_, (_key_, _value_)) in self.bookmarks.iter().enumerate() {
+            if _index_ != 0 {
+                _json_output_.push(',');
+            }
+            _json_output_.push_str(format!("{}:", serialize_string(_key_)).as_str());
+            _json_output_.push_str(_value_.to_json_string().as_str());
+        }
+        _json_output_.push('}');
+        _json_output_.push_str(",\"metadata\":");
+        _json_output_.push('{');
+        for (_index_, (_key_, _value_)) in self.metadata.iter().enumerate() {
+            if _index_ != 0 {
+                _json_output_.push(',');
+            }
+            _json_output_.push_str(format!("{}:", serialize_string(_key_)).as_str());
+            _json_output_.push_str(
+                serde_json::to_string(_value_)
+                    .unwrap_or("null".to_string())
+                    .as_str(),
+            );
+        }
+        _json_output_.push('}');
+        _json_output_.push_str(",\"randomList\":");
+        _json_output_.push('[');
+        for (_index_, _element_) in self.random_list.iter().enumerate() {
+            if _index_ != 0 {
+                _json_output_.push(',');
+            }
+            _json_output_.push_str(
+                serde_json::to_string(_element_)
+                    .unwrap_or("null".to_string())
+                    .as_str(),
+            );
+        }
+        _json_output_.push(']');
+        match &self.bio {
+            Some(bio_val) => {
+                _json_output_.push_str(",\"bio\":");
+                _json_output_.push_str(serialize_string(bio_val).as_str())
+            }
+            _ => {}
+        };
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("id={}", &self.id));
+        _query_parts_.push(format!("role={}", &self.role.serial_value()));
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooUsersWatchUserResponse/photo.");
+        _query_parts_.push(format!(
+            "createdAt={}",
+            serialize_date_time(&self.created_at, false)
+        ));
+        _query_parts_.push(format!("numFollowers={}", &self.num_followers));
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooUsersWatchUserResponse/settings.");
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooUsersWatchUserResponse/recentNotifications.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooUsersWatchUserResponse/bookmarks.");
+        println!("[WARNING] cannot serialize nested objects to query params. Skipping field at /FooUsersWatchUserResponse/metadata.");
+        println!("[WARNING] cannot serialize arrays to query params. Skipping field at /FooUsersWatchUserResponse/randomList.");
+        match &self.bio {
+            Some(bio_val) => {
+                _query_parts_.push(format!("bio={}", bio_val));
+            }
+            _ => {}
+        };
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooFooUsersWatchUserResponseRole {
+    Standard,
+    Admin,
+}
+
+impl ArriEnum for FooFooUsersWatchUserResponseRole {
+    fn default() -> Self {
+        FooFooUsersWatchUserResponseRole::Standard
+    }
+    fn from_string(input: String) -> Self {
+        match input.as_str() {
+            "standard" => Self::Standard,
+            "admin" => Self::Admin,
+            _ => Self::default(),
+        }
+    }
+    fn serial_value(&self) -> String {
+        match &self {
+            FooFooUsersWatchUserResponseRole::Standard => "standard".to_string(),
+            FooFooUsersWatchUserResponseRole::Admin => "admin".to_string(),
+        }
+    }
+}
+
+/// A profile picture
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooUserPhoto {
+    pub url: String,
+    pub width: f64,
+    pub height: f64,
+    pub bytes: i64,
+    /// When the photo was last updated in nanoseconds
+    pub nanoseconds: u64,
+}
+
+impl ArriModel for FooUserPhoto {
+    fn new() -> Self {
+        Self {
+            url: "".to_string(),
+            width: 0.0,
+            height: 0.0,
+            bytes: 0,
+            nanoseconds: 0,
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let url = match _val_.get("url") {
+                    Some(serde_json::Value::String(url_val)) => url_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let width = match _val_.get("width") {
+                    Some(serde_json::Value::Number(width_val)) => width_val.as_f64().unwrap_or(0.0),
+                    _ => 0.0,
+                };
+                let height = match _val_.get("height") {
+                    Some(serde_json::Value::Number(height_val)) => {
+                        height_val.as_f64().unwrap_or(0.0)
+                    }
+                    _ => 0.0,
+                };
+                let bytes = match _val_.get("bytes") {
+                    Some(serde_json::Value::String(bytes_val)) => {
+                        bytes_val.parse::<i64>().unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                let nanoseconds = match _val_.get("nanoseconds") {
+                    Some(serde_json::Value::String(nanoseconds_val)) => {
+                        nanoseconds_val.parse::<u64>().unwrap_or(0)
+                    }
+                    _ => 0,
+                };
+                Self {
+                    url,
+                    width,
+                    height,
+                    bytes,
+                    nanoseconds,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"url\":");
+        _json_output_.push_str(serialize_string(&self.url).as_str());
+        _json_output_.push_str(",\"width\":");
+        _json_output_.push_str(&self.width.to_string().as_str());
+        _json_output_.push_str(",\"height\":");
+        _json_output_.push_str(&self.height.to_string().as_str());
+        _json_output_.push_str(",\"bytes\":");
+        _json_output_.push_str(format!("\"{}\"", &self.bytes).as_str());
+        _json_output_.push_str(",\"nanoseconds\":");
+        _json_output_.push_str(format!("\"{}\"", &self.nanoseconds).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("url={}", &self.url));
+        _query_parts_.push(format!("width={}", &self.width));
+        _query_parts_.push(format!("height={}", &self.height));
+        _query_parts_.push(format!("bytes={}", &self.bytes));
+        _query_parts_.push(format!("nanoseconds={}", &self.nanoseconds));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooUserSettings {
+    pub notifications_enabled: bool,
+    pub preferred_theme: FooFooUserSettingsPreferredTheme,
+}
+
+impl ArriModel for FooUserSettings {
+    fn new() -> Self {
+        Self {
+            notifications_enabled: false,
+            preferred_theme: FooFooUserSettingsPreferredTheme::default(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let notifications_enabled = match _val_.get("notificationsEnabled") {
+                    Some(serde_json::Value::Bool(notifications_enabled_val)) => {
+                        notifications_enabled_val.to_owned()
+                    }
+                    _ => false,
+                };
+                let preferred_theme = match _val_.get("preferredTheme") {
+                    Some(serde_json::Value::String(preferred_theme_val)) => {
+                        FooFooUserSettingsPreferredTheme::from_string(
+                            preferred_theme_val.to_owned(),
+                        )
+                    }
+                    _ => FooFooUserSettingsPreferredTheme::default(),
+                };
+                Self {
+                    notifications_enabled,
+                    preferred_theme,
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"notificationsEnabled\":");
+        _json_output_.push_str(&self.notifications_enabled.to_string().as_str());
+        _json_output_.push_str(",\"preferredTheme\":");
+        _json_output_.push_str(format!("\"{}\"", &self.preferred_theme.serial_value()).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!(
+            "notificationsEnabled={}",
+            &self.notifications_enabled
+        ));
+        _query_parts_.push(format!(
+            "preferredTheme={}",
+            &self.preferred_theme.serial_value()
+        ));
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooFooUserSettingsPreferredTheme {
+    DarkMode,
+    LightMode,
+    System,
+}
+
+impl ArriEnum for FooFooUserSettingsPreferredTheme {
+    fn default() -> Self {
+        FooFooUserSettingsPreferredTheme::DarkMode
+    }
+    fn from_string(input: String) -> Self {
+        match input.as_str() {
+            "dark-mode" => Self::DarkMode,
+            "light-mode" => Self::LightMode,
+            "system" => Self::System,
+            _ => Self::default(),
+        }
+    }
+    fn serial_value(&self) -> String {
+        match &self {
+            FooFooUserSettingsPreferredTheme::DarkMode => "dark-mode".to_string(),
+            FooFooUserSettingsPreferredTheme::LightMode => "light-mode".to_string(),
+            FooFooUserSettingsPreferredTheme::System => "system".to_string(),
+        }
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum FooFooUsersWatchUserResponseRecentNotificationsElement {
+    PostLike {
+        post_id: String,
+        user_id: String,
+    },
+    PostComment {
+        post_id: String,
+        user_id: String,
+        comment_text: String,
+    },
+}
+
+impl ArriModel for FooFooUsersWatchUserResponseRecentNotificationsElement {
+    fn new() -> Self {
+        Self::PostLike {
+            post_id: "".to_string(),
+            user_id: "".to_string(),
+        }
+    }
+
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let notification_type = match _val_.get("notificationType") {
+                    Some(serde_json::Value::String(notification_type_val)) => {
+                        notification_type_val.to_owned()
+                    }
+                    _ => "".to_string(),
+                };
+                match notification_type.as_str() {
+                    "POST_LIKE" => {
+                        let post_id = match _val_.get("postId") {
+                            Some(serde_json::Value::String(post_id_val)) => post_id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let user_id = match _val_.get("userId") {
+                            Some(serde_json::Value::String(user_id_val)) => user_id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        Self::PostLike { post_id, user_id }
+                    }
+                    "POST_COMMENT" => {
+                        let post_id = match _val_.get("postId") {
+                            Some(serde_json::Value::String(post_id_val)) => post_id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let user_id = match _val_.get("userId") {
+                            Some(serde_json::Value::String(user_id_val)) => user_id_val.to_owned(),
+                            _ => "".to_string(),
+                        };
+                        let comment_text = match _val_.get("commentText") {
+                            Some(serde_json::Value::String(comment_text_val)) => {
+                                comment_text_val.to_owned()
+                            }
+                            _ => "".to_string(),
+                        };
+                        Self::PostComment {
+                            post_id,
+                            user_id,
+                            comment_text,
+                        }
+                    }
+                    _ => Self::new(),
+                }
+            }
+            _ => Self::new(),
+        }
+    }
+
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+        match &self {
+            Self::PostLike { post_id, user_id } => {
+                _json_output_.push_str("\"notificationType\":\"POST_LIKE\"");
+                _json_output_.push_str(",\"postId\":");
+                _json_output_.push_str(serialize_string(post_id).as_str());
+                _json_output_.push_str(",\"userId\":");
+                _json_output_.push_str(serialize_string(user_id).as_str());
+            }
+            Self::PostComment {
+                post_id,
+                user_id,
+                comment_text,
+            } => {
+                _json_output_.push_str("\"notificationType\":\"POST_COMMENT\"");
+                _json_output_.push_str(",\"postId\":");
+                _json_output_.push_str(serialize_string(post_id).as_str());
+                _json_output_.push_str(",\"userId\":");
+                _json_output_.push_str(serialize_string(user_id).as_str());
+                _json_output_.push_str(",\"commentText\":");
+                _json_output_.push_str(serialize_string(comment_text).as_str());
+            }
+        }
+        _json_output_.push('}');
+        _json_output_
+    }
+
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        match &self {
+            Self::PostLike { post_id, user_id } => {
+                _query_parts_.push(format!("notificationType=POST_LIKE"));
+                _query_parts_.push(format!("postId={}", post_id));
+                _query_parts_.push(format!("userId={}", user_id));
+            }
+            Self::PostComment {
+                post_id,
+                user_id,
+                comment_text,
+            } => {
+                _query_parts_.push(format!("notificationType=POST_COMMENT"));
+                _query_parts_.push(format!("postId={}", post_id));
+                _query_parts_.push(format!("userId={}", user_id));
+                _query_parts_.push(format!("commentText={}", comment_text));
+            }
+        }
+        _query_parts_.join("&")
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct FooFooUsersWatchUserResponseBookmarksValue {
+    pub post_id: String,
+    pub user_id: String,
+}
+
+impl ArriModel for FooFooUsersWatchUserResponseBookmarksValue {
+    fn new() -> Self {
+        Self {
+            post_id: "".to_string(),
+            user_id: "".to_string(),
+        }
+    }
+    fn from_json(input: serde_json::Value) -> Self {
+        match input {
+            serde_json::Value::Object(_val_) => {
+                let post_id = match _val_.get("postId") {
+                    Some(serde_json::Value::String(post_id_val)) => post_id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                let user_id = match _val_.get("userId") {
+                    Some(serde_json::Value::String(user_id_val)) => user_id_val.to_owned(),
+                    _ => "".to_string(),
+                };
+                Self { post_id, user_id }
+            }
+            _ => Self::new(),
+        }
+    }
+    fn from_json_string(input: String) -> Self {
+        match serde_json::from_str(input.as_str()) {
+            Ok(val) => Self::from_json(val),
+            _ => Self::new(),
+        }
+    }
+    fn to_json_string(&self) -> String {
+        let mut _json_output_ = "{".to_string();
+
+        _json_output_.push_str("\"postId\":");
+        _json_output_.push_str(serialize_string(&self.post_id).as_str());
+        _json_output_.push_str(",\"userId\":");
+        _json_output_.push_str(serialize_string(&self.user_id).as_str());
+        _json_output_.push('}');
+        _json_output_
+    }
+    fn to_query_params_string(&self) -> String {
+        let mut _query_parts_: Vec<String> = Vec::new();
+        _query_parts_.push(format!("postId={}", &self.post_id));
+        _query_parts_.push(format!("userId={}", &self.user_id));
+        _query_parts_.join("&")
+    }
+}
diff --git a/tests/clients/swift/Sources/TestClientPrefixed.g.swift b/tests/clients/swift/Sources/TestClientPrefixed.g.swift
new file mode 100644
index 00000000..4f78bd8c
--- /dev/null
+++ b/tests/clients/swift/Sources/TestClientPrefixed.g.swift
@@ -0,0 +1,5835 @@
+import Foundation
+import ArriClient
+
+@available(macOS 10.15, iOS 13, tvOS 13, macCatalyst 13, *)
+public class TestClientPrefixed {
+    let baseURL: String
+    let delegate: ArriRequestDelegate
+    let headers: () -> Dictionary<String, String>
+    let onError: (Error) -> Void
+    public let tests: TestClientPrefixedTestsService
+    public let users: TestClientPrefixedUsersService
+    public init(
+        baseURL: String,
+        delegate: ArriRequestDelegate,
+        headers: @escaping () -> Dictionary<String, String>,
+        onError: @escaping ((Error) -> Void) = { _ -> Void in }
+    ) {
+        self.baseURL = baseURL
+        self.delegate = delegate
+        self.headers = headers
+        self.onError = onError
+        self.tests = TestClientPrefixedTestsService(
+            baseURL: baseURL,
+            delegate: delegate,
+            headers: headers,
+            onError: onError
+        )
+        self.users = TestClientPrefixedUsersService(
+            baseURL: baseURL,
+            delegate: delegate,
+            headers: headers,
+            onError: onError
+        )    
+    }
+
+        
+}
+
+@available(macOS 10.15, iOS 13, tvOS 13, macCatalyst 13, *)
+public class TestClientPrefixedTestsService {
+    let baseURL: String
+    let delegate: ArriRequestDelegate
+    let headers: () -> Dictionary<String, String>
+    let onError: (Error) -> Void
+
+    public init(
+        baseURL: String,
+        delegate: ArriRequestDelegate,
+        headers: @escaping () -> Dictionary<String, String>,
+        onError: @escaping ((Error) -> Void) = { _ -> Void in }
+    ) {
+        self.baseURL = baseURL
+        self.delegate = delegate
+        self.headers = headers
+        self.onError = onError
+    
+    }
+    public func emptyParamsGetRequest() async throws -> FooDefaultPayload {
+        let result: FooDefaultPayload = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/empty-params-get-request",
+            method: "GET",
+            headers: self.headers,
+            clientVersion: "10",
+            params: EmptyArriModel(),
+            onError: onError
+        )
+        return result
+    }
+    public func emptyParamsPostRequest() async throws -> FooDefaultPayload {
+        let result: FooDefaultPayload = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/empty-params-post-request",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: EmptyArriModel(),
+            onError: onError
+        )
+        return result
+    }
+    public func emptyResponseGetRequest(_ params: FooDefaultPayload) async throws -> () {
+        let _: EmptyArriModel = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/empty-response-get-request",
+            method: "GET",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        
+    }
+    public func emptyResponsePostRequest(_ params: FooDefaultPayload) async throws -> () {
+        let _: EmptyArriModel = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/empty-response-post-request",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        
+    }
+    /// If the target language supports it. Generated code should mark this procedure as deprecated.
+    @available(*, deprecated)
+    public func deprecatedRpc(_ params: FooDeprecatedRpcParams) async throws -> () {
+        let _: EmptyArriModel = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/deprecated-rpc",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        
+    }
+    public func sendError(_ params: FooSendErrorParams) async throws -> () {
+        let _: EmptyArriModel = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/send-error",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        
+    }
+    public func sendObject(_ params: FooObjectWithEveryType) async throws -> FooObjectWithEveryType {
+        let result: FooObjectWithEveryType = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/send-object",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        return result
+    }
+    public func sendObjectWithNullableFields(_ params: FooObjectWithEveryNullableType) async throws -> FooObjectWithEveryNullableType {
+        let result: FooObjectWithEveryNullableType = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/send-object-with-nullable-fields",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        return result
+    }
+    public func sendObjectWithPascalCaseKeys(_ params: FooObjectWithPascalCaseKeys) async throws -> FooObjectWithPascalCaseKeys {
+        let result: FooObjectWithPascalCaseKeys = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/send-object-with-pascal-case-keys",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        return result
+    }
+    public func sendObjectWithSnakeCaseKeys(_ params: FooObjectWithSnakeCaseKeys) async throws -> FooObjectWithSnakeCaseKeys {
+        let result: FooObjectWithSnakeCaseKeys = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/send-object-with-snake-case-keys",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        return result
+    }
+    public func sendPartialObject(_ params: FooObjectWithEveryOptionalType) async throws -> FooObjectWithEveryOptionalType {
+        let result: FooObjectWithEveryOptionalType = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/send-partial-object",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        return result
+    }
+    public func sendRecursiveObject(_ params: FooRecursiveObject) async throws -> FooRecursiveObject {
+        let result: FooRecursiveObject = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/send-recursive-object",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        return result
+    }
+    public func sendRecursiveUnion(_ params: FooRecursiveUnion) async throws -> FooRecursiveUnion {
+        let result: FooRecursiveUnion = try await parsedArriHttpRequest(
+            delegate: self.delegate,
+            url: "\(self.baseURL)/rpcs/tests/send-recursive-union",
+            method: "POST",
+            headers: self.headers,
+            clientVersion: "10",
+            params: params,
+            onError: onError
+        )
+        return result
+    }
+    public func streamAutoReconnect(_ params: FooAutoReconnectParams, options: EventSourceOptions<FooAutoReconnectResponse>) -> Task<(), Never> {
+        let task = Task {
+            var eventSource = EventSource<FooAutoReconnectResponse>(
+                url: "\(self.baseURL)/rpcs/tests/stream-auto-reconnect",
+                method: "GET",
+                headers: self.headers,
+                params: params,
+                delegate: self.delegate,
+                clientVersion: "10",
+                options: options
+            )
+            await eventSource.sendRequest()
+        }
+        return task
+    }
+    /// This route will always return an error. The client should automatically retry with exponential backoff.
+    public func streamConnectionErrorTest(_ params: FooStreamConnectionErrorTestParams, options: EventSourceOptions<FooStreamConnectionErrorTestResponse>) -> Task<(), Never> {
+        let task = Task {
+            var eventSource = EventSource<FooStreamConnectionErrorTestResponse>(
+                url: "\(self.baseURL)/rpcs/tests/stream-connection-error-test",
+                method: "GET",
+                headers: self.headers,
+                params: params,
+                delegate: self.delegate,
+                clientVersion: "10",
+                options: options
+            )
+            await eventSource.sendRequest()
+        }
+        return task
+    }
+    /// Test to ensure that the client can handle receiving streams of large objects. When objects are large messages will sometimes get sent in chunks. Meaning you have to handle receiving a partial message
+    public func streamLargeObjects(options: EventSourceOptions<FooStreamLargeObjectsResponse>) -> Task<(), Never> {
+        let task = Task {
+            var eventSource = EventSource<FooStreamLargeObjectsResponse>(
+                url: "\(self.baseURL)/rpcs/tests/stream-large-objects",
+                method: "GET",
+                headers: self.headers,
+                params: nil,
+                delegate: self.delegate,
+                clientVersion: "10",
+                options: options
+            )
+            await eventSource.sendRequest()
+        }
+        return task
+    }
+    public func streamMessages(_ params: FooChatMessageParams, options: EventSourceOptions<FooChatMessage>) -> Task<(), Never> {
+        let task = Task {
+            var eventSource = EventSource<FooChatMessage>(
+                url: "\(self.baseURL)/rpcs/tests/stream-messages",
+                method: "GET",
+                headers: self.headers,
+                params: params,
+                delegate: self.delegate,
+                clientVersion: "10",
+                options: options
+            )
+            await eventSource.sendRequest()
+        }
+        return task
+    }
+    public func streamRetryWithNewCredentials(options: EventSourceOptions<FooTestsStreamRetryWithNewCredentialsResponse>) -> Task<(), Never> {
+        let task = Task {
+            var eventSource = EventSource<FooTestsStreamRetryWithNewCredentialsResponse>(
+                url: "\(self.baseURL)/rpcs/tests/stream-retry-with-new-credentials",
+                method: "GET",
+                headers: self.headers,
+                params: nil,
+                delegate: self.delegate,
+                clientVersion: "10",
+                options: options
+            )
+            await eventSource.sendRequest()
+        }
+        return task
+    }
+    /// When the client receives the 'done' event, it should close the connection and NOT reconnect
+    public func streamTenEventsThenEnd(options: EventSourceOptions<FooChatMessage>) -> Task<(), Never> {
+        let task = Task {
+            var eventSource = EventSource<FooChatMessage>(
+                url: "\(self.baseURL)/rpcs/tests/stream-ten-events-then-end",
+                method: "GET",
+                headers: self.headers,
+                params: nil,
+                delegate: self.delegate,
+                clientVersion: "10",
+                options: options
+            )
+            await eventSource.sendRequest()
+        }
+        return task
+    }
+        
+}
+
+
+@available(macOS 10.15, iOS 13, tvOS 13, macCatalyst 13, *)
+public class TestClientPrefixedUsersService {
+    let baseURL: String
+    let delegate: ArriRequestDelegate
+    let headers: () -> Dictionary<String, String>
+    let onError: (Error) -> Void
+
+    public init(
+        baseURL: String,
+        delegate: ArriRequestDelegate,
+        headers: @escaping () -> Dictionary<String, String>,
+        onError: @escaping ((Error) -> Void) = { _ -> Void in }
+    ) {
+        self.baseURL = baseURL
+        self.delegate = delegate
+        self.headers = headers
+        self.onError = onError
+    
+    }
+    public func watchUser(_ params: FooUsersWatchUserParams, options: EventSourceOptions<FooUsersWatchUserResponse>) -> Task<(), Never> {
+        let task = Task {
+            var eventSource = EventSource<FooUsersWatchUserResponse>(
+                url: "\(self.baseURL)/rpcs/users/watch-user",
+                method: "GET",
+                headers: self.headers,
+                params: params,
+                delegate: self.delegate,
+                clientVersion: "10",
+                options: options
+            )
+            await eventSource.sendRequest()
+        }
+        return task
+    }
+        
+}
+
+
+public struct FooManuallyAddedModel: ArriClientModel {
+    public var hello: String = ""
+    public init(
+        hello: String
+    ) {
+            self.hello = hello
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.hello = json["hello"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"hello\":"
+        __json += serializeString(input: self.hello)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "hello", value: self.hello))
+        return __queryParts
+    }
+    public func clone() -> FooManuallyAddedModel {
+
+        return FooManuallyAddedModel(
+            hello: self.hello
+        )
+    }
+    
+}
+    
+
+public struct FooDefaultPayload: ArriClientModel {
+    public var message: String = ""
+    public init(
+        message: String
+    ) {
+            self.message = message
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.message = json["message"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"message\":"
+        __json += serializeString(input: self.message)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "message", value: self.message))
+        return __queryParts
+    }
+    public func clone() -> FooDefaultPayload {
+
+        return FooDefaultPayload(
+            message: self.message
+        )
+    }
+    
+}
+    
+
+@available(*, deprecated)
+public struct FooDeprecatedRpcParams: ArriClientModel {
+    @available(*, deprecated)
+    public var deprecatedField: String = ""
+    public init(
+        deprecatedField: String
+    ) {
+            self.deprecatedField = deprecatedField
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.deprecatedField = json["deprecatedField"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"deprecatedField\":"
+        __json += serializeString(input: self.deprecatedField)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "deprecatedField", value: self.deprecatedField))
+        return __queryParts
+    }
+    public func clone() -> FooDeprecatedRpcParams {
+
+        return FooDeprecatedRpcParams(
+            deprecatedField: self.deprecatedField
+        )
+    }
+    
+}
+    
+
+public struct FooSendErrorParams: ArriClientModel {
+    public var code: UInt16 = 0
+    public var message: String = ""
+    public init(
+        code: UInt16,
+        message: String
+    ) {
+            self.code = code
+            self.message = message
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.code = json["code"].uInt16 ?? 0
+        self.message = json["message"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"code\":"
+        __json += "\(self.code)"
+        __json += ",\"message\":"
+        __json += serializeString(input: self.message)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "code", value: "\(self.code)"))
+        __queryParts.append(URLQueryItem(name: "message", value: self.message))
+        return __queryParts
+    }
+    public func clone() -> FooSendErrorParams {
+
+        return FooSendErrorParams(
+            code: self.code,
+            message: self.message
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryType: ArriClientModel {
+    public var any: JSON = JSON()
+    public var boolean: Bool = false
+    public var string: String = ""
+    public var timestamp: Date = Date()
+    public var float32: Float32 = 0.0
+    public var float64: Float64 = 0.0
+    public var int8: Int8 = 0
+    public var uint8: UInt8 = 0
+    public var int16: Int16 = 0
+    public var uint16: UInt16 = 0
+    public var int32: Int32 = 0
+    public var uint32: UInt32 = 0
+    public var int64: Int64 = 0
+    public var uint64: UInt64 = 0
+    public var enumerator: FooObjectWithEveryTypeEnumerator = FooObjectWithEveryTypeEnumerator.a
+    public var array: [Bool] = []
+    public var object: FooObjectWithEveryTypeObject = FooObjectWithEveryTypeObject()
+    public var record: Dictionary<String, UInt64> = Dictionary()
+    public var discriminator: FooObjectWithEveryTypeDiscriminator = FooObjectWithEveryTypeDiscriminator()
+    public var nestedObject: FooObjectWithEveryTypeNestedObject = FooObjectWithEveryTypeNestedObject()
+    public var nestedArray: [[FooObjectWithEveryTypeNestedArrayElementElement]] = []
+    public init(
+        any: JSON,
+        boolean: Bool,
+        string: String,
+        timestamp: Date,
+        float32: Float32,
+        float64: Float64,
+        int8: Int8,
+        uint8: UInt8,
+        int16: Int16,
+        uint16: UInt16,
+        int32: Int32,
+        uint32: UInt32,
+        int64: Int64,
+        uint64: UInt64,
+        enumerator: FooObjectWithEveryTypeEnumerator,
+        array: [Bool],
+        object: FooObjectWithEveryTypeObject,
+        record: Dictionary<String, UInt64>,
+        discriminator: FooObjectWithEveryTypeDiscriminator,
+        nestedObject: FooObjectWithEveryTypeNestedObject,
+        nestedArray: [[FooObjectWithEveryTypeNestedArrayElementElement]]
+    ) {
+            self.any = any
+            self.boolean = boolean
+            self.string = string
+            self.timestamp = timestamp
+            self.float32 = float32
+            self.float64 = float64
+            self.int8 = int8
+            self.uint8 = uint8
+            self.int16 = int16
+            self.uint16 = uint16
+            self.int32 = int32
+            self.uint32 = uint32
+            self.int64 = int64
+            self.uint64 = uint64
+            self.enumerator = enumerator
+            self.array = array
+            self.object = object
+            self.record = record
+            self.discriminator = discriminator
+            self.nestedObject = nestedObject
+            self.nestedArray = nestedArray
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.any = json["any"]
+        self.boolean = json["boolean"].bool ?? false
+        self.string = json["string"].string ?? ""
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+        self.float32 = json["float32"].float ?? 0.0
+        self.float64 = json["float64"].double ?? 0.0
+        self.int8 = json["int8"].int8 ?? 0
+        self.uint8 = json["uint8"].uInt8 ?? 0
+        self.int16 = json["int16"].int16 ?? 0
+        self.uint16 = json["uint16"].uInt16 ?? 0
+        self.int32 = json["int32"].int32 ?? 0
+        self.uint32 = json["uint32"].uInt32 ?? 0
+        self.int64 = Int64(json["int64"].string ?? "0") ?? 0
+        self.uint64 = UInt64(json["uint64"].string ?? "0") ?? 0
+        self.enumerator = FooObjectWithEveryTypeEnumerator(serialValue: json["enumerator"].string ?? "")
+        self.array = []
+            for __arrayJsonElement in json["array"].array ?? [] {
+                var __arrayJsonElementValue: Bool
+                        __arrayJsonElementValue = __arrayJsonElement.bool ?? false
+                self.array.append(__arrayJsonElementValue)
+            }
+        self.object = FooObjectWithEveryTypeObject(json: json["object"])
+        self.record = Dictionary()
+            for (__key, __value) in json["record"].dictionary ?? Dictionary() {
+                var __parsedValue: UInt64
+                        __parsedValue = UInt64(__value.string ?? "0") ?? 0
+                self.record[__key] = __parsedValue            
+            }
+        self.discriminator = FooObjectWithEveryTypeDiscriminator(json: json["discriminator"])
+        self.nestedObject = FooObjectWithEveryTypeNestedObject(json: json["nestedObject"])
+        self.nestedArray = []
+            for __nestedArrayJsonElement in json["nestedArray"].array ?? [] {
+                var __nestedArrayJsonElementValue: [FooObjectWithEveryTypeNestedArrayElementElement]
+                        __nestedArrayJsonElementValue = []
+            for __elementJsonElement in __nestedArrayJsonElement.array ?? [] {
+                var __elementJsonElementValue: FooObjectWithEveryTypeNestedArrayElementElement
+                        __elementJsonElementValue = FooObjectWithEveryTypeNestedArrayElementElement(json: __elementJsonElement)
+                __nestedArrayJsonElementValue.append(__elementJsonElementValue)
+            }
+                self.nestedArray.append(__nestedArrayJsonElementValue)
+            }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"any\":"
+        __json += serializeAny(input: self.any)
+        __json += ",\"boolean\":"
+        __json += "\(self.boolean)"
+        __json += ",\"string\":"
+        __json += serializeString(input: self.string)
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += ",\"float32\":"
+        __json += "\(self.float32)"
+        __json += ",\"float64\":"
+        __json += "\(self.float64)"
+        __json += ",\"int8\":"
+        __json += "\(self.int8)"
+        __json += ",\"uint8\":"
+        __json += "\(self.uint8)"
+        __json += ",\"int16\":"
+        __json += "\(self.int16)"
+        __json += ",\"uint16\":"
+        __json += "\(self.uint16)"
+        __json += ",\"int32\":"
+        __json += "\(self.int32)"
+        __json += ",\"uint32\":"
+        __json += "\(self.uint32)"
+        __json += ",\"int64\":"
+        __json += "\"\(self.int64)\""
+        __json += ",\"uint64\":"
+        __json += "\"\(self.uint64)\""
+        __json += ",\"enumerator\":"
+        __json += "\"\(self.enumerator.serialValue())\""
+        __json += ",\"array\":"
+       __json += "["
+            for (__index, __element) in self.array.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        __json += "\(__element)"
+            }
+            __json += "]"
+        __json += ",\"object\":"
+        __json += self.object.toJSONString()
+        __json += ",\"record\":"
+        __json += "{"
+            for (__index, (__key, __value)) in self.record.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                __json += "\(serializeString(input: __key)):"
+                        __json += "\"\(__value)\""
+            }
+            __json += "}"
+        __json += ",\"discriminator\":"
+        __json += self.discriminator.toJSONString()
+        __json += ",\"nestedObject\":"
+        __json += self.nestedObject.toJSONString()
+        __json += ",\"nestedArray\":"
+       __json += "["
+            for (__index, __element) in self.nestedArray.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                       __json += "["
+            for (__index, __element) in __element.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        __json += __element.toJSONString()
+            }
+            __json += "]"
+            }
+            __json += "]"
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        print("[WARNING] any's cannot be serialized to query params. Skipping field at /ObjectWithEveryType/any.")
+        __queryParts.append(URLQueryItem(name: "boolean", value: "\(self.boolean)"))
+        __queryParts.append(URLQueryItem(name: "string", value: self.string))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        __queryParts.append(URLQueryItem(name: "float32", value: "\(self.float32)"))
+        __queryParts.append(URLQueryItem(name: "float64", value: "\(self.float64)"))
+        __queryParts.append(URLQueryItem(name: "int8", value: "\(self.int8)"))
+        __queryParts.append(URLQueryItem(name: "uint8", value: "\(self.uint8)"))
+        __queryParts.append(URLQueryItem(name: "int16", value: "\(self.int16)"))
+        __queryParts.append(URLQueryItem(name: "uint16", value: "\(self.uint16)"))
+        __queryParts.append(URLQueryItem(name: "int32", value: "\(self.int32)"))
+        __queryParts.append(URLQueryItem(name: "uint32", value: "\(self.uint32)"))
+        __queryParts.append(URLQueryItem(name: "int64", value: "\(self.int64)"))
+        __queryParts.append(URLQueryItem(name: "uint64", value: "\(self.uint64)"))
+        __queryParts.append(URLQueryItem(name: "enumerator", value: self.enumerator.serialValue()))
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryType/array.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryType/object.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryType/record.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryType/discriminator.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryType/nestedObject.")
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryType/nestedArray.")
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryType {
+var __arrayCloned: [Bool] = []
+                for __arrayElement in self.array {
+                    
+                    __arrayCloned.append(__arrayElement)
+                }
+
+var __recordCloned: Dictionary<String, UInt64> = Dictionary()
+                    for (__recordKey, __recordValue) in self.record {
+                        
+                        __recordCloned[__recordKey] = __recordValue
+                    }
+
+
+var __nestedArrayCloned: [[FooObjectWithEveryTypeNestedArrayElementElement]] = []
+                for __nestedArrayElement in self.nestedArray {
+                    var __nestedArrayElementCloned: [FooObjectWithEveryTypeNestedArrayElementElement] = []
+                for __nestedArrayElementElement in __nestedArrayElement {
+                    
+                    __nestedArrayElementCloned.append(__nestedArrayElementElement.clone())
+                }
+                    __nestedArrayCloned.append(__nestedArrayElementCloned)
+                }
+        return FooObjectWithEveryType(
+            any: self.any,
+            boolean: self.boolean,
+            string: self.string,
+            timestamp: self.timestamp,
+            float32: self.float32,
+            float64: self.float64,
+            int8: self.int8,
+            uint8: self.uint8,
+            int16: self.int16,
+            uint16: self.uint16,
+            int32: self.int32,
+            uint32: self.uint32,
+            int64: self.int64,
+            uint64: self.uint64,
+            enumerator: self.enumerator,
+            array: __arrayCloned,
+            object: self.object.clone(),
+            record: __recordCloned,
+            discriminator: self.discriminator.clone(),
+            nestedObject: self.nestedObject.clone(),
+            nestedArray: __nestedArrayCloned
+        )
+    }
+    
+}
+    
+public enum FooObjectWithEveryTypeEnumerator: ArriClientEnum {
+    case a
+    case b
+    case c
+    public init() {
+        self = .a
+    }
+    public init(serialValue: String) {
+        switch(serialValue) {
+            case "A":
+                self = .a
+                break;
+            case "B":
+                self = .b
+                break;
+            case "C":
+                self = .c
+                break;
+            default:
+                self = .a
+        }
+    }
+    public func serialValue() -> String {
+        switch (self) {
+            case .a:
+                return "A"
+            case .b:
+                return "B"
+            case .c:
+                return "C"
+        }
+    }
+}
+public struct FooObjectWithEveryTypeObject: ArriClientModel {
+    public var string: String = ""
+    public var boolean: Bool = false
+    public var timestamp: Date = Date()
+    public init(
+        string: String,
+        boolean: Bool,
+        timestamp: Date
+    ) {
+            self.string = string
+            self.boolean = boolean
+            self.timestamp = timestamp
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.string = json["string"].string ?? ""
+        self.boolean = json["boolean"].bool ?? false
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"string\":"
+        __json += serializeString(input: self.string)
+        __json += ",\"boolean\":"
+        __json += "\(self.boolean)"
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "string", value: self.string))
+        __queryParts.append(URLQueryItem(name: "boolean", value: "\(self.boolean)"))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryTypeObject {
+
+        return FooObjectWithEveryTypeObject(
+            string: self.string,
+            boolean: self.boolean,
+            timestamp: self.timestamp
+        )
+    }
+    
+}
+    
+
+public enum FooObjectWithEveryTypeDiscriminator: ArriClientModel {
+    case a(FooObjectWithEveryTypeDiscriminatorA)
+    case b(FooObjectWithEveryTypeDiscriminatorB)
+    public init() {
+        self = .a(FooObjectWithEveryTypeDiscriminatorA())
+    }
+    public init(json: JSON) {
+        let discriminator = json["type"].string ?? ""
+        switch (discriminator) {
+            case "A":
+                self = .a(FooObjectWithEveryTypeDiscriminatorA(json: json))
+                break
+            case "B":
+                self = .b(FooObjectWithEveryTypeDiscriminatorB(json: json))
+                break
+            default:
+                self = .a(FooObjectWithEveryTypeDiscriminatorA())
+                break
+        }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        switch(self) {
+            case .a(let __innerVal):
+                return __innerVal.toJSONString()
+            case .b(let __innerVal):
+                return __innerVal.toJSONString()
+        }
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        switch(self) {
+            case .a(let __innerVal):
+                return __innerVal.toURLQueryParts()
+            case .b(let __innerVal):
+                return __innerVal.toURLQueryParts()
+        }
+    }
+    public func clone() -> FooObjectWithEveryTypeDiscriminator {
+        switch(self) {
+            case .a(let __innerVal):
+                return .a(__innerVal.clone())
+            case .b(let __innerVal):
+                return .b(__innerVal.clone())
+        }
+    }
+}
+    
+public struct FooObjectWithEveryTypeDiscriminatorA: ArriClientModel {
+    let type: String = "A"
+    public var title: String = ""
+    public init(
+        title: String
+    ) {
+            self.title = title
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.title = json["title"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"A\""
+        __json += ",\"title\":"
+        __json += serializeString(input: self.title)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "A"))
+        __queryParts.append(URLQueryItem(name: "title", value: self.title))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryTypeDiscriminatorA {
+
+        return FooObjectWithEveryTypeDiscriminatorA(
+            title: self.title
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryTypeDiscriminatorB: ArriClientModel {
+    let type: String = "B"
+    public var title: String = ""
+    public var description: String = ""
+    public init(
+        title: String,
+        description: String
+    ) {
+            self.title = title
+            self.description = description
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.title = json["title"].string ?? ""
+        self.description = json["description"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"B\""
+        __json += ",\"title\":"
+        __json += serializeString(input: self.title)
+        __json += ",\"description\":"
+        __json += serializeString(input: self.description)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "B"))
+        __queryParts.append(URLQueryItem(name: "title", value: self.title))
+        __queryParts.append(URLQueryItem(name: "description", value: self.description))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryTypeDiscriminatorB {
+
+        return FooObjectWithEveryTypeDiscriminatorB(
+            title: self.title,
+            description: self.description
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryTypeNestedObject: ArriClientModel {
+    public var id: String = ""
+    public var timestamp: Date = Date()
+    public var data: FooObjectWithEveryTypeNestedObjectData = FooObjectWithEveryTypeNestedObjectData()
+    public init(
+        id: String,
+        timestamp: Date,
+        data: FooObjectWithEveryTypeNestedObjectData
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+            self.data = data
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+        self.data = FooObjectWithEveryTypeNestedObjectData(json: json["data"])
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += ",\"data\":"
+        __json += self.data.toJSONString()
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryTypeNestedObject/data.")
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryTypeNestedObject {
+
+        return FooObjectWithEveryTypeNestedObject(
+            id: self.id,
+            timestamp: self.timestamp,
+            data: self.data.clone()
+        )
+    }
+    
+}
+    
+public struct FooObjectWithEveryTypeNestedObjectData: ArriClientModel {
+    public var id: String = ""
+    public var timestamp: Date = Date()
+    public var data: FooObjectWithEveryTypeNestedObjectDataData = FooObjectWithEveryTypeNestedObjectDataData()
+    public init(
+        id: String,
+        timestamp: Date,
+        data: FooObjectWithEveryTypeNestedObjectDataData
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+            self.data = data
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+        self.data = FooObjectWithEveryTypeNestedObjectDataData(json: json["data"])
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += ",\"data\":"
+        __json += self.data.toJSONString()
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryTypeNestedObjectData/data.")
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryTypeNestedObjectData {
+
+        return FooObjectWithEveryTypeNestedObjectData(
+            id: self.id,
+            timestamp: self.timestamp,
+            data: self.data.clone()
+        )
+    }
+    
+}
+    
+public struct FooObjectWithEveryTypeNestedObjectDataData: ArriClientModel {
+    public var id: String = ""
+    public var timestamp: Date = Date()
+    public init(
+        id: String,
+        timestamp: Date
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryTypeNestedObjectDataData {
+
+        return FooObjectWithEveryTypeNestedObjectDataData(
+            id: self.id,
+            timestamp: self.timestamp
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryTypeNestedArrayElementElement: ArriClientModel {
+    public var id: String = ""
+    public var timestamp: Date = Date()
+    public init(
+        id: String,
+        timestamp: Date
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryTypeNestedArrayElementElement {
+
+        return FooObjectWithEveryTypeNestedArrayElementElement(
+            id: self.id,
+            timestamp: self.timestamp
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryNullableType: ArriClientModel {
+    public var any: JSON = JSON(parseJSON: "null")
+    public var boolean: Bool?
+    public var string: String?
+    public var timestamp: Date?
+    public var float32: Float32?
+    public var float64: Float64?
+    public var int8: Int8?
+    public var uint8: UInt8?
+    public var int16: Int16?
+    public var uint16: UInt16?
+    public var int32: Int32?
+    public var uint32: UInt32?
+    public var int64: Int64?
+    public var uint64: UInt64?
+    public var enumerator: FooObjectWithEveryNullableTypeEnumerator?
+    public var array: [Bool?]?
+    public var object: FooObjectWithEveryNullableTypeObject?
+    public var record: Dictionary<String, UInt64?>?
+    public var discriminator: FooObjectWithEveryNullableTypeDiscriminator?
+    public var nestedObject: FooObjectWithEveryNullableTypeNestedObject?
+    public var nestedArray: [[FooObjectWithEveryNullableTypeNestedArrayElementElement?]?]?
+    public init(
+        any: JSON,
+        boolean: Bool?,
+        string: String?,
+        timestamp: Date?,
+        float32: Float32?,
+        float64: Float64?,
+        int8: Int8?,
+        uint8: UInt8?,
+        int16: Int16?,
+        uint16: UInt16?,
+        int32: Int32?,
+        uint32: UInt32?,
+        int64: Int64?,
+        uint64: UInt64?,
+        enumerator: FooObjectWithEveryNullableTypeEnumerator?,
+        array: [Bool?]?,
+        object: FooObjectWithEveryNullableTypeObject?,
+        record: Dictionary<String, UInt64?>?,
+        discriminator: FooObjectWithEveryNullableTypeDiscriminator?,
+        nestedObject: FooObjectWithEveryNullableTypeNestedObject?,
+        nestedArray: [[FooObjectWithEveryNullableTypeNestedArrayElementElement?]?]?
+    ) {
+            self.any = any
+            self.boolean = boolean
+            self.string = string
+            self.timestamp = timestamp
+            self.float32 = float32
+            self.float64 = float64
+            self.int8 = int8
+            self.uint8 = uint8
+            self.int16 = int16
+            self.uint16 = uint16
+            self.int32 = int32
+            self.uint32 = uint32
+            self.int64 = int64
+            self.uint64 = uint64
+            self.enumerator = enumerator
+            self.array = array
+            self.object = object
+            self.record = record
+            self.discriminator = discriminator
+            self.nestedObject = nestedObject
+            self.nestedArray = nestedArray
+    }
+    public init() {}
+    public init(json: JSON) {
+        if json["any"].exists() {
+            self.any = json["any"]
+        }
+        if json["boolean"].bool != nil {
+                    self.boolean = json["boolean"].bool
+                }
+        if json["string"].string != nil {
+            self.string = json["string"].string
+        }
+        if json["timestamp"].string != nil {
+                    self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+                }
+        if json["float32"].float != nil {
+                    self.float32 = json["float32"].float
+                }
+        if json["float64"].double != nil {
+                    self.float64 = json["float64"].double
+                }
+        if json["int8"].int8 != nil {
+                    self.int8 = json["int8"].int8
+                }
+        if json["uint8"].uInt8 != nil {
+                    self.uint8 = json["uint8"].uInt8
+                }
+        if json["int16"].int16 != nil {
+                    self.int16 = json["int16"].int16
+                }
+        if json["uint16"].uInt16 != nil {
+                    self.uint16 = json["uint16"].uInt16
+                }
+        if json["int32"].int32 != nil {
+                    self.int32 = json["int32"].int32
+                }
+        if json["uint32"].uInt32 != nil {
+                    self.uint32 = json["uint32"].uInt32
+                }
+        if json["int64"].string != nil {
+                    self.int64 = Int64(json["int64"].string ?? "0")
+                }
+        if json["uint64"].string != nil {
+                    self.uint64 = UInt64(json["uint64"].string ?? "0")
+                }
+        if json["enumerator"].string != nil {
+                    self.enumerator = FooObjectWithEveryNullableTypeEnumerator(serialValue: json["enumerator"].string ?? "")
+                }
+        if json["array"].array != nil {
+        self.array = []
+            for __arrayJsonElement in json["array"].array ?? [] {
+                var __arrayJsonElementValue: Bool?
+                        if __arrayJsonElement.bool != nil {
+                    __arrayJsonElementValue = __arrayJsonElement.bool
+                }
+                self.array!.append(__arrayJsonElementValue)
+            }
+                }
+        if json["object"].dictionary != nil {
+                    self.object = FooObjectWithEveryNullableTypeObject(json: json["object"])
+                }
+        if json["record"].dictionary != nil {
+        self.record = Dictionary()
+            for (__key, __value) in json["record"].dictionary ?? Dictionary() {
+                var __parsedValue: UInt64?
+                        if __value.string != nil {
+                    __parsedValue = UInt64(__value.string ?? "0")
+                }
+                self.record![__key] = __parsedValue            
+            }
+                }
+        if json["discriminator"].dictionary != nil {
+                    self.discriminator = FooObjectWithEveryNullableTypeDiscriminator(json: json["discriminator"])
+                }
+        if json["nestedObject"].dictionary != nil {
+                    self.nestedObject = FooObjectWithEveryNullableTypeNestedObject(json: json["nestedObject"])
+                }
+        if json["nestedArray"].array != nil {
+        self.nestedArray = []
+            for __nestedArrayJsonElement in json["nestedArray"].array ?? [] {
+                var __nestedArrayJsonElementValue: [FooObjectWithEveryNullableTypeNestedArrayElementElement?]?
+                        if __nestedArrayJsonElement.array != nil {
+        __nestedArrayJsonElementValue = []
+            for __elementJsonElement in __nestedArrayJsonElement.array ?? [] {
+                var __elementJsonElementValue: FooObjectWithEveryNullableTypeNestedArrayElementElement?
+                        if __elementJsonElement.dictionary != nil {
+                    __elementJsonElementValue = FooObjectWithEveryNullableTypeNestedArrayElementElement(json: __elementJsonElement)
+                }
+                __nestedArrayJsonElementValue!.append(__elementJsonElementValue)
+            }
+                }
+                self.nestedArray!.append(__nestedArrayJsonElementValue)
+            }
+                }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"any\":"
+        __json += serializeAny(input: self.any)
+        __json += ",\"boolean\":"
+        if self.boolean != nil {
+                    __json += "\(self.boolean!)"
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"string\":"
+        if self.string != nil {
+                    __json += serializeString(input: self.string!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"timestamp\":"
+        if self.timestamp != nil {
+                    __json += serializeDate(self.timestamp!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"float32\":"
+        if self.float32 != nil {
+                    __json += "\(self.float32!)"
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"float64\":"
+        if self.float64 != nil {
+                    __json += "\(self.float64!)"
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"int8\":"
+        if self.int8 != nil {
+                    __json += "\(self.int8!)"
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"uint8\":"
+        if self.uint8 != nil {
+                    __json += "\(self.uint8!)"
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"int16\":"
+        if self.int16 != nil {
+                    __json += "\(self.int16!)"
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"uint16\":"
+        if self.uint16 != nil {
+                    __json += "\(self.uint16!)"
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"int32\":"
+        if self.int32 != nil {
+                    __json += "\(self.int32!)"
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"uint32\":"
+        if self.uint32 != nil {
+                    __json += "\(self.uint32!)"
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"int64\":"
+        if self.int64 != nil {
+                    __json += "\"\(self.int64!)\""
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"uint64\":"
+        if self.uint64 != nil {
+                    __json += "\"\(self.uint64!)\""
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"enumerator\":"
+        if self.enumerator != nil {
+                    __json += "\"\(self.enumerator!.serialValue())\""
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"array\":"
+        if self.array != nil {
+                           __json += "["
+            for (__index, __element) in self.array!.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        if __element != nil {
+                    __json += "\(__element!)"
+                } else {
+                    __json += "null" 
+                }
+            }
+            __json += "]"
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"object\":"
+        if self.object != nil {
+                    __json += self.object!.toJSONString()
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"record\":"
+if self.record != nil {
+                            __json += "{"
+            for (__index, (__key, __value)) in self.record!.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                __json += "\(serializeString(input: __key)):"
+                        if __value != nil {
+                    __json += "\"\(__value!)\""
+                } else {
+                    __json += "null" 
+                }
+            }
+            __json += "}"
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"discriminator\":"
+        if self.discriminator != nil {
+                    __json += self.discriminator!.toJSONString()
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"nestedObject\":"
+        if self.nestedObject != nil {
+                    __json += self.nestedObject!.toJSONString()
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"nestedArray\":"
+        if self.nestedArray != nil {
+                           __json += "["
+            for (__index, __element) in self.nestedArray!.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        if __element != nil {
+                           __json += "["
+            for (__index, __element) in __element!.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        if __element != nil {
+                    __json += __element!.toJSONString()
+                } else {
+                    __json += "null" 
+                }
+            }
+            __json += "]"
+                } else {
+                    __json += "null" 
+                }
+            }
+            __json += "]"
+                } else {
+                    __json += "null" 
+                }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        print("[WARNING] any's cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/any.")
+        if self.boolean != nil {
+                    __queryParts.append(URLQueryItem(name: "boolean", value: "\(self.boolean!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "boolean", value: "null")) 
+                }
+        if self.string != nil {
+                    __queryParts.append(URLQueryItem(name: "string", value: self.string!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "string", value: "null")) 
+                }
+        if self.timestamp != nil {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp!, withQuotes: false)))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: "null")) 
+                }
+        if self.float32 != nil {
+                    __queryParts.append(URLQueryItem(name: "float32", value: "\(self.float32!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "float32", value: "null")) 
+                }
+        if self.float64 != nil {
+                    __queryParts.append(URLQueryItem(name: "float64", value: "\(self.float64!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "float64", value: "null")) 
+                }
+        if self.int8 != nil {
+                    __queryParts.append(URLQueryItem(name: "int8", value: "\(self.int8!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "int8", value: "null")) 
+                }
+        if self.uint8 != nil {
+                    __queryParts.append(URLQueryItem(name: "uint8", value: "\(self.uint8!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "uint8", value: "null")) 
+                }
+        if self.int16 != nil {
+                    __queryParts.append(URLQueryItem(name: "int16", value: "\(self.int16!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "int16", value: "null")) 
+                }
+        if self.uint16 != nil {
+                    __queryParts.append(URLQueryItem(name: "uint16", value: "\(self.uint16!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "uint16", value: "null")) 
+                }
+        if self.int32 != nil {
+                    __queryParts.append(URLQueryItem(name: "int32", value: "\(self.int32!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "int32", value: "null")) 
+                }
+        if self.uint32 != nil {
+                    __queryParts.append(URLQueryItem(name: "uint32", value: "\(self.uint32!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "uint32", value: "null")) 
+                }
+        if self.int64 != nil {
+                    __queryParts.append(URLQueryItem(name: "int64", value: "\(self.int64!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "int64", value: "null")) 
+                }
+        if self.uint64 != nil {
+                    __queryParts.append(URLQueryItem(name: "uint64", value: "\(self.uint64!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "uint64", value: "null")) 
+                }
+        if self.enumerator != nil {
+                    __queryParts.append(URLQueryItem(name: "enumerator", value: self.enumerator!.serialValue()))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "enumerator", value: "null")) 
+                }
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/array.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/object.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/record.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/discriminator.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/nestedObject.")
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableType/nestedArray.")
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryNullableType {
+var __arrayCloned: [Bool?]?
+                if self.array != nil {
+                    __arrayCloned = []
+                    for __arrayElement in self.array! {
+                        
+                        __arrayCloned!.append(__arrayElement)
+                    }
+                }
+
+var __recordCloned: Dictionary<String, UInt64?>?
+                    if self.record != nil {
+                        __recordCloned = Dictionary()
+                        for (__recordKey, __recordValue) in self.record! {
+                            
+                            __recordCloned![__recordKey] = __recordValue
+                        }          
+                    }
+
+
+var __nestedArrayCloned: [[FooObjectWithEveryNullableTypeNestedArrayElementElement?]?]?
+                if self.nestedArray != nil {
+                    __nestedArrayCloned = []
+                    for __nestedArrayElement in self.nestedArray! {
+                        var __nestedArrayElementCloned: [FooObjectWithEveryNullableTypeNestedArrayElementElement?]?
+                if __nestedArrayElement != nil {
+                    __nestedArrayElementCloned = []
+                    for __nestedArrayElementElement in __nestedArrayElement! {
+                        
+                        __nestedArrayElementCloned!.append(__nestedArrayElementElement?.clone())
+                    }
+                }
+                        __nestedArrayCloned!.append(__nestedArrayElementCloned)
+                    }
+                }
+        return FooObjectWithEveryNullableType(
+            any: self.any,
+            boolean: self.boolean,
+            string: self.string,
+            timestamp: self.timestamp,
+            float32: self.float32,
+            float64: self.float64,
+            int8: self.int8,
+            uint8: self.uint8,
+            int16: self.int16,
+            uint16: self.uint16,
+            int32: self.int32,
+            uint32: self.uint32,
+            int64: self.int64,
+            uint64: self.uint64,
+            enumerator: self.enumerator,
+            array: __arrayCloned,
+            object: self.object?.clone(),
+            record: __recordCloned,
+            discriminator: self.discriminator?.clone(),
+            nestedObject: self.nestedObject?.clone(),
+            nestedArray: __nestedArrayCloned
+        )
+    }
+    
+}
+    
+public enum FooObjectWithEveryNullableTypeEnumerator: ArriClientEnum {
+    case a
+    case b
+    case c
+    public init() {
+        self = .a
+    }
+    public init(serialValue: String) {
+        switch(serialValue) {
+            case "A":
+                self = .a
+                break;
+            case "B":
+                self = .b
+                break;
+            case "C":
+                self = .c
+                break;
+            default:
+                self = .a
+        }
+    }
+    public func serialValue() -> String {
+        switch (self) {
+            case .a:
+                return "A"
+            case .b:
+                return "B"
+            case .c:
+                return "C"
+        }
+    }
+}
+public struct FooObjectWithEveryNullableTypeObject: ArriClientModel {
+    public var string: String?
+    public var boolean: Bool?
+    public var timestamp: Date?
+    public init(
+        string: String?,
+        boolean: Bool?,
+        timestamp: Date?
+    ) {
+            self.string = string
+            self.boolean = boolean
+            self.timestamp = timestamp
+    }
+    public init() {}
+    public init(json: JSON) {
+        if json["string"].string != nil {
+            self.string = json["string"].string
+        }
+        if json["boolean"].bool != nil {
+                    self.boolean = json["boolean"].bool
+                }
+        if json["timestamp"].string != nil {
+                    self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+                }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"string\":"
+        if self.string != nil {
+                    __json += serializeString(input: self.string!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"boolean\":"
+        if self.boolean != nil {
+                    __json += "\(self.boolean!)"
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"timestamp\":"
+        if self.timestamp != nil {
+                    __json += serializeDate(self.timestamp!)
+                } else {
+                    __json += "null" 
+                }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        if self.string != nil {
+                    __queryParts.append(URLQueryItem(name: "string", value: self.string!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "string", value: "null")) 
+                }
+        if self.boolean != nil {
+                    __queryParts.append(URLQueryItem(name: "boolean", value: "\(self.boolean!)"))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "boolean", value: "null")) 
+                }
+        if self.timestamp != nil {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp!, withQuotes: false)))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: "null")) 
+                }
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryNullableTypeObject {
+
+        return FooObjectWithEveryNullableTypeObject(
+            string: self.string,
+            boolean: self.boolean,
+            timestamp: self.timestamp
+        )
+    }
+    
+}
+    
+
+public enum FooObjectWithEveryNullableTypeDiscriminator: ArriClientModel {
+    case a(FooObjectWithEveryNullableTypeDiscriminatorA)
+    case b(FooObjectWithEveryNullableTypeDiscriminatorB)
+    public init() {
+        self = .a(FooObjectWithEveryNullableTypeDiscriminatorA())
+    }
+    public init(json: JSON) {
+        let discriminator = json["type"].string ?? ""
+        switch (discriminator) {
+            case "A":
+                self = .a(FooObjectWithEveryNullableTypeDiscriminatorA(json: json))
+                break
+            case "B":
+                self = .b(FooObjectWithEveryNullableTypeDiscriminatorB(json: json))
+                break
+            default:
+                self = .a(FooObjectWithEveryNullableTypeDiscriminatorA())
+                break
+        }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        switch(self) {
+            case .a(let __innerVal):
+                return __innerVal.toJSONString()
+            case .b(let __innerVal):
+                return __innerVal.toJSONString()
+        }
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        switch(self) {
+            case .a(let __innerVal):
+                return __innerVal.toURLQueryParts()
+            case .b(let __innerVal):
+                return __innerVal.toURLQueryParts()
+        }
+    }
+    public func clone() -> FooObjectWithEveryNullableTypeDiscriminator {
+        switch(self) {
+            case .a(let __innerVal):
+                return .a(__innerVal.clone())
+            case .b(let __innerVal):
+                return .b(__innerVal.clone())
+        }
+    }
+}
+    
+public struct FooObjectWithEveryNullableTypeDiscriminatorA: ArriClientModel {
+    let type: String = "A"
+    public var title: String?
+    public init(
+        title: String?
+    ) {
+            self.title = title
+    }
+    public init() {}
+    public init(json: JSON) {
+        if json["title"].string != nil {
+            self.title = json["title"].string
+        }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"A\""
+        __json += ",\"title\":"
+        if self.title != nil {
+                    __json += serializeString(input: self.title!)
+                } else {
+                    __json += "null" 
+                }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "A"))
+        if self.title != nil {
+                    __queryParts.append(URLQueryItem(name: "title", value: self.title!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "title", value: "null")) 
+                }
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryNullableTypeDiscriminatorA {
+
+        return FooObjectWithEveryNullableTypeDiscriminatorA(
+            title: self.title
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryNullableTypeDiscriminatorB: ArriClientModel {
+    let type: String = "B"
+    public var title: String?
+    public var description: String?
+    public init(
+        title: String?,
+        description: String?
+    ) {
+            self.title = title
+            self.description = description
+    }
+    public init() {}
+    public init(json: JSON) {
+        if json["title"].string != nil {
+            self.title = json["title"].string
+        }
+        if json["description"].string != nil {
+            self.description = json["description"].string
+        }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"B\""
+        __json += ",\"title\":"
+        if self.title != nil {
+                    __json += serializeString(input: self.title!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"description\":"
+        if self.description != nil {
+                    __json += serializeString(input: self.description!)
+                } else {
+                    __json += "null" 
+                }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "B"))
+        if self.title != nil {
+                    __queryParts.append(URLQueryItem(name: "title", value: self.title!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "title", value: "null")) 
+                }
+        if self.description != nil {
+                    __queryParts.append(URLQueryItem(name: "description", value: self.description!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "description", value: "null")) 
+                }
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryNullableTypeDiscriminatorB {
+
+        return FooObjectWithEveryNullableTypeDiscriminatorB(
+            title: self.title,
+            description: self.description
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryNullableTypeNestedObject: ArriClientModel {
+    public var id: String?
+    public var timestamp: Date?
+    public var data: FooObjectWithEveryNullableTypeNestedObjectData?
+    public init(
+        id: String?,
+        timestamp: Date?,
+        data: FooObjectWithEveryNullableTypeNestedObjectData?
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+            self.data = data
+    }
+    public init() {}
+    public init(json: JSON) {
+        if json["id"].string != nil {
+            self.id = json["id"].string
+        }
+        if json["timestamp"].string != nil {
+                    self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+                }
+        if json["data"].dictionary != nil {
+                    self.data = FooObjectWithEveryNullableTypeNestedObjectData(json: json["data"])
+                }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        if self.id != nil {
+                    __json += serializeString(input: self.id!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"timestamp\":"
+        if self.timestamp != nil {
+                    __json += serializeDate(self.timestamp!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"data\":"
+        if self.data != nil {
+                    __json += self.data!.toJSONString()
+                } else {
+                    __json += "null" 
+                }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        if self.id != nil {
+                    __queryParts.append(URLQueryItem(name: "id", value: self.id!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "id", value: "null")) 
+                }
+        if self.timestamp != nil {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp!, withQuotes: false)))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: "null")) 
+                }
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableTypeNestedObject/data.")
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryNullableTypeNestedObject {
+
+        return FooObjectWithEveryNullableTypeNestedObject(
+            id: self.id,
+            timestamp: self.timestamp,
+            data: self.data?.clone()
+        )
+    }
+    
+}
+    
+public struct FooObjectWithEveryNullableTypeNestedObjectData: ArriClientModel {
+    public var id: String?
+    public var timestamp: Date?
+    public var data: FooObjectWithEveryNullableTypeNestedObjectDataData?
+    public init(
+        id: String?,
+        timestamp: Date?,
+        data: FooObjectWithEveryNullableTypeNestedObjectDataData?
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+            self.data = data
+    }
+    public init() {}
+    public init(json: JSON) {
+        if json["id"].string != nil {
+            self.id = json["id"].string
+        }
+        if json["timestamp"].string != nil {
+                    self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+                }
+        if json["data"].dictionary != nil {
+                    self.data = FooObjectWithEveryNullableTypeNestedObjectDataData(json: json["data"])
+                }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        if self.id != nil {
+                    __json += serializeString(input: self.id!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"timestamp\":"
+        if self.timestamp != nil {
+                    __json += serializeDate(self.timestamp!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"data\":"
+        if self.data != nil {
+                    __json += self.data!.toJSONString()
+                } else {
+                    __json += "null" 
+                }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        if self.id != nil {
+                    __queryParts.append(URLQueryItem(name: "id", value: self.id!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "id", value: "null")) 
+                }
+        if self.timestamp != nil {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp!, withQuotes: false)))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: "null")) 
+                }
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryNullableTypeNestedObjectData/data.")
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryNullableTypeNestedObjectData {
+
+        return FooObjectWithEveryNullableTypeNestedObjectData(
+            id: self.id,
+            timestamp: self.timestamp,
+            data: self.data?.clone()
+        )
+    }
+    
+}
+    
+public struct FooObjectWithEveryNullableTypeNestedObjectDataData: ArriClientModel {
+    public var id: String?
+    public var timestamp: Date?
+    public init(
+        id: String?,
+        timestamp: Date?
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+    }
+    public init() {}
+    public init(json: JSON) {
+        if json["id"].string != nil {
+            self.id = json["id"].string
+        }
+        if json["timestamp"].string != nil {
+                    self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+                }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        if self.id != nil {
+                    __json += serializeString(input: self.id!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"timestamp\":"
+        if self.timestamp != nil {
+                    __json += serializeDate(self.timestamp!)
+                } else {
+                    __json += "null" 
+                }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        if self.id != nil {
+                    __queryParts.append(URLQueryItem(name: "id", value: self.id!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "id", value: "null")) 
+                }
+        if self.timestamp != nil {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp!, withQuotes: false)))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: "null")) 
+                }
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryNullableTypeNestedObjectDataData {
+
+        return FooObjectWithEveryNullableTypeNestedObjectDataData(
+            id: self.id,
+            timestamp: self.timestamp
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryNullableTypeNestedArrayElementElement: ArriClientModel {
+    public var id: String?
+    public var timestamp: Date?
+    public init(
+        id: String?,
+        timestamp: Date?
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+    }
+    public init() {}
+    public init(json: JSON) {
+        if json["id"].string != nil {
+            self.id = json["id"].string
+        }
+        if json["timestamp"].string != nil {
+                    self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+                }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        if self.id != nil {
+                    __json += serializeString(input: self.id!)
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"timestamp\":"
+        if self.timestamp != nil {
+                    __json += serializeDate(self.timestamp!)
+                } else {
+                    __json += "null" 
+                }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        if self.id != nil {
+                    __queryParts.append(URLQueryItem(name: "id", value: self.id!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "id", value: "null")) 
+                }
+        if self.timestamp != nil {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp!, withQuotes: false)))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: "null")) 
+                }
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryNullableTypeNestedArrayElementElement {
+
+        return FooObjectWithEveryNullableTypeNestedArrayElementElement(
+            id: self.id,
+            timestamp: self.timestamp
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithPascalCaseKeys: ArriClientModel {
+    public var createdAt: Date = Date()
+    public var displayName: String = ""
+    public var phoneNumber: String?
+    public var emailAddress: String?
+    public var isAdmin: Bool?
+    public init(
+        createdAt: Date,
+        displayName: String,
+        phoneNumber: String?,
+        emailAddress: String?,
+        isAdmin: Bool?
+    ) {
+            self.createdAt = createdAt
+            self.displayName = displayName
+            self.phoneNumber = phoneNumber
+            self.emailAddress = emailAddress
+            self.isAdmin = isAdmin
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.createdAt = parseDate(json["CreatedAt"].string ?? "") ?? Date()
+        self.displayName = json["DisplayName"].string ?? ""
+        if json["PhoneNumber"].string != nil {
+            self.phoneNumber = json["PhoneNumber"].string
+        }
+        if json["EmailAddress"].exists() {
+            self.emailAddress = json["EmailAddress"].string    
+        }
+        if json["IsAdmin"].exists() {
+                    self.isAdmin = json["IsAdmin"].bool
+                }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"CreatedAt\":"
+        __json += serializeDate(self.createdAt)
+        __json += ",\"DisplayName\":"
+        __json += serializeString(input: self.displayName)
+        __json += ",\"PhoneNumber\":"
+        if self.phoneNumber != nil {
+                    __json += serializeString(input: self.phoneNumber!)
+                } else {
+                    __json += "null" 
+                }
+        if self.emailAddress != nil {
+                    __json += ",\"EmailAddress\":"
+        __json += serializeString(input: self.emailAddress!)
+        }
+        if self.isAdmin != nil {
+                    __json += ",\"IsAdmin\":"
+__json += "\(self.isAdmin!)"
+        }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "CreatedAt", value: serializeDate(self.createdAt, withQuotes: false)))
+        __queryParts.append(URLQueryItem(name: "DisplayName", value: self.displayName))
+        if self.phoneNumber != nil {
+                    __queryParts.append(URLQueryItem(name: "PhoneNumber", value: self.phoneNumber!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "PhoneNumber", value: "null")) 
+                }
+        if self.emailAddress != nil {
+                    __queryParts.append(URLQueryItem(name: "EmailAddress", value: self.emailAddress!))
+                }
+        if self.isAdmin != nil {
+                    __queryParts.append(URLQueryItem(name: "IsAdmin", value: "\(self.isAdmin!)"))
+                }
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithPascalCaseKeys {
+
+        return FooObjectWithPascalCaseKeys(
+            createdAt: self.createdAt,
+            displayName: self.displayName,
+            phoneNumber: self.phoneNumber,
+            emailAddress: self.emailAddress,
+            isAdmin: self.isAdmin
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithSnakeCaseKeys: ArriClientModel {
+    public var createdAt: Date = Date()
+    public var displayName: String = ""
+    public var phoneNumber: String?
+    public var emailAddress: String?
+    public var isAdmin: Bool?
+    public init(
+        createdAt: Date,
+        displayName: String,
+        phoneNumber: String?,
+        emailAddress: String?,
+        isAdmin: Bool?
+    ) {
+            self.createdAt = createdAt
+            self.displayName = displayName
+            self.phoneNumber = phoneNumber
+            self.emailAddress = emailAddress
+            self.isAdmin = isAdmin
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.createdAt = parseDate(json["created_at"].string ?? "") ?? Date()
+        self.displayName = json["display_name"].string ?? ""
+        if json["phone_number"].string != nil {
+            self.phoneNumber = json["phone_number"].string
+        }
+        if json["email_address"].exists() {
+            self.emailAddress = json["email_address"].string    
+        }
+        if json["is_admin"].exists() {
+                    self.isAdmin = json["is_admin"].bool
+                }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"created_at\":"
+        __json += serializeDate(self.createdAt)
+        __json += ",\"display_name\":"
+        __json += serializeString(input: self.displayName)
+        __json += ",\"phone_number\":"
+        if self.phoneNumber != nil {
+                    __json += serializeString(input: self.phoneNumber!)
+                } else {
+                    __json += "null" 
+                }
+        if self.emailAddress != nil {
+                    __json += ",\"email_address\":"
+        __json += serializeString(input: self.emailAddress!)
+        }
+        if self.isAdmin != nil {
+                    __json += ",\"is_admin\":"
+__json += "\(self.isAdmin!)"
+        }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "created_at", value: serializeDate(self.createdAt, withQuotes: false)))
+        __queryParts.append(URLQueryItem(name: "display_name", value: self.displayName))
+        if self.phoneNumber != nil {
+                    __queryParts.append(URLQueryItem(name: "phone_number", value: self.phoneNumber!))
+                } else {
+                    __queryParts.append(URLQueryItem(name: "phone_number", value: "null")) 
+                }
+        if self.emailAddress != nil {
+                    __queryParts.append(URLQueryItem(name: "email_address", value: self.emailAddress!))
+                }
+        if self.isAdmin != nil {
+                    __queryParts.append(URLQueryItem(name: "is_admin", value: "\(self.isAdmin!)"))
+                }
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithSnakeCaseKeys {
+
+        return FooObjectWithSnakeCaseKeys(
+            createdAt: self.createdAt,
+            displayName: self.displayName,
+            phoneNumber: self.phoneNumber,
+            emailAddress: self.emailAddress,
+            isAdmin: self.isAdmin
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryOptionalType: ArriClientModel {
+    public var any: JSON?
+    public var boolean: Bool?
+    public var string: String?
+    public var timestamp: Date?
+    public var float32: Float32?
+    public var float64: Float64?
+    public var int8: Int8?
+    public var uint8: UInt8?
+    public var int16: Int16?
+    public var uint16: UInt16?
+    public var int32: Int32?
+    public var uint32: UInt32?
+    public var int64: Int64?
+    public var uint64: UInt64?
+    public var enumerator: FooObjectWithEveryOptionalTypeEnumerator?
+    public var array: [Bool]?
+    public var object: FooObjectWithEveryOptionalTypeObject?
+    public var record: Dictionary<String, UInt64>?
+    public var discriminator: FooObjectWithEveryOptionalTypeDiscriminator?
+    public var nestedObject: FooObjectWithEveryOptionalTypeNestedObject?
+    public var nestedArray: [[FooObjectWithEveryOptionalTypeNestedArrayElementElement]]?
+    public init(
+        any: JSON?,
+        boolean: Bool?,
+        string: String?,
+        timestamp: Date?,
+        float32: Float32?,
+        float64: Float64?,
+        int8: Int8?,
+        uint8: UInt8?,
+        int16: Int16?,
+        uint16: UInt16?,
+        int32: Int32?,
+        uint32: UInt32?,
+        int64: Int64?,
+        uint64: UInt64?,
+        enumerator: FooObjectWithEveryOptionalTypeEnumerator?,
+        array: [Bool]?,
+        object: FooObjectWithEveryOptionalTypeObject?,
+        record: Dictionary<String, UInt64>?,
+        discriminator: FooObjectWithEveryOptionalTypeDiscriminator?,
+        nestedObject: FooObjectWithEveryOptionalTypeNestedObject?,
+        nestedArray: [[FooObjectWithEveryOptionalTypeNestedArrayElementElement]]?
+    ) {
+            self.any = any
+            self.boolean = boolean
+            self.string = string
+            self.timestamp = timestamp
+            self.float32 = float32
+            self.float64 = float64
+            self.int8 = int8
+            self.uint8 = uint8
+            self.int16 = int16
+            self.uint16 = uint16
+            self.int32 = int32
+            self.uint32 = uint32
+            self.int64 = int64
+            self.uint64 = uint64
+            self.enumerator = enumerator
+            self.array = array
+            self.object = object
+            self.record = record
+            self.discriminator = discriminator
+            self.nestedObject = nestedObject
+            self.nestedArray = nestedArray
+    }
+    public init() {}
+    public init(json: JSON) {
+        if json["any"].exists() {
+            self.any = json["any"]
+        }
+        if json["boolean"].exists() {
+                    self.boolean = json["boolean"].bool
+                }
+        if json["string"].exists() {
+            self.string = json["string"].string    
+        }
+        if json["timestamp"].exists() {
+                    self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+                }
+        if json["float32"].exists() {
+                    self.float32 = json["float32"].float
+                }
+        if json["float64"].exists() {
+                    self.float64 = json["float64"].double
+                }
+        if json["int8"].exists() {
+                    self.int8 = json["int8"].int8
+                }
+        if json["uint8"].exists() {
+                    self.uint8 = json["uint8"].uInt8
+                }
+        if json["int16"].exists() {
+                    self.int16 = json["int16"].int16
+                }
+        if json["uint16"].exists() {
+                    self.uint16 = json["uint16"].uInt16
+                }
+        if json["int32"].exists() {
+                    self.int32 = json["int32"].int32
+                }
+        if json["uint32"].exists() {
+                    self.uint32 = json["uint32"].uInt32
+                }
+        if json["int64"].exists() {
+                    self.int64 = Int64(json["int64"].string ?? "0")
+                }
+        if json["uint64"].exists() {
+                    self.uint64 = UInt64(json["uint64"].string ?? "0")
+                }
+        if json["enumerator"].exists() {
+                    self.enumerator = FooObjectWithEveryOptionalTypeEnumerator(serialValue: json["enumerator"].string ?? "")
+                }
+        if json["array"].exists() {
+        self.array = []
+            for __arrayJsonElement in json["array"].array ?? [] {
+                var __arrayJsonElementValue: Bool
+                        __arrayJsonElementValue = __arrayJsonElement.bool ?? false
+                self.array!.append(__arrayJsonElementValue)
+            }
+                }
+         if json["object"].exists() {
+                    self.object = FooObjectWithEveryOptionalTypeObject(json: json["object"])
+                }
+        if json["record"].exists() {
+        self.record = Dictionary()
+            for (__key, __value) in json["record"].dictionary ?? Dictionary() {
+                var __parsedValue: UInt64
+                        __parsedValue = UInt64(__value.string ?? "0") ?? 0
+                self.record![__key] = __parsedValue            
+            }
+                }
+        if json["discriminator"].exists() {
+                    self.discriminator = FooObjectWithEveryOptionalTypeDiscriminator(json: json["discriminator"])
+                }
+         if json["nestedObject"].exists() {
+                    self.nestedObject = FooObjectWithEveryOptionalTypeNestedObject(json: json["nestedObject"])
+                }
+        if json["nestedArray"].exists() {
+        self.nestedArray = []
+            for __nestedArrayJsonElement in json["nestedArray"].array ?? [] {
+                var __nestedArrayJsonElementValue: [FooObjectWithEveryOptionalTypeNestedArrayElementElement]
+                        __nestedArrayJsonElementValue = []
+            for __elementJsonElement in __nestedArrayJsonElement.array ?? [] {
+                var __elementJsonElementValue: FooObjectWithEveryOptionalTypeNestedArrayElementElement
+                        __elementJsonElementValue = FooObjectWithEveryOptionalTypeNestedArrayElementElement(json: __elementJsonElement)
+                __nestedArrayJsonElementValue.append(__elementJsonElementValue)
+            }
+                self.nestedArray!.append(__nestedArrayJsonElementValue)
+            }
+                }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+      var __numKeys = 0
+        if self.any != nil {
+                        __json += "\"any\":"
+        __json += serializeAny(input: self.any!)            
+__numKeys += 1
+        }
+        if self.boolean != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"boolean\":"
+__json += "\(self.boolean!)"            
+__numKeys += 1
+        }
+        if self.string != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"string\":"
+        __json += serializeString(input: self.string!)            
+__numKeys += 1
+        }
+        if self.timestamp != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"timestamp\":"
+        __json += serializeDate(self.timestamp!)            
+__numKeys += 1
+        }
+        if self.float32 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"float32\":"
+        __json += "\(self.float32!)"            
+__numKeys += 1
+        }
+        if self.float64 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"float64\":"
+        __json += "\(self.float64!)"            
+__numKeys += 1
+        }
+        if self.int8 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"int8\":"
+        __json += "\(self.int8!)"            
+__numKeys += 1
+        }
+        if self.uint8 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"uint8\":"
+        __json += "\(self.uint8!)"            
+__numKeys += 1
+        }
+        if self.int16 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"int16\":"
+        __json += "\(self.int16!)"            
+__numKeys += 1
+        }
+        if self.uint16 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"uint16\":"
+        __json += "\(self.uint16!)"            
+__numKeys += 1
+        }
+        if self.int32 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"int32\":"
+        __json += "\(self.int32!)"            
+__numKeys += 1
+        }
+        if self.uint32 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"uint32\":"
+        __json += "\(self.uint32!)"            
+__numKeys += 1
+        }
+        if self.int64 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"int64\":"
+        __json += "\"\(self.int64!)\""            
+__numKeys += 1
+        }
+        if self.uint64 != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"uint64\":"
+        __json += "\"\(self.uint64!)\""            
+__numKeys += 1
+        }
+        if self.enumerator != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"enumerator\":"
+        __json += "\"\(self.enumerator!.serialValue())\""            
+__numKeys += 1
+        }
+        if self.array != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"array\":"
+       __json += "["
+            for (__index, __element) in self.array!.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        __json += "\(__element)"
+            }
+            __json += "]"            
+__numKeys += 1
+        }
+        if self.object != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"object\":"
+        __json += self.object!.toJSONString()            
+__numKeys += 1
+        }
+        if self.record != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"record\":"
+        __json += "{"
+            for (__index, (__key, __value)) in self.record!.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                __json += "\(serializeString(input: __key)):"
+                        __json += "\"\(__value)\""
+            }
+            __json += "}"            
+__numKeys += 1
+        }
+        if self.discriminator != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"discriminator\":"
+        __json += self.discriminator!.toJSONString()            
+__numKeys += 1
+        }
+        if self.nestedObject != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"nestedObject\":"
+        __json += self.nestedObject!.toJSONString()            
+__numKeys += 1
+        }
+        if self.nestedArray != nil {
+                        if __numKeys > 0 {
+                    __json += ","
+                }
+            __json += "\"nestedArray\":"
+       __json += "["
+            for (__index, __element) in self.nestedArray!.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                       __json += "["
+            for (__index, __element) in __element.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        __json += __element.toJSONString()
+            }
+            __json += "]"
+            }
+            __json += "]"            
+__numKeys += 1
+        }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        print("[WARNING] any's cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/any.")
+        if self.boolean != nil {
+                    __queryParts.append(URLQueryItem(name: "boolean", value: "\(self.boolean!)"))
+                }
+        if self.string != nil {
+                    __queryParts.append(URLQueryItem(name: "string", value: self.string!))
+                }
+        if self.timestamp != nil {
+                    __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp!, withQuotes: false)))
+                }
+        if self.float32 != nil {
+                    __queryParts.append(URLQueryItem(name: "float32", value: "\(self.float32!)"))
+                }
+        if self.float64 != nil {
+                    __queryParts.append(URLQueryItem(name: "float64", value: "\(self.float64!)"))
+                }
+        if self.int8 != nil {
+                    __queryParts.append(URLQueryItem(name: "int8", value: "\(self.int8!)"))
+                }
+        if self.uint8 != nil {
+                    __queryParts.append(URLQueryItem(name: "uint8", value: "\(self.uint8!)"))
+                }
+        if self.int16 != nil {
+                    __queryParts.append(URLQueryItem(name: "int16", value: "\(self.int16!)"))
+                }
+        if self.uint16 != nil {
+                    __queryParts.append(URLQueryItem(name: "uint16", value: "\(self.uint16!)"))
+                }
+        if self.int32 != nil {
+                    __queryParts.append(URLQueryItem(name: "int32", value: "\(self.int32!)"))
+                }
+        if self.uint32 != nil {
+                    __queryParts.append(URLQueryItem(name: "uint32", value: "\(self.uint32!)"))
+                }
+        if self.int64 != nil {
+                    __queryParts.append(URLQueryItem(name: "int64", value: "\(self.int64!)"))
+                }
+        if self.uint64 != nil {
+                    __queryParts.append(URLQueryItem(name: "uint64", value: "\(self.uint64!)"))
+                }
+        if self.enumerator != nil {
+                    __queryParts.append(URLQueryItem(name: "enumerator", value: self.enumerator!.serialValue()))
+                }
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/array.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/object.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/record.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/discriminator.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/nestedObject.")
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalType/nestedArray.")
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryOptionalType {
+var __arrayCloned: [Bool]?
+                if self.array != nil {
+                    __arrayCloned = []
+                    for __arrayElement in self.array! {
+                        
+                        __arrayCloned!.append(__arrayElement)
+                    }
+                }
+
+var __recordCloned: Dictionary<String, UInt64>?
+                    if self.record != nil {
+                        __recordCloned = Dictionary()
+                        for (__recordKey, __recordValue) in self.record! {
+                            
+                            __recordCloned![__recordKey] = __recordValue
+                        }          
+                    }
+
+
+var __nestedArrayCloned: [[FooObjectWithEveryOptionalTypeNestedArrayElementElement]]?
+                if self.nestedArray != nil {
+                    __nestedArrayCloned = []
+                    for __nestedArrayElement in self.nestedArray! {
+                        var __nestedArrayElementCloned: [FooObjectWithEveryOptionalTypeNestedArrayElementElement] = []
+                for __nestedArrayElementElement in __nestedArrayElement {
+                    
+                    __nestedArrayElementCloned.append(__nestedArrayElementElement.clone())
+                }
+                        __nestedArrayCloned!.append(__nestedArrayElementCloned)
+                    }
+                }
+        return FooObjectWithEveryOptionalType(
+            any: self.any,
+            boolean: self.boolean,
+            string: self.string,
+            timestamp: self.timestamp,
+            float32: self.float32,
+            float64: self.float64,
+            int8: self.int8,
+            uint8: self.uint8,
+            int16: self.int16,
+            uint16: self.uint16,
+            int32: self.int32,
+            uint32: self.uint32,
+            int64: self.int64,
+            uint64: self.uint64,
+            enumerator: self.enumerator,
+            array: __arrayCloned,
+            object: self.object?.clone(),
+            record: __recordCloned,
+            discriminator: self.discriminator?.clone(),
+            nestedObject: self.nestedObject?.clone(),
+            nestedArray: __nestedArrayCloned
+        )
+    }
+    
+}
+    
+public enum FooObjectWithEveryOptionalTypeEnumerator: ArriClientEnum {
+    case a
+    case b
+    case c
+    public init() {
+        self = .a
+    }
+    public init(serialValue: String) {
+        switch(serialValue) {
+            case "A":
+                self = .a
+                break;
+            case "B":
+                self = .b
+                break;
+            case "C":
+                self = .c
+                break;
+            default:
+                self = .a
+        }
+    }
+    public func serialValue() -> String {
+        switch (self) {
+            case .a:
+                return "A"
+            case .b:
+                return "B"
+            case .c:
+                return "C"
+        }
+    }
+}
+public struct FooObjectWithEveryOptionalTypeObject: ArriClientModel {
+    public var string: String = ""
+    public var boolean: Bool = false
+    public var timestamp: Date = Date()
+    public init(
+        string: String,
+        boolean: Bool,
+        timestamp: Date
+    ) {
+            self.string = string
+            self.boolean = boolean
+            self.timestamp = timestamp
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.string = json["string"].string ?? ""
+        self.boolean = json["boolean"].bool ?? false
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"string\":"
+        __json += serializeString(input: self.string)
+        __json += ",\"boolean\":"
+        __json += "\(self.boolean)"
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "string", value: self.string))
+        __queryParts.append(URLQueryItem(name: "boolean", value: "\(self.boolean)"))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryOptionalTypeObject {
+
+        return FooObjectWithEveryOptionalTypeObject(
+            string: self.string,
+            boolean: self.boolean,
+            timestamp: self.timestamp
+        )
+    }
+    
+}
+    
+
+public enum FooObjectWithEveryOptionalTypeDiscriminator: ArriClientModel {
+    case a(FooObjectWithEveryOptionalTypeDiscriminatorA)
+    case b(FooObjectWithEveryOptionalTypeDiscriminatorB)
+    public init() {
+        self = .a(FooObjectWithEveryOptionalTypeDiscriminatorA())
+    }
+    public init(json: JSON) {
+        let discriminator = json["type"].string ?? ""
+        switch (discriminator) {
+            case "A":
+                self = .a(FooObjectWithEveryOptionalTypeDiscriminatorA(json: json))
+                break
+            case "B":
+                self = .b(FooObjectWithEveryOptionalTypeDiscriminatorB(json: json))
+                break
+            default:
+                self = .a(FooObjectWithEveryOptionalTypeDiscriminatorA())
+                break
+        }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        switch(self) {
+            case .a(let __innerVal):
+                return __innerVal.toJSONString()
+            case .b(let __innerVal):
+                return __innerVal.toJSONString()
+        }
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        switch(self) {
+            case .a(let __innerVal):
+                return __innerVal.toURLQueryParts()
+            case .b(let __innerVal):
+                return __innerVal.toURLQueryParts()
+        }
+    }
+    public func clone() -> FooObjectWithEveryOptionalTypeDiscriminator {
+        switch(self) {
+            case .a(let __innerVal):
+                return .a(__innerVal.clone())
+            case .b(let __innerVal):
+                return .b(__innerVal.clone())
+        }
+    }
+}
+    
+public struct FooObjectWithEveryOptionalTypeDiscriminatorA: ArriClientModel {
+    let type: String = "A"
+    public var title: String = ""
+    public init(
+        title: String
+    ) {
+            self.title = title
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.title = json["title"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"A\""
+        __json += ",\"title\":"
+        __json += serializeString(input: self.title)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "A"))
+        __queryParts.append(URLQueryItem(name: "title", value: self.title))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryOptionalTypeDiscriminatorA {
+
+        return FooObjectWithEveryOptionalTypeDiscriminatorA(
+            title: self.title
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryOptionalTypeDiscriminatorB: ArriClientModel {
+    let type: String = "B"
+    public var title: String = ""
+    public var description: String = ""
+    public init(
+        title: String,
+        description: String
+    ) {
+            self.title = title
+            self.description = description
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.title = json["title"].string ?? ""
+        self.description = json["description"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"B\""
+        __json += ",\"title\":"
+        __json += serializeString(input: self.title)
+        __json += ",\"description\":"
+        __json += serializeString(input: self.description)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "B"))
+        __queryParts.append(URLQueryItem(name: "title", value: self.title))
+        __queryParts.append(URLQueryItem(name: "description", value: self.description))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryOptionalTypeDiscriminatorB {
+
+        return FooObjectWithEveryOptionalTypeDiscriminatorB(
+            title: self.title,
+            description: self.description
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryOptionalTypeNestedObject: ArriClientModel {
+    public var id: String = ""
+    public var timestamp: Date = Date()
+    public var data: FooObjectWithEveryOptionalTypeNestedObjectData = FooObjectWithEveryOptionalTypeNestedObjectData()
+    public init(
+        id: String,
+        timestamp: Date,
+        data: FooObjectWithEveryOptionalTypeNestedObjectData
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+            self.data = data
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+        self.data = FooObjectWithEveryOptionalTypeNestedObjectData(json: json["data"])
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += ",\"data\":"
+        __json += self.data.toJSONString()
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalTypeNestedObject/data.")
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryOptionalTypeNestedObject {
+
+        return FooObjectWithEveryOptionalTypeNestedObject(
+            id: self.id,
+            timestamp: self.timestamp,
+            data: self.data.clone()
+        )
+    }
+    
+}
+    
+public struct FooObjectWithEveryOptionalTypeNestedObjectData: ArriClientModel {
+    public var id: String = ""
+    public var timestamp: Date = Date()
+    public var data: FooObjectWithEveryOptionalTypeNestedObjectDataData = FooObjectWithEveryOptionalTypeNestedObjectDataData()
+    public init(
+        id: String,
+        timestamp: Date,
+        data: FooObjectWithEveryOptionalTypeNestedObjectDataData
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+            self.data = data
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+        self.data = FooObjectWithEveryOptionalTypeNestedObjectDataData(json: json["data"])
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += ",\"data\":"
+        __json += self.data.toJSONString()
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /ObjectWithEveryOptionalTypeNestedObjectData/data.")
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryOptionalTypeNestedObjectData {
+
+        return FooObjectWithEveryOptionalTypeNestedObjectData(
+            id: self.id,
+            timestamp: self.timestamp,
+            data: self.data.clone()
+        )
+    }
+    
+}
+    
+public struct FooObjectWithEveryOptionalTypeNestedObjectDataData: ArriClientModel {
+    public var id: String = ""
+    public var timestamp: Date = Date()
+    public init(
+        id: String,
+        timestamp: Date
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryOptionalTypeNestedObjectDataData {
+
+        return FooObjectWithEveryOptionalTypeNestedObjectDataData(
+            id: self.id,
+            timestamp: self.timestamp
+        )
+    }
+    
+}
+    
+
+public struct FooObjectWithEveryOptionalTypeNestedArrayElementElement: ArriClientModel {
+    public var id: String = ""
+    public var timestamp: Date = Date()
+    public init(
+        id: String,
+        timestamp: Date
+    ) {
+            self.id = id
+            self.timestamp = timestamp
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.timestamp = parseDate(json["timestamp"].string ?? "") ?? Date()
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"timestamp\":"
+        __json += serializeDate(self.timestamp)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "timestamp", value: serializeDate(self.timestamp, withQuotes: false)))
+        return __queryParts
+    }
+    public func clone() -> FooObjectWithEveryOptionalTypeNestedArrayElementElement {
+
+        return FooObjectWithEveryOptionalTypeNestedArrayElementElement(
+            id: self.id,
+            timestamp: self.timestamp
+        )
+    }
+    
+}
+    
+
+public final class FooRecursiveObject: ArriClientModel {
+    public var left: FooRecursiveObject?
+    public var right: FooRecursiveObject?
+    public var value: String = ""
+    public required init(
+        left: FooRecursiveObject?,
+        right: FooRecursiveObject?,
+        value: String
+    ) {
+            self.left = left
+            self.right = right
+            self.value = value
+    }
+    public required init() {}
+    public required init(json: JSON) {
+if json["left"].dictionary != nil {
+                    self.left = FooRecursiveObject(json: json["left"])
+                }
+if json["right"].dictionary != nil {
+                    self.right = FooRecursiveObject(json: json["right"])
+                }
+        self.value = json["value"].string ?? ""
+    }
+    public required convenience init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public required convenience init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"left\":"
+if self.left != nil {
+                    __json += self.left!.toJSONString()
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"right\":"
+if self.right != nil {
+                    __json += self.right!.toJSONString()
+                } else {
+                    __json += "null"
+                }
+        __json += ",\"value\":"
+        __json += serializeString(input: self.value)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /RecursiveObject/left.")
+print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /RecursiveObject/right.")
+        __queryParts.append(URLQueryItem(name: "value", value: self.value))
+        return __queryParts
+    }
+    public func clone() -> FooRecursiveObject {
+
+
+        return FooRecursiveObject(
+            left: self.left?.clone(),
+            right: self.right?.clone(),
+            value: self.value
+        )
+    }
+    public static func == (lhs: FooRecursiveObject, rhs: FooRecursiveObject) -> Bool {
+            return
+               lhs.left == rhs.left &&
+               lhs.right == rhs.right &&
+               lhs.value == rhs.value
+        }
+}
+    
+
+public enum FooRecursiveUnion: ArriClientModel {
+    case child(FooRecursiveUnionChild)
+    case children(FooRecursiveUnionChildren)
+    case text(FooRecursiveUnionText)
+    case shape(FooRecursiveUnionShape)
+    public init() {
+        self = .children(FooRecursiveUnionChildren())
+    }
+    public init(json: JSON) {
+        let discriminator = json["type"].string ?? ""
+        switch (discriminator) {
+            case "CHILD":
+                self = .child(FooRecursiveUnionChild(json: json))
+                break
+            case "CHILDREN":
+                self = .children(FooRecursiveUnionChildren(json: json))
+                break
+            case "TEXT":
+                self = .text(FooRecursiveUnionText(json: json))
+                break
+            case "SHAPE":
+                self = .shape(FooRecursiveUnionShape(json: json))
+                break
+            default:
+                self = .children(FooRecursiveUnionChildren())
+                break
+        }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        switch(self) {
+            case .child(let __innerVal):
+                return __innerVal.toJSONString()
+            case .children(let __innerVal):
+                return __innerVal.toJSONString()
+            case .text(let __innerVal):
+                return __innerVal.toJSONString()
+            case .shape(let __innerVal):
+                return __innerVal.toJSONString()
+        }
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        switch(self) {
+            case .child(let __innerVal):
+                return __innerVal.toURLQueryParts()
+            case .children(let __innerVal):
+                return __innerVal.toURLQueryParts()
+            case .text(let __innerVal):
+                return __innerVal.toURLQueryParts()
+            case .shape(let __innerVal):
+                return __innerVal.toURLQueryParts()
+        }
+    }
+    public func clone() -> FooRecursiveUnion {
+        switch(self) {
+            case .child(let __innerVal):
+                return .child(__innerVal.clone())
+            case .children(let __innerVal):
+                return .children(__innerVal.clone())
+            case .text(let __innerVal):
+                return .text(__innerVal.clone())
+            case .shape(let __innerVal):
+                return .shape(__innerVal.clone())
+        }
+    }
+}
+    
+/// Child node
+public final class FooRecursiveUnionChild: ArriClientModel {
+    let type: String = "CHILD"
+    public var data: FooRecursiveUnion = FooRecursiveUnion()
+    public required init(
+        data: FooRecursiveUnion
+    ) {
+            self.data = data
+    }
+    public required init() {}
+    public required init(json: JSON) {
+self.data = FooRecursiveUnion(json: json["data"])
+    }
+    public required convenience init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public required convenience init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"CHILD\""
+        __json += ",\"data\":"
+__json += self.data.toJSONString()
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "CHILD"))
+print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /RecursiveUnionChild/data.")
+        return __queryParts
+    }
+    public func clone() -> FooRecursiveUnionChild {
+
+        return FooRecursiveUnionChild(
+            data: self.data.clone()
+        )
+    }
+    public static func == (lhs: FooRecursiveUnionChild, rhs: FooRecursiveUnionChild) -> Bool {
+            return
+               lhs.type == rhs.type &&
+               lhs.data == rhs.data
+        }
+}
+    
+
+/// List of children node
+public struct FooRecursiveUnionChildren: ArriClientModel {
+    let type: String = "CHILDREN"
+    public var data: [FooRecursiveUnion] = []
+    public init(
+        data: [FooRecursiveUnion]
+    ) {
+            self.data = data
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.data = []
+            for __dataJsonElement in json["data"].array ?? [] {
+                var __dataJsonElementValue: FooRecursiveUnion
+                __dataJsonElementValue = FooRecursiveUnion(json: __dataJsonElement)
+                self.data.append(__dataJsonElementValue)
+            }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"CHILDREN\""
+        __json += ",\"data\":"
+       __json += "["
+            for (__index, __element) in self.data.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                __json += __element.toJSONString()
+            }
+            __json += "]"
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "CHILDREN"))
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /RecursiveUnionChildren/data.")
+        return __queryParts
+    }
+    public func clone() -> FooRecursiveUnionChildren {
+var __dataCloned: [FooRecursiveUnion] = []
+                for __dataElement in self.data {
+                    
+                    __dataCloned.append(__dataElement.clone())
+                }
+        return FooRecursiveUnionChildren(
+            data: __dataCloned
+        )
+    }
+    
+}
+    
+
+/// Text node
+public struct FooRecursiveUnionText: ArriClientModel {
+    let type: String = "TEXT"
+    public var data: String = ""
+    public init(
+        data: String
+    ) {
+            self.data = data
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.data = json["data"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"TEXT\""
+        __json += ",\"data\":"
+        __json += serializeString(input: self.data)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "TEXT"))
+        __queryParts.append(URLQueryItem(name: "data", value: self.data))
+        return __queryParts
+    }
+    public func clone() -> FooRecursiveUnionText {
+
+        return FooRecursiveUnionText(
+            data: self.data
+        )
+    }
+    
+}
+    
+
+/// Shape node
+public struct FooRecursiveUnionShape: ArriClientModel {
+    let type: String = "SHAPE"
+    public var data: FooRecursiveUnionShapeData = FooRecursiveUnionShapeData()
+    public init(
+        data: FooRecursiveUnionShapeData
+    ) {
+            self.data = data
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.data = FooRecursiveUnionShapeData(json: json["data"])
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"type\":\"SHAPE\""
+        __json += ",\"data\":"
+        __json += self.data.toJSONString()
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "type", value: "SHAPE"))
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /RecursiveUnionShape/data.")
+        return __queryParts
+    }
+    public func clone() -> FooRecursiveUnionShape {
+
+        return FooRecursiveUnionShape(
+            data: self.data.clone()
+        )
+    }
+    
+}
+    
+public struct FooRecursiveUnionShapeData: ArriClientModel {
+    public var width: Float64 = 0.0
+    public var height: Float64 = 0.0
+    public var color: String = ""
+    public init(
+        width: Float64,
+        height: Float64,
+        color: String
+    ) {
+            self.width = width
+            self.height = height
+            self.color = color
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.width = json["width"].double ?? 0.0
+        self.height = json["height"].double ?? 0.0
+        self.color = json["color"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"width\":"
+        __json += "\(self.width)"
+        __json += ",\"height\":"
+        __json += "\(self.height)"
+        __json += ",\"color\":"
+        __json += serializeString(input: self.color)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "width", value: "\(self.width)"))
+        __queryParts.append(URLQueryItem(name: "height", value: "\(self.height)"))
+        __queryParts.append(URLQueryItem(name: "color", value: self.color))
+        return __queryParts
+    }
+    public func clone() -> FooRecursiveUnionShapeData {
+
+        return FooRecursiveUnionShapeData(
+            width: self.width,
+            height: self.height,
+            color: self.color
+        )
+    }
+    
+}
+    
+
+public struct FooAutoReconnectParams: ArriClientModel {
+    public var messageCount: UInt8 = 0
+    public init(
+        messageCount: UInt8
+    ) {
+            self.messageCount = messageCount
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.messageCount = json["messageCount"].uInt8 ?? 0
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"messageCount\":"
+        __json += "\(self.messageCount)"
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "messageCount", value: "\(self.messageCount)"))
+        return __queryParts
+    }
+    public func clone() -> FooAutoReconnectParams {
+
+        return FooAutoReconnectParams(
+            messageCount: self.messageCount
+        )
+    }
+    
+}
+    
+
+public struct FooAutoReconnectResponse: ArriClientModel {
+    public var count: UInt8 = 0
+    public var message: String = ""
+    public init(
+        count: UInt8,
+        message: String
+    ) {
+            self.count = count
+            self.message = message
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.count = json["count"].uInt8 ?? 0
+        self.message = json["message"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"count\":"
+        __json += "\(self.count)"
+        __json += ",\"message\":"
+        __json += serializeString(input: self.message)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "count", value: "\(self.count)"))
+        __queryParts.append(URLQueryItem(name: "message", value: self.message))
+        return __queryParts
+    }
+    public func clone() -> FooAutoReconnectResponse {
+
+        return FooAutoReconnectResponse(
+            count: self.count,
+            message: self.message
+        )
+    }
+    
+}
+    
+
+public struct FooStreamConnectionErrorTestParams: ArriClientModel {
+    public var statusCode: Int32 = 0
+    public var statusMessage: String = ""
+    public init(
+        statusCode: Int32,
+        statusMessage: String
+    ) {
+            self.statusCode = statusCode
+            self.statusMessage = statusMessage
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.statusCode = json["statusCode"].int32 ?? 0
+        self.statusMessage = json["statusMessage"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"statusCode\":"
+        __json += "\(self.statusCode)"
+        __json += ",\"statusMessage\":"
+        __json += serializeString(input: self.statusMessage)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "statusCode", value: "\(self.statusCode)"))
+        __queryParts.append(URLQueryItem(name: "statusMessage", value: self.statusMessage))
+        return __queryParts
+    }
+    public func clone() -> FooStreamConnectionErrorTestParams {
+
+        return FooStreamConnectionErrorTestParams(
+            statusCode: self.statusCode,
+            statusMessage: self.statusMessage
+        )
+    }
+    
+}
+    
+
+public struct FooStreamConnectionErrorTestResponse: ArriClientModel {
+    public var message: String = ""
+    public init(
+        message: String
+    ) {
+            self.message = message
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.message = json["message"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"message\":"
+        __json += serializeString(input: self.message)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "message", value: self.message))
+        return __queryParts
+    }
+    public func clone() -> FooStreamConnectionErrorTestResponse {
+
+        return FooStreamConnectionErrorTestResponse(
+            message: self.message
+        )
+    }
+    
+}
+    
+
+public struct FooStreamLargeObjectsResponse: ArriClientModel {
+    public var numbers: [Float64] = []
+    public var objects: [FooStreamLargeObjectsResponseObjectsElement] = []
+    public init(
+        numbers: [Float64],
+        objects: [FooStreamLargeObjectsResponseObjectsElement]
+    ) {
+            self.numbers = numbers
+            self.objects = objects
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.numbers = []
+            for __numbersJsonElement in json["numbers"].array ?? [] {
+                var __numbersJsonElementValue: Float64
+                        __numbersJsonElementValue = __numbersJsonElement.double ?? 0.0
+                self.numbers.append(__numbersJsonElementValue)
+            }
+        self.objects = []
+            for __objectsJsonElement in json["objects"].array ?? [] {
+                var __objectsJsonElementValue: FooStreamLargeObjectsResponseObjectsElement
+                        __objectsJsonElementValue = FooStreamLargeObjectsResponseObjectsElement(json: __objectsJsonElement)
+                self.objects.append(__objectsJsonElementValue)
+            }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"numbers\":"
+       __json += "["
+            for (__index, __element) in self.numbers.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        __json += "\(__element)"
+            }
+            __json += "]"
+        __json += ",\"objects\":"
+       __json += "["
+            for (__index, __element) in self.objects.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        __json += __element.toJSONString()
+            }
+            __json += "]"
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /StreamLargeObjectsResponse/numbers.")
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /StreamLargeObjectsResponse/objects.")
+        return []
+    }
+    public func clone() -> FooStreamLargeObjectsResponse {
+var __numbersCloned: [Float64] = []
+                for __numbersElement in self.numbers {
+                    
+                    __numbersCloned.append(__numbersElement)
+                }
+var __objectsCloned: [FooStreamLargeObjectsResponseObjectsElement] = []
+                for __objectsElement in self.objects {
+                    
+                    __objectsCloned.append(__objectsElement.clone())
+                }
+        return FooStreamLargeObjectsResponse(
+            numbers: __numbersCloned,
+            objects: __objectsCloned
+        )
+    }
+    
+}
+    
+public struct FooStreamLargeObjectsResponseObjectsElement: ArriClientModel {
+    public var id: String = ""
+    public var name: String = ""
+    public var email: String = ""
+    public init(
+        id: String,
+        name: String,
+        email: String
+    ) {
+            self.id = id
+            self.name = name
+            self.email = email
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.name = json["name"].string ?? ""
+        self.email = json["email"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"name\":"
+        __json += serializeString(input: self.name)
+        __json += ",\"email\":"
+        __json += serializeString(input: self.email)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "name", value: self.name))
+        __queryParts.append(URLQueryItem(name: "email", value: self.email))
+        return __queryParts
+    }
+    public func clone() -> FooStreamLargeObjectsResponseObjectsElement {
+
+        return FooStreamLargeObjectsResponseObjectsElement(
+            id: self.id,
+            name: self.name,
+            email: self.email
+        )
+    }
+    
+}
+    
+
+public struct FooChatMessageParams: ArriClientModel {
+    public var channelId: String = ""
+    public init(
+        channelId: String
+    ) {
+            self.channelId = channelId
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.channelId = json["channelId"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"channelId\":"
+        __json += serializeString(input: self.channelId)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "channelId", value: self.channelId))
+        return __queryParts
+    }
+    public func clone() -> FooChatMessageParams {
+
+        return FooChatMessageParams(
+            channelId: self.channelId
+        )
+    }
+    
+}
+    
+
+public enum FooChatMessage: ArriClientModel {
+    case text(FooChatMessageText)
+    case image(FooChatMessageImage)
+    case url(FooChatMessageUrl)
+    public init() {
+        self = .text(FooChatMessageText())
+    }
+    public init(json: JSON) {
+        let discriminator = json["messageType"].string ?? ""
+        switch (discriminator) {
+            case "TEXT":
+                self = .text(FooChatMessageText(json: json))
+                break
+            case "IMAGE":
+                self = .image(FooChatMessageImage(json: json))
+                break
+            case "URL":
+                self = .url(FooChatMessageUrl(json: json))
+                break
+            default:
+                self = .text(FooChatMessageText())
+                break
+        }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        switch(self) {
+            case .text(let __innerVal):
+                return __innerVal.toJSONString()
+            case .image(let __innerVal):
+                return __innerVal.toJSONString()
+            case .url(let __innerVal):
+                return __innerVal.toJSONString()
+        }
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        switch(self) {
+            case .text(let __innerVal):
+                return __innerVal.toURLQueryParts()
+            case .image(let __innerVal):
+                return __innerVal.toURLQueryParts()
+            case .url(let __innerVal):
+                return __innerVal.toURLQueryParts()
+        }
+    }
+    public func clone() -> FooChatMessage {
+        switch(self) {
+            case .text(let __innerVal):
+                return .text(__innerVal.clone())
+            case .image(let __innerVal):
+                return .image(__innerVal.clone())
+            case .url(let __innerVal):
+                return .url(__innerVal.clone())
+        }
+    }
+}
+    
+public struct FooChatMessageText: ArriClientModel {
+    let messageType: String = "TEXT"
+    public var id: String = ""
+    public var channelId: String = ""
+    public var userId: String = ""
+    public var date: Date = Date()
+    public var text: String = ""
+    public init(
+        id: String,
+        channelId: String,
+        userId: String,
+        date: Date,
+        text: String
+    ) {
+            self.id = id
+            self.channelId = channelId
+            self.userId = userId
+            self.date = date
+            self.text = text
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.channelId = json["channelId"].string ?? ""
+        self.userId = json["userId"].string ?? ""
+        self.date = parseDate(json["date"].string ?? "") ?? Date()
+        self.text = json["text"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"messageType\":\"TEXT\""
+        __json += ",\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"channelId\":"
+        __json += serializeString(input: self.channelId)
+        __json += ",\"userId\":"
+        __json += serializeString(input: self.userId)
+        __json += ",\"date\":"
+        __json += serializeDate(self.date)
+        __json += ",\"text\":"
+        __json += serializeString(input: self.text)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "messageType", value: "TEXT"))
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "channelId", value: self.channelId))
+        __queryParts.append(URLQueryItem(name: "userId", value: self.userId))
+        __queryParts.append(URLQueryItem(name: "date", value: serializeDate(self.date, withQuotes: false)))
+        __queryParts.append(URLQueryItem(name: "text", value: self.text))
+        return __queryParts
+    }
+    public func clone() -> FooChatMessageText {
+
+        return FooChatMessageText(
+            id: self.id,
+            channelId: self.channelId,
+            userId: self.userId,
+            date: self.date,
+            text: self.text
+        )
+    }
+    
+}
+    
+
+public struct FooChatMessageImage: ArriClientModel {
+    let messageType: String = "IMAGE"
+    public var id: String = ""
+    public var channelId: String = ""
+    public var userId: String = ""
+    public var date: Date = Date()
+    public var image: String = ""
+    public init(
+        id: String,
+        channelId: String,
+        userId: String,
+        date: Date,
+        image: String
+    ) {
+            self.id = id
+            self.channelId = channelId
+            self.userId = userId
+            self.date = date
+            self.image = image
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.channelId = json["channelId"].string ?? ""
+        self.userId = json["userId"].string ?? ""
+        self.date = parseDate(json["date"].string ?? "") ?? Date()
+        self.image = json["image"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"messageType\":\"IMAGE\""
+        __json += ",\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"channelId\":"
+        __json += serializeString(input: self.channelId)
+        __json += ",\"userId\":"
+        __json += serializeString(input: self.userId)
+        __json += ",\"date\":"
+        __json += serializeDate(self.date)
+        __json += ",\"image\":"
+        __json += serializeString(input: self.image)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "messageType", value: "IMAGE"))
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "channelId", value: self.channelId))
+        __queryParts.append(URLQueryItem(name: "userId", value: self.userId))
+        __queryParts.append(URLQueryItem(name: "date", value: serializeDate(self.date, withQuotes: false)))
+        __queryParts.append(URLQueryItem(name: "image", value: self.image))
+        return __queryParts
+    }
+    public func clone() -> FooChatMessageImage {
+
+        return FooChatMessageImage(
+            id: self.id,
+            channelId: self.channelId,
+            userId: self.userId,
+            date: self.date,
+            image: self.image
+        )
+    }
+    
+}
+    
+
+public struct FooChatMessageUrl: ArriClientModel {
+    let messageType: String = "URL"
+    public var id: String = ""
+    public var channelId: String = ""
+    public var userId: String = ""
+    public var date: Date = Date()
+    public var url: String = ""
+    public init(
+        id: String,
+        channelId: String,
+        userId: String,
+        date: Date,
+        url: String
+    ) {
+            self.id = id
+            self.channelId = channelId
+            self.userId = userId
+            self.date = date
+            self.url = url
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.channelId = json["channelId"].string ?? ""
+        self.userId = json["userId"].string ?? ""
+        self.date = parseDate(json["date"].string ?? "") ?? Date()
+        self.url = json["url"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"messageType\":\"URL\""
+        __json += ",\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"channelId\":"
+        __json += serializeString(input: self.channelId)
+        __json += ",\"userId\":"
+        __json += serializeString(input: self.userId)
+        __json += ",\"date\":"
+        __json += serializeDate(self.date)
+        __json += ",\"url\":"
+        __json += serializeString(input: self.url)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "messageType", value: "URL"))
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "channelId", value: self.channelId))
+        __queryParts.append(URLQueryItem(name: "userId", value: self.userId))
+        __queryParts.append(URLQueryItem(name: "date", value: serializeDate(self.date, withQuotes: false)))
+        __queryParts.append(URLQueryItem(name: "url", value: self.url))
+        return __queryParts
+    }
+    public func clone() -> FooChatMessageUrl {
+
+        return FooChatMessageUrl(
+            id: self.id,
+            channelId: self.channelId,
+            userId: self.userId,
+            date: self.date,
+            url: self.url
+        )
+    }
+    
+}
+    
+
+public struct FooTestsStreamRetryWithNewCredentialsResponse: ArriClientModel {
+    public var message: String = ""
+    public init(
+        message: String
+    ) {
+            self.message = message
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.message = json["message"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"message\":"
+        __json += serializeString(input: self.message)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "message", value: self.message))
+        return __queryParts
+    }
+    public func clone() -> FooTestsStreamRetryWithNewCredentialsResponse {
+
+        return FooTestsStreamRetryWithNewCredentialsResponse(
+            message: self.message
+        )
+    }
+    
+}
+    
+
+public struct FooUsersWatchUserParams: ArriClientModel {
+    public var userId: String = ""
+    public init(
+        userId: String
+    ) {
+            self.userId = userId
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.userId = json["userId"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"userId\":"
+        __json += serializeString(input: self.userId)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "userId", value: self.userId))
+        return __queryParts
+    }
+    public func clone() -> FooUsersWatchUserParams {
+
+        return FooUsersWatchUserParams(
+            userId: self.userId
+        )
+    }
+    
+}
+    
+
+public struct FooUsersWatchUserResponse: ArriClientModel {
+    public var id: String = ""
+    public var role: FooUsersWatchUserResponseRole = FooUsersWatchUserResponseRole.standard
+    /// A profile picture
+    public var photo: FooUserPhoto?
+    public var createdAt: Date = Date()
+    public var numFollowers: Int32 = 0
+    public var settings: FooUserSettings = FooUserSettings()
+    public var recentNotifications: [FooUsersWatchUserResponseRecentNotificationsElement] = []
+    public var bookmarks: Dictionary<String, FooUsersWatchUserResponseBookmarksValue> = Dictionary()
+    public var metadata: Dictionary<String, JSON> = Dictionary()
+    public var randomList: [JSON] = []
+    public var bio: String?
+    public init(
+        id: String,
+        role: FooUsersWatchUserResponseRole,
+        photo: FooUserPhoto?,
+        createdAt: Date,
+        numFollowers: Int32,
+        settings: FooUserSettings,
+        recentNotifications: [FooUsersWatchUserResponseRecentNotificationsElement],
+        bookmarks: Dictionary<String, FooUsersWatchUserResponseBookmarksValue>,
+        metadata: Dictionary<String, JSON>,
+        randomList: [JSON],
+        bio: String?
+    ) {
+            self.id = id
+            self.role = role
+            self.photo = photo
+            self.createdAt = createdAt
+            self.numFollowers = numFollowers
+            self.settings = settings
+            self.recentNotifications = recentNotifications
+            self.bookmarks = bookmarks
+            self.metadata = metadata
+            self.randomList = randomList
+            self.bio = bio
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.id = json["id"].string ?? ""
+        self.role = FooUsersWatchUserResponseRole(serialValue: json["role"].string ?? "")
+        if json["photo"].dictionary != nil {
+                    self.photo = FooUserPhoto(json: json["photo"])
+                }
+        self.createdAt = parseDate(json["createdAt"].string ?? "") ?? Date()
+        self.numFollowers = json["numFollowers"].int32 ?? 0
+        self.settings = FooUserSettings(json: json["settings"])
+        self.recentNotifications = []
+            for __recentNotificationsJsonElement in json["recentNotifications"].array ?? [] {
+                var __recentNotificationsJsonElementValue: FooUsersWatchUserResponseRecentNotificationsElement
+                        __recentNotificationsJsonElementValue = FooUsersWatchUserResponseRecentNotificationsElement(json: __recentNotificationsJsonElement)
+                self.recentNotifications.append(__recentNotificationsJsonElementValue)
+            }
+        self.bookmarks = Dictionary()
+            for (__key, __value) in json["bookmarks"].dictionary ?? Dictionary() {
+                var __parsedValue: FooUsersWatchUserResponseBookmarksValue
+                        __parsedValue = FooUsersWatchUserResponseBookmarksValue(json: __value)
+                self.bookmarks[__key] = __parsedValue            
+            }
+        self.metadata = Dictionary()
+            for (__key, __value) in json["metadata"].dictionary ?? Dictionary() {
+                var __parsedValue: JSON
+                        __parsedValue = __value
+                self.metadata[__key] = __parsedValue            
+            }
+        self.randomList = []
+            for __randomListJsonElement in json["randomList"].array ?? [] {
+                var __randomListJsonElementValue: JSON
+                        __randomListJsonElementValue = __randomListJsonElement
+                self.randomList.append(__randomListJsonElementValue)
+            }
+        if json["bio"].exists() {
+            self.bio = json["bio"].string    
+        }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"id\":"
+        __json += serializeString(input: self.id)
+        __json += ",\"role\":"
+        __json += "\"\(self.role.serialValue())\""
+        __json += ",\"photo\":"
+        if self.photo != nil {
+                    __json += self.photo!.toJSONString()
+                } else {
+                    __json += "null" 
+                }
+        __json += ",\"createdAt\":"
+        __json += serializeDate(self.createdAt)
+        __json += ",\"numFollowers\":"
+        __json += "\(self.numFollowers)"
+        __json += ",\"settings\":"
+        __json += self.settings.toJSONString()
+        __json += ",\"recentNotifications\":"
+       __json += "["
+            for (__index, __element) in self.recentNotifications.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        __json += __element.toJSONString()
+            }
+            __json += "]"
+        __json += ",\"bookmarks\":"
+        __json += "{"
+            for (__index, (__key, __value)) in self.bookmarks.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                __json += "\(serializeString(input: __key)):"
+                        __json += __value.toJSONString()
+            }
+            __json += "}"
+        __json += ",\"metadata\":"
+        __json += "{"
+            for (__index, (__key, __value)) in self.metadata.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                __json += "\(serializeString(input: __key)):"
+                        __json += serializeAny(input: __value)
+            }
+            __json += "}"
+        __json += ",\"randomList\":"
+       __json += "["
+            for (__index, __element) in self.randomList.enumerated() {
+                if __index > 0 {
+                    __json += ","
+                }
+                        __json += serializeAny(input: __element)
+            }
+            __json += "]"
+        if self.bio != nil {
+                    __json += ",\"bio\":"
+        __json += serializeString(input: self.bio!)
+        }
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "id", value: self.id))
+        __queryParts.append(URLQueryItem(name: "role", value: self.role.serialValue()))
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/photo.")
+        __queryParts.append(URLQueryItem(name: "createdAt", value: serializeDate(self.createdAt, withQuotes: false)))
+        __queryParts.append(URLQueryItem(name: "numFollowers", value: "\(self.numFollowers)"))
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/settings.")
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/recentNotifications.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/bookmarks.")
+        print("[WARNING] nested objects cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/metadata.")
+        print("[WARNING] arrays cannot be serialized to query params. Skipping field at /UsersWatchUserResponse/randomList.")
+        if self.bio != nil {
+                    __queryParts.append(URLQueryItem(name: "bio", value: self.bio!))
+                }
+        return __queryParts
+    }
+    public func clone() -> FooUsersWatchUserResponse {
+
+
+var __recentNotificationsCloned: [FooUsersWatchUserResponseRecentNotificationsElement] = []
+                for __recentNotificationsElement in self.recentNotifications {
+                    
+                    __recentNotificationsCloned.append(__recentNotificationsElement.clone())
+                }
+var __bookmarksCloned: Dictionary<String, FooUsersWatchUserResponseBookmarksValue> = Dictionary()
+                    for (__bookmarksKey, __bookmarksValue) in self.bookmarks {
+                        
+                        __bookmarksCloned[__bookmarksKey] = __bookmarksValue.clone()
+                    }
+var __metadataCloned: Dictionary<String, JSON> = Dictionary()
+                    for (__metadataKey, __metadataValue) in self.metadata {
+                        
+                        __metadataCloned[__metadataKey] = __metadataValue
+                    }
+var __randomListCloned: [JSON] = []
+                for __randomListElement in self.randomList {
+                    
+                    __randomListCloned.append(__randomListElement)
+                }
+        return FooUsersWatchUserResponse(
+            id: self.id,
+            role: self.role,
+            photo: self.photo?.clone(),
+            createdAt: self.createdAt,
+            numFollowers: self.numFollowers,
+            settings: self.settings.clone(),
+            recentNotifications: __recentNotificationsCloned,
+            bookmarks: __bookmarksCloned,
+            metadata: __metadataCloned,
+            randomList: __randomListCloned,
+            bio: self.bio
+        )
+    }
+    
+}
+    
+public enum FooUsersWatchUserResponseRole: ArriClientEnum {
+    case standard
+    case admin
+    public init() {
+        self = .standard
+    }
+    public init(serialValue: String) {
+        switch(serialValue) {
+            case "standard":
+                self = .standard
+                break;
+            case "admin":
+                self = .admin
+                break;
+            default:
+                self = .standard
+        }
+    }
+    public func serialValue() -> String {
+        switch (self) {
+            case .standard:
+                return "standard"
+            case .admin:
+                return "admin"
+        }
+    }
+}
+/// A profile picture
+public struct FooUserPhoto: ArriClientModel {
+    public var url: String = ""
+    public var width: Float64 = 0.0
+    public var height: Float64 = 0.0
+    public var bytes: Int64 = 0
+    /// When the photo was last updated in nanoseconds
+    public var nanoseconds: UInt64 = 0
+    public init(
+        url: String,
+        width: Float64,
+        height: Float64,
+        bytes: Int64,
+        nanoseconds: UInt64
+    ) {
+            self.url = url
+            self.width = width
+            self.height = height
+            self.bytes = bytes
+            self.nanoseconds = nanoseconds
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.url = json["url"].string ?? ""
+        self.width = json["width"].double ?? 0.0
+        self.height = json["height"].double ?? 0.0
+        self.bytes = Int64(json["bytes"].string ?? "0") ?? 0
+        self.nanoseconds = UInt64(json["nanoseconds"].string ?? "0") ?? 0
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"url\":"
+        __json += serializeString(input: self.url)
+        __json += ",\"width\":"
+        __json += "\(self.width)"
+        __json += ",\"height\":"
+        __json += "\(self.height)"
+        __json += ",\"bytes\":"
+        __json += "\"\(self.bytes)\""
+        __json += ",\"nanoseconds\":"
+        __json += "\"\(self.nanoseconds)\""
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "url", value: self.url))
+        __queryParts.append(URLQueryItem(name: "width", value: "\(self.width)"))
+        __queryParts.append(URLQueryItem(name: "height", value: "\(self.height)"))
+        __queryParts.append(URLQueryItem(name: "bytes", value: "\(self.bytes)"))
+        __queryParts.append(URLQueryItem(name: "nanoseconds", value: "\(self.nanoseconds)"))
+        return __queryParts
+    }
+    public func clone() -> FooUserPhoto {
+
+        return FooUserPhoto(
+            url: self.url,
+            width: self.width,
+            height: self.height,
+            bytes: self.bytes,
+            nanoseconds: self.nanoseconds
+        )
+    }
+    
+}
+    
+
+public struct FooUserSettings: ArriClientModel {
+    public var notificationsEnabled: Bool = false
+    public var preferredTheme: FooUserSettingsPreferredTheme = FooUserSettingsPreferredTheme.darkMode
+    public init(
+        notificationsEnabled: Bool,
+        preferredTheme: FooUserSettingsPreferredTheme
+    ) {
+            self.notificationsEnabled = notificationsEnabled
+            self.preferredTheme = preferredTheme
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.notificationsEnabled = json["notificationsEnabled"].bool ?? false
+        self.preferredTheme = FooUserSettingsPreferredTheme(serialValue: json["preferredTheme"].string ?? "")
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"notificationsEnabled\":"
+        __json += "\(self.notificationsEnabled)"
+        __json += ",\"preferredTheme\":"
+        __json += "\"\(self.preferredTheme.serialValue())\""
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "notificationsEnabled", value: "\(self.notificationsEnabled)"))
+        __queryParts.append(URLQueryItem(name: "preferredTheme", value: self.preferredTheme.serialValue()))
+        return __queryParts
+    }
+    public func clone() -> FooUserSettings {
+
+        return FooUserSettings(
+            notificationsEnabled: self.notificationsEnabled,
+            preferredTheme: self.preferredTheme
+        )
+    }
+    
+}
+    
+public enum FooUserSettingsPreferredTheme: ArriClientEnum {
+    case darkMode
+    case lightMode
+    case system
+    public init() {
+        self = .darkMode
+    }
+    public init(serialValue: String) {
+        switch(serialValue) {
+            case "dark-mode":
+                self = .darkMode
+                break;
+            case "light-mode":
+                self = .lightMode
+                break;
+            case "system":
+                self = .system
+                break;
+            default:
+                self = .darkMode
+        }
+    }
+    public func serialValue() -> String {
+        switch (self) {
+            case .darkMode:
+                return "dark-mode"
+            case .lightMode:
+                return "light-mode"
+            case .system:
+                return "system"
+        }
+    }
+}
+public enum FooUsersWatchUserResponseRecentNotificationsElement: ArriClientModel {
+    case postLike(FooUsersWatchUserResponseRecentNotificationsElementPostLike)
+    case postComment(FooUsersWatchUserResponseRecentNotificationsElementPostComment)
+    public init() {
+        self = .postLike(FooUsersWatchUserResponseRecentNotificationsElementPostLike())
+    }
+    public init(json: JSON) {
+        let discriminator = json["notificationType"].string ?? ""
+        switch (discriminator) {
+            case "POST_LIKE":
+                self = .postLike(FooUsersWatchUserResponseRecentNotificationsElementPostLike(json: json))
+                break
+            case "POST_COMMENT":
+                self = .postComment(FooUsersWatchUserResponseRecentNotificationsElementPostComment(json: json))
+                break
+            default:
+                self = .postLike(FooUsersWatchUserResponseRecentNotificationsElementPostLike())
+                break
+        }
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        switch(self) {
+            case .postLike(let __innerVal):
+                return __innerVal.toJSONString()
+            case .postComment(let __innerVal):
+                return __innerVal.toJSONString()
+        }
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        switch(self) {
+            case .postLike(let __innerVal):
+                return __innerVal.toURLQueryParts()
+            case .postComment(let __innerVal):
+                return __innerVal.toURLQueryParts()
+        }
+    }
+    public func clone() -> FooUsersWatchUserResponseRecentNotificationsElement {
+        switch(self) {
+            case .postLike(let __innerVal):
+                return .postLike(__innerVal.clone())
+            case .postComment(let __innerVal):
+                return .postComment(__innerVal.clone())
+        }
+    }
+}
+    
+public struct FooUsersWatchUserResponseRecentNotificationsElementPostLike: ArriClientModel {
+    let notificationType: String = "POST_LIKE"
+    public var postId: String = ""
+    public var userId: String = ""
+    public init(
+        postId: String,
+        userId: String
+    ) {
+            self.postId = postId
+            self.userId = userId
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.postId = json["postId"].string ?? ""
+        self.userId = json["userId"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"notificationType\":\"POST_LIKE\""
+        __json += ",\"postId\":"
+        __json += serializeString(input: self.postId)
+        __json += ",\"userId\":"
+        __json += serializeString(input: self.userId)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "notificationType", value: "POST_LIKE"))
+        __queryParts.append(URLQueryItem(name: "postId", value: self.postId))
+        __queryParts.append(URLQueryItem(name: "userId", value: self.userId))
+        return __queryParts
+    }
+    public func clone() -> FooUsersWatchUserResponseRecentNotificationsElementPostLike {
+
+        return FooUsersWatchUserResponseRecentNotificationsElementPostLike(
+            postId: self.postId,
+            userId: self.userId
+        )
+    }
+    
+}
+    
+
+public struct FooUsersWatchUserResponseRecentNotificationsElementPostComment: ArriClientModel {
+    let notificationType: String = "POST_COMMENT"
+    public var postId: String = ""
+    public var userId: String = ""
+    public var commentText: String = ""
+    public init(
+        postId: String,
+        userId: String,
+        commentText: String
+    ) {
+            self.postId = postId
+            self.userId = userId
+            self.commentText = commentText
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.postId = json["postId"].string ?? ""
+        self.userId = json["userId"].string ?? ""
+        self.commentText = json["commentText"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"notificationType\":\"POST_COMMENT\""
+        __json += ",\"postId\":"
+        __json += serializeString(input: self.postId)
+        __json += ",\"userId\":"
+        __json += serializeString(input: self.userId)
+        __json += ",\"commentText\":"
+        __json += serializeString(input: self.commentText)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "notificationType", value: "POST_COMMENT"))
+        __queryParts.append(URLQueryItem(name: "postId", value: self.postId))
+        __queryParts.append(URLQueryItem(name: "userId", value: self.userId))
+        __queryParts.append(URLQueryItem(name: "commentText", value: self.commentText))
+        return __queryParts
+    }
+    public func clone() -> FooUsersWatchUserResponseRecentNotificationsElementPostComment {
+
+        return FooUsersWatchUserResponseRecentNotificationsElementPostComment(
+            postId: self.postId,
+            userId: self.userId,
+            commentText: self.commentText
+        )
+    }
+    
+}
+    
+
+public struct FooUsersWatchUserResponseBookmarksValue: ArriClientModel {
+    public var postId: String = ""
+    public var userId: String = ""
+    public init(
+        postId: String,
+        userId: String
+    ) {
+            self.postId = postId
+            self.userId = userId
+    }
+    public init() {}
+    public init(json: JSON) {
+        self.postId = json["postId"].string ?? ""
+        self.userId = json["userId"].string ?? ""
+    }
+    public init(JSONData: Data) {
+        do {
+            let json = try JSON(data: JSONData)
+            self.init(json: json)
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public init(JSONString: String) {
+        do {
+            let json = try JSON(data: JSONString.data(using: .utf8) ?? Data())
+            self.init(json: json) 
+        } catch {
+            print("[WARNING] Error parsing JSON: \(error)")
+            self.init()
+        }
+    }
+    public func toJSONString() -> String {
+        var __json = "{"
+
+        __json += "\"postId\":"
+        __json += serializeString(input: self.postId)
+        __json += ",\"userId\":"
+        __json += serializeString(input: self.userId)
+        __json += "}"
+        return __json
+    }
+    public func toURLQueryParts() -> [URLQueryItem] {
+        var __queryParts: [URLQueryItem] = []
+        __queryParts.append(URLQueryItem(name: "postId", value: self.postId))
+        __queryParts.append(URLQueryItem(name: "userId", value: self.userId))
+        return __queryParts
+    }
+    public func clone() -> FooUsersWatchUserResponseBookmarksValue {
+
+        return FooUsersWatchUserResponseBookmarksValue(
+            postId: self.postId,
+            userId: self.userId
+        )
+    }
+    
+}
+    
diff --git a/tests/clients/ts/serverBenchmark.ts b/tests/clients/ts/serverBenchmark.ts
index fd548262..6c5cf3a1 100644
--- a/tests/clients/ts/serverBenchmark.ts
+++ b/tests/clients/ts/serverBenchmark.ts
@@ -8,7 +8,7 @@ import {
     ObjectWithEveryNullableType,
     ObjectWithEveryOptionalType,
     ObjectWithEveryType,
-} from './testClient.rpc';
+} from './testClient.g';
 
 const now = new Date();
 
diff --git a/tests/clients/ts/testClient.rpc.ts b/tests/clients/ts/testClient.g.ts
similarity index 100%
rename from tests/clients/ts/testClient.rpc.ts
rename to tests/clients/ts/testClient.g.ts
diff --git a/tests/clients/ts/testClient.test.ts b/tests/clients/ts/testClient.test.ts
index f47cf4e2..56030757 100644
--- a/tests/clients/ts/testClient.test.ts
+++ b/tests/clients/ts/testClient.test.ts
@@ -12,7 +12,7 @@ import {
     type RecursiveObject,
     type RecursiveUnion,
     TestClient,
-} from './testClient.rpc';
+} from './testClient.g';
 
 function wait(ms: number) {
     return new Promise((resolve) => {
diff --git a/tests/clients/ts/tsClientPrefixed.g.ts b/tests/clients/ts/tsClientPrefixed.g.ts
new file mode 100644
index 00000000..7e5b965c
--- /dev/null
+++ b/tests/clients/ts/tsClientPrefixed.g.ts
@@ -0,0 +1,6560 @@
+// This file was autogenerated by @arrirpc/codegen-ts. Do not modify directly.
+// For more information visit https://github.com/modiimedia/arri
+
+/* eslint-disable */
+// @ts-nocheck
+import {
+  ArriEnumValidator,
+  ArriModelValidator,
+  arriRequest,
+  arriSseRequest,
+  type EventSourceController,
+  INT8_MAX,
+  INT8_MIN,
+  INT16_MAX,
+  INT16_MIN,
+  INT32_MAX,
+  INT32_MIN,
+  INT64_MAX,
+  INT64_MIN,
+  isObject,
+  serializeString,
+  type SseOptions,
+  UINT8_MAX,
+  UINT16_MAX,
+  UINT32_MAX,
+  UINT64_MAX,
+} from "@arrirpc/client";
+
+type HeaderMap = Record<string, string | undefined>;
+export class TestClientPrefixed {
+  private readonly _baseUrl: string;
+  private readonly _headers: HeaderMap | (() => HeaderMap | Promise<HeaderMap>);
+  private readonly _onError?: (err: unknown) => void;
+  tests: TestClientPrefixedTestsService;
+  users: TestClientPrefixedUsersService;
+  constructor(
+    options: {
+      baseUrl?: string;
+      headers?: HeaderMap | (() => HeaderMap | Promise<HeaderMap>);
+      onError?: (err: unknown) => void;
+    } = {},
+  ) {
+    this._baseUrl = options.baseUrl ?? "";
+    this._headers = options.headers ?? {};
+    this._onError = options.onError;
+    this.tests = new TestClientPrefixedTestsService(options);
+    this.users = new TestClientPrefixedUsersService(options);
+  }
+}
+
+export class TestClientPrefixedTestsService {
+  private readonly _baseUrl: string;
+  private readonly _headers: HeaderMap | (() => HeaderMap | Promise<HeaderMap>);
+  private readonly _onError?: (err: unknown) => void;
+
+  constructor(
+    options: {
+      baseUrl?: string;
+      headers?: HeaderMap | (() => HeaderMap | Promise<HeaderMap>);
+      onError?: (err: unknown) => void;
+    } = {},
+  ) {
+    this._baseUrl = options.baseUrl ?? "";
+    this._headers = options.headers ?? {};
+    this._onError = options.onError;
+  }
+  async emptyParamsGetRequest(): Promise<FooDefaultPayload> {
+    return arriRequest<FooDefaultPayload, undefined>({
+      url: `${this._baseUrl}/rpcs/tests/empty-params-get-request`,
+      method: "get",
+      headers: this._headers,
+      onError: this._onError,
+
+      responseFromJson: $$FooDefaultPayload.fromJson,
+      responseFromString: $$FooDefaultPayload.fromJsonString,
+      serializer: () => {},
+      clientVersion: "10",
+    });
+  }
+  async emptyParamsPostRequest(): Promise<FooDefaultPayload> {
+    return arriRequest<FooDefaultPayload, undefined>({
+      url: `${this._baseUrl}/rpcs/tests/empty-params-post-request`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+
+      responseFromJson: $$FooDefaultPayload.fromJson,
+      responseFromString: $$FooDefaultPayload.fromJsonString,
+      serializer: () => {},
+      clientVersion: "10",
+    });
+  }
+  async emptyResponseGetRequest(params: FooDefaultPayload): Promise<undefined> {
+    return arriRequest<undefined, FooDefaultPayload>({
+      url: `${this._baseUrl}/rpcs/tests/empty-response-get-request`,
+      method: "get",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: () => {},
+      responseFromString: () => {},
+      serializer: $$FooDefaultPayload.toUrlQueryString,
+      clientVersion: "10",
+    });
+  }
+  async emptyResponsePostRequest(
+    params: FooDefaultPayload,
+  ): Promise<undefined> {
+    return arriRequest<undefined, FooDefaultPayload>({
+      url: `${this._baseUrl}/rpcs/tests/empty-response-post-request`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: () => {},
+      responseFromString: () => {},
+      serializer: $$FooDefaultPayload.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  /**
+   * If the target language supports it. Generated code should mark this procedure as deprecated.
+   * @deprecated
+   */
+  async deprecatedRpc(params: FooDeprecatedRpcParams): Promise<undefined> {
+    return arriRequest<undefined, FooDeprecatedRpcParams>({
+      url: `${this._baseUrl}/rpcs/tests/deprecated-rpc`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: () => {},
+      responseFromString: () => {},
+      serializer: $$FooDeprecatedRpcParams.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  async sendError(params: FooSendErrorParams): Promise<undefined> {
+    return arriRequest<undefined, FooSendErrorParams>({
+      url: `${this._baseUrl}/rpcs/tests/send-error`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: () => {},
+      responseFromString: () => {},
+      serializer: $$FooSendErrorParams.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  async sendObject(
+    params: FooObjectWithEveryType,
+  ): Promise<FooObjectWithEveryType> {
+    return arriRequest<FooObjectWithEveryType, FooObjectWithEveryType>({
+      url: `${this._baseUrl}/rpcs/tests/send-object`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: $$FooObjectWithEveryType.fromJson,
+      responseFromString: $$FooObjectWithEveryType.fromJsonString,
+      serializer: $$FooObjectWithEveryType.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  async sendObjectWithNullableFields(
+    params: FooObjectWithEveryNullableType,
+  ): Promise<FooObjectWithEveryNullableType> {
+    return arriRequest<
+      FooObjectWithEveryNullableType,
+      FooObjectWithEveryNullableType
+    >({
+      url: `${this._baseUrl}/rpcs/tests/send-object-with-nullable-fields`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: $$FooObjectWithEveryNullableType.fromJson,
+      responseFromString: $$FooObjectWithEveryNullableType.fromJsonString,
+      serializer: $$FooObjectWithEveryNullableType.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  async sendObjectWithPascalCaseKeys(
+    params: FooObjectWithPascalCaseKeys,
+  ): Promise<FooObjectWithPascalCaseKeys> {
+    return arriRequest<
+      FooObjectWithPascalCaseKeys,
+      FooObjectWithPascalCaseKeys
+    >({
+      url: `${this._baseUrl}/rpcs/tests/send-object-with-pascal-case-keys`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: $$FooObjectWithPascalCaseKeys.fromJson,
+      responseFromString: $$FooObjectWithPascalCaseKeys.fromJsonString,
+      serializer: $$FooObjectWithPascalCaseKeys.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  async sendObjectWithSnakeCaseKeys(
+    params: FooObjectWithSnakeCaseKeys,
+  ): Promise<FooObjectWithSnakeCaseKeys> {
+    return arriRequest<FooObjectWithSnakeCaseKeys, FooObjectWithSnakeCaseKeys>({
+      url: `${this._baseUrl}/rpcs/tests/send-object-with-snake-case-keys`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: $$FooObjectWithSnakeCaseKeys.fromJson,
+      responseFromString: $$FooObjectWithSnakeCaseKeys.fromJsonString,
+      serializer: $$FooObjectWithSnakeCaseKeys.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  async sendPartialObject(
+    params: FooObjectWithEveryOptionalType,
+  ): Promise<FooObjectWithEveryOptionalType> {
+    return arriRequest<
+      FooObjectWithEveryOptionalType,
+      FooObjectWithEveryOptionalType
+    >({
+      url: `${this._baseUrl}/rpcs/tests/send-partial-object`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: $$FooObjectWithEveryOptionalType.fromJson,
+      responseFromString: $$FooObjectWithEveryOptionalType.fromJsonString,
+      serializer: $$FooObjectWithEveryOptionalType.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  async sendRecursiveObject(
+    params: FooRecursiveObject,
+  ): Promise<FooRecursiveObject> {
+    return arriRequest<FooRecursiveObject, FooRecursiveObject>({
+      url: `${this._baseUrl}/rpcs/tests/send-recursive-object`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: $$FooRecursiveObject.fromJson,
+      responseFromString: $$FooRecursiveObject.fromJsonString,
+      serializer: $$FooRecursiveObject.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  async sendRecursiveUnion(
+    params: FooRecursiveUnion,
+  ): Promise<FooRecursiveUnion> {
+    return arriRequest<FooRecursiveUnion, FooRecursiveUnion>({
+      url: `${this._baseUrl}/rpcs/tests/send-recursive-union`,
+      method: "post",
+      headers: this._headers,
+      onError: this._onError,
+      params: params,
+      responseFromJson: $$FooRecursiveUnion.fromJson,
+      responseFromString: $$FooRecursiveUnion.fromJsonString,
+      serializer: $$FooRecursiveUnion.toJsonString,
+      clientVersion: "10",
+    });
+  }
+  streamAutoReconnect(
+    params: FooAutoReconnectParams,
+    options: SseOptions<FooAutoReconnectResponse> = {},
+  ): EventSourceController {
+    return arriSseRequest<FooAutoReconnectResponse, FooAutoReconnectParams>(
+      {
+        url: `${this._baseUrl}/rpcs/tests/stream-auto-reconnect`,
+        method: "get",
+        headers: this._headers,
+        onError: this._onError,
+        params: params,
+        responseFromJson: $$FooAutoReconnectResponse.fromJson,
+        responseFromString: $$FooAutoReconnectResponse.fromJsonString,
+        serializer: $$FooAutoReconnectParams.toUrlQueryString,
+        clientVersion: "10",
+      },
+      options,
+    );
+  }
+  /**
+   * This route will always return an error. The client should automatically retry with exponential backoff.
+   */
+  streamConnectionErrorTest(
+    params: FooStreamConnectionErrorTestParams,
+    options: SseOptions<FooStreamConnectionErrorTestResponse> = {},
+  ): EventSourceController {
+    return arriSseRequest<
+      FooStreamConnectionErrorTestResponse,
+      FooStreamConnectionErrorTestParams
+    >(
+      {
+        url: `${this._baseUrl}/rpcs/tests/stream-connection-error-test`,
+        method: "get",
+        headers: this._headers,
+        onError: this._onError,
+        params: params,
+        responseFromJson: $$FooStreamConnectionErrorTestResponse.fromJson,
+        responseFromString:
+          $$FooStreamConnectionErrorTestResponse.fromJsonString,
+        serializer: $$FooStreamConnectionErrorTestParams.toUrlQueryString,
+        clientVersion: "10",
+      },
+      options,
+    );
+  }
+  /**
+   * Test to ensure that the client can handle receiving streams of large objects. When objects are large messages will sometimes get sent in chunks. Meaning you have to handle receiving a partial message
+   */
+  streamLargeObjects(
+    options: SseOptions<FooStreamLargeObjectsResponse> = {},
+  ): EventSourceController {
+    return arriSseRequest<FooStreamLargeObjectsResponse, undefined>(
+      {
+        url: `${this._baseUrl}/rpcs/tests/stream-large-objects`,
+        method: "get",
+        headers: this._headers,
+        onError: this._onError,
+
+        responseFromJson: $$FooStreamLargeObjectsResponse.fromJson,
+        responseFromString: $$FooStreamLargeObjectsResponse.fromJsonString,
+        serializer: () => {},
+        clientVersion: "10",
+      },
+      options,
+    );
+  }
+  streamMessages(
+    params: FooChatMessageParams,
+    options: SseOptions<FooChatMessage> = {},
+  ): EventSourceController {
+    return arriSseRequest<FooChatMessage, FooChatMessageParams>(
+      {
+        url: `${this._baseUrl}/rpcs/tests/stream-messages`,
+        method: "get",
+        headers: this._headers,
+        onError: this._onError,
+        params: params,
+        responseFromJson: $$FooChatMessage.fromJson,
+        responseFromString: $$FooChatMessage.fromJsonString,
+        serializer: $$FooChatMessageParams.toUrlQueryString,
+        clientVersion: "10",
+      },
+      options,
+    );
+  }
+  streamRetryWithNewCredentials(
+    options: SseOptions<FooTestsStreamRetryWithNewCredentialsResponse> = {},
+  ): EventSourceController {
+    return arriSseRequest<
+      FooTestsStreamRetryWithNewCredentialsResponse,
+      undefined
+    >(
+      {
+        url: `${this._baseUrl}/rpcs/tests/stream-retry-with-new-credentials`,
+        method: "get",
+        headers: this._headers,
+        onError: this._onError,
+
+        responseFromJson:
+          $$FooTestsStreamRetryWithNewCredentialsResponse.fromJson,
+        responseFromString:
+          $$FooTestsStreamRetryWithNewCredentialsResponse.fromJsonString,
+        serializer: () => {},
+        clientVersion: "10",
+      },
+      options,
+    );
+  }
+  /**
+   * When the client receives the 'done' event, it should close the connection and NOT reconnect
+   */
+  streamTenEventsThenEnd(
+    options: SseOptions<FooChatMessage> = {},
+  ): EventSourceController {
+    return arriSseRequest<FooChatMessage, undefined>(
+      {
+        url: `${this._baseUrl}/rpcs/tests/stream-ten-events-then-end`,
+        method: "get",
+        headers: this._headers,
+        onError: this._onError,
+
+        responseFromJson: $$FooChatMessage.fromJson,
+        responseFromString: $$FooChatMessage.fromJsonString,
+        serializer: () => {},
+        clientVersion: "10",
+      },
+      options,
+    );
+  }
+}
+
+export class TestClientPrefixedUsersService {
+  private readonly _baseUrl: string;
+  private readonly _headers: HeaderMap | (() => HeaderMap | Promise<HeaderMap>);
+  private readonly _onError?: (err: unknown) => void;
+
+  constructor(
+    options: {
+      baseUrl?: string;
+      headers?: HeaderMap | (() => HeaderMap | Promise<HeaderMap>);
+      onError?: (err: unknown) => void;
+    } = {},
+  ) {
+    this._baseUrl = options.baseUrl ?? "";
+    this._headers = options.headers ?? {};
+    this._onError = options.onError;
+  }
+  watchUser(
+    params: FooUsersWatchUserParams,
+    options: SseOptions<FooUsersWatchUserResponse> = {},
+  ): EventSourceController {
+    return arriSseRequest<FooUsersWatchUserResponse, FooUsersWatchUserParams>(
+      {
+        url: `${this._baseUrl}/rpcs/users/watch-user`,
+        method: "get",
+        headers: this._headers,
+        onError: this._onError,
+        params: params,
+        responseFromJson: $$FooUsersWatchUserResponse.fromJson,
+        responseFromString: $$FooUsersWatchUserResponse.fromJsonString,
+        serializer: $$FooUsersWatchUserParams.toUrlQueryString,
+        clientVersion: "10",
+      },
+      options,
+    );
+  }
+}
+
+export interface FooManuallyAddedModel {
+  hello: string;
+}
+export const $$FooManuallyAddedModel: ArriModelValidator<FooManuallyAddedModel> =
+  {
+    new(): FooManuallyAddedModel {
+      return {
+        hello: "",
+      };
+    },
+    validate(input): input is FooManuallyAddedModel {
+      return isObject(input) && typeof input.hello === "string";
+    },
+    fromJson(input): FooManuallyAddedModel {
+      let _hello: string;
+      if (typeof input.hello === "string") {
+        _hello = input.hello;
+      } else {
+        _hello = "";
+      }
+      return {
+        hello: _hello,
+      };
+    },
+    fromJsonString(input): FooManuallyAddedModel {
+      return $$FooManuallyAddedModel.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"hello":';
+      json += serializeString(input.hello);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`hello=${input.hello}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooDefaultPayload {
+  message: string;
+}
+export const $$FooDefaultPayload: ArriModelValidator<FooDefaultPayload> = {
+  new(): FooDefaultPayload {
+    return {
+      message: "",
+    };
+  },
+  validate(input): input is FooDefaultPayload {
+    return isObject(input) && typeof input.message === "string";
+  },
+  fromJson(input): FooDefaultPayload {
+    let _message: string;
+    if (typeof input.message === "string") {
+      _message = input.message;
+    } else {
+      _message = "";
+    }
+    return {
+      message: _message,
+    };
+  },
+  fromJsonString(input): FooDefaultPayload {
+    return $$FooDefaultPayload.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"message":';
+    json += serializeString(input.message);
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push(`message=${input.message}`);
+    return queryParts.join("&");
+  },
+};
+
+/**
+ * @deprecated
+ */
+export interface FooDeprecatedRpcParams {
+  /**
+   * @deprecated
+   */
+  deprecatedField: string;
+}
+export const $$FooDeprecatedRpcParams: ArriModelValidator<FooDeprecatedRpcParams> =
+  {
+    new(): FooDeprecatedRpcParams {
+      return {
+        deprecatedField: "",
+      };
+    },
+    validate(input): input is FooDeprecatedRpcParams {
+      return isObject(input) && typeof input.deprecatedField === "string";
+    },
+    fromJson(input): FooDeprecatedRpcParams {
+      let _deprecatedField: string;
+      if (typeof input.deprecatedField === "string") {
+        _deprecatedField = input.deprecatedField;
+      } else {
+        _deprecatedField = "";
+      }
+      return {
+        deprecatedField: _deprecatedField,
+      };
+    },
+    fromJsonString(input): FooDeprecatedRpcParams {
+      return $$FooDeprecatedRpcParams.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"deprecatedField":';
+      json += serializeString(input.deprecatedField);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`deprecatedField=${input.deprecatedField}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooSendErrorParams {
+  code: number;
+  message: string;
+}
+export const $$FooSendErrorParams: ArriModelValidator<FooSendErrorParams> = {
+  new(): FooSendErrorParams {
+    return {
+      code: 0,
+      message: "",
+    };
+  },
+  validate(input): input is FooSendErrorParams {
+    return (
+      isObject(input) &&
+      typeof input.code === "number" &&
+      Number.isInteger(input.code) &&
+      input.code >= 0 &&
+      input.code <= UINT16_MAX &&
+      typeof input.message === "string"
+    );
+  },
+  fromJson(input): FooSendErrorParams {
+    let _code: number;
+    if (
+      typeof input.code === "number" &&
+      Number.isInteger(input.code) &&
+      input.code >= 0 &&
+      input.code <= UINT16_MAX
+    ) {
+      _code = input.code;
+    } else {
+      _code = 0;
+    }
+    let _message: string;
+    if (typeof input.message === "string") {
+      _message = input.message;
+    } else {
+      _message = "";
+    }
+    return {
+      code: _code,
+      message: _message,
+    };
+  },
+  fromJsonString(input): FooSendErrorParams {
+    return $$FooSendErrorParams.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"code":';
+    json += `${input.code}`;
+    json += ',"message":';
+    json += serializeString(input.message);
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push(`code=${input.code}`);
+    queryParts.push(`message=${input.message}`);
+    return queryParts.join("&");
+  },
+};
+
+export interface FooObjectWithEveryType {
+  any: any;
+  boolean: boolean;
+  string: string;
+  timestamp: Date;
+  float32: number;
+  float64: number;
+  int8: number;
+  uint8: number;
+  int16: number;
+  uint16: number;
+  int32: number;
+  uint32: number;
+  int64: bigint;
+  uint64: bigint;
+  enumerator: FooObjectWithEveryTypeEnumerator;
+  array: boolean[];
+  object: FooObjectWithEveryTypeObject;
+  record: Record<string, bigint>;
+  discriminator: FooObjectWithEveryTypeDiscriminator;
+  nestedObject: FooObjectWithEveryTypeNestedObject;
+  nestedArray: FooObjectWithEveryTypeNestedArrayElementElement[][];
+}
+export const $$FooObjectWithEveryType: ArriModelValidator<FooObjectWithEveryType> =
+  {
+    new(): FooObjectWithEveryType {
+      return {
+        any: undefined,
+        boolean: false,
+        string: "",
+        timestamp: new Date(),
+        float32: 0,
+        float64: 0,
+        int8: 0,
+        uint8: 0,
+        int16: 0,
+        uint16: 0,
+        int32: 0,
+        uint32: 0,
+        int64: BigInt(0),
+        uint64: BigInt(0),
+        enumerator: $$FooObjectWithEveryTypeEnumerator.new(),
+        array: [],
+        object: $$FooObjectWithEveryTypeObject.new(),
+        record: {},
+        discriminator: $$FooObjectWithEveryTypeDiscriminator.new(),
+        nestedObject: $$FooObjectWithEveryTypeNestedObject.new(),
+        nestedArray: [],
+      };
+    },
+    validate(input): input is FooObjectWithEveryType {
+      return (
+        isObject(input) &&
+        true &&
+        typeof input.boolean === "boolean" &&
+        typeof input.string === "string" &&
+        input.timestamp instanceof Date &&
+        typeof input.float32 === "number" &&
+        typeof input.float64 === "number" &&
+        typeof input.int8 === "number" &&
+        Number.isInteger(input.int8) &&
+        input.int8 >= INT8_MIN &&
+        input.int8 <= INT8_MAX &&
+        typeof input.uint8 === "number" &&
+        Number.isInteger(input.uint8) &&
+        input.uint8 >= 0 &&
+        input.uint8 <= UINT8_MAX &&
+        typeof input.int16 === "number" &&
+        Number.isInteger(input.int16) &&
+        input.int16 >= INT16_MIN &&
+        input.int16 <= INT16_MAX &&
+        typeof input.uint16 === "number" &&
+        Number.isInteger(input.uint16) &&
+        input.uint16 >= 0 &&
+        input.uint16 <= UINT16_MAX &&
+        typeof input.int32 === "number" &&
+        Number.isInteger(input.int32) &&
+        input.int32 >= INT32_MIN &&
+        input.int32 <= INT32_MAX &&
+        typeof input.uint32 === "number" &&
+        Number.isInteger(input.uint32) &&
+        input.uint32 >= 0 &&
+        input.uint32 <= UINT32_MAX &&
+        typeof input.int64 === "bigint" &&
+        input.int64 >= INT64_MIN &&
+        input.int64 <= INT64_MAX &&
+        typeof input.uint64 === "bigint" &&
+        input.uint64 >= BigInt(0) &&
+        input.uint64 <= UINT64_MAX &&
+        $$FooObjectWithEveryTypeEnumerator.validate(input.enumerator) &&
+        Array.isArray(input.array) &&
+        input.array.every((_element) => typeof _element === "boolean") &&
+        $$FooObjectWithEveryTypeObject.validate(input.object) &&
+        isObject(input.record) &&
+        Object.values(input.record).every(
+          (_value) =>
+            typeof _value === "bigint" &&
+            _value >= BigInt(0) &&
+            _value <= UINT64_MAX,
+        ) &&
+        $$FooObjectWithEveryTypeDiscriminator.validate(input.discriminator) &&
+        $$FooObjectWithEveryTypeNestedObject.validate(input.nestedObject) &&
+        Array.isArray(input.nestedArray) &&
+        input.nestedArray.every(
+          (_element) =>
+            Array.isArray(_element) &&
+            _element.every((_element) =>
+              $$FooObjectWithEveryTypeNestedArrayElementElement.validate(
+                _element,
+              ),
+            ),
+        )
+      );
+    },
+    fromJson(input): FooObjectWithEveryType {
+      let _any: any;
+      _any = input.any;
+      let _boolean: boolean;
+      if (typeof input.boolean === "boolean") {
+        _boolean = input.boolean;
+      } else {
+        _boolean = false;
+      }
+      let _string: string;
+      if (typeof input.string === "string") {
+        _string = input.string;
+      } else {
+        _string = "";
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      let _float32: number;
+      if (typeof input.float32 === "number") {
+        _float32 = input.float32;
+      } else {
+        _float32 = 0;
+      }
+      let _float64: number;
+      if (typeof input.float64 === "number") {
+        _float64 = input.float64;
+      } else {
+        _float64 = 0;
+      }
+      let _int8: number;
+      if (
+        typeof input.int8 === "number" &&
+        Number.isInteger(input.int8) &&
+        input.int8 >= INT8_MIN &&
+        input.int8 <= INT8_MAX
+      ) {
+        _int8 = input.int8;
+      } else {
+        _int8 = 0;
+      }
+      let _uint8: number;
+      if (
+        typeof input.uint8 === "number" &&
+        Number.isInteger(input.uint8) &&
+        input.uint8 >= 0 &&
+        input.uint8 <= UINT8_MAX
+      ) {
+        _uint8 = input.uint8;
+      } else {
+        _uint8 = 0;
+      }
+      let _int16: number;
+      if (
+        typeof input.int16 === "number" &&
+        Number.isInteger(input.int16) &&
+        input.int16 >= INT16_MIN &&
+        input.int16 <= INT16_MAX
+      ) {
+        _int16 = input.int16;
+      } else {
+        _int16 = 0;
+      }
+      let _uint16: number;
+      if (
+        typeof input.uint16 === "number" &&
+        Number.isInteger(input.uint16) &&
+        input.uint16 >= 0 &&
+        input.uint16 <= UINT16_MAX
+      ) {
+        _uint16 = input.uint16;
+      } else {
+        _uint16 = 0;
+      }
+      let _int32: number;
+      if (
+        typeof input.int32 === "number" &&
+        Number.isInteger(input.int32) &&
+        input.int32 >= INT32_MIN &&
+        input.int32 <= INT32_MAX
+      ) {
+        _int32 = input.int32;
+      } else {
+        _int32 = 0;
+      }
+      let _uint32: number;
+      if (
+        typeof input.uint32 === "number" &&
+        Number.isInteger(input.uint32) &&
+        input.uint32 >= 0 &&
+        input.uint32 <= UINT32_MAX
+      ) {
+        _uint32 = input.uint32;
+      } else {
+        _uint32 = 0;
+      }
+      let _int64: bigint;
+      if (typeof input.int64 === "string") {
+        _int64 = BigInt(input.int64);
+      } else if (typeof input.int64 === "bigint") {
+        _int64 = input.int64;
+      } else {
+        _int64 = BigInt(0);
+      }
+      let _uint64: bigint;
+      if (
+        typeof input.uint64 === "string" &&
+        BigInt(input.uint64) >= BigInt(0)
+      ) {
+        _uint64 = BigInt(input.uint64);
+      } else if (
+        typeof input.uint64 === "bigint" &&
+        input.uint64 >= BigInt(0)
+      ) {
+        _uint64 = input.uint64;
+      } else {
+        _uint64 = BigInt(0);
+      }
+      let _enumerator: FooObjectWithEveryTypeEnumerator;
+      if (typeof input.enumerator === "string") {
+        _enumerator = $$FooObjectWithEveryTypeEnumerator.fromSerialValue(
+          input.enumerator,
+        );
+      } else {
+        _enumerator = $$FooObjectWithEveryTypeEnumerator.new();
+      }
+      let _array: boolean[];
+      if (Array.isArray(input.array)) {
+        _array = [];
+        for (const _arrayEl of input.array) {
+          let _arrayElValue: boolean;
+          if (typeof _arrayEl === "boolean") {
+            _arrayElValue = _arrayEl;
+          } else {
+            _arrayElValue = false;
+          }
+          _array.push(_arrayElValue);
+        }
+      } else {
+        _array = [];
+      }
+      let _object: FooObjectWithEveryTypeObject;
+      if (isObject(input.object)) {
+        _object = $$FooObjectWithEveryTypeObject.fromJson(input.object);
+      } else {
+        _object = $$FooObjectWithEveryTypeObject.new();
+      }
+      let _record: Record<string, bigint>;
+      if (isObject(input.record)) {
+        _record = {};
+        for (const [_key, _value] of Object.entries(input.record)) {
+          let _recordValue: bigint;
+          if (typeof _value === "string" && BigInt(_value) >= BigInt(0)) {
+            _recordValue = BigInt(_value);
+          } else if (typeof _value === "bigint" && _value >= BigInt(0)) {
+            _recordValue = _value;
+          } else {
+            _recordValue = BigInt(0);
+          }
+          _record[_key] = _recordValue;
+        }
+      } else {
+        _record = {};
+      }
+      let _discriminator: FooObjectWithEveryTypeDiscriminator;
+      if (isObject(input.discriminator)) {
+        _discriminator = $$FooObjectWithEveryTypeDiscriminator.fromJson(
+          input.discriminator,
+        );
+      } else {
+        _discriminator = $$FooObjectWithEveryTypeDiscriminator.new();
+      }
+      let _nestedObject: FooObjectWithEveryTypeNestedObject;
+      if (isObject(input.nestedObject)) {
+        _nestedObject = $$FooObjectWithEveryTypeNestedObject.fromJson(
+          input.nestedObject,
+        );
+      } else {
+        _nestedObject = $$FooObjectWithEveryTypeNestedObject.new();
+      }
+      let _nestedArray: FooObjectWithEveryTypeNestedArrayElementElement[][];
+      if (Array.isArray(input.nestedArray)) {
+        _nestedArray = [];
+        for (const _nestedArrayEl of input.nestedArray) {
+          let _nestedArrayElValue: FooObjectWithEveryTypeNestedArrayElementElement[];
+          if (Array.isArray(_nestedArrayEl)) {
+            _nestedArrayElValue = [];
+            for (const _nestedArrayElValueEl of _nestedArrayEl) {
+              let _nestedArrayElValueElValue: FooObjectWithEveryTypeNestedArrayElementElement;
+              if (isObject(_nestedArrayElValueEl)) {
+                _nestedArrayElValueElValue =
+                  $$FooObjectWithEveryTypeNestedArrayElementElement.fromJson(
+                    _nestedArrayElValueEl,
+                  );
+              } else {
+                _nestedArrayElValueElValue =
+                  $$FooObjectWithEveryTypeNestedArrayElementElement.new();
+              }
+              _nestedArrayElValue.push(_nestedArrayElValueElValue);
+            }
+          } else {
+            _nestedArrayElValue = [];
+          }
+          _nestedArray.push(_nestedArrayElValue);
+        }
+      } else {
+        _nestedArray = [];
+      }
+      return {
+        any: _any,
+        boolean: _boolean,
+        string: _string,
+        timestamp: _timestamp,
+        float32: _float32,
+        float64: _float64,
+        int8: _int8,
+        uint8: _uint8,
+        int16: _int16,
+        uint16: _uint16,
+        int32: _int32,
+        uint32: _uint32,
+        int64: _int64,
+        uint64: _uint64,
+        enumerator: _enumerator,
+        array: _array,
+        object: _object,
+        record: _record,
+        discriminator: _discriminator,
+        nestedObject: _nestedObject,
+        nestedArray: _nestedArray,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryType {
+      return $$FooObjectWithEveryType.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"any":';
+      json += JSON.stringify(input.any);
+      json += ',"boolean":';
+      json += `${input.boolean}`;
+      json += ',"string":';
+      json += serializeString(input.string);
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += ',"float32":';
+      json += `${input.float32}`;
+      json += ',"float64":';
+      json += `${input.float64}`;
+      json += ',"int8":';
+      json += `${input.int8}`;
+      json += ',"uint8":';
+      json += `${input.uint8}`;
+      json += ',"int16":';
+      json += `${input.int16}`;
+      json += ',"uint16":';
+      json += `${input.uint16}`;
+      json += ',"int32":';
+      json += `${input.int32}`;
+      json += ',"uint32":';
+      json += `${input.uint32}`;
+      json += ',"int64":';
+      json += `"${input.int64}"`;
+      json += ',"uint64":';
+      json += `"${input.uint64}"`;
+      json += ',"enumerator":';
+      json += `"${input.enumerator}"`;
+      json += ',"array":';
+      json += "[";
+      for (let i = 0; i < input.array.length; i++) {
+        if (i !== 0) json += ",";
+        const _inputArrayEl = input.array[i];
+        json += `${_inputArrayEl}`;
+      }
+      json += "]";
+      json += ',"object":';
+      json += $$FooObjectWithEveryTypeObject.toJsonString(input.object);
+      json += ',"record":';
+      json += "{";
+      let _recordPropertyCount = 0;
+      for (const [_key, _value] of Object.entries(input.record)) {
+        if (_recordPropertyCount !== 0) {
+          json += ",";
+        }
+        json += `${serializeString(_key)}:`;
+        json += `"${_value}"`;
+        _recordPropertyCount++;
+      }
+      json += "}";
+
+      json += ',"discriminator":';
+      json += $$FooObjectWithEveryTypeDiscriminator.toJsonString(
+        input.discriminator,
+      );
+      json += ',"nestedObject":';
+      json += $$FooObjectWithEveryTypeNestedObject.toJsonString(
+        input.nestedObject,
+      );
+      json += ',"nestedArray":';
+      json += "[";
+      for (let i = 0; i < input.nestedArray.length; i++) {
+        if (i !== 0) json += ",";
+        const _inputNestedArrayEl = input.nestedArray[i];
+        json += "[";
+        for (let i = 0; i < _inputNestedArrayEl.length; i++) {
+          if (i !== 0) json += ",";
+          const _inputNestedArrayElEl = _inputNestedArrayEl[i];
+          json +=
+            $$FooObjectWithEveryTypeNestedArrayElementElement.toJsonString(
+              _inputNestedArrayElEl,
+            );
+        }
+        json += "]";
+      }
+      json += "]";
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      console.warn(
+        "[WARNING] Cannot serialize any's to query string. Skipping property at /ObjectWithEveryType/any.",
+      );
+      queryParts.push(`boolean=${input.boolean}`);
+      queryParts.push(`string=${input.string}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      queryParts.push(`float32=${input.float32}`);
+      queryParts.push(`float64=${input.float64}`);
+      queryParts.push(`int8=${input.int8}`);
+      queryParts.push(`uint8=${input.uint8}`);
+      queryParts.push(`int16=${input.int16}`);
+      queryParts.push(`uint16=${input.uint16}`);
+      queryParts.push(`int32=${input.int32}`);
+      queryParts.push(`uint32=${input.uint32}`);
+      queryParts.push(`int64=${input.int64}`);
+      queryParts.push(`uint64=${input.uint64}`);
+      queryParts.push(`enumerator=${input.enumerator}`);
+      console.warn(
+        "[WARNING] Cannot serialize arrays to query string. Skipping property at /ObjectWithEveryType/array.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryType/object.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryType/record.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryType/discriminator.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryType/nestedObject.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize arrays to query string. Skipping property at /ObjectWithEveryType/nestedArray.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+export type FooObjectWithEveryTypeEnumerator =
+  (typeof $$FooObjectWithEveryTypeEnumeratorValues)[number];
+const $$FooObjectWithEveryTypeEnumeratorValues = ["A", "B", "C"] as const;
+export const $$FooObjectWithEveryTypeEnumerator: ArriEnumValidator<FooObjectWithEveryTypeEnumerator> =
+  {
+    new(): FooObjectWithEveryTypeEnumerator {
+      return $$FooObjectWithEveryTypeEnumeratorValues[0];
+    },
+    validate(input): input is ObjectWithEveryTypeEnumerator {
+      return (
+        typeof input === "string" &&
+        $$FooObjectWithEveryTypeEnumeratorValues.includes(input as any)
+      );
+    },
+    values: $$FooObjectWithEveryTypeEnumeratorValues,
+    fromSerialValue(input): FooObjectWithEveryTypeEnumerator {
+      if ($$FooObjectWithEveryTypeEnumeratorValues.includes(input as any)) {
+        return input as FooObjectWithEveryTypeEnumerator;
+      }
+      if (
+        $$FooObjectWithEveryTypeEnumeratorValues.includes(
+          input.toLowerCase() as any,
+        )
+      ) {
+        return input.toLowerCase() as FooObjectWithEveryTypeEnumerator;
+      }
+      if (
+        $$FooObjectWithEveryTypeEnumeratorValues.includes(
+          input.toUpperCase() as any,
+        )
+      ) {
+        return input.toUpperCase() as FooObjectWithEveryTypeEnumerator;
+      }
+      return "A";
+    },
+  };
+
+export interface FooObjectWithEveryTypeObject {
+  string: string;
+  boolean: boolean;
+  timestamp: Date;
+}
+export const $$FooObjectWithEveryTypeObject: ArriModelValidator<FooObjectWithEveryTypeObject> =
+  {
+    new(): FooObjectWithEveryTypeObject {
+      return {
+        string: "",
+        boolean: false,
+        timestamp: new Date(),
+      };
+    },
+    validate(input): input is FooObjectWithEveryTypeObject {
+      return (
+        isObject(input) &&
+        typeof input.string === "string" &&
+        typeof input.boolean === "boolean" &&
+        input.timestamp instanceof Date
+      );
+    },
+    fromJson(input): FooObjectWithEveryTypeObject {
+      let _string: string;
+      if (typeof input.string === "string") {
+        _string = input.string;
+      } else {
+        _string = "";
+      }
+      let _boolean: boolean;
+      if (typeof input.boolean === "boolean") {
+        _boolean = input.boolean;
+      } else {
+        _boolean = false;
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      return {
+        string: _string,
+        boolean: _boolean,
+        timestamp: _timestamp,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryTypeObject {
+      return $$FooObjectWithEveryTypeObject.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"string":';
+      json += serializeString(input.string);
+      json += ',"boolean":';
+      json += `${input.boolean}`;
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`string=${input.string}`);
+      queryParts.push(`boolean=${input.boolean}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      return queryParts.join("&");
+    },
+  };
+
+export type FooObjectWithEveryTypeDiscriminator =
+  | FooObjectWithEveryTypeDiscriminatorA
+  | FooObjectWithEveryTypeDiscriminatorB;
+export const $$FooObjectWithEveryTypeDiscriminator: ArriModelValidator<FooObjectWithEveryTypeDiscriminator> =
+  {
+    new(): FooObjectWithEveryTypeDiscriminator {
+      return $$FooObjectWithEveryTypeDiscriminatorA.new();
+    },
+    validate(input): input is FooObjectWithEveryTypeDiscriminator {
+      if (!isObject(input)) {
+        return false;
+      }
+      if (typeof input.type !== "string") {
+        return false;
+      }
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryTypeDiscriminatorA.validate(input);
+        case "B":
+          return $$FooObjectWithEveryTypeDiscriminatorB.validate(input);
+        default:
+          return false;
+      }
+    },
+    fromJson(input): FooObjectWithEveryTypeDiscriminator {
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryTypeDiscriminatorA.fromJson(input);
+        case "B":
+          return $$FooObjectWithEveryTypeDiscriminatorB.fromJson(input);
+        default:
+          return $$FooObjectWithEveryTypeDiscriminatorA.new();
+      }
+    },
+    fromJsonString(input): FooObjectWithEveryTypeDiscriminator {
+      return $$FooObjectWithEveryTypeDiscriminator.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryTypeDiscriminatorA.toJsonString(input);
+        case "B":
+          return $$FooObjectWithEveryTypeDiscriminatorB.toJsonString(input);
+        default:
+          throw new Error(`Unhandled case "${(input as any).type}"`);
+      }
+    },
+    toUrlQueryString(input): string {
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryTypeDiscriminatorA.toUrlQueryString(input);
+        case "B":
+          return $$FooObjectWithEveryTypeDiscriminatorB.toUrlQueryString(input);
+        default:
+          throw new Error("Unhandled case");
+      }
+    },
+  };
+export interface FooObjectWithEveryTypeDiscriminatorA {
+  type: "A";
+  title: string;
+}
+const $$FooObjectWithEveryTypeDiscriminatorA: ArriModelValidator<FooObjectWithEveryTypeDiscriminatorA> =
+  {
+    new(): FooObjectWithEveryTypeDiscriminatorA {
+      return {
+        type: "A",
+        title: "",
+      };
+    },
+    validate(input): input is FooObjectWithEveryTypeDiscriminatorA {
+      return (
+        isObject(input) && input.type === "A" && typeof input.title === "string"
+      );
+    },
+    fromJson(input): FooObjectWithEveryTypeDiscriminatorA {
+      const _type = "A";
+      let _title: string;
+      if (typeof input.title === "string") {
+        _title = input.title;
+      } else {
+        _title = "";
+      }
+      return {
+        type: _type,
+        title: _title,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryTypeDiscriminatorA {
+      return $$FooObjectWithEveryTypeDiscriminatorA.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"type":"A"';
+      json += ',"title":';
+      json += serializeString(input.title);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push("type=A");
+      queryParts.push(`title=${input.title}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryTypeDiscriminatorB {
+  type: "B";
+  title: string;
+  description: string;
+}
+const $$FooObjectWithEveryTypeDiscriminatorB: ArriModelValidator<FooObjectWithEveryTypeDiscriminatorB> =
+  {
+    new(): FooObjectWithEveryTypeDiscriminatorB {
+      return {
+        type: "B",
+        title: "",
+        description: "",
+      };
+    },
+    validate(input): input is FooObjectWithEveryTypeDiscriminatorB {
+      return (
+        isObject(input) &&
+        input.type === "B" &&
+        typeof input.title === "string" &&
+        typeof input.description === "string"
+      );
+    },
+    fromJson(input): FooObjectWithEveryTypeDiscriminatorB {
+      const _type = "B";
+      let _title: string;
+      if (typeof input.title === "string") {
+        _title = input.title;
+      } else {
+        _title = "";
+      }
+      let _description: string;
+      if (typeof input.description === "string") {
+        _description = input.description;
+      } else {
+        _description = "";
+      }
+      return {
+        type: _type,
+        title: _title,
+        description: _description,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryTypeDiscriminatorB {
+      return $$FooObjectWithEveryTypeDiscriminatorB.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"type":"B"';
+      json += ',"title":';
+      json += serializeString(input.title);
+      json += ',"description":';
+      json += serializeString(input.description);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push("type=B");
+      queryParts.push(`title=${input.title}`);
+      queryParts.push(`description=${input.description}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryTypeNestedObject {
+  id: string;
+  timestamp: Date;
+  data: FooObjectWithEveryTypeNestedObjectData;
+}
+export const $$FooObjectWithEveryTypeNestedObject: ArriModelValidator<FooObjectWithEveryTypeNestedObject> =
+  {
+    new(): FooObjectWithEveryTypeNestedObject {
+      return {
+        id: "",
+        timestamp: new Date(),
+        data: $$FooObjectWithEveryTypeNestedObjectData.new(),
+      };
+    },
+    validate(input): input is FooObjectWithEveryTypeNestedObject {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        input.timestamp instanceof Date &&
+        $$FooObjectWithEveryTypeNestedObjectData.validate(input.data)
+      );
+    },
+    fromJson(input): FooObjectWithEveryTypeNestedObject {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      let _data: FooObjectWithEveryTypeNestedObjectData;
+      if (isObject(input.data)) {
+        _data = $$FooObjectWithEveryTypeNestedObjectData.fromJson(input.data);
+      } else {
+        _data = $$FooObjectWithEveryTypeNestedObjectData.new();
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+        data: _data,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryTypeNestedObject {
+      return $$FooObjectWithEveryTypeNestedObject.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += ',"data":';
+      json += $$FooObjectWithEveryTypeNestedObjectData.toJsonString(input.data);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryTypeNestedObject/data.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryTypeNestedObjectData {
+  id: string;
+  timestamp: Date;
+  data: FooObjectWithEveryTypeNestedObjectDataData;
+}
+export const $$FooObjectWithEveryTypeNestedObjectData: ArriModelValidator<FooObjectWithEveryTypeNestedObjectData> =
+  {
+    new(): FooObjectWithEveryTypeNestedObjectData {
+      return {
+        id: "",
+        timestamp: new Date(),
+        data: $$FooObjectWithEveryTypeNestedObjectDataData.new(),
+      };
+    },
+    validate(input): input is FooObjectWithEveryTypeNestedObjectData {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        input.timestamp instanceof Date &&
+        $$FooObjectWithEveryTypeNestedObjectDataData.validate(input.data)
+      );
+    },
+    fromJson(input): FooObjectWithEveryTypeNestedObjectData {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      let _data: FooObjectWithEveryTypeNestedObjectDataData;
+      if (isObject(input.data)) {
+        _data = $$FooObjectWithEveryTypeNestedObjectDataData.fromJson(
+          input.data,
+        );
+      } else {
+        _data = $$FooObjectWithEveryTypeNestedObjectDataData.new();
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+        data: _data,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryTypeNestedObjectData {
+      return $$FooObjectWithEveryTypeNestedObjectData.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += ',"data":';
+      json += $$FooObjectWithEveryTypeNestedObjectDataData.toJsonString(
+        input.data,
+      );
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryTypeNestedObjectData/data.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryTypeNestedObjectDataData {
+  id: string;
+  timestamp: Date;
+}
+export const $$FooObjectWithEveryTypeNestedObjectDataData: ArriModelValidator<FooObjectWithEveryTypeNestedObjectDataData> =
+  {
+    new(): FooObjectWithEveryTypeNestedObjectDataData {
+      return {
+        id: "",
+        timestamp: new Date(),
+      };
+    },
+    validate(input): input is FooObjectWithEveryTypeNestedObjectDataData {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        input.timestamp instanceof Date
+      );
+    },
+    fromJson(input): FooObjectWithEveryTypeNestedObjectDataData {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryTypeNestedObjectDataData {
+      return $$FooObjectWithEveryTypeNestedObjectDataData.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryTypeNestedArrayElementElement {
+  id: string;
+  timestamp: Date;
+}
+export const $$FooObjectWithEveryTypeNestedArrayElementElement: ArriModelValidator<FooObjectWithEveryTypeNestedArrayElementElement> =
+  {
+    new(): FooObjectWithEveryTypeNestedArrayElementElement {
+      return {
+        id: "",
+        timestamp: new Date(),
+      };
+    },
+    validate(input): input is FooObjectWithEveryTypeNestedArrayElementElement {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        input.timestamp instanceof Date
+      );
+    },
+    fromJson(input): FooObjectWithEveryTypeNestedArrayElementElement {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryTypeNestedArrayElementElement {
+      return $$FooObjectWithEveryTypeNestedArrayElementElement.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryNullableType {
+  any: any;
+  boolean: boolean | null;
+  string: string | null;
+  timestamp: Date | null;
+  float32: number | null;
+  float64: number | null;
+  int8: number | null;
+  uint8: number | null;
+  int16: number | null;
+  uint16: number | null;
+  int32: number | null;
+  uint32: number | null;
+  int64: bigint | null;
+  uint64: bigint | null;
+  enumerator: FooObjectWithEveryNullableTypeEnumerator | null;
+  array: (boolean | null)[] | null;
+  object: FooObjectWithEveryNullableTypeObject | null;
+  record: Record<string, bigint | null> | null;
+  discriminator: FooObjectWithEveryNullableTypeDiscriminator | null;
+  nestedObject: FooObjectWithEveryNullableTypeNestedObject | null;
+  nestedArray:
+    | (
+        | (FooObjectWithEveryNullableTypeNestedArrayElementElement | null)[]
+        | null
+      )[]
+    | null;
+}
+export const $$FooObjectWithEveryNullableType: ArriModelValidator<FooObjectWithEveryNullableType> =
+  {
+    new(): FooObjectWithEveryNullableType {
+      return {
+        any: null,
+        boolean: null,
+        string: null,
+        timestamp: null,
+        float32: null,
+        float64: null,
+        int8: null,
+        uint8: null,
+        int16: null,
+        uint16: null,
+        int32: null,
+        uint32: null,
+        int64: null,
+        uint64: null,
+        enumerator: null,
+        array: null,
+        object: null,
+        record: null,
+        discriminator: null,
+        nestedObject: null,
+        nestedArray: null,
+      };
+    },
+    validate(input): input is FooObjectWithEveryNullableType {
+      return (
+        isObject(input) &&
+        true &&
+        (typeof input.boolean === "boolean" || input.boolean === null) &&
+        (typeof input.string === "string" || input.string === null) &&
+        (input.timestamp instanceof Date || input.timestamp === null) &&
+        (typeof input.float32 === "number" || input.float32 === null) &&
+        (typeof input.float64 === "number" || input.float64 === null) &&
+        ((typeof input.int8 === "number" &&
+          Number.isInteger(input.int8) &&
+          input.int8 >= INT8_MIN &&
+          input.int8 <= INT8_MAX) ||
+          input.int8 === null) &&
+        ((typeof input.uint8 === "number" &&
+          Number.isInteger(input.uint8) &&
+          input.uint8 >= 0 &&
+          input.uint8 <= UINT8_MAX) ||
+          input.uint8 === null) &&
+        ((typeof input.int16 === "number" &&
+          Number.isInteger(input.int16) &&
+          input.int16 >= INT16_MIN &&
+          input.int16 <= INT16_MAX) ||
+          input.int16 === null) &&
+        ((typeof input.uint16 === "number" &&
+          Number.isInteger(input.uint16) &&
+          input.uint16 >= 0 &&
+          input.uint16 <= UINT16_MAX) ||
+          input.uint16 === null) &&
+        ((typeof input.int32 === "number" &&
+          Number.isInteger(input.int32) &&
+          input.int32 >= INT32_MIN &&
+          input.int32 <= INT32_MAX) ||
+          input.int32 === null) &&
+        ((typeof input.uint32 === "number" &&
+          Number.isInteger(input.uint32) &&
+          input.uint32 >= 0 &&
+          input.uint32 <= UINT32_MAX) ||
+          input.uint32 === null) &&
+        ((typeof input.int64 === "bigint" &&
+          input.int64 >= INT64_MIN &&
+          input.int64 <= INT64_MAX) ||
+          input.int64 === null) &&
+        ((typeof input.uint64 === "bigint" &&
+          input.uint64 >= BigInt(0) &&
+          input.uint64 <= UINT64_MAX) ||
+          input.uint64 === null) &&
+        ($$FooObjectWithEveryNullableTypeEnumerator.validate(
+          input.enumerator,
+        ) ||
+          input.enumerator === null) &&
+        ((Array.isArray(input.array) &&
+          input.array.every(
+            (_element) => typeof _element === "boolean" || _element === null,
+          )) ||
+          input.array === null) &&
+        ($$FooObjectWithEveryNullableTypeObject.validate(input.object) ||
+          input.object === null) &&
+        ((isObject(input.record) &&
+          Object.values(input.record).every(
+            (_value) =>
+              (typeof _value === "bigint" &&
+                _value >= BigInt(0) &&
+                _value <= UINT64_MAX) ||
+              _value === null,
+          )) ||
+          input.record === null) &&
+        ($$FooObjectWithEveryNullableTypeDiscriminator.validate(
+          input.discriminator,
+        ) ||
+          input.discriminator === null) &&
+        ($$FooObjectWithEveryNullableTypeNestedObject.validate(
+          input.nestedObject,
+        ) ||
+          input.nestedObject === null) &&
+        ((Array.isArray(input.nestedArray) &&
+          input.nestedArray.every(
+            (_element) =>
+              (Array.isArray(_element) &&
+                _element.every(
+                  (_element) =>
+                    $$FooObjectWithEveryNullableTypeNestedArrayElementElement.validate(
+                      _element,
+                    ) || _element === null,
+                )) ||
+              _element === null,
+          )) ||
+          input.nestedArray === null)
+      );
+    },
+    fromJson(input): FooObjectWithEveryNullableType {
+      let _any: any;
+      _any = input.any;
+      let _boolean: boolean | null;
+      if (typeof input.boolean === "boolean") {
+        _boolean = input.boolean;
+      } else {
+        _boolean = null;
+      }
+      let _string: string | null;
+      if (typeof input.string === "string") {
+        _string = input.string;
+      } else {
+        _string = null;
+      }
+      let _timestamp: Date | null;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = null;
+      }
+      let _float32: number | null;
+      if (typeof input.float32 === "number") {
+        _float32 = input.float32;
+      } else {
+        _float32 = null;
+      }
+      let _float64: number | null;
+      if (typeof input.float64 === "number") {
+        _float64 = input.float64;
+      } else {
+        _float64 = null;
+      }
+      let _int8: number | null;
+      if (
+        typeof input.int8 === "number" &&
+        Number.isInteger(input.int8) &&
+        input.int8 >= INT8_MIN &&
+        input.int8 <= INT8_MAX
+      ) {
+        _int8 = input.int8;
+      } else {
+        _int8 = null;
+      }
+      let _uint8: number | null;
+      if (
+        typeof input.uint8 === "number" &&
+        Number.isInteger(input.uint8) &&
+        input.uint8 >= 0 &&
+        input.uint8 <= UINT8_MAX
+      ) {
+        _uint8 = input.uint8;
+      } else {
+        _uint8 = null;
+      }
+      let _int16: number | null;
+      if (
+        typeof input.int16 === "number" &&
+        Number.isInteger(input.int16) &&
+        input.int16 >= INT16_MIN &&
+        input.int16 <= INT16_MAX
+      ) {
+        _int16 = input.int16;
+      } else {
+        _int16 = null;
+      }
+      let _uint16: number | null;
+      if (
+        typeof input.uint16 === "number" &&
+        Number.isInteger(input.uint16) &&
+        input.uint16 >= 0 &&
+        input.uint16 <= UINT16_MAX
+      ) {
+        _uint16 = input.uint16;
+      } else {
+        _uint16 = null;
+      }
+      let _int32: number | null;
+      if (
+        typeof input.int32 === "number" &&
+        Number.isInteger(input.int32) &&
+        input.int32 >= INT32_MIN &&
+        input.int32 <= INT32_MAX
+      ) {
+        _int32 = input.int32;
+      } else {
+        _int32 = null;
+      }
+      let _uint32: number | null;
+      if (
+        typeof input.uint32 === "number" &&
+        Number.isInteger(input.uint32) &&
+        input.uint32 >= 0 &&
+        input.uint32 <= UINT32_MAX
+      ) {
+        _uint32 = input.uint32;
+      } else {
+        _uint32 = null;
+      }
+      let _int64: bigint | null;
+      if (typeof input.int64 === "string") {
+        _int64 = BigInt(input.int64);
+      } else if (typeof input.int64 === "bigint") {
+        _int64 = input.int64;
+      } else {
+        _int64 = null;
+      }
+      let _uint64: bigint | null;
+      if (
+        typeof input.uint64 === "string" &&
+        BigInt(input.uint64) >= BigInt(0)
+      ) {
+        _uint64 = BigInt(input.uint64);
+      } else if (
+        typeof input.uint64 === "bigint" &&
+        input.uint64 >= BigInt(0)
+      ) {
+        _uint64 = input.uint64;
+      } else {
+        _uint64 = null;
+      }
+      let _enumerator: FooObjectWithEveryNullableTypeEnumerator | null;
+      if (typeof input.enumerator === "string") {
+        _enumerator =
+          $$FooObjectWithEveryNullableTypeEnumerator.fromSerialValue(
+            input.enumerator,
+          );
+      } else {
+        _enumerator = null;
+      }
+      let _array: (boolean | null)[] | null;
+      if (Array.isArray(input.array)) {
+        _array = [];
+        for (const _arrayEl of input.array) {
+          let _arrayElValue: boolean | null;
+          if (typeof _arrayEl === "boolean") {
+            _arrayElValue = _arrayEl;
+          } else {
+            _arrayElValue = null;
+          }
+          _array.push(_arrayElValue);
+        }
+      } else {
+        _array = null;
+      }
+      let _object: FooObjectWithEveryNullableTypeObject | null;
+      if (isObject(input.object)) {
+        _object = $$FooObjectWithEveryNullableTypeObject.fromJson(input.object);
+      } else {
+        _object = null;
+      }
+      let _record: Record<string, bigint | null> | null;
+      if (isObject(input.record)) {
+        _record = {};
+        for (const [_key, _value] of Object.entries(input.record)) {
+          let _recordValue: bigint | null;
+          if (typeof _value === "string" && BigInt(_value) >= BigInt(0)) {
+            _recordValue = BigInt(_value);
+          } else if (typeof _value === "bigint" && _value >= BigInt(0)) {
+            _recordValue = _value;
+          } else {
+            _recordValue = null;
+          }
+          _record[_key] = _recordValue;
+        }
+      } else {
+        _record = null;
+      }
+      let _discriminator: FooObjectWithEveryNullableTypeDiscriminator | null;
+      if (isObject(input.discriminator)) {
+        _discriminator = $$FooObjectWithEveryNullableTypeDiscriminator.fromJson(
+          input.discriminator,
+        );
+      } else {
+        _discriminator = null;
+      }
+      let _nestedObject: FooObjectWithEveryNullableTypeNestedObject | null;
+      if (isObject(input.nestedObject)) {
+        _nestedObject = $$FooObjectWithEveryNullableTypeNestedObject.fromJson(
+          input.nestedObject,
+        );
+      } else {
+        _nestedObject = null;
+      }
+      let _nestedArray:
+        | (
+            | (FooObjectWithEveryNullableTypeNestedArrayElementElement | null)[]
+            | null
+          )[]
+        | null;
+      if (Array.isArray(input.nestedArray)) {
+        _nestedArray = [];
+        for (const _nestedArrayEl of input.nestedArray) {
+          let _nestedArrayElValue:
+            | (FooObjectWithEveryNullableTypeNestedArrayElementElement | null)[]
+            | null;
+          if (Array.isArray(_nestedArrayEl)) {
+            _nestedArrayElValue = [];
+            for (const _nestedArrayElValueEl of _nestedArrayEl) {
+              let _nestedArrayElValueElValue: FooObjectWithEveryNullableTypeNestedArrayElementElement | null;
+              if (isObject(_nestedArrayElValueEl)) {
+                _nestedArrayElValueElValue =
+                  $$FooObjectWithEveryNullableTypeNestedArrayElementElement.fromJson(
+                    _nestedArrayElValueEl,
+                  );
+              } else {
+                _nestedArrayElValueElValue = null;
+              }
+              _nestedArrayElValue.push(_nestedArrayElValueElValue);
+            }
+          } else {
+            _nestedArrayElValue = null;
+          }
+          _nestedArray.push(_nestedArrayElValue);
+        }
+      } else {
+        _nestedArray = null;
+      }
+      return {
+        any: _any,
+        boolean: _boolean,
+        string: _string,
+        timestamp: _timestamp,
+        float32: _float32,
+        float64: _float64,
+        int8: _int8,
+        uint8: _uint8,
+        int16: _int16,
+        uint16: _uint16,
+        int32: _int32,
+        uint32: _uint32,
+        int64: _int64,
+        uint64: _uint64,
+        enumerator: _enumerator,
+        array: _array,
+        object: _object,
+        record: _record,
+        discriminator: _discriminator,
+        nestedObject: _nestedObject,
+        nestedArray: _nestedArray,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryNullableType {
+      return $$FooObjectWithEveryNullableType.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"any":';
+      json += JSON.stringify(input.any);
+      json += ',"boolean":';
+      json += `${input.boolean}`;
+      json += ',"string":';
+      if (typeof input.string === "string") {
+        json += serializeString(input.string);
+      } else {
+        json += "null";
+      }
+      json += ',"timestamp":';
+      if (input.timestamp instanceof Date) {
+        json += `"${input.timestamp.toISOString()}"`;
+      } else {
+        json += "null";
+      }
+      json += ',"float32":';
+      json += `${input.float32}`;
+      json += ',"float64":';
+      json += `${input.float64}`;
+      json += ',"int8":';
+      json += `${input.int8}`;
+      json += ',"uint8":';
+      json += `${input.uint8}`;
+      json += ',"int16":';
+      json += `${input.int16}`;
+      json += ',"uint16":';
+      json += `${input.uint16}`;
+      json += ',"int32":';
+      json += `${input.int32}`;
+      json += ',"uint32":';
+      json += `${input.uint32}`;
+      json += ',"int64":';
+      if (typeof input.int64 === "bigint") {
+        json += `"${input.int64}"`;
+      } else {
+        json += "null";
+      }
+      json += ',"uint64":';
+      if (typeof input.uint64 === "bigint") {
+        json += `"${input.uint64}"`;
+      } else {
+        json += "null";
+      }
+      json += ',"enumerator":';
+      if (typeof input.enumerator === "string") {
+        json += `"${input.enumerator}"`;
+      } else {
+        json += "null";
+      }
+      json += ',"array":';
+      if (input.array !== null) {
+        json += "[";
+        for (let i = 0; i < input.array.length; i++) {
+          if (i !== 0) json += ",";
+          const _inputArrayEl = input.array[i];
+          json += `${_inputArrayEl}`;
+        }
+        json += "]";
+      } else {
+        json += "null";
+      }
+      json += ',"object":';
+      if (input.object !== null) {
+        json += $$FooObjectWithEveryNullableTypeObject.toJsonString(
+          input.object,
+        );
+      } else {
+        json += "null";
+      }
+      json += ',"record":';
+      if (input.record !== null) {
+        json += "{";
+        let _recordPropertyCount = 0;
+        for (const [_key, _value] of Object.entries(input.record)) {
+          if (_recordPropertyCount !== 0) {
+            json += ",";
+          }
+          json += `${serializeString(_key)}:`;
+          if (typeof _value === "bigint") {
+            json += `"${_value}"`;
+          } else {
+            json += "null";
+          }
+          _recordPropertyCount++;
+        }
+        json += "}";
+      } else {
+        json += "null";
+      }
+      json += ',"discriminator":';
+      if (input.discriminator != null) {
+        json += $$FooObjectWithEveryNullableTypeDiscriminator.toJsonString(
+          input.discriminator,
+        );
+      } else {
+        json += "null";
+      }
+      json += ',"nestedObject":';
+      if (input.nestedObject !== null) {
+        json += $$FooObjectWithEveryNullableTypeNestedObject.toJsonString(
+          input.nestedObject,
+        );
+      } else {
+        json += "null";
+      }
+      json += ',"nestedArray":';
+      if (input.nestedArray !== null) {
+        json += "[";
+        for (let i = 0; i < input.nestedArray.length; i++) {
+          if (i !== 0) json += ",";
+          const _inputNestedArrayEl = input.nestedArray[i];
+          if (_inputNestedArrayEl !== null) {
+            json += "[";
+            for (let i = 0; i < _inputNestedArrayEl.length; i++) {
+              if (i !== 0) json += ",";
+              const _inputNestedArrayElEl = _inputNestedArrayEl[i];
+              if (_inputNestedArrayElEl !== null) {
+                json +=
+                  $$FooObjectWithEveryNullableTypeNestedArrayElementElement.toJsonString(
+                    _inputNestedArrayElEl,
+                  );
+              } else {
+                json += "null";
+              }
+            }
+            json += "]";
+          } else {
+            json += "null";
+          }
+        }
+        json += "]";
+      } else {
+        json += "null";
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      console.warn(
+        "[WARNING] Cannot serialize any's to query string. Skipping property at /ObjectWithEveryNullableType/any.",
+      );
+      queryParts.push(`boolean=${input.boolean}`);
+      queryParts.push(`string=${input.string}`);
+      queryParts.push(`timestamp=${input.timestamp?.toISOString()}`);
+      queryParts.push(`float32=${input.float32}`);
+      queryParts.push(`float64=${input.float64}`);
+      queryParts.push(`int8=${input.int8}`);
+      queryParts.push(`uint8=${input.uint8}`);
+      queryParts.push(`int16=${input.int16}`);
+      queryParts.push(`uint16=${input.uint16}`);
+      queryParts.push(`int32=${input.int32}`);
+      queryParts.push(`uint32=${input.uint32}`);
+      queryParts.push(`int64=${input.int64}`);
+      queryParts.push(`uint64=${input.uint64}`);
+      queryParts.push(`enumerator=${input.enumerator}`);
+      console.warn(
+        "[WARNING] Cannot serialize arrays to query string. Skipping property at /ObjectWithEveryNullableType/array.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryNullableType/object.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryNullableType/record.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryNullableType/discriminator.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryNullableType/nestedObject.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize arrays to query string. Skipping property at /ObjectWithEveryNullableType/nestedArray.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+export type FooObjectWithEveryNullableTypeEnumerator =
+  (typeof $$FooObjectWithEveryNullableTypeEnumeratorValues)[number];
+const $$FooObjectWithEveryNullableTypeEnumeratorValues = [
+  "A",
+  "B",
+  "C",
+] as const;
+export const $$FooObjectWithEveryNullableTypeEnumerator: ArriEnumValidator<FooObjectWithEveryNullableTypeEnumerator> =
+  {
+    new(): FooObjectWithEveryNullableTypeEnumerator {
+      return $$FooObjectWithEveryNullableTypeEnumeratorValues[0];
+    },
+    validate(input): input is ObjectWithEveryNullableTypeEnumerator {
+      return (
+        typeof input === "string" &&
+        $$FooObjectWithEveryNullableTypeEnumeratorValues.includes(input as any)
+      );
+    },
+    values: $$FooObjectWithEveryNullableTypeEnumeratorValues,
+    fromSerialValue(input): FooObjectWithEveryNullableTypeEnumerator {
+      if (
+        $$FooObjectWithEveryNullableTypeEnumeratorValues.includes(input as any)
+      ) {
+        return input as FooObjectWithEveryNullableTypeEnumerator;
+      }
+      if (
+        $$FooObjectWithEveryNullableTypeEnumeratorValues.includes(
+          input.toLowerCase() as any,
+        )
+      ) {
+        return input.toLowerCase() as FooObjectWithEveryNullableTypeEnumerator;
+      }
+      if (
+        $$FooObjectWithEveryNullableTypeEnumeratorValues.includes(
+          input.toUpperCase() as any,
+        )
+      ) {
+        return input.toUpperCase() as FooObjectWithEveryNullableTypeEnumerator;
+      }
+      return "A";
+    },
+  };
+
+export interface FooObjectWithEveryNullableTypeObject {
+  string: string | null;
+  boolean: boolean | null;
+  timestamp: Date | null;
+}
+export const $$FooObjectWithEveryNullableTypeObject: ArriModelValidator<FooObjectWithEveryNullableTypeObject> =
+  {
+    new(): FooObjectWithEveryNullableTypeObject {
+      return {
+        string: null,
+        boolean: null,
+        timestamp: null,
+      };
+    },
+    validate(input): input is FooObjectWithEveryNullableTypeObject {
+      return (
+        isObject(input) &&
+        (typeof input.string === "string" || input.string === null) &&
+        (typeof input.boolean === "boolean" || input.boolean === null) &&
+        (input.timestamp instanceof Date || input.timestamp === null)
+      );
+    },
+    fromJson(input): FooObjectWithEveryNullableTypeObject {
+      let _string: string | null;
+      if (typeof input.string === "string") {
+        _string = input.string;
+      } else {
+        _string = null;
+      }
+      let _boolean: boolean | null;
+      if (typeof input.boolean === "boolean") {
+        _boolean = input.boolean;
+      } else {
+        _boolean = null;
+      }
+      let _timestamp: Date | null;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = null;
+      }
+      return {
+        string: _string,
+        boolean: _boolean,
+        timestamp: _timestamp,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryNullableTypeObject {
+      return $$FooObjectWithEveryNullableTypeObject.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"string":';
+      if (typeof input.string === "string") {
+        json += serializeString(input.string);
+      } else {
+        json += "null";
+      }
+      json += ',"boolean":';
+      json += `${input.boolean}`;
+      json += ',"timestamp":';
+      if (input.timestamp instanceof Date) {
+        json += `"${input.timestamp.toISOString()}"`;
+      } else {
+        json += "null";
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`string=${input.string}`);
+      queryParts.push(`boolean=${input.boolean}`);
+      queryParts.push(`timestamp=${input.timestamp?.toISOString()}`);
+      return queryParts.join("&");
+    },
+  };
+
+export type FooObjectWithEveryNullableTypeDiscriminator =
+  | FooObjectWithEveryNullableTypeDiscriminatorA
+  | FooObjectWithEveryNullableTypeDiscriminatorB;
+export const $$FooObjectWithEveryNullableTypeDiscriminator: ArriModelValidator<FooObjectWithEveryNullableTypeDiscriminator> =
+  {
+    new(): FooObjectWithEveryNullableTypeDiscriminator {
+      return $$FooObjectWithEveryNullableTypeDiscriminatorA.new();
+    },
+    validate(input): input is FooObjectWithEveryNullableTypeDiscriminator {
+      if (!isObject(input)) {
+        return false;
+      }
+      if (typeof input.type !== "string") {
+        return false;
+      }
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryNullableTypeDiscriminatorA.validate(input);
+        case "B":
+          return $$FooObjectWithEveryNullableTypeDiscriminatorB.validate(input);
+        default:
+          return false;
+      }
+    },
+    fromJson(input): FooObjectWithEveryNullableTypeDiscriminator {
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryNullableTypeDiscriminatorA.fromJson(input);
+        case "B":
+          return $$FooObjectWithEveryNullableTypeDiscriminatorB.fromJson(input);
+        default:
+          return $$FooObjectWithEveryNullableTypeDiscriminatorA.new();
+      }
+    },
+    fromJsonString(input): FooObjectWithEveryNullableTypeDiscriminator {
+      return $$FooObjectWithEveryNullableTypeDiscriminator.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryNullableTypeDiscriminatorA.toJsonString(
+            input,
+          );
+        case "B":
+          return $$FooObjectWithEveryNullableTypeDiscriminatorB.toJsonString(
+            input,
+          );
+        default:
+          throw new Error(`Unhandled case "${(input as any).type}"`);
+      }
+    },
+    toUrlQueryString(input): string {
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryNullableTypeDiscriminatorA.toUrlQueryString(
+            input,
+          );
+        case "B":
+          return $$FooObjectWithEveryNullableTypeDiscriminatorB.toUrlQueryString(
+            input,
+          );
+        default:
+          throw new Error("Unhandled case");
+      }
+    },
+  };
+export interface FooObjectWithEveryNullableTypeDiscriminatorA {
+  type: "A";
+  title: string | null;
+}
+const $$FooObjectWithEveryNullableTypeDiscriminatorA: ArriModelValidator<FooObjectWithEveryNullableTypeDiscriminatorA> =
+  {
+    new(): FooObjectWithEveryNullableTypeDiscriminatorA {
+      return {
+        type: "A",
+        title: null,
+      };
+    },
+    validate(input): input is FooObjectWithEveryNullableTypeDiscriminatorA {
+      return (
+        isObject(input) &&
+        input.type === "A" &&
+        (typeof input.title === "string" || input.title === null)
+      );
+    },
+    fromJson(input): FooObjectWithEveryNullableTypeDiscriminatorA {
+      const _type = "A";
+      let _title: string | null;
+      if (typeof input.title === "string") {
+        _title = input.title;
+      } else {
+        _title = null;
+      }
+      return {
+        type: _type,
+        title: _title,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryNullableTypeDiscriminatorA {
+      return $$FooObjectWithEveryNullableTypeDiscriminatorA.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"type":"A"';
+      json += ',"title":';
+      if (typeof input.title === "string") {
+        json += serializeString(input.title);
+      } else {
+        json += "null";
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push("type=A");
+      queryParts.push(`title=${input.title}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryNullableTypeDiscriminatorB {
+  type: "B";
+  title: string | null;
+  description: string | null;
+}
+const $$FooObjectWithEveryNullableTypeDiscriminatorB: ArriModelValidator<FooObjectWithEveryNullableTypeDiscriminatorB> =
+  {
+    new(): FooObjectWithEveryNullableTypeDiscriminatorB {
+      return {
+        type: "B",
+        title: null,
+        description: null,
+      };
+    },
+    validate(input): input is FooObjectWithEveryNullableTypeDiscriminatorB {
+      return (
+        isObject(input) &&
+        input.type === "B" &&
+        (typeof input.title === "string" || input.title === null) &&
+        (typeof input.description === "string" || input.description === null)
+      );
+    },
+    fromJson(input): FooObjectWithEveryNullableTypeDiscriminatorB {
+      const _type = "B";
+      let _title: string | null;
+      if (typeof input.title === "string") {
+        _title = input.title;
+      } else {
+        _title = null;
+      }
+      let _description: string | null;
+      if (typeof input.description === "string") {
+        _description = input.description;
+      } else {
+        _description = null;
+      }
+      return {
+        type: _type,
+        title: _title,
+        description: _description,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryNullableTypeDiscriminatorB {
+      return $$FooObjectWithEveryNullableTypeDiscriminatorB.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"type":"B"';
+      json += ',"title":';
+      if (typeof input.title === "string") {
+        json += serializeString(input.title);
+      } else {
+        json += "null";
+      }
+      json += ',"description":';
+      if (typeof input.description === "string") {
+        json += serializeString(input.description);
+      } else {
+        json += "null";
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push("type=B");
+      queryParts.push(`title=${input.title}`);
+      queryParts.push(`description=${input.description}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryNullableTypeNestedObject {
+  id: string | null;
+  timestamp: Date | null;
+  data: FooObjectWithEveryNullableTypeNestedObjectData | null;
+}
+export const $$FooObjectWithEveryNullableTypeNestedObject: ArriModelValidator<FooObjectWithEveryNullableTypeNestedObject> =
+  {
+    new(): FooObjectWithEveryNullableTypeNestedObject {
+      return {
+        id: null,
+        timestamp: null,
+        data: null,
+      };
+    },
+    validate(input): input is FooObjectWithEveryNullableTypeNestedObject {
+      return (
+        isObject(input) &&
+        (typeof input.id === "string" || input.id === null) &&
+        (input.timestamp instanceof Date || input.timestamp === null) &&
+        ($$FooObjectWithEveryNullableTypeNestedObjectData.validate(
+          input.data,
+        ) ||
+          input.data === null)
+      );
+    },
+    fromJson(input): FooObjectWithEveryNullableTypeNestedObject {
+      let _id: string | null;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = null;
+      }
+      let _timestamp: Date | null;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = null;
+      }
+      let _data: FooObjectWithEveryNullableTypeNestedObjectData | null;
+      if (isObject(input.data)) {
+        _data = $$FooObjectWithEveryNullableTypeNestedObjectData.fromJson(
+          input.data,
+        );
+      } else {
+        _data = null;
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+        data: _data,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryNullableTypeNestedObject {
+      return $$FooObjectWithEveryNullableTypeNestedObject.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      if (typeof input.id === "string") {
+        json += serializeString(input.id);
+      } else {
+        json += "null";
+      }
+      json += ',"timestamp":';
+      if (input.timestamp instanceof Date) {
+        json += `"${input.timestamp.toISOString()}"`;
+      } else {
+        json += "null";
+      }
+      json += ',"data":';
+      if (input.data !== null) {
+        json += $$FooObjectWithEveryNullableTypeNestedObjectData.toJsonString(
+          input.data,
+        );
+      } else {
+        json += "null";
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp?.toISOString()}`);
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryNullableTypeNestedObject/data.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryNullableTypeNestedObjectData {
+  id: string | null;
+  timestamp: Date | null;
+  data: FooObjectWithEveryNullableTypeNestedObjectDataData | null;
+}
+export const $$FooObjectWithEveryNullableTypeNestedObjectData: ArriModelValidator<FooObjectWithEveryNullableTypeNestedObjectData> =
+  {
+    new(): FooObjectWithEveryNullableTypeNestedObjectData {
+      return {
+        id: null,
+        timestamp: null,
+        data: null,
+      };
+    },
+    validate(input): input is FooObjectWithEveryNullableTypeNestedObjectData {
+      return (
+        isObject(input) &&
+        (typeof input.id === "string" || input.id === null) &&
+        (input.timestamp instanceof Date || input.timestamp === null) &&
+        ($$FooObjectWithEveryNullableTypeNestedObjectDataData.validate(
+          input.data,
+        ) ||
+          input.data === null)
+      );
+    },
+    fromJson(input): FooObjectWithEveryNullableTypeNestedObjectData {
+      let _id: string | null;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = null;
+      }
+      let _timestamp: Date | null;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = null;
+      }
+      let _data: FooObjectWithEveryNullableTypeNestedObjectDataData | null;
+      if (isObject(input.data)) {
+        _data = $$FooObjectWithEveryNullableTypeNestedObjectDataData.fromJson(
+          input.data,
+        );
+      } else {
+        _data = null;
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+        data: _data,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryNullableTypeNestedObjectData {
+      return $$FooObjectWithEveryNullableTypeNestedObjectData.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      if (typeof input.id === "string") {
+        json += serializeString(input.id);
+      } else {
+        json += "null";
+      }
+      json += ',"timestamp":';
+      if (input.timestamp instanceof Date) {
+        json += `"${input.timestamp.toISOString()}"`;
+      } else {
+        json += "null";
+      }
+      json += ',"data":';
+      if (input.data !== null) {
+        json +=
+          $$FooObjectWithEveryNullableTypeNestedObjectDataData.toJsonString(
+            input.data,
+          );
+      } else {
+        json += "null";
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp?.toISOString()}`);
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryNullableTypeNestedObjectData/data.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryNullableTypeNestedObjectDataData {
+  id: string | null;
+  timestamp: Date | null;
+}
+export const $$FooObjectWithEveryNullableTypeNestedObjectDataData: ArriModelValidator<FooObjectWithEveryNullableTypeNestedObjectDataData> =
+  {
+    new(): FooObjectWithEveryNullableTypeNestedObjectDataData {
+      return {
+        id: null,
+        timestamp: null,
+      };
+    },
+    validate(
+      input,
+    ): input is FooObjectWithEveryNullableTypeNestedObjectDataData {
+      return (
+        isObject(input) &&
+        (typeof input.id === "string" || input.id === null) &&
+        (input.timestamp instanceof Date || input.timestamp === null)
+      );
+    },
+    fromJson(input): FooObjectWithEveryNullableTypeNestedObjectDataData {
+      let _id: string | null;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = null;
+      }
+      let _timestamp: Date | null;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = null;
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryNullableTypeNestedObjectDataData {
+      return $$FooObjectWithEveryNullableTypeNestedObjectDataData.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      if (typeof input.id === "string") {
+        json += serializeString(input.id);
+      } else {
+        json += "null";
+      }
+      json += ',"timestamp":';
+      if (input.timestamp instanceof Date) {
+        json += `"${input.timestamp.toISOString()}"`;
+      } else {
+        json += "null";
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp?.toISOString()}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryNullableTypeNestedArrayElementElement {
+  id: string | null;
+  timestamp: Date | null;
+}
+export const $$FooObjectWithEveryNullableTypeNestedArrayElementElement: ArriModelValidator<FooObjectWithEveryNullableTypeNestedArrayElementElement> =
+  {
+    new(): FooObjectWithEveryNullableTypeNestedArrayElementElement {
+      return {
+        id: null,
+        timestamp: null,
+      };
+    },
+    validate(
+      input,
+    ): input is FooObjectWithEveryNullableTypeNestedArrayElementElement {
+      return (
+        isObject(input) &&
+        (typeof input.id === "string" || input.id === null) &&
+        (input.timestamp instanceof Date || input.timestamp === null)
+      );
+    },
+    fromJson(input): FooObjectWithEveryNullableTypeNestedArrayElementElement {
+      let _id: string | null;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = null;
+      }
+      let _timestamp: Date | null;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = null;
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+      };
+    },
+    fromJsonString(
+      input,
+    ): FooObjectWithEveryNullableTypeNestedArrayElementElement {
+      return $$FooObjectWithEveryNullableTypeNestedArrayElementElement.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      if (typeof input.id === "string") {
+        json += serializeString(input.id);
+      } else {
+        json += "null";
+      }
+      json += ',"timestamp":';
+      if (input.timestamp instanceof Date) {
+        json += `"${input.timestamp.toISOString()}"`;
+      } else {
+        json += "null";
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp?.toISOString()}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithPascalCaseKeys {
+  createdAt: Date;
+  displayName: string;
+  phoneNumber: string | null;
+  emailAddress?: string;
+  isAdmin?: boolean;
+}
+export const $$FooObjectWithPascalCaseKeys: ArriModelValidator<FooObjectWithPascalCaseKeys> =
+  {
+    new(): FooObjectWithPascalCaseKeys {
+      return {
+        createdAt: new Date(),
+        displayName: "",
+        phoneNumber: null,
+      };
+    },
+    validate(input): input is FooObjectWithPascalCaseKeys {
+      return (
+        isObject(input) &&
+        input.createdAt instanceof Date &&
+        typeof input.displayName === "string" &&
+        (typeof input.phoneNumber === "string" || input.phoneNumber === null) &&
+        (typeof input.emailAddress === "string" ||
+          typeof input.emailAddress === "undefined") &&
+        (typeof input.isAdmin === "boolean" ||
+          typeof input.isAdmin === "undefined")
+      );
+    },
+    fromJson(input): FooObjectWithPascalCaseKeys {
+      let _CreatedAt: Date;
+      if (typeof input.CreatedAt === "string") {
+        _CreatedAt = new Date(input.CreatedAt);
+      } else if (input.CreatedAt instanceof Date) {
+        _CreatedAt = input.CreatedAt;
+      } else {
+        _CreatedAt = new Date();
+      }
+      let _DisplayName: string;
+      if (typeof input.DisplayName === "string") {
+        _DisplayName = input.DisplayName;
+      } else {
+        _DisplayName = "";
+      }
+      let _PhoneNumber: string | null;
+      if (typeof input.PhoneNumber === "string") {
+        _PhoneNumber = input.PhoneNumber;
+      } else {
+        _PhoneNumber = null;
+      }
+      let _EmailAddress: string | undefined;
+      if (typeof input.EmailAddress !== "undefined") {
+        if (typeof input.EmailAddress === "string") {
+          _EmailAddress = input.EmailAddress;
+        } else {
+          _EmailAddress = "";
+        }
+      }
+      let _IsAdmin: boolean | undefined;
+      if (typeof input.IsAdmin !== "undefined") {
+        if (typeof input.IsAdmin === "boolean") {
+          _IsAdmin = input.IsAdmin;
+        } else {
+          _IsAdmin = false;
+        }
+      }
+      return {
+        createdAt: _CreatedAt,
+        displayName: _DisplayName,
+        phoneNumber: _PhoneNumber,
+        emailAddress: _EmailAddress,
+        isAdmin: _IsAdmin,
+      };
+    },
+    fromJsonString(input): FooObjectWithPascalCaseKeys {
+      return $$FooObjectWithPascalCaseKeys.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"CreatedAt":';
+      json += `"${input.createdAt.toISOString()}"`;
+      json += ',"DisplayName":';
+      json += serializeString(input.displayName);
+      json += ',"PhoneNumber":';
+      if (typeof input.phoneNumber === "string") {
+        json += serializeString(input.phoneNumber);
+      } else {
+        json += "null";
+      }
+      if (typeof input.emailAddress !== "undefined") {
+        json += `,"EmailAddress":`;
+        json += serializeString(input.emailAddress);
+      }
+      if (typeof input.isAdmin !== "undefined") {
+        json += `,"IsAdmin":`;
+        json += `${input.isAdmin}`;
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`CreatedAt=${input.createdAt.toISOString()}`);
+      queryParts.push(`DisplayName=${input.displayName}`);
+      queryParts.push(`PhoneNumber=${input.phoneNumber}`);
+      if (typeof input.emailAddress !== "undefined") {
+        queryParts.push(`EmailAddress=${input.emailAddress}`);
+      }
+      if (typeof input.isAdmin !== "undefined") {
+        queryParts.push(`IsAdmin=${input.isAdmin}`);
+      }
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithSnakeCaseKeys {
+  createdAt: Date;
+  displayName: string;
+  phoneNumber: string | null;
+  emailAddress?: string;
+  isAdmin?: boolean;
+}
+export const $$FooObjectWithSnakeCaseKeys: ArriModelValidator<FooObjectWithSnakeCaseKeys> =
+  {
+    new(): FooObjectWithSnakeCaseKeys {
+      return {
+        createdAt: new Date(),
+        displayName: "",
+        phoneNumber: null,
+      };
+    },
+    validate(input): input is FooObjectWithSnakeCaseKeys {
+      return (
+        isObject(input) &&
+        input.createdAt instanceof Date &&
+        typeof input.displayName === "string" &&
+        (typeof input.phoneNumber === "string" || input.phoneNumber === null) &&
+        (typeof input.emailAddress === "string" ||
+          typeof input.emailAddress === "undefined") &&
+        (typeof input.isAdmin === "boolean" ||
+          typeof input.isAdmin === "undefined")
+      );
+    },
+    fromJson(input): FooObjectWithSnakeCaseKeys {
+      let _created_at: Date;
+      if (typeof input.created_at === "string") {
+        _created_at = new Date(input.created_at);
+      } else if (input.created_at instanceof Date) {
+        _created_at = input.created_at;
+      } else {
+        _created_at = new Date();
+      }
+      let _display_name: string;
+      if (typeof input.display_name === "string") {
+        _display_name = input.display_name;
+      } else {
+        _display_name = "";
+      }
+      let _phone_number: string | null;
+      if (typeof input.phone_number === "string") {
+        _phone_number = input.phone_number;
+      } else {
+        _phone_number = null;
+      }
+      let _email_address: string | undefined;
+      if (typeof input.email_address !== "undefined") {
+        if (typeof input.email_address === "string") {
+          _email_address = input.email_address;
+        } else {
+          _email_address = "";
+        }
+      }
+      let _is_admin: boolean | undefined;
+      if (typeof input.is_admin !== "undefined") {
+        if (typeof input.is_admin === "boolean") {
+          _is_admin = input.is_admin;
+        } else {
+          _is_admin = false;
+        }
+      }
+      return {
+        createdAt: _created_at,
+        displayName: _display_name,
+        phoneNumber: _phone_number,
+        emailAddress: _email_address,
+        isAdmin: _is_admin,
+      };
+    },
+    fromJsonString(input): FooObjectWithSnakeCaseKeys {
+      return $$FooObjectWithSnakeCaseKeys.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"created_at":';
+      json += `"${input.createdAt.toISOString()}"`;
+      json += ',"display_name":';
+      json += serializeString(input.displayName);
+      json += ',"phone_number":';
+      if (typeof input.phoneNumber === "string") {
+        json += serializeString(input.phoneNumber);
+      } else {
+        json += "null";
+      }
+      if (typeof input.emailAddress !== "undefined") {
+        json += `,"email_address":`;
+        json += serializeString(input.emailAddress);
+      }
+      if (typeof input.isAdmin !== "undefined") {
+        json += `,"is_admin":`;
+        json += `${input.isAdmin}`;
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`created_at=${input.createdAt.toISOString()}`);
+      queryParts.push(`display_name=${input.displayName}`);
+      queryParts.push(`phone_number=${input.phoneNumber}`);
+      if (typeof input.emailAddress !== "undefined") {
+        queryParts.push(`email_address=${input.emailAddress}`);
+      }
+      if (typeof input.isAdmin !== "undefined") {
+        queryParts.push(`is_admin=${input.isAdmin}`);
+      }
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryOptionalType {
+  any?: any;
+  boolean?: boolean;
+  string?: string;
+  timestamp?: Date;
+  float32?: number;
+  float64?: number;
+  int8?: number;
+  uint8?: number;
+  int16?: number;
+  uint16?: number;
+  int32?: number;
+  uint32?: number;
+  int64?: bigint;
+  uint64?: bigint;
+  enumerator?: FooObjectWithEveryOptionalTypeEnumerator;
+  array?: boolean[];
+  object?: FooObjectWithEveryOptionalTypeObject;
+  record?: Record<string, bigint>;
+  discriminator?: FooObjectWithEveryOptionalTypeDiscriminator;
+  nestedObject?: FooObjectWithEveryOptionalTypeNestedObject;
+  nestedArray?: FooObjectWithEveryOptionalTypeNestedArrayElementElement[][];
+}
+export const $$FooObjectWithEveryOptionalType: ArriModelValidator<FooObjectWithEveryOptionalType> =
+  {
+    new(): FooObjectWithEveryOptionalType {
+      return {};
+    },
+    validate(input): input is FooObjectWithEveryOptionalType {
+      return (
+        isObject(input) &&
+        (true || typeof input.any === "undefined") &&
+        (typeof input.boolean === "boolean" ||
+          typeof input.boolean === "undefined") &&
+        (typeof input.string === "string" ||
+          typeof input.string === "undefined") &&
+        (input.timestamp instanceof Date ||
+          typeof input.timestamp === "undefined") &&
+        (typeof input.float32 === "number" ||
+          typeof input.float32 === "undefined") &&
+        (typeof input.float64 === "number" ||
+          typeof input.float64 === "undefined") &&
+        ((typeof input.int8 === "number" &&
+          Number.isInteger(input.int8) &&
+          input.int8 >= INT8_MIN &&
+          input.int8 <= INT8_MAX) ||
+          typeof input.int8 === "undefined") &&
+        ((typeof input.uint8 === "number" &&
+          Number.isInteger(input.uint8) &&
+          input.uint8 >= 0 &&
+          input.uint8 <= UINT8_MAX) ||
+          typeof input.uint8 === "undefined") &&
+        ((typeof input.int16 === "number" &&
+          Number.isInteger(input.int16) &&
+          input.int16 >= INT16_MIN &&
+          input.int16 <= INT16_MAX) ||
+          typeof input.int16 === "undefined") &&
+        ((typeof input.uint16 === "number" &&
+          Number.isInteger(input.uint16) &&
+          input.uint16 >= 0 &&
+          input.uint16 <= UINT16_MAX) ||
+          typeof input.uint16 === "undefined") &&
+        ((typeof input.int32 === "number" &&
+          Number.isInteger(input.int32) &&
+          input.int32 >= INT32_MIN &&
+          input.int32 <= INT32_MAX) ||
+          typeof input.int32 === "undefined") &&
+        ((typeof input.uint32 === "number" &&
+          Number.isInteger(input.uint32) &&
+          input.uint32 >= 0 &&
+          input.uint32 <= UINT32_MAX) ||
+          typeof input.uint32 === "undefined") &&
+        ((typeof input.int64 === "bigint" &&
+          input.int64 >= INT64_MIN &&
+          input.int64 <= INT64_MAX) ||
+          typeof input.int64 === "undefined") &&
+        ((typeof input.uint64 === "bigint" &&
+          input.uint64 >= BigInt(0) &&
+          input.uint64 <= UINT64_MAX) ||
+          typeof input.uint64 === "undefined") &&
+        ($$FooObjectWithEveryOptionalTypeEnumerator.validate(
+          input.enumerator,
+        ) ||
+          typeof input.enumerator === "undefined") &&
+        ((Array.isArray(input.array) &&
+          input.array.every((_element) => typeof _element === "boolean")) ||
+          typeof input.array === "undefined") &&
+        ($$FooObjectWithEveryOptionalTypeObject.validate(input.object) ||
+          typeof input.object === "undefined") &&
+        ((isObject(input.record) &&
+          Object.values(input.record).every(
+            (_value) =>
+              typeof _value === "bigint" &&
+              _value >= BigInt(0) &&
+              _value <= UINT64_MAX,
+          )) ||
+          typeof input.record === "undefined") &&
+        ($$FooObjectWithEveryOptionalTypeDiscriminator.validate(
+          input.discriminator,
+        ) ||
+          typeof input.discriminator === "undefined") &&
+        ($$FooObjectWithEveryOptionalTypeNestedObject.validate(
+          input.nestedObject,
+        ) ||
+          typeof input.nestedObject === "undefined") &&
+        ((Array.isArray(input.nestedArray) &&
+          input.nestedArray.every(
+            (_element) =>
+              Array.isArray(_element) &&
+              _element.every((_element) =>
+                $$FooObjectWithEveryOptionalTypeNestedArrayElementElement.validate(
+                  _element,
+                ),
+              ),
+          )) ||
+          typeof input.nestedArray === "undefined")
+      );
+    },
+    fromJson(input): FooObjectWithEveryOptionalType {
+      let _any: any | undefined;
+      if (typeof input.any !== "undefined") {
+        _any = input.any;
+      }
+      let _boolean: boolean | undefined;
+      if (typeof input.boolean !== "undefined") {
+        if (typeof input.boolean === "boolean") {
+          _boolean = input.boolean;
+        } else {
+          _boolean = false;
+        }
+      }
+      let _string: string | undefined;
+      if (typeof input.string !== "undefined") {
+        if (typeof input.string === "string") {
+          _string = input.string;
+        } else {
+          _string = "";
+        }
+      }
+      let _timestamp: Date | undefined;
+      if (typeof input.timestamp !== "undefined") {
+        if (typeof input.timestamp === "string") {
+          _timestamp = new Date(input.timestamp);
+        } else if (input.timestamp instanceof Date) {
+          _timestamp = input.timestamp;
+        } else {
+          _timestamp = new Date();
+        }
+      }
+      let _float32: number | undefined;
+      if (typeof input.float32 !== "undefined") {
+        if (typeof input.float32 === "number") {
+          _float32 = input.float32;
+        } else {
+          _float32 = 0;
+        }
+      }
+      let _float64: number | undefined;
+      if (typeof input.float64 !== "undefined") {
+        if (typeof input.float64 === "number") {
+          _float64 = input.float64;
+        } else {
+          _float64 = 0;
+        }
+      }
+      let _int8: number | undefined;
+      if (typeof input.int8 !== "undefined") {
+        if (
+          typeof input.int8 === "number" &&
+          Number.isInteger(input.int8) &&
+          input.int8 >= INT8_MIN &&
+          input.int8 <= INT8_MAX
+        ) {
+          _int8 = input.int8;
+        } else {
+          _int8 = 0;
+        }
+      }
+      let _uint8: number | undefined;
+      if (typeof input.uint8 !== "undefined") {
+        if (
+          typeof input.uint8 === "number" &&
+          Number.isInteger(input.uint8) &&
+          input.uint8 >= 0 &&
+          input.uint8 <= UINT8_MAX
+        ) {
+          _uint8 = input.uint8;
+        } else {
+          _uint8 = 0;
+        }
+      }
+      let _int16: number | undefined;
+      if (typeof input.int16 !== "undefined") {
+        if (
+          typeof input.int16 === "number" &&
+          Number.isInteger(input.int16) &&
+          input.int16 >= INT16_MIN &&
+          input.int16 <= INT16_MAX
+        ) {
+          _int16 = input.int16;
+        } else {
+          _int16 = 0;
+        }
+      }
+      let _uint16: number | undefined;
+      if (typeof input.uint16 !== "undefined") {
+        if (
+          typeof input.uint16 === "number" &&
+          Number.isInteger(input.uint16) &&
+          input.uint16 >= 0 &&
+          input.uint16 <= UINT16_MAX
+        ) {
+          _uint16 = input.uint16;
+        } else {
+          _uint16 = 0;
+        }
+      }
+      let _int32: number | undefined;
+      if (typeof input.int32 !== "undefined") {
+        if (
+          typeof input.int32 === "number" &&
+          Number.isInteger(input.int32) &&
+          input.int32 >= INT32_MIN &&
+          input.int32 <= INT32_MAX
+        ) {
+          _int32 = input.int32;
+        } else {
+          _int32 = 0;
+        }
+      }
+      let _uint32: number | undefined;
+      if (typeof input.uint32 !== "undefined") {
+        if (
+          typeof input.uint32 === "number" &&
+          Number.isInteger(input.uint32) &&
+          input.uint32 >= 0 &&
+          input.uint32 <= UINT32_MAX
+        ) {
+          _uint32 = input.uint32;
+        } else {
+          _uint32 = 0;
+        }
+      }
+      let _int64: bigint | undefined;
+      if (typeof input.int64 !== "undefined") {
+        if (typeof input.int64 === "string") {
+          _int64 = BigInt(input.int64);
+        } else if (typeof input.int64 === "bigint") {
+          _int64 = input.int64;
+        } else {
+          _int64 = BigInt(0);
+        }
+      }
+      let _uint64: bigint | undefined;
+      if (typeof input.uint64 !== "undefined") {
+        if (
+          typeof input.uint64 === "string" &&
+          BigInt(input.uint64) >= BigInt(0)
+        ) {
+          _uint64 = BigInt(input.uint64);
+        } else if (
+          typeof input.uint64 === "bigint" &&
+          input.uint64 >= BigInt(0)
+        ) {
+          _uint64 = input.uint64;
+        } else {
+          _uint64 = BigInt(0);
+        }
+      }
+      let _enumerator: FooObjectWithEveryOptionalTypeEnumerator | undefined;
+      if (typeof input.enumerator !== "undefined") {
+        if (typeof input.enumerator === "string") {
+          _enumerator =
+            $$FooObjectWithEveryOptionalTypeEnumerator.fromSerialValue(
+              input.enumerator,
+            );
+        } else {
+          _enumerator = $$FooObjectWithEveryOptionalTypeEnumerator.new();
+        }
+      }
+      let _array: boolean[] | undefined;
+      if (typeof input.array !== "undefined") {
+        if (Array.isArray(input.array)) {
+          _array = [];
+          for (const _arrayEl of input.array) {
+            let _arrayElValue: boolean;
+            if (typeof _arrayEl === "boolean") {
+              _arrayElValue = _arrayEl;
+            } else {
+              _arrayElValue = false;
+            }
+            _array.push(_arrayElValue);
+          }
+        } else {
+          _array = [];
+        }
+      }
+      let _object: FooObjectWithEveryOptionalTypeObject | undefined;
+      if (typeof input.object !== "undefined") {
+        if (isObject(input.object)) {
+          _object = $$FooObjectWithEveryOptionalTypeObject.fromJson(
+            input.object,
+          );
+        } else {
+          _object = $$FooObjectWithEveryOptionalTypeObject.new();
+        }
+      }
+      let _record: Record<string, bigint> | undefined;
+      if (typeof input.record !== "undefined") {
+        if (isObject(input.record)) {
+          _record = {};
+          for (const [_key, _value] of Object.entries(input.record)) {
+            let _recordValue: bigint;
+            if (typeof _value === "string" && BigInt(_value) >= BigInt(0)) {
+              _recordValue = BigInt(_value);
+            } else if (typeof _value === "bigint" && _value >= BigInt(0)) {
+              _recordValue = _value;
+            } else {
+              _recordValue = BigInt(0);
+            }
+            _record[_key] = _recordValue;
+          }
+        } else {
+          _record = {};
+        }
+      }
+      let _discriminator:
+        | FooObjectWithEveryOptionalTypeDiscriminator
+        | undefined;
+      if (typeof input.discriminator !== "undefined") {
+        if (isObject(input.discriminator)) {
+          _discriminator =
+            $$FooObjectWithEveryOptionalTypeDiscriminator.fromJson(
+              input.discriminator,
+            );
+        } else {
+          _discriminator = $$FooObjectWithEveryOptionalTypeDiscriminator.new();
+        }
+      }
+      let _nestedObject: FooObjectWithEveryOptionalTypeNestedObject | undefined;
+      if (typeof input.nestedObject !== "undefined") {
+        if (isObject(input.nestedObject)) {
+          _nestedObject = $$FooObjectWithEveryOptionalTypeNestedObject.fromJson(
+            input.nestedObject,
+          );
+        } else {
+          _nestedObject = $$FooObjectWithEveryOptionalTypeNestedObject.new();
+        }
+      }
+      let _nestedArray:
+        | FooObjectWithEveryOptionalTypeNestedArrayElementElement[][]
+        | undefined;
+      if (typeof input.nestedArray !== "undefined") {
+        if (Array.isArray(input.nestedArray)) {
+          _nestedArray = [];
+          for (const _nestedArrayEl of input.nestedArray) {
+            let _nestedArrayElValue: FooObjectWithEveryOptionalTypeNestedArrayElementElement[];
+            if (Array.isArray(_nestedArrayEl)) {
+              _nestedArrayElValue = [];
+              for (const _nestedArrayElValueEl of _nestedArrayEl) {
+                let _nestedArrayElValueElValue: FooObjectWithEveryOptionalTypeNestedArrayElementElement;
+                if (isObject(_nestedArrayElValueEl)) {
+                  _nestedArrayElValueElValue =
+                    $$FooObjectWithEveryOptionalTypeNestedArrayElementElement.fromJson(
+                      _nestedArrayElValueEl,
+                    );
+                } else {
+                  _nestedArrayElValueElValue =
+                    $$FooObjectWithEveryOptionalTypeNestedArrayElementElement.new();
+                }
+                _nestedArrayElValue.push(_nestedArrayElValueElValue);
+              }
+            } else {
+              _nestedArrayElValue = [];
+            }
+            _nestedArray.push(_nestedArrayElValue);
+          }
+        } else {
+          _nestedArray = [];
+        }
+      }
+      return {
+        any: _any,
+        boolean: _boolean,
+        string: _string,
+        timestamp: _timestamp,
+        float32: _float32,
+        float64: _float64,
+        int8: _int8,
+        uint8: _uint8,
+        int16: _int16,
+        uint16: _uint16,
+        int32: _int32,
+        uint32: _uint32,
+        int64: _int64,
+        uint64: _uint64,
+        enumerator: _enumerator,
+        array: _array,
+        object: _object,
+        record: _record,
+        discriminator: _discriminator,
+        nestedObject: _nestedObject,
+        nestedArray: _nestedArray,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryOptionalType {
+      return $$FooObjectWithEveryOptionalType.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      let _hasKey = false;
+      if (typeof input.any !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"any":';
+        json += JSON.stringify(input.any);
+        _hasKey = true;
+      }
+      if (typeof input.boolean !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"boolean":';
+        json += `${input.boolean}`;
+        _hasKey = true;
+      }
+      if (typeof input.string !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"string":';
+        json += serializeString(input.string);
+        _hasKey = true;
+      }
+      if (typeof input.timestamp !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"timestamp":';
+        json += `"${input.timestamp.toISOString()}"`;
+        _hasKey = true;
+      }
+      if (typeof input.float32 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"float32":';
+        json += `${input.float32}`;
+        _hasKey = true;
+      }
+      if (typeof input.float64 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"float64":';
+        json += `${input.float64}`;
+        _hasKey = true;
+      }
+      if (typeof input.int8 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"int8":';
+        json += `${input.int8}`;
+        _hasKey = true;
+      }
+      if (typeof input.uint8 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"uint8":';
+        json += `${input.uint8}`;
+        _hasKey = true;
+      }
+      if (typeof input.int16 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"int16":';
+        json += `${input.int16}`;
+        _hasKey = true;
+      }
+      if (typeof input.uint16 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"uint16":';
+        json += `${input.uint16}`;
+        _hasKey = true;
+      }
+      if (typeof input.int32 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"int32":';
+        json += `${input.int32}`;
+        _hasKey = true;
+      }
+      if (typeof input.uint32 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"uint32":';
+        json += `${input.uint32}`;
+        _hasKey = true;
+      }
+      if (typeof input.int64 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"int64":';
+        json += `"${input.int64}"`;
+        _hasKey = true;
+      }
+      if (typeof input.uint64 !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"uint64":';
+        json += `"${input.uint64}"`;
+        _hasKey = true;
+      }
+      if (typeof input.enumerator !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"enumerator":';
+        json += `"${input.enumerator}"`;
+        _hasKey = true;
+      }
+      if (typeof input.array !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"array":';
+        json += "[";
+        for (let i = 0; i < input.array.length; i++) {
+          if (i !== 0) json += ",";
+          const _inputArrayEl = input.array[i];
+          json += `${_inputArrayEl}`;
+        }
+        json += "]";
+        _hasKey = true;
+      }
+      if (typeof input.object !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"object":';
+        json += $$FooObjectWithEveryOptionalTypeObject.toJsonString(
+          input.object,
+        );
+        _hasKey = true;
+      }
+      if (typeof input.record !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"record":';
+        json += "{";
+        let _recordPropertyCount = 0;
+        for (const [_key, _value] of Object.entries(input.record)) {
+          if (_recordPropertyCount !== 0) {
+            json += ",";
+          }
+          json += `${serializeString(_key)}:`;
+          json += `"${_value}"`;
+          _recordPropertyCount++;
+        }
+        json += "}";
+
+        _hasKey = true;
+      }
+      if (typeof input.discriminator !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"discriminator":';
+        json += $$FooObjectWithEveryOptionalTypeDiscriminator.toJsonString(
+          input.discriminator,
+        );
+        _hasKey = true;
+      }
+      if (typeof input.nestedObject !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"nestedObject":';
+        json += $$FooObjectWithEveryOptionalTypeNestedObject.toJsonString(
+          input.nestedObject,
+        );
+        _hasKey = true;
+      }
+      if (typeof input.nestedArray !== "undefined") {
+        if (_hasKey) json += ",";
+        json += '"nestedArray":';
+        json += "[";
+        for (let i = 0; i < input.nestedArray.length; i++) {
+          if (i !== 0) json += ",";
+          const _inputNestedArrayEl = input.nestedArray[i];
+          json += "[";
+          for (let i = 0; i < _inputNestedArrayEl.length; i++) {
+            if (i !== 0) json += ",";
+            const _inputNestedArrayElEl = _inputNestedArrayEl[i];
+            json +=
+              $$FooObjectWithEveryOptionalTypeNestedArrayElementElement.toJsonString(
+                _inputNestedArrayElEl,
+              );
+          }
+          json += "]";
+        }
+        json += "]";
+        _hasKey = true;
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      if (typeof input.any !== "undefined") {
+        console.warn(
+          "[WARNING] Cannot serialize any's to query string. Skipping property at /ObjectWithEveryOptionalType/any.",
+        );
+      }
+      if (typeof input.boolean !== "undefined") {
+        queryParts.push(`boolean=${input.boolean}`);
+      }
+      if (typeof input.string !== "undefined") {
+        queryParts.push(`string=${input.string}`);
+      }
+      if (typeof input.timestamp !== "undefined") {
+        queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      }
+      if (typeof input.float32 !== "undefined") {
+        queryParts.push(`float32=${input.float32}`);
+      }
+      if (typeof input.float64 !== "undefined") {
+        queryParts.push(`float64=${input.float64}`);
+      }
+      if (typeof input.int8 !== "undefined") {
+        queryParts.push(`int8=${input.int8}`);
+      }
+      if (typeof input.uint8 !== "undefined") {
+        queryParts.push(`uint8=${input.uint8}`);
+      }
+      if (typeof input.int16 !== "undefined") {
+        queryParts.push(`int16=${input.int16}`);
+      }
+      if (typeof input.uint16 !== "undefined") {
+        queryParts.push(`uint16=${input.uint16}`);
+      }
+      if (typeof input.int32 !== "undefined") {
+        queryParts.push(`int32=${input.int32}`);
+      }
+      if (typeof input.uint32 !== "undefined") {
+        queryParts.push(`uint32=${input.uint32}`);
+      }
+      if (typeof input.int64 !== "undefined") {
+        queryParts.push(`int64=${input.int64}`);
+      }
+      if (typeof input.uint64 !== "undefined") {
+        queryParts.push(`uint64=${input.uint64}`);
+      }
+      if (typeof input.enumerator !== "undefined") {
+        queryParts.push(`enumerator=${input.enumerator}`);
+      }
+      if (typeof input.array !== "undefined") {
+        console.warn(
+          "[WARNING] Cannot serialize arrays to query string. Skipping property at /ObjectWithEveryOptionalType/array.",
+        );
+      }
+      if (typeof input.object !== "undefined") {
+        console.warn(
+          "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryOptionalType/object.",
+        );
+      }
+      if (typeof input.record !== "undefined") {
+        console.warn(
+          "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryOptionalType/record.",
+        );
+      }
+      if (typeof input.discriminator !== "undefined") {
+        console.warn(
+          "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryOptionalType/discriminator.",
+        );
+      }
+      if (typeof input.nestedObject !== "undefined") {
+        console.warn(
+          "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryOptionalType/nestedObject.",
+        );
+      }
+      if (typeof input.nestedArray !== "undefined") {
+        console.warn(
+          "[WARNING] Cannot serialize arrays to query string. Skipping property at /ObjectWithEveryOptionalType/nestedArray.",
+        );
+      }
+      return queryParts.join("&");
+    },
+  };
+
+export type FooObjectWithEveryOptionalTypeEnumerator =
+  (typeof $$FooObjectWithEveryOptionalTypeEnumeratorValues)[number];
+const $$FooObjectWithEveryOptionalTypeEnumeratorValues = [
+  "A",
+  "B",
+  "C",
+] as const;
+export const $$FooObjectWithEveryOptionalTypeEnumerator: ArriEnumValidator<FooObjectWithEveryOptionalTypeEnumerator> =
+  {
+    new(): FooObjectWithEveryOptionalTypeEnumerator {
+      return $$FooObjectWithEveryOptionalTypeEnumeratorValues[0];
+    },
+    validate(input): input is ObjectWithEveryOptionalTypeEnumerator {
+      return (
+        typeof input === "string" &&
+        $$FooObjectWithEveryOptionalTypeEnumeratorValues.includes(input as any)
+      );
+    },
+    values: $$FooObjectWithEveryOptionalTypeEnumeratorValues,
+    fromSerialValue(input): FooObjectWithEveryOptionalTypeEnumerator {
+      if (
+        $$FooObjectWithEveryOptionalTypeEnumeratorValues.includes(input as any)
+      ) {
+        return input as FooObjectWithEveryOptionalTypeEnumerator;
+      }
+      if (
+        $$FooObjectWithEveryOptionalTypeEnumeratorValues.includes(
+          input.toLowerCase() as any,
+        )
+      ) {
+        return input.toLowerCase() as FooObjectWithEveryOptionalTypeEnumerator;
+      }
+      if (
+        $$FooObjectWithEveryOptionalTypeEnumeratorValues.includes(
+          input.toUpperCase() as any,
+        )
+      ) {
+        return input.toUpperCase() as FooObjectWithEveryOptionalTypeEnumerator;
+      }
+      return "A";
+    },
+  };
+
+export interface FooObjectWithEveryOptionalTypeObject {
+  string: string;
+  boolean: boolean;
+  timestamp: Date;
+}
+export const $$FooObjectWithEveryOptionalTypeObject: ArriModelValidator<FooObjectWithEveryOptionalTypeObject> =
+  {
+    new(): FooObjectWithEveryOptionalTypeObject {
+      return {
+        string: "",
+        boolean: false,
+        timestamp: new Date(),
+      };
+    },
+    validate(input): input is FooObjectWithEveryOptionalTypeObject {
+      return (
+        isObject(input) &&
+        typeof input.string === "string" &&
+        typeof input.boolean === "boolean" &&
+        input.timestamp instanceof Date
+      );
+    },
+    fromJson(input): FooObjectWithEveryOptionalTypeObject {
+      let _string: string;
+      if (typeof input.string === "string") {
+        _string = input.string;
+      } else {
+        _string = "";
+      }
+      let _boolean: boolean;
+      if (typeof input.boolean === "boolean") {
+        _boolean = input.boolean;
+      } else {
+        _boolean = false;
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      return {
+        string: _string,
+        boolean: _boolean,
+        timestamp: _timestamp,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryOptionalTypeObject {
+      return $$FooObjectWithEveryOptionalTypeObject.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"string":';
+      json += serializeString(input.string);
+      json += ',"boolean":';
+      json += `${input.boolean}`;
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`string=${input.string}`);
+      queryParts.push(`boolean=${input.boolean}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      return queryParts.join("&");
+    },
+  };
+
+export type FooObjectWithEveryOptionalTypeDiscriminator =
+  | FooObjectWithEveryOptionalTypeDiscriminatorA
+  | FooObjectWithEveryOptionalTypeDiscriminatorB;
+export const $$FooObjectWithEveryOptionalTypeDiscriminator: ArriModelValidator<FooObjectWithEveryOptionalTypeDiscriminator> =
+  {
+    new(): FooObjectWithEveryOptionalTypeDiscriminator {
+      return $$FooObjectWithEveryOptionalTypeDiscriminatorA.new();
+    },
+    validate(input): input is FooObjectWithEveryOptionalTypeDiscriminator {
+      if (!isObject(input)) {
+        return false;
+      }
+      if (typeof input.type !== "string") {
+        return false;
+      }
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryOptionalTypeDiscriminatorA.validate(input);
+        case "B":
+          return $$FooObjectWithEveryOptionalTypeDiscriminatorB.validate(input);
+        default:
+          return false;
+      }
+    },
+    fromJson(input): FooObjectWithEveryOptionalTypeDiscriminator {
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryOptionalTypeDiscriminatorA.fromJson(input);
+        case "B":
+          return $$FooObjectWithEveryOptionalTypeDiscriminatorB.fromJson(input);
+        default:
+          return $$FooObjectWithEveryOptionalTypeDiscriminatorA.new();
+      }
+    },
+    fromJsonString(input): FooObjectWithEveryOptionalTypeDiscriminator {
+      return $$FooObjectWithEveryOptionalTypeDiscriminator.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryOptionalTypeDiscriminatorA.toJsonString(
+            input,
+          );
+        case "B":
+          return $$FooObjectWithEveryOptionalTypeDiscriminatorB.toJsonString(
+            input,
+          );
+        default:
+          throw new Error(`Unhandled case "${(input as any).type}"`);
+      }
+    },
+    toUrlQueryString(input): string {
+      switch (input.type) {
+        case "A":
+          return $$FooObjectWithEveryOptionalTypeDiscriminatorA.toUrlQueryString(
+            input,
+          );
+        case "B":
+          return $$FooObjectWithEveryOptionalTypeDiscriminatorB.toUrlQueryString(
+            input,
+          );
+        default:
+          throw new Error("Unhandled case");
+      }
+    },
+  };
+export interface FooObjectWithEveryOptionalTypeDiscriminatorA {
+  type: "A";
+  title: string;
+}
+const $$FooObjectWithEveryOptionalTypeDiscriminatorA: ArriModelValidator<FooObjectWithEveryOptionalTypeDiscriminatorA> =
+  {
+    new(): FooObjectWithEveryOptionalTypeDiscriminatorA {
+      return {
+        type: "A",
+        title: "",
+      };
+    },
+    validate(input): input is FooObjectWithEveryOptionalTypeDiscriminatorA {
+      return (
+        isObject(input) && input.type === "A" && typeof input.title === "string"
+      );
+    },
+    fromJson(input): FooObjectWithEveryOptionalTypeDiscriminatorA {
+      const _type = "A";
+      let _title: string;
+      if (typeof input.title === "string") {
+        _title = input.title;
+      } else {
+        _title = "";
+      }
+      return {
+        type: _type,
+        title: _title,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryOptionalTypeDiscriminatorA {
+      return $$FooObjectWithEveryOptionalTypeDiscriminatorA.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"type":"A"';
+      json += ',"title":';
+      json += serializeString(input.title);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push("type=A");
+      queryParts.push(`title=${input.title}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryOptionalTypeDiscriminatorB {
+  type: "B";
+  title: string;
+  description: string;
+}
+const $$FooObjectWithEveryOptionalTypeDiscriminatorB: ArriModelValidator<FooObjectWithEveryOptionalTypeDiscriminatorB> =
+  {
+    new(): FooObjectWithEveryOptionalTypeDiscriminatorB {
+      return {
+        type: "B",
+        title: "",
+        description: "",
+      };
+    },
+    validate(input): input is FooObjectWithEveryOptionalTypeDiscriminatorB {
+      return (
+        isObject(input) &&
+        input.type === "B" &&
+        typeof input.title === "string" &&
+        typeof input.description === "string"
+      );
+    },
+    fromJson(input): FooObjectWithEveryOptionalTypeDiscriminatorB {
+      const _type = "B";
+      let _title: string;
+      if (typeof input.title === "string") {
+        _title = input.title;
+      } else {
+        _title = "";
+      }
+      let _description: string;
+      if (typeof input.description === "string") {
+        _description = input.description;
+      } else {
+        _description = "";
+      }
+      return {
+        type: _type,
+        title: _title,
+        description: _description,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryOptionalTypeDiscriminatorB {
+      return $$FooObjectWithEveryOptionalTypeDiscriminatorB.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"type":"B"';
+      json += ',"title":';
+      json += serializeString(input.title);
+      json += ',"description":';
+      json += serializeString(input.description);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push("type=B");
+      queryParts.push(`title=${input.title}`);
+      queryParts.push(`description=${input.description}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryOptionalTypeNestedObject {
+  id: string;
+  timestamp: Date;
+  data: FooObjectWithEveryOptionalTypeNestedObjectData;
+}
+export const $$FooObjectWithEveryOptionalTypeNestedObject: ArriModelValidator<FooObjectWithEveryOptionalTypeNestedObject> =
+  {
+    new(): FooObjectWithEveryOptionalTypeNestedObject {
+      return {
+        id: "",
+        timestamp: new Date(),
+        data: $$FooObjectWithEveryOptionalTypeNestedObjectData.new(),
+      };
+    },
+    validate(input): input is FooObjectWithEveryOptionalTypeNestedObject {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        input.timestamp instanceof Date &&
+        $$FooObjectWithEveryOptionalTypeNestedObjectData.validate(input.data)
+      );
+    },
+    fromJson(input): FooObjectWithEveryOptionalTypeNestedObject {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      let _data: FooObjectWithEveryOptionalTypeNestedObjectData;
+      if (isObject(input.data)) {
+        _data = $$FooObjectWithEveryOptionalTypeNestedObjectData.fromJson(
+          input.data,
+        );
+      } else {
+        _data = $$FooObjectWithEveryOptionalTypeNestedObjectData.new();
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+        data: _data,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryOptionalTypeNestedObject {
+      return $$FooObjectWithEveryOptionalTypeNestedObject.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += ',"data":';
+      json += $$FooObjectWithEveryOptionalTypeNestedObjectData.toJsonString(
+        input.data,
+      );
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryOptionalTypeNestedObject/data.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryOptionalTypeNestedObjectData {
+  id: string;
+  timestamp: Date;
+  data: FooObjectWithEveryOptionalTypeNestedObjectDataData;
+}
+export const $$FooObjectWithEveryOptionalTypeNestedObjectData: ArriModelValidator<FooObjectWithEveryOptionalTypeNestedObjectData> =
+  {
+    new(): FooObjectWithEveryOptionalTypeNestedObjectData {
+      return {
+        id: "",
+        timestamp: new Date(),
+        data: $$FooObjectWithEveryOptionalTypeNestedObjectDataData.new(),
+      };
+    },
+    validate(input): input is FooObjectWithEveryOptionalTypeNestedObjectData {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        input.timestamp instanceof Date &&
+        $$FooObjectWithEveryOptionalTypeNestedObjectDataData.validate(
+          input.data,
+        )
+      );
+    },
+    fromJson(input): FooObjectWithEveryOptionalTypeNestedObjectData {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      let _data: FooObjectWithEveryOptionalTypeNestedObjectDataData;
+      if (isObject(input.data)) {
+        _data = $$FooObjectWithEveryOptionalTypeNestedObjectDataData.fromJson(
+          input.data,
+        );
+      } else {
+        _data = $$FooObjectWithEveryOptionalTypeNestedObjectDataData.new();
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+        data: _data,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryOptionalTypeNestedObjectData {
+      return $$FooObjectWithEveryOptionalTypeNestedObjectData.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += ',"data":';
+      json += $$FooObjectWithEveryOptionalTypeNestedObjectDataData.toJsonString(
+        input.data,
+      );
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /ObjectWithEveryOptionalTypeNestedObjectData/data.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryOptionalTypeNestedObjectDataData {
+  id: string;
+  timestamp: Date;
+}
+export const $$FooObjectWithEveryOptionalTypeNestedObjectDataData: ArriModelValidator<FooObjectWithEveryOptionalTypeNestedObjectDataData> =
+  {
+    new(): FooObjectWithEveryOptionalTypeNestedObjectDataData {
+      return {
+        id: "",
+        timestamp: new Date(),
+      };
+    },
+    validate(
+      input,
+    ): input is FooObjectWithEveryOptionalTypeNestedObjectDataData {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        input.timestamp instanceof Date
+      );
+    },
+    fromJson(input): FooObjectWithEveryOptionalTypeNestedObjectDataData {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+      };
+    },
+    fromJsonString(input): FooObjectWithEveryOptionalTypeNestedObjectDataData {
+      return $$FooObjectWithEveryOptionalTypeNestedObjectDataData.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooObjectWithEveryOptionalTypeNestedArrayElementElement {
+  id: string;
+  timestamp: Date;
+}
+export const $$FooObjectWithEveryOptionalTypeNestedArrayElementElement: ArriModelValidator<FooObjectWithEveryOptionalTypeNestedArrayElementElement> =
+  {
+    new(): FooObjectWithEveryOptionalTypeNestedArrayElementElement {
+      return {
+        id: "",
+        timestamp: new Date(),
+      };
+    },
+    validate(
+      input,
+    ): input is FooObjectWithEveryOptionalTypeNestedArrayElementElement {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        input.timestamp instanceof Date
+      );
+    },
+    fromJson(input): FooObjectWithEveryOptionalTypeNestedArrayElementElement {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _timestamp: Date;
+      if (typeof input.timestamp === "string") {
+        _timestamp = new Date(input.timestamp);
+      } else if (input.timestamp instanceof Date) {
+        _timestamp = input.timestamp;
+      } else {
+        _timestamp = new Date();
+      }
+      return {
+        id: _id,
+        timestamp: _timestamp,
+      };
+    },
+    fromJsonString(
+      input,
+    ): FooObjectWithEveryOptionalTypeNestedArrayElementElement {
+      return $$FooObjectWithEveryOptionalTypeNestedArrayElementElement.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"timestamp":';
+      json += `"${input.timestamp.toISOString()}"`;
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`timestamp=${input.timestamp.toISOString()}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooRecursiveObject {
+  left: FooRecursiveObject | null;
+  right: FooRecursiveObject | null;
+  value: string;
+}
+export const $$FooRecursiveObject: ArriModelValidator<FooRecursiveObject> = {
+  new(): FooRecursiveObject {
+    return {
+      left: null,
+      right: null,
+      value: "",
+    };
+  },
+  validate(input): input is FooRecursiveObject {
+    return (
+      isObject(input) &&
+      ($$FooRecursiveObject.validate(input.left) || input.left === null) &&
+      ($$FooRecursiveObject.validate(input.right) || input.right === null) &&
+      typeof input.value === "string"
+    );
+  },
+  fromJson(input): FooRecursiveObject {
+    let _left: FooRecursiveObject | null;
+    if (isObject(input.left)) {
+      _left = $$FooRecursiveObject.fromJson(input.left);
+    } else {
+      _left = null;
+    }
+    let _right: FooRecursiveObject | null;
+    if (isObject(input.right)) {
+      _right = $$FooRecursiveObject.fromJson(input.right);
+    } else {
+      _right = null;
+    }
+    let _value: string;
+    if (typeof input.value === "string") {
+      _value = input.value;
+    } else {
+      _value = "";
+    }
+    return {
+      left: _left,
+      right: _right,
+      value: _value,
+    };
+  },
+  fromJsonString(input): FooRecursiveObject {
+    return $$FooRecursiveObject.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"left":';
+    if (input.left !== null) {
+      json += $$FooRecursiveObject.toJsonString(input.left);
+    } else {
+      json += "null";
+    }
+    json += ',"right":';
+    if (input.right !== null) {
+      json += $$FooRecursiveObject.toJsonString(input.right);
+    } else {
+      json += "null";
+    }
+    json += ',"value":';
+    json += serializeString(input.value);
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    console.warn(
+      "[WARNING] Nested objects cannot be serialized to query string. Ignoring property at /RecursiveObject/left.",
+    );
+    console.warn(
+      "[WARNING] Nested objects cannot be serialized to query string. Ignoring property at /RecursiveObject/right.",
+    );
+    queryParts.push(`value=${input.value}`);
+    return queryParts.join("&");
+  },
+};
+
+export type FooRecursiveUnion =
+  | FooRecursiveUnionChild
+  | FooRecursiveUnionChildren
+  | FooRecursiveUnionText
+  | FooRecursiveUnionShape;
+export const $$FooRecursiveUnion: ArriModelValidator<FooRecursiveUnion> = {
+  new(): FooRecursiveUnion {
+    return $$FooRecursiveUnionChild.new();
+  },
+  validate(input): input is FooRecursiveUnion {
+    if (!isObject(input)) {
+      return false;
+    }
+    if (typeof input.type !== "string") {
+      return false;
+    }
+    switch (input.type) {
+      case "CHILD":
+        return $$FooRecursiveUnionChild.validate(input);
+      case "CHILDREN":
+        return $$FooRecursiveUnionChildren.validate(input);
+      case "TEXT":
+        return $$FooRecursiveUnionText.validate(input);
+      case "SHAPE":
+        return $$FooRecursiveUnionShape.validate(input);
+      default:
+        return false;
+    }
+  },
+  fromJson(input): FooRecursiveUnion {
+    switch (input.type) {
+      case "CHILD":
+        return $$FooRecursiveUnionChild.fromJson(input);
+      case "CHILDREN":
+        return $$FooRecursiveUnionChildren.fromJson(input);
+      case "TEXT":
+        return $$FooRecursiveUnionText.fromJson(input);
+      case "SHAPE":
+        return $$FooRecursiveUnionShape.fromJson(input);
+      default:
+        return $$FooRecursiveUnionChild.new();
+    }
+  },
+  fromJsonString(input): FooRecursiveUnion {
+    return $$FooRecursiveUnion.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    switch (input.type) {
+      case "CHILD":
+        return $$FooRecursiveUnionChild.toJsonString(input);
+      case "CHILDREN":
+        return $$FooRecursiveUnionChildren.toJsonString(input);
+      case "TEXT":
+        return $$FooRecursiveUnionText.toJsonString(input);
+      case "SHAPE":
+        return $$FooRecursiveUnionShape.toJsonString(input);
+      default:
+        throw new Error(`Unhandled case "${(input as any).type}"`);
+    }
+  },
+  toUrlQueryString(input): string {
+    switch (input.type) {
+      case "CHILD":
+        return $$FooRecursiveUnionChild.toUrlQueryString(input);
+      case "CHILDREN":
+        return $$FooRecursiveUnionChildren.toUrlQueryString(input);
+      case "TEXT":
+        return $$FooRecursiveUnionText.toUrlQueryString(input);
+      case "SHAPE":
+        return $$FooRecursiveUnionShape.toUrlQueryString(input);
+      default:
+        throw new Error("Unhandled case");
+    }
+  },
+};
+/**
+ * Child node
+ */
+export interface FooRecursiveUnionChild {
+  type: "CHILD";
+  data: FooRecursiveUnion;
+}
+const $$FooRecursiveUnionChild: ArriModelValidator<FooRecursiveUnionChild> = {
+  new(): FooRecursiveUnionChild {
+    return {
+      type: "CHILD",
+      data: FooRecursiveUnion.new(),
+    };
+  },
+  validate(input): input is FooRecursiveUnionChild {
+    return (
+      isObject(input) &&
+      input.type === "CHILD" &&
+      $$FooRecursiveUnion.validate(input.data)
+    );
+  },
+  fromJson(input): FooRecursiveUnionChild {
+    const _type = "CHILD";
+    let _data: FooRecursiveUnion;
+    if (isObject(input.data)) {
+      _data = $$FooRecursiveUnion.fromJson(input.data);
+    } else {
+      _data = FooRecursiveUnion.new();
+    }
+    return {
+      type: _type,
+      data: _data,
+    };
+  },
+  fromJsonString(input): FooRecursiveUnionChild {
+    return $$FooRecursiveUnionChild.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"type":"CHILD"';
+    json += ',"data":';
+    json += $$FooRecursiveUnion.toJsonString(input.data);
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push("type=CHILD");
+    console.warn(
+      "[WARNING] Nested objects cannot be serialized to query string. Ignoring property at /RecursiveUnionChild/data.",
+    );
+    return queryParts.join("&");
+  },
+};
+
+/**
+ * List of children node
+ */
+export interface FooRecursiveUnionChildren {
+  type: "CHILDREN";
+  data: FooRecursiveUnion[];
+}
+const $$FooRecursiveUnionChildren: ArriModelValidator<FooRecursiveUnionChildren> =
+  {
+    new(): FooRecursiveUnionChildren {
+      return {
+        type: "CHILDREN",
+        data: [],
+      };
+    },
+    validate(input): input is FooRecursiveUnionChildren {
+      return (
+        isObject(input) &&
+        input.type === "CHILDREN" &&
+        Array.isArray(input.data) &&
+        input.data.every((_element) => $$FooRecursiveUnion.validate(_element))
+      );
+    },
+    fromJson(input): FooRecursiveUnionChildren {
+      const _type = "CHILDREN";
+      let _data: FooRecursiveUnion[];
+      if (Array.isArray(input.data)) {
+        _data = [];
+        for (const _dataEl of input.data) {
+          let _dataElValue: FooRecursiveUnion;
+          if (isObject(_dataEl)) {
+            _dataElValue = $$FooRecursiveUnion.fromJson(_dataEl);
+          } else {
+            _dataElValue = FooRecursiveUnion.new();
+          }
+          _data.push(_dataElValue);
+        }
+      } else {
+        _data = [];
+      }
+      return {
+        type: _type,
+        data: _data,
+      };
+    },
+    fromJsonString(input): FooRecursiveUnionChildren {
+      return $$FooRecursiveUnionChildren.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"type":"CHILDREN"';
+      json += ',"data":';
+      json += "[";
+      for (let i = 0; i < input.data.length; i++) {
+        if (i !== 0) json += ",";
+        const _inputDataEl = input.data[i];
+        json += $$FooRecursiveUnion.toJsonString(_inputDataEl);
+      }
+      json += "]";
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push("type=CHILDREN");
+      console.warn(
+        "[WARNING] Cannot serialize arrays to query string. Skipping property at /RecursiveUnionChildren/data.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+/**
+ * Text node
+ */
+export interface FooRecursiveUnionText {
+  type: "TEXT";
+  data: string;
+}
+const $$FooRecursiveUnionText: ArriModelValidator<FooRecursiveUnionText> = {
+  new(): FooRecursiveUnionText {
+    return {
+      type: "TEXT",
+      data: "",
+    };
+  },
+  validate(input): input is FooRecursiveUnionText {
+    return (
+      isObject(input) && input.type === "TEXT" && typeof input.data === "string"
+    );
+  },
+  fromJson(input): FooRecursiveUnionText {
+    const _type = "TEXT";
+    let _data: string;
+    if (typeof input.data === "string") {
+      _data = input.data;
+    } else {
+      _data = "";
+    }
+    return {
+      type: _type,
+      data: _data,
+    };
+  },
+  fromJsonString(input): FooRecursiveUnionText {
+    return $$FooRecursiveUnionText.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"type":"TEXT"';
+    json += ',"data":';
+    json += serializeString(input.data);
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push("type=TEXT");
+    queryParts.push(`data=${input.data}`);
+    return queryParts.join("&");
+  },
+};
+
+/**
+ * Shape node
+ */
+export interface FooRecursiveUnionShape {
+  type: "SHAPE";
+  data: FooRecursiveUnionShapeData;
+}
+const $$FooRecursiveUnionShape: ArriModelValidator<FooRecursiveUnionShape> = {
+  new(): FooRecursiveUnionShape {
+    return {
+      type: "SHAPE",
+      data: $$FooRecursiveUnionShapeData.new(),
+    };
+  },
+  validate(input): input is FooRecursiveUnionShape {
+    return (
+      isObject(input) &&
+      input.type === "SHAPE" &&
+      $$FooRecursiveUnionShapeData.validate(input.data)
+    );
+  },
+  fromJson(input): FooRecursiveUnionShape {
+    const _type = "SHAPE";
+    let _data: FooRecursiveUnionShapeData;
+    if (isObject(input.data)) {
+      _data = $$FooRecursiveUnionShapeData.fromJson(input.data);
+    } else {
+      _data = $$FooRecursiveUnionShapeData.new();
+    }
+    return {
+      type: _type,
+      data: _data,
+    };
+  },
+  fromJsonString(input): FooRecursiveUnionShape {
+    return $$FooRecursiveUnionShape.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"type":"SHAPE"';
+    json += ',"data":';
+    json += $$FooRecursiveUnionShapeData.toJsonString(input.data);
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push("type=SHAPE");
+    console.warn(
+      "[WARNING] Cannot serialize nested objects to query string. Skipping property at /RecursiveUnionShape/data.",
+    );
+    return queryParts.join("&");
+  },
+};
+
+export interface FooRecursiveUnionShapeData {
+  width: number;
+  height: number;
+  color: string;
+}
+export const $$FooRecursiveUnionShapeData: ArriModelValidator<FooRecursiveUnionShapeData> =
+  {
+    new(): FooRecursiveUnionShapeData {
+      return {
+        width: 0,
+        height: 0,
+        color: "",
+      };
+    },
+    validate(input): input is FooRecursiveUnionShapeData {
+      return (
+        isObject(input) &&
+        typeof input.width === "number" &&
+        typeof input.height === "number" &&
+        typeof input.color === "string"
+      );
+    },
+    fromJson(input): FooRecursiveUnionShapeData {
+      let _width: number;
+      if (typeof input.width === "number") {
+        _width = input.width;
+      } else {
+        _width = 0;
+      }
+      let _height: number;
+      if (typeof input.height === "number") {
+        _height = input.height;
+      } else {
+        _height = 0;
+      }
+      let _color: string;
+      if (typeof input.color === "string") {
+        _color = input.color;
+      } else {
+        _color = "";
+      }
+      return {
+        width: _width,
+        height: _height,
+        color: _color,
+      };
+    },
+    fromJsonString(input): FooRecursiveUnionShapeData {
+      return $$FooRecursiveUnionShapeData.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"width":';
+      json += `${input.width}`;
+      json += ',"height":';
+      json += `${input.height}`;
+      json += ',"color":';
+      json += serializeString(input.color);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`width=${input.width}`);
+      queryParts.push(`height=${input.height}`);
+      queryParts.push(`color=${input.color}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooAutoReconnectParams {
+  messageCount: number;
+}
+export const $$FooAutoReconnectParams: ArriModelValidator<FooAutoReconnectParams> =
+  {
+    new(): FooAutoReconnectParams {
+      return {
+        messageCount: 0,
+      };
+    },
+    validate(input): input is FooAutoReconnectParams {
+      return (
+        isObject(input) &&
+        typeof input.messageCount === "number" &&
+        Number.isInteger(input.messageCount) &&
+        input.messageCount >= 0 &&
+        input.messageCount <= UINT8_MAX
+      );
+    },
+    fromJson(input): FooAutoReconnectParams {
+      let _messageCount: number;
+      if (
+        typeof input.messageCount === "number" &&
+        Number.isInteger(input.messageCount) &&
+        input.messageCount >= 0 &&
+        input.messageCount <= UINT8_MAX
+      ) {
+        _messageCount = input.messageCount;
+      } else {
+        _messageCount = 0;
+      }
+      return {
+        messageCount: _messageCount,
+      };
+    },
+    fromJsonString(input): FooAutoReconnectParams {
+      return $$FooAutoReconnectParams.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"messageCount":';
+      json += `${input.messageCount}`;
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`messageCount=${input.messageCount}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooAutoReconnectResponse {
+  count: number;
+  message: string;
+}
+export const $$FooAutoReconnectResponse: ArriModelValidator<FooAutoReconnectResponse> =
+  {
+    new(): FooAutoReconnectResponse {
+      return {
+        count: 0,
+        message: "",
+      };
+    },
+    validate(input): input is FooAutoReconnectResponse {
+      return (
+        isObject(input) &&
+        typeof input.count === "number" &&
+        Number.isInteger(input.count) &&
+        input.count >= 0 &&
+        input.count <= UINT8_MAX &&
+        typeof input.message === "string"
+      );
+    },
+    fromJson(input): FooAutoReconnectResponse {
+      let _count: number;
+      if (
+        typeof input.count === "number" &&
+        Number.isInteger(input.count) &&
+        input.count >= 0 &&
+        input.count <= UINT8_MAX
+      ) {
+        _count = input.count;
+      } else {
+        _count = 0;
+      }
+      let _message: string;
+      if (typeof input.message === "string") {
+        _message = input.message;
+      } else {
+        _message = "";
+      }
+      return {
+        count: _count,
+        message: _message,
+      };
+    },
+    fromJsonString(input): FooAutoReconnectResponse {
+      return $$FooAutoReconnectResponse.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"count":';
+      json += `${input.count}`;
+      json += ',"message":';
+      json += serializeString(input.message);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`count=${input.count}`);
+      queryParts.push(`message=${input.message}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooStreamConnectionErrorTestParams {
+  statusCode: number;
+  statusMessage: string;
+}
+export const $$FooStreamConnectionErrorTestParams: ArriModelValidator<FooStreamConnectionErrorTestParams> =
+  {
+    new(): FooStreamConnectionErrorTestParams {
+      return {
+        statusCode: 0,
+        statusMessage: "",
+      };
+    },
+    validate(input): input is FooStreamConnectionErrorTestParams {
+      return (
+        isObject(input) &&
+        typeof input.statusCode === "number" &&
+        Number.isInteger(input.statusCode) &&
+        input.statusCode >= INT32_MIN &&
+        input.statusCode <= INT32_MAX &&
+        typeof input.statusMessage === "string"
+      );
+    },
+    fromJson(input): FooStreamConnectionErrorTestParams {
+      let _statusCode: number;
+      if (
+        typeof input.statusCode === "number" &&
+        Number.isInteger(input.statusCode) &&
+        input.statusCode >= INT32_MIN &&
+        input.statusCode <= INT32_MAX
+      ) {
+        _statusCode = input.statusCode;
+      } else {
+        _statusCode = 0;
+      }
+      let _statusMessage: string;
+      if (typeof input.statusMessage === "string") {
+        _statusMessage = input.statusMessage;
+      } else {
+        _statusMessage = "";
+      }
+      return {
+        statusCode: _statusCode,
+        statusMessage: _statusMessage,
+      };
+    },
+    fromJsonString(input): FooStreamConnectionErrorTestParams {
+      return $$FooStreamConnectionErrorTestParams.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"statusCode":';
+      json += `${input.statusCode}`;
+      json += ',"statusMessage":';
+      json += serializeString(input.statusMessage);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`statusCode=${input.statusCode}`);
+      queryParts.push(`statusMessage=${input.statusMessage}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooStreamConnectionErrorTestResponse {
+  message: string;
+}
+export const $$FooStreamConnectionErrorTestResponse: ArriModelValidator<FooStreamConnectionErrorTestResponse> =
+  {
+    new(): FooStreamConnectionErrorTestResponse {
+      return {
+        message: "",
+      };
+    },
+    validate(input): input is FooStreamConnectionErrorTestResponse {
+      return isObject(input) && typeof input.message === "string";
+    },
+    fromJson(input): FooStreamConnectionErrorTestResponse {
+      let _message: string;
+      if (typeof input.message === "string") {
+        _message = input.message;
+      } else {
+        _message = "";
+      }
+      return {
+        message: _message,
+      };
+    },
+    fromJsonString(input): FooStreamConnectionErrorTestResponse {
+      return $$FooStreamConnectionErrorTestResponse.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"message":';
+      json += serializeString(input.message);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`message=${input.message}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooStreamLargeObjectsResponse {
+  numbers: number[];
+  objects: FooStreamLargeObjectsResponseObjectsElement[];
+}
+export const $$FooStreamLargeObjectsResponse: ArriModelValidator<FooStreamLargeObjectsResponse> =
+  {
+    new(): FooStreamLargeObjectsResponse {
+      return {
+        numbers: [],
+        objects: [],
+      };
+    },
+    validate(input): input is FooStreamLargeObjectsResponse {
+      return (
+        isObject(input) &&
+        Array.isArray(input.numbers) &&
+        input.numbers.every((_element) => typeof _element === "number") &&
+        Array.isArray(input.objects) &&
+        input.objects.every((_element) =>
+          $$FooStreamLargeObjectsResponseObjectsElement.validate(_element),
+        )
+      );
+    },
+    fromJson(input): FooStreamLargeObjectsResponse {
+      let _numbers: number[];
+      if (Array.isArray(input.numbers)) {
+        _numbers = [];
+        for (const _numbersEl of input.numbers) {
+          let _numbersElValue: number;
+          if (typeof _numbersEl === "number") {
+            _numbersElValue = _numbersEl;
+          } else {
+            _numbersElValue = 0;
+          }
+          _numbers.push(_numbersElValue);
+        }
+      } else {
+        _numbers = [];
+      }
+      let _objects: FooStreamLargeObjectsResponseObjectsElement[];
+      if (Array.isArray(input.objects)) {
+        _objects = [];
+        for (const _objectsEl of input.objects) {
+          let _objectsElValue: FooStreamLargeObjectsResponseObjectsElement;
+          if (isObject(_objectsEl)) {
+            _objectsElValue =
+              $$FooStreamLargeObjectsResponseObjectsElement.fromJson(
+                _objectsEl,
+              );
+          } else {
+            _objectsElValue =
+              $$FooStreamLargeObjectsResponseObjectsElement.new();
+          }
+          _objects.push(_objectsElValue);
+        }
+      } else {
+        _objects = [];
+      }
+      return {
+        numbers: _numbers,
+        objects: _objects,
+      };
+    },
+    fromJsonString(input): FooStreamLargeObjectsResponse {
+      return $$FooStreamLargeObjectsResponse.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"numbers":';
+      json += "[";
+      for (let i = 0; i < input.numbers.length; i++) {
+        if (i !== 0) json += ",";
+        const _inputNumbersEl = input.numbers[i];
+        json += `${_inputNumbersEl}`;
+      }
+      json += "]";
+      json += ',"objects":';
+      json += "[";
+      for (let i = 0; i < input.objects.length; i++) {
+        if (i !== 0) json += ",";
+        const _inputObjectsEl = input.objects[i];
+        json +=
+          $$FooStreamLargeObjectsResponseObjectsElement.toJsonString(
+            _inputObjectsEl,
+          );
+      }
+      json += "]";
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      console.warn(
+        "[WARNING] Cannot serialize arrays to query string. Skipping property at /StreamLargeObjectsResponse/numbers.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize arrays to query string. Skipping property at /StreamLargeObjectsResponse/objects.",
+      );
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooStreamLargeObjectsResponseObjectsElement {
+  id: string;
+  name: string;
+  email: string;
+}
+export const $$FooStreamLargeObjectsResponseObjectsElement: ArriModelValidator<FooStreamLargeObjectsResponseObjectsElement> =
+  {
+    new(): FooStreamLargeObjectsResponseObjectsElement {
+      return {
+        id: "",
+        name: "",
+        email: "",
+      };
+    },
+    validate(input): input is FooStreamLargeObjectsResponseObjectsElement {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        typeof input.name === "string" &&
+        typeof input.email === "string"
+      );
+    },
+    fromJson(input): FooStreamLargeObjectsResponseObjectsElement {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _name: string;
+      if (typeof input.name === "string") {
+        _name = input.name;
+      } else {
+        _name = "";
+      }
+      let _email: string;
+      if (typeof input.email === "string") {
+        _email = input.email;
+      } else {
+        _email = "";
+      }
+      return {
+        id: _id,
+        name: _name,
+        email: _email,
+      };
+    },
+    fromJsonString(input): FooStreamLargeObjectsResponseObjectsElement {
+      return $$FooStreamLargeObjectsResponseObjectsElement.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"name":';
+      json += serializeString(input.name);
+      json += ',"email":';
+      json += serializeString(input.email);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`name=${input.name}`);
+      queryParts.push(`email=${input.email}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooChatMessageParams {
+  channelId: string;
+}
+export const $$FooChatMessageParams: ArriModelValidator<FooChatMessageParams> =
+  {
+    new(): FooChatMessageParams {
+      return {
+        channelId: "",
+      };
+    },
+    validate(input): input is FooChatMessageParams {
+      return isObject(input) && typeof input.channelId === "string";
+    },
+    fromJson(input): FooChatMessageParams {
+      let _channelId: string;
+      if (typeof input.channelId === "string") {
+        _channelId = input.channelId;
+      } else {
+        _channelId = "";
+      }
+      return {
+        channelId: _channelId,
+      };
+    },
+    fromJsonString(input): FooChatMessageParams {
+      return $$FooChatMessageParams.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"channelId":';
+      json += serializeString(input.channelId);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`channelId=${input.channelId}`);
+      return queryParts.join("&");
+    },
+  };
+
+export type FooChatMessage =
+  | FooChatMessageText
+  | FooChatMessageImage
+  | FooChatMessageUrl;
+export const $$FooChatMessage: ArriModelValidator<FooChatMessage> = {
+  new(): FooChatMessage {
+    return $$FooChatMessageText.new();
+  },
+  validate(input): input is FooChatMessage {
+    if (!isObject(input)) {
+      return false;
+    }
+    if (typeof input.messageType !== "string") {
+      return false;
+    }
+    switch (input.messageType) {
+      case "TEXT":
+        return $$FooChatMessageText.validate(input);
+      case "IMAGE":
+        return $$FooChatMessageImage.validate(input);
+      case "URL":
+        return $$FooChatMessageUrl.validate(input);
+      default:
+        return false;
+    }
+  },
+  fromJson(input): FooChatMessage {
+    switch (input.messageType) {
+      case "TEXT":
+        return $$FooChatMessageText.fromJson(input);
+      case "IMAGE":
+        return $$FooChatMessageImage.fromJson(input);
+      case "URL":
+        return $$FooChatMessageUrl.fromJson(input);
+      default:
+        return $$FooChatMessageText.new();
+    }
+  },
+  fromJsonString(input): FooChatMessage {
+    return $$FooChatMessage.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    switch (input.messageType) {
+      case "TEXT":
+        return $$FooChatMessageText.toJsonString(input);
+      case "IMAGE":
+        return $$FooChatMessageImage.toJsonString(input);
+      case "URL":
+        return $$FooChatMessageUrl.toJsonString(input);
+      default:
+        throw new Error(`Unhandled case "${(input as any).messageType}"`);
+    }
+  },
+  toUrlQueryString(input): string {
+    switch (input.messageType) {
+      case "TEXT":
+        return $$FooChatMessageText.toUrlQueryString(input);
+      case "IMAGE":
+        return $$FooChatMessageImage.toUrlQueryString(input);
+      case "URL":
+        return $$FooChatMessageUrl.toUrlQueryString(input);
+      default:
+        throw new Error("Unhandled case");
+    }
+  },
+};
+export interface FooChatMessageText {
+  messageType: "TEXT";
+  id: string;
+  channelId: string;
+  userId: string;
+  date: Date;
+  text: string;
+}
+const $$FooChatMessageText: ArriModelValidator<FooChatMessageText> = {
+  new(): FooChatMessageText {
+    return {
+      messageType: "TEXT",
+      id: "",
+      channelId: "",
+      userId: "",
+      date: new Date(),
+      text: "",
+    };
+  },
+  validate(input): input is FooChatMessageText {
+    return (
+      isObject(input) &&
+      input.messageType === "TEXT" &&
+      typeof input.id === "string" &&
+      typeof input.channelId === "string" &&
+      typeof input.userId === "string" &&
+      input.date instanceof Date &&
+      typeof input.text === "string"
+    );
+  },
+  fromJson(input): FooChatMessageText {
+    const _messageType = "TEXT";
+    let _id: string;
+    if (typeof input.id === "string") {
+      _id = input.id;
+    } else {
+      _id = "";
+    }
+    let _channelId: string;
+    if (typeof input.channelId === "string") {
+      _channelId = input.channelId;
+    } else {
+      _channelId = "";
+    }
+    let _userId: string;
+    if (typeof input.userId === "string") {
+      _userId = input.userId;
+    } else {
+      _userId = "";
+    }
+    let _date: Date;
+    if (typeof input.date === "string") {
+      _date = new Date(input.date);
+    } else if (input.date instanceof Date) {
+      _date = input.date;
+    } else {
+      _date = new Date();
+    }
+    let _text: string;
+    if (typeof input.text === "string") {
+      _text = input.text;
+    } else {
+      _text = "";
+    }
+    return {
+      messageType: _messageType,
+      id: _id,
+      channelId: _channelId,
+      userId: _userId,
+      date: _date,
+      text: _text,
+    };
+  },
+  fromJsonString(input): FooChatMessageText {
+    return $$FooChatMessageText.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"messageType":"TEXT"';
+    json += ',"id":';
+    json += serializeString(input.id);
+    json += ',"channelId":';
+    json += serializeString(input.channelId);
+    json += ',"userId":';
+    json += serializeString(input.userId);
+    json += ',"date":';
+    json += `"${input.date.toISOString()}"`;
+    json += ',"text":';
+    json += serializeString(input.text);
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push("messageType=TEXT");
+    queryParts.push(`id=${input.id}`);
+    queryParts.push(`channelId=${input.channelId}`);
+    queryParts.push(`userId=${input.userId}`);
+    queryParts.push(`date=${input.date.toISOString()}`);
+    queryParts.push(`text=${input.text}`);
+    return queryParts.join("&");
+  },
+};
+
+export interface FooChatMessageImage {
+  messageType: "IMAGE";
+  id: string;
+  channelId: string;
+  userId: string;
+  date: Date;
+  image: string;
+}
+const $$FooChatMessageImage: ArriModelValidator<FooChatMessageImage> = {
+  new(): FooChatMessageImage {
+    return {
+      messageType: "IMAGE",
+      id: "",
+      channelId: "",
+      userId: "",
+      date: new Date(),
+      image: "",
+    };
+  },
+  validate(input): input is FooChatMessageImage {
+    return (
+      isObject(input) &&
+      input.messageType === "IMAGE" &&
+      typeof input.id === "string" &&
+      typeof input.channelId === "string" &&
+      typeof input.userId === "string" &&
+      input.date instanceof Date &&
+      typeof input.image === "string"
+    );
+  },
+  fromJson(input): FooChatMessageImage {
+    const _messageType = "IMAGE";
+    let _id: string;
+    if (typeof input.id === "string") {
+      _id = input.id;
+    } else {
+      _id = "";
+    }
+    let _channelId: string;
+    if (typeof input.channelId === "string") {
+      _channelId = input.channelId;
+    } else {
+      _channelId = "";
+    }
+    let _userId: string;
+    if (typeof input.userId === "string") {
+      _userId = input.userId;
+    } else {
+      _userId = "";
+    }
+    let _date: Date;
+    if (typeof input.date === "string") {
+      _date = new Date(input.date);
+    } else if (input.date instanceof Date) {
+      _date = input.date;
+    } else {
+      _date = new Date();
+    }
+    let _image: string;
+    if (typeof input.image === "string") {
+      _image = input.image;
+    } else {
+      _image = "";
+    }
+    return {
+      messageType: _messageType,
+      id: _id,
+      channelId: _channelId,
+      userId: _userId,
+      date: _date,
+      image: _image,
+    };
+  },
+  fromJsonString(input): FooChatMessageImage {
+    return $$FooChatMessageImage.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"messageType":"IMAGE"';
+    json += ',"id":';
+    json += serializeString(input.id);
+    json += ',"channelId":';
+    json += serializeString(input.channelId);
+    json += ',"userId":';
+    json += serializeString(input.userId);
+    json += ',"date":';
+    json += `"${input.date.toISOString()}"`;
+    json += ',"image":';
+    json += serializeString(input.image);
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push("messageType=IMAGE");
+    queryParts.push(`id=${input.id}`);
+    queryParts.push(`channelId=${input.channelId}`);
+    queryParts.push(`userId=${input.userId}`);
+    queryParts.push(`date=${input.date.toISOString()}`);
+    queryParts.push(`image=${input.image}`);
+    return queryParts.join("&");
+  },
+};
+
+export interface FooChatMessageUrl {
+  messageType: "URL";
+  id: string;
+  channelId: string;
+  userId: string;
+  date: Date;
+  url: string;
+}
+const $$FooChatMessageUrl: ArriModelValidator<FooChatMessageUrl> = {
+  new(): FooChatMessageUrl {
+    return {
+      messageType: "URL",
+      id: "",
+      channelId: "",
+      userId: "",
+      date: new Date(),
+      url: "",
+    };
+  },
+  validate(input): input is FooChatMessageUrl {
+    return (
+      isObject(input) &&
+      input.messageType === "URL" &&
+      typeof input.id === "string" &&
+      typeof input.channelId === "string" &&
+      typeof input.userId === "string" &&
+      input.date instanceof Date &&
+      typeof input.url === "string"
+    );
+  },
+  fromJson(input): FooChatMessageUrl {
+    const _messageType = "URL";
+    let _id: string;
+    if (typeof input.id === "string") {
+      _id = input.id;
+    } else {
+      _id = "";
+    }
+    let _channelId: string;
+    if (typeof input.channelId === "string") {
+      _channelId = input.channelId;
+    } else {
+      _channelId = "";
+    }
+    let _userId: string;
+    if (typeof input.userId === "string") {
+      _userId = input.userId;
+    } else {
+      _userId = "";
+    }
+    let _date: Date;
+    if (typeof input.date === "string") {
+      _date = new Date(input.date);
+    } else if (input.date instanceof Date) {
+      _date = input.date;
+    } else {
+      _date = new Date();
+    }
+    let _url: string;
+    if (typeof input.url === "string") {
+      _url = input.url;
+    } else {
+      _url = "";
+    }
+    return {
+      messageType: _messageType,
+      id: _id,
+      channelId: _channelId,
+      userId: _userId,
+      date: _date,
+      url: _url,
+    };
+  },
+  fromJsonString(input): FooChatMessageUrl {
+    return $$FooChatMessageUrl.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"messageType":"URL"';
+    json += ',"id":';
+    json += serializeString(input.id);
+    json += ',"channelId":';
+    json += serializeString(input.channelId);
+    json += ',"userId":';
+    json += serializeString(input.userId);
+    json += ',"date":';
+    json += `"${input.date.toISOString()}"`;
+    json += ',"url":';
+    json += serializeString(input.url);
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push("messageType=URL");
+    queryParts.push(`id=${input.id}`);
+    queryParts.push(`channelId=${input.channelId}`);
+    queryParts.push(`userId=${input.userId}`);
+    queryParts.push(`date=${input.date.toISOString()}`);
+    queryParts.push(`url=${input.url}`);
+    return queryParts.join("&");
+  },
+};
+
+export interface FooTestsStreamRetryWithNewCredentialsResponse {
+  message: string;
+}
+export const $$FooTestsStreamRetryWithNewCredentialsResponse: ArriModelValidator<FooTestsStreamRetryWithNewCredentialsResponse> =
+  {
+    new(): FooTestsStreamRetryWithNewCredentialsResponse {
+      return {
+        message: "",
+      };
+    },
+    validate(input): input is FooTestsStreamRetryWithNewCredentialsResponse {
+      return isObject(input) && typeof input.message === "string";
+    },
+    fromJson(input): FooTestsStreamRetryWithNewCredentialsResponse {
+      let _message: string;
+      if (typeof input.message === "string") {
+        _message = input.message;
+      } else {
+        _message = "";
+      }
+      return {
+        message: _message,
+      };
+    },
+    fromJsonString(input): FooTestsStreamRetryWithNewCredentialsResponse {
+      return $$FooTestsStreamRetryWithNewCredentialsResponse.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"message":';
+      json += serializeString(input.message);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`message=${input.message}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooUsersWatchUserParams {
+  userId: string;
+}
+export const $$FooUsersWatchUserParams: ArriModelValidator<FooUsersWatchUserParams> =
+  {
+    new(): FooUsersWatchUserParams {
+      return {
+        userId: "",
+      };
+    },
+    validate(input): input is FooUsersWatchUserParams {
+      return isObject(input) && typeof input.userId === "string";
+    },
+    fromJson(input): FooUsersWatchUserParams {
+      let _userId: string;
+      if (typeof input.userId === "string") {
+        _userId = input.userId;
+      } else {
+        _userId = "";
+      }
+      return {
+        userId: _userId,
+      };
+    },
+    fromJsonString(input): FooUsersWatchUserParams {
+      return $$FooUsersWatchUserParams.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"userId":';
+      json += serializeString(input.userId);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`userId=${input.userId}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooUsersWatchUserResponse {
+  id: string;
+  role: FooUsersWatchUserResponseRole;
+  /**
+   * A profile picture
+   */
+  photo: FooUserPhoto | null;
+  createdAt: Date;
+  numFollowers: number;
+  settings: FooUserSettings;
+  recentNotifications: FooUsersWatchUserResponseRecentNotificationsElement[];
+  bookmarks: Record<string, FooUsersWatchUserResponseBookmarksValue>;
+  metadata: Record<string, any>;
+  randomList: any[];
+  bio?: string;
+}
+export const $$FooUsersWatchUserResponse: ArriModelValidator<FooUsersWatchUserResponse> =
+  {
+    new(): FooUsersWatchUserResponse {
+      return {
+        id: "",
+        role: $$FooUsersWatchUserResponseRole.new(),
+        photo: null,
+        createdAt: new Date(),
+        numFollowers: 0,
+        settings: $$FooUserSettings.new(),
+        recentNotifications: [],
+        bookmarks: {},
+        metadata: {},
+        randomList: [],
+      };
+    },
+    validate(input): input is FooUsersWatchUserResponse {
+      return (
+        isObject(input) &&
+        typeof input.id === "string" &&
+        $$FooUsersWatchUserResponseRole.validate(input.role) &&
+        ($$FooUserPhoto.validate(input.photo) || input.photo === null) &&
+        input.createdAt instanceof Date &&
+        typeof input.numFollowers === "number" &&
+        Number.isInteger(input.numFollowers) &&
+        input.numFollowers >= INT32_MIN &&
+        input.numFollowers <= INT32_MAX &&
+        $$FooUserSettings.validate(input.settings) &&
+        Array.isArray(input.recentNotifications) &&
+        input.recentNotifications.every((_element) =>
+          $$FooUsersWatchUserResponseRecentNotificationsElement.validate(
+            _element,
+          ),
+        ) &&
+        isObject(input.bookmarks) &&
+        Object.values(input.bookmarks).every((_value) =>
+          $$FooUsersWatchUserResponseBookmarksValue.validate(_value),
+        ) &&
+        isObject(input.metadata) &&
+        Object.values(input.metadata).every((_value) => true) &&
+        Array.isArray(input.randomList) &&
+        input.randomList.every((_element) => true) &&
+        (typeof input.bio === "string" || typeof input.bio === "undefined")
+      );
+    },
+    fromJson(input): FooUsersWatchUserResponse {
+      let _id: string;
+      if (typeof input.id === "string") {
+        _id = input.id;
+      } else {
+        _id = "";
+      }
+      let _role: FooUsersWatchUserResponseRole;
+      if (typeof input.role === "string") {
+        _role = $$FooUsersWatchUserResponseRole.fromSerialValue(input.role);
+      } else {
+        _role = $$FooUsersWatchUserResponseRole.new();
+      }
+      let _photo: FooUserPhoto | null;
+      if (isObject(input.photo)) {
+        _photo = $$FooUserPhoto.fromJson(input.photo);
+      } else {
+        _photo = null;
+      }
+      let _createdAt: Date;
+      if (typeof input.createdAt === "string") {
+        _createdAt = new Date(input.createdAt);
+      } else if (input.createdAt instanceof Date) {
+        _createdAt = input.createdAt;
+      } else {
+        _createdAt = new Date();
+      }
+      let _numFollowers: number;
+      if (
+        typeof input.numFollowers === "number" &&
+        Number.isInteger(input.numFollowers) &&
+        input.numFollowers >= INT32_MIN &&
+        input.numFollowers <= INT32_MAX
+      ) {
+        _numFollowers = input.numFollowers;
+      } else {
+        _numFollowers = 0;
+      }
+      let _settings: FooUserSettings;
+      if (isObject(input.settings)) {
+        _settings = $$FooUserSettings.fromJson(input.settings);
+      } else {
+        _settings = $$FooUserSettings.new();
+      }
+      let _recentNotifications: FooUsersWatchUserResponseRecentNotificationsElement[];
+      if (Array.isArray(input.recentNotifications)) {
+        _recentNotifications = [];
+        for (const _recentNotificationsEl of input.recentNotifications) {
+          let _recentNotificationsElValue: FooUsersWatchUserResponseRecentNotificationsElement;
+          if (isObject(_recentNotificationsEl)) {
+            _recentNotificationsElValue =
+              $$FooUsersWatchUserResponseRecentNotificationsElement.fromJson(
+                _recentNotificationsEl,
+              );
+          } else {
+            _recentNotificationsElValue =
+              $$FooUsersWatchUserResponseRecentNotificationsElement.new();
+          }
+          _recentNotifications.push(_recentNotificationsElValue);
+        }
+      } else {
+        _recentNotifications = [];
+      }
+      let _bookmarks: Record<string, FooUsersWatchUserResponseBookmarksValue>;
+      if (isObject(input.bookmarks)) {
+        _bookmarks = {};
+        for (const [_key, _value] of Object.entries(input.bookmarks)) {
+          let _bookmarksValue: FooUsersWatchUserResponseBookmarksValue;
+          if (isObject(_value)) {
+            _bookmarksValue =
+              $$FooUsersWatchUserResponseBookmarksValue.fromJson(_value);
+          } else {
+            _bookmarksValue = $$FooUsersWatchUserResponseBookmarksValue.new();
+          }
+          _bookmarks[_key] = _bookmarksValue;
+        }
+      } else {
+        _bookmarks = {};
+      }
+      let _metadata: Record<string, any>;
+      if (isObject(input.metadata)) {
+        _metadata = {};
+        for (const [_key, _value] of Object.entries(input.metadata)) {
+          let _metadataValue: any;
+          _metadataValue = _value;
+          _metadata[_key] = _metadataValue;
+        }
+      } else {
+        _metadata = {};
+      }
+      let _randomList: any[];
+      if (Array.isArray(input.randomList)) {
+        _randomList = [];
+        for (const _randomListEl of input.randomList) {
+          let _randomListElValue: any;
+          _randomListElValue = _randomListEl;
+          _randomList.push(_randomListElValue);
+        }
+      } else {
+        _randomList = [];
+      }
+      let _bio: string | undefined;
+      if (typeof input.bio !== "undefined") {
+        if (typeof input.bio === "string") {
+          _bio = input.bio;
+        } else {
+          _bio = "";
+        }
+      }
+      return {
+        id: _id,
+        role: _role,
+        photo: _photo,
+        createdAt: _createdAt,
+        numFollowers: _numFollowers,
+        settings: _settings,
+        recentNotifications: _recentNotifications,
+        bookmarks: _bookmarks,
+        metadata: _metadata,
+        randomList: _randomList,
+        bio: _bio,
+      };
+    },
+    fromJsonString(input): FooUsersWatchUserResponse {
+      return $$FooUsersWatchUserResponse.fromJson(JSON.parse(input));
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"id":';
+      json += serializeString(input.id);
+      json += ',"role":';
+      json += `"${input.role}"`;
+      json += ',"photo":';
+      if (input.photo !== null) {
+        json += $$FooUserPhoto.toJsonString(input.photo);
+      } else {
+        json += "null";
+      }
+      json += ',"createdAt":';
+      json += `"${input.createdAt.toISOString()}"`;
+      json += ',"numFollowers":';
+      json += `${input.numFollowers}`;
+      json += ',"settings":';
+      json += $$FooUserSettings.toJsonString(input.settings);
+      json += ',"recentNotifications":';
+      json += "[";
+      for (let i = 0; i < input.recentNotifications.length; i++) {
+        if (i !== 0) json += ",";
+        const _inputRecentNotificationsEl = input.recentNotifications[i];
+        json +=
+          $$FooUsersWatchUserResponseRecentNotificationsElement.toJsonString(
+            _inputRecentNotificationsEl,
+          );
+      }
+      json += "]";
+      json += ',"bookmarks":';
+      json += "{";
+      let _bookmarksPropertyCount = 0;
+      for (const [_key, _value] of Object.entries(input.bookmarks)) {
+        if (_bookmarksPropertyCount !== 0) {
+          json += ",";
+        }
+        json += `${serializeString(_key)}:`;
+        json += $$FooUsersWatchUserResponseBookmarksValue.toJsonString(_value);
+        _bookmarksPropertyCount++;
+      }
+      json += "}";
+
+      json += ',"metadata":';
+      json += "{";
+      let _metadataPropertyCount = 0;
+      for (const [_key, _value] of Object.entries(input.metadata)) {
+        if (_metadataPropertyCount !== 0) {
+          json += ",";
+        }
+        json += `${serializeString(_key)}:`;
+        json += JSON.stringify(_value);
+        _metadataPropertyCount++;
+      }
+      json += "}";
+
+      json += ',"randomList":';
+      json += "[";
+      for (let i = 0; i < input.randomList.length; i++) {
+        if (i !== 0) json += ",";
+        const _inputRandomListEl = input.randomList[i];
+        json += JSON.stringify(_inputRandomListEl);
+      }
+      json += "]";
+      if (typeof input.bio !== "undefined") {
+        json += `,"bio":`;
+        json += serializeString(input.bio);
+      }
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`id=${input.id}`);
+      queryParts.push(`role=${input.role}`);
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /UsersWatchUserResponse/photo.",
+      );
+      queryParts.push(`createdAt=${input.createdAt.toISOString()}`);
+      queryParts.push(`numFollowers=${input.numFollowers}`);
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /UsersWatchUserResponse/settings.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize arrays to query string. Skipping property at /UsersWatchUserResponse/recentNotifications.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /UsersWatchUserResponse/bookmarks.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize nested objects to query string. Skipping property at /UsersWatchUserResponse/metadata.",
+      );
+      console.warn(
+        "[WARNING] Cannot serialize arrays to query string. Skipping property at /UsersWatchUserResponse/randomList.",
+      );
+      if (typeof input.bio !== "undefined") {
+        queryParts.push(`bio=${input.bio}`);
+      }
+      return queryParts.join("&");
+    },
+  };
+
+export type FooUsersWatchUserResponseRole =
+  (typeof $$FooUsersWatchUserResponseRoleValues)[number];
+const $$FooUsersWatchUserResponseRoleValues = ["standard", "admin"] as const;
+export const $$FooUsersWatchUserResponseRole: ArriEnumValidator<FooUsersWatchUserResponseRole> =
+  {
+    new(): FooUsersWatchUserResponseRole {
+      return $$FooUsersWatchUserResponseRoleValues[0];
+    },
+    validate(input): input is UsersWatchUserResponseRole {
+      return (
+        typeof input === "string" &&
+        $$FooUsersWatchUserResponseRoleValues.includes(input as any)
+      );
+    },
+    values: $$FooUsersWatchUserResponseRoleValues,
+    fromSerialValue(input): FooUsersWatchUserResponseRole {
+      if ($$FooUsersWatchUserResponseRoleValues.includes(input as any)) {
+        return input as FooUsersWatchUserResponseRole;
+      }
+      if (
+        $$FooUsersWatchUserResponseRoleValues.includes(
+          input.toLowerCase() as any,
+        )
+      ) {
+        return input.toLowerCase() as FooUsersWatchUserResponseRole;
+      }
+      if (
+        $$FooUsersWatchUserResponseRoleValues.includes(
+          input.toUpperCase() as any,
+        )
+      ) {
+        return input.toUpperCase() as FooUsersWatchUserResponseRole;
+      }
+      return "standard";
+    },
+  };
+
+/**
+ * A profile picture
+ */
+export interface FooUserPhoto {
+  url: string;
+  width: number;
+  height: number;
+  bytes: bigint;
+  /**
+   * When the photo was last updated in nanoseconds
+   */
+  nanoseconds: bigint;
+}
+export const $$FooUserPhoto: ArriModelValidator<FooUserPhoto> = {
+  new(): FooUserPhoto {
+    return {
+      url: "",
+      width: 0,
+      height: 0,
+      bytes: BigInt(0),
+      nanoseconds: BigInt(0),
+    };
+  },
+  validate(input): input is FooUserPhoto {
+    return (
+      isObject(input) &&
+      typeof input.url === "string" &&
+      typeof input.width === "number" &&
+      typeof input.height === "number" &&
+      typeof input.bytes === "bigint" &&
+      input.bytes >= INT64_MIN &&
+      input.bytes <= INT64_MAX &&
+      typeof input.nanoseconds === "bigint" &&
+      input.nanoseconds >= BigInt(0) &&
+      input.nanoseconds <= UINT64_MAX
+    );
+  },
+  fromJson(input): FooUserPhoto {
+    let _url: string;
+    if (typeof input.url === "string") {
+      _url = input.url;
+    } else {
+      _url = "";
+    }
+    let _width: number;
+    if (typeof input.width === "number") {
+      _width = input.width;
+    } else {
+      _width = 0;
+    }
+    let _height: number;
+    if (typeof input.height === "number") {
+      _height = input.height;
+    } else {
+      _height = 0;
+    }
+    let _bytes: bigint;
+    if (typeof input.bytes === "string") {
+      _bytes = BigInt(input.bytes);
+    } else if (typeof input.bytes === "bigint") {
+      _bytes = input.bytes;
+    } else {
+      _bytes = BigInt(0);
+    }
+    let _nanoseconds: bigint;
+    if (
+      typeof input.nanoseconds === "string" &&
+      BigInt(input.nanoseconds) >= BigInt(0)
+    ) {
+      _nanoseconds = BigInt(input.nanoseconds);
+    } else if (
+      typeof input.nanoseconds === "bigint" &&
+      input.nanoseconds >= BigInt(0)
+    ) {
+      _nanoseconds = input.nanoseconds;
+    } else {
+      _nanoseconds = BigInt(0);
+    }
+    return {
+      url: _url,
+      width: _width,
+      height: _height,
+      bytes: _bytes,
+      nanoseconds: _nanoseconds,
+    };
+  },
+  fromJsonString(input): FooUserPhoto {
+    return $$FooUserPhoto.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"url":';
+    json += serializeString(input.url);
+    json += ',"width":';
+    json += `${input.width}`;
+    json += ',"height":';
+    json += `${input.height}`;
+    json += ',"bytes":';
+    json += `"${input.bytes}"`;
+    json += ',"nanoseconds":';
+    json += `"${input.nanoseconds}"`;
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push(`url=${input.url}`);
+    queryParts.push(`width=${input.width}`);
+    queryParts.push(`height=${input.height}`);
+    queryParts.push(`bytes=${input.bytes}`);
+    queryParts.push(`nanoseconds=${input.nanoseconds}`);
+    return queryParts.join("&");
+  },
+};
+
+export interface FooUserSettings {
+  notificationsEnabled: boolean;
+  preferredTheme: FooUserSettingsPreferredTheme;
+}
+export const $$FooUserSettings: ArriModelValidator<FooUserSettings> = {
+  new(): FooUserSettings {
+    return {
+      notificationsEnabled: false,
+      preferredTheme: $$FooUserSettingsPreferredTheme.new(),
+    };
+  },
+  validate(input): input is FooUserSettings {
+    return (
+      isObject(input) &&
+      typeof input.notificationsEnabled === "boolean" &&
+      $$FooUserSettingsPreferredTheme.validate(input.preferredTheme)
+    );
+  },
+  fromJson(input): FooUserSettings {
+    let _notificationsEnabled: boolean;
+    if (typeof input.notificationsEnabled === "boolean") {
+      _notificationsEnabled = input.notificationsEnabled;
+    } else {
+      _notificationsEnabled = false;
+    }
+    let _preferredTheme: FooUserSettingsPreferredTheme;
+    if (typeof input.preferredTheme === "string") {
+      _preferredTheme = $$FooUserSettingsPreferredTheme.fromSerialValue(
+        input.preferredTheme,
+      );
+    } else {
+      _preferredTheme = $$FooUserSettingsPreferredTheme.new();
+    }
+    return {
+      notificationsEnabled: _notificationsEnabled,
+      preferredTheme: _preferredTheme,
+    };
+  },
+  fromJsonString(input): FooUserSettings {
+    return $$FooUserSettings.fromJson(JSON.parse(input));
+  },
+  toJsonString(input): string {
+    let json = "{";
+    json += '"notificationsEnabled":';
+    json += `${input.notificationsEnabled}`;
+    json += ',"preferredTheme":';
+    json += `"${input.preferredTheme}"`;
+    json += "}";
+    return json;
+  },
+  toUrlQueryString(input): string {
+    const queryParts: string[] = [];
+    queryParts.push(`notificationsEnabled=${input.notificationsEnabled}`);
+    queryParts.push(`preferredTheme=${input.preferredTheme}`);
+    return queryParts.join("&");
+  },
+};
+
+export type FooUserSettingsPreferredTheme =
+  (typeof $$FooUserSettingsPreferredThemeValues)[number];
+const $$FooUserSettingsPreferredThemeValues = [
+  "dark-mode",
+  "light-mode",
+  "system",
+] as const;
+export const $$FooUserSettingsPreferredTheme: ArriEnumValidator<FooUserSettingsPreferredTheme> =
+  {
+    new(): FooUserSettingsPreferredTheme {
+      return $$FooUserSettingsPreferredThemeValues[0];
+    },
+    validate(input): input is UserSettingsPreferredTheme {
+      return (
+        typeof input === "string" &&
+        $$FooUserSettingsPreferredThemeValues.includes(input as any)
+      );
+    },
+    values: $$FooUserSettingsPreferredThemeValues,
+    fromSerialValue(input): FooUserSettingsPreferredTheme {
+      if ($$FooUserSettingsPreferredThemeValues.includes(input as any)) {
+        return input as FooUserSettingsPreferredTheme;
+      }
+      if (
+        $$FooUserSettingsPreferredThemeValues.includes(
+          input.toLowerCase() as any,
+        )
+      ) {
+        return input.toLowerCase() as FooUserSettingsPreferredTheme;
+      }
+      if (
+        $$FooUserSettingsPreferredThemeValues.includes(
+          input.toUpperCase() as any,
+        )
+      ) {
+        return input.toUpperCase() as FooUserSettingsPreferredTheme;
+      }
+      return "dark-mode";
+    },
+  };
+
+export type FooUsersWatchUserResponseRecentNotificationsElement =
+  | FooUsersWatchUserResponseRecentNotificationsElementPostLike
+  | FooUsersWatchUserResponseRecentNotificationsElementPostComment;
+export const $$FooUsersWatchUserResponseRecentNotificationsElement: ArriModelValidator<FooUsersWatchUserResponseRecentNotificationsElement> =
+  {
+    new(): FooUsersWatchUserResponseRecentNotificationsElement {
+      return $$FooUsersWatchUserResponseRecentNotificationsElementPostLike.new();
+    },
+    validate(
+      input,
+    ): input is FooUsersWatchUserResponseRecentNotificationsElement {
+      if (!isObject(input)) {
+        return false;
+      }
+      if (typeof input.notificationType !== "string") {
+        return false;
+      }
+      switch (input.notificationType) {
+        case "POST_LIKE":
+          return $$FooUsersWatchUserResponseRecentNotificationsElementPostLike.validate(
+            input,
+          );
+        case "POST_COMMENT":
+          return $$FooUsersWatchUserResponseRecentNotificationsElementPostComment.validate(
+            input,
+          );
+        default:
+          return false;
+      }
+    },
+    fromJson(input): FooUsersWatchUserResponseRecentNotificationsElement {
+      switch (input.notificationType) {
+        case "POST_LIKE":
+          return $$FooUsersWatchUserResponseRecentNotificationsElementPostLike.fromJson(
+            input,
+          );
+        case "POST_COMMENT":
+          return $$FooUsersWatchUserResponseRecentNotificationsElementPostComment.fromJson(
+            input,
+          );
+        default:
+          return $$FooUsersWatchUserResponseRecentNotificationsElementPostLike.new();
+      }
+    },
+    fromJsonString(input): FooUsersWatchUserResponseRecentNotificationsElement {
+      return $$FooUsersWatchUserResponseRecentNotificationsElement.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      switch (input.notificationType) {
+        case "POST_LIKE":
+          return $$FooUsersWatchUserResponseRecentNotificationsElementPostLike.toJsonString(
+            input,
+          );
+        case "POST_COMMENT":
+          return $$FooUsersWatchUserResponseRecentNotificationsElementPostComment.toJsonString(
+            input,
+          );
+        default:
+          throw new Error(
+            `Unhandled case "${(input as any).notificationType}"`,
+          );
+      }
+    },
+    toUrlQueryString(input): string {
+      switch (input.notificationType) {
+        case "POST_LIKE":
+          return $$FooUsersWatchUserResponseRecentNotificationsElementPostLike.toUrlQueryString(
+            input,
+          );
+        case "POST_COMMENT":
+          return $$FooUsersWatchUserResponseRecentNotificationsElementPostComment.toUrlQueryString(
+            input,
+          );
+        default:
+          throw new Error("Unhandled case");
+      }
+    },
+  };
+export interface FooUsersWatchUserResponseRecentNotificationsElementPostLike {
+  notificationType: "POST_LIKE";
+  postId: string;
+  userId: string;
+}
+const $$FooUsersWatchUserResponseRecentNotificationsElementPostLike: ArriModelValidator<FooUsersWatchUserResponseRecentNotificationsElementPostLike> =
+  {
+    new(): FooUsersWatchUserResponseRecentNotificationsElementPostLike {
+      return {
+        notificationType: "POST_LIKE",
+        postId: "",
+        userId: "",
+      };
+    },
+    validate(
+      input,
+    ): input is FooUsersWatchUserResponseRecentNotificationsElementPostLike {
+      return (
+        isObject(input) &&
+        input.notificationType === "POST_LIKE" &&
+        typeof input.postId === "string" &&
+        typeof input.userId === "string"
+      );
+    },
+    fromJson(
+      input,
+    ): FooUsersWatchUserResponseRecentNotificationsElementPostLike {
+      const _notificationType = "POST_LIKE";
+      let _postId: string;
+      if (typeof input.postId === "string") {
+        _postId = input.postId;
+      } else {
+        _postId = "";
+      }
+      let _userId: string;
+      if (typeof input.userId === "string") {
+        _userId = input.userId;
+      } else {
+        _userId = "";
+      }
+      return {
+        notificationType: _notificationType,
+        postId: _postId,
+        userId: _userId,
+      };
+    },
+    fromJsonString(
+      input,
+    ): FooUsersWatchUserResponseRecentNotificationsElementPostLike {
+      return $$FooUsersWatchUserResponseRecentNotificationsElementPostLike.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"notificationType":"POST_LIKE"';
+      json += ',"postId":';
+      json += serializeString(input.postId);
+      json += ',"userId":';
+      json += serializeString(input.userId);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push("notificationType=POST_LIKE");
+      queryParts.push(`postId=${input.postId}`);
+      queryParts.push(`userId=${input.userId}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooUsersWatchUserResponseRecentNotificationsElementPostComment {
+  notificationType: "POST_COMMENT";
+  postId: string;
+  userId: string;
+  commentText: string;
+}
+const $$FooUsersWatchUserResponseRecentNotificationsElementPostComment: ArriModelValidator<FooUsersWatchUserResponseRecentNotificationsElementPostComment> =
+  {
+    new(): FooUsersWatchUserResponseRecentNotificationsElementPostComment {
+      return {
+        notificationType: "POST_COMMENT",
+        postId: "",
+        userId: "",
+        commentText: "",
+      };
+    },
+    validate(
+      input,
+    ): input is FooUsersWatchUserResponseRecentNotificationsElementPostComment {
+      return (
+        isObject(input) &&
+        input.notificationType === "POST_COMMENT" &&
+        typeof input.postId === "string" &&
+        typeof input.userId === "string" &&
+        typeof input.commentText === "string"
+      );
+    },
+    fromJson(
+      input,
+    ): FooUsersWatchUserResponseRecentNotificationsElementPostComment {
+      const _notificationType = "POST_COMMENT";
+      let _postId: string;
+      if (typeof input.postId === "string") {
+        _postId = input.postId;
+      } else {
+        _postId = "";
+      }
+      let _userId: string;
+      if (typeof input.userId === "string") {
+        _userId = input.userId;
+      } else {
+        _userId = "";
+      }
+      let _commentText: string;
+      if (typeof input.commentText === "string") {
+        _commentText = input.commentText;
+      } else {
+        _commentText = "";
+      }
+      return {
+        notificationType: _notificationType,
+        postId: _postId,
+        userId: _userId,
+        commentText: _commentText,
+      };
+    },
+    fromJsonString(
+      input,
+    ): FooUsersWatchUserResponseRecentNotificationsElementPostComment {
+      return $$FooUsersWatchUserResponseRecentNotificationsElementPostComment.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"notificationType":"POST_COMMENT"';
+      json += ',"postId":';
+      json += serializeString(input.postId);
+      json += ',"userId":';
+      json += serializeString(input.userId);
+      json += ',"commentText":';
+      json += serializeString(input.commentText);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push("notificationType=POST_COMMENT");
+      queryParts.push(`postId=${input.postId}`);
+      queryParts.push(`userId=${input.userId}`);
+      queryParts.push(`commentText=${input.commentText}`);
+      return queryParts.join("&");
+    },
+  };
+
+export interface FooUsersWatchUserResponseBookmarksValue {
+  postId: string;
+  userId: string;
+}
+export const $$FooUsersWatchUserResponseBookmarksValue: ArriModelValidator<FooUsersWatchUserResponseBookmarksValue> =
+  {
+    new(): FooUsersWatchUserResponseBookmarksValue {
+      return {
+        postId: "",
+        userId: "",
+      };
+    },
+    validate(input): input is FooUsersWatchUserResponseBookmarksValue {
+      return (
+        isObject(input) &&
+        typeof input.postId === "string" &&
+        typeof input.userId === "string"
+      );
+    },
+    fromJson(input): FooUsersWatchUserResponseBookmarksValue {
+      let _postId: string;
+      if (typeof input.postId === "string") {
+        _postId = input.postId;
+      } else {
+        _postId = "";
+      }
+      let _userId: string;
+      if (typeof input.userId === "string") {
+        _userId = input.userId;
+      } else {
+        _userId = "";
+      }
+      return {
+        postId: _postId,
+        userId: _userId,
+      };
+    },
+    fromJsonString(input): FooUsersWatchUserResponseBookmarksValue {
+      return $$FooUsersWatchUserResponseBookmarksValue.fromJson(
+        JSON.parse(input),
+      );
+    },
+    toJsonString(input): string {
+      let json = "{";
+      json += '"postId":';
+      json += serializeString(input.postId);
+      json += ',"userId":';
+      json += serializeString(input.userId);
+      json += "}";
+      return json;
+    },
+    toUrlQueryString(input): string {
+      const queryParts: string[] = [];
+      queryParts.push(`postId=${input.postId}`);
+      queryParts.push(`userId=${input.userId}`);
+      return queryParts.join("&");
+    },
+  };
diff --git a/tests/server-output-test.ts b/tests/server-output-test.ts
index 60d81db3..6d4b2045 100644
--- a/tests/server-output-test.ts
+++ b/tests/server-output-test.ts
@@ -5,7 +5,7 @@ import path from 'node:path';
 import { consola } from 'consola';
 
 const getOutput = () =>
-    fs.readFileSync(path.resolve(__dirname, './clients/ts/testClient.rpc.ts'));
+    fs.readFileSync(path.resolve(__dirname, './clients/ts/testClient.g.ts'));
 
 async function main() {
     execSync(`nx build-server test-server-ts`, { stdio: 'inherit' });
diff --git a/tests/servers/ts/arri.config.ts b/tests/servers/ts/arri.config.ts
index 0d2e64c3..61f6aa05 100644
--- a/tests/servers/ts/arri.config.ts
+++ b/tests/servers/ts/arri.config.ts
@@ -19,24 +19,48 @@ export default defineConfig({
             clientName: 'TestClient',
             outputFile: path.resolve(
                 __dirname,
-                '../../clients/ts/testClient.rpc.ts',
+                '../../clients/ts/testClient.g.ts',
             ),
             prettierOptions: prettierConfig,
         }),
+        generators.typescriptClient({
+            clientName: 'TestClientPrefixed',
+            outputFile: path.resolve(
+                __dirname,
+                '../../clients/ts/tsClientPrefixed.g.ts',
+            ),
+            typePrefix: 'Foo',
+        }),
         generators.dartClient({
             clientName: 'TestClient',
             outputFile: path.resolve(
                 __dirname,
-                '../../clients/dart/lib/test_client.rpc.dart',
+                '../../clients/dart/lib/test_client.g.dart',
             ),
         }),
+        generators.dartClient({
+            clientName: 'TestClientPrefixed',
+            outputFile: path.resolve(
+                __dirname,
+                '../../clients/dart/lib/test_client_prefixed.g.dart',
+            ),
+            typePrefix: 'Foo',
+        }),
         generators.kotlinClient({
             clientName: 'TestClient',
             outputFile: path.resolve(
                 __dirname,
-                '../../clients/kotlin/src/main/kotlin/TestClient.rpc.kt',
+                '../../clients/kotlin/src/main/kotlin/TestClient.g.kt',
             ),
         }),
+        generators.kotlinClient({
+            clientName: 'TestClientPrefixed',
+            outputFile: path.resolve(
+                __dirname,
+                '../../clients/kotlin/src/main/kotlin/TestClientPrefixed.g.kt',
+            ),
+            typePrefix: 'Foo',
+        }),
         generators.rustClient({
             clientName: 'TestClient',
             outputFile: path.resolve(
@@ -44,6 +68,14 @@ export default defineConfig({
                 '../../clients/rust/src/test_client.g.rs',
             ),
         }),
+        generators.rustClient({
+            clientName: 'TestClientPrefixed',
+            outputFile: path.resolve(
+                __dirname,
+                '../../clients/rust/src/test_client_prefixed.g.rs',
+            ),
+            typePrefix: 'Foo',
+        }),
         generators.swiftClient({
             clientName: 'TestClient',
             outputFile: path.resolve(
@@ -51,5 +83,13 @@ export default defineConfig({
                 '../../clients/swift/Sources/TestClient.g.swift',
             ),
         }),
+        generators.swiftClient({
+            clientName: 'TestClientPrefixed',
+            outputFile: path.resolve(
+                __dirname,
+                '../../clients/swift/Sources/TestClientPrefixed.g.swift',
+            ),
+            typePrefix: 'Foo',
+        }),
     ],
 });