diff --git a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c
index 34dc155..b52518d 100644
--- a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c
+++ b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c
@@ -11196,6 +11196,61 @@ void cJSON_DeleteList(struct List * x) {
     }
 }
 
+struct LocalDate * cJSON_ParseLocalDate(const char * s) {
+    struct LocalDate * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetLocalDateValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct LocalDate * cJSON_GetLocalDateValue(const cJSON * j) {
+    struct LocalDate * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct LocalDate)))) {
+            memset(x, 0, sizeof(struct LocalDate));
+            if (!cJSON_HasObjectItem(j, "LocalDate")) { cJSON_DeleteLocalDate(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "LocalDate")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "LocalDate"))) { cJSON_DeleteLocalDate(x); return NULL; }
+                x->local_date = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "LocalDate"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateLocalDate(const struct LocalDate * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "LocalDate", x->local_date);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintLocalDate(const struct LocalDate * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateLocalDate(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteLocalDate(struct LocalDate * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Locale * cJSON_ParseLocale(const char * s) {
     struct Locale * x = NULL;
     if (NULL != s) {
@@ -11581,61 +11636,6 @@ void cJSON_DeleteMetadataPropertyHandling(struct MetadataPropertyHandling * x) {
     }
 }
 
-struct Mutating * cJSON_ParseMutating(const char * s) {
-    struct Mutating * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetMutatingValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Mutating * cJSON_GetMutatingValue(const cJSON * j) {
-    struct Mutating * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Mutating)))) {
-            memset(x, 0, sizeof(struct Mutating));
-            if (!cJSON_HasObjectItem(j, "mutating")) { cJSON_DeleteMutating(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "mutating")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "mutating"))) { cJSON_DeleteMutating(x); return NULL; }
-                x->mutating = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "mutating"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateMutating(const struct Mutating * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "mutating", x->mutating);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintMutating(const struct Mutating * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateMutating(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteMutating(struct Mutating * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
 struct Goto * cJSON_ParseGoto(const char * s) {
     struct Goto * x = NULL;
     if (NULL != s) {
@@ -12021,61 +12021,6 @@ void cJSON_DeleteModule(struct Module * x) {
     }
 }
 
-struct Mutable * cJSON_ParseMutable(const char * s) {
-    struct Mutable * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetMutableValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Mutable * cJSON_GetMutableValue(const cJSON * j) {
-    struct Mutable * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Mutable)))) {
-            memset(x, 0, sizeof(struct Mutable));
-            if (!cJSON_HasObjectItem(j, "mutable")) { cJSON_DeleteMutable(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "mutable")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "mutable"))) { cJSON_DeleteMutable(x); return NULL; }
-                x->mutable_mutable = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "mutable"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateMutable(const struct Mutable * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "mutable", x->mutable_mutable);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintMutable(const struct Mutable * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateMutable(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteMutable(struct Mutable * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
 struct Obj3 * cJSON_ParseObj3(const char * s) {
     struct Obj3 * x = NULL;
     if (NULL != s) {
@@ -12392,6 +12337,12 @@ struct Obj3 * cJSON_GetObj3Value(const cJSON * j) {
                 x->list = cJSON_GetListValue(cJSON_GetObjectItemCaseSensitive(j, "list"));
                 if (NULL == x->list) { cJSON_DeleteObj3(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "LocalDate")) { cJSON_DeleteObj3(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "LocalDate")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "LocalDate"))) { cJSON_DeleteObj3(x); return NULL; }
+                x->local_date = cJSON_GetLocalDateValue(cJSON_GetObjectItemCaseSensitive(j, "LocalDate"));
+                if (NULL == x->local_date) { cJSON_DeleteObj3(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "Locale")) { cJSON_DeleteObj3(x); return NULL; }
             if (cJSON_HasObjectItem(j, "Locale")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "Locale"))) { cJSON_DeleteObj3(x); return NULL; }
@@ -12434,12 +12385,6 @@ struct Obj3 * cJSON_GetObj3Value(const cJSON * j) {
                 x->metadata_property_handling = cJSON_GetMetadataPropertyHandlingValue(cJSON_GetObjectItemCaseSensitive(j, "metadata_property_handling"));
                 if (NULL == x->metadata_property_handling) { cJSON_DeleteObj3(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "mutating")) { cJSON_DeleteObj3(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "mutating")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "mutating"))) { cJSON_DeleteObj3(x); return NULL; }
-                x->mutating = cJSON_GetMutatingValue(cJSON_GetObjectItemCaseSensitive(j, "mutating"));
-                if (NULL == x->mutating) { cJSON_DeleteObj3(x); return NULL; }
-            }
             if (!cJSON_HasObjectItem(j, "goto")) { cJSON_DeleteObj3(x); return NULL; }
             if (cJSON_HasObjectItem(j, "goto")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "goto"))) { cJSON_DeleteObj3(x); return NULL; }
@@ -12482,12 +12427,6 @@ struct Obj3 * cJSON_GetObj3Value(const cJSON * j) {
                 x->obj3_module = cJSON_GetModuleValue(cJSON_GetObjectItemCaseSensitive(j, "module"));
                 if (NULL == x->obj3_module) { cJSON_DeleteObj3(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "mutable")) { cJSON_DeleteObj3(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "mutable")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "mutable"))) { cJSON_DeleteObj3(x); return NULL; }
-                x->obj3_mutable = cJSON_GetMutableValue(cJSON_GetObjectItemCaseSensitive(j, "mutable"));
-                if (NULL == x->obj3_mutable) { cJSON_DeleteObj3(x); return NULL; }
-            }
         }
     }
     return x;
@@ -12547,6 +12486,7 @@ cJSON * cJSON_CreateObj3(const struct Obj3 * x) {
             cJSON_AddItemToObject(j, "left", cJSON_CreateLeft(x->left));
             cJSON_AddItemToObject(j, "let", cJSON_CreateLet(x->let));
             cJSON_AddItemToObject(j, "list", cJSON_CreateList(x->list));
+            cJSON_AddItemToObject(j, "LocalDate", cJSON_CreateLocalDate(x->local_date));
             cJSON_AddItemToObject(j, "Locale", cJSON_CreateLocale(x->locale));
             cJSON_AddItemToObject(j, "lock", cJSON_CreateLock(x->lock));
             cJSON_AddItemToObject(j, "LongNode", cJSON_CreateLongNode(x->long_node));
@@ -12554,7 +12494,6 @@ cJSON * cJSON_CreateObj3(const struct Obj3 * x) {
             cJSON_AddItemToObject(j, "MapEntry", cJSON_CreateMapEntry(x->map_entry));
             cJSON_AddItemToObject(j, "MarshalJSON", cJSON_CreateMarshalJson(x->marshal_json));
             cJSON_AddItemToObject(j, "metadata_property_handling", cJSON_CreateMetadataPropertyHandling(x->metadata_property_handling));
-            cJSON_AddItemToObject(j, "mutating", cJSON_CreateMutating(x->mutating));
             cJSON_AddItemToObject(j, "goto", cJSON_CreateGoto(x->obj3_goto));
             cJSON_AddItemToObject(j, "if", cJSON_CreateIf(x->obj3_if));
             cJSON_AddItemToObject(j, "import", cJSON_CreateImport(x->obj3_import));
@@ -12562,7 +12501,6 @@ cJSON * cJSON_CreateObj3(const struct Obj3 * x) {
             cJSON_AddItemToObject(j, "int", cJSON_CreateInt(x->obj3_int));
             cJSON_AddItemToObject(j, "long", cJSON_CreateLong(x->obj3_long));
             cJSON_AddItemToObject(j, "module", cJSON_CreateModule(x->obj3_module));
-            cJSON_AddItemToObject(j, "mutable", cJSON_CreateMutable(x->obj3_mutable));
         }
     }
     return j;
@@ -12729,6 +12667,9 @@ void cJSON_DeleteObj3(struct Obj3 * x) {
         if (NULL != x->list) {
             cJSON_DeleteList(x->list);
         }
+        if (NULL != x->local_date) {
+            cJSON_DeleteLocalDate(x->local_date);
+        }
         if (NULL != x->locale) {
             cJSON_DeleteLocale(x->locale);
         }
@@ -12750,9 +12691,6 @@ void cJSON_DeleteObj3(struct Obj3 * x) {
         if (NULL != x->metadata_property_handling) {
             cJSON_DeleteMetadataPropertyHandling(x->metadata_property_handling);
         }
-        if (NULL != x->mutating) {
-            cJSON_DeleteMutating(x->mutating);
-        }
         if (NULL != x->obj3_goto) {
             cJSON_DeleteGoto(x->obj3_goto);
         }
@@ -12774,9 +12712,61 @@ void cJSON_DeleteObj3(struct Obj3 * x) {
         if (NULL != x->obj3_module) {
             cJSON_DeleteModule(x->obj3_module);
         }
-        if (NULL != x->obj3_mutable) {
-            cJSON_DeleteMutable(x->obj3_mutable);
+        cJSON_free(x);
+    }
+}
+
+struct Mutating * cJSON_ParseMutating(const char * s) {
+    struct Mutating * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetMutatingValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct Mutating * cJSON_GetMutatingValue(const cJSON * j) {
+    struct Mutating * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Mutating)))) {
+            memset(x, 0, sizeof(struct Mutating));
+            if (!cJSON_HasObjectItem(j, "mutating")) { cJSON_DeleteMutating(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "mutating")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "mutating"))) { cJSON_DeleteMutating(x); return NULL; }
+                x->mutating = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "mutating"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateMutating(const struct Mutating * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "mutating", x->mutating);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintMutating(const struct Mutating * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateMutating(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
         }
+    }
+    return s;
+}
+
+void cJSON_DeleteMutating(struct Mutating * x) {
+    if (NULL != x) {
         cJSON_free(x);
     }
 }
@@ -13606,47 +13596,47 @@ void cJSON_DeleteNumberClass(struct NumberClass * x) {
     }
 }
 
-struct Namespace * cJSON_ParseNamespace(const char * s) {
-    struct Namespace * x = NULL;
+struct Mutable * cJSON_ParseMutable(const char * s) {
+    struct Mutable * x = NULL;
     if (NULL != s) {
         cJSON * j = cJSON_Parse(s);
         if (NULL != j) {
-            x = cJSON_GetNamespaceValue(j);
+            x = cJSON_GetMutableValue(j);
             cJSON_Delete(j);
         }
     }
     return x;
 }
 
-struct Namespace * cJSON_GetNamespaceValue(const cJSON * j) {
-    struct Namespace * x = NULL;
+struct Mutable * cJSON_GetMutableValue(const cJSON * j) {
+    struct Mutable * x = NULL;
     if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Namespace)))) {
-            memset(x, 0, sizeof(struct Namespace));
-            if (!cJSON_HasObjectItem(j, "namespace")) { cJSON_DeleteNamespace(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "namespace")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "namespace"))) { cJSON_DeleteNamespace(x); return NULL; }
-                x->namespace_namespace = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "namespace"));
+        if (NULL != (x = cJSON_malloc(sizeof(struct Mutable)))) {
+            memset(x, 0, sizeof(struct Mutable));
+            if (!cJSON_HasObjectItem(j, "mutable")) { cJSON_DeleteMutable(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "mutable")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "mutable"))) { cJSON_DeleteMutable(x); return NULL; }
+                x->mutable_mutable = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "mutable"));
             }
         }
     }
     return x;
 }
 
-cJSON * cJSON_CreateNamespace(const struct Namespace * x) {
+cJSON * cJSON_CreateMutable(const struct Mutable * x) {
     cJSON * j = NULL;
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "namespace", x->namespace_namespace);
+            cJSON_AddNumberToObject(j, "mutable", x->mutable_mutable);
         }
     }
     return j;
 }
 
-char * cJSON_PrintNamespace(const struct Namespace * x) {
+char * cJSON_PrintMutable(const struct Mutable * x) {
     char * s = NULL;
     if (NULL != x) {
-        cJSON * j = cJSON_CreateNamespace(x);
+        cJSON * j = cJSON_CreateMutable(x);
         if (NULL != j) {
             s = cJSON_Print(j);
             cJSON_Delete(j);
@@ -13655,26 +13645,81 @@ char * cJSON_PrintNamespace(const struct Namespace * x) {
     return s;
 }
 
-void cJSON_DeleteNamespace(struct Namespace * x) {
+void cJSON_DeleteMutable(struct Mutable * x) {
     if (NULL != x) {
         cJSON_free(x);
     }
 }
 
-struct New * cJSON_ParseNew(const char * s) {
-    struct New * x = NULL;
+struct Namespace * cJSON_ParseNamespace(const char * s) {
+    struct Namespace * x = NULL;
     if (NULL != s) {
         cJSON * j = cJSON_Parse(s);
         if (NULL != j) {
-            x = cJSON_GetNewValue(j);
+            x = cJSON_GetNamespaceValue(j);
             cJSON_Delete(j);
         }
     }
     return x;
 }
 
-struct New * cJSON_GetNewValue(const cJSON * j) {
-    struct New * x = NULL;
+struct Namespace * cJSON_GetNamespaceValue(const cJSON * j) {
+    struct Namespace * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Namespace)))) {
+            memset(x, 0, sizeof(struct Namespace));
+            if (!cJSON_HasObjectItem(j, "namespace")) { cJSON_DeleteNamespace(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "namespace")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "namespace"))) { cJSON_DeleteNamespace(x); return NULL; }
+                x->namespace_namespace = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "namespace"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateNamespace(const struct Namespace * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "namespace", x->namespace_namespace);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintNamespace(const struct Namespace * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateNamespace(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteNamespace(struct Namespace * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
+struct New * cJSON_ParseNew(const char * s) {
+    struct New * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetNewValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct New * cJSON_GetNewValue(const cJSON * j) {
+    struct New * x = NULL;
     if (NULL != j) {
         if (NULL != (x = cJSON_malloc(sizeof(struct New)))) {
             memset(x, 0, sizeof(struct New));
@@ -14596,61 +14641,6 @@ void cJSON_DeleteReinterpretCast(struct ReinterpretCast * x) {
     }
 }
 
-struct Requires * cJSON_ParseRequires(const char * s) {
-    struct Requires * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetRequiresValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Requires * cJSON_GetRequiresValue(const cJSON * j) {
-    struct Requires * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Requires)))) {
-            memset(x, 0, sizeof(struct Requires));
-            if (!cJSON_HasObjectItem(j, "requires")) { cJSON_DeleteRequires(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "requires")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "requires"))) { cJSON_DeleteRequires(x); return NULL; }
-                x->requires_requires = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "requires"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateRequires(const struct Requires * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "requires", x->requires_requires);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintRequires(const struct Requires * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateRequires(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteRequires(struct Requires * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
 struct ObjectClass * cJSON_ParseObjectClass(const char * s) {
     struct ObjectClass * x = NULL;
     if (NULL != s) {
@@ -14981,6 +14971,116 @@ void cJSON_DeleteOf(struct Of * x) {
     }
 }
 
+struct OffsetDateTime * cJSON_ParseOffsetDateTime(const char * s) {
+    struct OffsetDateTime * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetOffsetDateTimeValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct OffsetDateTime * cJSON_GetOffsetDateTimeValue(const cJSON * j) {
+    struct OffsetDateTime * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct OffsetDateTime)))) {
+            memset(x, 0, sizeof(struct OffsetDateTime));
+            if (!cJSON_HasObjectItem(j, "OffsetDateTime")) { cJSON_DeleteOffsetDateTime(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "OffsetDateTime")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "OffsetDateTime"))) { cJSON_DeleteOffsetDateTime(x); return NULL; }
+                x->offset_date_time = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "OffsetDateTime"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateOffsetDateTime(const struct OffsetDateTime * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "OffsetDateTime", x->offset_date_time);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintOffsetDateTime(const struct OffsetDateTime * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateOffsetDateTime(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteOffsetDateTime(struct OffsetDateTime * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
+struct OffsetTime * cJSON_ParseOffsetTime(const char * s) {
+    struct OffsetTime * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetOffsetTimeValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct OffsetTime * cJSON_GetOffsetTimeValue(const cJSON * j) {
+    struct OffsetTime * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct OffsetTime)))) {
+            memset(x, 0, sizeof(struct OffsetTime));
+            if (!cJSON_HasObjectItem(j, "OffsetTime")) { cJSON_DeleteOffsetTime(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "OffsetTime")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "OffsetTime"))) { cJSON_DeleteOffsetTime(x); return NULL; }
+                x->offset_time = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "OffsetTime"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateOffsetTime(const struct OffsetTime * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "OffsetTime", x->offset_time);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintOffsetTime(const struct OffsetTime * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateOffsetTime(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteOffsetTime(struct OffsetTime * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Oneway * cJSON_ParseOneway(const char * s) {
     struct Oneway * x = NULL;
     if (NULL != s) {
@@ -16149,171 +16249,6 @@ void cJSON_DeleteRegExp(struct RegExp * x) {
     }
 }
 
-struct Repeat * cJSON_ParseRepeat(const char * s) {
-    struct Repeat * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetRepeatValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Repeat * cJSON_GetRepeatValue(const cJSON * j) {
-    struct Repeat * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Repeat)))) {
-            memset(x, 0, sizeof(struct Repeat));
-            if (!cJSON_HasObjectItem(j, "repeat")) { cJSON_DeleteRepeat(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "repeat")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "repeat"))) { cJSON_DeleteRepeat(x); return NULL; }
-                x->repeat = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "repeat"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateRepeat(const struct Repeat * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "repeat", x->repeat);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintRepeat(const struct Repeat * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateRepeat(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteRepeat(struct Repeat * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
-struct Require * cJSON_ParseRequire(const char * s) {
-    struct Require * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetRequireValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Require * cJSON_GetRequireValue(const cJSON * j) {
-    struct Require * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Require)))) {
-            memset(x, 0, sizeof(struct Require));
-            if (!cJSON_HasObjectItem(j, "require")) { cJSON_DeleteRequire(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "require")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "require"))) { cJSON_DeleteRequire(x); return NULL; }
-                x->require = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "require"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateRequire(const struct Require * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "require", x->require);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintRequire(const struct Require * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateRequire(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteRequire(struct Require * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
-struct Required * cJSON_ParseRequired(const char * s) {
-    struct Required * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetRequiredValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Required * cJSON_GetRequiredValue(const cJSON * j) {
-    struct Required * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Required)))) {
-            memset(x, 0, sizeof(struct Required));
-            if (!cJSON_HasObjectItem(j, "required")) { cJSON_DeleteRequired(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "required")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "required"))) { cJSON_DeleteRequired(x); return NULL; }
-                x->required = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "required"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateRequired(const struct Required * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "required", x->required);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintRequired(const struct Required * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateRequired(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteRequired(struct Required * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
 struct Obj4 * cJSON_ParseObj4(const char * s) {
     struct Obj4 * x = NULL;
     if (NULL != s) {
@@ -16336,6 +16271,12 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "dummy"))) { cJSON_DeleteObj4(x); return NULL; }
                 x->dummy = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "dummy"));
             }
+            if (!cJSON_HasObjectItem(j, "mutating")) { cJSON_DeleteObj4(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "mutating")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "mutating"))) { cJSON_DeleteObj4(x); return NULL; }
+                x->mutating = cJSON_GetMutatingValue(cJSON_GetObjectItemCaseSensitive(j, "mutating"));
+                if (NULL == x->mutating) { cJSON_DeleteObj4(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "native")) { cJSON_DeleteObj4(x); return NULL; }
             if (cJSON_HasObjectItem(j, "native")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "native"))) { cJSON_DeleteObj4(x); return NULL; }
@@ -16426,6 +16367,12 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 x->number = cJSON_GetNumberClassValue(cJSON_GetObjectItemCaseSensitive(j, "number"));
                 if (NULL == x->number) { cJSON_DeleteObj4(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "mutable")) { cJSON_DeleteObj4(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "mutable")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "mutable"))) { cJSON_DeleteObj4(x); return NULL; }
+                x->obj4_mutable = cJSON_GetMutableValue(cJSON_GetObjectItemCaseSensitive(j, "mutable"));
+                if (NULL == x->obj4_mutable) { cJSON_DeleteObj4(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "namespace")) { cJSON_DeleteObj4(x); return NULL; }
             if (cJSON_HasObjectItem(j, "namespace")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "namespace"))) { cJSON_DeleteObj4(x); return NULL; }
@@ -16534,12 +16481,6 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 x->obj4_reinterpret_cast = cJSON_GetReinterpretCastValue(cJSON_GetObjectItemCaseSensitive(j, "reinterpret_cast"));
                 if (NULL == x->obj4_reinterpret_cast) { cJSON_DeleteObj4(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "requires")) { cJSON_DeleteObj4(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "requires")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "requires"))) { cJSON_DeleteObj4(x); return NULL; }
-                x->obj4_requires = cJSON_GetRequiresValue(cJSON_GetObjectItemCaseSensitive(j, "requires"));
-                if (NULL == x->obj4_requires) { cJSON_DeleteObj4(x); return NULL; }
-            }
             if (!cJSON_HasObjectItem(j, "object")) { cJSON_DeleteObj4(x); return NULL; }
             if (cJSON_HasObjectItem(j, "object")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "object"))) { cJSON_DeleteObj4(x); return NULL; }
@@ -16576,6 +16517,18 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 x->of = cJSON_GetOfValue(cJSON_GetObjectItemCaseSensitive(j, "of"));
                 if (NULL == x->of) { cJSON_DeleteObj4(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "OffsetDateTime")) { cJSON_DeleteObj4(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "OffsetDateTime")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "OffsetDateTime"))) { cJSON_DeleteObj4(x); return NULL; }
+                x->offset_date_time = cJSON_GetOffsetDateTimeValue(cJSON_GetObjectItemCaseSensitive(j, "OffsetDateTime"));
+                if (NULL == x->offset_date_time) { cJSON_DeleteObj4(x); return NULL; }
+            }
+            if (!cJSON_HasObjectItem(j, "OffsetTime")) { cJSON_DeleteObj4(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "OffsetTime")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "OffsetTime"))) { cJSON_DeleteObj4(x); return NULL; }
+                x->offset_time = cJSON_GetOffsetTimeValue(cJSON_GetObjectItemCaseSensitive(j, "OffsetTime"));
+                if (NULL == x->offset_time) { cJSON_DeleteObj4(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "oneway")) { cJSON_DeleteObj4(x); return NULL; }
             if (cJSON_HasObjectItem(j, "oneway")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "oneway"))) { cJSON_DeleteObj4(x); return NULL; }
@@ -16702,24 +16655,6 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 x->reg_exp = cJSON_GetRegExpValue(cJSON_GetObjectItemCaseSensitive(j, "RegExp"));
                 if (NULL == x->reg_exp) { cJSON_DeleteObj4(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "repeat")) { cJSON_DeleteObj4(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "repeat")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "repeat"))) { cJSON_DeleteObj4(x); return NULL; }
-                x->repeat = cJSON_GetRepeatValue(cJSON_GetObjectItemCaseSensitive(j, "repeat"));
-                if (NULL == x->repeat) { cJSON_DeleteObj4(x); return NULL; }
-            }
-            if (!cJSON_HasObjectItem(j, "require")) { cJSON_DeleteObj4(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "require")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "require"))) { cJSON_DeleteObj4(x); return NULL; }
-                x->require = cJSON_GetRequireValue(cJSON_GetObjectItemCaseSensitive(j, "require"));
-                if (NULL == x->require) { cJSON_DeleteObj4(x); return NULL; }
-            }
-            if (!cJSON_HasObjectItem(j, "required")) { cJSON_DeleteObj4(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "required")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "required"))) { cJSON_DeleteObj4(x); return NULL; }
-                x->required = cJSON_GetRequiredValue(cJSON_GetObjectItemCaseSensitive(j, "required"));
-                if (NULL == x->required) { cJSON_DeleteObj4(x); return NULL; }
-            }
         }
     }
     return x;
@@ -16730,6 +16665,7 @@ cJSON * cJSON_CreateObj4(const struct Obj4 * x) {
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
             cJSON_AddNumberToObject(j, "dummy", x->dummy);
+            cJSON_AddItemToObject(j, "mutating", cJSON_CreateMutating(x->mutating));
             cJSON_AddItemToObject(j, "native", cJSON_CreateNative(x->native));
             cJSON_AddItemToObject(j, "newtonsoft", cJSON_CreateNewtonsoft(x->newtonsoft));
             cJSON_AddItemToObject(j, "nil", cJSON_CreateNil(x->nil));
@@ -16745,6 +16681,7 @@ cJSON * cJSON_CreateObj4(const struct Obj4 * x) {
             cJSON_AddItemToObject(j, "NULL", cJSON_CreateNullClass(x->null));
             cJSON_AddItemToObject(j, "NullNode", cJSON_CreateNullNode(x->null_node));
             cJSON_AddItemToObject(j, "number", cJSON_CreateNumberClass(x->number));
+            cJSON_AddItemToObject(j, "mutable", cJSON_CreateMutable(x->obj4_mutable));
             cJSON_AddItemToObject(j, "namespace", cJSON_CreateNamespace(x->obj4_namespace));
             cJSON_AddItemToObject(j, "new", cJSON_CreateNew(x->obj4_new));
             cJSON_AddItemToObject(j, "noexcept", cJSON_CreateNoexcept(x->obj4_noexcept));
@@ -16763,13 +16700,14 @@ cJSON * cJSON_CreateObj4(const struct Obj4 * x) {
             cJSON_AddItemToObject(j, "public", cJSON_CreatePublic(x->obj4_public));
             cJSON_AddItemToObject(j, "register", cJSON_CreateRegister(x->obj4_register));
             cJSON_AddItemToObject(j, "reinterpret_cast", cJSON_CreateReinterpretCast(x->obj4_reinterpret_cast));
-            cJSON_AddItemToObject(j, "requires", cJSON_CreateRequires(x->obj4_requires));
             cJSON_AddItemToObject(j, "object", cJSON_CreateObjectClass(x->object));
             cJSON_AddItemToObject(j, "ObjectMapper", cJSON_CreateObjectMapper(x->object_mapper));
             cJSON_AddItemToObject(j, "ObjectNode", cJSON_CreateObjectNode(x->object_node));
             cJSON_AddItemToObject(j, "ObjectReader", cJSON_CreateObjectReader(x->object_reader));
             cJSON_AddItemToObject(j, "ObjectWriter", cJSON_CreateObjectWriter(x->object_writer));
             cJSON_AddItemToObject(j, "of", cJSON_CreateOf(x->of));
+            cJSON_AddItemToObject(j, "OffsetDateTime", cJSON_CreateOffsetDateTime(x->offset_date_time));
+            cJSON_AddItemToObject(j, "OffsetTime", cJSON_CreateOffsetTime(x->offset_time));
             cJSON_AddItemToObject(j, "oneway", cJSON_CreateOneway(x->oneway));
             cJSON_AddItemToObject(j, "open", cJSON_CreateOpen(x->open));
             cJSON_AddItemToObject(j, "optional", cJSON_CreateOptional(x->optional));
@@ -16791,9 +16729,6 @@ cJSON * cJSON_CreateObj4(const struct Obj4 * x) {
             cJSON_AddItemToObject(j, "readonly", cJSON_CreateReadonly(x->readonly));
             cJSON_AddItemToObject(j, "ref", cJSON_CreateRef(x->ref));
             cJSON_AddItemToObject(j, "RegExp", cJSON_CreateRegExp(x->reg_exp));
-            cJSON_AddItemToObject(j, "repeat", cJSON_CreateRepeat(x->repeat));
-            cJSON_AddItemToObject(j, "require", cJSON_CreateRequire(x->require));
-            cJSON_AddItemToObject(j, "required", cJSON_CreateRequired(x->required));
         }
     }
     return j;
@@ -16813,6 +16748,9 @@ char * cJSON_PrintObj4(const struct Obj4 * x) {
 
 void cJSON_DeleteObj4(struct Obj4 * x) {
     if (NULL != x) {
+        if (NULL != x->mutating) {
+            cJSON_DeleteMutating(x->mutating);
+        }
         if (NULL != x->native) {
             cJSON_DeleteNative(x->native);
         }
@@ -16858,6 +16796,9 @@ void cJSON_DeleteObj4(struct Obj4 * x) {
         if (NULL != x->number) {
             cJSON_DeleteNumberClass(x->number);
         }
+        if (NULL != x->obj4_mutable) {
+            cJSON_DeleteMutable(x->obj4_mutable);
+        }
         if (NULL != x->obj4_namespace) {
             cJSON_DeleteNamespace(x->obj4_namespace);
         }
@@ -16912,9 +16853,6 @@ void cJSON_DeleteObj4(struct Obj4 * x) {
         if (NULL != x->obj4_reinterpret_cast) {
             cJSON_DeleteReinterpretCast(x->obj4_reinterpret_cast);
         }
-        if (NULL != x->obj4_requires) {
-            cJSON_DeleteRequires(x->obj4_requires);
-        }
         if (NULL != x->object) {
             cJSON_DeleteObjectClass(x->object);
         }
@@ -16933,6 +16871,12 @@ void cJSON_DeleteObj4(struct Obj4 * x) {
         if (NULL != x->of) {
             cJSON_DeleteOf(x->of);
         }
+        if (NULL != x->offset_date_time) {
+            cJSON_DeleteOffsetDateTime(x->offset_date_time);
+        }
+        if (NULL != x->offset_time) {
+            cJSON_DeleteOffsetTime(x->offset_time);
+        }
         if (NULL != x->oneway) {
             cJSON_DeleteOneway(x->oneway);
         }
@@ -16996,15 +16940,6 @@ void cJSON_DeleteObj4(struct Obj4 * x) {
         if (NULL != x->reg_exp) {
             cJSON_DeleteRegExp(x->reg_exp);
         }
-        if (NULL != x->repeat) {
-            cJSON_DeleteRepeat(x->repeat);
-        }
-        if (NULL != x->require) {
-            cJSON_DeleteRequire(x->require);
-        }
-        if (NULL != x->required) {
-            cJSON_DeleteRequired(x->required);
-        }
         cJSON_free(x);
     }
 }
@@ -17064,6 +16999,61 @@ void cJSON_DeleteKSerializer(struct KSerializer * x) {
     }
 }
 
+struct Requires * cJSON_ParseRequires(const char * s) {
+    struct Requires * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetRequiresValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct Requires * cJSON_GetRequiresValue(const cJSON * j) {
+    struct Requires * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Requires)))) {
+            memset(x, 0, sizeof(struct Requires));
+            if (!cJSON_HasObjectItem(j, "requires")) { cJSON_DeleteRequires(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "requires")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "requires"))) { cJSON_DeleteRequires(x); return NULL; }
+                x->requires_requires = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "requires"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateRequires(const struct Requires * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "requires", x->requires_requires);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintRequires(const struct Requires * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateRequires(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteRequires(struct Requires * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Restrict * cJSON_ParseRestrict(const char * s) {
     struct Restrict * x = NULL;
     if (NULL != s) {
@@ -17999,47 +17989,102 @@ void cJSON_DeleteTrueClass(struct TrueClass * x) {
     }
 }
 
-struct Try * cJSON_ParseTry(const char * s) {
-    struct Try * x = NULL;
+struct PrimitiveKind * cJSON_ParsePrimitiveKind(const char * s) {
+    struct PrimitiveKind * x = NULL;
     if (NULL != s) {
         cJSON * j = cJSON_Parse(s);
         if (NULL != j) {
-            x = cJSON_GetTryValue(j);
+            x = cJSON_GetPrimitiveKindValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct PrimitiveKind * cJSON_GetPrimitiveKindValue(const cJSON * j) {
+    struct PrimitiveKind * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct PrimitiveKind)))) {
+            memset(x, 0, sizeof(struct PrimitiveKind));
+            if (!cJSON_HasObjectItem(j, "PrimitiveKind")) { cJSON_DeletePrimitiveKind(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "PrimitiveKind")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"))) { cJSON_DeletePrimitiveKind(x); return NULL; }
+                x->primitive_kind = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreatePrimitiveKind(const struct PrimitiveKind * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "PrimitiveKind", x->primitive_kind);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintPrimitiveKind(const struct PrimitiveKind * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreatePrimitiveKind(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeletePrimitiveKind(struct PrimitiveKind * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
+struct Obj5True * cJSON_ParseObj5True(const char * s) {
+    struct Obj5True * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetObj5TrueValue(j);
             cJSON_Delete(j);
         }
     }
     return x;
 }
 
-struct Try * cJSON_GetTryValue(const cJSON * j) {
-    struct Try * x = NULL;
+struct Obj5True * cJSON_GetObj5TrueValue(const cJSON * j) {
+    struct Obj5True * x = NULL;
     if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Try)))) {
-            memset(x, 0, sizeof(struct Try));
-            if (!cJSON_HasObjectItem(j, "try")) { cJSON_DeleteTry(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "try")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "try"))) { cJSON_DeleteTry(x); return NULL; }
-                x->try_try = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "try"));
+        if (NULL != (x = cJSON_malloc(sizeof(struct Obj5True)))) {
+            memset(x, 0, sizeof(struct Obj5True));
+            if (!cJSON_HasObjectItem(j, "true")) { cJSON_DeleteObj5True(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "true")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "true"))) { cJSON_DeleteObj5True(x); return NULL; }
+                x->true_true = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "true"));
             }
         }
     }
     return x;
 }
 
-cJSON * cJSON_CreateTry(const struct Try * x) {
+cJSON * cJSON_CreateObj5True(const struct Obj5True * x) {
     cJSON * j = NULL;
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "try", x->try_try);
+            cJSON_AddNumberToObject(j, "true", x->true_true);
         }
     }
     return j;
 }
 
-char * cJSON_PrintTry(const struct Try * x) {
+char * cJSON_PrintObj5True(const struct Obj5True * x) {
     char * s = NULL;
     if (NULL != x) {
-        cJSON * j = cJSON_CreateTry(x);
+        cJSON * j = cJSON_CreateObj5True(x);
         if (NULL != j) {
             s = cJSON_Print(j);
             cJSON_Delete(j);
@@ -18048,53 +18093,53 @@ char * cJSON_PrintTry(const struct Try * x) {
     return s;
 }
 
-void cJSON_DeleteTry(struct Try * x) {
+void cJSON_DeleteObj5True(struct Obj5True * x) {
     if (NULL != x) {
         cJSON_free(x);
     }
 }
 
-struct TypeClass * cJSON_ParseTypeClass(const char * s) {
-    struct TypeClass * x = NULL;
+struct Repeat * cJSON_ParseRepeat(const char * s) {
+    struct Repeat * x = NULL;
     if (NULL != s) {
         cJSON * j = cJSON_Parse(s);
         if (NULL != j) {
-            x = cJSON_GetTypeClassValue(j);
+            x = cJSON_GetRepeatValue(j);
             cJSON_Delete(j);
         }
     }
     return x;
 }
 
-struct TypeClass * cJSON_GetTypeClassValue(const cJSON * j) {
-    struct TypeClass * x = NULL;
+struct Repeat * cJSON_GetRepeatValue(const cJSON * j) {
+    struct Repeat * x = NULL;
     if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct TypeClass)))) {
-            memset(x, 0, sizeof(struct TypeClass));
-            if (!cJSON_HasObjectItem(j, "type")) { cJSON_DeleteTypeClass(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "type")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "type"))) { cJSON_DeleteTypeClass(x); return NULL; }
-                x->type = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "type"));
+        if (NULL != (x = cJSON_malloc(sizeof(struct Repeat)))) {
+            memset(x, 0, sizeof(struct Repeat));
+            if (!cJSON_HasObjectItem(j, "repeat")) { cJSON_DeleteRepeat(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "repeat")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "repeat"))) { cJSON_DeleteRepeat(x); return NULL; }
+                x->repeat = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "repeat"));
             }
         }
     }
     return x;
 }
 
-cJSON * cJSON_CreateTypeClass(const struct TypeClass * x) {
+cJSON * cJSON_CreateRepeat(const struct Repeat * x) {
     cJSON * j = NULL;
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "type", x->type);
+            cJSON_AddNumberToObject(j, "repeat", x->repeat);
         }
     }
     return j;
 }
 
-char * cJSON_PrintTypeClass(const struct TypeClass * x) {
+char * cJSON_PrintRepeat(const struct Repeat * x) {
     char * s = NULL;
     if (NULL != x) {
-        cJSON * j = cJSON_CreateTypeClass(x);
+        cJSON * j = cJSON_CreateRepeat(x);
         if (NULL != j) {
             s = cJSON_Print(j);
             cJSON_Delete(j);
@@ -18103,53 +18148,53 @@ char * cJSON_PrintTypeClass(const struct TypeClass * x) {
     return s;
 }
 
-void cJSON_DeleteTypeClass(struct TypeClass * x) {
+void cJSON_DeleteRepeat(struct Repeat * x) {
     if (NULL != x) {
         cJSON_free(x);
     }
 }
 
-struct PrimitiveKind * cJSON_ParsePrimitiveKind(const char * s) {
-    struct PrimitiveKind * x = NULL;
+struct Require * cJSON_ParseRequire(const char * s) {
+    struct Require * x = NULL;
     if (NULL != s) {
         cJSON * j = cJSON_Parse(s);
         if (NULL != j) {
-            x = cJSON_GetPrimitiveKindValue(j);
+            x = cJSON_GetRequireValue(j);
             cJSON_Delete(j);
         }
     }
     return x;
 }
 
-struct PrimitiveKind * cJSON_GetPrimitiveKindValue(const cJSON * j) {
-    struct PrimitiveKind * x = NULL;
+struct Require * cJSON_GetRequireValue(const cJSON * j) {
+    struct Require * x = NULL;
     if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct PrimitiveKind)))) {
-            memset(x, 0, sizeof(struct PrimitiveKind));
-            if (!cJSON_HasObjectItem(j, "PrimitiveKind")) { cJSON_DeletePrimitiveKind(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "PrimitiveKind")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"))) { cJSON_DeletePrimitiveKind(x); return NULL; }
-                x->primitive_kind = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"));
+        if (NULL != (x = cJSON_malloc(sizeof(struct Require)))) {
+            memset(x, 0, sizeof(struct Require));
+            if (!cJSON_HasObjectItem(j, "require")) { cJSON_DeleteRequire(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "require")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "require"))) { cJSON_DeleteRequire(x); return NULL; }
+                x->require = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "require"));
             }
         }
     }
     return x;
 }
 
-cJSON * cJSON_CreatePrimitiveKind(const struct PrimitiveKind * x) {
+cJSON * cJSON_CreateRequire(const struct Require * x) {
     cJSON * j = NULL;
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "PrimitiveKind", x->primitive_kind);
+            cJSON_AddNumberToObject(j, "require", x->require);
         }
     }
     return j;
 }
 
-char * cJSON_PrintPrimitiveKind(const struct PrimitiveKind * x) {
+char * cJSON_PrintRequire(const struct Require * x) {
     char * s = NULL;
     if (NULL != x) {
-        cJSON * j = cJSON_CreatePrimitiveKind(x);
+        cJSON * j = cJSON_CreateRequire(x);
         if (NULL != j) {
             s = cJSON_Print(j);
             cJSON_Delete(j);
@@ -18158,53 +18203,53 @@ char * cJSON_PrintPrimitiveKind(const struct PrimitiveKind * x) {
     return s;
 }
 
-void cJSON_DeletePrimitiveKind(struct PrimitiveKind * x) {
+void cJSON_DeleteRequire(struct Require * x) {
     if (NULL != x) {
         cJSON_free(x);
     }
 }
 
-struct Obj5True * cJSON_ParseObj5True(const char * s) {
-    struct Obj5True * x = NULL;
+struct Required * cJSON_ParseRequired(const char * s) {
+    struct Required * x = NULL;
     if (NULL != s) {
         cJSON * j = cJSON_Parse(s);
         if (NULL != j) {
-            x = cJSON_GetObj5TrueValue(j);
+            x = cJSON_GetRequiredValue(j);
             cJSON_Delete(j);
         }
     }
     return x;
 }
 
-struct Obj5True * cJSON_GetObj5TrueValue(const cJSON * j) {
-    struct Obj5True * x = NULL;
+struct Required * cJSON_GetRequiredValue(const cJSON * j) {
+    struct Required * x = NULL;
     if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Obj5True)))) {
-            memset(x, 0, sizeof(struct Obj5True));
-            if (!cJSON_HasObjectItem(j, "true")) { cJSON_DeleteObj5True(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "true")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "true"))) { cJSON_DeleteObj5True(x); return NULL; }
-                x->true_true = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "true"));
+        if (NULL != (x = cJSON_malloc(sizeof(struct Required)))) {
+            memset(x, 0, sizeof(struct Required));
+            if (!cJSON_HasObjectItem(j, "required")) { cJSON_DeleteRequired(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "required")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "required"))) { cJSON_DeleteRequired(x); return NULL; }
+                x->required = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "required"));
             }
         }
     }
     return x;
 }
 
-cJSON * cJSON_CreateObj5True(const struct Obj5True * x) {
+cJSON * cJSON_CreateRequired(const struct Required * x) {
     cJSON * j = NULL;
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "true", x->true_true);
+            cJSON_AddNumberToObject(j, "required", x->required);
         }
     }
     return j;
 }
 
-char * cJSON_PrintObj5True(const struct Obj5True * x) {
+char * cJSON_PrintRequired(const struct Required * x) {
     char * s = NULL;
     if (NULL != x) {
-        cJSON * j = cJSON_CreateObj5True(x);
+        cJSON * j = cJSON_CreateRequired(x);
         if (NULL != j) {
             s = cJSON_Print(j);
             cJSON_Delete(j);
@@ -18213,7 +18258,7 @@ char * cJSON_PrintObj5True(const struct Obj5True * x) {
     return s;
 }
 
-void cJSON_DeleteObj5True(struct Obj5True * x) {
+void cJSON_DeleteRequired(struct Required * x) {
     if (NULL != x) {
         cJSON_free(x);
     }
@@ -20419,116 +20464,6 @@ void cJSON_DeleteTransient(struct Transient * x) {
     }
 }
 
-struct Type * cJSON_ParseType(const char * s) {
-    struct Type * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetTypeValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Type * cJSON_GetTypeValue(const cJSON * j) {
-    struct Type * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Type)))) {
-            memset(x, 0, sizeof(struct Type));
-            if (!cJSON_HasObjectItem(j, "Type")) { cJSON_DeleteType(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "Type")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "Type"))) { cJSON_DeleteType(x); return NULL; }
-                x->type = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "Type"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateType(const struct Type * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "Type", x->type);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintType(const struct Type * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateType(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteType(struct Type * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
-struct Typealias * cJSON_ParseTypealias(const char * s) {
-    struct Typealias * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetTypealiasValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Typealias * cJSON_GetTypealiasValue(const cJSON * j) {
-    struct Typealias * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Typealias)))) {
-            memset(x, 0, sizeof(struct Typealias));
-            if (!cJSON_HasObjectItem(j, "typealias")) { cJSON_DeleteTypealias(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "typealias")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "typealias"))) { cJSON_DeleteTypealias(x); return NULL; }
-                x->typealias = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "typealias"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateTypealias(const struct Typealias * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "typealias", x->typealias);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintTypealias(const struct Typealias * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateTypealias(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteTypealias(struct Typealias * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
 struct Obj5 * cJSON_ParseObj5(const char * s) {
     struct Obj5 * x = NULL;
     if (NULL != s) {
@@ -20557,6 +20492,12 @@ struct Obj5 * cJSON_GetObj5Value(const cJSON * j) {
                 x->k_serializer = cJSON_GetKSerializerValue(cJSON_GetObjectItemCaseSensitive(j, "KSerializer"));
                 if (NULL == x->k_serializer) { cJSON_DeleteObj5(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "requires")) { cJSON_DeleteObj5(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "requires")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "requires"))) { cJSON_DeleteObj5(x); return NULL; }
+                x->obj5_requires = cJSON_GetRequiresValue(cJSON_GetObjectItemCaseSensitive(j, "requires"));
+                if (NULL == x->obj5_requires) { cJSON_DeleteObj5(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "restrict")) { cJSON_DeleteObj5(x); return NULL; }
             if (cJSON_HasObjectItem(j, "restrict")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "restrict"))) { cJSON_DeleteObj5(x); return NULL; }
@@ -20659,18 +20600,6 @@ struct Obj5 * cJSON_GetObj5Value(const cJSON * j) {
                 x->obj5_true = cJSON_GetTrueClassValue(cJSON_GetObjectItemCaseSensitive(j, "True"));
                 if (NULL == x->obj5_true) { cJSON_DeleteObj5(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "try")) { cJSON_DeleteObj5(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "try")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "try"))) { cJSON_DeleteObj5(x); return NULL; }
-                x->obj5_try = cJSON_GetTryValue(cJSON_GetObjectItemCaseSensitive(j, "try"));
-                if (NULL == x->obj5_try) { cJSON_DeleteObj5(x); return NULL; }
-            }
-            if (!cJSON_HasObjectItem(j, "type")) { cJSON_DeleteObj5(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "type")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "type"))) { cJSON_DeleteObj5(x); return NULL; }
-                x->obj5_type = cJSON_GetTypeClassValue(cJSON_GetObjectItemCaseSensitive(j, "type"));
-                if (NULL == x->obj5_type) { cJSON_DeleteObj5(x); return NULL; }
-            }
             if (!cJSON_HasObjectItem(j, "PrimitiveKind")) { cJSON_DeleteObj5(x); return NULL; }
             if (cJSON_HasObjectItem(j, "PrimitiveKind")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"))) { cJSON_DeleteObj5(x); return NULL; }
@@ -20683,6 +20612,24 @@ struct Obj5 * cJSON_GetObj5Value(const cJSON * j) {
                 x->purple_true = cJSON_GetObj5TrueValue(cJSON_GetObjectItemCaseSensitive(j, "true"));
                 if (NULL == x->purple_true) { cJSON_DeleteObj5(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "repeat")) { cJSON_DeleteObj5(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "repeat")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "repeat"))) { cJSON_DeleteObj5(x); return NULL; }
+                x->repeat = cJSON_GetRepeatValue(cJSON_GetObjectItemCaseSensitive(j, "repeat"));
+                if (NULL == x->repeat) { cJSON_DeleteObj5(x); return NULL; }
+            }
+            if (!cJSON_HasObjectItem(j, "require")) { cJSON_DeleteObj5(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "require")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "require"))) { cJSON_DeleteObj5(x); return NULL; }
+                x->require = cJSON_GetRequireValue(cJSON_GetObjectItemCaseSensitive(j, "require"));
+                if (NULL == x->require) { cJSON_DeleteObj5(x); return NULL; }
+            }
+            if (!cJSON_HasObjectItem(j, "required")) { cJSON_DeleteObj5(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "required")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "required"))) { cJSON_DeleteObj5(x); return NULL; }
+                x->required = cJSON_GetRequiredValue(cJSON_GetObjectItemCaseSensitive(j, "required"));
+                if (NULL == x->required) { cJSON_DeleteObj5(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "retain")) { cJSON_DeleteObj5(x); return NULL; }
             if (cJSON_HasObjectItem(j, "retain")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "retain"))) { cJSON_DeleteObj5(x); return NULL; }
@@ -20923,18 +20870,6 @@ struct Obj5 * cJSON_GetObj5Value(const cJSON * j) {
                 x->transient = cJSON_GetTransientValue(cJSON_GetObjectItemCaseSensitive(j, "transient"));
                 if (NULL == x->transient) { cJSON_DeleteObj5(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "Type")) { cJSON_DeleteObj5(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "Type")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "Type"))) { cJSON_DeleteObj5(x); return NULL; }
-                x->type = cJSON_GetTypeValue(cJSON_GetObjectItemCaseSensitive(j, "Type"));
-                if (NULL == x->type) { cJSON_DeleteObj5(x); return NULL; }
-            }
-            if (!cJSON_HasObjectItem(j, "typealias")) { cJSON_DeleteObj5(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "typealias")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "typealias"))) { cJSON_DeleteObj5(x); return NULL; }
-                x->typealias = cJSON_GetTypealiasValue(cJSON_GetObjectItemCaseSensitive(j, "typealias"));
-                if (NULL == x->typealias) { cJSON_DeleteObj5(x); return NULL; }
-            }
         }
     }
     return x;
@@ -20946,6 +20881,7 @@ cJSON * cJSON_CreateObj5(const struct Obj5 * x) {
         if (NULL != (j = cJSON_CreateObject())) {
             cJSON_AddNumberToObject(j, "dummy", x->dummy);
             cJSON_AddItemToObject(j, "KSerializer", cJSON_CreateKSerializer(x->k_serializer));
+            cJSON_AddItemToObject(j, "requires", cJSON_CreateRequires(x->obj5_requires));
             cJSON_AddItemToObject(j, "restrict", cJSON_CreateRestrict(x->obj5_restrict));
             cJSON_AddItemToObject(j, "return", cJSON_CreateReturn(x->obj5_return));
             cJSON_AddItemToObject(j, "self", cJSON_CreateSelfClass(x->obj5_self));
@@ -20963,10 +20899,11 @@ cJSON * cJSON_CreateObj5(const struct Obj5 * x) {
             cJSON_AddItemToObject(j, "thread_local", cJSON_CreateThreadLocal(x->obj5_thread_local));
             cJSON_AddItemToObject(j, "throw", cJSON_CreateThrow(x->obj5_throw));
             cJSON_AddItemToObject(j, "True", cJSON_CreateTrueClass(x->obj5_true));
-            cJSON_AddItemToObject(j, "try", cJSON_CreateTry(x->obj5_try));
-            cJSON_AddItemToObject(j, "type", cJSON_CreateTypeClass(x->obj5_type));
             cJSON_AddItemToObject(j, "PrimitiveKind", cJSON_CreatePrimitiveKind(x->primitive_kind));
             cJSON_AddItemToObject(j, "true", cJSON_CreateObj5True(x->purple_true));
+            cJSON_AddItemToObject(j, "repeat", cJSON_CreateRepeat(x->repeat));
+            cJSON_AddItemToObject(j, "require", cJSON_CreateRequire(x->require));
+            cJSON_AddItemToObject(j, "required", cJSON_CreateRequired(x->required));
             cJSON_AddItemToObject(j, "retain", cJSON_CreateRetain(x->retain));
             cJSON_AddItemToObject(j, "rethrows", cJSON_CreateRethrows(x->rethrows));
             cJSON_AddItemToObject(j, "right", cJSON_CreateRight(x->right));
@@ -21007,8 +20944,6 @@ cJSON * cJSON_CreateObj5(const struct Obj5 * x) {
             cJSON_AddItemToObject(j, "toString", cJSON_CreateToString(x->to_string));
             cJSON_AddItemToObject(j, "top_level", cJSON_CreateTopLevelClass(x->top_level));
             cJSON_AddItemToObject(j, "transient", cJSON_CreateTransient(x->transient));
-            cJSON_AddItemToObject(j, "Type", cJSON_CreateType(x->type));
-            cJSON_AddItemToObject(j, "typealias", cJSON_CreateTypealias(x->typealias));
         }
     }
     return j;
@@ -21031,6 +20966,9 @@ void cJSON_DeleteObj5(struct Obj5 * x) {
         if (NULL != x->k_serializer) {
             cJSON_DeleteKSerializer(x->k_serializer);
         }
+        if (NULL != x->obj5_requires) {
+            cJSON_DeleteRequires(x->obj5_requires);
+        }
         if (NULL != x->obj5_restrict) {
             cJSON_DeleteRestrict(x->obj5_restrict);
         }
@@ -21082,18 +21020,21 @@ void cJSON_DeleteObj5(struct Obj5 * x) {
         if (NULL != x->obj5_true) {
             cJSON_DeleteTrueClass(x->obj5_true);
         }
-        if (NULL != x->obj5_try) {
-            cJSON_DeleteTry(x->obj5_try);
-        }
-        if (NULL != x->obj5_type) {
-            cJSON_DeleteTypeClass(x->obj5_type);
-        }
         if (NULL != x->primitive_kind) {
             cJSON_DeletePrimitiveKind(x->primitive_kind);
         }
         if (NULL != x->purple_true) {
             cJSON_DeleteObj5True(x->purple_true);
         }
+        if (NULL != x->repeat) {
+            cJSON_DeleteRepeat(x->repeat);
+        }
+        if (NULL != x->require) {
+            cJSON_DeleteRequire(x->require);
+        }
+        if (NULL != x->required) {
+            cJSON_DeleteRequired(x->required);
+        }
         if (NULL != x->retain) {
             cJSON_DeleteRetain(x->retain);
         }
@@ -21214,12 +21155,116 @@ void cJSON_DeleteObj5(struct Obj5 * x) {
         if (NULL != x->transient) {
             cJSON_DeleteTransient(x->transient);
         }
-        if (NULL != x->type) {
-            cJSON_DeleteType(x->type);
+        cJSON_free(x);
+    }
+}
+
+struct Try * cJSON_ParseTry(const char * s) {
+    struct Try * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetTryValue(j);
+            cJSON_Delete(j);
         }
-        if (NULL != x->typealias) {
-            cJSON_DeleteTypealias(x->typealias);
+    }
+    return x;
+}
+
+struct Try * cJSON_GetTryValue(const cJSON * j) {
+    struct Try * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Try)))) {
+            memset(x, 0, sizeof(struct Try));
+            if (!cJSON_HasObjectItem(j, "try")) { cJSON_DeleteTry(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "try")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "try"))) { cJSON_DeleteTry(x); return NULL; }
+                x->try_try = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "try"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateTry(const struct Try * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "try", x->try_try);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintTry(const struct Try * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateTry(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteTry(struct Try * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
+struct TypeClass * cJSON_ParseTypeClass(const char * s) {
+    struct TypeClass * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetTypeClassValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct TypeClass * cJSON_GetTypeClassValue(const cJSON * j) {
+    struct TypeClass * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct TypeClass)))) {
+            memset(x, 0, sizeof(struct TypeClass));
+            if (!cJSON_HasObjectItem(j, "type")) { cJSON_DeleteTypeClass(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "type")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "type"))) { cJSON_DeleteTypeClass(x); return NULL; }
+                x->type = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "type"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateTypeClass(const struct TypeClass * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "type", x->type);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintTypeClass(const struct TypeClass * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateTypeClass(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
         }
+    }
+    return s;
+}
+
+void cJSON_DeleteTypeClass(struct TypeClass * x) {
+    if (NULL != x) {
         cJSON_free(x);
     }
 }
@@ -21994,6 +22039,116 @@ void cJSON_DeleteXorEq(struct XorEq * x) {
     }
 }
 
+struct Type * cJSON_ParseType(const char * s) {
+    struct Type * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetTypeValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct Type * cJSON_GetTypeValue(const cJSON * j) {
+    struct Type * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Type)))) {
+            memset(x, 0, sizeof(struct Type));
+            if (!cJSON_HasObjectItem(j, "Type")) { cJSON_DeleteType(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "Type")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "Type"))) { cJSON_DeleteType(x); return NULL; }
+                x->type = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "Type"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateType(const struct Type * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "Type", x->type);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintType(const struct Type * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateType(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteType(struct Type * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
+struct Typealias * cJSON_ParseTypealias(const char * s) {
+    struct Typealias * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetTypealiasValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct Typealias * cJSON_GetTypealiasValue(const cJSON * j) {
+    struct Typealias * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Typealias)))) {
+            memset(x, 0, sizeof(struct Typealias));
+            if (!cJSON_HasObjectItem(j, "typealias")) { cJSON_DeleteTypealias(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "typealias")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "typealias"))) { cJSON_DeleteTypealias(x); return NULL; }
+                x->typealias = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "typealias"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateTypealias(const struct Typealias * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "typealias", x->typealias);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintTypealias(const struct Typealias * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateTypealias(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteTypealias(struct Typealias * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Uint * cJSON_ParseUint(const char * s) {
     struct Uint * x = NULL;
     if (NULL != s) {
@@ -23061,6 +23216,18 @@ struct Obj6 * cJSON_GetObj6Value(const cJSON * j) {
                 if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "dummy"))) { cJSON_DeleteObj6(x); return NULL; }
                 x->dummy = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "dummy"));
             }
+            if (!cJSON_HasObjectItem(j, "try")) { cJSON_DeleteObj6(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "try")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "try"))) { cJSON_DeleteObj6(x); return NULL; }
+                x->obj6_try = cJSON_GetTryValue(cJSON_GetObjectItemCaseSensitive(j, "try"));
+                if (NULL == x->obj6_try) { cJSON_DeleteObj6(x); return NULL; }
+            }
+            if (!cJSON_HasObjectItem(j, "type")) { cJSON_DeleteObj6(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "type")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "type"))) { cJSON_DeleteObj6(x); return NULL; }
+                x->obj6_type = cJSON_GetTypeClassValue(cJSON_GetObjectItemCaseSensitive(j, "type"));
+                if (NULL == x->obj6_type) { cJSON_DeleteObj6(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "typedef")) { cJSON_DeleteObj6(x); return NULL; }
             if (cJSON_HasObjectItem(j, "typedef")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "typedef"))) { cJSON_DeleteObj6(x); return NULL; }
@@ -23145,6 +23312,18 @@ struct Obj6 * cJSON_GetObj6Value(const cJSON * j) {
                 x->obj6_xor_eq = cJSON_GetXorEqValue(cJSON_GetObjectItemCaseSensitive(j, "xor_eq"));
                 if (NULL == x->obj6_xor_eq) { cJSON_DeleteObj6(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "Type")) { cJSON_DeleteObj6(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "Type")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "Type"))) { cJSON_DeleteObj6(x); return NULL; }
+                x->type = cJSON_GetTypeValue(cJSON_GetObjectItemCaseSensitive(j, "Type"));
+                if (NULL == x->type) { cJSON_DeleteObj6(x); return NULL; }
+            }
+            if (!cJSON_HasObjectItem(j, "typealias")) { cJSON_DeleteObj6(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "typealias")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "typealias"))) { cJSON_DeleteObj6(x); return NULL; }
+                x->typealias = cJSON_GetTypealiasValue(cJSON_GetObjectItemCaseSensitive(j, "typealias"));
+                if (NULL == x->typealias) { cJSON_DeleteObj6(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "uint")) { cJSON_DeleteObj6(x); return NULL; }
             if (cJSON_HasObjectItem(j, "uint")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "uint"))) { cJSON_DeleteObj6(x); return NULL; }
@@ -23269,6 +23448,8 @@ cJSON * cJSON_CreateObj6(const struct Obj6 * x) {
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
             cJSON_AddNumberToObject(j, "dummy", x->dummy);
+            cJSON_AddItemToObject(j, "try", cJSON_CreateTry(x->obj6_try));
+            cJSON_AddItemToObject(j, "type", cJSON_CreateTypeClass(x->obj6_type));
             cJSON_AddItemToObject(j, "typedef", cJSON_CreateTypedef(x->obj6_typedef));
             cJSON_AddItemToObject(j, "typeid", cJSON_CreateTypeid(x->obj6_typeid));
             cJSON_AddItemToObject(j, "typename", cJSON_CreateTypename(x->obj6_typename));
@@ -23283,6 +23464,8 @@ cJSON * cJSON_CreateObj6(const struct Obj6 * x) {
             cJSON_AddItemToObject(j, "while", cJSON_CreateWhile(x->obj6_while));
             cJSON_AddItemToObject(j, "xor", cJSON_CreateXor(x->obj6_xor));
             cJSON_AddItemToObject(j, "xor_eq", cJSON_CreateXorEq(x->obj6_xor_eq));
+            cJSON_AddItemToObject(j, "Type", cJSON_CreateType(x->type));
+            cJSON_AddItemToObject(j, "typealias", cJSON_CreateTypealias(x->typealias));
             cJSON_AddItemToObject(j, "uint", cJSON_CreateUint(x->uint));
             cJSON_AddItemToObject(j, "ulong", cJSON_CreateUlong(x->ulong));
             cJSON_AddItemToObject(j, "unchecked", cJSON_CreateUnchecked(x->unchecked));
@@ -23321,6 +23504,12 @@ char * cJSON_PrintObj6(const struct Obj6 * x) {
 
 void cJSON_DeleteObj6(struct Obj6 * x) {
     if (NULL != x) {
+        if (NULL != x->obj6_try) {
+            cJSON_DeleteTry(x->obj6_try);
+        }
+        if (NULL != x->obj6_type) {
+            cJSON_DeleteTypeClass(x->obj6_type);
+        }
         if (NULL != x->obj6_typedef) {
             cJSON_DeleteTypedef(x->obj6_typedef);
         }
@@ -23363,6 +23552,12 @@ void cJSON_DeleteObj6(struct Obj6 * x) {
         if (NULL != x->obj6_xor_eq) {
             cJSON_DeleteXorEq(x->obj6_xor_eq);
         }
+        if (NULL != x->type) {
+            cJSON_DeleteType(x->type);
+        }
+        if (NULL != x->typealias) {
+            cJSON_DeleteTypealias(x->typealias);
+        }
         if (NULL != x->uint) {
             cJSON_DeleteUint(x->uint);
         }
diff --git a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h
index 82ac36b..a60cd02 100644
--- a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h
+++ b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h
@@ -897,6 +897,10 @@ struct List {
     int64_t list;
 };
 
+struct LocalDate {
+    int64_t local_date;
+};
+
 struct Locale {
     int64_t locale;
 };
@@ -925,10 +929,6 @@ struct MetadataPropertyHandling {
     int64_t metadata_property_handling;
 };
 
-struct Mutating {
-    int64_t mutating;
-};
-
 struct Goto {
     int64_t goto_goto;
 };
@@ -957,10 +957,6 @@ struct Module {
     int64_t module_module;
 };
 
-struct Mutable {
-    int64_t mutable_mutable;
-};
-
 struct Obj3 {
     int64_t dummy;
     struct Function * function;
@@ -1012,6 +1008,7 @@ struct Obj3 {
     struct Left * left;
     struct Let * let;
     struct List * list;
+    struct LocalDate * local_date;
     struct Locale * locale;
     struct Lock * lock;
     struct LongNode * long_node;
@@ -1019,7 +1016,6 @@ struct Obj3 {
     struct MapEntry * map_entry;
     struct MarshalJson * marshal_json;
     struct MetadataPropertyHandling * metadata_property_handling;
-    struct Mutating * mutating;
     struct Goto * obj3_goto;
     struct If * obj3_if;
     struct Import * obj3_import;
@@ -1027,7 +1023,10 @@ struct Obj3 {
     struct Int * obj3_int;
     struct Long * obj3_long;
     struct Module * obj3_module;
-    struct Mutable * obj3_mutable;
+};
+
+struct Mutating {
+    int64_t mutating;
 };
 
 struct Native {
@@ -1090,6 +1089,10 @@ struct NumberClass {
     int64_t number;
 };
 
+struct Mutable {
+    int64_t mutable_mutable;
+};
+
 struct Namespace {
     int64_t namespace_namespace;
 };
@@ -1162,10 +1165,6 @@ struct ReinterpretCast {
     int64_t reinterpret_cast_reinterpret_cast;
 };
 
-struct Requires {
-    int64_t requires_requires;
-};
-
 struct ObjectClass {
     int64_t object;
 };
@@ -1190,6 +1189,14 @@ struct Of {
     int64_t of;
 };
 
+struct OffsetDateTime {
+    int64_t offset_date_time;
+};
+
+struct OffsetTime {
+    int64_t offset_time;
+};
+
 struct Oneway {
     int64_t oneway;
 };
@@ -1274,20 +1281,9 @@ struct RegExp {
     char * reg_exp;
 };
 
-struct Repeat {
-    int64_t repeat;
-};
-
-struct Require {
-    int64_t require;
-};
-
-struct Required {
-    int64_t required;
-};
-
 struct Obj4 {
     int64_t dummy;
+    struct Mutating * mutating;
     struct Native * native;
     struct Newtonsoft * newtonsoft;
     struct Nil * nil;
@@ -1303,6 +1299,7 @@ struct Obj4 {
     struct NullClass * null;
     struct NullNode * null_node;
     struct NumberClass * number;
+    struct Mutable * obj4_mutable;
     struct Namespace * obj4_namespace;
     struct New * obj4_new;
     struct Noexcept * obj4_noexcept;
@@ -1321,13 +1318,14 @@ struct Obj4 {
     struct Public * obj4_public;
     struct Register * obj4_register;
     struct ReinterpretCast * obj4_reinterpret_cast;
-    struct Requires * obj4_requires;
     struct ObjectClass * object;
     struct ObjectMapper * object_mapper;
     struct ObjectNode * object_node;
     struct ObjectReader * object_reader;
     struct ObjectWriter * object_writer;
     struct Of * of;
+    struct OffsetDateTime * offset_date_time;
+    struct OffsetTime * offset_time;
     struct Oneway * oneway;
     struct Open * open;
     struct Optional * optional;
@@ -1349,15 +1347,16 @@ struct Obj4 {
     struct Readonly * readonly;
     struct Ref * ref;
     struct RegExp * reg_exp;
-    struct Repeat * repeat;
-    struct Require * require;
-    struct Required * required;
 };
 
 struct KSerializer {
     int64_t k_serializer;
 };
 
+struct Requires {
+    int64_t requires_requires;
+};
+
 struct Restrict {
     int64_t restrict_restrict;
 };
@@ -1426,14 +1425,6 @@ struct TrueClass {
     int64_t true_true;
 };
 
-struct Try {
-    int64_t try_try;
-};
-
-struct TypeClass {
-    int64_t type;
-};
-
 struct PrimitiveKind {
     int64_t primitive_kind;
 };
@@ -1442,6 +1433,18 @@ struct Obj5True {
     int64_t true_true;
 };
 
+struct Repeat {
+    int64_t repeat;
+};
+
+struct Require {
+    int64_t require;
+};
+
+struct Required {
+    int64_t required;
+};
+
 struct Retain {
     int64_t retain;
 };
@@ -1602,17 +1605,10 @@ struct Transient {
     int64_t transient;
 };
 
-struct Type {
-    int64_t type;
-};
-
-struct Typealias {
-    int64_t typealias;
-};
-
 struct Obj5 {
     int64_t dummy;
     struct KSerializer * k_serializer;
+    struct Requires * obj5_requires;
     struct Restrict * obj5_restrict;
     struct Return * obj5_return;
     struct SelfClass * obj5_self;
@@ -1630,10 +1626,11 @@ struct Obj5 {
     struct ThreadLocal * obj5_thread_local;
     struct Throw * obj5_throw;
     struct TrueClass * obj5_true;
-    struct Try * obj5_try;
-    struct TypeClass * obj5_type;
     struct PrimitiveKind * primitive_kind;
     struct Obj5True * purple_true;
+    struct Repeat * repeat;
+    struct Require * require;
+    struct Required * required;
     struct Retain * retain;
     struct Rethrows * rethrows;
     struct Right * right;
@@ -1674,8 +1671,14 @@ struct Obj5 {
     struct ToString * to_string;
     struct TopLevelClass * top_level;
     struct Transient * transient;
-    struct Type * type;
-    struct Typealias * typealias;
+};
+
+struct Try {
+    int64_t try_try;
+};
+
+struct TypeClass {
+    int64_t type;
 };
 
 struct Typedef {
@@ -1734,6 +1737,14 @@ struct XorEq {
     int64_t xor_eq_xor_eq;
 };
 
+struct Type {
+    int64_t type;
+};
+
+struct Typealias {
+    int64_t typealias;
+};
+
 struct Uint {
     int64_t uint;
 };
@@ -1812,6 +1823,8 @@ struct Yield {
 
 struct Obj6 {
     int64_t dummy;
+    struct Try * obj6_try;
+    struct TypeClass * obj6_type;
     struct Typedef * obj6_typedef;
     struct Typeid * obj6_typeid;
     struct Typename * obj6_typename;
@@ -1826,6 +1839,8 @@ struct Obj6 {
     struct While * obj6_while;
     struct Xor * obj6_xor;
     struct XorEq * obj6_xor_eq;
+    struct Type * type;
+    struct Typealias * typealias;
     struct Uint * uint;
     struct Ulong * ulong;
     struct Unchecked * unchecked;
@@ -2934,6 +2949,12 @@ cJSON * cJSON_CreateList(const struct List * x);
 char * cJSON_PrintList(const struct List * x);
 void cJSON_DeleteList(struct List * x);
 
+struct LocalDate * cJSON_ParseLocalDate(const char * s);
+struct LocalDate * cJSON_GetLocalDateValue(const cJSON * j);
+cJSON * cJSON_CreateLocalDate(const struct LocalDate * x);
+char * cJSON_PrintLocalDate(const struct LocalDate * x);
+void cJSON_DeleteLocalDate(struct LocalDate * x);
+
 struct Locale * cJSON_ParseLocale(const char * s);
 struct Locale * cJSON_GetLocaleValue(const cJSON * j);
 cJSON * cJSON_CreateLocale(const struct Locale * x);
@@ -2976,12 +2997,6 @@ cJSON * cJSON_CreateMetadataPropertyHandling(const struct MetadataPropertyHandli
 char * cJSON_PrintMetadataPropertyHandling(const struct MetadataPropertyHandling * x);
 void cJSON_DeleteMetadataPropertyHandling(struct MetadataPropertyHandling * x);
 
-struct Mutating * cJSON_ParseMutating(const char * s);
-struct Mutating * cJSON_GetMutatingValue(const cJSON * j);
-cJSON * cJSON_CreateMutating(const struct Mutating * x);
-char * cJSON_PrintMutating(const struct Mutating * x);
-void cJSON_DeleteMutating(struct Mutating * x);
-
 struct Goto * cJSON_ParseGoto(const char * s);
 struct Goto * cJSON_GetGotoValue(const cJSON * j);
 cJSON * cJSON_CreateGoto(const struct Goto * x);
@@ -3024,18 +3039,18 @@ cJSON * cJSON_CreateModule(const struct Module * x);
 char * cJSON_PrintModule(const struct Module * x);
 void cJSON_DeleteModule(struct Module * x);
 
-struct Mutable * cJSON_ParseMutable(const char * s);
-struct Mutable * cJSON_GetMutableValue(const cJSON * j);
-cJSON * cJSON_CreateMutable(const struct Mutable * x);
-char * cJSON_PrintMutable(const struct Mutable * x);
-void cJSON_DeleteMutable(struct Mutable * x);
-
 struct Obj3 * cJSON_ParseObj3(const char * s);
 struct Obj3 * cJSON_GetObj3Value(const cJSON * j);
 cJSON * cJSON_CreateObj3(const struct Obj3 * x);
 char * cJSON_PrintObj3(const struct Obj3 * x);
 void cJSON_DeleteObj3(struct Obj3 * x);
 
+struct Mutating * cJSON_ParseMutating(const char * s);
+struct Mutating * cJSON_GetMutatingValue(const cJSON * j);
+cJSON * cJSON_CreateMutating(const struct Mutating * x);
+char * cJSON_PrintMutating(const struct Mutating * x);
+void cJSON_DeleteMutating(struct Mutating * x);
+
 struct Native * cJSON_ParseNative(const char * s);
 struct Native * cJSON_GetNativeValue(const cJSON * j);
 cJSON * cJSON_CreateNative(const struct Native * x);
@@ -3126,6 +3141,12 @@ cJSON * cJSON_CreateNumberClass(const struct NumberClass * x);
 char * cJSON_PrintNumberClass(const struct NumberClass * x);
 void cJSON_DeleteNumberClass(struct NumberClass * x);
 
+struct Mutable * cJSON_ParseMutable(const char * s);
+struct Mutable * cJSON_GetMutableValue(const cJSON * j);
+cJSON * cJSON_CreateMutable(const struct Mutable * x);
+char * cJSON_PrintMutable(const struct Mutable * x);
+void cJSON_DeleteMutable(struct Mutable * x);
+
 struct Namespace * cJSON_ParseNamespace(const char * s);
 struct Namespace * cJSON_GetNamespaceValue(const cJSON * j);
 cJSON * cJSON_CreateNamespace(const struct Namespace * x);
@@ -3234,12 +3255,6 @@ cJSON * cJSON_CreateReinterpretCast(const struct ReinterpretCast * x);
 char * cJSON_PrintReinterpretCast(const struct ReinterpretCast * x);
 void cJSON_DeleteReinterpretCast(struct ReinterpretCast * x);
 
-struct Requires * cJSON_ParseRequires(const char * s);
-struct Requires * cJSON_GetRequiresValue(const cJSON * j);
-cJSON * cJSON_CreateRequires(const struct Requires * x);
-char * cJSON_PrintRequires(const struct Requires * x);
-void cJSON_DeleteRequires(struct Requires * x);
-
 struct ObjectClass * cJSON_ParseObjectClass(const char * s);
 struct ObjectClass * cJSON_GetObjectClassValue(const cJSON * j);
 cJSON * cJSON_CreateObjectClass(const struct ObjectClass * x);
@@ -3276,6 +3291,18 @@ cJSON * cJSON_CreateOf(const struct Of * x);
 char * cJSON_PrintOf(const struct Of * x);
 void cJSON_DeleteOf(struct Of * x);
 
+struct OffsetDateTime * cJSON_ParseOffsetDateTime(const char * s);
+struct OffsetDateTime * cJSON_GetOffsetDateTimeValue(const cJSON * j);
+cJSON * cJSON_CreateOffsetDateTime(const struct OffsetDateTime * x);
+char * cJSON_PrintOffsetDateTime(const struct OffsetDateTime * x);
+void cJSON_DeleteOffsetDateTime(struct OffsetDateTime * x);
+
+struct OffsetTime * cJSON_ParseOffsetTime(const char * s);
+struct OffsetTime * cJSON_GetOffsetTimeValue(const cJSON * j);
+cJSON * cJSON_CreateOffsetTime(const struct OffsetTime * x);
+char * cJSON_PrintOffsetTime(const struct OffsetTime * x);
+void cJSON_DeleteOffsetTime(struct OffsetTime * x);
+
 struct Oneway * cJSON_ParseOneway(const char * s);
 struct Oneway * cJSON_GetOnewayValue(const cJSON * j);
 cJSON * cJSON_CreateOneway(const struct Oneway * x);
@@ -3402,24 +3429,6 @@ cJSON * cJSON_CreateRegExp(const struct RegExp * x);
 char * cJSON_PrintRegExp(const struct RegExp * x);
 void cJSON_DeleteRegExp(struct RegExp * x);
 
-struct Repeat * cJSON_ParseRepeat(const char * s);
-struct Repeat * cJSON_GetRepeatValue(const cJSON * j);
-cJSON * cJSON_CreateRepeat(const struct Repeat * x);
-char * cJSON_PrintRepeat(const struct Repeat * x);
-void cJSON_DeleteRepeat(struct Repeat * x);
-
-struct Require * cJSON_ParseRequire(const char * s);
-struct Require * cJSON_GetRequireValue(const cJSON * j);
-cJSON * cJSON_CreateRequire(const struct Require * x);
-char * cJSON_PrintRequire(const struct Require * x);
-void cJSON_DeleteRequire(struct Require * x);
-
-struct Required * cJSON_ParseRequired(const char * s);
-struct Required * cJSON_GetRequiredValue(const cJSON * j);
-cJSON * cJSON_CreateRequired(const struct Required * x);
-char * cJSON_PrintRequired(const struct Required * x);
-void cJSON_DeleteRequired(struct Required * x);
-
 struct Obj4 * cJSON_ParseObj4(const char * s);
 struct Obj4 * cJSON_GetObj4Value(const cJSON * j);
 cJSON * cJSON_CreateObj4(const struct Obj4 * x);
@@ -3432,6 +3441,12 @@ cJSON * cJSON_CreateKSerializer(const struct KSerializer * x);
 char * cJSON_PrintKSerializer(const struct KSerializer * x);
 void cJSON_DeleteKSerializer(struct KSerializer * x);
 
+struct Requires * cJSON_ParseRequires(const char * s);
+struct Requires * cJSON_GetRequiresValue(const cJSON * j);
+cJSON * cJSON_CreateRequires(const struct Requires * x);
+char * cJSON_PrintRequires(const struct Requires * x);
+void cJSON_DeleteRequires(struct Requires * x);
+
 struct Restrict * cJSON_ParseRestrict(const char * s);
 struct Restrict * cJSON_GetRestrictValue(const cJSON * j);
 cJSON * cJSON_CreateRestrict(const struct Restrict * x);
@@ -3534,18 +3549,6 @@ cJSON * cJSON_CreateTrueClass(const struct TrueClass * x);
 char * cJSON_PrintTrueClass(const struct TrueClass * x);
 void cJSON_DeleteTrueClass(struct TrueClass * x);
 
-struct Try * cJSON_ParseTry(const char * s);
-struct Try * cJSON_GetTryValue(const cJSON * j);
-cJSON * cJSON_CreateTry(const struct Try * x);
-char * cJSON_PrintTry(const struct Try * x);
-void cJSON_DeleteTry(struct Try * x);
-
-struct TypeClass * cJSON_ParseTypeClass(const char * s);
-struct TypeClass * cJSON_GetTypeClassValue(const cJSON * j);
-cJSON * cJSON_CreateTypeClass(const struct TypeClass * x);
-char * cJSON_PrintTypeClass(const struct TypeClass * x);
-void cJSON_DeleteTypeClass(struct TypeClass * x);
-
 struct PrimitiveKind * cJSON_ParsePrimitiveKind(const char * s);
 struct PrimitiveKind * cJSON_GetPrimitiveKindValue(const cJSON * j);
 cJSON * cJSON_CreatePrimitiveKind(const struct PrimitiveKind * x);
@@ -3558,6 +3561,24 @@ cJSON * cJSON_CreateObj5True(const struct Obj5True * x);
 char * cJSON_PrintObj5True(const struct Obj5True * x);
 void cJSON_DeleteObj5True(struct Obj5True * x);
 
+struct Repeat * cJSON_ParseRepeat(const char * s);
+struct Repeat * cJSON_GetRepeatValue(const cJSON * j);
+cJSON * cJSON_CreateRepeat(const struct Repeat * x);
+char * cJSON_PrintRepeat(const struct Repeat * x);
+void cJSON_DeleteRepeat(struct Repeat * x);
+
+struct Require * cJSON_ParseRequire(const char * s);
+struct Require * cJSON_GetRequireValue(const cJSON * j);
+cJSON * cJSON_CreateRequire(const struct Require * x);
+char * cJSON_PrintRequire(const struct Require * x);
+void cJSON_DeleteRequire(struct Require * x);
+
+struct Required * cJSON_ParseRequired(const char * s);
+struct Required * cJSON_GetRequiredValue(const cJSON * j);
+cJSON * cJSON_CreateRequired(const struct Required * x);
+char * cJSON_PrintRequired(const struct Required * x);
+void cJSON_DeleteRequired(struct Required * x);
+
 struct Retain * cJSON_ParseRetain(const char * s);
 struct Retain * cJSON_GetRetainValue(const cJSON * j);
 cJSON * cJSON_CreateRetain(const struct Retain * x);
@@ -3798,24 +3819,24 @@ cJSON * cJSON_CreateTransient(const struct Transient * x);
 char * cJSON_PrintTransient(const struct Transient * x);
 void cJSON_DeleteTransient(struct Transient * x);
 
-struct Type * cJSON_ParseType(const char * s);
-struct Type * cJSON_GetTypeValue(const cJSON * j);
-cJSON * cJSON_CreateType(const struct Type * x);
-char * cJSON_PrintType(const struct Type * x);
-void cJSON_DeleteType(struct Type * x);
-
-struct Typealias * cJSON_ParseTypealias(const char * s);
-struct Typealias * cJSON_GetTypealiasValue(const cJSON * j);
-cJSON * cJSON_CreateTypealias(const struct Typealias * x);
-char * cJSON_PrintTypealias(const struct Typealias * x);
-void cJSON_DeleteTypealias(struct Typealias * x);
-
 struct Obj5 * cJSON_ParseObj5(const char * s);
 struct Obj5 * cJSON_GetObj5Value(const cJSON * j);
 cJSON * cJSON_CreateObj5(const struct Obj5 * x);
 char * cJSON_PrintObj5(const struct Obj5 * x);
 void cJSON_DeleteObj5(struct Obj5 * x);
 
+struct Try * cJSON_ParseTry(const char * s);
+struct Try * cJSON_GetTryValue(const cJSON * j);
+cJSON * cJSON_CreateTry(const struct Try * x);
+char * cJSON_PrintTry(const struct Try * x);
+void cJSON_DeleteTry(struct Try * x);
+
+struct TypeClass * cJSON_ParseTypeClass(const char * s);
+struct TypeClass * cJSON_GetTypeClassValue(const cJSON * j);
+cJSON * cJSON_CreateTypeClass(const struct TypeClass * x);
+char * cJSON_PrintTypeClass(const struct TypeClass * x);
+void cJSON_DeleteTypeClass(struct TypeClass * x);
+
 struct Typedef * cJSON_ParseTypedef(const char * s);
 struct Typedef * cJSON_GetTypedefValue(const cJSON * j);
 cJSON * cJSON_CreateTypedef(const struct Typedef * x);
@@ -3900,6 +3921,18 @@ cJSON * cJSON_CreateXorEq(const struct XorEq * x);
 char * cJSON_PrintXorEq(const struct XorEq * x);
 void cJSON_DeleteXorEq(struct XorEq * x);
 
+struct Type * cJSON_ParseType(const char * s);
+struct Type * cJSON_GetTypeValue(const cJSON * j);
+cJSON * cJSON_CreateType(const struct Type * x);
+char * cJSON_PrintType(const struct Type * x);
+void cJSON_DeleteType(struct Type * x);
+
+struct Typealias * cJSON_ParseTypealias(const char * s);
+struct Typealias * cJSON_GetTypealiasValue(const cJSON * j);
+cJSON * cJSON_CreateTypealias(const struct Typealias * x);
+char * cJSON_PrintTypealias(const struct Typealias * x);
+void cJSON_DeleteTypealias(struct Typealias * x);
+
 struct Uint * cJSON_ParseUint(const char * s);
 struct Uint * cJSON_GetUintValue(const cJSON * j);
 cJSON * cJSON_CreateUint(const struct Uint * x);
diff --git a/base/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp b/head/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp
index 6a05285..3b778ee 100644
--- a/base/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp
+++ b/head/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp
@@ -3179,6 +3179,20 @@ namespace quicktype {
         void set_list(const int64_t & value) { this->list = value; }
     };
 
+    class LocalDate {
+        public:
+        LocalDate() = default;
+        virtual ~LocalDate() = default;
+
+        private:
+        int64_t local_date;
+
+        public:
+        const int64_t & get_local_date() const { return local_date; }
+        int64_t & get_mutable_local_date() { return local_date; }
+        void set_local_date(const int64_t & value) { this->local_date = value; }
+    };
+
     class Locale {
         public:
         Locale() = default;
@@ -3277,20 +3291,6 @@ namespace quicktype {
         void set_metadata_property_handling(const int64_t & value) { this->metadata_property_handling = value; }
     };
 
-    class Mutating {
-        public:
-        Mutating() = default;
-        virtual ~Mutating() = default;
-
-        private:
-        int64_t mutating;
-
-        public:
-        const int64_t & get_mutating() const { return mutating; }
-        int64_t & get_mutable_mutating() { return mutating; }
-        void set_mutating(const int64_t & value) { this->mutating = value; }
-    };
-
     class Goto {
         public:
         Goto() = default;
@@ -3389,20 +3389,6 @@ namespace quicktype {
         void set_module_module(const int64_t & value) { this->module_module = value; }
     };
 
-    class Mutable {
-        public:
-        Mutable() = default;
-        virtual ~Mutable() = default;
-
-        private:
-        int64_t mutable_mutable;
-
-        public:
-        const int64_t & get_mutable_mutable() const { return mutable_mutable; }
-        int64_t & get_mutable_mutable_mutable() { return mutable_mutable; }
-        void set_mutable_mutable(const int64_t & value) { this->mutable_mutable = value; }
-    };
-
     class Obj3 {
         public:
         Obj3() = default;
@@ -3459,6 +3445,7 @@ namespace quicktype {
         Left left;
         Let let;
         List list;
+        LocalDate local_date;
         Locale locale;
         Lock lock;
         LongNode long_node;
@@ -3466,7 +3453,6 @@ namespace quicktype {
         MapEntry map_entry;
         MarshalJson marshal_json;
         MetadataPropertyHandling metadata_property_handling;
-        Mutating mutating;
         Goto obj3_goto;
         If obj3_if;
         Import obj3_import;
@@ -3474,7 +3460,6 @@ namespace quicktype {
         Int obj3_int;
         Long obj3_long;
         Module obj3_module;
-        Mutable obj3_mutable;
 
         public:
         const int64_t & get_dummy() const { return dummy; }
@@ -3677,6 +3662,10 @@ namespace quicktype {
         List & get_mutable_list() { return list; }
         void set_list(const List & value) { this->list = value; }
 
+        const LocalDate & get_local_date() const { return local_date; }
+        LocalDate & get_mutable_local_date() { return local_date; }
+        void set_local_date(const LocalDate & value) { this->local_date = value; }
+
         const Locale & get_locale() const { return locale; }
         Locale & get_mutable_locale() { return locale; }
         void set_locale(const Locale & value) { this->locale = value; }
@@ -3705,10 +3694,6 @@ namespace quicktype {
         MetadataPropertyHandling & get_mutable_metadata_property_handling() { return metadata_property_handling; }
         void set_metadata_property_handling(const MetadataPropertyHandling & value) { this->metadata_property_handling = value; }
 
-        const Mutating & get_mutating() const { return mutating; }
-        Mutating & get_mutable_mutating() { return mutating; }
-        void set_mutating(const Mutating & value) { this->mutating = value; }
-
         const Goto & get_obj3_goto() const { return obj3_goto; }
         Goto & get_mutable_obj3_goto() { return obj3_goto; }
         void set_obj3_goto(const Goto & value) { this->obj3_goto = value; }
@@ -3736,10 +3721,20 @@ namespace quicktype {
         const Module & get_obj3_module() const { return obj3_module; }
         Module & get_mutable_obj3_module() { return obj3_module; }
         void set_obj3_module(const Module & value) { this->obj3_module = value; }
+    };
+
+    class Mutating {
+        public:
+        Mutating() = default;
+        virtual ~Mutating() = default;
+
+        private:
+        int64_t mutating;
 
-        const Mutable & get_obj3_mutable() const { return obj3_mutable; }
-        Mutable & get_mutable_obj3_mutable() { return obj3_mutable; }
-        void set_obj3_mutable(const Mutable & value) { this->obj3_mutable = value; }
+        public:
+        const int64_t & get_mutating() const { return mutating; }
+        int64_t & get_mutable_mutating() { return mutating; }
+        void set_mutating(const int64_t & value) { this->mutating = value; }
     };
 
     class Native {
@@ -3952,6 +3947,20 @@ namespace quicktype {
         void set_number(const int64_t & value) { this->number = value; }
     };
 
+    class Mutable {
+        public:
+        Mutable() = default;
+        virtual ~Mutable() = default;
+
+        private:
+        int64_t mutable_mutable;
+
+        public:
+        const int64_t & get_mutable_mutable() const { return mutable_mutable; }
+        int64_t & get_mutable_mutable_mutable() { return mutable_mutable; }
+        void set_mutable_mutable(const int64_t & value) { this->mutable_mutable = value; }
+    };
+
     class Namespace {
         public:
         Namespace() = default;
@@ -4204,20 +4213,6 @@ namespace quicktype {
         void set_reinterpret_cast_reinterpret_cast(const int64_t & value) { this->reinterpret_cast_reinterpret_cast = value; }
     };
 
-    class Requires {
-        public:
-        Requires() = default;
-        virtual ~Requires() = default;
-
-        private:
-        int64_t requires_requires;
-
-        public:
-        const int64_t & get_requires_requires() const { return requires_requires; }
-        int64_t & get_mutable_requires_requires() { return requires_requires; }
-        void set_requires_requires(const int64_t & value) { this->requires_requires = value; }
-    };
-
     class Object {
         public:
         Object() = default;
@@ -4302,6 +4297,34 @@ namespace quicktype {
         void set_of(const int64_t & value) { this->of = value; }
     };
 
+    class OffsetDateTime {
+        public:
+        OffsetDateTime() = default;
+        virtual ~OffsetDateTime() = default;
+
+        private:
+        int64_t offset_date_time;
+
+        public:
+        const int64_t & get_offset_date_time() const { return offset_date_time; }
+        int64_t & get_mutable_offset_date_time() { return offset_date_time; }
+        void set_offset_date_time(const int64_t & value) { this->offset_date_time = value; }
+    };
+
+    class OffsetTime {
+        public:
+        OffsetTime() = default;
+        virtual ~OffsetTime() = default;
+
+        private:
+        int64_t offset_time;
+
+        public:
+        const int64_t & get_offset_time() const { return offset_time; }
+        int64_t & get_mutable_offset_time() { return offset_time; }
+        void set_offset_time(const int64_t & value) { this->offset_time = value; }
+    };
+
     class Oneway {
         public:
         Oneway() = default;
@@ -4596,48 +4619,6 @@ namespace quicktype {
         void set_reg_exp(const std::string & value) { this->reg_exp = value; }
     };
 
-    class Repeat {
-        public:
-        Repeat() = default;
-        virtual ~Repeat() = default;
-
-        private:
-        int64_t repeat;
-
-        public:
-        const int64_t & get_repeat() const { return repeat; }
-        int64_t & get_mutable_repeat() { return repeat; }
-        void set_repeat(const int64_t & value) { this->repeat = value; }
-    };
-
-    class Require {
-        public:
-        Require() = default;
-        virtual ~Require() = default;
-
-        private:
-        int64_t require;
-
-        public:
-        const int64_t & get_require() const { return require; }
-        int64_t & get_mutable_require() { return require; }
-        void set_require(const int64_t & value) { this->require = value; }
-    };
-
-    class Required {
-        public:
-        Required() = default;
-        virtual ~Required() = default;
-
-        private:
-        int64_t required;
-
-        public:
-        const int64_t & get_required() const { return required; }
-        int64_t & get_mutable_required() { return required; }
-        void set_required(const int64_t & value) { this->required = value; }
-    };
-
     class Obj4 {
         public:
         Obj4() = default;
@@ -4645,6 +4626,7 @@ namespace quicktype {
 
         private:
         int64_t dummy;
+        Mutating mutating;
         Native native;
         Newtonsoft newtonsoft;
         Nil nil;
@@ -4660,6 +4642,7 @@ namespace quicktype {
         Null null;
         NullNode null_node;
         Number number;
+        Mutable obj4_mutable;
         Namespace obj4_namespace;
         New obj4_new;
         Noexcept obj4_noexcept;
@@ -4678,13 +4661,14 @@ namespace quicktype {
         Public obj4_public;
         Register obj4_register;
         ReinterpretCast obj4_reinterpret_cast;
-        Requires obj4_requires;
         Object object;
         ObjectMapper object_mapper;
         ObjectNode object_node;
         ObjectReader object_reader;
         ObjectWriter object_writer;
         Of of;
+        OffsetDateTime offset_date_time;
+        OffsetTime offset_time;
         Oneway oneway;
         Open open;
         Optional optional;
@@ -4706,15 +4690,16 @@ namespace quicktype {
         Readonly readonly;
         Ref ref;
         RegExp reg_exp;
-        Repeat repeat;
-        Require require;
-        Required required;
 
         public:
         const int64_t & get_dummy() const { return dummy; }
         int64_t & get_mutable_dummy() { return dummy; }
         void set_dummy(const int64_t & value) { this->dummy = value; }
 
+        const Mutating & get_mutating() const { return mutating; }
+        Mutating & get_mutable_mutating() { return mutating; }
+        void set_mutating(const Mutating & value) { this->mutating = value; }
+
         const Native & get_native() const { return native; }
         Native & get_mutable_native() { return native; }
         void set_native(const Native & value) { this->native = value; }
@@ -4775,6 +4760,10 @@ namespace quicktype {
         Number & get_mutable_number() { return number; }
         void set_number(const Number & value) { this->number = value; }
 
+        const Mutable & get_obj4_mutable() const { return obj4_mutable; }
+        Mutable & get_mutable_obj4_mutable() { return obj4_mutable; }
+        void set_obj4_mutable(const Mutable & value) { this->obj4_mutable = value; }
+
         const Namespace & get_obj4_namespace() const { return obj4_namespace; }
         Namespace & get_mutable_obj4_namespace() { return obj4_namespace; }
         void set_obj4_namespace(const Namespace & value) { this->obj4_namespace = value; }
@@ -4847,10 +4836,6 @@ namespace quicktype {
         ReinterpretCast & get_mutable_obj4_reinterpret_cast() { return obj4_reinterpret_cast; }
         void set_obj4_reinterpret_cast(const ReinterpretCast & value) { this->obj4_reinterpret_cast = value; }
 
-        const Requires & get_obj4_requires() const { return obj4_requires; }
-        Requires & get_mutable_obj4_requires() { return obj4_requires; }
-        void set_obj4_requires(const Requires & value) { this->obj4_requires = value; }
-
         const Object & get_object() const { return object; }
         Object & get_mutable_object() { return object; }
         void set_object(const Object & value) { this->object = value; }
@@ -4875,6 +4860,14 @@ namespace quicktype {
         Of & get_mutable_of() { return of; }
         void set_of(const Of & value) { this->of = value; }
 
+        const OffsetDateTime & get_offset_date_time() const { return offset_date_time; }
+        OffsetDateTime & get_mutable_offset_date_time() { return offset_date_time; }
+        void set_offset_date_time(const OffsetDateTime & value) { this->offset_date_time = value; }
+
+        const OffsetTime & get_offset_time() const { return offset_time; }
+        OffsetTime & get_mutable_offset_time() { return offset_time; }
+        void set_offset_time(const OffsetTime & value) { this->offset_time = value; }
+
         const Oneway & get_oneway() const { return oneway; }
         Oneway & get_mutable_oneway() { return oneway; }
         void set_oneway(const Oneway & value) { this->oneway = value; }
@@ -4958,18 +4951,6 @@ namespace quicktype {
         const RegExp & get_reg_exp() const { return reg_exp; }
         RegExp & get_mutable_reg_exp() { return reg_exp; }
         void set_reg_exp(const RegExp & value) { this->reg_exp = value; }
-
-        const Repeat & get_repeat() const { return repeat; }
-        Repeat & get_mutable_repeat() { return repeat; }
-        void set_repeat(const Repeat & value) { this->repeat = value; }
-
-        const Require & get_require() const { return require; }
-        Require & get_mutable_require() { return require; }
-        void set_require(const Require & value) { this->require = value; }
-
-        const Required & get_required() const { return required; }
-        Required & get_mutable_required() { return required; }
-        void set_required(const Required & value) { this->required = value; }
     };
 
     class KSerializer {
@@ -4986,6 +4967,20 @@ namespace quicktype {
         void set_k_serializer(const int64_t & value) { this->k_serializer = value; }
     };
 
+    class Requires {
+        public:
+        Requires() = default;
+        virtual ~Requires() = default;
+
+        private:
+        int64_t requires_requires;
+
+        public:
+        const int64_t & get_requires_requires() const { return requires_requires; }
+        int64_t & get_mutable_requires_requires() { return requires_requires; }
+        void set_requires_requires(const int64_t & value) { this->requires_requires = value; }
+    };
+
     class Return {
         public:
         Return() = default;
@@ -5210,34 +5205,6 @@ namespace quicktype {
         void set_true_true(const int64_t & value) { this->true_true = value; }
     };
 
-    class Try {
-        public:
-        Try() = default;
-        virtual ~Try() = default;
-
-        private:
-        int64_t try_try;
-
-        public:
-        const int64_t & get_try_try() const { return try_try; }
-        int64_t & get_mutable_try_try() { return try_try; }
-        void set_try_try(const int64_t & value) { this->try_try = value; }
-    };
-
-    class TypeClass {
-        public:
-        TypeClass() = default;
-        virtual ~TypeClass() = default;
-
-        private:
-        int64_t type;
-
-        public:
-        const int64_t & get_type() const { return type; }
-        int64_t & get_mutable_type() { return type; }
-        void set_type(const int64_t & value) { this->type = value; }
-    };
-
     class PrimitiveKind {
         public:
         PrimitiveKind() = default;
@@ -5266,6 +5233,48 @@ namespace quicktype {
         void set_true_true(const int64_t & value) { this->true_true = value; }
     };
 
+    class Repeat {
+        public:
+        Repeat() = default;
+        virtual ~Repeat() = default;
+
+        private:
+        int64_t repeat;
+
+        public:
+        const int64_t & get_repeat() const { return repeat; }
+        int64_t & get_mutable_repeat() { return repeat; }
+        void set_repeat(const int64_t & value) { this->repeat = value; }
+    };
+
+    class Require {
+        public:
+        Require() = default;
+        virtual ~Require() = default;
+
+        private:
+        int64_t require;
+
+        public:
+        const int64_t & get_require() const { return require; }
+        int64_t & get_mutable_require() { return require; }
+        void set_require(const int64_t & value) { this->require = value; }
+    };
+
+    class Required {
+        public:
+        Required() = default;
+        virtual ~Required() = default;
+
+        private:
+        int64_t required;
+
+        public:
+        const int64_t & get_required() const { return required; }
+        int64_t & get_mutable_required() { return required; }
+        void set_required(const int64_t & value) { this->required = value; }
+    };
+
     class Restrict {
         public:
         Restrict() = default;
@@ -5840,42 +5849,15 @@ namespace quicktype {
         void set_transient(const int64_t & value) { this->transient = value; }
     };
 
-    class Type {
+    class Obj5 {
         public:
-        Type() = default;
-        virtual ~Type() = default;
-
-        private:
-        int64_t type;
-
-        public:
-        const int64_t & get_type() const { return type; }
-        int64_t & get_mutable_type() { return type; }
-        void set_type(const int64_t & value) { this->type = value; }
-    };
-
-    class Typealias {
-        public:
-        Typealias() = default;
-        virtual ~Typealias() = default;
-
-        private:
-        int64_t typealias;
-
-        public:
-        const int64_t & get_typealias() const { return typealias; }
-        int64_t & get_mutable_typealias() { return typealias; }
-        void set_typealias(const int64_t & value) { this->typealias = value; }
-    };
-
-    class Obj5 {
-        public:
-        Obj5() = default;
-        virtual ~Obj5() = default;
+        Obj5() = default;
+        virtual ~Obj5() = default;
 
         private:
         int64_t dummy;
         KSerializer k_serializer;
+        Requires obj5_requires;
         Return obj5_return;
         SelfClass obj5_self;
         Short obj5_short;
@@ -5892,10 +5874,11 @@ namespace quicktype {
         ThreadLocal obj5_thread_local;
         Throw obj5_throw;
         True obj5_true;
-        Try obj5_try;
-        TypeClass obj5_type;
         PrimitiveKind primitive_kind;
         TrueClass purple_true;
+        Repeat repeat;
+        Require require;
+        Required required;
         Restrict restrict;
         Retain retain;
         Rethrows rethrows;
@@ -5937,8 +5920,6 @@ namespace quicktype {
         ToString to_string;
         TopLevelClass top_level;
         Transient transient;
-        Type type;
-        Typealias typealias;
 
         public:
         const int64_t & get_dummy() const { return dummy; }
@@ -5949,6 +5930,10 @@ namespace quicktype {
         KSerializer & get_mutable_k_serializer() { return k_serializer; }
         void set_k_serializer(const KSerializer & value) { this->k_serializer = value; }
 
+        const Requires & get_obj5_requires() const { return obj5_requires; }
+        Requires & get_mutable_obj5_requires() { return obj5_requires; }
+        void set_obj5_requires(const Requires & value) { this->obj5_requires = value; }
+
         const Return & get_obj5_return() const { return obj5_return; }
         Return & get_mutable_obj5_return() { return obj5_return; }
         void set_obj5_return(const Return & value) { this->obj5_return = value; }
@@ -6013,14 +5998,6 @@ namespace quicktype {
         True & get_mutable_obj5_true() { return obj5_true; }
         void set_obj5_true(const True & value) { this->obj5_true = value; }
 
-        const Try & get_obj5_try() const { return obj5_try; }
-        Try & get_mutable_obj5_try() { return obj5_try; }
-        void set_obj5_try(const Try & value) { this->obj5_try = value; }
-
-        const TypeClass & get_obj5_type() const { return obj5_type; }
-        TypeClass & get_mutable_obj5_type() { return obj5_type; }
-        void set_obj5_type(const TypeClass & value) { this->obj5_type = value; }
-
         const PrimitiveKind & get_primitive_kind() const { return primitive_kind; }
         PrimitiveKind & get_mutable_primitive_kind() { return primitive_kind; }
         void set_primitive_kind(const PrimitiveKind & value) { this->primitive_kind = value; }
@@ -6029,6 +6006,18 @@ namespace quicktype {
         TrueClass & get_mutable_purple_true() { return purple_true; }
         void set_purple_true(const TrueClass & value) { this->purple_true = value; }
 
+        const Repeat & get_repeat() const { return repeat; }
+        Repeat & get_mutable_repeat() { return repeat; }
+        void set_repeat(const Repeat & value) { this->repeat = value; }
+
+        const Require & get_require() const { return require; }
+        Require & get_mutable_require() { return require; }
+        void set_require(const Require & value) { this->require = value; }
+
+        const Required & get_required() const { return required; }
+        Required & get_mutable_required() { return required; }
+        void set_required(const Required & value) { this->required = value; }
+
         const Restrict & get_restrict() const { return restrict; }
         Restrict & get_mutable_restrict() { return restrict; }
         void set_restrict(const Restrict & value) { this->restrict = value; }
@@ -6192,14 +6181,34 @@ namespace quicktype {
         const Transient & get_transient() const { return transient; }
         Transient & get_mutable_transient() { return transient; }
         void set_transient(const Transient & value) { this->transient = value; }
+    };
 
-        const Type & get_type() const { return type; }
-        Type & get_mutable_type() { return type; }
-        void set_type(const Type & value) { this->type = value; }
+    class Try {
+        public:
+        Try() = default;
+        virtual ~Try() = default;
 
-        const Typealias & get_typealias() const { return typealias; }
-        Typealias & get_mutable_typealias() { return typealias; }
-        void set_typealias(const Typealias & value) { this->typealias = value; }
+        private:
+        int64_t try_try;
+
+        public:
+        const int64_t & get_try_try() const { return try_try; }
+        int64_t & get_mutable_try_try() { return try_try; }
+        void set_try_try(const int64_t & value) { this->try_try = value; }
+    };
+
+    class TypeClass {
+        public:
+        TypeClass() = default;
+        virtual ~TypeClass() = default;
+
+        private:
+        int64_t type;
+
+        public:
+        const int64_t & get_type() const { return type; }
+        int64_t & get_mutable_type() { return type; }
+        void set_type(const int64_t & value) { this->type = value; }
     };
 
     class Typedef {
@@ -6384,6 +6393,34 @@ namespace quicktype {
         void set_xor_eq_xor_eq(const int64_t & value) { this->xor_eq_xor_eq = value; }
     };
 
+    class Type {
+        public:
+        Type() = default;
+        virtual ~Type() = default;
+
+        private:
+        int64_t type;
+
+        public:
+        const int64_t & get_type() const { return type; }
+        int64_t & get_mutable_type() { return type; }
+        void set_type(const int64_t & value) { this->type = value; }
+    };
+
+    class Typealias {
+        public:
+        Typealias() = default;
+        virtual ~Typealias() = default;
+
+        private:
+        int64_t typealias;
+
+        public:
+        const int64_t & get_typealias() const { return typealias; }
+        int64_t & get_mutable_typealias() { return typealias; }
+        void set_typealias(const int64_t & value) { this->typealias = value; }
+    };
+
     class Typeof {
         public:
         Typeof() = default;
@@ -6671,6 +6708,8 @@ namespace quicktype {
 
         private:
         int64_t dummy;
+        Try obj6_try;
+        TypeClass obj6_type;
         Typedef obj6_typedef;
         Typeid obj6_typeid;
         Typename obj6_typename;
@@ -6684,6 +6723,8 @@ namespace quicktype {
         While obj6_while;
         Xor obj6_xor;
         XorEq obj6_xor_eq;
+        Type type;
+        Typealias typealias;
         Typeof typeof;
         Uint uint;
         Ulong ulong;
@@ -6710,6 +6751,14 @@ namespace quicktype {
         int64_t & get_mutable_dummy() { return dummy; }
         void set_dummy(const int64_t & value) { this->dummy = value; }
 
+        const Try & get_obj6_try() const { return obj6_try; }
+        Try & get_mutable_obj6_try() { return obj6_try; }
+        void set_obj6_try(const Try & value) { this->obj6_try = value; }
+
+        const TypeClass & get_obj6_type() const { return obj6_type; }
+        TypeClass & get_mutable_obj6_type() { return obj6_type; }
+        void set_obj6_type(const TypeClass & value) { this->obj6_type = value; }
+
         const Typedef & get_obj6_typedef() const { return obj6_typedef; }
         Typedef & get_mutable_obj6_typedef() { return obj6_typedef; }
         void set_obj6_typedef(const Typedef & value) { this->obj6_typedef = value; }
@@ -6762,6 +6811,14 @@ namespace quicktype {
         XorEq & get_mutable_obj6_xor_eq() { return obj6_xor_eq; }
         void set_obj6_xor_eq(const XorEq & value) { this->obj6_xor_eq = value; }
 
+        const Type & get_type() const { return type; }
+        Type & get_mutable_type() { return type; }
+        void set_type(const Type & value) { this->type = value; }
+
+        const Typealias & get_typealias() const { return typealias; }
+        Typealias & get_mutable_typealias() { return typealias; }
+        void set_typealias(const Typealias & value) { this->typealias = value; }
+
         const Typeof & get_typeof() const { return typeof; }
         Typeof & get_mutable_typeof() { return typeof; }
         void set_typeof(const Typeof & value) { this->typeof = value; }
@@ -7426,6 +7483,9 @@ namespace quicktype {
     void from_json(const json & j, List & x);
     void to_json(json & j, const List & x);
 
+    void from_json(const json & j, LocalDate & x);
+    void to_json(json & j, const LocalDate & x);
+
     void from_json(const json & j, Locale & x);
     void to_json(json & j, const Locale & x);
 
@@ -7447,9 +7507,6 @@ namespace quicktype {
     void from_json(const json & j, MetadataPropertyHandling & x);
     void to_json(json & j, const MetadataPropertyHandling & x);
 
-    void from_json(const json & j, Mutating & x);
-    void to_json(json & j, const Mutating & x);
-
     void from_json(const json & j, Goto & x);
     void to_json(json & j, const Goto & x);
 
@@ -7471,12 +7528,12 @@ namespace quicktype {
     void from_json(const json & j, Module & x);
     void to_json(json & j, const Module & x);
 
-    void from_json(const json & j, Mutable & x);
-    void to_json(json & j, const Mutable & x);
-
     void from_json(const json & j, Obj3 & x);
     void to_json(json & j, const Obj3 & x);
 
+    void from_json(const json & j, Mutating & x);
+    void to_json(json & j, const Mutating & x);
+
     void from_json(const json & j, Native & x);
     void to_json(json & j, const Native & x);
 
@@ -7522,6 +7579,9 @@ namespace quicktype {
     void from_json(const json & j, Number & x);
     void to_json(json & j, const Number & x);
 
+    void from_json(const json & j, Mutable & x);
+    void to_json(json & j, const Mutable & x);
+
     void from_json(const json & j, Namespace & x);
     void to_json(json & j, const Namespace & x);
 
@@ -7576,9 +7636,6 @@ namespace quicktype {
     void from_json(const json & j, ReinterpretCast & x);
     void to_json(json & j, const ReinterpretCast & x);
 
-    void from_json(const json & j, Requires & x);
-    void to_json(json & j, const Requires & x);
-
     void from_json(const json & j, Object & x);
     void to_json(json & j, const Object & x);
 
@@ -7597,6 +7654,12 @@ namespace quicktype {
     void from_json(const json & j, Of & x);
     void to_json(json & j, const Of & x);
 
+    void from_json(const json & j, OffsetDateTime & x);
+    void to_json(json & j, const OffsetDateTime & x);
+
+    void from_json(const json & j, OffsetTime & x);
+    void to_json(json & j, const OffsetTime & x);
+
     void from_json(const json & j, Oneway & x);
     void to_json(json & j, const Oneway & x);
 
@@ -7660,21 +7723,15 @@ namespace quicktype {
     void from_json(const json & j, RegExp & x);
     void to_json(json & j, const RegExp & x);
 
-    void from_json(const json & j, Repeat & x);
-    void to_json(json & j, const Repeat & x);
-
-    void from_json(const json & j, Require & x);
-    void to_json(json & j, const Require & x);
-
-    void from_json(const json & j, Required & x);
-    void to_json(json & j, const Required & x);
-
     void from_json(const json & j, Obj4 & x);
     void to_json(json & j, const Obj4 & x);
 
     void from_json(const json & j, KSerializer & x);
     void to_json(json & j, const KSerializer & x);
 
+    void from_json(const json & j, Requires & x);
+    void to_json(json & j, const Requires & x);
+
     void from_json(const json & j, Return & x);
     void to_json(json & j, const Return & x);
 
@@ -7723,18 +7780,21 @@ namespace quicktype {
     void from_json(const json & j, True & x);
     void to_json(json & j, const True & x);
 
-    void from_json(const json & j, Try & x);
-    void to_json(json & j, const Try & x);
-
-    void from_json(const json & j, TypeClass & x);
-    void to_json(json & j, const TypeClass & x);
-
     void from_json(const json & j, PrimitiveKind & x);
     void to_json(json & j, const PrimitiveKind & x);
 
     void from_json(const json & j, TrueClass & x);
     void to_json(json & j, const TrueClass & x);
 
+    void from_json(const json & j, Repeat & x);
+    void to_json(json & j, const Repeat & x);
+
+    void from_json(const json & j, Require & x);
+    void to_json(json & j, const Require & x);
+
+    void from_json(const json & j, Required & x);
+    void to_json(json & j, const Required & x);
+
     void from_json(const json & j, Restrict & x);
     void to_json(json & j, const Restrict & x);
 
@@ -7858,15 +7918,15 @@ namespace quicktype {
     void from_json(const json & j, Transient & x);
     void to_json(json & j, const Transient & x);
 
-    void from_json(const json & j, Type & x);
-    void to_json(json & j, const Type & x);
-
-    void from_json(const json & j, Typealias & x);
-    void to_json(json & j, const Typealias & x);
-
     void from_json(const json & j, Obj5 & x);
     void to_json(json & j, const Obj5 & x);
 
+    void from_json(const json & j, Try & x);
+    void to_json(json & j, const Try & x);
+
+    void from_json(const json & j, TypeClass & x);
+    void to_json(json & j, const TypeClass & x);
+
     void from_json(const json & j, Typedef & x);
     void to_json(json & j, const Typedef & x);
 
@@ -7906,6 +7966,12 @@ namespace quicktype {
     void from_json(const json & j, XorEq & x);
     void to_json(json & j, const XorEq & x);
 
+    void from_json(const json & j, Type & x);
+    void to_json(json & j, const Type & x);
+
+    void from_json(const json & j, Typealias & x);
+    void to_json(json & j, const Typealias & x);
+
     void from_json(const json & j, Typeof & x);
     void to_json(json & j, const Typeof & x);
 
@@ -10198,6 +10264,17 @@ namespace quicktype {
         j["list"] = x.get_list();
     }
 
+    inline void from_json(const json & j, LocalDate& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("LocalDate") != j.end() && !j.at("LocalDate").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_local_date(j.at("LocalDate").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const LocalDate & x) {
+        j = json::object();
+        j["LocalDate"] = x.get_local_date();
+    }
+
     inline void from_json(const json & j, Locale& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("Locale") != j.end() && !j.at("Locale").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -10275,17 +10352,6 @@ namespace quicktype {
         j["metadata_property_handling"] = x.get_metadata_property_handling();
     }
 
-    inline void from_json(const json & j, Mutating& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("mutating") != j.end() && !j.at("mutating").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_mutating(j.at("mutating").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Mutating & x) {
-        j = json::object();
-        j["mutating"] = x.get_mutating();
-    }
-
     inline void from_json(const json & j, Goto& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("goto") != j.end() && !j.at("goto").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -10363,17 +10429,6 @@ namespace quicktype {
         j["module"] = x.get_module_module();
     }
 
-    inline void from_json(const json & j, Mutable& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("mutable") != j.end() && !j.at("mutable").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_mutable_mutable(j.at("mutable").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Mutable & x) {
-        j = json::object();
-        j["mutable"] = x.get_mutable_mutable();
-    }
-
     inline void from_json(const json & j, Obj3& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("dummy") != j.end() && !j.at("dummy").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -10427,6 +10482,7 @@ namespace quicktype {
         x.set_left(j.at("left").get<Left>());
         x.set_let(j.at("let").get<Let>());
         x.set_list(j.at("list").get<List>());
+        x.set_local_date(j.at("LocalDate").get<LocalDate>());
         x.set_locale(j.at("Locale").get<Locale>());
         x.set_lock(j.at("lock").get<Lock>());
         x.set_long_node(j.at("LongNode").get<LongNode>());
@@ -10434,7 +10490,6 @@ namespace quicktype {
         x.set_map_entry(j.at("MapEntry").get<MapEntry>());
         x.set_marshal_json(j.at("MarshalJSON").get<MarshalJson>());
         x.set_metadata_property_handling(j.at("metadata_property_handling").get<MetadataPropertyHandling>());
-        x.set_mutating(j.at("mutating").get<Mutating>());
         x.set_obj3_goto(j.at("goto").get<Goto>());
         x.set_obj3_if(j.at("if").get<If>());
         x.set_obj3_import(j.at("import").get<Import>());
@@ -10442,7 +10497,6 @@ namespace quicktype {
         x.set_obj3_int(j.at("int").get<Int>());
         x.set_obj3_long(j.at("long").get<Long>());
         x.set_obj3_module(j.at("module").get<Module>());
-        x.set_obj3_mutable(j.at("mutable").get<Mutable>());
     }
 
     inline void to_json(json & j, const Obj3 & x) {
@@ -10497,6 +10551,7 @@ namespace quicktype {
         j["left"] = x.get_left();
         j["let"] = x.get_let();
         j["list"] = x.get_list();
+        j["LocalDate"] = x.get_local_date();
         j["Locale"] = x.get_locale();
         j["lock"] = x.get_lock();
         j["LongNode"] = x.get_long_node();
@@ -10504,7 +10559,6 @@ namespace quicktype {
         j["MapEntry"] = x.get_map_entry();
         j["MarshalJSON"] = x.get_marshal_json();
         j["metadata_property_handling"] = x.get_metadata_property_handling();
-        j["mutating"] = x.get_mutating();
         j["goto"] = x.get_obj3_goto();
         j["if"] = x.get_obj3_if();
         j["import"] = x.get_obj3_import();
@@ -10512,7 +10566,17 @@ namespace quicktype {
         j["int"] = x.get_obj3_int();
         j["long"] = x.get_obj3_long();
         j["module"] = x.get_obj3_module();
-        j["mutable"] = x.get_obj3_mutable();
+    }
+
+    inline void from_json(const json & j, Mutating& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("mutating") != j.end() && !j.at("mutating").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_mutating(j.at("mutating").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Mutating & x) {
+        j = json::object();
+        j["mutating"] = x.get_mutating();
     }
 
     inline void from_json(const json & j, Native& x) {
@@ -10680,6 +10744,17 @@ namespace quicktype {
         j["number"] = x.get_number();
     }
 
+    inline void from_json(const json & j, Mutable& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("mutable") != j.end() && !j.at("mutable").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_mutable_mutable(j.at("mutable").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Mutable & x) {
+        j = json::object();
+        j["mutable"] = x.get_mutable_mutable();
+    }
+
     inline void from_json(const json & j, Namespace& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("namespace") != j.end() && !j.at("namespace").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -10878,17 +10953,6 @@ namespace quicktype {
         j["reinterpret_cast"] = x.get_reinterpret_cast_reinterpret_cast();
     }
 
-    inline void from_json(const json & j, Requires& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("requires") != j.end() && !j.at("requires").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_requires_requires(j.at("requires").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Requires & x) {
-        j = json::object();
-        j["requires"] = x.get_requires_requires();
-    }
-
     inline void from_json(const json & j, Object& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("object") != j.end() && !j.at("object").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -10955,6 +11019,28 @@ namespace quicktype {
         j["of"] = x.get_of();
     }
 
+    inline void from_json(const json & j, OffsetDateTime& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("OffsetDateTime") != j.end() && !j.at("OffsetDateTime").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_offset_date_time(j.at("OffsetDateTime").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const OffsetDateTime & x) {
+        j = json::object();
+        j["OffsetDateTime"] = x.get_offset_date_time();
+    }
+
+    inline void from_json(const json & j, OffsetTime& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("OffsetTime") != j.end() && !j.at("OffsetTime").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_offset_time(j.at("OffsetTime").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const OffsetTime & x) {
+        j = json::object();
+        j["OffsetTime"] = x.get_offset_time();
+    }
+
     inline void from_json(const json & j, Oneway& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("oneway") != j.end() && !j.at("oneway").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -11186,43 +11272,11 @@ namespace quicktype {
         j["RegExp"] = x.get_reg_exp();
     }
 
-    inline void from_json(const json & j, Repeat& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("repeat") != j.end() && !j.at("repeat").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_repeat(j.at("repeat").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Repeat & x) {
-        j = json::object();
-        j["repeat"] = x.get_repeat();
-    }
-
-    inline void from_json(const json & j, Require& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("require") != j.end() && !j.at("require").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_require(j.at("require").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Require & x) {
-        j = json::object();
-        j["require"] = x.get_require();
-    }
-
-    inline void from_json(const json & j, Required& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("required") != j.end() && !j.at("required").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_required(j.at("required").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Required & x) {
-        j = json::object();
-        j["required"] = x.get_required();
-    }
-
     inline void from_json(const json & j, Obj4& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("dummy") != j.end() && !j.at("dummy").is_number_integer()) throw std::runtime_error("Expected integer");
         x.set_dummy(j.at("dummy").get<int64_t>());
+        x.set_mutating(j.at("mutating").get<Mutating>());
         x.set_native(j.at("native").get<Native>());
         x.set_newtonsoft(j.at("newtonsoft").get<Newtonsoft>());
         x.set_nil(j.at("nil").get<Nil>());
@@ -11238,6 +11292,7 @@ namespace quicktype {
         x.set_null(j.at("NULL").get<Null>());
         x.set_null_node(j.at("NullNode").get<NullNode>());
         x.set_number(j.at("number").get<Number>());
+        x.set_obj4_mutable(j.at("mutable").get<Mutable>());
         x.set_obj4_namespace(j.at("namespace").get<Namespace>());
         x.set_obj4_new(j.at("new").get<New>());
         x.set_obj4_noexcept(j.at("noexcept").get<Noexcept>());
@@ -11256,13 +11311,14 @@ namespace quicktype {
         x.set_obj4_public(j.at("public").get<Public>());
         x.set_obj4_register(j.at("register").get<Register>());
         x.set_obj4_reinterpret_cast(j.at("reinterpret_cast").get<ReinterpretCast>());
-        x.set_obj4_requires(j.at("requires").get<Requires>());
         x.set_object(j.at("object").get<Object>());
         x.set_object_mapper(j.at("ObjectMapper").get<ObjectMapper>());
         x.set_object_node(j.at("ObjectNode").get<ObjectNode>());
         x.set_object_reader(j.at("ObjectReader").get<ObjectReader>());
         x.set_object_writer(j.at("ObjectWriter").get<ObjectWriter>());
         x.set_of(j.at("of").get<Of>());
+        x.set_offset_date_time(j.at("OffsetDateTime").get<OffsetDateTime>());
+        x.set_offset_time(j.at("OffsetTime").get<OffsetTime>());
         x.set_oneway(j.at("oneway").get<Oneway>());
         x.set_open(j.at("open").get<Open>());
         x.set_optional(j.at("optional").get<Optional>());
@@ -11284,14 +11340,12 @@ namespace quicktype {
         x.set_readonly(j.at("readonly").get<Readonly>());
         x.set_ref(j.at("ref").get<Ref>());
         x.set_reg_exp(j.at("RegExp").get<RegExp>());
-        x.set_repeat(j.at("repeat").get<Repeat>());
-        x.set_require(j.at("require").get<Require>());
-        x.set_required(j.at("required").get<Required>());
     }
 
     inline void to_json(json & j, const Obj4 & x) {
         j = json::object();
         j["dummy"] = x.get_dummy();
+        j["mutating"] = x.get_mutating();
         j["native"] = x.get_native();
         j["newtonsoft"] = x.get_newtonsoft();
         j["nil"] = x.get_nil();
@@ -11307,6 +11361,7 @@ namespace quicktype {
         j["NULL"] = x.get_null();
         j["NullNode"] = x.get_null_node();
         j["number"] = x.get_number();
+        j["mutable"] = x.get_obj4_mutable();
         j["namespace"] = x.get_obj4_namespace();
         j["new"] = x.get_obj4_new();
         j["noexcept"] = x.get_obj4_noexcept();
@@ -11325,13 +11380,14 @@ namespace quicktype {
         j["public"] = x.get_obj4_public();
         j["register"] = x.get_obj4_register();
         j["reinterpret_cast"] = x.get_obj4_reinterpret_cast();
-        j["requires"] = x.get_obj4_requires();
         j["object"] = x.get_object();
         j["ObjectMapper"] = x.get_object_mapper();
         j["ObjectNode"] = x.get_object_node();
         j["ObjectReader"] = x.get_object_reader();
         j["ObjectWriter"] = x.get_object_writer();
         j["of"] = x.get_of();
+        j["OffsetDateTime"] = x.get_offset_date_time();
+        j["OffsetTime"] = x.get_offset_time();
         j["oneway"] = x.get_oneway();
         j["open"] = x.get_open();
         j["optional"] = x.get_optional();
@@ -11353,9 +11409,6 @@ namespace quicktype {
         j["readonly"] = x.get_readonly();
         j["ref"] = x.get_ref();
         j["RegExp"] = x.get_reg_exp();
-        j["repeat"] = x.get_repeat();
-        j["require"] = x.get_require();
-        j["required"] = x.get_required();
     }
 
     inline void from_json(const json & j, KSerializer& x) {
@@ -11369,6 +11422,17 @@ namespace quicktype {
         j["KSerializer"] = x.get_k_serializer();
     }
 
+    inline void from_json(const json & j, Requires& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("requires") != j.end() && !j.at("requires").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_requires_requires(j.at("requires").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Requires & x) {
+        j = json::object();
+        j["requires"] = x.get_requires_requires();
+    }
+
     inline void from_json(const json & j, Return& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("return") != j.end() && !j.at("return").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -11545,48 +11609,59 @@ namespace quicktype {
         j["True"] = x.get_true_true();
     }
 
-    inline void from_json(const json & j, Try& x) {
+    inline void from_json(const json & j, PrimitiveKind& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("try") != j.end() && !j.at("try").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_try_try(j.at("try").get<int64_t>());
+        if (j.find("PrimitiveKind") != j.end() && !j.at("PrimitiveKind").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_primitive_kind(j.at("PrimitiveKind").get<int64_t>());
     }
 
-    inline void to_json(json & j, const Try & x) {
+    inline void to_json(json & j, const PrimitiveKind & x) {
         j = json::object();
-        j["try"] = x.get_try_try();
+        j["PrimitiveKind"] = x.get_primitive_kind();
     }
 
-    inline void from_json(const json & j, TypeClass& x) {
+    inline void from_json(const json & j, TrueClass& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("type") != j.end() && !j.at("type").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_type(j.at("type").get<int64_t>());
+        if (j.find("true") != j.end() && !j.at("true").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_true_true(j.at("true").get<int64_t>());
     }
 
-    inline void to_json(json & j, const TypeClass & x) {
+    inline void to_json(json & j, const TrueClass & x) {
         j = json::object();
-        j["type"] = x.get_type();
+        j["true"] = x.get_true_true();
     }
 
-    inline void from_json(const json & j, PrimitiveKind& x) {
+    inline void from_json(const json & j, Repeat& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("PrimitiveKind") != j.end() && !j.at("PrimitiveKind").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_primitive_kind(j.at("PrimitiveKind").get<int64_t>());
+        if (j.find("repeat") != j.end() && !j.at("repeat").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_repeat(j.at("repeat").get<int64_t>());
     }
 
-    inline void to_json(json & j, const PrimitiveKind & x) {
+    inline void to_json(json & j, const Repeat & x) {
         j = json::object();
-        j["PrimitiveKind"] = x.get_primitive_kind();
+        j["repeat"] = x.get_repeat();
     }
 
-    inline void from_json(const json & j, TrueClass& x) {
+    inline void from_json(const json & j, Require& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("true") != j.end() && !j.at("true").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_true_true(j.at("true").get<int64_t>());
+        if (j.find("require") != j.end() && !j.at("require").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_require(j.at("require").get<int64_t>());
     }
 
-    inline void to_json(json & j, const TrueClass & x) {
+    inline void to_json(json & j, const Require & x) {
         j = json::object();
-        j["true"] = x.get_true_true();
+        j["require"] = x.get_require();
+    }
+
+    inline void from_json(const json & j, Required& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("required") != j.end() && !j.at("required").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_required(j.at("required").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Required & x) {
+        j = json::object();
+        j["required"] = x.get_required();
     }
 
     inline void from_json(const json & j, Restrict& x) {
@@ -12040,33 +12115,12 @@ namespace quicktype {
         j["transient"] = x.get_transient();
     }
 
-    inline void from_json(const json & j, Type& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("Type") != j.end() && !j.at("Type").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_type(j.at("Type").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Type & x) {
-        j = json::object();
-        j["Type"] = x.get_type();
-    }
-
-    inline void from_json(const json & j, Typealias& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("typealias") != j.end() && !j.at("typealias").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_typealias(j.at("typealias").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Typealias & x) {
-        j = json::object();
-        j["typealias"] = x.get_typealias();
-    }
-
     inline void from_json(const json & j, Obj5& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("dummy") != j.end() && !j.at("dummy").is_number_integer()) throw std::runtime_error("Expected integer");
         x.set_dummy(j.at("dummy").get<int64_t>());
         x.set_k_serializer(j.at("KSerializer").get<KSerializer>());
+        x.set_obj5_requires(j.at("requires").get<Requires>());
         x.set_obj5_return(j.at("return").get<Return>());
         x.set_obj5_self(j.at("self").get<SelfClass>());
         x.set_obj5_short(j.at("short").get<Short>());
@@ -12083,10 +12137,11 @@ namespace quicktype {
         x.set_obj5_thread_local(j.at("thread_local").get<ThreadLocal>());
         x.set_obj5_throw(j.at("throw").get<Throw>());
         x.set_obj5_true(j.at("True").get<True>());
-        x.set_obj5_try(j.at("try").get<Try>());
-        x.set_obj5_type(j.at("type").get<TypeClass>());
         x.set_primitive_kind(j.at("PrimitiveKind").get<PrimitiveKind>());
         x.set_purple_true(j.at("true").get<TrueClass>());
+        x.set_repeat(j.at("repeat").get<Repeat>());
+        x.set_require(j.at("require").get<Require>());
+        x.set_required(j.at("required").get<Required>());
         x.set_restrict(j.at("restrict").get<Restrict>());
         x.set_retain(j.at("retain").get<Retain>());
         x.set_rethrows(j.at("rethrows").get<Rethrows>());
@@ -12128,14 +12183,13 @@ namespace quicktype {
         x.set_to_string(j.at("toString").get<ToString>());
         x.set_top_level(j.at("top_level").get<TopLevelClass>());
         x.set_transient(j.at("transient").get<Transient>());
-        x.set_type(j.at("Type").get<Type>());
-        x.set_typealias(j.at("typealias").get<Typealias>());
     }
 
     inline void to_json(json & j, const Obj5 & x) {
         j = json::object();
         j["dummy"] = x.get_dummy();
         j["KSerializer"] = x.get_k_serializer();
+        j["requires"] = x.get_obj5_requires();
         j["return"] = x.get_obj5_return();
         j["self"] = x.get_obj5_self();
         j["short"] = x.get_obj5_short();
@@ -12152,10 +12206,11 @@ namespace quicktype {
         j["thread_local"] = x.get_obj5_thread_local();
         j["throw"] = x.get_obj5_throw();
         j["True"] = x.get_obj5_true();
-        j["try"] = x.get_obj5_try();
-        j["type"] = x.get_obj5_type();
         j["PrimitiveKind"] = x.get_primitive_kind();
         j["true"] = x.get_purple_true();
+        j["repeat"] = x.get_repeat();
+        j["require"] = x.get_require();
+        j["required"] = x.get_required();
         j["restrict"] = x.get_restrict();
         j["retain"] = x.get_retain();
         j["rethrows"] = x.get_rethrows();
@@ -12197,8 +12252,28 @@ namespace quicktype {
         j["toString"] = x.get_to_string();
         j["top_level"] = x.get_top_level();
         j["transient"] = x.get_transient();
-        j["Type"] = x.get_type();
-        j["typealias"] = x.get_typealias();
+    }
+
+    inline void from_json(const json & j, Try& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("try") != j.end() && !j.at("try").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_try_try(j.at("try").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Try & x) {
+        j = json::object();
+        j["try"] = x.get_try_try();
+    }
+
+    inline void from_json(const json & j, TypeClass& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("type") != j.end() && !j.at("type").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_type(j.at("type").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const TypeClass & x) {
+        j = json::object();
+        j["type"] = x.get_type();
     }
 
     inline void from_json(const json & j, Typedef& x) {
@@ -12344,6 +12419,28 @@ namespace quicktype {
         j["xor_eq"] = x.get_xor_eq_xor_eq();
     }
 
+    inline void from_json(const json & j, Type& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("Type") != j.end() && !j.at("Type").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_type(j.at("Type").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Type & x) {
+        j = json::object();
+        j["Type"] = x.get_type();
+    }
+
+    inline void from_json(const json & j, Typealias& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("typealias") != j.end() && !j.at("typealias").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_typealias(j.at("typealias").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Typealias & x) {
+        j = json::object();
+        j["typealias"] = x.get_typealias();
+    }
+
     inline void from_json(const json & j, Typeof& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("typeof") != j.end() && !j.at("typeof").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -12568,6 +12665,8 @@ namespace quicktype {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("dummy") != j.end() && !j.at("dummy").is_number_integer()) throw std::runtime_error("Expected integer");
         x.set_dummy(j.at("dummy").get<int64_t>());
+        x.set_obj6_try(j.at("try").get<Try>());
+        x.set_obj6_type(j.at("type").get<TypeClass>());
         x.set_obj6_typedef(j.at("typedef").get<Typedef>());
         x.set_obj6_typeid(j.at("typeid").get<Typeid>());
         x.set_obj6_typename(j.at("typename").get<Typename>());
@@ -12581,6 +12680,8 @@ namespace quicktype {
         x.set_obj6_while(j.at("while").get<While>());
         x.set_obj6_xor(j.at("xor").get<Xor>());
         x.set_obj6_xor_eq(j.at("xor_eq").get<XorEq>());
+        x.set_type(j.at("Type").get<Type>());
+        x.set_typealias(j.at("typealias").get<Typealias>());
         x.set_typeof(j.at("typeof").get<Typeof>());
         x.set_uint(j.at("uint").get<Uint>());
         x.set_ulong(j.at("ulong").get<Ulong>());
@@ -12606,6 +12707,8 @@ namespace quicktype {
     inline void to_json(json & j, const Obj6 & x) {
         j = json::object();
         j["dummy"] = x.get_dummy();
+        j["try"] = x.get_obj6_try();
+        j["type"] = x.get_obj6_type();
         j["typedef"] = x.get_obj6_typedef();
         j["typeid"] = x.get_obj6_typeid();
         j["typename"] = x.get_obj6_typename();
@@ -12619,6 +12722,8 @@ namespace quicktype {
         j["while"] = x.get_obj6_while();
         j["xor"] = x.get_obj6_xor();
         j["xor_eq"] = x.get_obj6_xor_eq();
+        j["Type"] = x.get_type();
+        j["typealias"] = x.get_typealias();
         j["typeof"] = x.get_typeof();
         j["uint"] = x.get_uint();
         j["ulong"] = x.get_ulong();
diff --git a/base/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr b/head/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr
index 92a7a63..7c25169 100644
--- a/base/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr
+++ b/head/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr
@@ -1267,6 +1267,9 @@ class Obj3
 
   property list : List
 
+  @[JSON::Field(key: "LocalDate")]
+  property local_date : LocalDate
+
   @[JSON::Field(key: "Locale")]
   property locale : Locale
 
@@ -1287,10 +1290,6 @@ class Obj3
 
   property metadata_property_handling : MetadataPropertyHandling
 
-  property mutable : Mutable
-
-  property mutating : Mutating
-
   @[JSON::Field(key: "if")]
   property obj3_if : If
 
@@ -1631,6 +1630,13 @@ class List
   property list : Int64
 end
 
+class LocalDate
+  include JSON::Serializable
+
+  @[JSON::Field(key: "LocalDate")]
+  property local_date : Int64
+end
+
 class Locale
   include JSON::Serializable
 
@@ -1683,18 +1689,6 @@ class MetadataPropertyHandling
   property metadata_property_handling : Int64
 end
 
-class Mutable
-  include JSON::Serializable
-
-  property mutable : Int64
-end
-
-class Mutating
-  include JSON::Serializable
-
-  property mutating : Int64
-end
-
 class If
   include JSON::Serializable
 
@@ -1721,6 +1715,10 @@ class Obj4
 
   property dummy : Int64
 
+  property mutable : Mutable
+
+  property mutating : Mutating
+
   property namespace : Namespace
 
   property native : Native
@@ -1793,9 +1791,6 @@ class Obj4
   @[JSON::Field(key: "protocol")]
   property obj4_protocol : ProtocolClass
 
-  @[JSON::Field(key: "require")]
-  property obj4_require : Require
-
   property object : ObjectClass
 
   @[JSON::Field(key: "ObjectMapper")]
@@ -1810,6 +1805,12 @@ class Obj4
   @[JSON::Field(key: "ObjectWriter")]
   property object_writer : ObjectWriter
 
+  @[JSON::Field(key: "OffsetDateTime")]
+  property offset_date_time : OffsetDateTime
+
+  @[JSON::Field(key: "OffsetTime")]
+  property offset_time : OffsetTime
+
   property oneway : Oneway
 
   property open : Open
@@ -1866,12 +1867,18 @@ class Obj4
   property register : Register
 
   property reinterpret_cast : ReinterpretCast
+end
 
-  property repeat : Repeat
+class Mutable
+  include JSON::Serializable
 
-  property required : Required
+  property mutable : Int64
+end
 
-  property requires : Requires
+class Mutating
+  include JSON::Serializable
+
+  property mutating : Int64
 end
 
 class Namespace
@@ -2055,13 +2062,6 @@ class ProtocolClass
   property protocol : Int64
 end
 
-class Require
-  include JSON::Serializable
-
-  @[JSON::Field(key: "require")]
-  property require_require : Int64
-end
-
 class ObjectClass
   include JSON::Serializable
 
@@ -2096,6 +2096,20 @@ class ObjectWriter
   property object_writer : Int64
 end
 
+class OffsetDateTime
+  include JSON::Serializable
+
+  @[JSON::Field(key: "OffsetDateTime")]
+  property offset_date_time : Int64
+end
+
+class OffsetTime
+  include JSON::Serializable
+
+  @[JSON::Field(key: "OffsetTime")]
+  property offset_time : Int64
+end
+
 class Oneway
   include JSON::Serializable
 
@@ -2261,24 +2275,6 @@ class ReinterpretCast
   property reinterpret_cast : Int64
 end
 
-class Repeat
-  include JSON::Serializable
-
-  property repeat : Int64
-end
-
-class Required
-  include JSON::Serializable
-
-  property required : Int64
-end
-
-class Requires
-  include JSON::Serializable
-
-  property requires : Int64
-end
-
 class Obj5
   include JSON::Serializable
 
@@ -2287,6 +2283,9 @@ class Obj5
   @[JSON::Field(key: "KSerializer")]
   property k_serializer : KSerializer
 
+  @[JSON::Field(key: "require")]
+  property obj5_require : Require
+
   @[JSON::Field(key: "return")]
   property obj5_return : Return
 
@@ -2314,9 +2313,6 @@ class Obj5
   @[JSON::Field(key: "True")]
   property obj5_true : True
 
-  @[JSON::Field(key: "Type")]
-  property obj5_type : Type
-
   @[JSON::Field(key: "PrimitiveKind")]
   property primitive_kind : PrimitiveKind
 
@@ -2326,8 +2322,11 @@ class Obj5
   @[JSON::Field(key: "true")]
   property purple_true : TrueClass
 
-  @[JSON::Field(key: "type")]
-  property purple_type : TypeClass
+  property repeat : Repeat
+
+  property required : Required
+
+  property requires : Requires
 
   property restrict : Restrict
 
@@ -2439,10 +2438,6 @@ class Obj5
   property top_level : TopLevelClass
 
   property transient : Transient
-
-  property try : Try
-
-  property typealias : Typealias
 end
 
 class KSerializer
@@ -2452,6 +2447,13 @@ class KSerializer
   property k_serializer : Int64
 end
 
+class Require
+  include JSON::Serializable
+
+  @[JSON::Field(key: "require")]
+  property require_require : Int64
+end
+
 class Return
   include JSON::Serializable
 
@@ -2515,13 +2517,6 @@ class True
   property true_true : Int64
 end
 
-class Type
-  include JSON::Serializable
-
-  @[JSON::Field(key: "Type")]
-  property type_type : Int64
-end
-
 class PrimitiveKind
   include JSON::Serializable
 
@@ -2543,11 +2538,22 @@ class TrueClass
   property true_true : Int64
 end
 
-class TypeClass
+class Repeat
   include JSON::Serializable
 
-  @[JSON::Field(key: "type")]
-  property type_type : Int64
+  property repeat : Int64
+end
+
+class Required
+  include JSON::Serializable
+
+  property required : Int64
+end
+
+class Requires
+  include JSON::Serializable
+
+  property requires : Int64
 end
 
 class Restrict
@@ -2849,23 +2855,14 @@ class Transient
   property transient : Int64
 end
 
-class Try
-  include JSON::Serializable
-
-  property try : Int64
-end
-
-class Typealias
-  include JSON::Serializable
-
-  property typealias : Int64
-end
-
 class Obj6
   include JSON::Serializable
 
   property dummy : Int64
 
+  @[JSON::Field(key: "Type")]
+  property obj6_type : Type
+
   @[JSON::Field(key: "typeof")]
   property obj6_typeof : Typeof
 
@@ -2881,6 +2878,13 @@ class Obj6
   @[JSON::Field(key: "yield")]
   property obj6_yield : Yield
 
+  @[JSON::Field(key: "type")]
+  property purple_type : TypeClass
+
+  property try : Try
+
+  property typealias : Typealias
+
   property typedef : Typedef
 
   property typeid : Typeid
@@ -2945,6 +2949,13 @@ class Obj6
   property yes : Yes
 end
 
+class Type
+  include JSON::Serializable
+
+  @[JSON::Field(key: "Type")]
+  property type_type : Int64
+end
+
 class Typeof
   include JSON::Serializable
 
@@ -2980,6 +2991,25 @@ class Yield
   property yield_yield : Int64
 end
 
+class TypeClass
+  include JSON::Serializable
+
+  @[JSON::Field(key: "type")]
+  property type_type : Int64
+end
+
+class Try
+  include JSON::Serializable
+
+  property try : Int64
+end
+
+class Typealias
+  include JSON::Serializable
+
+  property typealias : Int64
+end
+
 class Typedef
   include JSON::Serializable
 
diff --git a/base/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs
index 548dcd8..43c97d9 100644
--- a/base/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs
+++ b/head/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -1378,6 +1378,9 @@ namespace QuickType
         [JsonProperty("list", Required = Required.Always)]
         public List List { get; set; }
 
+        [JsonProperty("LocalDate", Required = Required.Always)]
+        public LocalDate LocalDate { get; set; }
+
         [JsonProperty("Locale", Required = Required.Always)]
         public Locale Locale { get; set; }
 
@@ -1404,12 +1407,6 @@ namespace QuickType
 
         [JsonProperty("module", Required = Required.Always)]
         public Module Module { get; set; }
-
-        [JsonProperty("mutable", Required = Required.Always)]
-        public Mutable Mutable { get; set; }
-
-        [JsonProperty("mutating", Required = Required.Always)]
-        public Mutating Mutating { get; set; }
     }
 
     public partial class Function
@@ -1736,6 +1733,12 @@ namespace QuickType
         public long ListList { get; set; }
     }
 
+    public partial class LocalDate
+    {
+        [JsonProperty("LocalDate", Required = Required.Always)]
+        public long LocalDateLocalDate { get; set; }
+    }
+
     public partial class Locale
     {
         [JsonProperty("Locale", Required = Required.Always)]
@@ -1790,23 +1793,17 @@ namespace QuickType
         public long ModuleModule { get; set; }
     }
 
-    public partial class Mutable
-    {
-        [JsonProperty("mutable", Required = Required.Always)]
-        public long MutableMutable { get; set; }
-    }
-
-    public partial class Mutating
-    {
-        [JsonProperty("mutating", Required = Required.Always)]
-        public long MutatingMutating { get; set; }
-    }
-
     public partial class Obj4
     {
         [JsonProperty("dummy", Required = Required.Always)]
         public long Dummy { get; set; }
 
+        [JsonProperty("mutable", Required = Required.Always)]
+        public Mutable Mutable { get; set; }
+
+        [JsonProperty("mutating", Required = Required.Always)]
+        public Mutating Mutating { get; set; }
+
         [JsonProperty("namespace", Required = Required.Always)]
         public Namespace Namespace { get; set; }
 
@@ -1879,9 +1876,6 @@ namespace QuickType
         [JsonProperty("protocol", Required = Required.Always)]
         public ProtocolClass Obj4Protocol { get; set; }
 
-        [JsonProperty("required", Required = Required.Always)]
-        public RequiredClass Obj4Required { get; set; }
-
         [JsonProperty("object", Required = Required.Always)]
         public Object Object { get; set; }
 
@@ -1900,6 +1894,12 @@ namespace QuickType
         [JsonProperty("of", Required = Required.Always)]
         public Of Of { get; set; }
 
+        [JsonProperty("OffsetDateTime", Required = Required.Always)]
+        public OffsetDateTime OffsetDateTime { get; set; }
+
+        [JsonProperty("OffsetTime", Required = Required.Always)]
+        public OffsetTime OffsetTime { get; set; }
+
         [JsonProperty("oneway", Required = Required.Always)]
         public Oneway Oneway { get; set; }
 
@@ -1989,15 +1989,18 @@ namespace QuickType
 
         [JsonProperty("reinterpret_cast", Required = Required.Always)]
         public ReinterpretCast ReinterpretCast { get; set; }
+    }
 
-        [JsonProperty("repeat", Required = Required.Always)]
-        public Repeat Repeat { get; set; }
-
-        [JsonProperty("require", Required = Required.Always)]
-        public Require Require { get; set; }
+    public partial class Mutable
+    {
+        [JsonProperty("mutable", Required = Required.Always)]
+        public long MutableMutable { get; set; }
+    }
 
-        [JsonProperty("requires", Required = Required.Always)]
-        public Requires Requires { get; set; }
+    public partial class Mutating
+    {
+        [JsonProperty("mutating", Required = Required.Always)]
+        public long MutatingMutating { get; set; }
     }
 
     public partial class Namespace
@@ -2144,12 +2147,6 @@ namespace QuickType
         public long Protocol { get; set; }
     }
 
-    public partial class RequiredClass
-    {
-        [JsonProperty("required", Required = Required.Always)]
-        public long RequiredRequired { get; set; }
-    }
-
     public partial class Object
     {
         [JsonProperty("object", Required = Required.Always)]
@@ -2186,6 +2183,18 @@ namespace QuickType
         public long OfOf { get; set; }
     }
 
+    public partial class OffsetDateTime
+    {
+        [JsonProperty("OffsetDateTime", Required = Required.Always)]
+        public long OffsetDateTimeOffsetDateTime { get; set; }
+    }
+
+    public partial class OffsetTime
+    {
+        [JsonProperty("OffsetTime", Required = Required.Always)]
+        public long OffsetTimeOffsetTime { get; set; }
+    }
+
     public partial class Oneway
     {
         [JsonProperty("oneway", Required = Required.Always)]
@@ -2366,24 +2375,6 @@ namespace QuickType
         public long ReinterpretCastReinterpretCast { get; set; }
     }
 
-    public partial class Repeat
-    {
-        [JsonProperty("repeat", Required = Required.Always)]
-        public long RepeatRepeat { get; set; }
-    }
-
-    public partial class Require
-    {
-        [JsonProperty("require", Required = Required.Always)]
-        public long RequireRequire { get; set; }
-    }
-
-    public partial class Requires
-    {
-        [JsonProperty("requires", Required = Required.Always)]
-        public long RequiresRequires { get; set; }
-    }
-
     public partial class Obj5
     {
         [JsonProperty("dummy", Required = Required.Always)]
@@ -2392,6 +2383,9 @@ namespace QuickType
         [JsonProperty("KSerializer", Required = Required.Always)]
         public KSerializer KSerializer { get; set; }
 
+        [JsonProperty("required", Required = Required.Always)]
+        public RequiredClass Obj5Required { get; set; }
+
         [JsonProperty("self", Required = Required.Always)]
         public SelfClass Obj5Self { get; set; }
 
@@ -2404,12 +2398,18 @@ namespace QuickType
         [JsonProperty("true", Required = Required.Always)]
         public TrueClass Obj5True { get; set; }
 
-        [JsonProperty("type", Required = Required.Always)]
-        public Obj5Type Obj5Type { get; set; }
-
         [JsonProperty("PrimitiveKind", Required = Required.Always)]
         public PrimitiveKind PrimitiveKind { get; set; }
 
+        [JsonProperty("repeat", Required = Required.Always)]
+        public Repeat Repeat { get; set; }
+
+        [JsonProperty("require", Required = Required.Always)]
+        public Require Require { get; set; }
+
+        [JsonProperty("requires", Required = Required.Always)]
+        public Requires Requires { get; set; }
+
         [JsonProperty("restrict", Required = Required.Always)]
         public Restrict Restrict { get; set; }
 
@@ -2571,15 +2571,6 @@ namespace QuickType
 
         [JsonProperty("True", Required = Required.Always)]
         public True True { get; set; }
-
-        [JsonProperty("try", Required = Required.Always)]
-        public Try Try { get; set; }
-
-        [JsonProperty("Type", Required = Required.Always)]
-        public TypeClass Type { get; set; }
-
-        [JsonProperty("typealias", Required = Required.Always)]
-        public Typealias Typealias { get; set; }
     }
 
     public partial class KSerializer
@@ -2588,6 +2579,12 @@ namespace QuickType
         public long KSerializerKSerializer { get; set; }
     }
 
+    public partial class RequiredClass
+    {
+        [JsonProperty("required", Required = Required.Always)]
+        public long RequiredRequired { get; set; }
+    }
+
     public partial class SelfClass
     {
         [JsonProperty("self", Required = Required.Always)]
@@ -2612,18 +2609,30 @@ namespace QuickType
         public long True { get; set; }
     }
 
-    public partial class Obj5Type
-    {
-        [JsonProperty("type", Required = Required.Always)]
-        public long Type { get; set; }
-    }
-
     public partial class PrimitiveKind
     {
         [JsonProperty("PrimitiveKind", Required = Required.Always)]
         public long PrimitiveKindPrimitiveKind { get; set; }
     }
 
+    public partial class Repeat
+    {
+        [JsonProperty("repeat", Required = Required.Always)]
+        public long RepeatRepeat { get; set; }
+    }
+
+    public partial class Require
+    {
+        [JsonProperty("require", Required = Required.Always)]
+        public long RequireRequire { get; set; }
+    }
+
+    public partial class Requires
+    {
+        [JsonProperty("requires", Required = Required.Always)]
+        public long RequiresRequires { get; set; }
+    }
+
     public partial class Restrict
     {
         [JsonProperty("restrict", Required = Required.Always)]
@@ -2948,28 +2957,22 @@ namespace QuickType
         public long TrueTrue { get; set; }
     }
 
-    public partial class Try
+    public partial class Obj6
     {
+        [JsonProperty("dummy", Required = Required.Always)]
+        public long Dummy { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public Obj6Type Obj6Type { get; set; }
+
         [JsonProperty("try", Required = Required.Always)]
-        public long TryTry { get; set; }
-    }
+        public Try Try { get; set; }
 
-    public partial class TypeClass
-    {
         [JsonProperty("Type", Required = Required.Always)]
-        public long Type { get; set; }
-    }
+        public TypeClass Type { get; set; }
 
-    public partial class Typealias
-    {
         [JsonProperty("typealias", Required = Required.Always)]
-        public long TypealiasTypealias { get; set; }
-    }
-
-    public partial class Obj6
-    {
-        [JsonProperty("dummy", Required = Required.Always)]
-        public long Dummy { get; set; }
+        public Typealias Typealias { get; set; }
 
         [JsonProperty("typedef", Required = Required.Always)]
         public Typedef Typedef { get; set; }
@@ -3071,6 +3074,30 @@ namespace QuickType
         public Yield Yield { get; set; }
     }
 
+    public partial class Obj6Type
+    {
+        [JsonProperty("type", Required = Required.Always)]
+        public long Type { get; set; }
+    }
+
+    public partial class Try
+    {
+        [JsonProperty("try", Required = Required.Always)]
+        public long TryTry { get; set; }
+    }
+
+    public partial class TypeClass
+    {
+        [JsonProperty("Type", Required = Required.Always)]
+        public long Type { get; set; }
+    }
+
+    public partial class Typealias
+    {
+        [JsonProperty("typealias", Required = Required.Always)]
+        public long TypealiasTypealias { get; set; }
+    }
+
     public partial class Typedef
     {
         [JsonProperty("typedef", Required = Required.Always)]
diff --git a/base/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs
index dfcc430..fa90163 100644
--- a/base/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs
+++ b/head/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -1695,6 +1695,10 @@ namespace QuickType
         [JsonPropertyName("list")]
         public List List { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("LocalDate")]
+        public LocalDate LocalDate { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("Locale")]
         public Locale Locale { get; set; }
@@ -1730,14 +1734,6 @@ namespace QuickType
         [JsonRequired]
         [JsonPropertyName("module")]
         public Module Module { get; set; }
-
-        [JsonRequired]
-        [JsonPropertyName("mutable")]
-        public Mutable Mutable { get; set; }
-
-        [JsonRequired]
-        [JsonPropertyName("mutating")]
-        public Mutating Mutating { get; set; }
     }
 
     public partial class Function
@@ -2118,6 +2114,13 @@ namespace QuickType
         public long ListList { get; set; }
     }
 
+    public partial class LocalDate
+    {
+        [JsonRequired]
+        [JsonPropertyName("LocalDate")]
+        public long LocalDateLocalDate { get; set; }
+    }
+
     public partial class Locale
     {
         [JsonRequired]
@@ -2181,25 +2184,19 @@ namespace QuickType
         public long ModuleModule { get; set; }
     }
 
-    public partial class Mutable
+    public partial class Obj4
     {
         [JsonRequired]
-        [JsonPropertyName("mutable")]
-        public long MutableMutable { get; set; }
-    }
+        [JsonPropertyName("dummy")]
+        public long Dummy { get; set; }
 
-    public partial class Mutating
-    {
         [JsonRequired]
-        [JsonPropertyName("mutating")]
-        public long MutatingMutating { get; set; }
-    }
+        [JsonPropertyName("mutable")]
+        public Mutable Mutable { get; set; }
 
-    public partial class Obj4
-    {
         [JsonRequired]
-        [JsonPropertyName("dummy")]
-        public long Dummy { get; set; }
+        [JsonPropertyName("mutating")]
+        public Mutating Mutating { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("namespace")]
@@ -2297,10 +2294,6 @@ namespace QuickType
         [JsonPropertyName("protocol")]
         public ProtocolClass Obj4Protocol { get; set; }
 
-        [JsonRequired]
-        [JsonPropertyName("required")]
-        public RequiredClass Obj4Required { get; set; }
-
         [JsonRequired]
         [JsonPropertyName("object")]
         public Object Object { get; set; }
@@ -2325,6 +2318,14 @@ namespace QuickType
         [JsonPropertyName("of")]
         public Of Of { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("OffsetDateTime")]
+        public OffsetDateTime OffsetDateTime { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("OffsetTime")]
+        public OffsetTime OffsetTime { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("oneway")]
         public Oneway Oneway { get; set; }
@@ -2444,18 +2445,20 @@ namespace QuickType
         [JsonRequired]
         [JsonPropertyName("reinterpret_cast")]
         public ReinterpretCast ReinterpretCast { get; set; }
+    }
 
+    public partial class Mutable
+    {
         [JsonRequired]
-        [JsonPropertyName("repeat")]
-        public Repeat Repeat { get; set; }
-
-        [JsonRequired]
-        [JsonPropertyName("require")]
-        public Require Require { get; set; }
+        [JsonPropertyName("mutable")]
+        public long MutableMutable { get; set; }
+    }
 
+    public partial class Mutating
+    {
         [JsonRequired]
-        [JsonPropertyName("requires")]
-        public Requires Requires { get; set; }
+        [JsonPropertyName("mutating")]
+        public long MutatingMutating { get; set; }
     }
 
     public partial class Namespace
@@ -2626,13 +2629,6 @@ namespace QuickType
         public long Protocol { get; set; }
     }
 
-    public partial class RequiredClass
-    {
-        [JsonRequired]
-        [JsonPropertyName("required")]
-        public long RequiredRequired { get; set; }
-    }
-
     public partial class Object
     {
         [JsonRequired]
@@ -2675,6 +2671,20 @@ namespace QuickType
         public long OfOf { get; set; }
     }
 
+    public partial class OffsetDateTime
+    {
+        [JsonRequired]
+        [JsonPropertyName("OffsetDateTime")]
+        public long OffsetDateTimeOffsetDateTime { get; set; }
+    }
+
+    public partial class OffsetTime
+    {
+        [JsonRequired]
+        [JsonPropertyName("OffsetTime")]
+        public long OffsetTimeOffsetTime { get; set; }
+    }
+
     public partial class Oneway
     {
         [JsonRequired]
@@ -2885,27 +2895,6 @@ namespace QuickType
         public long ReinterpretCastReinterpretCast { get; set; }
     }
 
-    public partial class Repeat
-    {
-        [JsonRequired]
-        [JsonPropertyName("repeat")]
-        public long RepeatRepeat { get; set; }
-    }
-
-    public partial class Require
-    {
-        [JsonRequired]
-        [JsonPropertyName("require")]
-        public long RequireRequire { get; set; }
-    }
-
-    public partial class Requires
-    {
-        [JsonRequired]
-        [JsonPropertyName("requires")]
-        public long RequiresRequires { get; set; }
-    }
-
     public partial class Obj5
     {
         [JsonRequired]
@@ -2916,6 +2905,10 @@ namespace QuickType
         [JsonPropertyName("KSerializer")]
         public KSerializer KSerializer { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("required")]
+        public RequiredClass Obj5Required { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("self")]
         public SelfClass Obj5Self { get; set; }
@@ -2932,14 +2925,22 @@ namespace QuickType
         [JsonPropertyName("true")]
         public TrueClass Obj5True { get; set; }
 
-        [JsonRequired]
-        [JsonPropertyName("type")]
-        public Obj5Type Obj5Type { get; set; }
-
         [JsonRequired]
         [JsonPropertyName("PrimitiveKind")]
         public PrimitiveKind PrimitiveKind { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("repeat")]
+        public Repeat Repeat { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("require")]
+        public Require Require { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("requires")]
+        public Requires Requires { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("restrict")]
         public Restrict Restrict { get; set; }
@@ -3155,18 +3156,6 @@ namespace QuickType
         [JsonRequired]
         [JsonPropertyName("True")]
         public True True { get; set; }
-
-        [JsonRequired]
-        [JsonPropertyName("try")]
-        public Try Try { get; set; }
-
-        [JsonRequired]
-        [JsonPropertyName("Type")]
-        public TypeClass Type { get; set; }
-
-        [JsonRequired]
-        [JsonPropertyName("typealias")]
-        public Typealias Typealias { get; set; }
     }
 
     public partial class KSerializer
@@ -3176,6 +3165,13 @@ namespace QuickType
         public long KSerializerKSerializer { get; set; }
     }
 
+    public partial class RequiredClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("required")]
+        public long RequiredRequired { get; set; }
+    }
+
     public partial class SelfClass
     {
         [JsonRequired]
@@ -3204,18 +3200,32 @@ namespace QuickType
         public long True { get; set; }
     }
 
-    public partial class Obj5Type
+    public partial class PrimitiveKind
     {
         [JsonRequired]
-        [JsonPropertyName("type")]
-        public long Type { get; set; }
+        [JsonPropertyName("PrimitiveKind")]
+        public long PrimitiveKindPrimitiveKind { get; set; }
     }
 
-    public partial class PrimitiveKind
+    public partial class Repeat
     {
         [JsonRequired]
-        [JsonPropertyName("PrimitiveKind")]
-        public long PrimitiveKindPrimitiveKind { get; set; }
+        [JsonPropertyName("repeat")]
+        public long RepeatRepeat { get; set; }
+    }
+
+    public partial class Require
+    {
+        [JsonRequired]
+        [JsonPropertyName("require")]
+        public long RequireRequire { get; set; }
+    }
+
+    public partial class Requires
+    {
+        [JsonRequired]
+        [JsonPropertyName("requires")]
+        public long RequiresRequires { get; set; }
     }
 
     public partial class Restrict
@@ -3596,32 +3606,27 @@ namespace QuickType
         public long TrueTrue { get; set; }
     }
 
-    public partial class Try
+    public partial class Obj6
     {
+        [JsonRequired]
+        [JsonPropertyName("dummy")]
+        public long Dummy { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("type")]
+        public Obj6Type Obj6Type { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("try")]
-        public long TryTry { get; set; }
-    }
+        public Try Try { get; set; }
 
-    public partial class TypeClass
-    {
         [JsonRequired]
         [JsonPropertyName("Type")]
-        public long Type { get; set; }
-    }
+        public TypeClass Type { get; set; }
 
-    public partial class Typealias
-    {
         [JsonRequired]
         [JsonPropertyName("typealias")]
-        public long TypealiasTypealias { get; set; }
-    }
-
-    public partial class Obj6
-    {
-        [JsonRequired]
-        [JsonPropertyName("dummy")]
-        public long Dummy { get; set; }
+        public Typealias Typealias { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("typedef")]
@@ -3756,6 +3761,34 @@ namespace QuickType
         public Yield Yield { get; set; }
     }
 
+    public partial class Obj6Type
+    {
+        [JsonRequired]
+        [JsonPropertyName("type")]
+        public long Type { get; set; }
+    }
+
+    public partial class Try
+    {
+        [JsonRequired]
+        [JsonPropertyName("try")]
+        public long TryTry { get; set; }
+    }
+
+    public partial class TypeClass
+    {
+        [JsonRequired]
+        [JsonPropertyName("Type")]
+        public long Type { get; set; }
+    }
+
+    public partial class Typealias
+    {
+        [JsonRequired]
+        [JsonPropertyName("typealias")]
+        public long TypealiasTypealias { get; set; }
+    }
+
     public partial class Typedef
     {
         [JsonRequired]
diff --git a/base/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
index 7c142ce..7780fea 100644
--- a/base/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
+++ b/head/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -1378,6 +1378,9 @@ namespace QuickType
         [JsonProperty("list", Required = Required.Always)]
         public List List { get; set; }
 
+        [JsonProperty("LocalDate", Required = Required.Always)]
+        public LocalDate LocalDate { get; set; }
+
         [JsonProperty("Locale", Required = Required.Always)]
         public Locale Locale { get; set; }
 
@@ -1404,12 +1407,6 @@ namespace QuickType
 
         [JsonProperty("module", Required = Required.Always)]
         public Module Module { get; set; }
-
-        [JsonProperty("mutable", Required = Required.Always)]
-        public Mutable Mutable { get; set; }
-
-        [JsonProperty("mutating", Required = Required.Always)]
-        public Mutating Mutating { get; set; }
     }
 
     public partial record Function
@@ -1736,6 +1733,12 @@ namespace QuickType
         public long ListList { get; set; }
     }
 
+    public partial record LocalDate
+    {
+        [JsonProperty("LocalDate", Required = Required.Always)]
+        public long LocalDateLocalDate { get; set; }
+    }
+
     public partial record Locale
     {
         [JsonProperty("Locale", Required = Required.Always)]
@@ -1790,23 +1793,17 @@ namespace QuickType
         public long ModuleModule { get; set; }
     }
 
-    public partial record Mutable
-    {
-        [JsonProperty("mutable", Required = Required.Always)]
-        public long MutableMutable { get; set; }
-    }
-
-    public partial record Mutating
-    {
-        [JsonProperty("mutating", Required = Required.Always)]
-        public long MutatingMutating { get; set; }
-    }
-
     public partial record Obj4
     {
         [JsonProperty("dummy", Required = Required.Always)]
         public long Dummy { get; set; }
 
+        [JsonProperty("mutable", Required = Required.Always)]
+        public Mutable Mutable { get; set; }
+
+        [JsonProperty("mutating", Required = Required.Always)]
+        public Mutating Mutating { get; set; }
+
         [JsonProperty("namespace", Required = Required.Always)]
         public Namespace Namespace { get; set; }
 
@@ -1882,9 +1879,6 @@ namespace QuickType
         [JsonProperty("protocol", Required = Required.Always)]
         public ProtocolClass Obj4Protocol { get; set; }
 
-        [JsonProperty("required", Required = Required.Always)]
-        public RequiredClass Obj4Required { get; set; }
-
         [JsonProperty("object", Required = Required.Always)]
         public Object Object { get; set; }
 
@@ -1903,6 +1897,12 @@ namespace QuickType
         [JsonProperty("of", Required = Required.Always)]
         public Of Of { get; set; }
 
+        [JsonProperty("OffsetDateTime", Required = Required.Always)]
+        public OffsetDateTime OffsetDateTime { get; set; }
+
+        [JsonProperty("OffsetTime", Required = Required.Always)]
+        public OffsetTime OffsetTime { get; set; }
+
         [JsonProperty("oneway", Required = Required.Always)]
         public Oneway Oneway { get; set; }
 
@@ -1989,15 +1989,18 @@ namespace QuickType
 
         [JsonProperty("reinterpret_cast", Required = Required.Always)]
         public ReinterpretCast ReinterpretCast { get; set; }
+    }
 
-        [JsonProperty("repeat", Required = Required.Always)]
-        public Repeat Repeat { get; set; }
-
-        [JsonProperty("require", Required = Required.Always)]
-        public Require Require { get; set; }
+    public partial record Mutable
+    {
+        [JsonProperty("mutable", Required = Required.Always)]
+        public long MutableMutable { get; set; }
+    }
 
-        [JsonProperty("requires", Required = Required.Always)]
-        public Requires Requires { get; set; }
+    public partial record Mutating
+    {
+        [JsonProperty("mutating", Required = Required.Always)]
+        public long MutatingMutating { get; set; }
     }
 
     public partial record Namespace
@@ -2150,12 +2153,6 @@ namespace QuickType
         public long Protocol { get; set; }
     }
 
-    public partial record RequiredClass
-    {
-        [JsonProperty("required", Required = Required.Always)]
-        public long RequiredRequired { get; set; }
-    }
-
     public partial record Object
     {
         [JsonProperty("object", Required = Required.Always)]
@@ -2192,6 +2189,18 @@ namespace QuickType
         public long OfOf { get; set; }
     }
 
+    public partial record OffsetDateTime
+    {
+        [JsonProperty("OffsetDateTime", Required = Required.Always)]
+        public long OffsetDateTimeOffsetDateTime { get; set; }
+    }
+
+    public partial record OffsetTime
+    {
+        [JsonProperty("OffsetTime", Required = Required.Always)]
+        public long OffsetTimeOffsetTime { get; set; }
+    }
+
     public partial record Oneway
     {
         [JsonProperty("oneway", Required = Required.Always)]
@@ -2366,24 +2375,6 @@ namespace QuickType
         public long ReinterpretCastReinterpretCast { get; set; }
     }
 
-    public partial record Repeat
-    {
-        [JsonProperty("repeat", Required = Required.Always)]
-        public long RepeatRepeat { get; set; }
-    }
-
-    public partial record Require
-    {
-        [JsonProperty("require", Required = Required.Always)]
-        public long RequireRequire { get; set; }
-    }
-
-    public partial record Requires
-    {
-        [JsonProperty("requires", Required = Required.Always)]
-        public long RequiresRequires { get; set; }
-    }
-
     public partial record Obj5
     {
         [JsonProperty("dummy", Required = Required.Always)]
@@ -2392,6 +2383,9 @@ namespace QuickType
         [JsonProperty("KSerializer", Required = Required.Always)]
         public KSerializer KSerializer { get; set; }
 
+        [JsonProperty("required", Required = Required.Always)]
+        public RequiredClass Obj5Required { get; set; }
+
         [JsonProperty("self", Required = Required.Always)]
         public SelfClass Obj5Self { get; set; }
 
@@ -2404,12 +2398,18 @@ namespace QuickType
         [JsonProperty("true", Required = Required.Always)]
         public TrueClass Obj5True { get; set; }
 
-        [JsonProperty("type", Required = Required.Always)]
-        public Obj5Type Obj5Type { get; set; }
-
         [JsonProperty("PrimitiveKind", Required = Required.Always)]
         public PrimitiveKind PrimitiveKind { get; set; }
 
+        [JsonProperty("repeat", Required = Required.Always)]
+        public Repeat Repeat { get; set; }
+
+        [JsonProperty("require", Required = Required.Always)]
+        public Require Require { get; set; }
+
+        [JsonProperty("requires", Required = Required.Always)]
+        public Requires Requires { get; set; }
+
         [JsonProperty("restrict", Required = Required.Always)]
         public Restrict Restrict { get; set; }
 
@@ -2571,15 +2571,6 @@ namespace QuickType
 
         [JsonProperty("True", Required = Required.Always)]
         public True True { get; set; }
-
-        [JsonProperty("try", Required = Required.Always)]
-        public Try Try { get; set; }
-
-        [JsonProperty("Type", Required = Required.Always)]
-        public TypeClass Type { get; set; }
-
-        [JsonProperty("typealias", Required = Required.Always)]
-        public Typealias Typealias { get; set; }
     }
 
     public partial record KSerializer
@@ -2588,6 +2579,12 @@ namespace QuickType
         public long KSerializerKSerializer { get; set; }
     }
 
+    public partial record RequiredClass
+    {
+        [JsonProperty("required", Required = Required.Always)]
+        public long RequiredRequired { get; set; }
+    }
+
     public partial record SelfClass
     {
         [JsonProperty("self", Required = Required.Always)]
@@ -2612,18 +2609,30 @@ namespace QuickType
         public long True { get; set; }
     }
 
-    public partial record Obj5Type
-    {
-        [JsonProperty("type", Required = Required.Always)]
-        public long Type { get; set; }
-    }
-
     public partial record PrimitiveKind
     {
         [JsonProperty("PrimitiveKind", Required = Required.Always)]
         public long PrimitiveKindPrimitiveKind { get; set; }
     }
 
+    public partial record Repeat
+    {
+        [JsonProperty("repeat", Required = Required.Always)]
+        public long RepeatRepeat { get; set; }
+    }
+
+    public partial record Require
+    {
+        [JsonProperty("require", Required = Required.Always)]
+        public long RequireRequire { get; set; }
+    }
+
+    public partial record Requires
+    {
+        [JsonProperty("requires", Required = Required.Always)]
+        public long RequiresRequires { get; set; }
+    }
+
     public partial record Restrict
     {
         [JsonProperty("restrict", Required = Required.Always)]
@@ -2948,28 +2957,22 @@ namespace QuickType
         public long TrueTrue { get; set; }
     }
 
-    public partial record Try
+    public partial record Obj6
     {
+        [JsonProperty("dummy", Required = Required.Always)]
+        public long Dummy { get; set; }
+
+        [JsonProperty("type", Required = Required.Always)]
+        public Obj6Type Obj6Type { get; set; }
+
         [JsonProperty("try", Required = Required.Always)]
-        public long TryTry { get; set; }
-    }
+        public Try Try { get; set; }
 
-    public partial record TypeClass
-    {
         [JsonProperty("Type", Required = Required.Always)]
-        public long Type { get; set; }
-    }
+        public TypeClass Type { get; set; }
 
-    public partial record Typealias
-    {
         [JsonProperty("typealias", Required = Required.Always)]
-        public long TypealiasTypealias { get; set; }
-    }
-
-    public partial record Obj6
-    {
-        [JsonProperty("dummy", Required = Required.Always)]
-        public long Dummy { get; set; }
+        public Typealias Typealias { get; set; }
 
         [JsonProperty("typedef", Required = Required.Always)]
         public Typedef Typedef { get; set; }
@@ -3071,6 +3074,30 @@ namespace QuickType
         public Yield Yield { get; set; }
     }
 
+    public partial record Obj6Type
+    {
+        [JsonProperty("type", Required = Required.Always)]
+        public long Type { get; set; }
+    }
+
+    public partial record Try
+    {
+        [JsonProperty("try", Required = Required.Always)]
+        public long TryTry { get; set; }
+    }
+
+    public partial record TypeClass
+    {
+        [JsonProperty("Type", Required = Required.Always)]
+        public long Type { get; set; }
+    }
+
+    public partial record Typealias
+    {
+        [JsonProperty("typealias", Required = Required.Always)]
+        public long TypealiasTypealias { get; set; }
+    }
+
     public partial record Typedef
     {
         [JsonProperty("typedef", Required = Required.Always)]
diff --git a/base/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart b/head/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
index 58b1525..e9faa0c 100644
--- a/base/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
@@ -2697,6 +2697,7 @@ class Obj3 {
     final Left left;
     final Let let;
     final ListClass list;
+    final LocalDate localDate;
     final Locale locale;
     final Lock lock;
     final Long long;
@@ -2706,8 +2707,6 @@ class Obj3 {
     final MarshalJson marshalJson;
     final MetadataPropertyHandling metadataPropertyHandling;
     final Module module;
-    final Mutable mutable;
-    final Mutating mutating;
     final Get obj3Get;
     final HashCode obj3HashCode;
     final If obj3If;
@@ -2765,6 +2764,7 @@ class Obj3 {
         required this.left,
         required this.let,
         required this.list,
+        required this.localDate,
         required this.locale,
         required this.lock,
         required this.long,
@@ -2774,8 +2774,6 @@ class Obj3 {
         required this.marshalJson,
         required this.metadataPropertyHandling,
         required this.module,
-        required this.mutable,
-        required this.mutating,
         required this.obj3Get,
         required this.obj3HashCode,
         required this.obj3If,
@@ -2834,6 +2832,7 @@ class Obj3 {
         left: Left.fromJson(json["left"]),
         let: Let.fromJson(json["let"]),
         list: ListClass.fromJson(json["list"]),
+        localDate: LocalDate.fromJson(json["LocalDate"]),
         locale: Locale.fromJson(json["Locale"]),
         lock: Lock.fromJson(json["lock"]),
         long: Long.fromJson(json["long"]),
@@ -2843,8 +2842,6 @@ class Obj3 {
         marshalJson: MarshalJson.fromJson(json["MarshalJSON"]),
         metadataPropertyHandling: MetadataPropertyHandling.fromJson(json["metadata_property_handling"]),
         module: Module.fromJson(json["module"]),
-        mutable: Mutable.fromJson(json["mutable"]),
-        mutating: Mutating.fromJson(json["mutating"]),
         obj3Get: Get.fromJson(json["get"]),
         obj3HashCode: HashCode.fromJson(json["hashCode"]),
         obj3If: If.fromJson(json["if"]),
@@ -2903,6 +2900,7 @@ class Obj3 {
         "left": left.toJson(),
         "let": let.toJson(),
         "list": list.toJson(),
+        "LocalDate": localDate.toJson(),
         "Locale": locale.toJson(),
         "lock": lock.toJson(),
         "long": long.toJson(),
@@ -2912,8 +2910,6 @@ class Obj3 {
         "MarshalJSON": marshalJson.toJson(),
         "metadata_property_handling": metadataPropertyHandling.toJson(),
         "module": module.toJson(),
-        "mutable": mutable.toJson(),
-        "mutating": mutating.toJson(),
         "get": obj3Get.toJson(),
         "hashCode": obj3HashCode.toJson(),
         "if": obj3If.toJson(),
@@ -3646,6 +3642,22 @@ class ListClass {
     };
 }
 
+class LocalDate {
+    final int localDate;
+
+    LocalDate({
+        required this.localDate,
+    });
+
+    factory LocalDate.fromJson(Map<String, dynamic> json) => LocalDate(
+        localDate: json["LocalDate"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "LocalDate": localDate,
+    };
+}
+
 class Locale {
     final int locale;
 
@@ -3790,38 +3802,6 @@ class Module {
     };
 }
 
-class Mutable {
-    final int mutable;
-
-    Mutable({
-        required this.mutable,
-    });
-
-    factory Mutable.fromJson(Map<String, dynamic> json) => Mutable(
-        mutable: json["mutable"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "mutable": mutable,
-    };
-}
-
-class Mutating {
-    final int mutating;
-
-    Mutating({
-        required this.mutating,
-    });
-
-    factory Mutating.fromJson(Map<String, dynamic> json) => Mutating(
-        mutating: json["mutating"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "mutating": mutating,
-    };
-}
-
 class Get {
     final int getGet;
 
@@ -3968,6 +3948,8 @@ class Is {
 
 class Obj4 {
     final int dummy;
+    final Mutable mutable;
+    final Mutating mutating;
     final Namespace namespace;
     final Native native;
     final Newtonsoft newtonsoft;
@@ -3998,6 +3980,8 @@ class Obj4 {
     final ObjectReader objectReader;
     final ObjectWriter objectWriter;
     final Of of;
+    final OffsetDateTime offsetDateTime;
+    final OffsetTime offsetTime;
     final Oneway oneway;
     final Open open;
     final Optional optional;
@@ -4028,13 +4012,11 @@ class Obj4 {
     final RegExpClass regExp;
     final Register register;
     final ReinterpretCast reinterpretCast;
-    final Repeat repeat;
-    final Require require;
-    final Required required;
-    final Requires requires;
 
     Obj4({
         required this.dummy,
+        required this.mutable,
+        required this.mutating,
         required this.namespace,
         required this.native,
         required this.newtonsoft,
@@ -4065,6 +4047,8 @@ class Obj4 {
         required this.objectReader,
         required this.objectWriter,
         required this.of,
+        required this.offsetDateTime,
+        required this.offsetTime,
         required this.oneway,
         required this.open,
         required this.optional,
@@ -4095,14 +4079,12 @@ class Obj4 {
         required this.regExp,
         required this.register,
         required this.reinterpretCast,
-        required this.repeat,
-        required this.require,
-        required this.required,
-        required this.requires,
     });
 
     factory Obj4.fromJson(Map<String, dynamic> json) => Obj4(
         dummy: json["dummy"],
+        mutable: Mutable.fromJson(json["mutable"]),
+        mutating: Mutating.fromJson(json["mutating"]),
         namespace: Namespace.fromJson(json["namespace"]),
         native: Native.fromJson(json["native"]),
         newtonsoft: Newtonsoft.fromJson(json["newtonsoft"]),
@@ -4133,6 +4115,8 @@ class Obj4 {
         objectReader: ObjectReader.fromJson(json["ObjectReader"]),
         objectWriter: ObjectWriter.fromJson(json["ObjectWriter"]),
         of: Of.fromJson(json["of"]),
+        offsetDateTime: OffsetDateTime.fromJson(json["OffsetDateTime"]),
+        offsetTime: OffsetTime.fromJson(json["OffsetTime"]),
         oneway: Oneway.fromJson(json["oneway"]),
         open: Open.fromJson(json["open"]),
         optional: Optional.fromJson(json["optional"]),
@@ -4163,14 +4147,12 @@ class Obj4 {
         regExp: RegExpClass.fromJson(json["RegExp"]),
         register: Register.fromJson(json["register"]),
         reinterpretCast: ReinterpretCast.fromJson(json["reinterpret_cast"]),
-        repeat: Repeat.fromJson(json["repeat"]),
-        require: Require.fromJson(json["require"]),
-        required: Required.fromJson(json["required"]),
-        requires: Requires.fromJson(json["requires"]),
     );
 
     Map<String, dynamic> toJson() => {
         "dummy": dummy,
+        "mutable": mutable.toJson(),
+        "mutating": mutating.toJson(),
         "namespace": namespace.toJson(),
         "native": native.toJson(),
         "newtonsoft": newtonsoft.toJson(),
@@ -4201,6 +4183,8 @@ class Obj4 {
         "ObjectReader": objectReader.toJson(),
         "ObjectWriter": objectWriter.toJson(),
         "of": of.toJson(),
+        "OffsetDateTime": offsetDateTime.toJson(),
+        "OffsetTime": offsetTime.toJson(),
         "oneway": oneway.toJson(),
         "open": open.toJson(),
         "optional": optional.toJson(),
@@ -4231,10 +4215,38 @@ class Obj4 {
         "RegExp": regExp.toJson(),
         "register": register.toJson(),
         "reinterpret_cast": reinterpretCast.toJson(),
-        "repeat": repeat.toJson(),
-        "require": require.toJson(),
-        "required": required.toJson(),
-        "requires": requires.toJson(),
+    };
+}
+
+class Mutable {
+    final int mutable;
+
+    Mutable({
+        required this.mutable,
+    });
+
+    factory Mutable.fromJson(Map<String, dynamic> json) => Mutable(
+        mutable: json["mutable"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "mutable": mutable,
+    };
+}
+
+class Mutating {
+    final int mutating;
+
+    Mutating({
+        required this.mutating,
+    });
+
+    factory Mutating.fromJson(Map<String, dynamic> json) => Mutating(
+        mutating: json["mutating"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "mutating": mutating,
     };
 }
 
@@ -4718,6 +4730,38 @@ class Of {
     };
 }
 
+class OffsetDateTime {
+    final int offsetDateTime;
+
+    OffsetDateTime({
+        required this.offsetDateTime,
+    });
+
+    factory OffsetDateTime.fromJson(Map<String, dynamic> json) => OffsetDateTime(
+        offsetDateTime: json["OffsetDateTime"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "OffsetDateTime": offsetDateTime,
+    };
+}
+
+class OffsetTime {
+    final int offsetTime;
+
+    OffsetTime({
+        required this.offsetTime,
+    });
+
+    factory OffsetTime.fromJson(Map<String, dynamic> json) => OffsetTime(
+        offsetTime: json["OffsetTime"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "OffsetTime": offsetTime,
+    };
+}
+
 class Oneway {
     final int oneway;
 
@@ -5198,70 +5242,6 @@ class ReinterpretCast {
     };
 }
 
-class Repeat {
-    final int repeat;
-
-    Repeat({
-        required this.repeat,
-    });
-
-    factory Repeat.fromJson(Map<String, dynamic> json) => Repeat(
-        repeat: json["repeat"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "repeat": repeat,
-    };
-}
-
-class Require {
-    final int require;
-
-    Require({
-        required this.require,
-    });
-
-    factory Require.fromJson(Map<String, dynamic> json) => Require(
-        require: json["require"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "require": require,
-    };
-}
-
-class Required {
-    final int required;
-
-    Required({
-        required this.required,
-    });
-
-    factory Required.fromJson(Map<String, dynamic> json) => Required(
-        required: json["required"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "required": required,
-    };
-}
-
-class Requires {
-    final int requires;
-
-    Requires({
-        required this.requires,
-    });
-
-    factory Requires.fromJson(Map<String, dynamic> json) => Requires(
-        requires: json["requires"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "requires": requires,
-    };
-}
-
 class Obj5 {
     final int dummy;
     final KSerializer kSerializer;
@@ -5277,10 +5257,12 @@ class Obj5 {
     final ToJson obj5ToJson;
     final ToString obj5ToString;
     final True obj5True;
-    final Try obj5Try;
-    final TypeClass obj5Type;
     final PrimitiveKind primitiveKind;
     final TrueClass purpleTrue;
+    final Repeat repeat;
+    final Require require;
+    final Required required;
+    final Requires requires;
     final Restrict restrict;
     final Retain retain;
     final Rethrows rethrows;
@@ -5326,8 +5308,6 @@ class Obj5 {
     final ToDict toDict;
     final TopLevelClass topLevel;
     final Transient transient;
-    final Type type;
-    final Typealias typealias;
 
     Obj5({
         required this.dummy,
@@ -5344,10 +5324,12 @@ class Obj5 {
         required this.obj5ToJson,
         required this.obj5ToString,
         required this.obj5True,
-        required this.obj5Try,
-        required this.obj5Type,
         required this.primitiveKind,
         required this.purpleTrue,
+        required this.repeat,
+        required this.require,
+        required this.required,
+        required this.requires,
         required this.restrict,
         required this.retain,
         required this.rethrows,
@@ -5393,8 +5375,6 @@ class Obj5 {
         required this.toDict,
         required this.topLevel,
         required this.transient,
-        required this.type,
-        required this.typealias,
     });
 
     factory Obj5.fromJson(Map<String, dynamic> json) => Obj5(
@@ -5412,10 +5392,12 @@ class Obj5 {
         obj5ToJson: ToJson.fromJson(json["to_json"]),
         obj5ToString: ToString.fromJson(json["toString"]),
         obj5True: True.fromJson(json["True"]),
-        obj5Try: Try.fromJson(json["try"]),
-        obj5Type: TypeClass.fromJson(json["type"]),
         primitiveKind: PrimitiveKind.fromJson(json["PrimitiveKind"]),
         purpleTrue: TrueClass.fromJson(json["true"]),
+        repeat: Repeat.fromJson(json["repeat"]),
+        require: Require.fromJson(json["require"]),
+        required: Required.fromJson(json["required"]),
+        requires: Requires.fromJson(json["requires"]),
         restrict: Restrict.fromJson(json["restrict"]),
         retain: Retain.fromJson(json["retain"]),
         rethrows: Rethrows.fromJson(json["rethrows"]),
@@ -5461,8 +5443,6 @@ class Obj5 {
         toDict: ToDict.fromJson(json["to_dict"]),
         topLevel: TopLevelClass.fromJson(json["top_level"]),
         transient: Transient.fromJson(json["transient"]),
-        type: Type.fromJson(json["Type"]),
-        typealias: Typealias.fromJson(json["typealias"]),
     );
 
     Map<String, dynamic> toJson() => {
@@ -5480,10 +5460,12 @@ class Obj5 {
         "to_json": obj5ToJson.toJson(),
         "toString": obj5ToString.toJson(),
         "True": obj5True.toJson(),
-        "try": obj5Try.toJson(),
-        "type": obj5Type.toJson(),
         "PrimitiveKind": primitiveKind.toJson(),
         "true": purpleTrue.toJson(),
+        "repeat": repeat.toJson(),
+        "require": require.toJson(),
+        "required": required.toJson(),
+        "requires": requires.toJson(),
         "restrict": restrict.toJson(),
         "retain": retain.toJson(),
         "rethrows": rethrows.toJson(),
@@ -5529,8 +5511,6 @@ class Obj5 {
         "to_dict": toDict.toJson(),
         "top_level": topLevel.toJson(),
         "transient": transient.toJson(),
-        "Type": type.toJson(),
-        "typealias": typealias.toJson(),
     };
 }
 
@@ -5742,67 +5722,99 @@ class True {
     };
 }
 
-class Try {
-    final int tryTry;
+class PrimitiveKind {
+    final int primitiveKind;
 
-    Try({
-        required this.tryTry,
+    PrimitiveKind({
+        required this.primitiveKind,
     });
 
-    factory Try.fromJson(Map<String, dynamic> json) => Try(
-        tryTry: json["try"],
+    factory PrimitiveKind.fromJson(Map<String, dynamic> json) => PrimitiveKind(
+        primitiveKind: json["PrimitiveKind"],
     );
 
     Map<String, dynamic> toJson() => {
-        "try": tryTry,
+        "PrimitiveKind": primitiveKind,
     };
 }
 
-class TypeClass {
-    final int type;
+class TrueClass {
+    final int trueTrue;
 
-    TypeClass({
-        required this.type,
+    TrueClass({
+        required this.trueTrue,
     });
 
-    factory TypeClass.fromJson(Map<String, dynamic> json) => TypeClass(
-        type: json["type"],
+    factory TrueClass.fromJson(Map<String, dynamic> json) => TrueClass(
+        trueTrue: json["true"],
     );
 
     Map<String, dynamic> toJson() => {
-        "type": type,
+        "true": trueTrue,
     };
 }
 
-class PrimitiveKind {
-    final int primitiveKind;
+class Repeat {
+    final int repeat;
 
-    PrimitiveKind({
-        required this.primitiveKind,
+    Repeat({
+        required this.repeat,
     });
 
-    factory PrimitiveKind.fromJson(Map<String, dynamic> json) => PrimitiveKind(
-        primitiveKind: json["PrimitiveKind"],
+    factory Repeat.fromJson(Map<String, dynamic> json) => Repeat(
+        repeat: json["repeat"],
     );
 
     Map<String, dynamic> toJson() => {
-        "PrimitiveKind": primitiveKind,
+        "repeat": repeat,
     };
 }
 
-class TrueClass {
-    final int trueTrue;
+class Require {
+    final int require;
 
-    TrueClass({
-        required this.trueTrue,
+    Require({
+        required this.require,
     });
 
-    factory TrueClass.fromJson(Map<String, dynamic> json) => TrueClass(
-        trueTrue: json["true"],
+    factory Require.fromJson(Map<String, dynamic> json) => Require(
+        require: json["require"],
     );
 
     Map<String, dynamic> toJson() => {
-        "true": trueTrue,
+        "require": require,
+    };
+}
+
+class Required {
+    final int required;
+
+    Required({
+        required this.required,
+    });
+
+    factory Required.fromJson(Map<String, dynamic> json) => Required(
+        required: json["required"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "required": required,
+    };
+}
+
+class Requires {
+    final int requires;
+
+    Requires({
+        required this.requires,
+    });
+
+    factory Requires.fromJson(Map<String, dynamic> json) => Requires(
+        requires: json["requires"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "requires": requires,
     };
 }
 
@@ -6526,46 +6538,18 @@ class Transient {
     };
 }
 
-class Type {
-    final int type;
-
-    Type({
-        required this.type,
-    });
-
-    factory Type.fromJson(Map<String, dynamic> json) => Type(
-        type: json["Type"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "Type": type,
-    };
-}
-
-class Typealias {
-    final int typealias;
-
-    Typealias({
-        required this.typealias,
-    });
-
-    factory Typealias.fromJson(Map<String, dynamic> json) => Typealias(
-        typealias: json["typealias"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "typealias": typealias,
-    };
-}
-
 class Obj6 {
     final int dummy;
+    final Try obj6Try;
+    final TypeClass obj6Type;
     final Typedef obj6Typedef;
     final Var obj6Var;
     final Void obj6Void;
     final While obj6While;
     final With obj6With;
     final Yield obj6Yield;
+    final Type type;
+    final Typealias typealias;
     final Typeid typeid;
     final Typename typename;
     final Typeof typeof;
@@ -6596,12 +6580,16 @@ class Obj6 {
 
     Obj6({
         required this.dummy,
+        required this.obj6Try,
+        required this.obj6Type,
         required this.obj6Typedef,
         required this.obj6Var,
         required this.obj6Void,
         required this.obj6While,
         required this.obj6With,
         required this.obj6Yield,
+        required this.type,
+        required this.typealias,
         required this.typeid,
         required this.typename,
         required this.typeof,
@@ -6633,12 +6621,16 @@ class Obj6 {
 
     factory Obj6.fromJson(Map<String, dynamic> json) => Obj6(
         dummy: json["dummy"],
+        obj6Try: Try.fromJson(json["try"]),
+        obj6Type: TypeClass.fromJson(json["type"]),
         obj6Typedef: Typedef.fromJson(json["typedef"]),
         obj6Var: Var.fromJson(json["var"]),
         obj6Void: Void.fromJson(json["void"]),
         obj6While: While.fromJson(json["while"]),
         obj6With: With.fromJson(json["with"]),
         obj6Yield: Yield.fromJson(json["yield"]),
+        type: Type.fromJson(json["Type"]),
+        typealias: Typealias.fromJson(json["typealias"]),
         typeid: Typeid.fromJson(json["typeid"]),
         typename: Typename.fromJson(json["typename"]),
         typeof: Typeof.fromJson(json["typeof"]),
@@ -6670,12 +6662,16 @@ class Obj6 {
 
     Map<String, dynamic> toJson() => {
         "dummy": dummy,
+        "try": obj6Try.toJson(),
+        "type": obj6Type.toJson(),
         "typedef": obj6Typedef.toJson(),
         "var": obj6Var.toJson(),
         "void": obj6Void.toJson(),
         "while": obj6While.toJson(),
         "with": obj6With.toJson(),
         "yield": obj6Yield.toJson(),
+        "Type": type.toJson(),
+        "typealias": typealias.toJson(),
         "typeid": typeid.toJson(),
         "typename": typename.toJson(),
         "typeof": typeof.toJson(),
@@ -6706,6 +6702,38 @@ class Obj6 {
     };
 }
 
+class Try {
+    final int tryTry;
+
+    Try({
+        required this.tryTry,
+    });
+
+    factory Try.fromJson(Map<String, dynamic> json) => Try(
+        tryTry: json["try"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "try": tryTry,
+    };
+}
+
+class TypeClass {
+    final int type;
+
+    TypeClass({
+        required this.type,
+    });
+
+    factory TypeClass.fromJson(Map<String, dynamic> json) => TypeClass(
+        type: json["type"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "type": type,
+    };
+}
+
 class Typedef {
     final int typedefTypedef;
 
@@ -6802,6 +6830,38 @@ class Yield {
     };
 }
 
+class Type {
+    final int type;
+
+    Type({
+        required this.type,
+    });
+
+    factory Type.fromJson(Map<String, dynamic> json) => Type(
+        type: json["Type"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Type": type,
+    };
+}
+
+class Typealias {
+    final int typealias;
+
+    Typealias({
+        required this.typealias,
+    });
+
+    factory Typealias.fromJson(Map<String, dynamic> json) => Typealias(
+        typealias: json["typealias"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "typealias": typealias,
+    };
+}
+
 class Typeid {
     final int typeid;
 
diff --git a/base/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex
index d4c1775..871de12 100644
--- a/base/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex
@@ -7533,6 +7533,45 @@ defmodule ListClass do
   end
 end
 
+defmodule LocalDate do
+  @enforce_keys [:local_date]
+  defstruct [:local_date]
+
+  @type t :: %__MODULE__{
+          local_date: integer()
+        }
+
+  def decode_local_date(value) when is_integer(value), do: value
+  def decode_local_date(_), do: {:error, "Unexpected type when decoding LocalDate.local_date"}
+
+  def encode_local_date(value) when is_integer(value), do: value
+  def encode_local_date(_), do: {:error, "Unexpected type when encoding LocalDate.local_date"}
+
+  def from_map(m) do
+    %LocalDate{
+      local_date: decode_local_date(m["LocalDate"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "LocalDate" => struct.local_date,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Locale do
   @enforce_keys [:locale]
   defstruct [:locale]
@@ -7884,84 +7923,6 @@ defmodule ModuleClass do
   end
 end
 
-defmodule Mutable do
-  @enforce_keys [:mutable]
-  defstruct [:mutable]
-
-  @type t :: %__MODULE__{
-          mutable: integer()
-        }
-
-  def decode_mutable(value) when is_integer(value), do: value
-  def decode_mutable(_), do: {:error, "Unexpected type when decoding Mutable.mutable"}
-
-  def encode_mutable(value) when is_integer(value), do: value
-  def encode_mutable(_), do: {:error, "Unexpected type when encoding Mutable.mutable"}
-
-  def from_map(m) do
-    %Mutable{
-      mutable: decode_mutable(m["mutable"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "mutable" => struct.mutable,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
-defmodule Mutating do
-  @enforce_keys [:mutating]
-  defstruct [:mutating]
-
-  @type t :: %__MODULE__{
-          mutating: integer()
-        }
-
-  def decode_mutating(value) when is_integer(value), do: value
-  def decode_mutating(_), do: {:error, "Unexpected type when decoding Mutating.mutating"}
-
-  def encode_mutating(value) when is_integer(value), do: value
-  def encode_mutating(_), do: {:error, "Unexpected type when encoding Mutating.mutating"}
-
-  def from_map(m) do
-    %Mutating{
-      mutating: decode_mutating(m["mutating"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "mutating" => struct.mutating,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
 defmodule ImportClass do
   @enforce_keys [:import_import]
   defstruct [:import_import]
@@ -8041,8 +8002,8 @@ defmodule InClass do
 end
 
 defmodule Obj3 do
-  @enforce_keys [:dummy, :function, :get, :global, :go, :goto, :guard, :has_own_property, :hash_code, :hashable, :hasher, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :int_node, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_any, :json_coding_key, :json_converter, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_serializer, :json_token, :json_token_type, :json_writer, :lambda, :lazy, :left, :let, :list, :locale, :lock, :long, :long_node, :map, :map_entry, :marshal_json, :metadata_property_handling, :module, :mutable, :mutating, :obj3_import, :obj3_in]
-  defstruct [:dummy, :function, :get, :global, :go, :goto, :guard, :has_own_property, :hash_code, :hashable, :hasher, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :int_node, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_any, :json_coding_key, :json_converter, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_serializer, :json_token, :json_token_type, :json_writer, :lambda, :lazy, :left, :let, :list, :locale, :lock, :long, :long_node, :map, :map_entry, :marshal_json, :metadata_property_handling, :module, :mutable, :mutating, :obj3_import, :obj3_in]
+  @enforce_keys [:dummy, :function, :get, :global, :go, :goto, :guard, :has_own_property, :hash_code, :hashable, :hasher, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :int_node, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_any, :json_coding_key, :json_converter, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_serializer, :json_token, :json_token_type, :json_writer, :lambda, :lazy, :left, :let, :list, :local_date, :locale, :lock, :long, :long_node, :map, :map_entry, :marshal_json, :metadata_property_handling, :module, :obj3_import, :obj3_in]
+  defstruct [:dummy, :function, :get, :global, :go, :goto, :guard, :has_own_property, :hash_code, :hashable, :hasher, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :int_node, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_any, :json_coding_key, :json_converter, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_serializer, :json_token, :json_token_type, :json_writer, :lambda, :lazy, :left, :let, :list, :local_date, :locale, :lock, :long, :long_node, :map, :map_entry, :marshal_json, :metadata_property_handling, :module, :obj3_import, :obj3_in]
 
   @type t :: %__MODULE__{
           dummy: integer(),
@@ -8098,6 +8059,7 @@ defmodule Obj3 do
           left: Left.t(),
           let: Let.t(),
           list: ListClass.t(),
+          local_date: LocalDate.t(),
           locale: Locale.t(),
           lock: Lock.t(),
           long: Long.t(),
@@ -8107,8 +8069,6 @@ defmodule Obj3 do
           marshal_json: MarshalJSON.t(),
           metadata_property_handling: MetadataPropertyHandling.t(),
           module: ModuleClass.t(),
-          mutable: Mutable.t(),
-          mutating: Mutating.t(),
           obj3_import: ImportClass.t(),
           obj3_in: InClass.t()
         }
@@ -8174,6 +8134,7 @@ defmodule Obj3 do
       left: Left.from_map(m["left"]),
       let: Let.from_map(m["let"]),
       list: ListClass.from_map(m["list"]),
+      local_date: LocalDate.from_map(m["LocalDate"]),
       locale: Locale.from_map(m["Locale"]),
       lock: Lock.from_map(m["lock"]),
       long: Long.from_map(m["long"]),
@@ -8183,8 +8144,6 @@ defmodule Obj3 do
       marshal_json: MarshalJSON.from_map(m["MarshalJSON"]),
       metadata_property_handling: MetadataPropertyHandling.from_map(m["metadata_property_handling"]),
       module: ModuleClass.from_map(m["module"]),
-      mutable: Mutable.from_map(m["mutable"]),
-      mutating: Mutating.from_map(m["mutating"]),
       obj3_import: ImportClass.from_map(m["import"]),
       obj3_in: InClass.from_map(m["in"]),
     }
@@ -8251,6 +8210,7 @@ defmodule Obj3 do
       "left" => Left.to_map(struct.left),
       "let" => Let.to_map(struct.let),
       "list" => ListClass.to_map(struct.list),
+      "LocalDate" => LocalDate.to_map(struct.local_date),
       "Locale" => Locale.to_map(struct.locale),
       "lock" => Lock.to_map(struct.lock),
       "long" => Long.to_map(struct.long),
@@ -8260,8 +8220,6 @@ defmodule Obj3 do
       "MarshalJSON" => MarshalJSON.to_map(struct.marshal_json),
       "metadata_property_handling" => MetadataPropertyHandling.to_map(struct.metadata_property_handling),
       "module" => ModuleClass.to_map(struct.module),
-      "mutable" => Mutable.to_map(struct.mutable),
-      "mutating" => Mutating.to_map(struct.mutating),
       "import" => ImportClass.to_map(struct.obj3_import),
       "in" => InClass.to_map(struct.obj3_in),
     }
@@ -8274,6 +8232,84 @@ defmodule Obj3 do
   end
 end
 
+defmodule Mutable do
+  @enforce_keys [:mutable]
+  defstruct [:mutable]
+
+  @type t :: %__MODULE__{
+          mutable: integer()
+        }
+
+  def decode_mutable(value) when is_integer(value), do: value
+  def decode_mutable(_), do: {:error, "Unexpected type when decoding Mutable.mutable"}
+
+  def encode_mutable(value) when is_integer(value), do: value
+  def encode_mutable(_), do: {:error, "Unexpected type when encoding Mutable.mutable"}
+
+  def from_map(m) do
+    %Mutable{
+      mutable: decode_mutable(m["mutable"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "mutable" => struct.mutable,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule Mutating do
+  @enforce_keys [:mutating]
+  defstruct [:mutating]
+
+  @type t :: %__MODULE__{
+          mutating: integer()
+        }
+
+  def decode_mutating(value) when is_integer(value), do: value
+  def decode_mutating(_), do: {:error, "Unexpected type when decoding Mutating.mutating"}
+
+  def encode_mutating(value) when is_integer(value), do: value
+  def encode_mutating(_), do: {:error, "Unexpected type when encoding Mutating.mutating"}
+
+  def from_map(m) do
+    %Mutating{
+      mutating: decode_mutating(m["mutating"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "mutating" => struct.mutating,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Namespace do
   @enforce_keys [:namespace]
   defstruct [:namespace]
@@ -9483,6 +9519,84 @@ defmodule Of do
   end
 end
 
+defmodule OffsetDateTime do
+  @enforce_keys [:offset_date_time]
+  defstruct [:offset_date_time]
+
+  @type t :: %__MODULE__{
+          offset_date_time: integer()
+        }
+
+  def decode_offset_date_time(value) when is_integer(value), do: value
+  def decode_offset_date_time(_), do: {:error, "Unexpected type when decoding OffsetDateTime.offset_date_time"}
+
+  def encode_offset_date_time(value) when is_integer(value), do: value
+  def encode_offset_date_time(_), do: {:error, "Unexpected type when encoding OffsetDateTime.offset_date_time"}
+
+  def from_map(m) do
+    %OffsetDateTime{
+      offset_date_time: decode_offset_date_time(m["OffsetDateTime"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "OffsetDateTime" => struct.offset_date_time,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule OffsetTime do
+  @enforce_keys [:offset_time]
+  defstruct [:offset_time]
+
+  @type t :: %__MODULE__{
+          offset_time: integer()
+        }
+
+  def decode_offset_time(value) when is_integer(value), do: value
+  def decode_offset_time(_), do: {:error, "Unexpected type when decoding OffsetTime.offset_time"}
+
+  def encode_offset_time(value) when is_integer(value), do: value
+  def encode_offset_time(_), do: {:error, "Unexpected type when encoding OffsetTime.offset_time"}
+
+  def from_map(m) do
+    %OffsetTime{
+      offset_time: decode_offset_time(m["OffsetTime"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "OffsetTime" => struct.offset_time,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Oneway do
   @enforce_keys [:oneway]
   defstruct [:oneway]
@@ -10614,168 +10728,14 @@ defmodule ReinterpretCast do
   end
 end
 
-defmodule Repeat do
-  @enforce_keys [:repeat]
-  defstruct [:repeat]
-
-  @type t :: %__MODULE__{
-          repeat: integer()
-        }
-
-  def decode_repeat(value) when is_integer(value), do: value
-  def decode_repeat(_), do: {:error, "Unexpected type when decoding Repeat.repeat"}
-
-  def encode_repeat(value) when is_integer(value), do: value
-  def encode_repeat(_), do: {:error, "Unexpected type when encoding Repeat.repeat"}
-
-  def from_map(m) do
-    %Repeat{
-      repeat: decode_repeat(m["repeat"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "repeat" => struct.repeat,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
-defmodule Require do
-  @enforce_keys [:require]
-  defstruct [:require]
-
-  @type t :: %__MODULE__{
-          require: integer()
-        }
-
-  def decode_require(value) when is_integer(value), do: value
-  def decode_require(_), do: {:error, "Unexpected type when decoding Require.require"}
-
-  def encode_require(value) when is_integer(value), do: value
-  def encode_require(_), do: {:error, "Unexpected type when encoding Require.require"}
-
-  def from_map(m) do
-    %Require{
-      require: decode_require(m["require"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "require" => struct.require,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
-defmodule Required do
-  @enforce_keys [:required]
-  defstruct [:required]
-
-  @type t :: %__MODULE__{
-          required: integer()
-        }
-
-  def decode_required(value) when is_integer(value), do: value
-  def decode_required(_), do: {:error, "Unexpected type when decoding Required.required"}
-
-  def encode_required(value) when is_integer(value), do: value
-  def encode_required(_), do: {:error, "Unexpected type when encoding Required.required"}
-
-  def from_map(m) do
-    %Required{
-      required: decode_required(m["required"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "required" => struct.required,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
-defmodule Requires do
-  @enforce_keys [:requires]
-  defstruct [:requires]
-
-  @type t :: %__MODULE__{
-          requires: integer()
-        }
-
-  def decode_requires(value) when is_integer(value), do: value
-  def decode_requires(_), do: {:error, "Unexpected type when decoding Requires.requires"}
-
-  def encode_requires(value) when is_integer(value), do: value
-  def encode_requires(_), do: {:error, "Unexpected type when encoding Requires.requires"}
-
-  def from_map(m) do
-    %Requires{
-      requires: decode_requires(m["requires"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "requires" => struct.requires,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
-defmodule Obj4 do
-  @enforce_keys [:dummy, :namespace, :native, :new, :newtonsoft, :no, :no_such_method, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_error, :ns_object, :ns_string, :null, :null_node, :nullptr, :number, :obj4_nil, :obj4_none, :obj4_not, :obj4_null, :obj4_or, :obj4_protocol, :object, :object_mapper, :object_node, :object_reader, :object_writer, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires]
-  defstruct [:dummy, :namespace, :native, :new, :newtonsoft, :no, :no_such_method, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_error, :ns_object, :ns_string, :null, :null_node, :nullptr, :number, :obj4_nil, :obj4_none, :obj4_not, :obj4_null, :obj4_or, :obj4_protocol, :object, :object_mapper, :object_node, :object_reader, :object_writer, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires]
+defmodule Obj4 do
+  @enforce_keys [:dummy, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :no_such_method, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_error, :ns_object, :ns_string, :null, :null_node, :nullptr, :number, :obj4_nil, :obj4_none, :obj4_not, :obj4_null, :obj4_or, :obj4_protocol, :object, :object_mapper, :object_node, :object_reader, :object_writer, :of, :offset_date_time, :offset_time, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast]
+  defstruct [:dummy, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :no_such_method, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_error, :ns_object, :ns_string, :null, :null_node, :nullptr, :number, :obj4_nil, :obj4_none, :obj4_not, :obj4_null, :obj4_or, :obj4_protocol, :object, :object_mapper, :object_node, :object_reader, :object_writer, :of, :offset_date_time, :offset_time, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast]
 
   @type t :: %__MODULE__{
           dummy: integer(),
+          mutable: Mutable.t(),
+          mutating: Mutating.t(),
           namespace: Namespace.t(),
           native: Native.t(),
           new: New.t(),
@@ -10807,6 +10767,8 @@ defmodule Obj4 do
           object_reader: ObjectReader.t(),
           object_writer: ObjectWriter.t(),
           of: Of.t(),
+          offset_date_time: OffsetDateTime.t(),
+          offset_time: OffsetTime.t(),
           oneway: Oneway.t(),
           open: Open.t(),
           operator: Operator.t(),
@@ -10835,11 +10797,7 @@ defmodule Obj4 do
           ref: Ref.t(),
           reg_exp: RegExp.t(),
           register: Register.t(),
-          reinterpret_cast: ReinterpretCast.t(),
-          repeat: Repeat.t(),
-          require: Require.t(),
-          required: Required.t(),
-          requires: Requires.t()
+          reinterpret_cast: ReinterpretCast.t()
         }
 
   def decode_dummy(value) when is_integer(value), do: value
@@ -10851,6 +10809,8 @@ defmodule Obj4 do
   def from_map(m) do
     %Obj4{
       dummy: decode_dummy(m["dummy"]),
+      mutable: Mutable.from_map(m["mutable"]),
+      mutating: Mutating.from_map(m["mutating"]),
       namespace: Namespace.from_map(m["namespace"]),
       native: Native.from_map(m["native"]),
       new: New.from_map(m["new"]),
@@ -10882,6 +10842,8 @@ defmodule Obj4 do
       object_reader: ObjectReader.from_map(m["ObjectReader"]),
       object_writer: ObjectWriter.from_map(m["ObjectWriter"]),
       of: Of.from_map(m["of"]),
+      offset_date_time: OffsetDateTime.from_map(m["OffsetDateTime"]),
+      offset_time: OffsetTime.from_map(m["OffsetTime"]),
       oneway: Oneway.from_map(m["oneway"]),
       open: Open.from_map(m["open"]),
       operator: Operator.from_map(m["operator"]),
@@ -10911,10 +10873,6 @@ defmodule Obj4 do
       reg_exp: RegExp.from_map(m["RegExp"]),
       register: Register.from_map(m["register"]),
       reinterpret_cast: ReinterpretCast.from_map(m["reinterpret_cast"]),
-      repeat: Repeat.from_map(m["repeat"]),
-      require: Require.from_map(m["require"]),
-      required: Required.from_map(m["required"]),
-      requires: Requires.from_map(m["requires"]),
     }
   end
 
@@ -10927,6 +10885,8 @@ defmodule Obj4 do
   def to_map(struct) do
     %{
       "dummy" => struct.dummy,
+      "mutable" => Mutable.to_map(struct.mutable),
+      "mutating" => Mutating.to_map(struct.mutating),
       "namespace" => Namespace.to_map(struct.namespace),
       "native" => Native.to_map(struct.native),
       "new" => New.to_map(struct.new),
@@ -10958,6 +10918,8 @@ defmodule Obj4 do
       "ObjectReader" => ObjectReader.to_map(struct.object_reader),
       "ObjectWriter" => ObjectWriter.to_map(struct.object_writer),
       "of" => Of.to_map(struct.of),
+      "OffsetDateTime" => OffsetDateTime.to_map(struct.offset_date_time),
+      "OffsetTime" => OffsetTime.to_map(struct.offset_time),
       "oneway" => Oneway.to_map(struct.oneway),
       "open" => Open.to_map(struct.open),
       "operator" => Operator.to_map(struct.operator),
@@ -10987,10 +10949,6 @@ defmodule Obj4 do
       "RegExp" => RegExp.to_map(struct.reg_exp),
       "register" => Register.to_map(struct.register),
       "reinterpret_cast" => ReinterpretCast.to_map(struct.reinterpret_cast),
-      "repeat" => Repeat.to_map(struct.repeat),
-      "require" => Require.to_map(struct.require),
-      "required" => Required.to_map(struct.required),
-      "requires" => Requires.to_map(struct.requires),
     }
   end
 
@@ -11118,23 +11076,23 @@ defmodule TrueClass do
   end
 end
 
-defmodule TypeClass do
-  @enforce_keys [:type]
-  defstruct [:type]
+defmodule PrimitiveKind do
+  @enforce_keys [:primitive_kind]
+  defstruct [:primitive_kind]
 
   @type t :: %__MODULE__{
-          type: integer()
+          primitive_kind: integer()
         }
 
-  def decode_type(value) when is_integer(value), do: value
-  def decode_type(_), do: {:error, "Unexpected type when decoding TypeClass.type"}
+  def decode_primitive_kind(value) when is_integer(value), do: value
+  def decode_primitive_kind(_), do: {:error, "Unexpected type when decoding PrimitiveKind.primitive_kind"}
 
-  def encode_type(value) when is_integer(value), do: value
-  def encode_type(_), do: {:error, "Unexpected type when encoding TypeClass.type"}
+  def encode_primitive_kind(value) when is_integer(value), do: value
+  def encode_primitive_kind(_), do: {:error, "Unexpected type when encoding PrimitiveKind.primitive_kind"}
 
   def from_map(m) do
-    %TypeClass{
-      type: decode_type(m["type"]),
+    %PrimitiveKind{
+      primitive_kind: decode_primitive_kind(m["PrimitiveKind"]),
     }
   end
 
@@ -11146,7 +11104,7 @@ defmodule TypeClass do
 
   def to_map(struct) do
     %{
-      "type" => struct.type,
+      "PrimitiveKind" => struct.primitive_kind,
     }
   end
 
@@ -11157,23 +11115,23 @@ defmodule TypeClass do
   end
 end
 
-defmodule PrimitiveKind do
-  @enforce_keys [:primitive_kind]
-  defstruct [:primitive_kind]
+defmodule Repeat do
+  @enforce_keys [:repeat]
+  defstruct [:repeat]
 
   @type t :: %__MODULE__{
-          primitive_kind: integer()
+          repeat: integer()
         }
 
-  def decode_primitive_kind(value) when is_integer(value), do: value
-  def decode_primitive_kind(_), do: {:error, "Unexpected type when decoding PrimitiveKind.primitive_kind"}
+  def decode_repeat(value) when is_integer(value), do: value
+  def decode_repeat(_), do: {:error, "Unexpected type when decoding Repeat.repeat"}
 
-  def encode_primitive_kind(value) when is_integer(value), do: value
-  def encode_primitive_kind(_), do: {:error, "Unexpected type when encoding PrimitiveKind.primitive_kind"}
+  def encode_repeat(value) when is_integer(value), do: value
+  def encode_repeat(_), do: {:error, "Unexpected type when encoding Repeat.repeat"}
 
   def from_map(m) do
-    %PrimitiveKind{
-      primitive_kind: decode_primitive_kind(m["PrimitiveKind"]),
+    %Repeat{
+      repeat: decode_repeat(m["repeat"]),
     }
   end
 
@@ -11185,7 +11143,124 @@ defmodule PrimitiveKind do
 
   def to_map(struct) do
     %{
-      "PrimitiveKind" => struct.primitive_kind,
+      "repeat" => struct.repeat,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule Require do
+  @enforce_keys [:require]
+  defstruct [:require]
+
+  @type t :: %__MODULE__{
+          require: integer()
+        }
+
+  def decode_require(value) when is_integer(value), do: value
+  def decode_require(_), do: {:error, "Unexpected type when decoding Require.require"}
+
+  def encode_require(value) when is_integer(value), do: value
+  def encode_require(_), do: {:error, "Unexpected type when encoding Require.require"}
+
+  def from_map(m) do
+    %Require{
+      require: decode_require(m["require"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "require" => struct.require,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule Required do
+  @enforce_keys [:required]
+  defstruct [:required]
+
+  @type t :: %__MODULE__{
+          required: integer()
+        }
+
+  def decode_required(value) when is_integer(value), do: value
+  def decode_required(_), do: {:error, "Unexpected type when decoding Required.required"}
+
+  def encode_required(value) when is_integer(value), do: value
+  def encode_required(_), do: {:error, "Unexpected type when encoding Required.required"}
+
+  def from_map(m) do
+    %Required{
+      required: decode_required(m["required"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "required" => struct.required,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule Requires do
+  @enforce_keys [:requires]
+  defstruct [:requires]
+
+  @type t :: %__MODULE__{
+          requires: integer()
+        }
+
+  def decode_requires(value) when is_integer(value), do: value
+  def decode_requires(_), do: {:error, "Unexpected type when decoding Requires.requires"}
+
+  def encode_requires(value) when is_integer(value), do: value
+  def encode_requires(_), do: {:error, "Unexpected type when encoding Requires.requires"}
+
+  def from_map(m) do
+    %Requires{
+      requires: decode_requires(m["requires"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "requires" => struct.requires,
     }
   end
 
@@ -13236,128 +13311,11 @@ defmodule ToString do
   def decode_to_string(_), do: {:error, "Unexpected type when decoding ToString.to_string"}
 
   def encode_to_string(value) when is_integer(value), do: value
-  def encode_to_string(_), do: {:error, "Unexpected type when encoding ToString.to_string"}
-
-  def from_map(m) do
-    %ToString{
-      to_string: decode_to_string(m["toString"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "toString" => struct.to_string,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
-defmodule TopLevelClass do
-  @enforce_keys [:top_level]
-  defstruct [:top_level]
-
-  @type t :: %__MODULE__{
-          top_level: integer()
-        }
-
-  def decode_top_level(value) when is_integer(value), do: value
-  def decode_top_level(_), do: {:error, "Unexpected type when decoding TopLevelClass.top_level"}
-
-  def encode_top_level(value) when is_integer(value), do: value
-  def encode_top_level(_), do: {:error, "Unexpected type when encoding TopLevelClass.top_level"}
-
-  def from_map(m) do
-    %TopLevelClass{
-      top_level: decode_top_level(m["top_level"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "top_level" => struct.top_level,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
-defmodule Transient do
-  @enforce_keys [:transient]
-  defstruct [:transient]
-
-  @type t :: %__MODULE__{
-          transient: integer()
-        }
-
-  def decode_transient(value) when is_integer(value), do: value
-  def decode_transient(_), do: {:error, "Unexpected type when decoding Transient.transient"}
-
-  def encode_transient(value) when is_integer(value), do: value
-  def encode_transient(_), do: {:error, "Unexpected type when encoding Transient.transient"}
-
-  def from_map(m) do
-    %Transient{
-      transient: decode_transient(m["transient"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "transient" => struct.transient,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
-defmodule Obj5True do
-  @enforce_keys [:true_true]
-  defstruct [:true_true]
-
-  @type t :: %__MODULE__{
-          true_true: integer()
-        }
-
-  def decode_true_true(value) when is_integer(value), do: value
-  def decode_true_true(_), do: {:error, "Unexpected type when decoding Obj5True.true_true"}
-
-  def encode_true_true(value) when is_integer(value), do: value
-  def encode_true_true(_), do: {:error, "Unexpected type when encoding Obj5True.true_true"}
+  def encode_to_string(_), do: {:error, "Unexpected type when encoding ToString.to_string"}
 
   def from_map(m) do
-    %Obj5True{
-      true_true: decode_true_true(m["true"]),
+    %ToString{
+      to_string: decode_to_string(m["toString"]),
     }
   end
 
@@ -13369,7 +13327,7 @@ defmodule Obj5True do
 
   def to_map(struct) do
     %{
-      "true" => struct.true_true,
+      "toString" => struct.to_string,
     }
   end
 
@@ -13380,23 +13338,23 @@ defmodule Obj5True do
   end
 end
 
-defmodule Try do
-  @enforce_keys [:try]
-  defstruct [:try]
+defmodule TopLevelClass do
+  @enforce_keys [:top_level]
+  defstruct [:top_level]
 
   @type t :: %__MODULE__{
-          try: integer()
+          top_level: integer()
         }
 
-  def decode_try(value) when is_integer(value), do: value
-  def decode_try(_), do: {:error, "Unexpected type when decoding Try.try"}
+  def decode_top_level(value) when is_integer(value), do: value
+  def decode_top_level(_), do: {:error, "Unexpected type when decoding TopLevelClass.top_level"}
 
-  def encode_try(value) when is_integer(value), do: value
-  def encode_try(_), do: {:error, "Unexpected type when encoding Try.try"}
+  def encode_top_level(value) when is_integer(value), do: value
+  def encode_top_level(_), do: {:error, "Unexpected type when encoding TopLevelClass.top_level"}
 
   def from_map(m) do
-    %Try{
-      try: decode_try(m["try"]),
+    %TopLevelClass{
+      top_level: decode_top_level(m["top_level"]),
     }
   end
 
@@ -13408,7 +13366,7 @@ defmodule Try do
 
   def to_map(struct) do
     %{
-      "try" => struct.try,
+      "top_level" => struct.top_level,
     }
   end
 
@@ -13419,23 +13377,23 @@ defmodule Try do
   end
 end
 
-defmodule Type do
-  @enforce_keys [:type]
-  defstruct [:type]
+defmodule Transient do
+  @enforce_keys [:transient]
+  defstruct [:transient]
 
   @type t :: %__MODULE__{
-          type: integer()
+          transient: integer()
         }
 
-  def decode_type(value) when is_integer(value), do: value
-  def decode_type(_), do: {:error, "Unexpected type when decoding Type.type"}
+  def decode_transient(value) when is_integer(value), do: value
+  def decode_transient(_), do: {:error, "Unexpected type when decoding Transient.transient"}
 
-  def encode_type(value) when is_integer(value), do: value
-  def encode_type(_), do: {:error, "Unexpected type when encoding Type.type"}
+  def encode_transient(value) when is_integer(value), do: value
+  def encode_transient(_), do: {:error, "Unexpected type when encoding Transient.transient"}
 
   def from_map(m) do
-    %Type{
-      type: decode_type(m["Type"]),
+    %Transient{
+      transient: decode_transient(m["transient"]),
     }
   end
 
@@ -13447,7 +13405,7 @@ defmodule Type do
 
   def to_map(struct) do
     %{
-      "Type" => struct.type,
+      "transient" => struct.transient,
     }
   end
 
@@ -13458,23 +13416,23 @@ defmodule Type do
   end
 end
 
-defmodule Typealias do
-  @enforce_keys [:typealias]
-  defstruct [:typealias]
+defmodule Obj5True do
+  @enforce_keys [:true_true]
+  defstruct [:true_true]
 
   @type t :: %__MODULE__{
-          typealias: integer()
+          true_true: integer()
         }
 
-  def decode_typealias(value) when is_integer(value), do: value
-  def decode_typealias(_), do: {:error, "Unexpected type when decoding Typealias.typealias"}
+  def decode_true_true(value) when is_integer(value), do: value
+  def decode_true_true(_), do: {:error, "Unexpected type when decoding Obj5True.true_true"}
 
-  def encode_typealias(value) when is_integer(value), do: value
-  def encode_typealias(_), do: {:error, "Unexpected type when encoding Typealias.typealias"}
+  def encode_true_true(value) when is_integer(value), do: value
+  def encode_true_true(_), do: {:error, "Unexpected type when encoding Obj5True.true_true"}
 
   def from_map(m) do
-    %Typealias{
-      typealias: decode_typealias(m["typealias"]),
+    %Obj5True{
+      true_true: decode_true_true(m["true"]),
     }
   end
 
@@ -13486,7 +13444,7 @@ defmodule Typealias do
 
   def to_map(struct) do
     %{
-      "typealias" => struct.typealias,
+      "true" => struct.true_true,
     }
   end
 
@@ -13498,16 +13456,19 @@ defmodule Typealias do
 end
 
 defmodule Obj5 do
-  @enforce_keys [:dummy, :k_serializer, :obj5_self, :obj5_true, :obj5_type, :primitive_kind, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :sendable, :serial_descriptor, :serial_name, :serializable, :serialization_feature, :serialize, :serializer_provider, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :text_node, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_dict, :to_json, :to_string, :top_level, :transient, :true_1, :try, :type, :typealias]
-  defstruct [:dummy, :k_serializer, :obj5_self, :obj5_true, :obj5_type, :primitive_kind, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :sendable, :serial_descriptor, :serial_name, :serializable, :serialization_feature, :serialize, :serializer_provider, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :text_node, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_dict, :to_json, :to_string, :top_level, :transient, :true_1, :try, :type, :typealias]
+  @enforce_keys [:dummy, :k_serializer, :obj5_self, :obj5_true, :primitive_kind, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :sendable, :serial_descriptor, :serial_name, :serializable, :serialization_feature, :serialize, :serializer_provider, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :text_node, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_dict, :to_json, :to_string, :top_level, :transient, :true_1]
+  defstruct [:dummy, :k_serializer, :obj5_self, :obj5_true, :primitive_kind, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :sendable, :serial_descriptor, :serial_name, :serializable, :serialization_feature, :serialize, :serializer_provider, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :text_node, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_dict, :to_json, :to_string, :top_level, :transient, :true_1]
 
   @type t :: %__MODULE__{
           dummy: integer(),
           k_serializer: KSerializer.t(),
           obj5_self: SelfClass.t(),
           obj5_true: TrueClass.t(),
-          obj5_type: TypeClass.t(),
           primitive_kind: PrimitiveKind.t(),
+          repeat: Repeat.t(),
+          require: Require.t(),
+          required: Required.t(),
+          requires: Requires.t(),
           restrict: Restrict.t(),
           retain: Retain.t(),
           rethrows: Rethrows.t(),
@@ -13563,10 +13524,7 @@ defmodule Obj5 do
           to_string: ToString.t(),
           top_level: TopLevelClass.t(),
           transient: Transient.t(),
-          true_1: Obj5True.t(),
-          try: Try.t(),
-          type: Type.t(),
-          typealias: Typealias.t()
+          true_1: Obj5True.t()
         }
 
   def decode_dummy(value) when is_integer(value), do: value
@@ -13581,8 +13539,11 @@ defmodule Obj5 do
       k_serializer: KSerializer.from_map(m["KSerializer"]),
       obj5_self: SelfClass.from_map(m["self"]),
       obj5_true: TrueClass.from_map(m["True"]),
-      obj5_type: TypeClass.from_map(m["type"]),
       primitive_kind: PrimitiveKind.from_map(m["PrimitiveKind"]),
+      repeat: Repeat.from_map(m["repeat"]),
+      require: Require.from_map(m["require"]),
+      required: Required.from_map(m["required"]),
+      requires: Requires.from_map(m["requires"]),
       restrict: Restrict.from_map(m["restrict"]),
       retain: Retain.from_map(m["retain"]),
       rethrows: Rethrows.from_map(m["rethrows"]),
@@ -13639,9 +13600,6 @@ defmodule Obj5 do
       top_level: TopLevelClass.from_map(m["top_level"]),
       transient: Transient.from_map(m["transient"]),
       true_1: Obj5True.from_map(m["true"]),
-      try: Try.from_map(m["try"]),
-      type: Type.from_map(m["Type"]),
-      typealias: Typealias.from_map(m["typealias"]),
     }
   end
 
@@ -13657,8 +13615,11 @@ defmodule Obj5 do
       "KSerializer" => KSerializer.to_map(struct.k_serializer),
       "self" => SelfClass.to_map(struct.obj5_self),
       "True" => TrueClass.to_map(struct.obj5_true),
-      "type" => TypeClass.to_map(struct.obj5_type),
       "PrimitiveKind" => PrimitiveKind.to_map(struct.primitive_kind),
+      "repeat" => Repeat.to_map(struct.repeat),
+      "require" => Require.to_map(struct.require),
+      "required" => Required.to_map(struct.required),
+      "requires" => Requires.to_map(struct.requires),
       "restrict" => Restrict.to_map(struct.restrict),
       "retain" => Retain.to_map(struct.retain),
       "rethrows" => Rethrows.to_map(struct.rethrows),
@@ -13715,9 +13676,162 @@ defmodule Obj5 do
       "top_level" => TopLevelClass.to_map(struct.top_level),
       "transient" => Transient.to_map(struct.transient),
       "true" => Obj5True.to_map(struct.true_1),
-      "try" => Try.to_map(struct.try),
-      "Type" => Type.to_map(struct.type),
-      "typealias" => Typealias.to_map(struct.typealias),
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule TypeClass do
+  @enforce_keys [:type]
+  defstruct [:type]
+
+  @type t :: %__MODULE__{
+          type: integer()
+        }
+
+  def decode_type(value) when is_integer(value), do: value
+  def decode_type(_), do: {:error, "Unexpected type when decoding TypeClass.type"}
+
+  def encode_type(value) when is_integer(value), do: value
+  def encode_type(_), do: {:error, "Unexpected type when encoding TypeClass.type"}
+
+  def from_map(m) do
+    %TypeClass{
+      type: decode_type(m["type"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "type" => struct.type,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule Try do
+  @enforce_keys [:try]
+  defstruct [:try]
+
+  @type t :: %__MODULE__{
+          try: integer()
+        }
+
+  def decode_try(value) when is_integer(value), do: value
+  def decode_try(_), do: {:error, "Unexpected type when decoding Try.try"}
+
+  def encode_try(value) when is_integer(value), do: value
+  def encode_try(_), do: {:error, "Unexpected type when encoding Try.try"}
+
+  def from_map(m) do
+    %Try{
+      try: decode_try(m["try"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "try" => struct.try,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule Type do
+  @enforce_keys [:type]
+  defstruct [:type]
+
+  @type t :: %__MODULE__{
+          type: integer()
+        }
+
+  def decode_type(value) when is_integer(value), do: value
+  def decode_type(_), do: {:error, "Unexpected type when decoding Type.type"}
+
+  def encode_type(value) when is_integer(value), do: value
+  def encode_type(_), do: {:error, "Unexpected type when encoding Type.type"}
+
+  def from_map(m) do
+    %Type{
+      type: decode_type(m["Type"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "Type" => struct.type,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule Typealias do
+  @enforce_keys [:typealias]
+  defstruct [:typealias]
+
+  @type t :: %__MODULE__{
+          typealias: integer()
+        }
+
+  def decode_typealias(value) when is_integer(value), do: value
+  def decode_typealias(_), do: {:error, "Unexpected type when decoding Typealias.typealias"}
+
+  def encode_typealias(value) when is_integer(value), do: value
+  def encode_typealias(_), do: {:error, "Unexpected type when encoding Typealias.typealias"}
+
+  def from_map(m) do
+    %Typealias{
+      typealias: decode_typealias(m["typealias"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "typealias" => struct.typealias,
     }
   end
 
@@ -15016,11 +15130,15 @@ defmodule Yield do
 end
 
 defmodule Obj6 do
-  @enforce_keys [:dummy, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unmarshal_json, :unowned, :unsafe, :unsigned, :use_serializers, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
-  defstruct [:dummy, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unmarshal_json, :unowned, :unsafe, :unsigned, :use_serializers, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
+  @enforce_keys [:dummy, :obj6_type, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unmarshal_json, :unowned, :unsafe, :unsigned, :use_serializers, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
+  defstruct [:dummy, :obj6_type, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unmarshal_json, :unowned, :unsafe, :unsigned, :use_serializers, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
 
   @type t :: %__MODULE__{
           dummy: integer(),
+          obj6_type: TypeClass.t(),
+          try: Try.t(),
+          type: Type.t(),
+          typealias: Typealias.t(),
           typedef: Typedef.t(),
           typeid: Typeid.t(),
           typename: Typename.t(),
@@ -15065,6 +15183,10 @@ defmodule Obj6 do
   def from_map(m) do
     %Obj6{
       dummy: decode_dummy(m["dummy"]),
+      obj6_type: TypeClass.from_map(m["type"]),
+      try: Try.from_map(m["try"]),
+      type: Type.from_map(m["Type"]),
+      typealias: Typealias.from_map(m["typealias"]),
       typedef: Typedef.from_map(m["typedef"]),
       typeid: Typeid.from_map(m["typeid"]),
       typename: Typename.from_map(m["typename"]),
@@ -15110,6 +15232,10 @@ defmodule Obj6 do
   def to_map(struct) do
     %{
       "dummy" => struct.dummy,
+      "type" => TypeClass.to_map(struct.obj6_type),
+      "try" => Try.to_map(struct.try),
+      "Type" => Type.to_map(struct.type),
+      "typealias" => Typealias.to_map(struct.typealias),
       "typedef" => Typedef.to_map(struct.typedef),
       "typeid" => Typeid.to_map(struct.typeid),
       "typename" => Typename.to_map(struct.typename),
diff --git a/base/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm
index e4b45cb..39336b2 100644
--- a/base/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm
@@ -194,6 +194,7 @@ module QuickType exposing
     , Lazy
     , Left
     , ListClass
+    , LocalDate
     , Locale
     , Lock
     , Long
@@ -202,8 +203,6 @@ module QuickType exposing
     , MapEntry
     , MarshalJSON
     , MetadataPropertyHandling
-    , Mutable
-    , Mutating
     , If
     , Import
     , In
@@ -212,6 +211,8 @@ module QuickType exposing
     , Let
     , Module
     , Obj4
+    , Mutable
+    , Mutating
     , Namespace
     , Native
     , New
@@ -243,6 +244,8 @@ module QuickType exposing
     , ObjectNode
     , ObjectReader
     , ObjectWriter
+    , OffsetDateTime
+    , OffsetTime
     , Oneway
     , Open
     , Operator
@@ -272,19 +275,17 @@ module QuickType exposing
     , RegExp
     , Register
     , ReinterpretCast
-    , Repeat
-    , Require
-    , Required
-    , Requires
     , Obj5
     , KSerializer
     , SelfClass
     , StringClass
     , Then
     , Obj5True
-    , Type
     , PrimitiveKind
-    , TypeClass
+    , Repeat
+    , Require
+    , Required
+    , Requires
     , Restrict
     , Retain
     , Rethrows
@@ -339,10 +340,12 @@ module QuickType exposing
     , TopLevel
     , Transient
     , TrueClass
-    , Try
-    , Typealias
     , Obj6
+    , Type
     , Where
+    , TypeClass
+    , Try
+    , Typealias
     , Typedef
     , Typeid
     , Typename
@@ -1095,6 +1098,7 @@ type alias Obj3 =
     , lazy : Lazy
     , left : Left
     , list : ListClass
+    , localDate : LocalDate
     , locale : Locale
     , lock : Lock
     , long : Long
@@ -1103,8 +1107,6 @@ type alias Obj3 =
     , mapEntry : MapEntry
     , marshalJSON : MarshalJSON
     , metadataPropertyHandling : MetadataPropertyHandling
-    , mutable : Mutable
-    , mutating : Mutating
     , obj3If : If
     , obj3Import : Import
     , obj3In : In
@@ -1306,6 +1308,10 @@ type alias ListClass =
     { list : Int
     }
 
+type alias LocalDate =
+    { localDate : Int
+    }
+
 type alias Locale =
     { locale : Int
     }
@@ -1338,14 +1344,6 @@ type alias MetadataPropertyHandling =
     { metadataPropertyHandling : Int
     }
 
-type alias Mutable =
-    { mutable : Int
-    }
-
-type alias Mutating =
-    { mutating : Int
-    }
-
 type alias If =
     { ifIf : Int
     }
@@ -1376,6 +1374,8 @@ type alias Module =
 
 type alias Obj4 =
     { dummy : Int
+    , mutable : Mutable
+    , mutating : Mutating
     , namespace : Namespace
     , native : Native
     , new : New
@@ -1407,6 +1407,8 @@ type alias Obj4 =
     , objectNode : ObjectNode
     , objectReader : ObjectReader
     , objectWriter : ObjectWriter
+    , offsetDateTime : OffsetDateTime
+    , offsetTime : OffsetTime
     , oneway : Oneway
     , open : Open
     , operator : Operator
@@ -1436,10 +1438,14 @@ type alias Obj4 =
     , regExp : RegExp
     , register : Register
     , reinterpretCast : ReinterpretCast
-    , repeat : Repeat
-    , require : Require
-    , required : Required
-    , requires : Requires
+    }
+
+type alias Mutable =
+    { mutable : Int
+    }
+
+type alias Mutating =
+    { mutating : Int
     }
 
 type alias Namespace =
@@ -1566,6 +1572,14 @@ type alias ObjectWriter =
     { objectWriter : Int
     }
 
+type alias OffsetDateTime =
+    { offsetDateTime : Int
+    }
+
+type alias OffsetTime =
+    { offsetTime : Int
+    }
+
 type alias Oneway =
     { oneway : Int
     }
@@ -1682,22 +1696,6 @@ type alias ReinterpretCast =
     { reinterpretCast : Int
     }
 
-type alias Repeat =
-    { repeat : Int
-    }
-
-type alias Require =
-    { require : Int
-    }
-
-type alias Required =
-    { required : Int
-    }
-
-type alias Requires =
-    { requires : Int
-    }
-
 type alias Obj5 =
     { dummy : Int
     , kSerializer : KSerializer
@@ -1705,9 +1703,11 @@ type alias Obj5 =
     , obj5String : StringClass
     , obj5Then : Then
     , obj5True : Obj5True
-    , obj5Type : Type
     , primitiveKind : PrimitiveKind
-    , purpleType : TypeClass
+    , repeat : Repeat
+    , require : Require
+    , required : Required
+    , requires : Requires
     , restrict : Restrict
     , retain : Retain
     , rethrows : Rethrows
@@ -1762,8 +1762,6 @@ type alias Obj5 =
     , topLevel : TopLevel
     , transient : Transient
     , true : TrueClass
-    , try : Try
-    , typealias : Typealias
     }
 
 type alias KSerializer =
@@ -1786,16 +1784,24 @@ type alias Obj5True =
     { true : Int
     }
 
-type alias Type =
-    { typeType : Int
-    }
-
 type alias PrimitiveKind =
     { primitiveKind : Int
     }
 
-type alias TypeClass =
-    { typeType : Int
+type alias Repeat =
+    { repeat : Int
+    }
+
+type alias Require =
+    { require : Int
+    }
+
+type alias Required =
+    { required : Int
+    }
+
+type alias Requires =
+    { requires : Int
     }
 
 type alias Restrict =
@@ -2014,17 +2020,13 @@ type alias TrueClass =
     { true : Int
     }
 
-type alias Try =
-    { try : Int
-    }
-
-type alias Typealias =
-    { typealias : Int
-    }
-
 type alias Obj6 =
     { dummy : Int
+    , obj6Type : Type
     , obj6Where : Where
+    , purpleType : TypeClass
+    , try : Try
+    , typealias : Typealias
     , typedef : Typedef
     , typeid : Typeid
     , typename : Typename
@@ -2059,10 +2061,26 @@ type alias Obj6 =
     , yield : Yield
     }
 
+type alias Type =
+    { typeType : Int
+    }
+
 type alias Where =
     { whereWhere : Int
     }
 
+type alias TypeClass =
+    { typeType : Int
+    }
+
+type alias Try =
+    { try : Int
+    }
+
+type alias Typealias =
+    { typealias : Int
+    }
+
 type alias Typedef =
     { typedef : Int
     }
@@ -3978,6 +3996,7 @@ obj3 =
         |> Jpipe.required "lazy" lazy
         |> Jpipe.required "left" left
         |> Jpipe.required "list" listClass
+        |> Jpipe.required "LocalDate" localDate
         |> Jpipe.required "Locale" locale
         |> Jpipe.required "lock" lock
         |> Jpipe.required "long" long
@@ -3986,8 +4005,6 @@ obj3 =
         |> Jpipe.required "MapEntry" mapEntry
         |> Jpipe.required "MarshalJSON" marshalJSON
         |> Jpipe.required "metadata_property_handling" metadataPropertyHandling
-        |> Jpipe.required "mutable" mutable
-        |> Jpipe.required "mutating" mutating
         |> Jpipe.required "if" purpleIf
         |> Jpipe.required "import" purpleImport
         |> Jpipe.required "in" purpleIn
@@ -4048,6 +4065,7 @@ encodeObj3 x =
         , ("lazy", encodeLazy x.lazy)
         , ("left", encodeLeft x.left)
         , ("list", encodeListClass x.list)
+        , ("LocalDate", encodeLocalDate x.localDate)
         , ("Locale", encodeLocale x.locale)
         , ("lock", encodeLock x.lock)
         , ("long", encodeLong x.long)
@@ -4056,8 +4074,6 @@ encodeObj3 x =
         , ("MapEntry", encodeMapEntry x.mapEntry)
         , ("MarshalJSON", encodeMarshalJSON x.marshalJSON)
         , ("metadata_property_handling", encodeMetadataPropertyHandling x.metadataPropertyHandling)
-        , ("mutable", encodeMutable x.mutable)
-        , ("mutating", encodeMutating x.mutating)
         , ("if", encodeIf x.obj3If)
         , ("import", encodeImport x.obj3Import)
         , ("in", encodeIn x.obj3In)
@@ -4595,6 +4611,17 @@ encodeListClass x =
         [ ("list", Jenc.int x.list)
         ]
 
+localDate : Jdec.Decoder LocalDate
+localDate =
+    Jdec.succeed LocalDate
+        |> Jpipe.required "LocalDate" Jdec.int
+
+encodeLocalDate : LocalDate -> Jenc.Value
+encodeLocalDate x =
+    Jenc.object
+        [ ("LocalDate", Jenc.int x.localDate)
+        ]
+
 locale : Jdec.Decoder Locale
 locale =
     Jdec.succeed Locale
@@ -4683,28 +4710,6 @@ encodeMetadataPropertyHandling x =
         [ ("metadata_property_handling", Jenc.int x.metadataPropertyHandling)
         ]
 
-mutable : Jdec.Decoder Mutable
-mutable =
-    Jdec.succeed Mutable
-        |> Jpipe.required "mutable" Jdec.int
-
-encodeMutable : Mutable -> Jenc.Value
-encodeMutable x =
-    Jenc.object
-        [ ("mutable", Jenc.int x.mutable)
-        ]
-
-mutating : Jdec.Decoder Mutating
-mutating =
-    Jdec.succeed Mutating
-        |> Jpipe.required "mutating" Jdec.int
-
-encodeMutating : Mutating -> Jenc.Value
-encodeMutating x =
-    Jenc.object
-        [ ("mutating", Jenc.int x.mutating)
-        ]
-
 purpleIf : Jdec.Decoder If
 purpleIf =
     Jdec.succeed If
@@ -4786,6 +4791,8 @@ obj4 : Jdec.Decoder Obj4
 obj4 =
     Jdec.succeed Obj4
         |> Jpipe.required "dummy" Jdec.int
+        |> Jpipe.required "mutable" mutable
+        |> Jpipe.required "mutating" mutating
         |> Jpipe.required "namespace" namespace
         |> Jpipe.required "native" native
         |> Jpipe.required "new" new
@@ -4817,6 +4824,8 @@ obj4 =
         |> Jpipe.required "ObjectNode" objectNode
         |> Jpipe.required "ObjectReader" objectReader
         |> Jpipe.required "ObjectWriter" objectWriter
+        |> Jpipe.required "OffsetDateTime" offsetDateTime
+        |> Jpipe.required "OffsetTime" offsetTime
         |> Jpipe.required "oneway" oneway
         |> Jpipe.required "open" open
         |> Jpipe.required "operator" operator
@@ -4846,15 +4855,13 @@ obj4 =
         |> Jpipe.required "RegExp" regExp
         |> Jpipe.required "register" register
         |> Jpipe.required "reinterpret_cast" reinterpretCast
-        |> Jpipe.required "repeat" repeat
-        |> Jpipe.required "require" require
-        |> Jpipe.required "required" required
-        |> Jpipe.required "requires" requires
 
 encodeObj4 : Obj4 -> Jenc.Value
 encodeObj4 x =
     Jenc.object
         [ ("dummy", Jenc.int x.dummy)
+        , ("mutable", encodeMutable x.mutable)
+        , ("mutating", encodeMutating x.mutating)
         , ("namespace", encodeNamespace x.namespace)
         , ("native", encodeNative x.native)
         , ("new", encodeNew x.new)
@@ -4886,6 +4893,8 @@ encodeObj4 x =
         , ("ObjectNode", encodeObjectNode x.objectNode)
         , ("ObjectReader", encodeObjectReader x.objectReader)
         , ("ObjectWriter", encodeObjectWriter x.objectWriter)
+        , ("OffsetDateTime", encodeOffsetDateTime x.offsetDateTime)
+        , ("OffsetTime", encodeOffsetTime x.offsetTime)
         , ("oneway", encodeOneway x.oneway)
         , ("open", encodeOpen x.open)
         , ("operator", encodeOperator x.operator)
@@ -4915,10 +4924,28 @@ encodeObj4 x =
         , ("RegExp", encodeRegExp x.regExp)
         , ("register", encodeRegister x.register)
         , ("reinterpret_cast", encodeReinterpretCast x.reinterpretCast)
-        , ("repeat", encodeRepeat x.repeat)
-        , ("require", encodeRequire x.require)
-        , ("required", encodeRequired x.required)
-        , ("requires", encodeRequires x.requires)
+        ]
+
+mutable : Jdec.Decoder Mutable
+mutable =
+    Jdec.succeed Mutable
+        |> Jpipe.required "mutable" Jdec.int
+
+encodeMutable : Mutable -> Jenc.Value
+encodeMutable x =
+    Jenc.object
+        [ ("mutable", Jenc.int x.mutable)
+        ]
+
+mutating : Jdec.Decoder Mutating
+mutating =
+    Jdec.succeed Mutating
+        |> Jpipe.required "mutating" Jdec.int
+
+encodeMutating : Mutating -> Jenc.Value
+encodeMutating x =
+    Jenc.object
+        [ ("mutating", Jenc.int x.mutating)
         ]
 
 namespace : Jdec.Decoder Namespace
@@ -5262,6 +5289,28 @@ encodeObjectWriter x =
         [ ("ObjectWriter", Jenc.int x.objectWriter)
         ]
 
+offsetDateTime : Jdec.Decoder OffsetDateTime
+offsetDateTime =
+    Jdec.succeed OffsetDateTime
+        |> Jpipe.required "OffsetDateTime" Jdec.int
+
+encodeOffsetDateTime : OffsetDateTime -> Jenc.Value
+encodeOffsetDateTime x =
+    Jenc.object
+        [ ("OffsetDateTime", Jenc.int x.offsetDateTime)
+        ]
+
+offsetTime : Jdec.Decoder OffsetTime
+offsetTime =
+    Jdec.succeed OffsetTime
+        |> Jpipe.required "OffsetTime" Jdec.int
+
+encodeOffsetTime : OffsetTime -> Jenc.Value
+encodeOffsetTime x =
+    Jenc.object
+        [ ("OffsetTime", Jenc.int x.offsetTime)
+        ]
+
 oneway : Jdec.Decoder Oneway
 oneway =
     Jdec.succeed Oneway
@@ -5581,50 +5630,6 @@ encodeReinterpretCast x =
         [ ("reinterpret_cast", Jenc.int x.reinterpretCast)
         ]
 
-repeat : Jdec.Decoder Repeat
-repeat =
-    Jdec.succeed Repeat
-        |> Jpipe.required "repeat" Jdec.int
-
-encodeRepeat : Repeat -> Jenc.Value
-encodeRepeat x =
-    Jenc.object
-        [ ("repeat", Jenc.int x.repeat)
-        ]
-
-require : Jdec.Decoder Require
-require =
-    Jdec.succeed Require
-        |> Jpipe.required "require" Jdec.int
-
-encodeRequire : Require -> Jenc.Value
-encodeRequire x =
-    Jenc.object
-        [ ("require", Jenc.int x.require)
-        ]
-
-required : Jdec.Decoder Required
-required =
-    Jdec.succeed Required
-        |> Jpipe.required "required" Jdec.int
-
-encodeRequired : Required -> Jenc.Value
-encodeRequired x =
-    Jenc.object
-        [ ("required", Jenc.int x.required)
-        ]
-
-requires : Jdec.Decoder Requires
-requires =
-    Jdec.succeed Requires
-        |> Jpipe.required "requires" Jdec.int
-
-encodeRequires : Requires -> Jenc.Value
-encodeRequires x =
-    Jenc.object
-        [ ("requires", Jenc.int x.requires)
-        ]
-
 obj5 : Jdec.Decoder Obj5
 obj5 =
     Jdec.succeed Obj5
@@ -5634,9 +5639,11 @@ obj5 =
         |> Jpipe.required "string" stringClass
         |> Jpipe.required "then" purpleThen
         |> Jpipe.required "true" obj5True
-        |> Jpipe.required "Type" purpleType
         |> Jpipe.required "PrimitiveKind" primitiveKind
-        |> Jpipe.required "type" typeClass
+        |> Jpipe.required "repeat" repeat
+        |> Jpipe.required "require" require
+        |> Jpipe.required "required" required
+        |> Jpipe.required "requires" requires
         |> Jpipe.required "restrict" restrict
         |> Jpipe.required "retain" retain
         |> Jpipe.required "rethrows" rethrows
@@ -5691,8 +5698,6 @@ obj5 =
         |> Jpipe.required "top_level" topLevel
         |> Jpipe.required "transient" transient
         |> Jpipe.required "True" trueClass
-        |> Jpipe.required "try" try
-        |> Jpipe.required "typealias" typealias
 
 encodeObj5 : Obj5 -> Jenc.Value
 encodeObj5 x =
@@ -5703,9 +5708,11 @@ encodeObj5 x =
         , ("string", encodeStringClass x.obj5String)
         , ("then", encodeThen x.obj5Then)
         , ("true", encodeObj5True x.obj5True)
-        , ("Type", encodeType x.obj5Type)
         , ("PrimitiveKind", encodePrimitiveKind x.primitiveKind)
-        , ("type", encodeTypeClass x.purpleType)
+        , ("repeat", encodeRepeat x.repeat)
+        , ("require", encodeRequire x.require)
+        , ("required", encodeRequired x.required)
+        , ("requires", encodeRequires x.requires)
         , ("restrict", encodeRestrict x.restrict)
         , ("retain", encodeRetain x.retain)
         , ("rethrows", encodeRethrows x.rethrows)
@@ -5760,8 +5767,6 @@ encodeObj5 x =
         , ("top_level", encodeTopLevel x.topLevel)
         , ("transient", encodeTransient x.transient)
         , ("True", encodeTrueClass x.true)
-        , ("try", encodeTry x.try)
-        , ("typealias", encodeTypealias x.typealias)
         ]
 
 kSerializer : Jdec.Decoder KSerializer
@@ -5819,17 +5824,6 @@ encodeObj5True x =
         [ ("true", Jenc.int x.true)
         ]
 
-purpleType : Jdec.Decoder Type
-purpleType =
-    Jdec.succeed Type
-        |> Jpipe.required "Type" Jdec.int
-
-encodeType : Type -> Jenc.Value
-encodeType x =
-    Jenc.object
-        [ ("Type", Jenc.int x.typeType)
-        ]
-
 primitiveKind : Jdec.Decoder PrimitiveKind
 primitiveKind =
     Jdec.succeed PrimitiveKind
@@ -5841,15 +5835,48 @@ encodePrimitiveKind x =
         [ ("PrimitiveKind", Jenc.int x.primitiveKind)
         ]
 
-typeClass : Jdec.Decoder TypeClass
-typeClass =
-    Jdec.succeed TypeClass
-        |> Jpipe.required "type" Jdec.int
+repeat : Jdec.Decoder Repeat
+repeat =
+    Jdec.succeed Repeat
+        |> Jpipe.required "repeat" Jdec.int
 
-encodeTypeClass : TypeClass -> Jenc.Value
-encodeTypeClass x =
+encodeRepeat : Repeat -> Jenc.Value
+encodeRepeat x =
     Jenc.object
-        [ ("type", Jenc.int x.typeType)
+        [ ("repeat", Jenc.int x.repeat)
+        ]
+
+require : Jdec.Decoder Require
+require =
+    Jdec.succeed Require
+        |> Jpipe.required "require" Jdec.int
+
+encodeRequire : Require -> Jenc.Value
+encodeRequire x =
+    Jenc.object
+        [ ("require", Jenc.int x.require)
+        ]
+
+required : Jdec.Decoder Required
+required =
+    Jdec.succeed Required
+        |> Jpipe.required "required" Jdec.int
+
+encodeRequired : Required -> Jenc.Value
+encodeRequired x =
+    Jenc.object
+        [ ("required", Jenc.int x.required)
+        ]
+
+requires : Jdec.Decoder Requires
+requires =
+    Jdec.succeed Requires
+        |> Jpipe.required "requires" Jdec.int
+
+encodeRequires : Requires -> Jenc.Value
+encodeRequires x =
+    Jenc.object
+        [ ("requires", Jenc.int x.requires)
         ]
 
 restrict : Jdec.Decoder Restrict
@@ -6446,33 +6473,15 @@ encodeTrueClass x =
         [ ("True", Jenc.int x.true)
         ]
 
-try : Jdec.Decoder Try
-try =
-    Jdec.succeed Try
-        |> Jpipe.required "try" Jdec.int
-
-encodeTry : Try -> Jenc.Value
-encodeTry x =
-    Jenc.object
-        [ ("try", Jenc.int x.try)
-        ]
-
-typealias : Jdec.Decoder Typealias
-typealias =
-    Jdec.succeed Typealias
-        |> Jpipe.required "typealias" Jdec.int
-
-encodeTypealias : Typealias -> Jenc.Value
-encodeTypealias x =
-    Jenc.object
-        [ ("typealias", Jenc.int x.typealias)
-        ]
-
 obj6 : Jdec.Decoder Obj6
 obj6 =
     Jdec.succeed Obj6
         |> Jpipe.required "dummy" Jdec.int
+        |> Jpipe.required "Type" purpleType
         |> Jpipe.required "where" purpleWhere
+        |> Jpipe.required "type" typeClass
+        |> Jpipe.required "try" try
+        |> Jpipe.required "typealias" typealias
         |> Jpipe.required "typedef" typedef
         |> Jpipe.required "typeid" typeid
         |> Jpipe.required "typename" typename
@@ -6510,7 +6519,11 @@ encodeObj6 : Obj6 -> Jenc.Value
 encodeObj6 x =
     Jenc.object
         [ ("dummy", Jenc.int x.dummy)
+        , ("Type", encodeType x.obj6Type)
         , ("where", encodeWhere x.obj6Where)
+        , ("type", encodeTypeClass x.purpleType)
+        , ("try", encodeTry x.try)
+        , ("typealias", encodeTypealias x.typealias)
         , ("typedef", encodeTypedef x.typedef)
         , ("typeid", encodeTypeid x.typeid)
         , ("typename", encodeTypename x.typename)
@@ -6545,6 +6558,17 @@ encodeObj6 x =
         , ("yield", encodeYield x.yield)
         ]
 
+purpleType : Jdec.Decoder Type
+purpleType =
+    Jdec.succeed Type
+        |> Jpipe.required "Type" Jdec.int
+
+encodeType : Type -> Jenc.Value
+encodeType x =
+    Jenc.object
+        [ ("Type", Jenc.int x.typeType)
+        ]
+
 purpleWhere : Jdec.Decoder Where
 purpleWhere =
     Jdec.succeed Where
@@ -6556,6 +6580,39 @@ encodeWhere x =
         [ ("where", Jenc.int x.whereWhere)
         ]
 
+typeClass : Jdec.Decoder TypeClass
+typeClass =
+    Jdec.succeed TypeClass
+        |> Jpipe.required "type" Jdec.int
+
+encodeTypeClass : TypeClass -> Jenc.Value
+encodeTypeClass x =
+    Jenc.object
+        [ ("type", Jenc.int x.typeType)
+        ]
+
+try : Jdec.Decoder Try
+try =
+    Jdec.succeed Try
+        |> Jpipe.required "try" Jdec.int
+
+encodeTry : Try -> Jenc.Value
+encodeTry x =
+    Jenc.object
+        [ ("try", Jenc.int x.try)
+        ]
+
+typealias : Jdec.Decoder Typealias
+typealias =
+    Jdec.succeed Typealias
+        |> Jpipe.required "typealias" Jdec.int
+
+encodeTypealias : Typealias -> Jenc.Value
+encodeTypealias x =
+    Jenc.object
+        [ ("typealias", Jenc.int x.typealias)
+        ]
+
 typedef : Jdec.Decoder Typedef
 typedef =
     Jdec.succeed Typedef
diff --git a/base/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js
index 212b9c9..c9150cc 100644
--- a/base/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js
@@ -688,6 +688,7 @@ export type Obj3 = {
     JsonParser:                 JSONParser;
     JsonReader:                 JSONReader;
     JsonTokenType:              JSONTokenType;
+    LocalDate:                  LocalDate;
     Locale:                     Locale;
     LongNode:                   LongNode;
     MapEntry:                   MapEntry;
@@ -736,8 +737,6 @@ export type Obj3 = {
     map:                        Map;
     metadata_property_handling: MetadataPropertyHandling;
     module:                     Module;
-    mutable:                    Mutable;
-    mutating:                   Mutating;
 };
 
 export type Hashable = {
@@ -804,6 +803,10 @@ export type JSONTokenType = {
     JsonTokenType: number;
 };
 
+export type LocalDate = {
+    LocalDate: number;
+};
+
 export type Locale = {
     Locale: number;
 };
@@ -992,14 +995,6 @@ export type Module = {
     module: number;
 };
 
-export type Mutable = {
-    mutable: number;
-};
-
-export type Mutating = {
-    mutating: number;
-};
-
 export type Obj4 = {
     NO:               No;
     NSError:          NSError;
@@ -1012,9 +1007,13 @@ export type Obj4 = {
     ObjectNode:       ObjectNode;
     ObjectReader:     ObjectReader;
     ObjectWriter:     ObjectWriter;
+    OffsetDateTime:   OffsetDateTime;
+    OffsetTime:       OffsetTime;
     Protocol:         Protocol;
     RegExp:           RegExpClass;
     dummy:            number;
+    mutable:          Mutable;
+    mutating:         Mutating;
     namespace:        Namespace;
     native:           Native;
     new:              New;
@@ -1062,10 +1061,6 @@ export type Obj4 = {
     ref:              Ref;
     register:         Register;
     reinterpret_cast: ReinterpretCast;
-    repeat:           Repeat;
-    require:          Require;
-    required:         Required;
-    requires:         Requires;
 };
 
 export type No = {
@@ -1112,6 +1107,14 @@ export type ObjectWriter = {
     ObjectWriter: number;
 };
 
+export type OffsetDateTime = {
+    OffsetDateTime: number;
+};
+
+export type OffsetTime = {
+    OffsetTime: number;
+};
+
 export type Protocol = {
     Protocol: number;
 };
@@ -1120,6 +1123,14 @@ export type RegExpClass = {
     RegExp: string;
 };
 
+export type Mutable = {
+    mutable: number;
+};
+
+export type Mutating = {
+    mutating: number;
+};
+
 export type Namespace = {
     namespace: number;
 };
@@ -1308,22 +1319,6 @@ export type ReinterpretCast = {
     reinterpret_cast: number;
 };
 
-export type Repeat = {
-    repeat: number;
-};
-
-export type Require = {
-    require: number;
-};
-
-export type Required = {
-    required: number;
-};
-
-export type Requires = {
-    requires: number;
-};
-
 export type Obj5 = {
     KSerializer:          KSerializer;
     PrimitiveKind:        PrimitiveKind;
@@ -1344,8 +1339,11 @@ export type Obj5 = {
     TimeOnlyConverter:    TimeOnlyConverter;
     TimeZone:             TimeZone;
     True:                 True;
-    Type:                 Type;
     dummy:                number;
+    repeat:               Repeat;
+    require:              Require;
+    required:             Required;
+    requires:             Requires;
     restrict:             Restrict;
     retain:               Retain;
     rethrows:             Rethrows;
@@ -1387,9 +1385,6 @@ export type Obj5 = {
     top_level:            TopLevelClass;
     transient:            Transient;
     true:                 TrueClass;
-    try:                  Try;
-    type:                 TypeClass;
-    typealias:            Typealias;
 };
 
 export type KSerializer = {
@@ -1468,8 +1463,20 @@ export type True = {
     True: number;
 };
 
-export type Type = {
-    Type: number;
+export type Repeat = {
+    repeat: number;
+};
+
+export type Require = {
+    require: number;
+};
+
+export type Required = {
+    required: number;
+};
+
+export type Requires = {
+    requires: number;
 };
 
 export type Restrict = {
@@ -1636,19 +1643,8 @@ export type TrueClass = {
     true: number;
 };
 
-export type Try = {
-    try: number;
-};
-
-export type TypeClass = {
-    type: number;
-};
-
-export type Typealias = {
-    typealias: number;
-};
-
 export type Obj6 = {
+    Type:           Type;
     UUID:           UUID;
     UnmarshalJSON:  UnmarshalJSON;
     UseSerializers: UseSerializers;
@@ -1656,6 +1652,9 @@ export type Obj6 = {
     Utf8JsonWriter: Utf8JSONWriter;
     YES:            Yes;
     dummy:          number;
+    try:            Try;
+    type:           TypeClass;
+    typealias:      Typealias;
     typedef:        Typedef;
     typeid:         Typeid;
     typename:       Typename;
@@ -1685,6 +1684,10 @@ export type Obj6 = {
     yield:          Yield;
 };
 
+export type Type = {
+    Type: number;
+};
+
 export type UUID = {
     UUID: number;
 };
@@ -1709,6 +1712,18 @@ export type Yes = {
     YES: number;
 };
 
+export type Try = {
+    try: number;
+};
+
+export type TypeClass = {
+    type: number;
+};
+
+export type Typealias = {
+    typealias: number;
+};
+
 export type Typedef = {
     typedef: number;
 };
@@ -2547,6 +2562,7 @@ const typeMap: any = {
         { json: "JsonParser", js: "JsonParser", typ: r("JSONParser") },
         { json: "JsonReader", js: "JsonReader", typ: r("JSONReader") },
         { json: "JsonTokenType", js: "JsonTokenType", typ: r("JSONTokenType") },
+        { json: "LocalDate", js: "LocalDate", typ: r("LocalDate") },
         { json: "Locale", js: "Locale", typ: r("Locale") },
         { json: "LongNode", js: "LongNode", typ: r("LongNode") },
         { json: "MapEntry", js: "MapEntry", typ: r("MapEntry") },
@@ -2595,8 +2611,6 @@ const typeMap: any = {
         { json: "map", js: "map", typ: r("Map") },
         { json: "metadata_property_handling", js: "metadata_property_handling", typ: r("MetadataPropertyHandling") },
         { json: "module", js: "module", typ: r("Module") },
-        { json: "mutable", js: "mutable", typ: r("Mutable") },
-        { json: "mutating", js: "mutating", typ: r("Mutating") },
     ], false),
     "Hashable": o([
         { json: "Hashable", js: "Hashable", typ: i(0) },
@@ -2646,6 +2660,9 @@ const typeMap: any = {
     "JSONTokenType": o([
         { json: "JsonTokenType", js: "JsonTokenType", typ: i(0) },
     ], false),
+    "LocalDate": o([
+        { json: "LocalDate", js: "LocalDate", typ: i(0) },
+    ], false),
     "Locale": o([
         { json: "Locale", js: "Locale", typ: i(0) },
     ], false),
@@ -2787,12 +2804,6 @@ const typeMap: any = {
     "Module": o([
         { json: "module", js: "module", typ: i(0) },
     ], false),
-    "Mutable": o([
-        { json: "mutable", js: "mutable", typ: i(0) },
-    ], false),
-    "Mutating": o([
-        { json: "mutating", js: "mutating", typ: i(0) },
-    ], false),
     "Obj4": o([
         { json: "NO", js: "NO", typ: r("No") },
         { json: "NSError", js: "NSError", typ: r("NSError") },
@@ -2805,9 +2816,13 @@ const typeMap: any = {
         { json: "ObjectNode", js: "ObjectNode", typ: r("ObjectNode") },
         { json: "ObjectReader", js: "ObjectReader", typ: r("ObjectReader") },
         { json: "ObjectWriter", js: "ObjectWriter", typ: r("ObjectWriter") },
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: r("OffsetDateTime") },
+        { json: "OffsetTime", js: "OffsetTime", typ: r("OffsetTime") },
         { json: "Protocol", js: "Protocol", typ: r("Protocol") },
         { json: "RegExp", js: "RegExp", typ: r("RegExpClass") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "mutable", js: "mutable", typ: r("Mutable") },
+        { json: "mutating", js: "mutating", typ: r("Mutating") },
         { json: "namespace", js: "namespace", typ: r("Namespace") },
         { json: "native", js: "native", typ: r("Native") },
         { json: "new", js: "new", typ: r("New") },
@@ -2855,10 +2870,6 @@ const typeMap: any = {
         { json: "ref", js: "ref", typ: r("Ref") },
         { json: "register", js: "register", typ: r("Register") },
         { json: "reinterpret_cast", js: "reinterpret_cast", typ: r("ReinterpretCast") },
-        { json: "repeat", js: "repeat", typ: r("Repeat") },
-        { json: "require", js: "require", typ: r("Require") },
-        { json: "required", js: "required", typ: r("Required") },
-        { json: "requires", js: "requires", typ: r("Requires") },
     ], false),
     "No": o([
         { json: "NO", js: "NO", typ: i(0) },
@@ -2893,12 +2904,24 @@ const typeMap: any = {
     "ObjectWriter": o([
         { json: "ObjectWriter", js: "ObjectWriter", typ: i(0) },
     ], false),
+    "OffsetDateTime": o([
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: i(0) },
+    ], false),
+    "OffsetTime": o([
+        { json: "OffsetTime", js: "OffsetTime", typ: i(0) },
+    ], false),
     "Protocol": o([
         { json: "Protocol", js: "Protocol", typ: i(0) },
     ], false),
     "RegExpClass": o([
         { json: "RegExp", js: "RegExp", typ: { uuid: "" } },
     ], false),
+    "Mutable": o([
+        { json: "mutable", js: "mutable", typ: i(0) },
+    ], false),
+    "Mutating": o([
+        { json: "mutating", js: "mutating", typ: i(0) },
+    ], false),
     "Namespace": o([
         { json: "namespace", js: "namespace", typ: i(0) },
     ], false),
@@ -3040,18 +3063,6 @@ const typeMap: any = {
     "ReinterpretCast": o([
         { json: "reinterpret_cast", js: "reinterpret_cast", typ: i(0) },
     ], false),
-    "Repeat": o([
-        { json: "repeat", js: "repeat", typ: i(0) },
-    ], false),
-    "Require": o([
-        { json: "require", js: "require", typ: i(0) },
-    ], false),
-    "Required": o([
-        { json: "required", js: "required", typ: i(0) },
-    ], false),
-    "Requires": o([
-        { json: "requires", js: "requires", typ: i(0) },
-    ], false),
     "Obj5": o([
         { json: "KSerializer", js: "KSerializer", typ: r("KSerializer") },
         { json: "PrimitiveKind", js: "PrimitiveKind", typ: r("PrimitiveKind") },
@@ -3072,8 +3083,11 @@ const typeMap: any = {
         { json: "TimeOnlyConverter", js: "TimeOnlyConverter", typ: r("TimeOnlyConverter") },
         { json: "TimeZone", js: "TimeZone", typ: r("TimeZone") },
         { json: "True", js: "True", typ: r("True") },
-        { json: "Type", js: "Type", typ: r("Type") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "repeat", js: "repeat", typ: r("Repeat") },
+        { json: "require", js: "require", typ: r("Require") },
+        { json: "required", js: "required", typ: r("Required") },
+        { json: "requires", js: "requires", typ: r("Requires") },
         { json: "restrict", js: "restrict", typ: r("Restrict") },
         { json: "retain", js: "retain", typ: r("Retain") },
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
@@ -3115,9 +3129,6 @@ const typeMap: any = {
         { json: "top_level", js: "top_level", typ: r("TopLevelClass") },
         { json: "transient", js: "transient", typ: r("Transient") },
         { json: "true", js: "true", typ: r("TrueClass") },
-        { json: "try", js: "try", typ: r("Try") },
-        { json: "type", js: "type", typ: r("TypeClass") },
-        { json: "typealias", js: "typealias", typ: r("Typealias") },
     ], false),
     "KSerializer": o([
         { json: "KSerializer", js: "KSerializer", typ: i(0) },
@@ -3176,8 +3187,17 @@ const typeMap: any = {
     "True": o([
         { json: "True", js: "True", typ: i(0) },
     ], false),
-    "Type": o([
-        { json: "Type", js: "Type", typ: i(0) },
+    "Repeat": o([
+        { json: "repeat", js: "repeat", typ: i(0) },
+    ], false),
+    "Require": o([
+        { json: "require", js: "require", typ: i(0) },
+    ], false),
+    "Required": o([
+        { json: "required", js: "required", typ: i(0) },
+    ], false),
+    "Requires": o([
+        { json: "requires", js: "requires", typ: i(0) },
     ], false),
     "Restrict": o([
         { json: "restrict", js: "restrict", typ: i(0) },
@@ -3302,16 +3322,8 @@ const typeMap: any = {
     "TrueClass": o([
         { json: "true", js: "true", typ: i(0) },
     ], false),
-    "Try": o([
-        { json: "try", js: "try", typ: i(0) },
-    ], false),
-    "TypeClass": o([
-        { json: "type", js: "type", typ: i(0) },
-    ], false),
-    "Typealias": o([
-        { json: "typealias", js: "typealias", typ: i(0) },
-    ], false),
     "Obj6": o([
+        { json: "Type", js: "Type", typ: r("Type") },
         { json: "UUID", js: "UUID", typ: r("UUID") },
         { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: r("UnmarshalJSON") },
         { json: "UseSerializers", js: "UseSerializers", typ: r("UseSerializers") },
@@ -3319,6 +3331,9 @@ const typeMap: any = {
         { json: "Utf8JsonWriter", js: "Utf8JsonWriter", typ: r("Utf8JSONWriter") },
         { json: "YES", js: "YES", typ: r("Yes") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "try", js: "try", typ: r("Try") },
+        { json: "type", js: "type", typ: r("TypeClass") },
+        { json: "typealias", js: "typealias", typ: r("Typealias") },
         { json: "typedef", js: "typedef", typ: r("Typedef") },
         { json: "typeid", js: "typeid", typ: r("Typeid") },
         { json: "typename", js: "typename", typ: r("Typename") },
@@ -3347,6 +3362,9 @@ const typeMap: any = {
         { json: "xor_eq", js: "xor_eq", typ: r("XorEq") },
         { json: "yield", js: "yield", typ: r("Yield") },
     ], false),
+    "Type": o([
+        { json: "Type", js: "Type", typ: i(0) },
+    ], false),
     "UUID": o([
         { json: "UUID", js: "UUID", typ: i(0) },
     ], false),
@@ -3365,6 +3383,15 @@ const typeMap: any = {
     "Yes": o([
         { json: "YES", js: "YES", typ: i(0) },
     ], false),
+    "Try": o([
+        { json: "try", js: "try", typ: i(0) },
+    ], false),
+    "TypeClass": o([
+        { json: "type", js: "type", typ: i(0) },
+    ], false),
+    "Typealias": o([
+        { json: "typealias", js: "typealias", typ: i(0) },
+    ], false),
     "Typedef": o([
         { json: "typedef", js: "typedef", typ: i(0) },
     ], false),
diff --git a/base/golang/test/inputs/json/priority/keywords.json/default/quicktype.go b/head/golang/test/inputs/json/priority/keywords.json/default/quicktype.go
index a1b014b..512e63a 100644
--- a/base/golang/test/inputs/json/priority/keywords.json/default/quicktype.go
+++ b/head/golang/test/inputs/json/priority/keywords.json/default/quicktype.go
@@ -734,6 +734,7 @@ type Obj3 struct {
 	Left                       Left                       `json:"left"`
 	Let                        Let                        `json:"let"`
 	List                       List                       `json:"list"`
+	LocalDate                  LocalDate                  `json:"LocalDate"`
 	Locale                     Locale                     `json:"Locale"`
 	Lock                       Lock                       `json:"lock"`
 	Long                       Long                       `json:"long"`
@@ -743,8 +744,6 @@ type Obj3 struct {
 	MarshalJSON                MarshalJSON                `json:"MarshalJSON"`
 	MetadataPropertyHandling   MetadataPropertyHandling   `json:"metadata_property_handling"`
 	Module                     Module                     `json:"module"`
-	Mutable                    Mutable                    `json:"mutable"`
-	Mutating                   Mutating                   `json:"mutating"`
 }
 
 type Function struct {
@@ -963,6 +962,10 @@ type List struct {
 	List int64 `json:"list"`
 }
 
+type LocalDate struct {
+	LocalDate int64 `json:"LocalDate"`
+}
+
 type Locale struct {
 	Locale int64 `json:"Locale"`
 }
@@ -999,16 +1002,10 @@ type Module struct {
 	Module int64 `json:"module"`
 }
 
-type Mutable struct {
-	Mutable int64 `json:"mutable"`
-}
-
-type Mutating struct {
-	Mutating int64 `json:"mutating"`
-}
-
 type Obj4 struct {
 	Dummy           int64           `json:"dummy"`
+	Mutable         Mutable         `json:"mutable"`
+	Mutating        Mutating        `json:"mutating"`
 	NSError         NSError         `json:"NSError"`
 	NSObject        NSObject        `json:"NSObject"`
 	NSString        NSString        `json:"NSString"`
@@ -1039,6 +1036,8 @@ type Obj4 struct {
 	ObjectReader    ObjectReader    `json:"ObjectReader"`
 	ObjectWriter    ObjectWriter    `json:"ObjectWriter"`
 	Of              Of              `json:"of"`
+	OffsetDateTime  OffsetDateTime  `json:"OffsetDateTime"`
+	OffsetTime      OffsetTime      `json:"OffsetTime"`
 	Oneway          Oneway          `json:"oneway"`
 	Open            Open            `json:"open"`
 	Operator        Operator        `json:"operator"`
@@ -1069,10 +1068,14 @@ type Obj4 struct {
 	RegExp          RegExp          `json:"RegExp"`
 	Register        Register        `json:"register"`
 	ReinterpretCast ReinterpretCast `json:"reinterpret_cast"`
-	Repeat          Repeat          `json:"repeat"`
-	Require         Require         `json:"require"`
-	Required        Required        `json:"required"`
-	Requires        Requires        `json:"requires"`
+}
+
+type Mutable struct {
+	Mutable int64 `json:"mutable"`
+}
+
+type Mutating struct {
+	Mutating int64 `json:"mutating"`
 }
 
 type NSError struct {
@@ -1195,6 +1198,14 @@ type Of struct {
 	Of int64 `json:"of"`
 }
 
+type OffsetDateTime struct {
+	OffsetDateTime int64 `json:"OffsetDateTime"`
+}
+
+type OffsetTime struct {
+	OffsetTime int64 `json:"OffsetTime"`
+}
+
 type Oneway struct {
 	Oneway int64 `json:"oneway"`
 }
@@ -1315,29 +1326,16 @@ type ReinterpretCast struct {
 	ReinterpretCast int64 `json:"reinterpret_cast"`
 }
 
-type Repeat struct {
-	Repeat int64 `json:"repeat"`
-}
-
-type Require struct {
-	Require int64 `json:"require"`
-}
-
-type Required struct {
-	Required int64 `json:"required"`
-}
-
-type Requires struct {
-	Requires int64 `json:"requires"`
-}
-
 type Obj5 struct {
 	Dummy                int64                `json:"dummy"`
 	KSerializer          KSerializer          `json:"KSerializer"`
 	Obj5Self             SelfClass            `json:"self"`
 	Obj5True             TrueClass            `json:"true"`
-	Obj5Type             TypeClass            `json:"type"`
 	PrimitiveKind        PrimitiveKind        `json:"PrimitiveKind"`
+	Repeat               Repeat               `json:"repeat"`
+	Require              Require              `json:"require"`
+	Required             Required             `json:"required"`
+	Requires             Requires             `json:"requires"`
 	Restrict             Restrict             `json:"restrict"`
 	Retain               Retain               `json:"retain"`
 	Rethrows             Rethrows             `json:"rethrows"`
@@ -1394,9 +1392,6 @@ type Obj5 struct {
 	TopLevel             TopLevelClass        `json:"top_level"`
 	Transient            Transient            `json:"transient"`
 	True                 True                 `json:"True"`
-	Try                  Try                  `json:"try"`
-	Type                 Type                 `json:"Type"`
-	Typealias            Typealias            `json:"typealias"`
 }
 
 type KSerializer struct {
@@ -1411,14 +1406,26 @@ type TrueClass struct {
 	True int64 `json:"true"`
 }
 
-type TypeClass struct {
-	Type int64 `json:"type"`
-}
-
 type PrimitiveKind struct {
 	PrimitiveKind int64 `json:"PrimitiveKind"`
 }
 
+type Repeat struct {
+	Repeat int64 `json:"repeat"`
+}
+
+type Require struct {
+	Require int64 `json:"require"`
+}
+
+type Required struct {
+	Required int64 `json:"required"`
+}
+
+type Requires struct {
+	Requires int64 `json:"requires"`
+}
+
 type Restrict struct {
 	Restrict int64 `json:"restrict"`
 }
@@ -1643,20 +1650,12 @@ type True struct {
 	True int64 `json:"True"`
 }
 
-type Try struct {
-	Try int64 `json:"try"`
-}
-
-type Type struct {
-	Type int64 `json:"Type"`
-}
-
-type Typealias struct {
-	Typealias int64 `json:"typealias"`
-}
-
 type Obj6 struct {
 	Dummy          int64          `json:"dummy"`
+	Obj6Type       TypeClass      `json:"type"`
+	Try            Try            `json:"try"`
+	Type           Type           `json:"Type"`
+	Typealias      Typealias      `json:"typealias"`
 	Typedef        Typedef        `json:"typedef"`
 	Typeid         Typeid         `json:"typeid"`
 	Typename       Typename       `json:"typename"`
@@ -1692,6 +1691,22 @@ type Obj6 struct {
 	Yield          Yield          `json:"yield"`
 }
 
+type TypeClass struct {
+	Type int64 `json:"type"`
+}
+
+type Try struct {
+	Try int64 `json:"try"`
+}
+
+type Type struct {
+	Type int64 `json:"Type"`
+}
+
+type Typealias struct {
+	Typealias int64 `json:"typealias"`
+}
+
 type Typedef struct {
 	Typedef int64 `json:"typedef"`
 }
diff --git a/base/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs b/head/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs
index f1fb602..3441f30 100644
--- a/base/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs
+++ b/head/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs
@@ -182,6 +182,7 @@ module QuickType
     , Lazy (..)
     , LeftClass (..)
     , List (..)
+    , LocalDate (..)
     , Locale (..)
     , Lock (..)
     , Long (..)
@@ -190,8 +191,6 @@ module QuickType
     , MapEntry (..)
     , MarshalJSON (..)
     , MetadataPropertyHandling (..)
-    , Mutable (..)
-    , Mutating (..)
     , ID (..)
     , If (..)
     , Import (..)
@@ -200,6 +199,8 @@ module QuickType
     , Let (..)
     , Module (..)
     , Obj4 (..)
+    , Mutable (..)
+    , Mutating (..)
     , Namespace (..)
     , Native (..)
     , New (..)
@@ -230,6 +231,8 @@ module QuickType
     , ObjectNode (..)
     , ObjectReader (..)
     , ObjectWriter (..)
+    , OffsetDateTime (..)
+    , OffsetTime (..)
     , Oneway (..)
     , Open (..)
     , Operator (..)
@@ -260,18 +263,16 @@ module QuickType
     , RegExp (..)
     , Register (..)
     , ReinterpretCast (..)
-    , Repeat (..)
-    , Require (..)
-    , Required (..)
-    , Requires (..)
     , Obj5 (..)
     , KSerializer (..)
     , SelfClass (..)
     , Then (..)
     , Obj5True (..)
-    , Type (..)
     , PrimitiveKind (..)
-    , TypeClass (..)
+    , Repeat (..)
+    , Require (..)
+    , Required (..)
+    , Requires (..)
     , Restrict (..)
     , Retain (..)
     , Rethrows (..)
@@ -327,10 +328,12 @@ module QuickType
     , TopLevel (..)
     , Transient (..)
     , TrueClass (..)
-    , Try (..)
-    , Typealias (..)
     , Obj6 (..)
+    , Type (..)
     , Where (..)
+    , TypeClass (..)
+    , Try (..)
+    , Typealias (..)
     , Typedef (..)
     , Typeid (..)
     , Typename (..)
@@ -1086,6 +1089,7 @@ data Obj3 = Obj3
     , lazyObj3 :: Lazy
     , leftObj3 :: LeftClass
     , listObj3 :: List
+    , localDateObj3 :: LocalDate
     , localeObj3 :: Locale
     , lockObj3 :: Lock
     , longObj3 :: Long
@@ -1094,8 +1098,6 @@ data Obj3 = Obj3
     , mapEntryObj3 :: MapEntry
     , marshalJSONObj3 :: MarshalJSON
     , metadataPropertyHandlingObj3 :: MetadataPropertyHandling
-    , mutableObj3 :: Mutable
-    , mutatingObj3 :: Mutating
     , obj3IDObj3 :: ID
     , obj3IfObj3 :: If
     , obj3ImportObj3 :: Import
@@ -1297,6 +1299,10 @@ data List = List
     { listList :: Int
     } deriving (Show)
 
+data LocalDate = LocalDate
+    { localDateLocalDate :: Int
+    } deriving (Show)
+
 data Locale = Locale
     { localeLocale :: Int
     } deriving (Show)
@@ -1329,14 +1335,6 @@ data MetadataPropertyHandling = MetadataPropertyHandling
     { metadataPropertyHandlingMetadataPropertyHandling :: Int
     } deriving (Show)
 
-data Mutable = Mutable
-    { mutableMutable :: Int
-    } deriving (Show)
-
-data Mutating = Mutating
-    { mutatingMutating :: Int
-    } deriving (Show)
-
 data ID = ID
     { idIDID :: Int
     } deriving (Show)
@@ -1367,6 +1365,8 @@ data Module = Module
 
 data Obj4 = Obj4
     { dummyObj4 :: Int
+    , mutableObj4 :: Mutable
+    , mutatingObj4 :: Mutating
     , namespaceObj4 :: Namespace
     , nativeObj4 :: Native
     , newObj4 :: New
@@ -1397,6 +1397,8 @@ data Obj4 = Obj4
     , objectNodeObj4 :: ObjectNode
     , objectReaderObj4 :: ObjectReader
     , objectWriterObj4 :: ObjectWriter
+    , offsetDateTimeObj4 :: OffsetDateTime
+    , offsetTimeObj4 :: OffsetTime
     , onewayObj4 :: Oneway
     , openObj4 :: Open
     , operatorObj4 :: Operator
@@ -1427,10 +1429,14 @@ data Obj4 = Obj4
     , regExpObj4 :: RegExp
     , registerObj4 :: Register
     , reinterpretCastObj4 :: ReinterpretCast
-    , repeatObj4 :: Repeat
-    , requireObj4 :: Require
-    , requiredObj4 :: Required
-    , requiresObj4 :: Requires
+    } deriving (Show)
+
+data Mutable = Mutable
+    { mutableMutable :: Int
+    } deriving (Show)
+
+data Mutating = Mutating
+    { mutatingMutating :: Int
     } deriving (Show)
 
 data Namespace = Namespace
@@ -1553,6 +1559,14 @@ data ObjectWriter = ObjectWriter
     { objectWriterObjectWriter :: Int
     } deriving (Show)
 
+data OffsetDateTime = OffsetDateTime
+    { offsetDateTimeOffsetDateTime :: Int
+    } deriving (Show)
+
+data OffsetTime = OffsetTime
+    { offsetTimeOffsetTime :: Int
+    } deriving (Show)
+
 data Oneway = Oneway
     { onewayOneway :: Int
     } deriving (Show)
@@ -1673,31 +1687,17 @@ data ReinterpretCast = ReinterpretCast
     { reinterpretCastReinterpretCast :: Int
     } deriving (Show)
 
-data Repeat = Repeat
-    { repeatRepeat :: Int
-    } deriving (Show)
-
-data Require = Require
-    { requireRequire :: Int
-    } deriving (Show)
-
-data Required = Required
-    { requiredRequired :: Int
-    } deriving (Show)
-
-data Requires = Requires
-    { requiresRequires :: Int
-    } deriving (Show)
-
 data Obj5 = Obj5
     { dummyObj5 :: Int
     , kSerializerObj5 :: KSerializer
     , obj5SelfObj5 :: SelfClass
     , obj5ThenObj5 :: Then
     , obj5TrueObj5 :: Obj5True
-    , obj5TypeObj5 :: Type
     , primitiveKindObj5 :: PrimitiveKind
-    , purpleTypeObj5 :: TypeClass
+    , repeatObj5 :: Repeat
+    , requireObj5 :: Require
+    , requiredObj5 :: Required
+    , requiresObj5 :: Requires
     , restrictObj5 :: Restrict
     , retainObj5 :: Retain
     , rethrowsObj5 :: Rethrows
@@ -1753,8 +1753,6 @@ data Obj5 = Obj5
     , topLevelObj5 :: TopLevel
     , transientObj5 :: Transient
     , trueObj5 :: TrueClass
-    , tryObj5 :: Try
-    , typealiasObj5 :: Typealias
     } deriving (Show)
 
 data KSerializer = KSerializer
@@ -1773,16 +1771,24 @@ data Obj5True = Obj5True
     { trueObj5True :: Int
     } deriving (Show)
 
-data Type = Type
-    { typeTypeType :: Int
-    } deriving (Show)
-
 data PrimitiveKind = PrimitiveKind
     { primitiveKindPrimitiveKind :: Int
     } deriving (Show)
 
-data TypeClass = TypeClass
-    { typeTypeTypeClass :: Int
+data Repeat = Repeat
+    { repeatRepeat :: Int
+    } deriving (Show)
+
+data Require = Require
+    { requireRequire :: Int
+    } deriving (Show)
+
+data Required = Required
+    { requiredRequired :: Int
+    } deriving (Show)
+
+data Requires = Requires
+    { requiresRequires :: Int
     } deriving (Show)
 
 data Restrict = Restrict
@@ -2005,17 +2011,13 @@ data TrueClass = TrueClass
     { trueTrueClass :: Int
     } deriving (Show)
 
-data Try = Try
-    { tryTry :: Int
-    } deriving (Show)
-
-data Typealias = Typealias
-    { typealiasTypealias :: Int
-    } deriving (Show)
-
 data Obj6 = Obj6
     { dummyObj6 :: Int
+    , obj6TypeObj6 :: Type
     , obj6WhereObj6 :: Where
+    , purpleTypeObj6 :: TypeClass
+    , tryObj6 :: Try
+    , typealiasObj6 :: Typealias
     , typedefObj6 :: Typedef
     , typeidObj6 :: Typeid
     , typenameObj6 :: Typename
@@ -2050,10 +2052,26 @@ data Obj6 = Obj6
     , yieldObj6 :: Yield
     } deriving (Show)
 
+data Type = Type
+    { typeTypeType :: Int
+    } deriving (Show)
+
 data Where = Where
     { whereWhereWhere :: Int
     } deriving (Show)
 
+data TypeClass = TypeClass
+    { typeTypeTypeClass :: Int
+    } deriving (Show)
+
+data Try = Try
+    { tryTry :: Int
+    } deriving (Show)
+
+data Typealias = Typealias
+    { typealiasTypealias :: Int
+    } deriving (Show)
+
 data Typedef = Typedef
     { typedefTypedef :: Int
     } deriving (Show)
@@ -3774,7 +3792,7 @@ instance FromJSON Obj2False where
         <$> v .: "false"
 
 instance ToJSON Obj3 where
-    toJSON (Obj3 dummyObj3 functionObj3 getObj3 globalObj3 goObj3 gotoObj3 guardObj3 hasOwnPropertyObj3 hashCodeObj3 hashableObj3 hasherObj3 impObj3 implementsObj3 implicitObj3 indirectObj3 initObj3 inlineObj3 inoutObj3 instanceofObj3 intObj3 intNodeObj3 interfaceObj3 internalObj3 isObj3 isoDateTimeOffsetConverterObj3 iterableObj3 jdecObj3 jencObj3 jpipeObj3 jsonObj3 jsonAnyObj3 jsonCodingKeyObj3 jsonConverterObj3 jsonDecoderObj3 jsonEncoderObj3 jsonExceptionObj3 jsonGeneratorObj3 jsonNodeObj3 jsonNullObj3 jsonParserObj3 jsonReaderObj3 jsonSerializerObj3 jsonTokenObj3 jsonTokenTypeObj3 jsonWriterObj3 lambdaObj3 lazyObj3 leftObj3 listObj3 localeObj3 lockObj3 longObj3 longNodeObj3 mapObj3 mapEntryObj3 marshalJSONObj3 metadataPropertyHandlingObj3 mutableObj3 mutatingObj3 obj3IDObj3 obj3IfObj3 obj3ImportObj3 obj3InObj3 obj3InfixObj3 obj3LetObj3 obj3ModuleObj3) =
+    toJSON (Obj3 dummyObj3 functionObj3 getObj3 globalObj3 goObj3 gotoObj3 guardObj3 hasOwnPropertyObj3 hashCodeObj3 hashableObj3 hasherObj3 impObj3 implementsObj3 implicitObj3 indirectObj3 initObj3 inlineObj3 inoutObj3 instanceofObj3 intObj3 intNodeObj3 interfaceObj3 internalObj3 isObj3 isoDateTimeOffsetConverterObj3 iterableObj3 jdecObj3 jencObj3 jpipeObj3 jsonObj3 jsonAnyObj3 jsonCodingKeyObj3 jsonConverterObj3 jsonDecoderObj3 jsonEncoderObj3 jsonExceptionObj3 jsonGeneratorObj3 jsonNodeObj3 jsonNullObj3 jsonParserObj3 jsonReaderObj3 jsonSerializerObj3 jsonTokenObj3 jsonTokenTypeObj3 jsonWriterObj3 lambdaObj3 lazyObj3 leftObj3 listObj3 localDateObj3 localeObj3 lockObj3 longObj3 longNodeObj3 mapObj3 mapEntryObj3 marshalJSONObj3 metadataPropertyHandlingObj3 obj3IDObj3 obj3IfObj3 obj3ImportObj3 obj3InObj3 obj3InfixObj3 obj3LetObj3 obj3ModuleObj3) =
         object $ foldMap (maybe [] pure)
         [ Just $ "dummy" .= dummyObj3
         , Just $ "function" .= functionObj3
@@ -3825,6 +3843,7 @@ instance ToJSON Obj3 where
         , Just $ "lazy" .= lazyObj3
         , Just $ "left" .= leftObj3
         , Just $ "list" .= listObj3
+        , Just $ "LocalDate" .= localDateObj3
         , Just $ "Locale" .= localeObj3
         , Just $ "lock" .= lockObj3
         , Just $ "long" .= longObj3
@@ -3833,8 +3852,6 @@ instance ToJSON Obj3 where
         , Just $ "MapEntry" .= mapEntryObj3
         , Just $ "MarshalJSON" .= marshalJSONObj3
         , Just $ "metadata_property_handling" .= metadataPropertyHandlingObj3
-        , Just $ "mutable" .= mutableObj3
-        , Just $ "mutating" .= mutatingObj3
         , Just $ "id" .= obj3IDObj3
         , Just $ "if" .= obj3IfObj3
         , Just $ "import" .= obj3ImportObj3
@@ -3895,6 +3912,7 @@ instance FromJSON Obj3 where
         <*> v .: "lazy"
         <*> v .: "left"
         <*> v .: "list"
+        <*> v .: "LocalDate"
         <*> v .: "Locale"
         <*> v .: "lock"
         <*> v .: "long"
@@ -3903,8 +3921,6 @@ instance FromJSON Obj3 where
         <*> v .: "MapEntry"
         <*> v .: "MarshalJSON"
         <*> v .: "metadata_property_handling"
-        <*> v .: "mutable"
-        <*> v .: "mutating"
         <*> v .: "id"
         <*> v .: "if"
         <*> v .: "import"
@@ -4393,6 +4409,16 @@ instance FromJSON List where
     parseJSON (Object v) = List
         <$> v .: "list"
 
+instance ToJSON LocalDate where
+    toJSON (LocalDate localDateLocalDate) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "LocalDate" .= localDateLocalDate
+        ]
+
+instance FromJSON LocalDate where
+    parseJSON (Object v) = LocalDate
+        <$> v .: "LocalDate"
+
 instance ToJSON Locale where
     toJSON (Locale localeLocale) =
         object $ foldMap (maybe [] pure)
@@ -4473,26 +4499,6 @@ instance FromJSON MetadataPropertyHandling where
     parseJSON (Object v) = MetadataPropertyHandling
         <$> v .: "metadata_property_handling"
 
-instance ToJSON Mutable where
-    toJSON (Mutable mutableMutable) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "mutable" .= mutableMutable
-        ]
-
-instance FromJSON Mutable where
-    parseJSON (Object v) = Mutable
-        <$> v .: "mutable"
-
-instance ToJSON Mutating where
-    toJSON (Mutating mutatingMutating) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "mutating" .= mutatingMutating
-        ]
-
-instance FromJSON Mutating where
-    parseJSON (Object v) = Mutating
-        <$> v .: "mutating"
-
 instance ToJSON ID where
     toJSON (ID idIDID) =
         object $ foldMap (maybe [] pure)
@@ -4564,9 +4570,11 @@ instance FromJSON Module where
         <$> v .: "module"
 
 instance ToJSON Obj4 where
-    toJSON (Obj4 dummyObj4 namespaceObj4 nativeObj4 newObj4 newtonsoftObj4 nilObj4 noObj4 noSuchMethodObj4 noexceptObj4 nonatomicObj4 noneObj4 nonlocalObj4 nonmutatingObj4 notObj4 notEqObj4 nsErrorObj4 nsObjectObj4 nsStringObj4 nullObj4 nullNodeObj4 nullptrObj4 numberObj4 obj4NoneObj4 obj4NullObj4 obj4OfObj4 obj4ProtocolObj4 objectObj4 objectMapperObj4 objectNodeObj4 objectReaderObj4 objectWriterObj4 onewayObj4 openObj4 operatorObj4 optionalObj4 orObj4 orEqObj4 outObj4 overrideObj4 packageObj4 paramsObj4 passObj4 portObj4 postfixObj4 precedenceObj4 prefixObj4 printObj4 printMembersObj4 printfObj4 privateObj4 protectedObj4 protocolObj4 publicObj4 quicktypeObj4 raiseObj4 rangeObj4 readonlyObj4 refObj4 regExpObj4 registerObj4 reinterpretCastObj4 repeatObj4 requireObj4 requiredObj4 requiresObj4) =
+    toJSON (Obj4 dummyObj4 mutableObj4 mutatingObj4 namespaceObj4 nativeObj4 newObj4 newtonsoftObj4 nilObj4 noObj4 noSuchMethodObj4 noexceptObj4 nonatomicObj4 noneObj4 nonlocalObj4 nonmutatingObj4 notObj4 notEqObj4 nsErrorObj4 nsObjectObj4 nsStringObj4 nullObj4 nullNodeObj4 nullptrObj4 numberObj4 obj4NoneObj4 obj4NullObj4 obj4OfObj4 obj4ProtocolObj4 objectObj4 objectMapperObj4 objectNodeObj4 objectReaderObj4 objectWriterObj4 offsetDateTimeObj4 offsetTimeObj4 onewayObj4 openObj4 operatorObj4 optionalObj4 orObj4 orEqObj4 outObj4 overrideObj4 packageObj4 paramsObj4 passObj4 portObj4 postfixObj4 precedenceObj4 prefixObj4 printObj4 printMembersObj4 printfObj4 privateObj4 protectedObj4 protocolObj4 publicObj4 quicktypeObj4 raiseObj4 rangeObj4 readonlyObj4 refObj4 regExpObj4 registerObj4 reinterpretCastObj4) =
         object $ foldMap (maybe [] pure)
         [ Just $ "dummy" .= dummyObj4
+        , Just $ "mutable" .= mutableObj4
+        , Just $ "mutating" .= mutatingObj4
         , Just $ "namespace" .= namespaceObj4
         , Just $ "native" .= nativeObj4
         , Just $ "new" .= newObj4
@@ -4597,6 +4605,8 @@ instance ToJSON Obj4 where
         , Just $ "ObjectNode" .= objectNodeObj4
         , Just $ "ObjectReader" .= objectReaderObj4
         , Just $ "ObjectWriter" .= objectWriterObj4
+        , Just $ "OffsetDateTime" .= offsetDateTimeObj4
+        , Just $ "OffsetTime" .= offsetTimeObj4
         , Just $ "oneway" .= onewayObj4
         , Just $ "open" .= openObj4
         , Just $ "operator" .= operatorObj4
@@ -4627,15 +4637,13 @@ instance ToJSON Obj4 where
         , Just $ "RegExp" .= regExpObj4
         , Just $ "register" .= registerObj4
         , Just $ "reinterpret_cast" .= reinterpretCastObj4
-        , Just $ "repeat" .= repeatObj4
-        , Just $ "require" .= requireObj4
-        , Just $ "required" .= requiredObj4
-        , Just $ "requires" .= requiresObj4
         ]
 
 instance FromJSON Obj4 where
     parseJSON (Object v) = Obj4
         <$> v .: "dummy"
+        <*> v .: "mutable"
+        <*> v .: "mutating"
         <*> v .: "namespace"
         <*> v .: "native"
         <*> v .: "new"
@@ -4666,6 +4674,8 @@ instance FromJSON Obj4 where
         <*> v .: "ObjectNode"
         <*> v .: "ObjectReader"
         <*> v .: "ObjectWriter"
+        <*> v .: "OffsetDateTime"
+        <*> v .: "OffsetTime"
         <*> v .: "oneway"
         <*> v .: "open"
         <*> v .: "operator"
@@ -4696,10 +4706,26 @@ instance FromJSON Obj4 where
         <*> v .: "RegExp"
         <*> v .: "register"
         <*> v .: "reinterpret_cast"
-        <*> v .: "repeat"
-        <*> v .: "require"
-        <*> v .: "required"
-        <*> v .: "requires"
+
+instance ToJSON Mutable where
+    toJSON (Mutable mutableMutable) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "mutable" .= mutableMutable
+        ]
+
+instance FromJSON Mutable where
+    parseJSON (Object v) = Mutable
+        <$> v .: "mutable"
+
+instance ToJSON Mutating where
+    toJSON (Mutating mutatingMutating) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "mutating" .= mutatingMutating
+        ]
+
+instance FromJSON Mutating where
+    parseJSON (Object v) = Mutating
+        <$> v .: "mutating"
 
 instance ToJSON Namespace where
     toJSON (Namespace namespaceNamespace) =
@@ -5001,6 +5027,26 @@ instance FromJSON ObjectWriter where
     parseJSON (Object v) = ObjectWriter
         <$> v .: "ObjectWriter"
 
+instance ToJSON OffsetDateTime where
+    toJSON (OffsetDateTime offsetDateTimeOffsetDateTime) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "OffsetDateTime" .= offsetDateTimeOffsetDateTime
+        ]
+
+instance FromJSON OffsetDateTime where
+    parseJSON (Object v) = OffsetDateTime
+        <$> v .: "OffsetDateTime"
+
+instance ToJSON OffsetTime where
+    toJSON (OffsetTime offsetTimeOffsetTime) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "OffsetTime" .= offsetTimeOffsetTime
+        ]
+
+instance FromJSON OffsetTime where
+    parseJSON (Object v) = OffsetTime
+        <$> v .: "OffsetTime"
+
 instance ToJSON Oneway where
     toJSON (Oneway onewayOneway) =
         object $ foldMap (maybe [] pure)
@@ -5301,57 +5347,19 @@ instance FromJSON ReinterpretCast where
     parseJSON (Object v) = ReinterpretCast
         <$> v .: "reinterpret_cast"
 
-instance ToJSON Repeat where
-    toJSON (Repeat repeatRepeat) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "repeat" .= repeatRepeat
-        ]
-
-instance FromJSON Repeat where
-    parseJSON (Object v) = Repeat
-        <$> v .: "repeat"
-
-instance ToJSON Require where
-    toJSON (Require requireRequire) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "require" .= requireRequire
-        ]
-
-instance FromJSON Require where
-    parseJSON (Object v) = Require
-        <$> v .: "require"
-
-instance ToJSON Required where
-    toJSON (Required requiredRequired) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "required" .= requiredRequired
-        ]
-
-instance FromJSON Required where
-    parseJSON (Object v) = Required
-        <$> v .: "required"
-
-instance ToJSON Requires where
-    toJSON (Requires requiresRequires) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "requires" .= requiresRequires
-        ]
-
-instance FromJSON Requires where
-    parseJSON (Object v) = Requires
-        <$> v .: "requires"
-
 instance ToJSON Obj5 where
-    toJSON (Obj5 dummyObj5 kSerializerObj5 obj5SelfObj5 obj5ThenObj5 obj5TrueObj5 obj5TypeObj5 primitiveKindObj5 purpleTypeObj5 restrictObj5 retainObj5 rethrowsObj5 returnObj5 rightObj5 runtimeTypeObj5 sObj5 sbyteObj5 sealedObj5 selObj5 selectObj5 selfObj5 sendableObj5 serialDescriptorObj5 serialNameObj5 serializableObj5 serializationFeatureObj5 serializeObj5 serializerProviderObj5 setObj5 shortObj5 signedObj5 simpleModuleObj5 sizeofObj5 stackallocObj5 standardsObj5 staticObj5 staticAssertObj5 staticCastObj5 stdDeserializerObj5 stdSerializerObj5 strictfpObj5 stringObj5 structObj5 subscriptObj5 superObj5 switchObj5 symbolObj5 synchronizedObj5 systemObj5 templateObj5 textNodeObj5 thisObj5 threadLocalObj5 throwObj5 throwsObj5 timeOnlyObj5 timeOnlyConverterObj5 timeZoneObj5 toDictObj5 toJSONObj5 toStringObj5 topLevelObj5 transientObj5 trueObj5 tryObj5 typealiasObj5) =
+    toJSON (Obj5 dummyObj5 kSerializerObj5 obj5SelfObj5 obj5ThenObj5 obj5TrueObj5 primitiveKindObj5 repeatObj5 requireObj5 requiredObj5 requiresObj5 restrictObj5 retainObj5 rethrowsObj5 returnObj5 rightObj5 runtimeTypeObj5 sObj5 sbyteObj5 sealedObj5 selObj5 selectObj5 selfObj5 sendableObj5 serialDescriptorObj5 serialNameObj5 serializableObj5 serializationFeatureObj5 serializeObj5 serializerProviderObj5 setObj5 shortObj5 signedObj5 simpleModuleObj5 sizeofObj5 stackallocObj5 standardsObj5 staticObj5 staticAssertObj5 staticCastObj5 stdDeserializerObj5 stdSerializerObj5 strictfpObj5 stringObj5 structObj5 subscriptObj5 superObj5 switchObj5 symbolObj5 synchronizedObj5 systemObj5 templateObj5 textNodeObj5 thisObj5 threadLocalObj5 throwObj5 throwsObj5 timeOnlyObj5 timeOnlyConverterObj5 timeZoneObj5 toDictObj5 toJSONObj5 toStringObj5 topLevelObj5 transientObj5 trueObj5) =
         object $ foldMap (maybe [] pure)
         [ Just $ "dummy" .= dummyObj5
         , Just $ "KSerializer" .= kSerializerObj5
         , Just $ "self" .= obj5SelfObj5
         , Just $ "then" .= obj5ThenObj5
         , Just $ "true" .= obj5TrueObj5
-        , Just $ "Type" .= obj5TypeObj5
         , Just $ "PrimitiveKind" .= primitiveKindObj5
-        , Just $ "type" .= purpleTypeObj5
+        , Just $ "repeat" .= repeatObj5
+        , Just $ "require" .= requireObj5
+        , Just $ "required" .= requiredObj5
+        , Just $ "requires" .= requiresObj5
         , Just $ "restrict" .= restrictObj5
         , Just $ "retain" .= retainObj5
         , Just $ "rethrows" .= rethrowsObj5
@@ -5407,8 +5415,6 @@ instance ToJSON Obj5 where
         , Just $ "top_level" .= topLevelObj5
         , Just $ "transient" .= transientObj5
         , Just $ "True" .= trueObj5
-        , Just $ "try" .= tryObj5
-        , Just $ "typealias" .= typealiasObj5
         ]
 
 instance FromJSON Obj5 where
@@ -5418,9 +5424,11 @@ instance FromJSON Obj5 where
         <*> v .: "self"
         <*> v .: "then"
         <*> v .: "true"
-        <*> v .: "Type"
         <*> v .: "PrimitiveKind"
-        <*> v .: "type"
+        <*> v .: "repeat"
+        <*> v .: "require"
+        <*> v .: "required"
+        <*> v .: "requires"
         <*> v .: "restrict"
         <*> v .: "retain"
         <*> v .: "rethrows"
@@ -5476,8 +5484,6 @@ instance FromJSON Obj5 where
         <*> v .: "top_level"
         <*> v .: "transient"
         <*> v .: "True"
-        <*> v .: "try"
-        <*> v .: "typealias"
 
 instance ToJSON KSerializer where
     toJSON (KSerializer kSerializerKSerializer) =
@@ -5519,16 +5525,6 @@ instance FromJSON Obj5True where
     parseJSON (Object v) = Obj5True
         <$> v .: "true"
 
-instance ToJSON Type where
-    toJSON (Type typeTypeType) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "Type" .= typeTypeType
-        ]
-
-instance FromJSON Type where
-    parseJSON (Object v) = Type
-        <$> v .: "Type"
-
 instance ToJSON PrimitiveKind where
     toJSON (PrimitiveKind primitiveKindPrimitiveKind) =
         object $ foldMap (maybe [] pure)
@@ -5539,15 +5535,45 @@ instance FromJSON PrimitiveKind where
     parseJSON (Object v) = PrimitiveKind
         <$> v .: "PrimitiveKind"
 
-instance ToJSON TypeClass where
-    toJSON (TypeClass typeTypeTypeClass) =
+instance ToJSON Repeat where
+    toJSON (Repeat repeatRepeat) =
         object $ foldMap (maybe [] pure)
-        [ Just $ "type" .= typeTypeTypeClass
+        [ Just $ "repeat" .= repeatRepeat
         ]
 
-instance FromJSON TypeClass where
-    parseJSON (Object v) = TypeClass
-        <$> v .: "type"
+instance FromJSON Repeat where
+    parseJSON (Object v) = Repeat
+        <$> v .: "repeat"
+
+instance ToJSON Require where
+    toJSON (Require requireRequire) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "require" .= requireRequire
+        ]
+
+instance FromJSON Require where
+    parseJSON (Object v) = Require
+        <$> v .: "require"
+
+instance ToJSON Required where
+    toJSON (Required requiredRequired) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "required" .= requiredRequired
+        ]
+
+instance FromJSON Required where
+    parseJSON (Object v) = Required
+        <$> v .: "required"
+
+instance ToJSON Requires where
+    toJSON (Requires requiresRequires) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "requires" .= requiresRequires
+        ]
+
+instance FromJSON Requires where
+    parseJSON (Object v) = Requires
+        <$> v .: "requires"
 
 instance ToJSON Restrict where
     toJSON (Restrict restrictRestrict) =
@@ -6099,31 +6125,15 @@ instance FromJSON TrueClass where
     parseJSON (Object v) = TrueClass
         <$> v .: "True"
 
-instance ToJSON Try where
-    toJSON (Try tryTry) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "try" .= tryTry
-        ]
-
-instance FromJSON Try where
-    parseJSON (Object v) = Try
-        <$> v .: "try"
-
-instance ToJSON Typealias where
-    toJSON (Typealias typealiasTypealias) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "typealias" .= typealiasTypealias
-        ]
-
-instance FromJSON Typealias where
-    parseJSON (Object v) = Typealias
-        <$> v .: "typealias"
-
 instance ToJSON Obj6 where
-    toJSON (Obj6 dummyObj6 obj6WhereObj6 typedefObj6 typeidObj6 typenameObj6 typeofObj6 uintObj6 ulongObj6 uncheckedObj6 undefinedObj6 unionObj6 unmarshalJSONObj6 unownedObj6 unsafeObj6 unsignedObj6 useSerializersObj6 ushortObj6 usingObj6 utf8JSONReaderObj6 utf8JSONWriterObj6 uuidObj6 varObj6 virtualObj6 voidObj6 volatileObj6 wcharTObj6 weakObj6 whileObj6 willSetObj6 withObj6 xorObj6 xorEqObj6 yesObj6 yieldObj6) =
+    toJSON (Obj6 dummyObj6 obj6TypeObj6 obj6WhereObj6 purpleTypeObj6 tryObj6 typealiasObj6 typedefObj6 typeidObj6 typenameObj6 typeofObj6 uintObj6 ulongObj6 uncheckedObj6 undefinedObj6 unionObj6 unmarshalJSONObj6 unownedObj6 unsafeObj6 unsignedObj6 useSerializersObj6 ushortObj6 usingObj6 utf8JSONReaderObj6 utf8JSONWriterObj6 uuidObj6 varObj6 virtualObj6 voidObj6 volatileObj6 wcharTObj6 weakObj6 whileObj6 willSetObj6 withObj6 xorObj6 xorEqObj6 yesObj6 yieldObj6) =
         object $ foldMap (maybe [] pure)
         [ Just $ "dummy" .= dummyObj6
+        , Just $ "Type" .= obj6TypeObj6
         , Just $ "where" .= obj6WhereObj6
+        , Just $ "type" .= purpleTypeObj6
+        , Just $ "try" .= tryObj6
+        , Just $ "typealias" .= typealiasObj6
         , Just $ "typedef" .= typedefObj6
         , Just $ "typeid" .= typeidObj6
         , Just $ "typename" .= typenameObj6
@@ -6161,7 +6171,11 @@ instance ToJSON Obj6 where
 instance FromJSON Obj6 where
     parseJSON (Object v) = Obj6
         <$> v .: "dummy"
+        <*> v .: "Type"
         <*> v .: "where"
+        <*> v .: "type"
+        <*> v .: "try"
+        <*> v .: "typealias"
         <*> v .: "typedef"
         <*> v .: "typeid"
         <*> v .: "typename"
@@ -6195,6 +6209,16 @@ instance FromJSON Obj6 where
         <*> v .: "YES"
         <*> v .: "yield"
 
+instance ToJSON Type where
+    toJSON (Type typeTypeType) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "Type" .= typeTypeType
+        ]
+
+instance FromJSON Type where
+    parseJSON (Object v) = Type
+        <$> v .: "Type"
+
 instance ToJSON Where where
     toJSON (Where whereWhereWhere) =
         object $ foldMap (maybe [] pure)
@@ -6205,6 +6229,36 @@ instance FromJSON Where where
     parseJSON (Object v) = Where
         <$> v .: "where"
 
+instance ToJSON TypeClass where
+    toJSON (TypeClass typeTypeTypeClass) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "type" .= typeTypeTypeClass
+        ]
+
+instance FromJSON TypeClass where
+    parseJSON (Object v) = TypeClass
+        <$> v .: "type"
+
+instance ToJSON Try where
+    toJSON (Try tryTry) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "try" .= tryTry
+        ]
+
+instance FromJSON Try where
+    parseJSON (Object v) = Try
+        <$> v .: "try"
+
+instance ToJSON Typealias where
+    toJSON (Typealias typealiasTypealias) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "typealias" .= typealiasTypealias
+        ]
+
+instance FromJSON Typealias where
+    parseJSON (Object v) = Typealias
+        <$> v .: "typealias"
+
 instance ToJSON Typedef where
     toJSON (Typedef typedefTypedef) =
         object $ foldMap (maybe [] pure)
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/LocalDateClass.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/LocalDateClass.java
new file mode 100644
index 0000000..b3247eb
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/LocalDateClass.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class LocalDateClass {
+    private long localDate;
+
+    @JsonProperty("LocalDate")
+    public long getLocalDate() { return localDate; }
+    @JsonProperty("LocalDate")
+    public void setLocalDate(long value) { this.localDate = value; }
+}
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
index fdf7c58..72bf3e9 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
@@ -51,6 +51,7 @@ public class Obj3 {
     private Left left;
     private Let let;
     private ListClass list;
+    private LocalDateClass localDate;
     private Locale locale;
     private Lock lock;
     private LongNode longNode;
@@ -59,8 +60,6 @@ public class Obj3 {
     private MarshalJSON marshalJSON;
     private MetadataPropertyHandling metadataPropertyHandling;
     private Module module;
-    private Mutable mutable;
-    private Mutating mutating;
     private Goto obj3Goto;
     private If obj3If;
     private Implements obj3Implements;
@@ -310,6 +309,11 @@ public class Obj3 {
     @JsonProperty("list")
     public void setList(ListClass value) { this.list = value; }
 
+    @JsonProperty("LocalDate")
+    public LocalDateClass getLocalDate() { return localDate; }
+    @JsonProperty("LocalDate")
+    public void setLocalDate(LocalDateClass value) { this.localDate = value; }
+
     @JsonProperty("Locale")
     public Locale getLocale() { return locale; }
     @JsonProperty("Locale")
@@ -350,16 +354,6 @@ public class Obj3 {
     @JsonProperty("module")
     public void setModule(Module value) { this.module = value; }
 
-    @JsonProperty("mutable")
-    public Mutable getMutable() { return mutable; }
-    @JsonProperty("mutable")
-    public void setMutable(Mutable value) { this.mutable = value; }
-
-    @JsonProperty("mutating")
-    public Mutating getMutating() { return mutating; }
-    @JsonProperty("mutating")
-    public void setMutating(Mutating value) { this.mutating = value; }
-
     @JsonProperty("goto")
     public Goto getObj3Goto() { return obj3Goto; }
     @JsonProperty("goto")
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
index c8b0ac2..41cabb1 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.*;
 
 public class Obj4 {
     private long dummy;
+    private Mutable mutable;
+    private Mutating mutating;
     private Namespace namespace;
     private Newtonsoft newtonsoft;
     private Nil nil;
@@ -38,6 +40,8 @@ public class Obj4 {
     private ObjectReaderClass objectReader;
     private ObjectWriterClass objectWriter;
     private Of of;
+    private OffsetDateTimeClass offsetDateTime;
+    private OffsetTimeClass offsetTime;
     private Oneway oneway;
     private Open open;
     private Operator operator;
@@ -64,16 +68,22 @@ public class Obj4 {
     private RegExp regExp;
     private Register register;
     private ReinterpretCast reinterpretCast;
-    private Repeat repeat;
-    private Require require;
-    private Required required;
-    private Requires requires;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
     @JsonProperty("dummy")
     public void setDummy(long value) { this.dummy = value; }
 
+    @JsonProperty("mutable")
+    public Mutable getMutable() { return mutable; }
+    @JsonProperty("mutable")
+    public void setMutable(Mutable value) { this.mutable = value; }
+
+    @JsonProperty("mutating")
+    public Mutating getMutating() { return mutating; }
+    @JsonProperty("mutating")
+    public void setMutating(Mutating value) { this.mutating = value; }
+
     @JsonProperty("namespace")
     public Namespace getNamespace() { return namespace; }
     @JsonProperty("namespace")
@@ -244,6 +254,16 @@ public class Obj4 {
     @JsonProperty("of")
     public void setOf(Of value) { this.of = value; }
 
+    @JsonProperty("OffsetDateTime")
+    public OffsetDateTimeClass getOffsetDateTime() { return offsetDateTime; }
+    @JsonProperty("OffsetDateTime")
+    public void setOffsetDateTime(OffsetDateTimeClass value) { this.offsetDateTime = value; }
+
+    @JsonProperty("OffsetTime")
+    public OffsetTimeClass getOffsetTime() { return offsetTime; }
+    @JsonProperty("OffsetTime")
+    public void setOffsetTime(OffsetTimeClass value) { this.offsetTime = value; }
+
     @JsonProperty("oneway")
     public Oneway getOneway() { return oneway; }
     @JsonProperty("oneway")
@@ -373,24 +393,4 @@ public class Obj4 {
     public ReinterpretCast getReinterpretCast() { return reinterpretCast; }
     @JsonProperty("reinterpret_cast")
     public void setReinterpretCast(ReinterpretCast value) { this.reinterpretCast = value; }
-
-    @JsonProperty("repeat")
-    public Repeat getRepeat() { return repeat; }
-    @JsonProperty("repeat")
-    public void setRepeat(Repeat value) { this.repeat = value; }
-
-    @JsonProperty("require")
-    public Require getRequire() { return require; }
-    @JsonProperty("require")
-    public void setRequire(Require value) { this.require = value; }
-
-    @JsonProperty("required")
-    public Required getRequired() { return required; }
-    @JsonProperty("required")
-    public void setRequired(Required value) { this.required = value; }
-
-    @JsonProperty("requires")
-    public Requires getRequires() { return requires; }
-    @JsonProperty("requires")
-    public void setRequires(Requires value) { this.requires = value; }
 }
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
index 12bc886..3bb4014 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
@@ -18,10 +18,12 @@ public class Obj5 {
     private Throws obj5Throws;
     private Transient obj5Transient;
     private True obj5True;
-    private Try obj5Try;
-    private TypeClass obj5Type;
     private PrimitiveKind primitiveKind;
     private TrueClass purpleTrue;
+    private Repeat repeat;
+    private Require require;
+    private Required required;
+    private Requires requires;
     private Restrict restrict;
     private Retain retain;
     private Rethrows rethrows;
@@ -66,8 +68,6 @@ public class Obj5 {
     private ToJSON toJSON;
     private ToString toString;
     private TopLevelClass topLevel;
-    private Type type;
-    private Typealias typealias;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
@@ -144,16 +144,6 @@ public class Obj5 {
     @JsonProperty("True")
     public void setObj5True(True value) { this.obj5True = value; }
 
-    @JsonProperty("try")
-    public Try getObj5Try() { return obj5Try; }
-    @JsonProperty("try")
-    public void setObj5Try(Try value) { this.obj5Try = value; }
-
-    @JsonProperty("type")
-    public TypeClass getObj5Type() { return obj5Type; }
-    @JsonProperty("type")
-    public void setObj5Type(TypeClass value) { this.obj5Type = value; }
-
     @JsonProperty("PrimitiveKind")
     public PrimitiveKind getPrimitiveKind() { return primitiveKind; }
     @JsonProperty("PrimitiveKind")
@@ -164,6 +154,26 @@ public class Obj5 {
     @JsonProperty("true")
     public void setPurpleTrue(TrueClass value) { this.purpleTrue = value; }
 
+    @JsonProperty("repeat")
+    public Repeat getRepeat() { return repeat; }
+    @JsonProperty("repeat")
+    public void setRepeat(Repeat value) { this.repeat = value; }
+
+    @JsonProperty("require")
+    public Require getRequire() { return require; }
+    @JsonProperty("require")
+    public void setRequire(Require value) { this.require = value; }
+
+    @JsonProperty("required")
+    public Required getRequired() { return required; }
+    @JsonProperty("required")
+    public void setRequired(Required value) { this.required = value; }
+
+    @JsonProperty("requires")
+    public Requires getRequires() { return requires; }
+    @JsonProperty("requires")
+    public void setRequires(Requires value) { this.requires = value; }
+
     @JsonProperty("restrict")
     public Restrict getRestrict() { return restrict; }
     @JsonProperty("restrict")
@@ -383,14 +393,4 @@ public class Obj5 {
     public TopLevelClass getTopLevel() { return topLevel; }
     @JsonProperty("top_level")
     public void setTopLevel(TopLevelClass value) { this.topLevel = value; }
-
-    @JsonProperty("Type")
-    public Type getType() { return type; }
-    @JsonProperty("Type")
-    public void setType(Type value) { this.type = value; }
-
-    @JsonProperty("typealias")
-    public Typealias getTypealias() { return typealias; }
-    @JsonProperty("typealias")
-    public void setTypealias(Typealias value) { this.typealias = value; }
 }
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
index 007c477..b67aa1e 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
@@ -4,9 +4,13 @@ import com.fasterxml.jackson.annotation.*;
 
 public class Obj6 {
     private long dummy;
+    private Try obj6Try;
+    private TypeClass obj6Type;
     private Void obj6Void;
     private Volatile obj6Volatile;
     private While obj6While;
+    private Type type;
+    private Typealias typealias;
     private Typedef typedef;
     private Typeid typeid;
     private Typename typename;
@@ -43,6 +47,16 @@ public class Obj6 {
     @JsonProperty("dummy")
     public void setDummy(long value) { this.dummy = value; }
 
+    @JsonProperty("try")
+    public Try getObj6Try() { return obj6Try; }
+    @JsonProperty("try")
+    public void setObj6Try(Try value) { this.obj6Try = value; }
+
+    @JsonProperty("type")
+    public TypeClass getObj6Type() { return obj6Type; }
+    @JsonProperty("type")
+    public void setObj6Type(TypeClass value) { this.obj6Type = value; }
+
     @JsonProperty("void")
     public Void getObj6Void() { return obj6Void; }
     @JsonProperty("void")
@@ -58,6 +72,16 @@ public class Obj6 {
     @JsonProperty("while")
     public void setObj6While(While value) { this.obj6While = value; }
 
+    @JsonProperty("Type")
+    public Type getType() { return type; }
+    @JsonProperty("Type")
+    public void setType(Type value) { this.type = value; }
+
+    @JsonProperty("typealias")
+    public Typealias getTypealias() { return typealias; }
+    @JsonProperty("typealias")
+    public void setTypealias(Typealias value) { this.typealias = value; }
+
     @JsonProperty("typedef")
     public Typedef getTypedef() { return typedef; }
     @JsonProperty("typedef")
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetDateTimeClass.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetDateTimeClass.java
new file mode 100644
index 0000000..058ff49
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetDateTimeClass.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class OffsetDateTimeClass {
+    private long offsetDateTime;
+
+    @JsonProperty("OffsetDateTime")
+    public long getOffsetDateTime() { return offsetDateTime; }
+    @JsonProperty("OffsetDateTime")
+    public void setOffsetDateTime(long value) { this.offsetDateTime = value; }
+}
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetTimeClass.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetTimeClass.java
new file mode 100644
index 0000000..75b3c5f
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetTimeClass.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class OffsetTimeClass {
+    private long offsetTime;
+
+    @JsonProperty("OffsetTime")
+    public long getOffsetTime() { return offsetTime; }
+    @JsonProperty("OffsetTime")
+    public void setOffsetTime(long value) { this.offsetTime = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/LocalDate.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/LocalDate.java
new file mode 100644
index 0000000..86f36c6
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/LocalDate.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class LocalDate {
+    private long localDate;
+
+    @JsonProperty("LocalDate")
+    public long getLocalDate() { return localDate; }
+    @JsonProperty("LocalDate")
+    public void setLocalDate(long value) { this.localDate = value; }
+}
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
index fdf7c58..fbcf4b2 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
@@ -51,6 +51,7 @@ public class Obj3 {
     private Left left;
     private Let let;
     private ListClass list;
+    private LocalDate localDate;
     private Locale locale;
     private Lock lock;
     private LongNode longNode;
@@ -59,8 +60,6 @@ public class Obj3 {
     private MarshalJSON marshalJSON;
     private MetadataPropertyHandling metadataPropertyHandling;
     private Module module;
-    private Mutable mutable;
-    private Mutating mutating;
     private Goto obj3Goto;
     private If obj3If;
     private Implements obj3Implements;
@@ -310,6 +309,11 @@ public class Obj3 {
     @JsonProperty("list")
     public void setList(ListClass value) { this.list = value; }
 
+    @JsonProperty("LocalDate")
+    public LocalDate getLocalDate() { return localDate; }
+    @JsonProperty("LocalDate")
+    public void setLocalDate(LocalDate value) { this.localDate = value; }
+
     @JsonProperty("Locale")
     public Locale getLocale() { return locale; }
     @JsonProperty("Locale")
@@ -350,16 +354,6 @@ public class Obj3 {
     @JsonProperty("module")
     public void setModule(Module value) { this.module = value; }
 
-    @JsonProperty("mutable")
-    public Mutable getMutable() { return mutable; }
-    @JsonProperty("mutable")
-    public void setMutable(Mutable value) { this.mutable = value; }
-
-    @JsonProperty("mutating")
-    public Mutating getMutating() { return mutating; }
-    @JsonProperty("mutating")
-    public void setMutating(Mutating value) { this.mutating = value; }
-
     @JsonProperty("goto")
     public Goto getObj3Goto() { return obj3Goto; }
     @JsonProperty("goto")
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
index c8b0ac2..7baa374 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.*;
 
 public class Obj4 {
     private long dummy;
+    private Mutable mutable;
+    private Mutating mutating;
     private Namespace namespace;
     private Newtonsoft newtonsoft;
     private Nil nil;
@@ -38,6 +40,8 @@ public class Obj4 {
     private ObjectReaderClass objectReader;
     private ObjectWriterClass objectWriter;
     private Of of;
+    private OffsetDateTime offsetDateTime;
+    private OffsetTime offsetTime;
     private Oneway oneway;
     private Open open;
     private Operator operator;
@@ -64,16 +68,22 @@ public class Obj4 {
     private RegExp regExp;
     private Register register;
     private ReinterpretCast reinterpretCast;
-    private Repeat repeat;
-    private Require require;
-    private Required required;
-    private Requires requires;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
     @JsonProperty("dummy")
     public void setDummy(long value) { this.dummy = value; }
 
+    @JsonProperty("mutable")
+    public Mutable getMutable() { return mutable; }
+    @JsonProperty("mutable")
+    public void setMutable(Mutable value) { this.mutable = value; }
+
+    @JsonProperty("mutating")
+    public Mutating getMutating() { return mutating; }
+    @JsonProperty("mutating")
+    public void setMutating(Mutating value) { this.mutating = value; }
+
     @JsonProperty("namespace")
     public Namespace getNamespace() { return namespace; }
     @JsonProperty("namespace")
@@ -244,6 +254,16 @@ public class Obj4 {
     @JsonProperty("of")
     public void setOf(Of value) { this.of = value; }
 
+    @JsonProperty("OffsetDateTime")
+    public OffsetDateTime getOffsetDateTime() { return offsetDateTime; }
+    @JsonProperty("OffsetDateTime")
+    public void setOffsetDateTime(OffsetDateTime value) { this.offsetDateTime = value; }
+
+    @JsonProperty("OffsetTime")
+    public OffsetTime getOffsetTime() { return offsetTime; }
+    @JsonProperty("OffsetTime")
+    public void setOffsetTime(OffsetTime value) { this.offsetTime = value; }
+
     @JsonProperty("oneway")
     public Oneway getOneway() { return oneway; }
     @JsonProperty("oneway")
@@ -373,24 +393,4 @@ public class Obj4 {
     public ReinterpretCast getReinterpretCast() { return reinterpretCast; }
     @JsonProperty("reinterpret_cast")
     public void setReinterpretCast(ReinterpretCast value) { this.reinterpretCast = value; }
-
-    @JsonProperty("repeat")
-    public Repeat getRepeat() { return repeat; }
-    @JsonProperty("repeat")
-    public void setRepeat(Repeat value) { this.repeat = value; }
-
-    @JsonProperty("require")
-    public Require getRequire() { return require; }
-    @JsonProperty("require")
-    public void setRequire(Require value) { this.require = value; }
-
-    @JsonProperty("required")
-    public Required getRequired() { return required; }
-    @JsonProperty("required")
-    public void setRequired(Required value) { this.required = value; }
-
-    @JsonProperty("requires")
-    public Requires getRequires() { return requires; }
-    @JsonProperty("requires")
-    public void setRequires(Requires value) { this.requires = value; }
 }
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
index 12bc886..3bb4014 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
@@ -18,10 +18,12 @@ public class Obj5 {
     private Throws obj5Throws;
     private Transient obj5Transient;
     private True obj5True;
-    private Try obj5Try;
-    private TypeClass obj5Type;
     private PrimitiveKind primitiveKind;
     private TrueClass purpleTrue;
+    private Repeat repeat;
+    private Require require;
+    private Required required;
+    private Requires requires;
     private Restrict restrict;
     private Retain retain;
     private Rethrows rethrows;
@@ -66,8 +68,6 @@ public class Obj5 {
     private ToJSON toJSON;
     private ToString toString;
     private TopLevelClass topLevel;
-    private Type type;
-    private Typealias typealias;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
@@ -144,16 +144,6 @@ public class Obj5 {
     @JsonProperty("True")
     public void setObj5True(True value) { this.obj5True = value; }
 
-    @JsonProperty("try")
-    public Try getObj5Try() { return obj5Try; }
-    @JsonProperty("try")
-    public void setObj5Try(Try value) { this.obj5Try = value; }
-
-    @JsonProperty("type")
-    public TypeClass getObj5Type() { return obj5Type; }
-    @JsonProperty("type")
-    public void setObj5Type(TypeClass value) { this.obj5Type = value; }
-
     @JsonProperty("PrimitiveKind")
     public PrimitiveKind getPrimitiveKind() { return primitiveKind; }
     @JsonProperty("PrimitiveKind")
@@ -164,6 +154,26 @@ public class Obj5 {
     @JsonProperty("true")
     public void setPurpleTrue(TrueClass value) { this.purpleTrue = value; }
 
+    @JsonProperty("repeat")
+    public Repeat getRepeat() { return repeat; }
+    @JsonProperty("repeat")
+    public void setRepeat(Repeat value) { this.repeat = value; }
+
+    @JsonProperty("require")
+    public Require getRequire() { return require; }
+    @JsonProperty("require")
+    public void setRequire(Require value) { this.require = value; }
+
+    @JsonProperty("required")
+    public Required getRequired() { return required; }
+    @JsonProperty("required")
+    public void setRequired(Required value) { this.required = value; }
+
+    @JsonProperty("requires")
+    public Requires getRequires() { return requires; }
+    @JsonProperty("requires")
+    public void setRequires(Requires value) { this.requires = value; }
+
     @JsonProperty("restrict")
     public Restrict getRestrict() { return restrict; }
     @JsonProperty("restrict")
@@ -383,14 +393,4 @@ public class Obj5 {
     public TopLevelClass getTopLevel() { return topLevel; }
     @JsonProperty("top_level")
     public void setTopLevel(TopLevelClass value) { this.topLevel = value; }
-
-    @JsonProperty("Type")
-    public Type getType() { return type; }
-    @JsonProperty("Type")
-    public void setType(Type value) { this.type = value; }
-
-    @JsonProperty("typealias")
-    public Typealias getTypealias() { return typealias; }
-    @JsonProperty("typealias")
-    public void setTypealias(Typealias value) { this.typealias = value; }
 }
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
index 007c477..b67aa1e 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
@@ -4,9 +4,13 @@ import com.fasterxml.jackson.annotation.*;
 
 public class Obj6 {
     private long dummy;
+    private Try obj6Try;
+    private TypeClass obj6Type;
     private Void obj6Void;
     private Volatile obj6Volatile;
     private While obj6While;
+    private Type type;
+    private Typealias typealias;
     private Typedef typedef;
     private Typeid typeid;
     private Typename typename;
@@ -43,6 +47,16 @@ public class Obj6 {
     @JsonProperty("dummy")
     public void setDummy(long value) { this.dummy = value; }
 
+    @JsonProperty("try")
+    public Try getObj6Try() { return obj6Try; }
+    @JsonProperty("try")
+    public void setObj6Try(Try value) { this.obj6Try = value; }
+
+    @JsonProperty("type")
+    public TypeClass getObj6Type() { return obj6Type; }
+    @JsonProperty("type")
+    public void setObj6Type(TypeClass value) { this.obj6Type = value; }
+
     @JsonProperty("void")
     public Void getObj6Void() { return obj6Void; }
     @JsonProperty("void")
@@ -58,6 +72,16 @@ public class Obj6 {
     @JsonProperty("while")
     public void setObj6While(While value) { this.obj6While = value; }
 
+    @JsonProperty("Type")
+    public Type getType() { return type; }
+    @JsonProperty("Type")
+    public void setType(Type value) { this.type = value; }
+
+    @JsonProperty("typealias")
+    public Typealias getTypealias() { return typealias; }
+    @JsonProperty("typealias")
+    public void setTypealias(Typealias value) { this.typealias = value; }
+
     @JsonProperty("typedef")
     public Typedef getTypedef() { return typedef; }
     @JsonProperty("typedef")
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetDateTime.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetDateTime.java
new file mode 100644
index 0000000..d995ffc
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetDateTime.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class OffsetDateTime {
+    private long offsetDateTime;
+
+    @JsonProperty("OffsetDateTime")
+    public long getOffsetDateTime() { return offsetDateTime; }
+    @JsonProperty("OffsetDateTime")
+    public void setOffsetDateTime(long value) { this.offsetDateTime = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetTime.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetTime.java
new file mode 100644
index 0000000..cfec7ad
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetTime.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class OffsetTime {
+    private long offsetTime;
+
+    @JsonProperty("OffsetTime")
+    public long getOffsetTime() { return offsetTime; }
+    @JsonProperty("OffsetTime")
+    public void setOffsetTime(long value) { this.offsetTime = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/LocalDateClass.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/LocalDateClass.java
new file mode 100644
index 0000000..b3247eb
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/LocalDateClass.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class LocalDateClass {
+    private long localDate;
+
+    @JsonProperty("LocalDate")
+    public long getLocalDate() { return localDate; }
+    @JsonProperty("LocalDate")
+    public void setLocalDate(long value) { this.localDate = value; }
+}
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
index fdf7c58..72bf3e9 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
@@ -51,6 +51,7 @@ public class Obj3 {
     private Left left;
     private Let let;
     private ListClass list;
+    private LocalDateClass localDate;
     private Locale locale;
     private Lock lock;
     private LongNode longNode;
@@ -59,8 +60,6 @@ public class Obj3 {
     private MarshalJSON marshalJSON;
     private MetadataPropertyHandling metadataPropertyHandling;
     private Module module;
-    private Mutable mutable;
-    private Mutating mutating;
     private Goto obj3Goto;
     private If obj3If;
     private Implements obj3Implements;
@@ -310,6 +309,11 @@ public class Obj3 {
     @JsonProperty("list")
     public void setList(ListClass value) { this.list = value; }
 
+    @JsonProperty("LocalDate")
+    public LocalDateClass getLocalDate() { return localDate; }
+    @JsonProperty("LocalDate")
+    public void setLocalDate(LocalDateClass value) { this.localDate = value; }
+
     @JsonProperty("Locale")
     public Locale getLocale() { return locale; }
     @JsonProperty("Locale")
@@ -350,16 +354,6 @@ public class Obj3 {
     @JsonProperty("module")
     public void setModule(Module value) { this.module = value; }
 
-    @JsonProperty("mutable")
-    public Mutable getMutable() { return mutable; }
-    @JsonProperty("mutable")
-    public void setMutable(Mutable value) { this.mutable = value; }
-
-    @JsonProperty("mutating")
-    public Mutating getMutating() { return mutating; }
-    @JsonProperty("mutating")
-    public void setMutating(Mutating value) { this.mutating = value; }
-
     @JsonProperty("goto")
     public Goto getObj3Goto() { return obj3Goto; }
     @JsonProperty("goto")
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
index c8b0ac2..41cabb1 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.*;
 
 public class Obj4 {
     private long dummy;
+    private Mutable mutable;
+    private Mutating mutating;
     private Namespace namespace;
     private Newtonsoft newtonsoft;
     private Nil nil;
@@ -38,6 +40,8 @@ public class Obj4 {
     private ObjectReaderClass objectReader;
     private ObjectWriterClass objectWriter;
     private Of of;
+    private OffsetDateTimeClass offsetDateTime;
+    private OffsetTimeClass offsetTime;
     private Oneway oneway;
     private Open open;
     private Operator operator;
@@ -64,16 +68,22 @@ public class Obj4 {
     private RegExp regExp;
     private Register register;
     private ReinterpretCast reinterpretCast;
-    private Repeat repeat;
-    private Require require;
-    private Required required;
-    private Requires requires;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
     @JsonProperty("dummy")
     public void setDummy(long value) { this.dummy = value; }
 
+    @JsonProperty("mutable")
+    public Mutable getMutable() { return mutable; }
+    @JsonProperty("mutable")
+    public void setMutable(Mutable value) { this.mutable = value; }
+
+    @JsonProperty("mutating")
+    public Mutating getMutating() { return mutating; }
+    @JsonProperty("mutating")
+    public void setMutating(Mutating value) { this.mutating = value; }
+
     @JsonProperty("namespace")
     public Namespace getNamespace() { return namespace; }
     @JsonProperty("namespace")
@@ -244,6 +254,16 @@ public class Obj4 {
     @JsonProperty("of")
     public void setOf(Of value) { this.of = value; }
 
+    @JsonProperty("OffsetDateTime")
+    public OffsetDateTimeClass getOffsetDateTime() { return offsetDateTime; }
+    @JsonProperty("OffsetDateTime")
+    public void setOffsetDateTime(OffsetDateTimeClass value) { this.offsetDateTime = value; }
+
+    @JsonProperty("OffsetTime")
+    public OffsetTimeClass getOffsetTime() { return offsetTime; }
+    @JsonProperty("OffsetTime")
+    public void setOffsetTime(OffsetTimeClass value) { this.offsetTime = value; }
+
     @JsonProperty("oneway")
     public Oneway getOneway() { return oneway; }
     @JsonProperty("oneway")
@@ -373,24 +393,4 @@ public class Obj4 {
     public ReinterpretCast getReinterpretCast() { return reinterpretCast; }
     @JsonProperty("reinterpret_cast")
     public void setReinterpretCast(ReinterpretCast value) { this.reinterpretCast = value; }
-
-    @JsonProperty("repeat")
-    public Repeat getRepeat() { return repeat; }
-    @JsonProperty("repeat")
-    public void setRepeat(Repeat value) { this.repeat = value; }
-
-    @JsonProperty("require")
-    public Require getRequire() { return require; }
-    @JsonProperty("require")
-    public void setRequire(Require value) { this.require = value; }
-
-    @JsonProperty("required")
-    public Required getRequired() { return required; }
-    @JsonProperty("required")
-    public void setRequired(Required value) { this.required = value; }
-
-    @JsonProperty("requires")
-    public Requires getRequires() { return requires; }
-    @JsonProperty("requires")
-    public void setRequires(Requires value) { this.requires = value; }
 }
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
index 12bc886..3bb4014 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
@@ -18,10 +18,12 @@ public class Obj5 {
     private Throws obj5Throws;
     private Transient obj5Transient;
     private True obj5True;
-    private Try obj5Try;
-    private TypeClass obj5Type;
     private PrimitiveKind primitiveKind;
     private TrueClass purpleTrue;
+    private Repeat repeat;
+    private Require require;
+    private Required required;
+    private Requires requires;
     private Restrict restrict;
     private Retain retain;
     private Rethrows rethrows;
@@ -66,8 +68,6 @@ public class Obj5 {
     private ToJSON toJSON;
     private ToString toString;
     private TopLevelClass topLevel;
-    private Type type;
-    private Typealias typealias;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
@@ -144,16 +144,6 @@ public class Obj5 {
     @JsonProperty("True")
     public void setObj5True(True value) { this.obj5True = value; }
 
-    @JsonProperty("try")
-    public Try getObj5Try() { return obj5Try; }
-    @JsonProperty("try")
-    public void setObj5Try(Try value) { this.obj5Try = value; }
-
-    @JsonProperty("type")
-    public TypeClass getObj5Type() { return obj5Type; }
-    @JsonProperty("type")
-    public void setObj5Type(TypeClass value) { this.obj5Type = value; }
-
     @JsonProperty("PrimitiveKind")
     public PrimitiveKind getPrimitiveKind() { return primitiveKind; }
     @JsonProperty("PrimitiveKind")
@@ -164,6 +154,26 @@ public class Obj5 {
     @JsonProperty("true")
     public void setPurpleTrue(TrueClass value) { this.purpleTrue = value; }
 
+    @JsonProperty("repeat")
+    public Repeat getRepeat() { return repeat; }
+    @JsonProperty("repeat")
+    public void setRepeat(Repeat value) { this.repeat = value; }
+
+    @JsonProperty("require")
+    public Require getRequire() { return require; }
+    @JsonProperty("require")
+    public void setRequire(Require value) { this.require = value; }
+
+    @JsonProperty("required")
+    public Required getRequired() { return required; }
+    @JsonProperty("required")
+    public void setRequired(Required value) { this.required = value; }
+
+    @JsonProperty("requires")
+    public Requires getRequires() { return requires; }
+    @JsonProperty("requires")
+    public void setRequires(Requires value) { this.requires = value; }
+
     @JsonProperty("restrict")
     public Restrict getRestrict() { return restrict; }
     @JsonProperty("restrict")
@@ -383,14 +393,4 @@ public class Obj5 {
     public TopLevelClass getTopLevel() { return topLevel; }
     @JsonProperty("top_level")
     public void setTopLevel(TopLevelClass value) { this.topLevel = value; }
-
-    @JsonProperty("Type")
-    public Type getType() { return type; }
-    @JsonProperty("Type")
-    public void setType(Type value) { this.type = value; }
-
-    @JsonProperty("typealias")
-    public Typealias getTypealias() { return typealias; }
-    @JsonProperty("typealias")
-    public void setTypealias(Typealias value) { this.typealias = value; }
 }
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
index 007c477..b67aa1e 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
@@ -4,9 +4,13 @@ import com.fasterxml.jackson.annotation.*;
 
 public class Obj6 {
     private long dummy;
+    private Try obj6Try;
+    private TypeClass obj6Type;
     private Void obj6Void;
     private Volatile obj6Volatile;
     private While obj6While;
+    private Type type;
+    private Typealias typealias;
     private Typedef typedef;
     private Typeid typeid;
     private Typename typename;
@@ -43,6 +47,16 @@ public class Obj6 {
     @JsonProperty("dummy")
     public void setDummy(long value) { this.dummy = value; }
 
+    @JsonProperty("try")
+    public Try getObj6Try() { return obj6Try; }
+    @JsonProperty("try")
+    public void setObj6Try(Try value) { this.obj6Try = value; }
+
+    @JsonProperty("type")
+    public TypeClass getObj6Type() { return obj6Type; }
+    @JsonProperty("type")
+    public void setObj6Type(TypeClass value) { this.obj6Type = value; }
+
     @JsonProperty("void")
     public Void getObj6Void() { return obj6Void; }
     @JsonProperty("void")
@@ -58,6 +72,16 @@ public class Obj6 {
     @JsonProperty("while")
     public void setObj6While(While value) { this.obj6While = value; }
 
+    @JsonProperty("Type")
+    public Type getType() { return type; }
+    @JsonProperty("Type")
+    public void setType(Type value) { this.type = value; }
+
+    @JsonProperty("typealias")
+    public Typealias getTypealias() { return typealias; }
+    @JsonProperty("typealias")
+    public void setTypealias(Typealias value) { this.typealias = value; }
+
     @JsonProperty("typedef")
     public Typedef getTypedef() { return typedef; }
     @JsonProperty("typedef")
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetDateTimeClass.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetDateTimeClass.java
new file mode 100644
index 0000000..058ff49
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetDateTimeClass.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class OffsetDateTimeClass {
+    private long offsetDateTime;
+
+    @JsonProperty("OffsetDateTime")
+    public long getOffsetDateTime() { return offsetDateTime; }
+    @JsonProperty("OffsetDateTime")
+    public void setOffsetDateTime(long value) { this.offsetDateTime = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetTimeClass.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetTimeClass.java
new file mode 100644
index 0000000..75b3c5f
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/OffsetTimeClass.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class OffsetTimeClass {
+    private long offsetTime;
+
+    @JsonProperty("OffsetTime")
+    public long getOffsetTime() { return offsetTime; }
+    @JsonProperty("OffsetTime")
+    public void setOffsetTime(long value) { this.offsetTime = value; }
+}
diff --git a/base/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js
index 92d25f9..9c6effa 100644
--- a/base/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js
@@ -737,6 +737,7 @@ const typeMap = {
         { json: "JsonParser", js: "JsonParser", typ: r("JSONParser") },
         { json: "JsonReader", js: "JsonReader", typ: r("JSONReader") },
         { json: "JsonTokenType", js: "JsonTokenType", typ: r("JSONTokenType") },
+        { json: "LocalDate", js: "LocalDate", typ: r("LocalDate") },
         { json: "Locale", js: "Locale", typ: r("Locale") },
         { json: "LongNode", js: "LongNode", typ: r("LongNode") },
         { json: "MapEntry", js: "MapEntry", typ: r("MapEntry") },
@@ -785,8 +786,6 @@ const typeMap = {
         { json: "map", js: "map", typ: r("Map") },
         { json: "metadata_property_handling", js: "metadata_property_handling", typ: r("MetadataPropertyHandling") },
         { json: "module", js: "module", typ: r("Module") },
-        { json: "mutable", js: "mutable", typ: r("Mutable") },
-        { json: "mutating", js: "mutating", typ: r("Mutating") },
     ], false),
     "Hashable": o([
         { json: "Hashable", js: "Hashable", typ: i(0) },
@@ -836,6 +835,9 @@ const typeMap = {
     "JSONTokenType": o([
         { json: "JsonTokenType", js: "JsonTokenType", typ: i(0) },
     ], false),
+    "LocalDate": o([
+        { json: "LocalDate", js: "LocalDate", typ: i(0) },
+    ], false),
     "Locale": o([
         { json: "Locale", js: "Locale", typ: i(0) },
     ], false),
@@ -977,12 +979,6 @@ const typeMap = {
     "Module": o([
         { json: "module", js: "module", typ: i(0) },
     ], false),
-    "Mutable": o([
-        { json: "mutable", js: "mutable", typ: i(0) },
-    ], false),
-    "Mutating": o([
-        { json: "mutating", js: "mutating", typ: i(0) },
-    ], false),
     "Obj4": o([
         { json: "NO", js: "NO", typ: r("No") },
         { json: "NSError", js: "NSError", typ: r("NSError") },
@@ -995,9 +991,13 @@ const typeMap = {
         { json: "ObjectNode", js: "ObjectNode", typ: r("ObjectNode") },
         { json: "ObjectReader", js: "ObjectReader", typ: r("ObjectReader") },
         { json: "ObjectWriter", js: "ObjectWriter", typ: r("ObjectWriter") },
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: r("OffsetDateTime") },
+        { json: "OffsetTime", js: "OffsetTime", typ: r("OffsetTime") },
         { json: "Protocol", js: "Protocol", typ: r("Protocol") },
         { json: "RegExp", js: "RegExp", typ: r("RegExp") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "mutable", js: "mutable", typ: r("Mutable") },
+        { json: "mutating", js: "mutating", typ: r("Mutating") },
         { json: "namespace", js: "namespace", typ: r("Namespace") },
         { json: "native", js: "native", typ: r("Native") },
         { json: "new", js: "new", typ: r("New") },
@@ -1045,10 +1045,6 @@ const typeMap = {
         { json: "ref", js: "ref", typ: r("Ref") },
         { json: "register", js: "register", typ: r("Register") },
         { json: "reinterpret_cast", js: "reinterpret_cast", typ: r("ReinterpretCast") },
-        { json: "repeat", js: "repeat", typ: r("Repeat") },
-        { json: "require", js: "require", typ: r("Require") },
-        { json: "required", js: "required", typ: r("Required") },
-        { json: "requires", js: "requires", typ: r("Requires") },
     ], false),
     "No": o([
         { json: "NO", js: "NO", typ: i(0) },
@@ -1083,12 +1079,24 @@ const typeMap = {
     "ObjectWriter": o([
         { json: "ObjectWriter", js: "ObjectWriter", typ: i(0) },
     ], false),
+    "OffsetDateTime": o([
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: i(0) },
+    ], false),
+    "OffsetTime": o([
+        { json: "OffsetTime", js: "OffsetTime", typ: i(0) },
+    ], false),
     "Protocol": o([
         { json: "Protocol", js: "Protocol", typ: i(0) },
     ], false),
     "RegExp": o([
         { json: "RegExp", js: "RegExp", typ: { uuid: "" } },
     ], false),
+    "Mutable": o([
+        { json: "mutable", js: "mutable", typ: i(0) },
+    ], false),
+    "Mutating": o([
+        { json: "mutating", js: "mutating", typ: i(0) },
+    ], false),
     "Namespace": o([
         { json: "namespace", js: "namespace", typ: i(0) },
     ], false),
@@ -1230,18 +1238,6 @@ const typeMap = {
     "ReinterpretCast": o([
         { json: "reinterpret_cast", js: "reinterpret_cast", typ: i(0) },
     ], false),
-    "Repeat": o([
-        { json: "repeat", js: "repeat", typ: i(0) },
-    ], false),
-    "Require": o([
-        { json: "require", js: "require", typ: i(0) },
-    ], false),
-    "Required": o([
-        { json: "required", js: "required", typ: i(0) },
-    ], false),
-    "Requires": o([
-        { json: "requires", js: "requires", typ: i(0) },
-    ], false),
     "Obj5": o([
         { json: "KSerializer", js: "KSerializer", typ: r("KSerializer") },
         { json: "PrimitiveKind", js: "PrimitiveKind", typ: r("PrimitiveKind") },
@@ -1262,8 +1258,11 @@ const typeMap = {
         { json: "TimeOnlyConverter", js: "TimeOnlyConverter", typ: r("TimeOnlyConverter") },
         { json: "TimeZone", js: "TimeZone", typ: r("TimeZone") },
         { json: "True", js: "True", typ: r("True") },
-        { json: "Type", js: "Type", typ: r("Type") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "repeat", js: "repeat", typ: r("Repeat") },
+        { json: "require", js: "require", typ: r("Require") },
+        { json: "required", js: "required", typ: r("Required") },
+        { json: "requires", js: "requires", typ: r("Requires") },
         { json: "restrict", js: "restrict", typ: r("Restrict") },
         { json: "retain", js: "retain", typ: r("Retain") },
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
@@ -1305,9 +1304,6 @@ const typeMap = {
         { json: "top_level", js: "top_level", typ: r("TopLevelClass") },
         { json: "transient", js: "transient", typ: r("Transient") },
         { json: "true", js: "true", typ: r("TrueClass") },
-        { json: "try", js: "try", typ: r("Try") },
-        { json: "type", js: "type", typ: r("TypeClass") },
-        { json: "typealias", js: "typealias", typ: r("Typealias") },
     ], false),
     "KSerializer": o([
         { json: "KSerializer", js: "KSerializer", typ: i(0) },
@@ -1366,8 +1362,17 @@ const typeMap = {
     "True": o([
         { json: "True", js: "True", typ: i(0) },
     ], false),
-    "Type": o([
-        { json: "Type", js: "Type", typ: i(0) },
+    "Repeat": o([
+        { json: "repeat", js: "repeat", typ: i(0) },
+    ], false),
+    "Require": o([
+        { json: "require", js: "require", typ: i(0) },
+    ], false),
+    "Required": o([
+        { json: "required", js: "required", typ: i(0) },
+    ], false),
+    "Requires": o([
+        { json: "requires", js: "requires", typ: i(0) },
     ], false),
     "Restrict": o([
         { json: "restrict", js: "restrict", typ: i(0) },
@@ -1492,16 +1497,8 @@ const typeMap = {
     "TrueClass": o([
         { json: "true", js: "true", typ: i(0) },
     ], false),
-    "Try": o([
-        { json: "try", js: "try", typ: i(0) },
-    ], false),
-    "TypeClass": o([
-        { json: "type", js: "type", typ: i(0) },
-    ], false),
-    "Typealias": o([
-        { json: "typealias", js: "typealias", typ: i(0) },
-    ], false),
     "Obj6": o([
+        { json: "Type", js: "Type", typ: r("Type") },
         { json: "UUID", js: "UUID", typ: r("UUID") },
         { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: r("UnmarshalJSON") },
         { json: "UseSerializers", js: "UseSerializers", typ: r("UseSerializers") },
@@ -1509,6 +1506,9 @@ const typeMap = {
         { json: "Utf8JsonWriter", js: "Utf8JsonWriter", typ: r("Utf8JSONWriter") },
         { json: "YES", js: "YES", typ: r("Yes") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "try", js: "try", typ: r("Try") },
+        { json: "type", js: "type", typ: r("TypeClass") },
+        { json: "typealias", js: "typealias", typ: r("Typealias") },
         { json: "typedef", js: "typedef", typ: r("Typedef") },
         { json: "typeid", js: "typeid", typ: r("Typeid") },
         { json: "typename", js: "typename", typ: r("Typename") },
@@ -1537,6 +1537,9 @@ const typeMap = {
         { json: "xor_eq", js: "xor_eq", typ: r("XorEq") },
         { json: "yield", js: "yield", typ: r("Yield") },
     ], false),
+    "Type": o([
+        { json: "Type", js: "Type", typ: i(0) },
+    ], false),
     "UUID": o([
         { json: "UUID", js: "UUID", typ: i(0) },
     ], false),
@@ -1555,6 +1558,15 @@ const typeMap = {
     "Yes": o([
         { json: "YES", js: "YES", typ: i(0) },
     ], false),
+    "Try": o([
+        { json: "try", js: "try", typ: i(0) },
+    ], false),
+    "TypeClass": o([
+        { json: "type", js: "type", typ: i(0) },
+    ], false),
+    "Typealias": o([
+        { json: "typealias", js: "typealias", typ: i(0) },
+    ], false),
     "Typedef": o([
         { json: "typedef", js: "typedef", typ: i(0) },
     ], false),
diff --git a/base/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
index 238fbac..e2e1b12 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
@@ -161,6 +161,7 @@ let _JSONNode;
 let _JSONParser;
 let _JSONReader;
 let _JSONTokenType;
+let _LocalDate;
 let _Locale;
 let _LongNode;
 let _MapEntry;
@@ -208,8 +209,6 @@ let _Long;
 let _Map;
 let _MetadataPropertyHandling;
 let _Module;
-let _Mutable;
-let _Mutating;
 let _Obj4;
 let _No;
 let _NSError;
@@ -222,8 +221,12 @@ let _ObjectMapper;
 let _ObjectNode;
 let _ObjectReader;
 let _ObjectWriter;
+let _OffsetDateTime;
+let _OffsetTime;
 let _Protocol;
 let _RegExp;
+let _Mutable;
+let _Mutating;
 let _Namespace;
 let _Native;
 let _New;
@@ -271,10 +274,6 @@ let _Readonly;
 let _Ref;
 let _Register;
 let _ReinterpretCast;
-let _Repeat;
-let _Require;
-let _Required;
-let _Requires;
 let _Obj5;
 let _KSerializer;
 let _PrimitiveKind;
@@ -295,7 +294,10 @@ let _TimeOnly;
 let _TimeOnlyConverter;
 let _TimeZone;
 let _True;
-let _Type;
+let _Repeat;
+let _Require;
+let _Required;
+let _Requires;
 let _Restrict;
 let _Retain;
 let _Rethrows;
@@ -337,16 +339,17 @@ let _ToJSON;
 let _TopLevelClass;
 let _Transient;
 let _TrueClass;
-let _Try;
-let _TypeClass;
-let _Typealias;
 let _Obj6;
+let _Type;
 let _UUID;
 let _UnmarshalJSON;
 let _UseSerializers;
 let _Utf8JSONReader;
 let _Utf8JSONWriter;
 let _Yes;
+let _Try;
+let _TypeClass;
+let _Typealias;
 let _Typedef;
 let _Typeid;
 let _Typename;
@@ -941,6 +944,9 @@ _JSONReader = PropTypes.shape({
 _JSONTokenType = PropTypes.shape({
     "JsonTokenType": PropTypes.oneOfType([Integer]).isRequired,
 });
+_LocalDate = PropTypes.shape({
+    "LocalDate": PropTypes.oneOfType([Integer]).isRequired,
+});
 _Locale = PropTypes.shape({
     "Locale": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1082,12 +1088,6 @@ _MetadataPropertyHandling = PropTypes.shape({
 _Module = PropTypes.shape({
     "module": PropTypes.oneOfType([Integer]).isRequired,
 });
-_Mutable = PropTypes.shape({
-    "mutable": PropTypes.oneOfType([Integer]).isRequired,
-});
-_Mutating = PropTypes.shape({
-    "mutating": PropTypes.oneOfType([Integer]).isRequired,
-});
 _Obj3 = PropTypes.shape({
     "Hashable": _Hashable,
     "Hasher": _Hasher,
@@ -1105,6 +1105,7 @@ _Obj3 = PropTypes.shape({
     "JsonParser": _JSONParser,
     "JsonReader": _JSONReader,
     "JsonTokenType": _JSONTokenType,
+    "LocalDate": _LocalDate,
     "Locale": _Locale,
     "LongNode": _LongNode,
     "MapEntry": _MapEntry,
@@ -1153,8 +1154,6 @@ _Obj3 = PropTypes.shape({
     "map": _Map,
     "metadata_property_handling": _MetadataPropertyHandling,
     "module": _Module,
-    "mutable": _Mutable,
-    "mutating": _Mutating,
 });
 _No = PropTypes.shape({
     "NO": PropTypes.oneOfType([Integer]).isRequired,
@@ -1189,12 +1188,24 @@ _ObjectReader = PropTypes.shape({
 _ObjectWriter = PropTypes.shape({
     "ObjectWriter": PropTypes.oneOfType([Integer]).isRequired,
 });
+_OffsetDateTime = PropTypes.shape({
+    "OffsetDateTime": PropTypes.oneOfType([Integer]).isRequired,
+});
+_OffsetTime = PropTypes.shape({
+    "OffsetTime": PropTypes.oneOfType([Integer]).isRequired,
+});
 _Protocol = PropTypes.shape({
     "Protocol": PropTypes.oneOfType([Integer]).isRequired,
 });
 _RegExp = PropTypes.shape({
     "RegExp": PropTypes.oneOfType([(props, name) => props[name] == null || /^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i.test(props[name]) ? null : new Error("Expected UUID")]).isRequired,
 });
+_Mutable = PropTypes.shape({
+    "mutable": PropTypes.oneOfType([Integer]).isRequired,
+});
+_Mutating = PropTypes.shape({
+    "mutating": PropTypes.oneOfType([Integer]).isRequired,
+});
 _Namespace = PropTypes.shape({
     "namespace": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1336,18 +1347,6 @@ _Register = PropTypes.shape({
 _ReinterpretCast = PropTypes.shape({
     "reinterpret_cast": PropTypes.oneOfType([Integer]).isRequired,
 });
-_Repeat = PropTypes.shape({
-    "repeat": PropTypes.oneOfType([Integer]).isRequired,
-});
-_Require = PropTypes.shape({
-    "require": PropTypes.oneOfType([Integer]).isRequired,
-});
-_Required = PropTypes.shape({
-    "required": PropTypes.oneOfType([Integer]).isRequired,
-});
-_Requires = PropTypes.shape({
-    "requires": PropTypes.oneOfType([Integer]).isRequired,
-});
 _Obj4 = PropTypes.shape({
     "NO": _No,
     "NSError": _NSError,
@@ -1360,9 +1359,13 @@ _Obj4 = PropTypes.shape({
     "ObjectNode": _ObjectNode,
     "ObjectReader": _ObjectReader,
     "ObjectWriter": _ObjectWriter,
+    "OffsetDateTime": _OffsetDateTime,
+    "OffsetTime": _OffsetTime,
     "Protocol": _Protocol,
     "RegExp": _RegExp,
     "dummy": PropTypes.oneOfType([Integer]).isRequired,
+    "mutable": _Mutable,
+    "mutating": _Mutating,
     "namespace": _Namespace,
     "native": _Native,
     "new": _New,
@@ -1410,10 +1413,6 @@ _Obj4 = PropTypes.shape({
     "ref": _Ref,
     "register": _Register,
     "reinterpret_cast": _ReinterpretCast,
-    "repeat": _Repeat,
-    "require": _Require,
-    "required": _Required,
-    "requires": _Requires,
 });
 _KSerializer = PropTypes.shape({
     "KSerializer": PropTypes.oneOfType([Integer]).isRequired,
@@ -1472,8 +1471,17 @@ _TimeZone = PropTypes.shape({
 _True = PropTypes.shape({
     "True": PropTypes.oneOfType([Integer]).isRequired,
 });
-_Type = PropTypes.shape({
-    "Type": PropTypes.oneOfType([Integer]).isRequired,
+_Repeat = PropTypes.shape({
+    "repeat": PropTypes.oneOfType([Integer]).isRequired,
+});
+_Require = PropTypes.shape({
+    "require": PropTypes.oneOfType([Integer]).isRequired,
+});
+_Required = PropTypes.shape({
+    "required": PropTypes.oneOfType([Integer]).isRequired,
+});
+_Requires = PropTypes.shape({
+    "requires": PropTypes.oneOfType([Integer]).isRequired,
 });
 _Restrict = PropTypes.shape({
     "restrict": PropTypes.oneOfType([Integer]).isRequired,
@@ -1598,15 +1606,6 @@ _Transient = PropTypes.shape({
 _TrueClass = PropTypes.shape({
     "true": PropTypes.oneOfType([Integer]).isRequired,
 });
-_Try = PropTypes.shape({
-    "try": PropTypes.oneOfType([Integer]).isRequired,
-});
-_TypeClass = PropTypes.shape({
-    "type": PropTypes.oneOfType([Integer]).isRequired,
-});
-_Typealias = PropTypes.shape({
-    "typealias": PropTypes.oneOfType([Integer]).isRequired,
-});
 _Obj5 = PropTypes.shape({
     "KSerializer": _KSerializer,
     "PrimitiveKind": _PrimitiveKind,
@@ -1627,8 +1626,11 @@ _Obj5 = PropTypes.shape({
     "TimeOnlyConverter": _TimeOnlyConverter,
     "TimeZone": _TimeZone,
     "True": _True,
-    "Type": _Type,
     "dummy": PropTypes.oneOfType([Integer]).isRequired,
+    "repeat": _Repeat,
+    "require": _Require,
+    "required": _Required,
+    "requires": _Requires,
     "restrict": _Restrict,
     "retain": _Retain,
     "rethrows": _Rethrows,
@@ -1670,9 +1672,9 @@ _Obj5 = PropTypes.shape({
     "top_level": _TopLevelClass,
     "transient": _Transient,
     "true": _TrueClass,
-    "try": _Try,
-    "type": _TypeClass,
-    "typealias": _Typealias,
+});
+_Type = PropTypes.shape({
+    "Type": PropTypes.oneOfType([Integer]).isRequired,
 });
 _UUID = PropTypes.shape({
     "UUID": PropTypes.oneOfType([Integer]).isRequired,
@@ -1692,6 +1694,15 @@ _Utf8JSONWriter = PropTypes.shape({
 _Yes = PropTypes.shape({
     "YES": PropTypes.oneOfType([Integer]).isRequired,
 });
+_Try = PropTypes.shape({
+    "try": PropTypes.oneOfType([Integer]).isRequired,
+});
+_TypeClass = PropTypes.shape({
+    "type": PropTypes.oneOfType([Integer]).isRequired,
+});
+_Typealias = PropTypes.shape({
+    "typealias": PropTypes.oneOfType([Integer]).isRequired,
+});
 _Typedef = PropTypes.shape({
     "typedef": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1774,6 +1785,7 @@ _Yield = PropTypes.shape({
     "yield": PropTypes.oneOfType([Integer]).isRequired,
 });
 _Obj6 = PropTypes.shape({
+    "Type": _Type,
     "UUID": _UUID,
     "UnmarshalJSON": _UnmarshalJSON,
     "UseSerializers": _UseSerializers,
@@ -1781,6 +1793,9 @@ _Obj6 = PropTypes.shape({
     "Utf8JsonWriter": _Utf8JSONWriter,
     "YES": _Yes,
     "dummy": PropTypes.oneOfType([Integer]).isRequired,
+    "try": _Try,
+    "type": _TypeClass,
+    "typealias": _Typealias,
     "typedef": _Typedef,
     "typeid": _Typeid,
     "typename": _Typename,
diff --git a/base/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt b/head/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt
index 02e0091..7d3cdc8 100644
--- a/base/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt
+++ b/head/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt
@@ -975,6 +975,9 @@ data class Obj3 (
     val let: Let,
     val list: ListClass,
 
+    @Json(name = "LocalDate")
+    val localDate: LocalDate,
+
     @Json(name = "Locale")
     val locale: Locale,
 
@@ -996,8 +999,6 @@ data class Obj3 (
     val metadataPropertyHandling: MetadataPropertyHandling,
 
     val module: Module,
-    val mutable: Mutable,
-    val mutating: Mutating,
 
     @Json(name = "if")
     val obj3If: If,
@@ -1232,6 +1233,11 @@ data class ListClass (
     val list: Long
 )
 
+data class LocalDate (
+    @Json(name = "LocalDate")
+    val localDate: Long
+)
+
 data class Locale (
     @Json(name = "Locale")
     val locale: Long
@@ -1273,14 +1279,6 @@ data class Module (
     val module: Long
 )
 
-data class Mutable (
-    val mutable: Long
-)
-
-data class Mutating (
-    val mutating: Long
-)
-
 data class If (
     @Json(name = "if")
     val ifIf: Long
@@ -1303,6 +1301,8 @@ data class Is (
 
 data class Obj4 (
     val dummy: Long,
+    val mutable: Mutable,
+    val mutating: Mutating,
     val namespace: Namespace,
     val native: Native,
     val new: New,
@@ -1372,6 +1372,13 @@ data class Obj4 (
     val objectWriter: ObjectWriter,
 
     val of: Of,
+
+    @Json(name = "OffsetDateTime")
+    val offsetDateTime: OffsetDateTimeClass,
+
+    @Json(name = "OffsetTime")
+    val offsetTime: OffsetTime,
+
     val oneway: Oneway,
     val open: Open,
     val operator: Operator,
@@ -1411,12 +1418,15 @@ data class Obj4 (
     val register: Register,
 
     @Json(name = "reinterpret_cast")
-    val reinterpretCast: ReinterpretCast,
+    val reinterpretCast: ReinterpretCast
+)
 
-    val repeat: Repeat,
-    val require: Require,
-    val required: Required,
-    val requires: Requires
+data class Mutable (
+    val mutable: Long
+)
+
+data class Mutating (
+    val mutating: Long
 )
 
 data class Namespace (
@@ -1558,6 +1568,16 @@ data class Of (
     val of: Long
 )
 
+data class OffsetDateTimeClass (
+    @Json(name = "OffsetDateTime")
+    val offsetDateTime: Long
+)
+
+data class OffsetTime (
+    @Json(name = "OffsetTime")
+    val offsetTime: Long
+)
+
 data class Oneway (
     val oneway: Long
 )
@@ -1678,22 +1698,6 @@ data class ReinterpretCast (
     val reinterpretCast: Long
 )
 
-data class Repeat (
-    val repeat: Long
-)
-
-data class Require (
-    val require: Long
-)
-
-data class Required (
-    val required: Long
-)
-
-data class Requires (
-    val requires: Long
-)
-
 data class Obj5 (
     val dummy: Long,
 
@@ -1718,21 +1722,16 @@ data class Obj5 (
     @Json(name = "True")
     val obj5True: True,
 
-    @Json(name = "try")
-    val obj5Try: Try,
-
-    @Json(name = "type")
-    val obj5Type: TypeClass,
-
-    @Json(name = "typealias")
-    val obj5Typealias: Typealias,
-
     @Json(name = "PrimitiveKind")
     val primitiveKind: PrimitiveKind,
 
     @Json(name = "true")
     val purpleTrue: TrueClass,
 
+    val repeat: Repeat,
+    val require: Require,
+    val required: Required,
+    val requires: Requires,
     val restrict: Restrict,
     val retain: Retain,
     val rethrows: Rethrows,
@@ -1837,10 +1836,7 @@ data class Obj5 (
     @Json(name = "top_level")
     val topLevel: TopLevelClass,
 
-    val transient: Transient,
-
-    @Json(name = "Type")
-    val type: Type
+    val transient: Transient
 )
 
 data class KSerializer (
@@ -1877,20 +1873,6 @@ data class True (
     val trueTrue: Long
 )
 
-data class Try (
-    @Json(name = "try")
-    val tryTry: Long
-)
-
-data class TypeClass (
-    val type: Long
-)
-
-data class Typealias (
-    @Json(name = "typealias")
-    val typealiasTypealias: Long
-)
-
 data class PrimitiveKind (
     @Json(name = "PrimitiveKind")
     val primitiveKind: Long
@@ -1901,6 +1883,22 @@ data class TrueClass (
     val trueTrue: Long
 )
 
+data class Repeat (
+    val repeat: Long
+)
+
+data class Require (
+    val require: Long
+)
+
+data class Required (
+    val required: Long
+)
+
+data class Requires (
+    val requires: Long
+)
+
 data class Restrict (
     val restrict: Long
 )
@@ -2127,14 +2125,18 @@ data class Transient (
     val transient: Long
 )
 
-data class Type (
-    @Json(name = "Type")
-    val type: Long
-)
-
 data class Obj6 (
     val dummy: Long,
 
+    @Json(name = "try")
+    val obj6Try: Try,
+
+    @Json(name = "type")
+    val obj6Type: TypeClass,
+
+    @Json(name = "typealias")
+    val obj6Typealias: Typealias,
+
     @Json(name = "typeof")
     val obj6Typeof: Typeof,
 
@@ -2144,6 +2146,9 @@ data class Obj6 (
     @Json(name = "while")
     val obj6While: While,
 
+    @Json(name = "Type")
+    val type: Type,
+
     val typedef: Typedef,
     val typeid: Typeid,
     val typename: Typename,
@@ -2197,6 +2202,20 @@ data class Obj6 (
     val yield: Yield
 )
 
+data class Try (
+    @Json(name = "try")
+    val tryTry: Long
+)
+
+data class TypeClass (
+    val type: Long
+)
+
+data class Typealias (
+    @Json(name = "typealias")
+    val typealiasTypealias: Long
+)
+
 data class Typeof (
     @Json(name = "typeof")
     val typeofTypeof: Long
@@ -2212,6 +2231,11 @@ data class While (
     val whileWhile: Long
 )
 
+data class Type (
+    @Json(name = "Type")
+    val type: Long
+)
+
 data class Typedef (
     val typedef: Long
 )
diff --git a/base/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt
index 0776941..c06b1d0 100644
--- a/base/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt
+++ b/head/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt
@@ -1264,6 +1264,9 @@ data class Obj3 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val list: ListClass,
 
+    @get:JsonProperty("LocalDate", required=true)@field:JsonProperty("LocalDate", required=true)
+    val localDate: LocalDate,
+
     @get:JsonProperty("Locale", required=true)@field:JsonProperty("Locale", required=true)
     val locale: Locale,
 
@@ -1291,12 +1294,6 @@ data class Obj3 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val module: Module,
 
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val mutable: Mutable,
-
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val mutating: Mutating,
-
     @get:JsonProperty("if", required=true)@field:JsonProperty("if", required=true)
     val obj3If: If,
 
@@ -1560,6 +1557,11 @@ data class ListClass (
     val list: Long
 )
 
+data class LocalDate (
+    @get:JsonProperty("LocalDate", required=true)@field:JsonProperty("LocalDate", required=true)
+    val localDate: Long
+)
+
 data class Locale (
     @get:JsonProperty("Locale", required=true)@field:JsonProperty("Locale", required=true)
     val locale: Long
@@ -1605,16 +1607,6 @@ data class Module (
     val module: Long
 )
 
-data class Mutable (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val mutable: Long
-)
-
-data class Mutating (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val mutating: Long
-)
-
 data class If (
     @get:JsonProperty("if", required=true)@field:JsonProperty("if", required=true)
     val ifIf: Long
@@ -1639,6 +1631,12 @@ data class Obj4 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val dummy: Long,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val mutable: Mutable,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val mutating: Mutating,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val namespace: Namespace,
 
@@ -1732,6 +1730,12 @@ data class Obj4 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val of: Of,
 
+    @get:JsonProperty("OffsetDateTime", required=true)@field:JsonProperty("OffsetDateTime", required=true)
+    val offsetDateTime: OffsetDateTimeClass,
+
+    @get:JsonProperty("OffsetTime", required=true)@field:JsonProperty("OffsetTime", required=true)
+    val offsetTime: OffsetTime,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val oneway: Oneway,
 
@@ -1817,19 +1821,17 @@ data class Obj4 (
     val register: Register,
 
     @get:JsonProperty("reinterpret_cast", required=true)@field:JsonProperty("reinterpret_cast", required=true)
-    val reinterpretCast: ReinterpretCast,
-
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val repeat: Repeat,
-
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val require: Require,
+    val reinterpretCast: ReinterpretCast
+)
 
+data class Mutable (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val required: Required,
+    val mutable: Long
+)
 
+data class Mutating (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val requires: Requires
+    val mutating: Long
 )
 
 data class Namespace (
@@ -1987,6 +1989,16 @@ data class Of (
     val of: Long
 )
 
+data class OffsetDateTimeClass (
+    @get:JsonProperty("OffsetDateTime", required=true)@field:JsonProperty("OffsetDateTime", required=true)
+    val offsetDateTime: Long
+)
+
+data class OffsetTime (
+    @get:JsonProperty("OffsetTime", required=true)@field:JsonProperty("OffsetTime", required=true)
+    val offsetTime: Long
+)
+
 data class Oneway (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val oneway: Long
@@ -2132,26 +2144,6 @@ data class ReinterpretCast (
     val reinterpretCast: Long
 )
 
-data class Repeat (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val repeat: Long
-)
-
-data class Require (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val require: Long
-)
-
-data class Required (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val required: Long
-)
-
-data class Requires (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val requires: Long
-)
-
 data class Obj5 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val dummy: Long,
@@ -2177,21 +2169,24 @@ data class Obj5 (
     @get:JsonProperty("True", required=true)@field:JsonProperty("True", required=true)
     val obj5True: True,
 
-    @get:JsonProperty("try", required=true)@field:JsonProperty("try", required=true)
-    val obj5Try: Try,
-
-    @get:JsonProperty("type", required=true)@field:JsonProperty("type", required=true)
-    val obj5Type: TypeClass,
-
-    @get:JsonProperty("typealias", required=true)@field:JsonProperty("typealias", required=true)
-    val obj5Typealias: Typealias,
-
     @get:JsonProperty("PrimitiveKind", required=true)@field:JsonProperty("PrimitiveKind", required=true)
     val primitiveKind: PrimitiveKind,
 
     @get:JsonProperty("true", required=true)@field:JsonProperty("true", required=true)
     val purpleTrue: TrueClass,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val repeat: Repeat,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val require: Require,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val required: Required,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val requires: Requires,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val restrict: Restrict,
 
@@ -2343,10 +2338,7 @@ data class Obj5 (
     val topLevel: TopLevelClass,
 
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val transient: Transient,
-
-    @get:JsonProperty("Type", required=true)@field:JsonProperty("Type", required=true)
-    val type: Type
+    val transient: Transient
 )
 
 data class KSerializer (
@@ -2384,29 +2376,34 @@ data class True (
     val trueTrue: Long
 )
 
-data class Try (
-    @get:JsonProperty("try", required=true)@field:JsonProperty("try", required=true)
-    val tryTry: Long
+data class PrimitiveKind (
+    @get:JsonProperty("PrimitiveKind", required=true)@field:JsonProperty("PrimitiveKind", required=true)
+    val primitiveKind: Long
 )
 
-data class TypeClass (
+data class TrueClass (
+    @get:JsonProperty("true", required=true)@field:JsonProperty("true", required=true)
+    val trueTrue: Long
+)
+
+data class Repeat (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val type: Long
+    val repeat: Long
 )
 
-data class Typealias (
-    @get:JsonProperty("typealias", required=true)@field:JsonProperty("typealias", required=true)
-    val typealiasTypealias: Long
+data class Require (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val require: Long
 )
 
-data class PrimitiveKind (
-    @get:JsonProperty("PrimitiveKind", required=true)@field:JsonProperty("PrimitiveKind", required=true)
-    val primitiveKind: Long
+data class Required (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val required: Long
 )
 
-data class TrueClass (
-    @get:JsonProperty("true", required=true)@field:JsonProperty("true", required=true)
-    val trueTrue: Long
+data class Requires (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val requires: Long
 )
 
 data class Restrict (
@@ -2664,15 +2661,19 @@ data class Transient (
     val transient: Long
 )
 
-data class Type (
-    @get:JsonProperty("Type", required=true)@field:JsonProperty("Type", required=true)
-    val type: Long
-)
-
 data class Obj6 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val dummy: Long,
 
+    @get:JsonProperty("try", required=true)@field:JsonProperty("try", required=true)
+    val obj6Try: Try,
+
+    @get:JsonProperty("type", required=true)@field:JsonProperty("type", required=true)
+    val obj6Type: TypeClass,
+
+    @get:JsonProperty("typealias", required=true)@field:JsonProperty("typealias", required=true)
+    val obj6Typealias: Typealias,
+
     @get:JsonProperty("typeof", required=true)@field:JsonProperty("typeof", required=true)
     val obj6Typeof: Typeof,
 
@@ -2682,6 +2683,9 @@ data class Obj6 (
     @get:JsonProperty("while", required=true)@field:JsonProperty("while", required=true)
     val obj6While: While,
 
+    @get:JsonProperty("Type", required=true)@field:JsonProperty("Type", required=true)
+    val type: Type,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val typedef: Typedef,
 
@@ -2773,6 +2777,21 @@ data class Obj6 (
     val yield: Yield
 )
 
+data class Try (
+    @get:JsonProperty("try", required=true)@field:JsonProperty("try", required=true)
+    val tryTry: Long
+)
+
+data class TypeClass (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val type: Long
+)
+
+data class Typealias (
+    @get:JsonProperty("typealias", required=true)@field:JsonProperty("typealias", required=true)
+    val typealiasTypealias: Long
+)
+
 data class Typeof (
     @get:JsonProperty("typeof", required=true)@field:JsonProperty("typeof", required=true)
     val typeofTypeof: Long
@@ -2788,6 +2807,11 @@ data class While (
     val whileWhile: Long
 )
 
+data class Type (
+    @get:JsonProperty("Type", required=true)@field:JsonProperty("Type", required=true)
+    val type: Long
+)
+
 data class Typedef (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val typedef: Long
diff --git a/base/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt b/head/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt
index 9cc7399..1685edc 100644
--- a/base/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt
+++ b/head/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt
@@ -1088,6 +1088,9 @@ data class Obj3 (
     val let: Let,
     val list: ListClass,
 
+    @SerialName("LocalDate")
+    val localDate: LocalDate,
+
     @SerialName("Locale")
     val locale: Locale,
 
@@ -1109,8 +1112,6 @@ data class Obj3 (
     val metadataPropertyHandling: MetadataPropertyHandling,
 
     val module: Module,
-    val mutable: Mutable,
-    val mutating: Mutating,
 
     @SerialName("if")
     val obj3If: If,
@@ -1395,6 +1396,12 @@ data class ListClass (
     val list: Long
 )
 
+@Serializable
+data class LocalDate (
+    @SerialName("LocalDate")
+    val localDate: Long
+)
+
 @Serializable
 data class Locale (
     @SerialName("Locale")
@@ -1445,16 +1452,6 @@ data class Module (
     val module: Long
 )
 
-@Serializable
-data class Mutable (
-    val mutable: Long
-)
-
-@Serializable
-data class Mutating (
-    val mutating: Long
-)
-
 @Serializable
 data class If (
     @SerialName("if")
@@ -1482,6 +1479,8 @@ data class Is (
 @Serializable
 data class Obj4 (
     val dummy: Long,
+    val mutable: Mutable,
+    val mutating: Mutating,
     val namespace: Namespace,
     val native: Native,
     val new: New,
@@ -1551,6 +1550,13 @@ data class Obj4 (
     val objectWriter: ObjectWriter,
 
     val of: Of,
+
+    @SerialName("OffsetDateTime")
+    val offsetDateTime: OffsetDateTimeClass,
+
+    @SerialName("OffsetTime")
+    val offsetTime: OffsetTime,
+
     val oneway: Oneway,
     val open: Open,
     val operator: Operator,
@@ -1590,12 +1596,17 @@ data class Obj4 (
     val register: Register,
 
     @SerialName("reinterpret_cast")
-    val reinterpretCast: ReinterpretCast,
+    val reinterpretCast: ReinterpretCast
+)
 
-    val repeat: Repeat,
-    val require: Require,
-    val required: Required,
-    val requires: Requires
+@Serializable
+data class Mutable (
+    val mutable: Long
+)
+
+@Serializable
+data class Mutating (
+    val mutating: Long
 )
 
 @Serializable
@@ -1768,6 +1779,18 @@ data class Of (
     val of: Long
 )
 
+@Serializable
+data class OffsetDateTimeClass (
+    @SerialName("OffsetDateTime")
+    val offsetDateTime: Long
+)
+
+@Serializable
+data class OffsetTime (
+    @SerialName("OffsetTime")
+    val offsetTime: Long
+)
+
 @Serializable
 data class Oneway (
     val oneway: Long
@@ -1917,26 +1940,6 @@ data class ReinterpretCast (
     val reinterpretCast: Long
 )
 
-@Serializable
-data class Repeat (
-    val repeat: Long
-)
-
-@Serializable
-data class Require (
-    val require: Long
-)
-
-@Serializable
-data class Required (
-    val required: Long
-)
-
-@Serializable
-data class Requires (
-    val requires: Long
-)
-
 @Serializable
 data class Obj5 (
     val dummy: Long,
@@ -1962,21 +1965,16 @@ data class Obj5 (
     @SerialName("True")
     val obj5True: True,
 
-    @SerialName("try")
-    val obj5Try: Try,
-
-    @SerialName("type")
-    val obj5Type: TypeClass,
-
-    @SerialName("typealias")
-    val obj5Typealias: Typealias,
-
     @SerialName("PrimitiveKind")
     val primitiveKind: PrimitiveKindClass,
 
     @SerialName("true")
     val purpleTrue: TrueClass,
 
+    val repeat: Repeat,
+    val require: Require,
+    val required: Required,
+    val requires: Requires,
     val restrict: Restrict,
     val retain: Retain,
     val rethrows: Rethrows,
@@ -2081,10 +2079,7 @@ data class Obj5 (
     @SerialName("top_level")
     val topLevel: TopLevelClass,
 
-    val transient: Transient,
-
-    @SerialName("Type")
-    val type: Type
+    val transient: Transient
 )
 
 @Serializable
@@ -2129,32 +2124,35 @@ data class True (
 )
 
 @Serializable
-data class Try (
-    @SerialName("try")
-    val tryTry: Long
+data class PrimitiveKindClass (
+    @SerialName("PrimitiveKind")
+    val primitiveKind: Long
 )
 
 @Serializable
-data class TypeClass (
-    val type: Long
+data class TrueClass (
+    @SerialName("true")
+    val trueTrue: Long
 )
 
 @Serializable
-data class Typealias (
-    @SerialName("typealias")
-    val typealiasTypealias: Long
+data class Repeat (
+    val repeat: Long
 )
 
 @Serializable
-data class PrimitiveKindClass (
-    @SerialName("PrimitiveKind")
-    val primitiveKind: Long
+data class Require (
+    val require: Long
 )
 
 @Serializable
-data class TrueClass (
-    @SerialName("true")
-    val trueTrue: Long
+data class Required (
+    val required: Long
+)
+
+@Serializable
+data class Requires (
+    val requires: Long
 )
 
 @Serializable
@@ -2434,16 +2432,19 @@ data class Transient (
     val transient: Long
 )
 
-@Serializable
-data class Type (
-    @SerialName("Type")
-    val type: Long
-)
-
 @Serializable
 data class Obj6 (
     val dummy: Long,
 
+    @SerialName("try")
+    val obj6Try: Try,
+
+    @SerialName("type")
+    val obj6Type: TypeClass,
+
+    @SerialName("typealias")
+    val obj6Typealias: Typealias,
+
     @SerialName("typeof")
     val obj6Typeof: Typeof,
 
@@ -2453,6 +2454,9 @@ data class Obj6 (
     @SerialName("while")
     val obj6While: While,
 
+    @SerialName("Type")
+    val type: Type,
+
     val typedef: Typedef,
     val typeid: Typeid,
     val typename: Typename,
@@ -2506,6 +2510,23 @@ data class Obj6 (
     val yield: Yield
 )
 
+@Serializable
+data class Try (
+    @SerialName("try")
+    val tryTry: Long
+)
+
+@Serializable
+data class TypeClass (
+    val type: Long
+)
+
+@Serializable
+data class Typealias (
+    @SerialName("typealias")
+    val typealiasTypealias: Long
+)
+
 @Serializable
 data class Typeof (
     @SerialName("typeof")
@@ -2524,6 +2545,12 @@ data class While (
     val whileWhile: Long
 )
 
+@Serializable
+data class Type (
+    @SerialName("Type")
+    val type: Long
+)
+
 @Serializable
 data class Typedef (
     val typedef: Long
diff --git a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h
index dd6f16c..82c2eb4 100644
--- a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h
+++ b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h
@@ -186,6 +186,7 @@
 @class QTLeft;
 @class QTLet;
 @class QTList;
+@class QTLocalDate;
 @class QTLocale;
 @class QTLock;
 @class QTLongNode;
@@ -194,8 +195,6 @@
 @class QTMarshalJSON;
 @class QTMetadataPropertyHandling;
 @class QTModule;
-@class QTMutable;
-@class QTMutating;
 @class QTGoto;
 @class QTIf;
 @class QTInline;
@@ -204,6 +203,8 @@
 @class QTHashCode;
 @class QTInit;
 @class QTObj4;
+@class QTMutable;
+@class QTMutating;
 @class QTNamespace;
 @class QTNative;
 @class QTNewtonsoft;
@@ -234,6 +235,8 @@
 @class QTObjectReader;
 @class QTObjectWriter;
 @class QTOf;
+@class QTOffsetDateTime;
+@class QTOffsetTime;
 @class QTOneway;
 @class QTOpen;
 @class QTOperator;
@@ -263,10 +266,6 @@
 @class QTRef;
 @class QTRegExp;
 @class QTReinterpretCast;
-@class QTRepeat;
-@class QTRequire;
-@class QTRequired;
-@class QTRequires;
 @class QTNew;
 @class QTObj5;
 @class QTKSerializer;
@@ -281,8 +280,11 @@
 @class QTStruct;
 @class QTSwitch;
 @class QTTrue;
-@class QTTypeClass;
 @class QTPrimitiveKind;
+@class QTRepeat;
+@class QTRequire;
+@class QTRequired;
+@class QTRequires;
 @class QTRethrows;
 @class QTRight;
 @class QTRuntimeType;
@@ -330,10 +332,8 @@
 @class QTToString;
 @class QTTopLevelClass;
 @class QTTransient;
-@class QTTry;
-@class QTType;
-@class QTTypealias;
 @class QTObj6;
+@class QTTypeClass;
 @class QTTypedef;
 @class QTTypeof;
 @class QTUnion;
@@ -341,6 +341,9 @@
 @class QTVoid;
 @class QTVolatile;
 @class QTWhile;
+@class QTTry;
+@class QTType;
+@class QTTypealias;
 @class QTTypeid;
 @class QTTypename;
 @class QTUint;
@@ -1101,6 +1104,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTLeft *left;
 @property (nonatomic, strong) QTLet *let;
 @property (nonatomic, strong) QTList *list;
+@property (nonatomic, strong) QTLocalDate *localDate;
 @property (nonatomic, strong) QTLocale *locale;
 @property (nonatomic, strong) QTLock *lock;
 @property (nonatomic, strong) QTLongNode *longNode;
@@ -1109,8 +1113,6 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTMarshalJSON *marshalJSON;
 @property (nonatomic, strong) QTMetadataPropertyHandling *metadataPropertyHandling;
 @property (nonatomic, strong) QTModule *module;
-@property (nonatomic, strong) QTMutable *mutable;
-@property (nonatomic, strong) QTMutating *mutating;
 @property (nonatomic, strong) QTGoto *obj3Goto;
 @property (nonatomic, strong) QTIf *obj3If;
 @property (nonatomic, strong) QTInline *obj3Inline;
@@ -1312,6 +1314,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger list;
 @end
 
+@interface QTLocalDate : NSObject
+@property (nonatomic, assign) NSInteger localDate;
+@end
+
 @interface QTLocale : NSObject
 @property (nonatomic, assign) NSInteger locale;
 @end
@@ -1344,14 +1350,6 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger module;
 @end
 
-@interface QTMutable : NSObject
-@property (nonatomic, assign) NSInteger mutable;
-@end
-
-@interface QTMutating : NSObject
-@property (nonatomic, assign) NSInteger mutating;
-@end
-
 @interface QTGoto : NSObject
 @property (nonatomic, assign) NSInteger gotoGoto;
 @end
@@ -1382,6 +1380,8 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 
 @interface QTObj4 : NSObject
 @property (nonatomic, assign) NSInteger dummy;
+@property (nonatomic, strong) QTMutable *mutable;
+@property (nonatomic, strong) QTMutating *mutating;
 @property (nonatomic, strong) QTNamespace *namespace;
 @property (nonatomic, strong) QTNative *native;
 @property (nonatomic, strong) QTNewtonsoft *newtonsoft;
@@ -1412,6 +1412,8 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTObjectReader *objectReader;
 @property (nonatomic, strong) QTObjectWriter *objectWriter;
 @property (nonatomic, strong) QTOf *of;
+@property (nonatomic, strong) QTOffsetDateTime *offsetDateTime;
+@property (nonatomic, strong) QTOffsetTime *offsetTime;
 @property (nonatomic, strong) QTOneway *oneway;
 @property (nonatomic, strong) QTOpen *open;
 @property (nonatomic, strong) QTOperator *operator;
@@ -1441,13 +1443,17 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTRef *ref;
 @property (nonatomic, strong) QTRegExp *regExp;
 @property (nonatomic, strong) QTReinterpretCast *reinterpretCast;
-@property (nonatomic, strong) QTRepeat *repeat;
-@property (nonatomic, strong) QTRequire *require;
-@property (nonatomic, strong) QTRequired *required;
-@property (nonatomic, strong) QTRequires *requires;
 @property (nonatomic, strong) QTNew *theNew;
 @end
 
+@interface QTMutable : NSObject
+@property (nonatomic, assign) NSInteger mutable;
+@end
+
+@interface QTMutating : NSObject
+@property (nonatomic, assign) NSInteger mutating;
+@end
+
 @interface QTNamespace : NSObject
 @property (nonatomic, assign) NSInteger namespace;
 @end
@@ -1568,6 +1574,14 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger of;
 @end
 
+@interface QTOffsetDateTime : NSObject
+@property (nonatomic, assign) NSInteger offsetDateTime;
+@end
+
+@interface QTOffsetTime : NSObject
+@property (nonatomic, assign) NSInteger offsetTime;
+@end
+
 @interface QTOneway : NSObject
 @property (nonatomic, assign) NSInteger oneway;
 @end
@@ -1684,22 +1698,6 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger reinterpretCast;
 @end
 
-@interface QTRepeat : NSObject
-@property (nonatomic, assign) NSInteger repeat;
-@end
-
-@interface QTRequire : NSObject
-@property (nonatomic, assign) NSInteger require;
-@end
-
-@interface QTRequired : NSObject
-@property (nonatomic, assign) NSInteger required;
-@end
-
-@interface QTRequires : NSObject
-@property (nonatomic, assign) NSInteger requires;
-@end
-
 @interface QTNew : NSObject
 @property (nonatomic, assign) NSInteger theNew;
 @end
@@ -1718,8 +1716,11 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTStruct *obj5Struct;
 @property (nonatomic, strong) QTSwitch *obj5Switch;
 @property (nonatomic, strong) QTTrue *obj5True;
-@property (nonatomic, strong) QTTypeClass *obj5Type;
 @property (nonatomic, strong) QTPrimitiveKind *primitiveKind;
+@property (nonatomic, strong) QTRepeat *repeat;
+@property (nonatomic, strong) QTRequire *require;
+@property (nonatomic, strong) QTRequired *required;
+@property (nonatomic, strong) QTRequires *requires;
 @property (nonatomic, strong) QTRethrows *rethrows;
 @property (nonatomic, strong) QTRight *right;
 @property (nonatomic, strong) QTRuntimeType *runtimeType;
@@ -1767,9 +1768,6 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTToString *toString;
 @property (nonatomic, strong) QTTopLevelClass *topLevel;
 @property (nonatomic, strong) QTTransient *transient;
-@property (nonatomic, strong) QTTry *try;
-@property (nonatomic, strong) QTType *type;
-@property (nonatomic, strong) QTTypealias *typealias;
 @end
 
 @interface QTKSerializer : NSObject
@@ -1820,14 +1818,26 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger trueTrue;
 @end
 
-@interface QTTypeClass : NSObject
-@property (nonatomic, assign) NSInteger type;
-@end
-
 @interface QTPrimitiveKind : NSObject
 @property (nonatomic, assign) NSInteger primitiveKind;
 @end
 
+@interface QTRepeat : NSObject
+@property (nonatomic, assign) NSInteger repeat;
+@end
+
+@interface QTRequire : NSObject
+@property (nonatomic, assign) NSInteger require;
+@end
+
+@interface QTRequired : NSObject
+@property (nonatomic, assign) NSInteger required;
+@end
+
+@interface QTRequires : NSObject
+@property (nonatomic, assign) NSInteger requires;
+@end
+
 @interface QTRethrows : NSObject
 @property (nonatomic, assign) NSInteger rethrows;
 @end
@@ -2016,20 +2026,9 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger transient;
 @end
 
-@interface QTTry : NSObject
-@property (nonatomic, assign) NSInteger try;
-@end
-
-@interface QTType : NSObject
-@property (nonatomic, assign) NSInteger type;
-@end
-
-@interface QTTypealias : NSObject
-@property (nonatomic, assign) NSInteger typealias;
-@end
-
 @interface QTObj6 : NSObject
 @property (nonatomic, assign) NSInteger dummy;
+@property (nonatomic, strong) QTTypeClass *obj6Type;
 @property (nonatomic, strong) QTTypedef *obj6Typedef;
 @property (nonatomic, strong) QTTypeof *obj6Typeof;
 @property (nonatomic, strong) QTUnion *obj6Union;
@@ -2037,6 +2036,9 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTVoid *obj6Void;
 @property (nonatomic, strong) QTVolatile *obj6Volatile;
 @property (nonatomic, strong) QTWhile *obj6While;
+@property (nonatomic, strong) QTTry *try;
+@property (nonatomic, strong) QTType *type;
+@property (nonatomic, strong) QTTypealias *typealias;
 @property (nonatomic, strong) QTTypeid *typeid;
 @property (nonatomic, strong) QTTypename *typename;
 @property (nonatomic, strong) QTUint *uint;
@@ -2065,6 +2067,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTYield *yield;
 @end
 
+@interface QTTypeClass : NSObject
+@property (nonatomic, assign) NSInteger type;
+@end
+
 @interface QTTypedef : NSObject
 @property (nonatomic, assign) NSInteger typedefTypedef;
 @end
@@ -2093,6 +2099,18 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger whileWhile;
 @end
 
+@interface QTTry : NSObject
+@property (nonatomic, assign) NSInteger try;
+@end
+
+@interface QTType : NSObject
+@property (nonatomic, assign) NSInteger type;
+@end
+
+@interface QTTypealias : NSObject
+@property (nonatomic, assign) NSInteger typealias;
+@end
+
 @interface QTTypeid : NSObject
 @property (nonatomic, assign) NSInteger typeid;
 @end
diff --git a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m
index 195d0fe..0002101 100644
--- a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m
+++ b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m
@@ -908,6 +908,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTLocalDate (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTLocale (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -948,16 +953,6 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTMutable (JSONConversion)
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
-- (NSDictionary *)JSONDictionary;
-@end
-
-@interface QTMutating (JSONConversion)
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
-- (NSDictionary *)JSONDictionary;
-@end
-
 @interface QTGoto (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -998,6 +993,16 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTMutable (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@interface QTMutating (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTNamespace (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1148,6 +1153,16 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTOffsetDateTime (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@interface QTOffsetTime (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTOneway (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1293,26 +1308,6 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTRepeat (JSONConversion)
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
-- (NSDictionary *)JSONDictionary;
-@end
-
-@interface QTRequire (JSONConversion)
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
-- (NSDictionary *)JSONDictionary;
-@end
-
-@interface QTRequired (JSONConversion)
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
-- (NSDictionary *)JSONDictionary;
-@end
-
-@interface QTRequires (JSONConversion)
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
-- (NSDictionary *)JSONDictionary;
-@end
-
 @interface QTNew (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1383,12 +1378,27 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTTypeClass (JSONConversion)
+@interface QTPrimitiveKind (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTPrimitiveKind (JSONConversion)
+@interface QTRepeat (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@interface QTRequire (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@interface QTRequired (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@interface QTRequires (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
@@ -1628,57 +1638,62 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTTry (JSONConversion)
+@interface QTObj6 (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTType (JSONConversion)
+@interface QTTypeClass (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTTypealias (JSONConversion)
+@interface QTTypedef (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTObj6 (JSONConversion)
+@interface QTTypeof (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTTypedef (JSONConversion)
+@interface QTUnion (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTTypeof (JSONConversion)
+@interface QTUnsigned (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTUnion (JSONConversion)
+@interface QTVoid (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTUnsigned (JSONConversion)
+@interface QTVolatile (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTVoid (JSONConversion)
+@interface QTWhile (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTVolatile (JSONConversion)
+@interface QTTry (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTWhile (JSONConversion)
+@interface QTType (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@interface QTTypealias (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
@@ -8789,6 +8804,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"left": @"left",
         @"let": @"let",
         @"list": @"list",
+        @"LocalDate": @"localDate",
         @"Locale": @"locale",
         @"lock": @"lock",
         @"LongNode": @"longNode",
@@ -8797,8 +8813,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"MarshalJSON": @"marshalJSON",
         @"metadata_property_handling": @"metadataPropertyHandling",
         @"module": @"module",
-        @"mutable": @"mutable",
-        @"mutating": @"mutating",
         @"goto": @"obj3Goto",
         @"if": @"obj3If",
         @"inline": @"obj3Inline",
@@ -8867,6 +8881,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"left"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"let"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"list"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"LocalDate"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"Locale"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"lock"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"LongNode"] isKindOfClass:NSDictionary.class]) return nil;
@@ -8875,8 +8890,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"MarshalJSON"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"metadata_property_handling"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"module"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"mutable"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"mutating"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"goto"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"if"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"inline"] isKindOfClass:NSDictionary.class]) return nil;
@@ -8981,6 +8994,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_let && dict[@"let"] && ![dict[@"let"] isKindOfClass:NSNull.class]) return nil;
         _list = [QTList fromJSONDictionary:(id)_list];
         if (!_list && dict[@"list"] && ![dict[@"list"] isKindOfClass:NSNull.class]) return nil;
+        _localDate = [QTLocalDate fromJSONDictionary:(id)_localDate];
+        if (!_localDate && dict[@"LocalDate"] && ![dict[@"LocalDate"] isKindOfClass:NSNull.class]) return nil;
         _locale = [QTLocale fromJSONDictionary:(id)_locale];
         if (!_locale && dict[@"Locale"] && ![dict[@"Locale"] isKindOfClass:NSNull.class]) return nil;
         _lock = [QTLock fromJSONDictionary:(id)_lock];
@@ -8997,10 +9012,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_metadataPropertyHandling && dict[@"metadata_property_handling"] && ![dict[@"metadata_property_handling"] isKindOfClass:NSNull.class]) return nil;
         _module = [QTModule fromJSONDictionary:(id)_module];
         if (!_module && dict[@"module"] && ![dict[@"module"] isKindOfClass:NSNull.class]) return nil;
-        _mutable = [QTMutable fromJSONDictionary:(id)_mutable];
-        if (!_mutable && dict[@"mutable"] && ![dict[@"mutable"] isKindOfClass:NSNull.class]) return nil;
-        _mutating = [QTMutating fromJSONDictionary:(id)_mutating];
-        if (!_mutating && dict[@"mutating"] && ![dict[@"mutating"] isKindOfClass:NSNull.class]) return nil;
         _obj3Goto = [QTGoto fromJSONDictionary:(id)_obj3Goto];
         if (!_obj3Goto && dict[@"goto"] && ![dict[@"goto"] isKindOfClass:NSNull.class]) return nil;
         _obj3If = [QTIf fromJSONDictionary:(id)_obj3If];
@@ -9092,6 +9103,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"left": [_left JSONDictionary],
         @"let": [_let JSONDictionary],
         @"list": [_list JSONDictionary],
+        @"LocalDate": [_localDate JSONDictionary],
         @"Locale": [_locale JSONDictionary],
         @"lock": [_lock JSONDictionary],
         @"LongNode": [_longNode JSONDictionary],
@@ -9100,8 +9112,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"MarshalJSON": [_marshalJSON JSONDictionary],
         @"metadata_property_handling": [_metadataPropertyHandling JSONDictionary],
         @"module": [_module JSONDictionary],
-        @"mutable": [_mutable JSONDictionary],
-        @"mutating": [_mutating JSONDictionary],
         @"goto": [_obj3Goto JSONDictionary],
         @"if": [_obj3If JSONDictionary],
         @"inline": [_obj3Inline JSONDictionary],
@@ -11340,6 +11350,58 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTLocalDate
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"LocalDate": @"localDate",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTLocalDate alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"LocalDate"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"LocalDate"] doubleValue] != [dict[@"LocalDate"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTLocalDate.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTLocalDate.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTLocalDate.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTLocalDate.properties) {
+        id propertyName = QTLocalDate.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
 @implementation QTLocale
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -11726,90 +11788,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTMutable
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"mutable": @"mutable",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTMutable alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"mutable"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"mutable"] doubleValue] != [dict[@"mutable"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTMutable.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTMutable.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    return [self dictionaryWithValuesForKeys:QTMutable.properties.allValues];
-}
-@end
-
-@implementation QTMutating
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"mutating": @"mutating",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTMutating alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"mutating"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"mutating"] doubleValue] != [dict[@"mutating"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTMutating.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTMutating.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    return [self dictionaryWithValuesForKeys:QTMutating.properties.allValues];
-}
-@end
-
 @implementation QTGoto
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -12180,6 +12158,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
         @"dummy": @"dummy",
+        @"mutable": @"mutable",
+        @"mutating": @"mutating",
         @"namespace": @"namespace",
         @"native": @"native",
         @"newtonsoft": @"newtonsoft",
@@ -12210,6 +12190,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"ObjectReader": @"objectReader",
         @"ObjectWriter": @"objectWriter",
         @"of": @"of",
+        @"OffsetDateTime": @"offsetDateTime",
+        @"OffsetTime": @"offsetTime",
         @"oneway": @"oneway",
         @"open": @"open",
         @"operator": @"operator",
@@ -12239,10 +12221,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"ref": @"ref",
         @"RegExp": @"regExp",
         @"reinterpret_cast": @"reinterpretCast",
-        @"repeat": @"repeat",
-        @"require": @"require",
-        @"required": @"required",
-        @"requires": @"requires",
         @"new": @"theNew",
     };
 }
@@ -12257,6 +12235,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
     if (self = [super init]) {
         if (![dict[@"dummy"] isKindOfClass:NSNumber.class]) return nil;
         if ([dict[@"dummy"] doubleValue] != [dict[@"dummy"] longLongValue]) return nil;
+        if (![dict[@"mutable"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"mutating"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"namespace"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"native"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"newtonsoft"] isKindOfClass:NSDictionary.class]) return nil;
@@ -12287,6 +12267,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"ObjectReader"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"ObjectWriter"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"of"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"OffsetDateTime"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"OffsetTime"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"oneway"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"open"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"operator"] isKindOfClass:NSDictionary.class]) return nil;
@@ -12316,12 +12298,12 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"ref"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"RegExp"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"reinterpret_cast"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"repeat"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"require"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"required"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"requires"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"new"] isKindOfClass:NSDictionary.class]) return nil;
         [self setValuesForKeysWithDictionary:dict];
+        _mutable = [QTMutable fromJSONDictionary:(id)_mutable];
+        if (!_mutable && dict[@"mutable"] && ![dict[@"mutable"] isKindOfClass:NSNull.class]) return nil;
+        _mutating = [QTMutating fromJSONDictionary:(id)_mutating];
+        if (!_mutating && dict[@"mutating"] && ![dict[@"mutating"] isKindOfClass:NSNull.class]) return nil;
         _namespace = [QTNamespace fromJSONDictionary:(id)_namespace];
         if (!_namespace && dict[@"namespace"] && ![dict[@"namespace"] isKindOfClass:NSNull.class]) return nil;
         _native = [QTNative fromJSONDictionary:(id)_native];
@@ -12382,6 +12364,10 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_objectWriter && dict[@"ObjectWriter"] && ![dict[@"ObjectWriter"] isKindOfClass:NSNull.class]) return nil;
         _of = [QTOf fromJSONDictionary:(id)_of];
         if (!_of && dict[@"of"] && ![dict[@"of"] isKindOfClass:NSNull.class]) return nil;
+        _offsetDateTime = [QTOffsetDateTime fromJSONDictionary:(id)_offsetDateTime];
+        if (!_offsetDateTime && dict[@"OffsetDateTime"] && ![dict[@"OffsetDateTime"] isKindOfClass:NSNull.class]) return nil;
+        _offsetTime = [QTOffsetTime fromJSONDictionary:(id)_offsetTime];
+        if (!_offsetTime && dict[@"OffsetTime"] && ![dict[@"OffsetTime"] isKindOfClass:NSNull.class]) return nil;
         _oneway = [QTOneway fromJSONDictionary:(id)_oneway];
         if (!_oneway && dict[@"oneway"] && ![dict[@"oneway"] isKindOfClass:NSNull.class]) return nil;
         _open = [QTOpen fromJSONDictionary:(id)_open];
@@ -12440,14 +12426,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_regExp && dict[@"RegExp"] && ![dict[@"RegExp"] isKindOfClass:NSNull.class]) return nil;
         _reinterpretCast = [QTReinterpretCast fromJSONDictionary:(id)_reinterpretCast];
         if (!_reinterpretCast && dict[@"reinterpret_cast"] && ![dict[@"reinterpret_cast"] isKindOfClass:NSNull.class]) return nil;
-        _repeat = [QTRepeat fromJSONDictionary:(id)_repeat];
-        if (!_repeat && dict[@"repeat"] && ![dict[@"repeat"] isKindOfClass:NSNull.class]) return nil;
-        _require = [QTRequire fromJSONDictionary:(id)_require];
-        if (!_require && dict[@"require"] && ![dict[@"require"] isKindOfClass:NSNull.class]) return nil;
-        _required = [QTRequired fromJSONDictionary:(id)_required];
-        if (!_required && dict[@"required"] && ![dict[@"required"] isKindOfClass:NSNull.class]) return nil;
-        _requires = [QTRequires fromJSONDictionary:(id)_requires];
-        if (!_requires && dict[@"requires"] && ![dict[@"requires"] isKindOfClass:NSNull.class]) return nil;
         _theNew = [QTNew fromJSONDictionary:(id)_theNew];
         if (!_theNew && dict[@"new"] && ![dict[@"new"] isKindOfClass:NSNull.class]) return nil;
     }
@@ -12479,6 +12457,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
     }
 
     [dict addEntriesFromDictionary:@{
+        @"mutable": [_mutable JSONDictionary],
+        @"mutating": [_mutating JSONDictionary],
         @"namespace": [_namespace JSONDictionary],
         @"native": [_native JSONDictionary],
         @"newtonsoft": [_newtonsoft JSONDictionary],
@@ -12509,6 +12489,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"ObjectReader": [_objectReader JSONDictionary],
         @"ObjectWriter": [_objectWriter JSONDictionary],
         @"of": [_of JSONDictionary],
+        @"OffsetDateTime": [_offsetDateTime JSONDictionary],
+        @"OffsetTime": [_offsetTime JSONDictionary],
         @"oneway": [_oneway JSONDictionary],
         @"open": [_open JSONDictionary],
         @"operator": [_operator JSONDictionary],
@@ -12538,10 +12520,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"ref": [_ref JSONDictionary],
         @"RegExp": [_regExp JSONDictionary],
         @"reinterpret_cast": [_reinterpretCast JSONDictionary],
-        @"repeat": [_repeat JSONDictionary],
-        @"require": [_require JSONDictionary],
-        @"required": [_required JSONDictionary],
-        @"requires": [_requires JSONDictionary],
         @"new": [_theNew JSONDictionary],
     }];
 
@@ -12549,6 +12527,90 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTMutable
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"mutable": @"mutable",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTMutable alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"mutable"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"mutable"] doubleValue] != [dict[@"mutable"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTMutable.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTMutable.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTMutable.properties.allValues];
+}
+@end
+
+@implementation QTMutating
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"mutating": @"mutating",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTMutating alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"mutating"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"mutating"] doubleValue] != [dict[@"mutating"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTMutating.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTMutating.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTMutating.properties.allValues];
+}
+@end
+
 @implementation QTNamespace
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -13959,6 +14021,110 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTOffsetDateTime
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"OffsetDateTime": @"offsetDateTime",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTOffsetDateTime alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"OffsetDateTime"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"OffsetDateTime"] doubleValue] != [dict[@"OffsetDateTime"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTOffsetDateTime.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTOffsetDateTime.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTOffsetDateTime.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTOffsetDateTime.properties) {
+        id propertyName = QTOffsetDateTime.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
+@implementation QTOffsetTime
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"OffsetTime": @"offsetTime",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTOffsetTime alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"OffsetTime"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"OffsetTime"] doubleValue] != [dict[@"OffsetTime"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTOffsetTime.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTOffsetTime.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTOffsetTime.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTOffsetTime.properties) {
+        id propertyName = QTOffsetTime.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
 @implementation QTOneway
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -15217,25 +15383,25 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTRepeat
+@implementation QTNew
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"repeat": @"repeat",
+        @"new": @"theNew",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTRepeat alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTNew alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"repeat"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"repeat"] doubleValue] != [dict[@"repeat"] longLongValue]) return nil;
+        if (![dict[@"new"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"new"] doubleValue] != [dict[@"new"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -15243,220 +15409,55 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTRepeat.properties[key];
+    id resolved = QTNew.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTRepeat.properties[key];
+    id resolved = QTNew.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    return [self dictionaryWithValuesForKeys:QTRepeat.properties.allValues];
-}
-@end
-
-@implementation QTRequire
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"require": @"require",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTRequire alloc] initWithJSONDictionary:dict] : nil;
-}
+    id dict = [[self dictionaryWithValuesForKeys:QTNew.properties.allValues] mutableCopy];
 
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"require"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"require"] doubleValue] != [dict[@"require"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
+    for (id jsonName in QTNew.properties) {
+        id propertyName = QTNew.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
     }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTRequire.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTRequire.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
 
-- (NSDictionary *)JSONDictionary
-{
-    return [self dictionaryWithValuesForKeys:QTRequire.properties.allValues];
+    return dict;
 }
 @end
 
-@implementation QTRequired
+@implementation QTObj5
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
+        @"dummy": @"dummy",
+        @"KSerializer": @"kSerializer",
+        @"restrict": @"obj5Restrict",
+        @"retain": @"obj5Retain",
+        @"return": @"obj5Return",
+        @"self": @"obj5Self",
+        @"short": @"obj5Short",
+        @"signed": @"obj5Signed",
+        @"sizeof": @"obj5Sizeof",
+        @"static": @"obj5Static",
+        @"struct": @"obj5Struct",
+        @"switch": @"obj5Switch",
+        @"True": @"obj5True",
+        @"PrimitiveKind": @"primitiveKind",
+        @"repeat": @"repeat",
+        @"require": @"require",
         @"required": @"required",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTRequired alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"required"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"required"] doubleValue] != [dict[@"required"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTRequired.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTRequired.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    return [self dictionaryWithValuesForKeys:QTRequired.properties.allValues];
-}
-@end
-
-@implementation QTRequires
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
         @"requires": @"requires",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTRequires alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"requires"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"requires"] doubleValue] != [dict[@"requires"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTRequires.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTRequires.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    return [self dictionaryWithValuesForKeys:QTRequires.properties.allValues];
-}
-@end
-
-@implementation QTNew
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"new": @"theNew",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTNew alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"new"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"new"] doubleValue] != [dict[@"new"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTNew.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTNew.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    id dict = [[self dictionaryWithValuesForKeys:QTNew.properties.allValues] mutableCopy];
-
-    for (id jsonName in QTNew.properties) {
-        id propertyName = QTNew.properties[jsonName];
-        if (![jsonName isEqualToString:propertyName]) {
-            dict[jsonName] = dict[propertyName];
-            [dict removeObjectForKey:propertyName];
-        }
-    }
-
-    return dict;
-}
-@end
-
-@implementation QTObj5
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"dummy": @"dummy",
-        @"KSerializer": @"kSerializer",
-        @"restrict": @"obj5Restrict",
-        @"retain": @"obj5Retain",
-        @"return": @"obj5Return",
-        @"self": @"obj5Self",
-        @"short": @"obj5Short",
-        @"signed": @"obj5Signed",
-        @"sizeof": @"obj5Sizeof",
-        @"static": @"obj5Static",
-        @"struct": @"obj5Struct",
-        @"switch": @"obj5Switch",
-        @"True": @"obj5True",
-        @"type": @"obj5Type",
-        @"PrimitiveKind": @"primitiveKind",
         @"rethrows": @"rethrows",
         @"right": @"right",
         @"runtimeType": @"runtimeType",
@@ -15504,9 +15505,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"toString": @"toString",
         @"top_level": @"topLevel",
         @"transient": @"transient",
-        @"try": @"try",
-        @"Type": @"type",
-        @"typealias": @"typealias",
     };
 }
 
@@ -15532,8 +15530,11 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"struct"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"switch"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"True"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"type"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"PrimitiveKind"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"repeat"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"require"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"required"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"requires"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"rethrows"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"right"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"runtimeType"] isKindOfClass:NSDictionary.class]) return nil;
@@ -15581,9 +15582,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"toString"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"top_level"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"transient"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"try"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"Type"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"typealias"] isKindOfClass:NSDictionary.class]) return nil;
         [self setValuesForKeysWithDictionary:dict];
         _kSerializer = [QTKSerializer fromJSONDictionary:(id)_kSerializer];
         if (!_kSerializer && dict[@"KSerializer"] && ![dict[@"KSerializer"] isKindOfClass:NSNull.class]) return nil;
@@ -15609,10 +15607,16 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_obj5Switch && dict[@"switch"] && ![dict[@"switch"] isKindOfClass:NSNull.class]) return nil;
         _obj5True = [QTTrue fromJSONDictionary:(id)_obj5True];
         if (!_obj5True && dict[@"True"] && ![dict[@"True"] isKindOfClass:NSNull.class]) return nil;
-        _obj5Type = [QTTypeClass fromJSONDictionary:(id)_obj5Type];
-        if (!_obj5Type && dict[@"type"] && ![dict[@"type"] isKindOfClass:NSNull.class]) return nil;
         _primitiveKind = [QTPrimitiveKind fromJSONDictionary:(id)_primitiveKind];
         if (!_primitiveKind && dict[@"PrimitiveKind"] && ![dict[@"PrimitiveKind"] isKindOfClass:NSNull.class]) return nil;
+        _repeat = [QTRepeat fromJSONDictionary:(id)_repeat];
+        if (!_repeat && dict[@"repeat"] && ![dict[@"repeat"] isKindOfClass:NSNull.class]) return nil;
+        _require = [QTRequire fromJSONDictionary:(id)_require];
+        if (!_require && dict[@"require"] && ![dict[@"require"] isKindOfClass:NSNull.class]) return nil;
+        _required = [QTRequired fromJSONDictionary:(id)_required];
+        if (!_required && dict[@"required"] && ![dict[@"required"] isKindOfClass:NSNull.class]) return nil;
+        _requires = [QTRequires fromJSONDictionary:(id)_requires];
+        if (!_requires && dict[@"requires"] && ![dict[@"requires"] isKindOfClass:NSNull.class]) return nil;
         _rethrows = [QTRethrows fromJSONDictionary:(id)_rethrows];
         if (!_rethrows && dict[@"rethrows"] && ![dict[@"rethrows"] isKindOfClass:NSNull.class]) return nil;
         _right = [QTRight fromJSONDictionary:(id)_right];
@@ -15707,12 +15711,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_topLevel && dict[@"top_level"] && ![dict[@"top_level"] isKindOfClass:NSNull.class]) return nil;
         _transient = [QTTransient fromJSONDictionary:(id)_transient];
         if (!_transient && dict[@"transient"] && ![dict[@"transient"] isKindOfClass:NSNull.class]) return nil;
-        _try = [QTTry fromJSONDictionary:(id)_try];
-        if (!_try && dict[@"try"] && ![dict[@"try"] isKindOfClass:NSNull.class]) return nil;
-        _type = [QTType fromJSONDictionary:(id)_type];
-        if (!_type && dict[@"Type"] && ![dict[@"Type"] isKindOfClass:NSNull.class]) return nil;
-        _typealias = [QTTypealias fromJSONDictionary:(id)_typealias];
-        if (!_typealias && dict[@"typealias"] && ![dict[@"typealias"] isKindOfClass:NSNull.class]) return nil;
     }
     return self;
 }
@@ -15754,8 +15752,11 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"struct": [_obj5Struct JSONDictionary],
         @"switch": [_obj5Switch JSONDictionary],
         @"True": [_obj5True JSONDictionary],
-        @"type": [_obj5Type JSONDictionary],
         @"PrimitiveKind": [_primitiveKind JSONDictionary],
+        @"repeat": [_repeat JSONDictionary],
+        @"require": [_require JSONDictionary],
+        @"required": [_required JSONDictionary],
+        @"requires": [_requires JSONDictionary],
         @"rethrows": [_rethrows JSONDictionary],
         @"right": [_right JSONDictionary],
         @"runtimeType": [_runtimeType JSONDictionary],
@@ -15803,9 +15804,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"toString": [_toString JSONDictionary],
         @"top_level": [_topLevel JSONDictionary],
         @"transient": [_transient JSONDictionary],
-        @"try": [_try JSONDictionary],
-        @"Type": [_type JSONDictionary],
-        @"typealias": [_typealias JSONDictionary],
     }];
 
     return dict;
@@ -16426,48 +16424,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTTypeClass
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"type": @"type",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTTypeClass alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"type"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"type"] doubleValue] != [dict[@"type"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTTypeClass.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTTypeClass.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    return [self dictionaryWithValuesForKeys:QTTypeClass.properties.allValues];
-}
-@end
-
 @implementation QTPrimitiveKind
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -16520,25 +16476,25 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTRethrows
+@implementation QTRepeat
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"rethrows": @"rethrows",
+        @"repeat": @"repeat",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTRethrows alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTRepeat alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"rethrows"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"rethrows"] doubleValue] != [dict[@"rethrows"] longLongValue]) return nil;
+        if (![dict[@"repeat"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"repeat"] doubleValue] != [dict[@"repeat"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -16546,41 +16502,41 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTRethrows.properties[key];
+    id resolved = QTRepeat.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTRethrows.properties[key];
+    id resolved = QTRepeat.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    return [self dictionaryWithValuesForKeys:QTRethrows.properties.allValues];
+    return [self dictionaryWithValuesForKeys:QTRepeat.properties.allValues];
 }
 @end
 
-@implementation QTRight
+@implementation QTRequire
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"right": @"right",
+        @"require": @"require",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTRight alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTRequire alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"right"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"right"] doubleValue] != [dict[@"right"] longLongValue]) return nil;
+        if (![dict[@"require"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"require"] doubleValue] != [dict[@"require"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -16588,23 +16544,191 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTRight.properties[key];
+    id resolved = QTRequire.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTRight.properties[key];
+    id resolved = QTRequire.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    return [self dictionaryWithValuesForKeys:QTRight.properties.allValues];
+    return [self dictionaryWithValuesForKeys:QTRequire.properties.allValues];
 }
 @end
 
-@implementation QTRuntimeType
+@implementation QTRequired
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"required": @"required",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTRequired alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"required"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"required"] doubleValue] != [dict[@"required"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTRequired.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTRequired.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTRequired.properties.allValues];
+}
+@end
+
+@implementation QTRequires
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"requires": @"requires",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTRequires alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"requires"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"requires"] doubleValue] != [dict[@"requires"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTRequires.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTRequires.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTRequires.properties.allValues];
+}
+@end
+
+@implementation QTRethrows
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"rethrows": @"rethrows",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTRethrows alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"rethrows"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"rethrows"] doubleValue] != [dict[@"rethrows"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTRethrows.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTRethrows.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTRethrows.properties.allValues];
+}
+@end
+
+@implementation QTRight
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"right": @"right",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTRight alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"right"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"right"] doubleValue] != [dict[@"right"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTRight.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTRight.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTRight.properties.allValues];
+}
+@end
+
+@implementation QTRuntimeType
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
@@ -18724,148 +18848,13 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTTry
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"try": @"try",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTTry alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"try"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"try"] doubleValue] != [dict[@"try"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTTry.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTTry.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    return [self dictionaryWithValuesForKeys:QTTry.properties.allValues];
-}
-@end
-
-@implementation QTType
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"Type": @"type",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTType alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"Type"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"Type"] doubleValue] != [dict[@"Type"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTType.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTType.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    id dict = [[self dictionaryWithValuesForKeys:QTType.properties.allValues] mutableCopy];
-
-    for (id jsonName in QTType.properties) {
-        id propertyName = QTType.properties[jsonName];
-        if (![jsonName isEqualToString:propertyName]) {
-            dict[jsonName] = dict[propertyName];
-            [dict removeObjectForKey:propertyName];
-        }
-    }
-
-    return dict;
-}
-@end
-
-@implementation QTTypealias
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"typealias": @"typealias",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTTypealias alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"typealias"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"typealias"] doubleValue] != [dict[@"typealias"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTTypealias.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTTypealias.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    return [self dictionaryWithValuesForKeys:QTTypealias.properties.allValues];
-}
-@end
-
 @implementation QTObj6
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
         @"dummy": @"dummy",
+        @"type": @"obj6Type",
         @"typedef": @"obj6Typedef",
         @"typeof": @"obj6Typeof",
         @"union": @"obj6Union",
@@ -18873,6 +18862,9 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"void": @"obj6Void",
         @"volatile": @"obj6Volatile",
         @"while": @"obj6While",
+        @"try": @"try",
+        @"Type": @"type",
+        @"typealias": @"typealias",
         @"typeid": @"typeid",
         @"typename": @"typename",
         @"uint": @"uint",
@@ -18912,6 +18904,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
     if (self = [super init]) {
         if (![dict[@"dummy"] isKindOfClass:NSNumber.class]) return nil;
         if ([dict[@"dummy"] doubleValue] != [dict[@"dummy"] longLongValue]) return nil;
+        if (![dict[@"type"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"typedef"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"typeof"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"union"] isKindOfClass:NSDictionary.class]) return nil;
@@ -18919,6 +18912,9 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"void"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"volatile"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"while"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"try"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"Type"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"typealias"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"typeid"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"typename"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"uint"] isKindOfClass:NSDictionary.class]) return nil;
@@ -18946,6 +18942,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"YES"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"yield"] isKindOfClass:NSDictionary.class]) return nil;
         [self setValuesForKeysWithDictionary:dict];
+        _obj6Type = [QTTypeClass fromJSONDictionary:(id)_obj6Type];
+        if (!_obj6Type && dict[@"type"] && ![dict[@"type"] isKindOfClass:NSNull.class]) return nil;
         _obj6Typedef = [QTTypedef fromJSONDictionary:(id)_obj6Typedef];
         if (!_obj6Typedef && dict[@"typedef"] && ![dict[@"typedef"] isKindOfClass:NSNull.class]) return nil;
         _obj6Typeof = [QTTypeof fromJSONDictionary:(id)_obj6Typeof];
@@ -18960,6 +18958,12 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_obj6Volatile && dict[@"volatile"] && ![dict[@"volatile"] isKindOfClass:NSNull.class]) return nil;
         _obj6While = [QTWhile fromJSONDictionary:(id)_obj6While];
         if (!_obj6While && dict[@"while"] && ![dict[@"while"] isKindOfClass:NSNull.class]) return nil;
+        _try = [QTTry fromJSONDictionary:(id)_try];
+        if (!_try && dict[@"try"] && ![dict[@"try"] isKindOfClass:NSNull.class]) return nil;
+        _type = [QTType fromJSONDictionary:(id)_type];
+        if (!_type && dict[@"Type"] && ![dict[@"Type"] isKindOfClass:NSNull.class]) return nil;
+        _typealias = [QTTypealias fromJSONDictionary:(id)_typealias];
+        if (!_typealias && dict[@"typealias"] && ![dict[@"typealias"] isKindOfClass:NSNull.class]) return nil;
         _typeid = [QTTypeid fromJSONDictionary:(id)_typeid];
         if (!_typeid && dict[@"typeid"] && ![dict[@"typeid"] isKindOfClass:NSNull.class]) return nil;
         _typename = [QTTypename fromJSONDictionary:(id)_typename];
@@ -19041,6 +19045,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
     }
 
     [dict addEntriesFromDictionary:@{
+        @"type": [_obj6Type JSONDictionary],
         @"typedef": [_obj6Typedef JSONDictionary],
         @"typeof": [_obj6Typeof JSONDictionary],
         @"union": [_obj6Union JSONDictionary],
@@ -19048,6 +19053,9 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"void": [_obj6Void JSONDictionary],
         @"volatile": [_obj6Volatile JSONDictionary],
         @"while": [_obj6While JSONDictionary],
+        @"try": [_try JSONDictionary],
+        @"Type": [_type JSONDictionary],
+        @"typealias": [_typealias JSONDictionary],
         @"typeid": [_typeid JSONDictionary],
         @"typename": [_typename JSONDictionary],
         @"uint": [_uint JSONDictionary],
@@ -19080,6 +19088,48 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTTypeClass
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"type": @"type",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTTypeClass alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"type"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"type"] doubleValue] != [dict[@"type"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTTypeClass.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTTypeClass.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTTypeClass.properties.allValues];
+}
+@end
+
 @implementation QTTypedef
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -19444,6 +19494,142 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTTry
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"try": @"try",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTTry alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"try"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"try"] doubleValue] != [dict[@"try"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTTry.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTTry.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTTry.properties.allValues];
+}
+@end
+
+@implementation QTType
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"Type": @"type",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTType alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"Type"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"Type"] doubleValue] != [dict[@"Type"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTType.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTType.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTType.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTType.properties) {
+        id propertyName = QTType.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
+@implementation QTTypealias
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"typealias": @"typealias",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTTypealias alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"typealias"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"typealias"] doubleValue] != [dict[@"typealias"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTTypealias.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTTypealias.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTTypealias.properties.allValues];
+}
+@end
+
 @implementation QTTypeid
 + (NSDictionary<NSString *, NSString *> *)properties
 {
diff --git a/base/php/test/inputs/json/priority/keywords.json/default/TopLevel.php b/head/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
index 6942c95..ca833f3 100644
--- a/base/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
@@ -21130,6 +21130,7 @@ class Obj3 {
     private Left $left; // json:left Required
     private Let $let; // json:let Required
     private ListClass $list; // json:list Required
+    private LocalDate $localDate; // json:LocalDate Required
     private LocaleClass $locale; // json:Locale Required
     private Lock $lock; // json:lock Required
     private Long $long; // json:long Required
@@ -21139,8 +21140,6 @@ class Obj3 {
     private MarshalJSON $marshalJSON; // json:MarshalJSON Required
     private MetadataPropertyHandling $metadataPropertyHandling; // json:metadata_property_handling Required
     private Module $module; // json:module Required
-    private Mutable $mutable; // json:mutable Required
-    private Mutating $mutating; // json:mutating Required
 
     /**
      * @param int $dummy
@@ -21198,6 +21197,7 @@ class Obj3 {
      * @param Left $left
      * @param Let $let
      * @param ListClass $list
+     * @param LocalDate $localDate
      * @param LocaleClass $locale
      * @param Lock $lock
      * @param Long $long
@@ -21207,10 +21207,8 @@ class Obj3 {
      * @param MarshalJSON $marshalJSON
      * @param MetadataPropertyHandling $metadataPropertyHandling
      * @param Module $module
-     * @param Mutable $mutable
-     * @param Mutating $mutating
      */
-    public function __construct(int $dummy, FunctionClass $function, Get $get, GlobalClass $global, Go $go, GotoClass $goto, Guard $guard, HasOwnProperty $hasOwnProperty, HashCode $hashCode, Hashable $hashable, Hasher $hasher, ID $id, IfClass $if, Imp $imp, ImplementsClass $implements, Implicit $implicit, Import $import, In $in, Indirect $indirect, Infix $infix, Init $init, Inline $inline, Inout $inout, InstanceofClass $instanceof, IntClass $int, IntNode $intNode, InterfaceClass $interface, Internal $internal, Is $is, ISODateTimeOffsetConverter $isoDateTimeOffsetConverter, IterableClass $iterable, Jdec $jdec, Jenc $jenc, Jpipe $jpipe, JSON $json, JSONAny $jsonAny, JSONCodingKey $jsonCodingKey, JSONConverter $jsonConverter, JSONDecoder $jsonDecoder, JSONEncoder $jsonEncoder, JSONExceptionClass $jsonException, JSONGenerator $jsonGenerator, JSONNode $jsonNode, JSONNull $jsonNull, JSONParser $jsonParser, JSONReader $jsonReader, JSONSerializer $jsonSerializer, JSONToken $jsonToken, JSONTokenType $jsonTokenType, JSONWriter $jsonWriter, Lambda $lambda, Lazy $lazy, Left $left, Let $let, ListClass $list, LocaleClass $locale, Lock $lock, Long $long, LongNode $longNode, Map $map, MapEntry $mapEntry, MarshalJSON $marshalJSON, MetadataPropertyHandling $metadataPropertyHandling, Module $module, Mutable $mutable, Mutating $mutating) {
+    public function __construct(int $dummy, FunctionClass $function, Get $get, GlobalClass $global, Go $go, GotoClass $goto, Guard $guard, HasOwnProperty $hasOwnProperty, HashCode $hashCode, Hashable $hashable, Hasher $hasher, ID $id, IfClass $if, Imp $imp, ImplementsClass $implements, Implicit $implicit, Import $import, In $in, Indirect $indirect, Infix $infix, Init $init, Inline $inline, Inout $inout, InstanceofClass $instanceof, IntClass $int, IntNode $intNode, InterfaceClass $interface, Internal $internal, Is $is, ISODateTimeOffsetConverter $isoDateTimeOffsetConverter, IterableClass $iterable, Jdec $jdec, Jenc $jenc, Jpipe $jpipe, JSON $json, JSONAny $jsonAny, JSONCodingKey $jsonCodingKey, JSONConverter $jsonConverter, JSONDecoder $jsonDecoder, JSONEncoder $jsonEncoder, JSONExceptionClass $jsonException, JSONGenerator $jsonGenerator, JSONNode $jsonNode, JSONNull $jsonNull, JSONParser $jsonParser, JSONReader $jsonReader, JSONSerializer $jsonSerializer, JSONToken $jsonToken, JSONTokenType $jsonTokenType, JSONWriter $jsonWriter, Lambda $lambda, Lazy $lazy, Left $left, Let $let, ListClass $list, LocalDate $localDate, LocaleClass $locale, Lock $lock, Long $long, LongNode $longNode, Map $map, MapEntry $mapEntry, MarshalJSON $marshalJSON, MetadataPropertyHandling $metadataPropertyHandling, Module $module) {
         $this->dummy = $dummy;
         $this->function = $function;
         $this->get = $get;
@@ -21266,6 +21264,7 @@ class Obj3 {
         $this->left = $left;
         $this->let = $let;
         $this->list = $list;
+        $this->localDate = $localDate;
         $this->locale = $locale;
         $this->lock = $lock;
         $this->long = $long;
@@ -21275,8 +21274,6 @@ class Obj3 {
         $this->marshalJSON = $marshalJSON;
         $this->metadataPropertyHandling = $metadataPropertyHandling;
         $this->module = $module;
-        $this->mutable = $mutable;
-        $this->mutating = $mutating;
     }
 
     /**
@@ -23918,6 +23915,54 @@ class Obj3 {
         return ListClass::sample(); /*85:list*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return LocalDate
+     */
+    public static function fromLocalDate(stdClass $value): LocalDate {
+        return LocalDate::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toLocalDate(): stdClass {
+        if (Obj3::validateLocalDate($this->localDate))  {
+            return $this->localDate->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj3::localDate');
+    }
+
+    /**
+     * @param LocalDate
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateLocalDate(LocalDate $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return LocalDate
+     */
+    public function getLocalDate(): LocalDate {
+        if (Obj3::validateLocalDate($this->localDate))  {
+            return $this->localDate;
+        }
+        throw new Exception('never get to getLocalDate Obj3::localDate');
+    }
+
+    /**
+     * @return LocalDate
+     */
+    public static function sampleLocalDate(): LocalDate {
+        return LocalDate::sample(); /*86:localDate*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -23963,7 +24008,7 @@ class Obj3 {
      * @return LocaleClass
      */
     public static function sampleLocale(): LocaleClass {
-        return LocaleClass::sample(); /*86:locale*/
+        return LocaleClass::sample(); /*87:locale*/
     }
 
     /**
@@ -24011,7 +24056,7 @@ class Obj3 {
      * @return Lock
      */
     public static function sampleLock(): Lock {
-        return Lock::sample(); /*87:lock*/
+        return Lock::sample(); /*88:lock*/
     }
 
     /**
@@ -24059,7 +24104,7 @@ class Obj3 {
      * @return Long
      */
     public static function sampleLong(): Long {
-        return Long::sample(); /*88:long*/
+        return Long::sample(); /*89:long*/
     }
 
     /**
@@ -24107,7 +24152,7 @@ class Obj3 {
      * @return LongNode
      */
     public static function sampleLongNode(): LongNode {
-        return LongNode::sample(); /*89:longNode*/
+        return LongNode::sample(); /*90:longNode*/
     }
 
     /**
@@ -24155,7 +24200,7 @@ class Obj3 {
      * @return Map
      */
     public static function sampleMap(): Map {
-        return Map::sample(); /*90:map*/
+        return Map::sample(); /*91:map*/
     }
 
     /**
@@ -24203,7 +24248,7 @@ class Obj3 {
      * @return MapEntry
      */
     public static function sampleMapEntry(): MapEntry {
-        return MapEntry::sample(); /*91:mapEntry*/
+        return MapEntry::sample(); /*92:mapEntry*/
     }
 
     /**
@@ -24251,7 +24296,7 @@ class Obj3 {
      * @return MarshalJSON
      */
     public static function sampleMarshalJSON(): MarshalJSON {
-        return MarshalJSON::sample(); /*92:marshalJSON*/
+        return MarshalJSON::sample(); /*93:marshalJSON*/
     }
 
     /**
@@ -24299,7 +24344,7 @@ class Obj3 {
      * @return MetadataPropertyHandling
      */
     public static function sampleMetadataPropertyHandling(): MetadataPropertyHandling {
-        return MetadataPropertyHandling::sample(); /*93:metadataPropertyHandling*/
+        return MetadataPropertyHandling::sample(); /*94:metadataPropertyHandling*/
     }
 
     /**
@@ -24347,103 +24392,7 @@ class Obj3 {
      * @return Module
      */
     public static function sampleModule(): Module {
-        return Module::sample(); /*94:module*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Mutable
-     */
-    public static function fromMutable(stdClass $value): Mutable {
-        return Mutable::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toMutable(): stdClass {
-        if (Obj3::validateMutable($this->mutable))  {
-            return $this->mutable->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj3::mutable');
-    }
-
-    /**
-     * @param Mutable
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateMutable(Mutable $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Mutable
-     */
-    public function getMutable(): Mutable {
-        if (Obj3::validateMutable($this->mutable))  {
-            return $this->mutable;
-        }
-        throw new Exception('never get to getMutable Obj3::mutable');
-    }
-
-    /**
-     * @return Mutable
-     */
-    public static function sampleMutable(): Mutable {
-        return Mutable::sample(); /*95:mutable*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Mutating
-     */
-    public static function fromMutating(stdClass $value): Mutating {
-        return Mutating::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toMutating(): stdClass {
-        if (Obj3::validateMutating($this->mutating))  {
-            return $this->mutating->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj3::mutating');
-    }
-
-    /**
-     * @param Mutating
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateMutating(Mutating $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Mutating
-     */
-    public function getMutating(): Mutating {
-        if (Obj3::validateMutating($this->mutating))  {
-            return $this->mutating;
-        }
-        throw new Exception('never get to getMutating Obj3::mutating');
-    }
-
-    /**
-     * @return Mutating
-     */
-    public static function sampleMutating(): Mutating {
-        return Mutating::sample(); /*96:mutating*/
+        return Module::sample(); /*95:module*/
     }
 
     /**
@@ -24506,6 +24455,7 @@ class Obj3 {
         || Obj3::validateLeft($this->left)
         || Obj3::validateLet($this->let)
         || Obj3::validateList($this->list)
+        || Obj3::validateLocalDate($this->localDate)
         || Obj3::validateLocale($this->locale)
         || Obj3::validateLock($this->lock)
         || Obj3::validateLong($this->long)
@@ -24514,9 +24464,7 @@ class Obj3 {
         || Obj3::validateMapEntry($this->mapEntry)
         || Obj3::validateMarshalJSON($this->marshalJSON)
         || Obj3::validateMetadataPropertyHandling($this->metadataPropertyHandling)
-        || Obj3::validateModule($this->module)
-        || Obj3::validateMutable($this->mutable)
-        || Obj3::validateMutating($this->mutating);
+        || Obj3::validateModule($this->module);
     }
 
     /**
@@ -24580,6 +24528,7 @@ class Obj3 {
         $out->{'left'} = $this->toLeft();
         $out->{'let'} = $this->toLet();
         $out->{'list'} = $this->toList();
+        $out->{'LocalDate'} = $this->toLocalDate();
         $out->{'Locale'} = $this->toLocale();
         $out->{'lock'} = $this->toLock();
         $out->{'long'} = $this->toLong();
@@ -24589,8 +24538,6 @@ class Obj3 {
         $out->{'MarshalJSON'} = $this->toMarshalJSON();
         $out->{'metadata_property_handling'} = $this->toMetadataPropertyHandling();
         $out->{'module'} = $this->toModule();
-        $out->{'mutable'} = $this->toMutable();
-        $out->{'mutating'} = $this->toMutating();
         return $out;
     }
 
@@ -24765,6 +24712,9 @@ class Obj3 {
         if (!property_exists($obj, 'list')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'LocalDate')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'Locale')) {
             throw new Exception("Missing required property");
         }
@@ -24792,12 +24742,6 @@ class Obj3 {
         if (!property_exists($obj, 'module')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'mutable')) {
-            throw new Exception("Missing required property");
-        }
-        if (!property_exists($obj, 'mutating')) {
-            throw new Exception("Missing required property");
-        }
         return new Obj3(
          Obj3::fromDummy($obj->{'dummy'})
         ,Obj3::fromFunction($obj->{'function'})
@@ -24854,6 +24798,7 @@ class Obj3 {
         ,Obj3::fromLeft($obj->{'left'})
         ,Obj3::fromLet($obj->{'let'})
         ,Obj3::fromList($obj->{'list'})
+        ,Obj3::fromLocalDate($obj->{'LocalDate'})
         ,Obj3::fromLocale($obj->{'Locale'})
         ,Obj3::fromLock($obj->{'lock'})
         ,Obj3::fromLong($obj->{'long'})
@@ -24863,8 +24808,6 @@ class Obj3 {
         ,Obj3::fromMarshalJSON($obj->{'MarshalJSON'})
         ,Obj3::fromMetadataPropertyHandling($obj->{'metadata_property_handling'})
         ,Obj3::fromModule($obj->{'module'})
-        ,Obj3::fromMutable($obj->{'mutable'})
-        ,Obj3::fromMutating($obj->{'mutating'})
         );
     }
 
@@ -24928,6 +24871,7 @@ class Obj3 {
         ,Obj3::sampleLeft()
         ,Obj3::sampleLet()
         ,Obj3::sampleList()
+        ,Obj3::sampleLocalDate()
         ,Obj3::sampleLocale()
         ,Obj3::sampleLock()
         ,Obj3::sampleLong()
@@ -24937,8 +24881,6 @@ class Obj3 {
         ,Obj3::sampleMarshalJSON()
         ,Obj3::sampleMetadataPropertyHandling()
         ,Obj3::sampleModule()
-        ,Obj3::sampleMutable()
-        ,Obj3::sampleMutating()
         );
     }
 }
@@ -30400,6 +30342,107 @@ class ListClass {
     }
 }
 
+// This is an autogenerated file:LocalDate
+
+class LocalDate {
+    private int $localDate; // json:LocalDate Required
+
+    /**
+     * @param int $localDate
+     */
+    public function __construct(int $localDate) {
+        $this->localDate = $localDate;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromLocalDate(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toLocalDate(): int {
+        if (LocalDate::validateLocalDate($this->localDate))  {
+            return $this->localDate; /*int*/
+        }
+        throw new Exception('never get to this LocalDate::localDate');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateLocalDate(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getLocalDate(): int {
+        if (LocalDate::validateLocalDate($this->localDate))  {
+            return $this->localDate;
+        }
+        throw new Exception('never get to getLocalDate LocalDate::localDate');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleLocalDate(): int {
+        return 31; /*31:localDate*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return LocalDate::validateLocalDate($this->localDate);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'LocalDate'} = $this->toLocalDate();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return LocalDate
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): LocalDate {
+        if (!property_exists($obj, 'LocalDate')) {
+            throw new Exception("Missing required property");
+        }
+        return new LocalDate(
+         LocalDate::fromLocalDate($obj->{'LocalDate'})
+        );
+    }
+
+    /**
+     * @return LocalDate
+     */
+    public static function sample(): LocalDate {
+        return new LocalDate(
+         LocalDate::sampleLocalDate()
+        );
+    }
+}
+
 // This is an autogenerated file:LocaleClass
 
 class LocaleClass {
@@ -31309,212 +31352,12 @@ class Module {
     }
 }
 
-// This is an autogenerated file:Mutable
-
-class Mutable {
-    private int $mutable; // json:mutable Required
-
-    /**
-     * @param int $mutable
-     */
-    public function __construct(int $mutable) {
-        $this->mutable = $mutable;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromMutable(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toMutable(): int {
-        if (Mutable::validateMutable($this->mutable))  {
-            return $this->mutable; /*int*/
-        }
-        throw new Exception('never get to this Mutable::mutable');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateMutable(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getMutable(): int {
-        if (Mutable::validateMutable($this->mutable))  {
-            return $this->mutable;
-        }
-        throw new Exception('never get to getMutable Mutable::mutable');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleMutable(): int {
-        return 31; /*31:mutable*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Mutable::validateMutable($this->mutable);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'mutable'} = $this->toMutable();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Mutable
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Mutable {
-        if (!property_exists($obj, 'mutable')) {
-            throw new Exception("Missing required property");
-        }
-        return new Mutable(
-         Mutable::fromMutable($obj->{'mutable'})
-        );
-    }
-
-    /**
-     * @return Mutable
-     */
-    public static function sample(): Mutable {
-        return new Mutable(
-         Mutable::sampleMutable()
-        );
-    }
-}
-
-// This is an autogenerated file:Mutating
-
-class Mutating {
-    private int $mutating; // json:mutating Required
-
-    /**
-     * @param int $mutating
-     */
-    public function __construct(int $mutating) {
-        $this->mutating = $mutating;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromMutating(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toMutating(): int {
-        if (Mutating::validateMutating($this->mutating))  {
-            return $this->mutating; /*int*/
-        }
-        throw new Exception('never get to this Mutating::mutating');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateMutating(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getMutating(): int {
-        if (Mutating::validateMutating($this->mutating))  {
-            return $this->mutating;
-        }
-        throw new Exception('never get to getMutating Mutating::mutating');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleMutating(): int {
-        return 31; /*31:mutating*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Mutating::validateMutating($this->mutating);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'mutating'} = $this->toMutating();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Mutating
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Mutating {
-        if (!property_exists($obj, 'mutating')) {
-            throw new Exception("Missing required property");
-        }
-        return new Mutating(
-         Mutating::fromMutating($obj->{'mutating'})
-        );
-    }
-
-    /**
-     * @return Mutating
-     */
-    public static function sample(): Mutating {
-        return new Mutating(
-         Mutating::sampleMutating()
-        );
-    }
-}
-
 // This is an autogenerated file:Obj4
 
 class Obj4 {
     private int $dummy; // json:dummy Required
+    private Mutable $mutable; // json:mutable Required
+    private Mutating $mutating; // json:mutating Required
     private NamespaceClass $namespace; // json:namespace Required
     private Native $native; // json:native Required
     private NewClass $new; // json:new Required
@@ -31545,6 +31388,8 @@ class Obj4 {
     private ObjectReader $objectReader; // json:ObjectReader Required
     private ObjectWriter $objectWriter; // json:ObjectWriter Required
     private Of $of; // json:of Required
+    private OffsetDateTime $offsetDateTime; // json:OffsetDateTime Required
+    private OffsetTime $offsetTime; // json:OffsetTime Required
     private Oneway $oneway; // json:oneway Required
     private Open $open; // json:open Required
     private Operator $operator; // json:operator Required
@@ -31575,13 +31420,11 @@ class Obj4 {
     private RegExp $regExp; // json:RegExp Required
     private Register $register; // json:register Required
     private ReinterpretCast $reinterpretCast; // json:reinterpret_cast Required
-    private Repeat $repeat; // json:repeat Required
-    private RequireClass $require; // json:require Required
-    private Required $required; // json:required Required
-    private Requires $requires; // json:requires Required
 
     /**
      * @param int $dummy
+     * @param Mutable $mutable
+     * @param Mutating $mutating
      * @param NamespaceClass $namespace
      * @param Native $native
      * @param NewClass $new
@@ -31612,6 +31455,8 @@ class Obj4 {
      * @param ObjectReader $objectReader
      * @param ObjectWriter $objectWriter
      * @param Of $of
+     * @param OffsetDateTime $offsetDateTime
+     * @param OffsetTime $offsetTime
      * @param Oneway $oneway
      * @param Open $open
      * @param Operator $operator
@@ -31642,13 +31487,11 @@ class Obj4 {
      * @param RegExp $regExp
      * @param Register $register
      * @param ReinterpretCast $reinterpretCast
-     * @param Repeat $repeat
-     * @param RequireClass $require
-     * @param Required $required
-     * @param Requires $requires
      */
-    public function __construct(int $dummy, NamespaceClass $namespace, Native $native, NewClass $new, Newtonsoft $newtonsoft, Nil $nil, No $no, NoSuchMethod $noSuchMethod, Noexcept $noexcept, Nonatomic $nonatomic, None $none, Nonlocal $nonlocal, Nonmutating $nonmutating, Not $not, NotEq $notEq, NSError $nsError, NSObject $nsObject, NSString $nsString, NULLClass $null, NullNode $nullNode, Nullptr $nullptr, Number $number, NoneClass $obj4None, Obj4Null $obj4Null, ProtocolClass $obj4Protocol, ObjectClass $object, ObjectMapper $objectMapper, ObjectNode $objectNode, ObjectReader $objectReader, ObjectWriter $objectWriter, Of $of, Oneway $oneway, Open $open, Operator $operator, Optional $optional, OrClass $or, OrEq $orEq, Out $out, OverrideClass $override, Package $package, Params $params, Pass $pass, Port $port, Postfix $postfix, Precedence $precedence, Prefix $prefix, PrintClass $print, PrintMembers $printMembers, Printf $printf, PrivateClass $private, ProtectedClass $protected, Protocol $protocol, PublicClass $public, Quicktype $quicktype, Raise $raise, Range $range, ReadonlyClass $readonly, Ref $ref, RegExp $regExp, Register $register, ReinterpretCast $reinterpretCast, Repeat $repeat, RequireClass $require, Required $required, Requires $requires) {
+    public function __construct(int $dummy, Mutable $mutable, Mutating $mutating, NamespaceClass $namespace, Native $native, NewClass $new, Newtonsoft $newtonsoft, Nil $nil, No $no, NoSuchMethod $noSuchMethod, Noexcept $noexcept, Nonatomic $nonatomic, None $none, Nonlocal $nonlocal, Nonmutating $nonmutating, Not $not, NotEq $notEq, NSError $nsError, NSObject $nsObject, NSString $nsString, NULLClass $null, NullNode $nullNode, Nullptr $nullptr, Number $number, NoneClass $obj4None, Obj4Null $obj4Null, ProtocolClass $obj4Protocol, ObjectClass $object, ObjectMapper $objectMapper, ObjectNode $objectNode, ObjectReader $objectReader, ObjectWriter $objectWriter, Of $of, OffsetDateTime $offsetDateTime, OffsetTime $offsetTime, Oneway $oneway, Open $open, Operator $operator, Optional $optional, OrClass $or, OrEq $orEq, Out $out, OverrideClass $override, Package $package, Params $params, Pass $pass, Port $port, Postfix $postfix, Precedence $precedence, Prefix $prefix, PrintClass $print, PrintMembers $printMembers, Printf $printf, PrivateClass $private, ProtectedClass $protected, Protocol $protocol, PublicClass $public, Quicktype $quicktype, Raise $raise, Range $range, ReadonlyClass $readonly, Ref $ref, RegExp $regExp, Register $register, ReinterpretCast $reinterpretCast) {
         $this->dummy = $dummy;
+        $this->mutable = $mutable;
+        $this->mutating = $mutating;
         $this->namespace = $namespace;
         $this->native = $native;
         $this->new = $new;
@@ -31679,6 +31522,8 @@ class Obj4 {
         $this->objectReader = $objectReader;
         $this->objectWriter = $objectWriter;
         $this->of = $of;
+        $this->offsetDateTime = $offsetDateTime;
+        $this->offsetTime = $offsetTime;
         $this->oneway = $oneway;
         $this->open = $open;
         $this->operator = $operator;
@@ -31709,10 +31554,6 @@ class Obj4 {
         $this->regExp = $regExp;
         $this->register = $register;
         $this->reinterpretCast = $reinterpretCast;
-        $this->repeat = $repeat;
-        $this->require = $require;
-        $this->required = $required;
-        $this->requires = $requires;
     }
 
     /**
@@ -31762,6 +31603,102 @@ class Obj4 {
         return 31; /*31:dummy*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Mutable
+     */
+    public static function fromMutable(stdClass $value): Mutable {
+        return Mutable::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toMutable(): stdClass {
+        if (Obj4::validateMutable($this->mutable))  {
+            return $this->mutable->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj4::mutable');
+    }
+
+    /**
+     * @param Mutable
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateMutable(Mutable $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Mutable
+     */
+    public function getMutable(): Mutable {
+        if (Obj4::validateMutable($this->mutable))  {
+            return $this->mutable;
+        }
+        throw new Exception('never get to getMutable Obj4::mutable');
+    }
+
+    /**
+     * @return Mutable
+     */
+    public static function sampleMutable(): Mutable {
+        return Mutable::sample(); /*32:mutable*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Mutating
+     */
+    public static function fromMutating(stdClass $value): Mutating {
+        return Mutating::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toMutating(): stdClass {
+        if (Obj4::validateMutating($this->mutating))  {
+            return $this->mutating->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj4::mutating');
+    }
+
+    /**
+     * @param Mutating
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateMutating(Mutating $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Mutating
+     */
+    public function getMutating(): Mutating {
+        if (Obj4::validateMutating($this->mutating))  {
+            return $this->mutating;
+        }
+        throw new Exception('never get to getMutating Obj4::mutating');
+    }
+
+    /**
+     * @return Mutating
+     */
+    public static function sampleMutating(): Mutating {
+        return Mutating::sample(); /*33:mutating*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -31807,7 +31744,7 @@ class Obj4 {
      * @return NamespaceClass
      */
     public static function sampleNamespace(): NamespaceClass {
-        return NamespaceClass::sample(); /*32:namespace*/
+        return NamespaceClass::sample(); /*34:namespace*/
     }
 
     /**
@@ -31855,7 +31792,7 @@ class Obj4 {
      * @return Native
      */
     public static function sampleNative(): Native {
-        return Native::sample(); /*33:native*/
+        return Native::sample(); /*35:native*/
     }
 
     /**
@@ -31903,7 +31840,7 @@ class Obj4 {
      * @return NewClass
      */
     public static function sampleNew(): NewClass {
-        return NewClass::sample(); /*34:new*/
+        return NewClass::sample(); /*36:new*/
     }
 
     /**
@@ -31951,7 +31888,7 @@ class Obj4 {
      * @return Newtonsoft
      */
     public static function sampleNewtonsoft(): Newtonsoft {
-        return Newtonsoft::sample(); /*35:newtonsoft*/
+        return Newtonsoft::sample(); /*37:newtonsoft*/
     }
 
     /**
@@ -31999,7 +31936,7 @@ class Obj4 {
      * @return Nil
      */
     public static function sampleNil(): Nil {
-        return Nil::sample(); /*36:nil*/
+        return Nil::sample(); /*38:nil*/
     }
 
     /**
@@ -32047,7 +31984,7 @@ class Obj4 {
      * @return No
      */
     public static function sampleNo(): No {
-        return No::sample(); /*37:no*/
+        return No::sample(); /*39:no*/
     }
 
     /**
@@ -32095,7 +32032,7 @@ class Obj4 {
      * @return NoSuchMethod
      */
     public static function sampleNoSuchMethod(): NoSuchMethod {
-        return NoSuchMethod::sample(); /*38:noSuchMethod*/
+        return NoSuchMethod::sample(); /*40:noSuchMethod*/
     }
 
     /**
@@ -32143,7 +32080,7 @@ class Obj4 {
      * @return Noexcept
      */
     public static function sampleNoexcept(): Noexcept {
-        return Noexcept::sample(); /*39:noexcept*/
+        return Noexcept::sample(); /*41:noexcept*/
     }
 
     /**
@@ -32191,7 +32128,7 @@ class Obj4 {
      * @return Nonatomic
      */
     public static function sampleNonatomic(): Nonatomic {
-        return Nonatomic::sample(); /*40:nonatomic*/
+        return Nonatomic::sample(); /*42:nonatomic*/
     }
 
     /**
@@ -32239,7 +32176,7 @@ class Obj4 {
      * @return None
      */
     public static function sampleNone(): None {
-        return None::sample(); /*41:none*/
+        return None::sample(); /*43:none*/
     }
 
     /**
@@ -32287,7 +32224,7 @@ class Obj4 {
      * @return Nonlocal
      */
     public static function sampleNonlocal(): Nonlocal {
-        return Nonlocal::sample(); /*42:nonlocal*/
+        return Nonlocal::sample(); /*44:nonlocal*/
     }
 
     /**
@@ -32335,7 +32272,7 @@ class Obj4 {
      * @return Nonmutating
      */
     public static function sampleNonmutating(): Nonmutating {
-        return Nonmutating::sample(); /*43:nonmutating*/
+        return Nonmutating::sample(); /*45:nonmutating*/
     }
 
     /**
@@ -32383,7 +32320,7 @@ class Obj4 {
      * @return Not
      */
     public static function sampleNot(): Not {
-        return Not::sample(); /*44:not*/
+        return Not::sample(); /*46:not*/
     }
 
     /**
@@ -32431,7 +32368,7 @@ class Obj4 {
      * @return NotEq
      */
     public static function sampleNotEq(): NotEq {
-        return NotEq::sample(); /*45:notEq*/
+        return NotEq::sample(); /*47:notEq*/
     }
 
     /**
@@ -32479,7 +32416,7 @@ class Obj4 {
      * @return NSError
      */
     public static function sampleNSError(): NSError {
-        return NSError::sample(); /*46:nsError*/
+        return NSError::sample(); /*48:nsError*/
     }
 
     /**
@@ -32527,7 +32464,7 @@ class Obj4 {
      * @return NSObject
      */
     public static function sampleNSObject(): NSObject {
-        return NSObject::sample(); /*47:nsObject*/
+        return NSObject::sample(); /*49:nsObject*/
     }
 
     /**
@@ -32575,7 +32512,7 @@ class Obj4 {
      * @return NSString
      */
     public static function sampleNSString(): NSString {
-        return NSString::sample(); /*48:nsString*/
+        return NSString::sample(); /*50:nsString*/
     }
 
     /**
@@ -32623,7 +32560,7 @@ class Obj4 {
      * @return NULLClass
      */
     public static function sampleNull(): NULLClass {
-        return NULLClass::sample(); /*49:null*/
+        return NULLClass::sample(); /*51:null*/
     }
 
     /**
@@ -32671,7 +32608,7 @@ class Obj4 {
      * @return NullNode
      */
     public static function sampleNullNode(): NullNode {
-        return NullNode::sample(); /*50:nullNode*/
+        return NullNode::sample(); /*52:nullNode*/
     }
 
     /**
@@ -32719,7 +32656,7 @@ class Obj4 {
      * @return Nullptr
      */
     public static function sampleNullptr(): Nullptr {
-        return Nullptr::sample(); /*51:nullptr*/
+        return Nullptr::sample(); /*53:nullptr*/
     }
 
     /**
@@ -32767,7 +32704,7 @@ class Obj4 {
      * @return Number
      */
     public static function sampleNumber(): Number {
-        return Number::sample(); /*52:number*/
+        return Number::sample(); /*54:number*/
     }
 
     /**
@@ -32815,7 +32752,7 @@ class Obj4 {
      * @return NoneClass
      */
     public static function sampleObj4None(): NoneClass {
-        return NoneClass::sample(); /*53:obj4None*/
+        return NoneClass::sample(); /*55:obj4None*/
     }
 
     /**
@@ -32863,7 +32800,7 @@ class Obj4 {
      * @return Obj4Null
      */
     public static function sampleObj4Null(): Obj4Null {
-        return Obj4Null::sample(); /*54:obj4Null*/
+        return Obj4Null::sample(); /*56:obj4Null*/
     }
 
     /**
@@ -32911,7 +32848,7 @@ class Obj4 {
      * @return ProtocolClass
      */
     public static function sampleObj4Protocol(): ProtocolClass {
-        return ProtocolClass::sample(); /*55:obj4Protocol*/
+        return ProtocolClass::sample(); /*57:obj4Protocol*/
     }
 
     /**
@@ -32959,7 +32896,7 @@ class Obj4 {
      * @return ObjectClass
      */
     public static function sampleObject(): ObjectClass {
-        return ObjectClass::sample(); /*56:object*/
+        return ObjectClass::sample(); /*58:object*/
     }
 
     /**
@@ -33007,7 +32944,7 @@ class Obj4 {
      * @return ObjectMapper
      */
     public static function sampleObjectMapper(): ObjectMapper {
-        return ObjectMapper::sample(); /*57:objectMapper*/
+        return ObjectMapper::sample(); /*59:objectMapper*/
     }
 
     /**
@@ -33055,7 +32992,7 @@ class Obj4 {
      * @return ObjectNode
      */
     public static function sampleObjectNode(): ObjectNode {
-        return ObjectNode::sample(); /*58:objectNode*/
+        return ObjectNode::sample(); /*60:objectNode*/
     }
 
     /**
@@ -33103,7 +33040,7 @@ class Obj4 {
      * @return ObjectReader
      */
     public static function sampleObjectReader(): ObjectReader {
-        return ObjectReader::sample(); /*59:objectReader*/
+        return ObjectReader::sample(); /*61:objectReader*/
     }
 
     /**
@@ -33151,7 +33088,7 @@ class Obj4 {
      * @return ObjectWriter
      */
     public static function sampleObjectWriter(): ObjectWriter {
-        return ObjectWriter::sample(); /*60:objectWriter*/
+        return ObjectWriter::sample(); /*62:objectWriter*/
     }
 
     /**
@@ -33199,7 +33136,103 @@ class Obj4 {
      * @return Of
      */
     public static function sampleOf(): Of {
-        return Of::sample(); /*61:of*/
+        return Of::sample(); /*63:of*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return OffsetDateTime
+     */
+    public static function fromOffsetDateTime(stdClass $value): OffsetDateTime {
+        return OffsetDateTime::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toOffsetDateTime(): stdClass {
+        if (Obj4::validateOffsetDateTime($this->offsetDateTime))  {
+            return $this->offsetDateTime->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj4::offsetDateTime');
+    }
+
+    /**
+     * @param OffsetDateTime
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateOffsetDateTime(OffsetDateTime $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return OffsetDateTime
+     */
+    public function getOffsetDateTime(): OffsetDateTime {
+        if (Obj4::validateOffsetDateTime($this->offsetDateTime))  {
+            return $this->offsetDateTime;
+        }
+        throw new Exception('never get to getOffsetDateTime Obj4::offsetDateTime');
+    }
+
+    /**
+     * @return OffsetDateTime
+     */
+    public static function sampleOffsetDateTime(): OffsetDateTime {
+        return OffsetDateTime::sample(); /*64:offsetDateTime*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return OffsetTime
+     */
+    public static function fromOffsetTime(stdClass $value): OffsetTime {
+        return OffsetTime::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toOffsetTime(): stdClass {
+        if (Obj4::validateOffsetTime($this->offsetTime))  {
+            return $this->offsetTime->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj4::offsetTime');
+    }
+
+    /**
+     * @param OffsetTime
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateOffsetTime(OffsetTime $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return OffsetTime
+     */
+    public function getOffsetTime(): OffsetTime {
+        if (Obj4::validateOffsetTime($this->offsetTime))  {
+            return $this->offsetTime;
+        }
+        throw new Exception('never get to getOffsetTime Obj4::offsetTime');
+    }
+
+    /**
+     * @return OffsetTime
+     */
+    public static function sampleOffsetTime(): OffsetTime {
+        return OffsetTime::sample(); /*65:offsetTime*/
     }
 
     /**
@@ -33247,7 +33280,7 @@ class Obj4 {
      * @return Oneway
      */
     public static function sampleOneway(): Oneway {
-        return Oneway::sample(); /*62:oneway*/
+        return Oneway::sample(); /*66:oneway*/
     }
 
     /**
@@ -33295,7 +33328,7 @@ class Obj4 {
      * @return Open
      */
     public static function sampleOpen(): Open {
-        return Open::sample(); /*63:open*/
+        return Open::sample(); /*67:open*/
     }
 
     /**
@@ -33343,7 +33376,7 @@ class Obj4 {
      * @return Operator
      */
     public static function sampleOperator(): Operator {
-        return Operator::sample(); /*64:operator*/
+        return Operator::sample(); /*68:operator*/
     }
 
     /**
@@ -33391,7 +33424,7 @@ class Obj4 {
      * @return Optional
      */
     public static function sampleOptional(): Optional {
-        return Optional::sample(); /*65:optional*/
+        return Optional::sample(); /*69:optional*/
     }
 
     /**
@@ -33439,7 +33472,7 @@ class Obj4 {
      * @return OrClass
      */
     public static function sampleOr(): OrClass {
-        return OrClass::sample(); /*66:or*/
+        return OrClass::sample(); /*70:or*/
     }
 
     /**
@@ -33487,7 +33520,7 @@ class Obj4 {
      * @return OrEq
      */
     public static function sampleOrEq(): OrEq {
-        return OrEq::sample(); /*67:orEq*/
+        return OrEq::sample(); /*71:orEq*/
     }
 
     /**
@@ -33535,7 +33568,7 @@ class Obj4 {
      * @return Out
      */
     public static function sampleOut(): Out {
-        return Out::sample(); /*68:out*/
+        return Out::sample(); /*72:out*/
     }
 
     /**
@@ -33583,7 +33616,7 @@ class Obj4 {
      * @return OverrideClass
      */
     public static function sampleOverride(): OverrideClass {
-        return OverrideClass::sample(); /*69:override*/
+        return OverrideClass::sample(); /*73:override*/
     }
 
     /**
@@ -33631,7 +33664,7 @@ class Obj4 {
      * @return Package
      */
     public static function samplePackage(): Package {
-        return Package::sample(); /*70:package*/
+        return Package::sample(); /*74:package*/
     }
 
     /**
@@ -33679,7 +33712,7 @@ class Obj4 {
      * @return Params
      */
     public static function sampleParams(): Params {
-        return Params::sample(); /*71:params*/
+        return Params::sample(); /*75:params*/
     }
 
     /**
@@ -33727,7 +33760,7 @@ class Obj4 {
      * @return Pass
      */
     public static function samplePass(): Pass {
-        return Pass::sample(); /*72:pass*/
+        return Pass::sample(); /*76:pass*/
     }
 
     /**
@@ -33775,7 +33808,7 @@ class Obj4 {
      * @return Port
      */
     public static function samplePort(): Port {
-        return Port::sample(); /*73:port*/
+        return Port::sample(); /*77:port*/
     }
 
     /**
@@ -33823,7 +33856,7 @@ class Obj4 {
      * @return Postfix
      */
     public static function samplePostfix(): Postfix {
-        return Postfix::sample(); /*74:postfix*/
+        return Postfix::sample(); /*78:postfix*/
     }
 
     /**
@@ -33871,7 +33904,7 @@ class Obj4 {
      * @return Precedence
      */
     public static function samplePrecedence(): Precedence {
-        return Precedence::sample(); /*75:precedence*/
+        return Precedence::sample(); /*79:precedence*/
     }
 
     /**
@@ -33919,7 +33952,7 @@ class Obj4 {
      * @return Prefix
      */
     public static function samplePrefix(): Prefix {
-        return Prefix::sample(); /*76:prefix*/
+        return Prefix::sample(); /*80:prefix*/
     }
 
     /**
@@ -33967,7 +34000,7 @@ class Obj4 {
      * @return PrintClass
      */
     public static function samplePrint(): PrintClass {
-        return PrintClass::sample(); /*77:print*/
+        return PrintClass::sample(); /*81:print*/
     }
 
     /**
@@ -34015,7 +34048,7 @@ class Obj4 {
      * @return PrintMembers
      */
     public static function samplePrintMembers(): PrintMembers {
-        return PrintMembers::sample(); /*78:printMembers*/
+        return PrintMembers::sample(); /*82:printMembers*/
     }
 
     /**
@@ -34063,7 +34096,7 @@ class Obj4 {
      * @return Printf
      */
     public static function samplePrintf(): Printf {
-        return Printf::sample(); /*79:printf*/
+        return Printf::sample(); /*83:printf*/
     }
 
     /**
@@ -34111,7 +34144,7 @@ class Obj4 {
      * @return PrivateClass
      */
     public static function samplePrivate(): PrivateClass {
-        return PrivateClass::sample(); /*80:private*/
+        return PrivateClass::sample(); /*84:private*/
     }
 
     /**
@@ -34159,7 +34192,7 @@ class Obj4 {
      * @return ProtectedClass
      */
     public static function sampleProtected(): ProtectedClass {
-        return ProtectedClass::sample(); /*81:protected*/
+        return ProtectedClass::sample(); /*85:protected*/
     }
 
     /**
@@ -34207,7 +34240,7 @@ class Obj4 {
      * @return Protocol
      */
     public static function sampleProtocol(): Protocol {
-        return Protocol::sample(); /*82:protocol*/
+        return Protocol::sample(); /*86:protocol*/
     }
 
     /**
@@ -34255,7 +34288,7 @@ class Obj4 {
      * @return PublicClass
      */
     public static function samplePublic(): PublicClass {
-        return PublicClass::sample(); /*83:public*/
+        return PublicClass::sample(); /*87:public*/
     }
 
     /**
@@ -34303,7 +34336,7 @@ class Obj4 {
      * @return Quicktype
      */
     public static function sampleQuicktype(): Quicktype {
-        return Quicktype::sample(); /*84:quicktype*/
+        return Quicktype::sample(); /*88:quicktype*/
     }
 
     /**
@@ -34351,7 +34384,7 @@ class Obj4 {
      * @return Raise
      */
     public static function sampleRaise(): Raise {
-        return Raise::sample(); /*85:raise*/
+        return Raise::sample(); /*89:raise*/
     }
 
     /**
@@ -34399,7 +34432,7 @@ class Obj4 {
      * @return Range
      */
     public static function sampleRange(): Range {
-        return Range::sample(); /*86:range*/
+        return Range::sample(); /*90:range*/
     }
 
     /**
@@ -34447,7 +34480,7 @@ class Obj4 {
      * @return ReadonlyClass
      */
     public static function sampleReadonly(): ReadonlyClass {
-        return ReadonlyClass::sample(); /*87:readonly*/
+        return ReadonlyClass::sample(); /*91:readonly*/
     }
 
     /**
@@ -34495,7 +34528,7 @@ class Obj4 {
      * @return Ref
      */
     public static function sampleRef(): Ref {
-        return Ref::sample(); /*88:ref*/
+        return Ref::sample(); /*92:ref*/
     }
 
     /**
@@ -34543,7 +34576,7 @@ class Obj4 {
      * @return RegExp
      */
     public static function sampleRegExp(): RegExp {
-        return RegExp::sample(); /*89:regExp*/
+        return RegExp::sample(); /*93:regExp*/
     }
 
     /**
@@ -34591,7 +34624,7 @@ class Obj4 {
      * @return Register
      */
     public static function sampleRegister(): Register {
-        return Register::sample(); /*90:register*/
+        return Register::sample(); /*94:register*/
     }
 
     /**
@@ -34639,199 +34672,7 @@ class Obj4 {
      * @return ReinterpretCast
      */
     public static function sampleReinterpretCast(): ReinterpretCast {
-        return ReinterpretCast::sample(); /*91:reinterpretCast*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Repeat
-     */
-    public static function fromRepeat(stdClass $value): Repeat {
-        return Repeat::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toRepeat(): stdClass {
-        if (Obj4::validateRepeat($this->repeat))  {
-            return $this->repeat->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj4::repeat');
-    }
-
-    /**
-     * @param Repeat
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateRepeat(Repeat $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Repeat
-     */
-    public function getRepeat(): Repeat {
-        if (Obj4::validateRepeat($this->repeat))  {
-            return $this->repeat;
-        }
-        throw new Exception('never get to getRepeat Obj4::repeat');
-    }
-
-    /**
-     * @return Repeat
-     */
-    public static function sampleRepeat(): Repeat {
-        return Repeat::sample(); /*92:repeat*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return RequireClass
-     */
-    public static function fromRequire(stdClass $value): RequireClass {
-        return RequireClass::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toRequire(): stdClass {
-        if (Obj4::validateRequire($this->require))  {
-            return $this->require->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj4::require');
-    }
-
-    /**
-     * @param RequireClass
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateRequire(RequireClass $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return RequireClass
-     */
-    public function getRequire(): RequireClass {
-        if (Obj4::validateRequire($this->require))  {
-            return $this->require;
-        }
-        throw new Exception('never get to getRequire Obj4::require');
-    }
-
-    /**
-     * @return RequireClass
-     */
-    public static function sampleRequire(): RequireClass {
-        return RequireClass::sample(); /*93:require*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Required
-     */
-    public static function fromRequired(stdClass $value): Required {
-        return Required::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toRequired(): stdClass {
-        if (Obj4::validateRequired($this->required))  {
-            return $this->required->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj4::required');
-    }
-
-    /**
-     * @param Required
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateRequired(Required $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Required
-     */
-    public function getRequired(): Required {
-        if (Obj4::validateRequired($this->required))  {
-            return $this->required;
-        }
-        throw new Exception('never get to getRequired Obj4::required');
-    }
-
-    /**
-     * @return Required
-     */
-    public static function sampleRequired(): Required {
-        return Required::sample(); /*94:required*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Requires
-     */
-    public static function fromRequires(stdClass $value): Requires {
-        return Requires::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toRequires(): stdClass {
-        if (Obj4::validateRequires($this->requires))  {
-            return $this->requires->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj4::requires');
-    }
-
-    /**
-     * @param Requires
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateRequires(Requires $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Requires
-     */
-    public function getRequires(): Requires {
-        if (Obj4::validateRequires($this->requires))  {
-            return $this->requires;
-        }
-        throw new Exception('never get to getRequires Obj4::requires');
-    }
-
-    /**
-     * @return Requires
-     */
-    public static function sampleRequires(): Requires {
-        return Requires::sample(); /*95:requires*/
+        return ReinterpretCast::sample(); /*95:reinterpretCast*/
     }
 
     /**
@@ -34840,6 +34681,8 @@ class Obj4 {
      */
     public function validate(): bool {
         return Obj4::validateDummy($this->dummy)
+        || Obj4::validateMutable($this->mutable)
+        || Obj4::validateMutating($this->mutating)
         || Obj4::validateNamespace($this->namespace)
         || Obj4::validateNative($this->native)
         || Obj4::validateNew($this->new)
@@ -34870,6 +34713,8 @@ class Obj4 {
         || Obj4::validateObjectReader($this->objectReader)
         || Obj4::validateObjectWriter($this->objectWriter)
         || Obj4::validateOf($this->of)
+        || Obj4::validateOffsetDateTime($this->offsetDateTime)
+        || Obj4::validateOffsetTime($this->offsetTime)
         || Obj4::validateOneway($this->oneway)
         || Obj4::validateOpen($this->open)
         || Obj4::validateOperator($this->operator)
@@ -34899,11 +34744,7 @@ class Obj4 {
         || Obj4::validateRef($this->ref)
         || Obj4::validateRegExp($this->regExp)
         || Obj4::validateRegister($this->register)
-        || Obj4::validateReinterpretCast($this->reinterpretCast)
-        || Obj4::validateRepeat($this->repeat)
-        || Obj4::validateRequire($this->require)
-        || Obj4::validateRequired($this->required)
-        || Obj4::validateRequires($this->requires);
+        || Obj4::validateReinterpretCast($this->reinterpretCast);
     }
 
     /**
@@ -34913,6 +34754,8 @@ class Obj4 {
     public function to(): stdClass  {
         $out = new stdClass();
         $out->{'dummy'} = $this->toDummy();
+        $out->{'mutable'} = $this->toMutable();
+        $out->{'mutating'} = $this->toMutating();
         $out->{'namespace'} = $this->toNamespace();
         $out->{'native'} = $this->toNative();
         $out->{'new'} = $this->toNew();
@@ -34943,6 +34786,8 @@ class Obj4 {
         $out->{'ObjectReader'} = $this->toObjectReader();
         $out->{'ObjectWriter'} = $this->toObjectWriter();
         $out->{'of'} = $this->toOf();
+        $out->{'OffsetDateTime'} = $this->toOffsetDateTime();
+        $out->{'OffsetTime'} = $this->toOffsetTime();
         $out->{'oneway'} = $this->toOneway();
         $out->{'open'} = $this->toOpen();
         $out->{'operator'} = $this->toOperator();
@@ -34973,10 +34818,6 @@ class Obj4 {
         $out->{'RegExp'} = $this->toRegExp();
         $out->{'register'} = $this->toRegister();
         $out->{'reinterpret_cast'} = $this->toReinterpretCast();
-        $out->{'repeat'} = $this->toRepeat();
-        $out->{'require'} = $this->toRequire();
-        $out->{'required'} = $this->toRequired();
-        $out->{'requires'} = $this->toRequires();
         return $out;
     }
 
@@ -34989,6 +34830,12 @@ class Obj4 {
         if (!property_exists($obj, 'dummy')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'mutable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mutating')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'namespace')) {
             throw new Exception("Missing required property");
         }
@@ -35079,6 +34926,12 @@ class Obj4 {
         if (!property_exists($obj, 'of')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'OffsetDateTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'OffsetTime')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'oneway')) {
             throw new Exception("Missing required property");
         }
@@ -35169,20 +35022,10 @@ class Obj4 {
         if (!property_exists($obj, 'reinterpret_cast')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'repeat')) {
-            throw new Exception("Missing required property");
-        }
-        if (!property_exists($obj, 'require')) {
-            throw new Exception("Missing required property");
-        }
-        if (!property_exists($obj, 'required')) {
-            throw new Exception("Missing required property");
-        }
-        if (!property_exists($obj, 'requires')) {
-            throw new Exception("Missing required property");
-        }
         return new Obj4(
          Obj4::fromDummy($obj->{'dummy'})
+        ,Obj4::fromMutable($obj->{'mutable'})
+        ,Obj4::fromMutating($obj->{'mutating'})
         ,Obj4::fromNamespace($obj->{'namespace'})
         ,Obj4::fromNative($obj->{'native'})
         ,Obj4::fromNew($obj->{'new'})
@@ -35213,6 +35056,8 @@ class Obj4 {
         ,Obj4::fromObjectReader($obj->{'ObjectReader'})
         ,Obj4::fromObjectWriter($obj->{'ObjectWriter'})
         ,Obj4::fromOf($obj->{'of'})
+        ,Obj4::fromOffsetDateTime($obj->{'OffsetDateTime'})
+        ,Obj4::fromOffsetTime($obj->{'OffsetTime'})
         ,Obj4::fromOneway($obj->{'oneway'})
         ,Obj4::fromOpen($obj->{'open'})
         ,Obj4::fromOperator($obj->{'operator'})
@@ -35243,10 +35088,6 @@ class Obj4 {
         ,Obj4::fromRegExp($obj->{'RegExp'})
         ,Obj4::fromRegister($obj->{'register'})
         ,Obj4::fromReinterpretCast($obj->{'reinterpret_cast'})
-        ,Obj4::fromRepeat($obj->{'repeat'})
-        ,Obj4::fromRequire($obj->{'require'})
-        ,Obj4::fromRequired($obj->{'required'})
-        ,Obj4::fromRequires($obj->{'requires'})
         );
     }
 
@@ -35256,6 +35097,8 @@ class Obj4 {
     public static function sample(): Obj4 {
         return new Obj4(
          Obj4::sampleDummy()
+        ,Obj4::sampleMutable()
+        ,Obj4::sampleMutating()
         ,Obj4::sampleNamespace()
         ,Obj4::sampleNative()
         ,Obj4::sampleNew()
@@ -35286,6 +35129,8 @@ class Obj4 {
         ,Obj4::sampleObjectReader()
         ,Obj4::sampleObjectWriter()
         ,Obj4::sampleOf()
+        ,Obj4::sampleOffsetDateTime()
+        ,Obj4::sampleOffsetTime()
         ,Obj4::sampleOneway()
         ,Obj4::sampleOpen()
         ,Obj4::sampleOperator()
@@ -35316,10 +35161,208 @@ class Obj4 {
         ,Obj4::sampleRegExp()
         ,Obj4::sampleRegister()
         ,Obj4::sampleReinterpretCast()
-        ,Obj4::sampleRepeat()
-        ,Obj4::sampleRequire()
-        ,Obj4::sampleRequired()
-        ,Obj4::sampleRequires()
+        );
+    }
+}
+
+// This is an autogenerated file:Mutable
+
+class Mutable {
+    private int $mutable; // json:mutable Required
+
+    /**
+     * @param int $mutable
+     */
+    public function __construct(int $mutable) {
+        $this->mutable = $mutable;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromMutable(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toMutable(): int {
+        if (Mutable::validateMutable($this->mutable))  {
+            return $this->mutable; /*int*/
+        }
+        throw new Exception('never get to this Mutable::mutable');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateMutable(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getMutable(): int {
+        if (Mutable::validateMutable($this->mutable))  {
+            return $this->mutable;
+        }
+        throw new Exception('never get to getMutable Mutable::mutable');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleMutable(): int {
+        return 31; /*31:mutable*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Mutable::validateMutable($this->mutable);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'mutable'} = $this->toMutable();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Mutable
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Mutable {
+        if (!property_exists($obj, 'mutable')) {
+            throw new Exception("Missing required property");
+        }
+        return new Mutable(
+         Mutable::fromMutable($obj->{'mutable'})
+        );
+    }
+
+    /**
+     * @return Mutable
+     */
+    public static function sample(): Mutable {
+        return new Mutable(
+         Mutable::sampleMutable()
+        );
+    }
+}
+
+// This is an autogenerated file:Mutating
+
+class Mutating {
+    private int $mutating; // json:mutating Required
+
+    /**
+     * @param int $mutating
+     */
+    public function __construct(int $mutating) {
+        $this->mutating = $mutating;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromMutating(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toMutating(): int {
+        if (Mutating::validateMutating($this->mutating))  {
+            return $this->mutating; /*int*/
+        }
+        throw new Exception('never get to this Mutating::mutating');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateMutating(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getMutating(): int {
+        if (Mutating::validateMutating($this->mutating))  {
+            return $this->mutating;
+        }
+        throw new Exception('never get to getMutating Mutating::mutating');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleMutating(): int {
+        return 31; /*31:mutating*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Mutating::validateMutating($this->mutating);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'mutating'} = $this->toMutating();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Mutating
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Mutating {
+        if (!property_exists($obj, 'mutating')) {
+            throw new Exception("Missing required property");
+        }
+        return new Mutating(
+         Mutating::fromMutating($obj->{'mutating'})
+        );
+    }
+
+    /**
+     * @return Mutating
+     */
+    public static function sample(): Mutating {
+        return new Mutating(
+         Mutating::sampleMutating()
         );
     }
 }
@@ -38354,6 +38397,208 @@ class Of {
     }
 }
 
+// This is an autogenerated file:OffsetDateTime
+
+class OffsetDateTime {
+    private int $offsetDateTime; // json:OffsetDateTime Required
+
+    /**
+     * @param int $offsetDateTime
+     */
+    public function __construct(int $offsetDateTime) {
+        $this->offsetDateTime = $offsetDateTime;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromOffsetDateTime(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toOffsetDateTime(): int {
+        if (OffsetDateTime::validateOffsetDateTime($this->offsetDateTime))  {
+            return $this->offsetDateTime; /*int*/
+        }
+        throw new Exception('never get to this OffsetDateTime::offsetDateTime');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateOffsetDateTime(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getOffsetDateTime(): int {
+        if (OffsetDateTime::validateOffsetDateTime($this->offsetDateTime))  {
+            return $this->offsetDateTime;
+        }
+        throw new Exception('never get to getOffsetDateTime OffsetDateTime::offsetDateTime');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleOffsetDateTime(): int {
+        return 31; /*31:offsetDateTime*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return OffsetDateTime::validateOffsetDateTime($this->offsetDateTime);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'OffsetDateTime'} = $this->toOffsetDateTime();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return OffsetDateTime
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): OffsetDateTime {
+        if (!property_exists($obj, 'OffsetDateTime')) {
+            throw new Exception("Missing required property");
+        }
+        return new OffsetDateTime(
+         OffsetDateTime::fromOffsetDateTime($obj->{'OffsetDateTime'})
+        );
+    }
+
+    /**
+     * @return OffsetDateTime
+     */
+    public static function sample(): OffsetDateTime {
+        return new OffsetDateTime(
+         OffsetDateTime::sampleOffsetDateTime()
+        );
+    }
+}
+
+// This is an autogenerated file:OffsetTime
+
+class OffsetTime {
+    private int $offsetTime; // json:OffsetTime Required
+
+    /**
+     * @param int $offsetTime
+     */
+    public function __construct(int $offsetTime) {
+        $this->offsetTime = $offsetTime;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromOffsetTime(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toOffsetTime(): int {
+        if (OffsetTime::validateOffsetTime($this->offsetTime))  {
+            return $this->offsetTime; /*int*/
+        }
+        throw new Exception('never get to this OffsetTime::offsetTime');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateOffsetTime(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getOffsetTime(): int {
+        if (OffsetTime::validateOffsetTime($this->offsetTime))  {
+            return $this->offsetTime;
+        }
+        throw new Exception('never get to getOffsetTime OffsetTime::offsetTime');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleOffsetTime(): int {
+        return 31; /*31:offsetTime*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return OffsetTime::validateOffsetTime($this->offsetTime);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'OffsetTime'} = $this->toOffsetTime();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return OffsetTime
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): OffsetTime {
+        if (!property_exists($obj, 'OffsetTime')) {
+            throw new Exception("Missing required property");
+        }
+        return new OffsetTime(
+         OffsetTime::fromOffsetTime($obj->{'OffsetTime'})
+        );
+    }
+
+    /**
+     * @return OffsetTime
+     */
+    public static function sample(): OffsetTime {
+        return new OffsetTime(
+         OffsetTime::sampleOffsetTime()
+        );
+    }
+}
+
 // This is an autogenerated file:Oneway
 
 class Oneway {
@@ -41387,410 +41632,6 @@ class ReinterpretCast {
     }
 }
 
-// This is an autogenerated file:Repeat
-
-class Repeat {
-    private int $repeat; // json:repeat Required
-
-    /**
-     * @param int $repeat
-     */
-    public function __construct(int $repeat) {
-        $this->repeat = $repeat;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromRepeat(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toRepeat(): int {
-        if (Repeat::validateRepeat($this->repeat))  {
-            return $this->repeat; /*int*/
-        }
-        throw new Exception('never get to this Repeat::repeat');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateRepeat(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getRepeat(): int {
-        if (Repeat::validateRepeat($this->repeat))  {
-            return $this->repeat;
-        }
-        throw new Exception('never get to getRepeat Repeat::repeat');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleRepeat(): int {
-        return 31; /*31:repeat*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Repeat::validateRepeat($this->repeat);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'repeat'} = $this->toRepeat();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Repeat
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Repeat {
-        if (!property_exists($obj, 'repeat')) {
-            throw new Exception("Missing required property");
-        }
-        return new Repeat(
-         Repeat::fromRepeat($obj->{'repeat'})
-        );
-    }
-
-    /**
-     * @return Repeat
-     */
-    public static function sample(): Repeat {
-        return new Repeat(
-         Repeat::sampleRepeat()
-        );
-    }
-}
-
-// This is an autogenerated file:RequireClass
-
-class RequireClass {
-    private int $require; // json:require Required
-
-    /**
-     * @param int $require
-     */
-    public function __construct(int $require) {
-        $this->require = $require;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromRequire(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toRequire(): int {
-        if (RequireClass::validateRequire($this->require))  {
-            return $this->require; /*int*/
-        }
-        throw new Exception('never get to this RequireClass::require');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateRequire(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getRequire(): int {
-        if (RequireClass::validateRequire($this->require))  {
-            return $this->require;
-        }
-        throw new Exception('never get to getRequire RequireClass::require');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleRequire(): int {
-        return 31; /*31:require*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return RequireClass::validateRequire($this->require);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'require'} = $this->toRequire();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return RequireClass
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): RequireClass {
-        if (!property_exists($obj, 'require')) {
-            throw new Exception("Missing required property");
-        }
-        return new RequireClass(
-         RequireClass::fromRequire($obj->{'require'})
-        );
-    }
-
-    /**
-     * @return RequireClass
-     */
-    public static function sample(): RequireClass {
-        return new RequireClass(
-         RequireClass::sampleRequire()
-        );
-    }
-}
-
-// This is an autogenerated file:Required
-
-class Required {
-    private int $required; // json:required Required
-
-    /**
-     * @param int $required
-     */
-    public function __construct(int $required) {
-        $this->required = $required;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromRequired(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toRequired(): int {
-        if (Required::validateRequired($this->required))  {
-            return $this->required; /*int*/
-        }
-        throw new Exception('never get to this Required::required');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateRequired(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getRequired(): int {
-        if (Required::validateRequired($this->required))  {
-            return $this->required;
-        }
-        throw new Exception('never get to getRequired Required::required');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleRequired(): int {
-        return 31; /*31:required*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Required::validateRequired($this->required);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'required'} = $this->toRequired();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Required
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Required {
-        if (!property_exists($obj, 'required')) {
-            throw new Exception("Missing required property");
-        }
-        return new Required(
-         Required::fromRequired($obj->{'required'})
-        );
-    }
-
-    /**
-     * @return Required
-     */
-    public static function sample(): Required {
-        return new Required(
-         Required::sampleRequired()
-        );
-    }
-}
-
-// This is an autogenerated file:Requires
-
-class Requires {
-    private int $requires; // json:requires Required
-
-    /**
-     * @param int $requires
-     */
-    public function __construct(int $requires) {
-        $this->requires = $requires;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromRequires(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toRequires(): int {
-        if (Requires::validateRequires($this->requires))  {
-            return $this->requires; /*int*/
-        }
-        throw new Exception('never get to this Requires::requires');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateRequires(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getRequires(): int {
-        if (Requires::validateRequires($this->requires))  {
-            return $this->requires;
-        }
-        throw new Exception('never get to getRequires Requires::requires');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleRequires(): int {
-        return 31; /*31:requires*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Requires::validateRequires($this->requires);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'requires'} = $this->toRequires();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Requires
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Requires {
-        if (!property_exists($obj, 'requires')) {
-            throw new Exception("Missing required property");
-        }
-        return new Requires(
-         Requires::fromRequires($obj->{'requires'})
-        );
-    }
-
-    /**
-     * @return Requires
-     */
-    public static function sample(): Requires {
-        return new Requires(
-         Requires::sampleRequires()
-        );
-    }
-}
-
 // This is an autogenerated file:Obj5
 
 class Obj5 {
@@ -41799,8 +41640,11 @@ class Obj5 {
     private Obj5Self $obj5Self; // json:self Required
     private This $obj5This; // json:this Required
     private Obj5True $obj5True; // json:true Required
-    private TypeClass $obj5Type; // json:type Required
     private PrimitiveKind $primitiveKind; // json:PrimitiveKind Required
+    private Repeat $repeat; // json:repeat Required
+    private RequireClass $require; // json:require Required
+    private Required $required; // json:required Required
+    private Requires $requires; // json:requires Required
     private Restrict $restrict; // json:restrict Required
     private Retain $retain; // json:retain Required
     private Rethrows $rethrows; // json:rethrows Required
@@ -41856,9 +41700,6 @@ class Obj5 {
     private TopLevelClass $topLevel; // json:top_level Required
     private Transient $transient; // json:transient Required
     private TrueClass $true; // json:True Required
-    private TryClass $try; // json:try Required
-    private Type $type; // json:Type Required
-    private Typealias $typealias; // json:typealias Required
 
     /**
      * @param int $dummy
@@ -41866,8 +41707,11 @@ class Obj5 {
      * @param Obj5Self $obj5Self
      * @param This $obj5This
      * @param Obj5True $obj5True
-     * @param TypeClass $obj5Type
      * @param PrimitiveKind $primitiveKind
+     * @param Repeat $repeat
+     * @param RequireClass $require
+     * @param Required $required
+     * @param Requires $requires
      * @param Restrict $restrict
      * @param Retain $retain
      * @param Rethrows $rethrows
@@ -41923,18 +41767,18 @@ class Obj5 {
      * @param TopLevelClass $topLevel
      * @param Transient $transient
      * @param TrueClass $true
-     * @param TryClass $try
-     * @param Type $type
-     * @param Typealias $typealias
      */
-    public function __construct(int $dummy, KSerializer $kSerializer, Obj5Self $obj5Self, This $obj5This, Obj5True $obj5True, TypeClass $obj5Type, PrimitiveKind $primitiveKind, Restrict $restrict, Retain $retain, Rethrows $rethrows, ReturnClass $return, Right $right, RuntimeType $runtimeType, S $s, Sbyte $sbyte, Sealed $sealed, Sel $sel, Select $select, SelfClass $self, Sendable $sendable, SerialDescriptor $serialDescriptor, SerialName $serialName, SerializableClass $serializable, SerializationFeature $serializationFeature, Serialize $serialize, SerializerProvider $serializerProvider, Set $set, Short $short, Signed $signed, SimpleModule $simpleModule, Sizeof $sizeof, Stackalloc $stackalloc, Standards $standards, StaticClass $static, StaticAssert $staticAssert, StaticCast $staticCast, StdDeserializer $stdDeserializer, StdSerializer $stdSerializer, Strictfp $strictfp, StringClass $string, Struct $struct, Subscript $subscript, Super $super, SwitchClass $switch, Symbol $symbol, Synchronized $synchronized, System $system, Template $template, TextNode $textNode, Then $then, ThreadLocal $threadLocal, ThrowClass $throw, Throws $throws, TimeOnly $timeOnly, TimeOnlyConverter $timeOnlyConverter, TimeZone $timeZone, ToDict $toDict, ToJSON $toJSON, ToString $toString, TopLevelClass $topLevel, Transient $transient, TrueClass $true, TryClass $try, Type $type, Typealias $typealias) {
+    public function __construct(int $dummy, KSerializer $kSerializer, Obj5Self $obj5Self, This $obj5This, Obj5True $obj5True, PrimitiveKind $primitiveKind, Repeat $repeat, RequireClass $require, Required $required, Requires $requires, Restrict $restrict, Retain $retain, Rethrows $rethrows, ReturnClass $return, Right $right, RuntimeType $runtimeType, S $s, Sbyte $sbyte, Sealed $sealed, Sel $sel, Select $select, SelfClass $self, Sendable $sendable, SerialDescriptor $serialDescriptor, SerialName $serialName, SerializableClass $serializable, SerializationFeature $serializationFeature, Serialize $serialize, SerializerProvider $serializerProvider, Set $set, Short $short, Signed $signed, SimpleModule $simpleModule, Sizeof $sizeof, Stackalloc $stackalloc, Standards $standards, StaticClass $static, StaticAssert $staticAssert, StaticCast $staticCast, StdDeserializer $stdDeserializer, StdSerializer $stdSerializer, Strictfp $strictfp, StringClass $string, Struct $struct, Subscript $subscript, Super $super, SwitchClass $switch, Symbol $symbol, Synchronized $synchronized, System $system, Template $template, TextNode $textNode, Then $then, ThreadLocal $threadLocal, ThrowClass $throw, Throws $throws, TimeOnly $timeOnly, TimeOnlyConverter $timeOnlyConverter, TimeZone $timeZone, ToDict $toDict, ToJSON $toJSON, ToString $toString, TopLevelClass $topLevel, Transient $transient, TrueClass $true) {
         $this->dummy = $dummy;
         $this->kSerializer = $kSerializer;
         $this->obj5Self = $obj5Self;
         $this->obj5This = $obj5This;
         $this->obj5True = $obj5True;
-        $this->obj5Type = $obj5Type;
         $this->primitiveKind = $primitiveKind;
+        $this->repeat = $repeat;
+        $this->require = $require;
+        $this->required = $required;
+        $this->requires = $requires;
         $this->restrict = $restrict;
         $this->retain = $retain;
         $this->rethrows = $rethrows;
@@ -41990,9 +41834,6 @@ class Obj5 {
         $this->topLevel = $topLevel;
         $this->transient = $transient;
         $this->true = $true;
-        $this->try = $try;
-        $this->type = $type;
-        $this->typealias = $typealias;
     }
 
     /**
@@ -42234,54 +42075,6 @@ class Obj5 {
         return Obj5True::sample(); /*35:obj5True*/
     }
 
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return TypeClass
-     */
-    public static function fromObj5Type(stdClass $value): TypeClass {
-        return TypeClass::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toObj5Type(): stdClass {
-        if (Obj5::validateObj5Type($this->obj5Type))  {
-            return $this->obj5Type->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj5::obj5Type');
-    }
-
-    /**
-     * @param TypeClass
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateObj5Type(TypeClass $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return TypeClass
-     */
-    public function getObj5Type(): TypeClass {
-        if (Obj5::validateObj5Type($this->obj5Type))  {
-            return $this->obj5Type;
-        }
-        throw new Exception('never get to getObj5Type Obj5::obj5Type');
-    }
-
-    /**
-     * @return TypeClass
-     */
-    public static function sampleObj5Type(): TypeClass {
-        return TypeClass::sample(); /*36:obj5Type*/
-    }
-
     /**
      * @param stdClass $value
      * @throws Exception
@@ -42327,7 +42120,199 @@ class Obj5 {
      * @return PrimitiveKind
      */
     public static function samplePrimitiveKind(): PrimitiveKind {
-        return PrimitiveKind::sample(); /*37:primitiveKind*/
+        return PrimitiveKind::sample(); /*36:primitiveKind*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Repeat
+     */
+    public static function fromRepeat(stdClass $value): Repeat {
+        return Repeat::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toRepeat(): stdClass {
+        if (Obj5::validateRepeat($this->repeat))  {
+            return $this->repeat->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj5::repeat');
+    }
+
+    /**
+     * @param Repeat
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateRepeat(Repeat $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Repeat
+     */
+    public function getRepeat(): Repeat {
+        if (Obj5::validateRepeat($this->repeat))  {
+            return $this->repeat;
+        }
+        throw new Exception('never get to getRepeat Obj5::repeat');
+    }
+
+    /**
+     * @return Repeat
+     */
+    public static function sampleRepeat(): Repeat {
+        return Repeat::sample(); /*37:repeat*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return RequireClass
+     */
+    public static function fromRequire(stdClass $value): RequireClass {
+        return RequireClass::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toRequire(): stdClass {
+        if (Obj5::validateRequire($this->require))  {
+            return $this->require->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj5::require');
+    }
+
+    /**
+     * @param RequireClass
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateRequire(RequireClass $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return RequireClass
+     */
+    public function getRequire(): RequireClass {
+        if (Obj5::validateRequire($this->require))  {
+            return $this->require;
+        }
+        throw new Exception('never get to getRequire Obj5::require');
+    }
+
+    /**
+     * @return RequireClass
+     */
+    public static function sampleRequire(): RequireClass {
+        return RequireClass::sample(); /*38:require*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Required
+     */
+    public static function fromRequired(stdClass $value): Required {
+        return Required::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toRequired(): stdClass {
+        if (Obj5::validateRequired($this->required))  {
+            return $this->required->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj5::required');
+    }
+
+    /**
+     * @param Required
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateRequired(Required $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Required
+     */
+    public function getRequired(): Required {
+        if (Obj5::validateRequired($this->required))  {
+            return $this->required;
+        }
+        throw new Exception('never get to getRequired Obj5::required');
+    }
+
+    /**
+     * @return Required
+     */
+    public static function sampleRequired(): Required {
+        return Required::sample(); /*39:required*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Requires
+     */
+    public static function fromRequires(stdClass $value): Requires {
+        return Requires::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toRequires(): stdClass {
+        if (Obj5::validateRequires($this->requires))  {
+            return $this->requires->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj5::requires');
+    }
+
+    /**
+     * @param Requires
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateRequires(Requires $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Requires
+     */
+    public function getRequires(): Requires {
+        if (Obj5::validateRequires($this->requires))  {
+            return $this->requires;
+        }
+        throw new Exception('never get to getRequires Obj5::requires');
+    }
+
+    /**
+     * @return Requires
+     */
+    public static function sampleRequires(): Requires {
+        return Requires::sample(); /*40:requires*/
     }
 
     /**
@@ -42375,7 +42360,7 @@ class Obj5 {
      * @return Restrict
      */
     public static function sampleRestrict(): Restrict {
-        return Restrict::sample(); /*38:restrict*/
+        return Restrict::sample(); /*41:restrict*/
     }
 
     /**
@@ -42423,7 +42408,7 @@ class Obj5 {
      * @return Retain
      */
     public static function sampleRetain(): Retain {
-        return Retain::sample(); /*39:retain*/
+        return Retain::sample(); /*42:retain*/
     }
 
     /**
@@ -42471,7 +42456,7 @@ class Obj5 {
      * @return Rethrows
      */
     public static function sampleRethrows(): Rethrows {
-        return Rethrows::sample(); /*40:rethrows*/
+        return Rethrows::sample(); /*43:rethrows*/
     }
 
     /**
@@ -42519,7 +42504,7 @@ class Obj5 {
      * @return ReturnClass
      */
     public static function sampleReturn(): ReturnClass {
-        return ReturnClass::sample(); /*41:return*/
+        return ReturnClass::sample(); /*44:return*/
     }
 
     /**
@@ -42567,7 +42552,7 @@ class Obj5 {
      * @return Right
      */
     public static function sampleRight(): Right {
-        return Right::sample(); /*42:right*/
+        return Right::sample(); /*45:right*/
     }
 
     /**
@@ -42615,7 +42600,7 @@ class Obj5 {
      * @return RuntimeType
      */
     public static function sampleRuntimeType(): RuntimeType {
-        return RuntimeType::sample(); /*43:runtimeType*/
+        return RuntimeType::sample(); /*46:runtimeType*/
     }
 
     /**
@@ -42663,7 +42648,7 @@ class Obj5 {
      * @return S
      */
     public static function sampleS(): S {
-        return S::sample(); /*44:s*/
+        return S::sample(); /*47:s*/
     }
 
     /**
@@ -42711,7 +42696,7 @@ class Obj5 {
      * @return Sbyte
      */
     public static function sampleSbyte(): Sbyte {
-        return Sbyte::sample(); /*45:sbyte*/
+        return Sbyte::sample(); /*48:sbyte*/
     }
 
     /**
@@ -42759,7 +42744,7 @@ class Obj5 {
      * @return Sealed
      */
     public static function sampleSealed(): Sealed {
-        return Sealed::sample(); /*46:sealed*/
+        return Sealed::sample(); /*49:sealed*/
     }
 
     /**
@@ -42807,7 +42792,7 @@ class Obj5 {
      * @return Sel
      */
     public static function sampleSel(): Sel {
-        return Sel::sample(); /*47:sel*/
+        return Sel::sample(); /*50:sel*/
     }
 
     /**
@@ -42855,7 +42840,7 @@ class Obj5 {
      * @return Select
      */
     public static function sampleSelect(): Select {
-        return Select::sample(); /*48:select*/
+        return Select::sample(); /*51:select*/
     }
 
     /**
@@ -42903,7 +42888,7 @@ class Obj5 {
      * @return SelfClass
      */
     public static function sampleSelf(): SelfClass {
-        return SelfClass::sample(); /*49:self*/
+        return SelfClass::sample(); /*52:self*/
     }
 
     /**
@@ -42951,7 +42936,7 @@ class Obj5 {
      * @return Sendable
      */
     public static function sampleSendable(): Sendable {
-        return Sendable::sample(); /*50:sendable*/
+        return Sendable::sample(); /*53:sendable*/
     }
 
     /**
@@ -42999,7 +42984,7 @@ class Obj5 {
      * @return SerialDescriptor
      */
     public static function sampleSerialDescriptor(): SerialDescriptor {
-        return SerialDescriptor::sample(); /*51:serialDescriptor*/
+        return SerialDescriptor::sample(); /*54:serialDescriptor*/
     }
 
     /**
@@ -43047,7 +43032,7 @@ class Obj5 {
      * @return SerialName
      */
     public static function sampleSerialName(): SerialName {
-        return SerialName::sample(); /*52:serialName*/
+        return SerialName::sample(); /*55:serialName*/
     }
 
     /**
@@ -43095,7 +43080,7 @@ class Obj5 {
      * @return SerializableClass
      */
     public static function sampleSerializable(): SerializableClass {
-        return SerializableClass::sample(); /*53:serializable*/
+        return SerializableClass::sample(); /*56:serializable*/
     }
 
     /**
@@ -43143,7 +43128,7 @@ class Obj5 {
      * @return SerializationFeature
      */
     public static function sampleSerializationFeature(): SerializationFeature {
-        return SerializationFeature::sample(); /*54:serializationFeature*/
+        return SerializationFeature::sample(); /*57:serializationFeature*/
     }
 
     /**
@@ -43191,7 +43176,7 @@ class Obj5 {
      * @return Serialize
      */
     public static function sampleSerialize(): Serialize {
-        return Serialize::sample(); /*55:serialize*/
+        return Serialize::sample(); /*58:serialize*/
     }
 
     /**
@@ -43239,7 +43224,7 @@ class Obj5 {
      * @return SerializerProvider
      */
     public static function sampleSerializerProvider(): SerializerProvider {
-        return SerializerProvider::sample(); /*56:serializerProvider*/
+        return SerializerProvider::sample(); /*59:serializerProvider*/
     }
 
     /**
@@ -43287,7 +43272,7 @@ class Obj5 {
      * @return Set
      */
     public static function sampleSet(): Set {
-        return Set::sample(); /*57:set*/
+        return Set::sample(); /*60:set*/
     }
 
     /**
@@ -43335,7 +43320,7 @@ class Obj5 {
      * @return Short
      */
     public static function sampleShort(): Short {
-        return Short::sample(); /*58:short*/
+        return Short::sample(); /*61:short*/
     }
 
     /**
@@ -43383,7 +43368,7 @@ class Obj5 {
      * @return Signed
      */
     public static function sampleSigned(): Signed {
-        return Signed::sample(); /*59:signed*/
+        return Signed::sample(); /*62:signed*/
     }
 
     /**
@@ -43431,7 +43416,7 @@ class Obj5 {
      * @return SimpleModule
      */
     public static function sampleSimpleModule(): SimpleModule {
-        return SimpleModule::sample(); /*60:simpleModule*/
+        return SimpleModule::sample(); /*63:simpleModule*/
     }
 
     /**
@@ -43479,7 +43464,7 @@ class Obj5 {
      * @return Sizeof
      */
     public static function sampleSizeof(): Sizeof {
-        return Sizeof::sample(); /*61:sizeof*/
+        return Sizeof::sample(); /*64:sizeof*/
     }
 
     /**
@@ -43527,7 +43512,7 @@ class Obj5 {
      * @return Stackalloc
      */
     public static function sampleStackalloc(): Stackalloc {
-        return Stackalloc::sample(); /*62:stackalloc*/
+        return Stackalloc::sample(); /*65:stackalloc*/
     }
 
     /**
@@ -43575,7 +43560,7 @@ class Obj5 {
      * @return Standards
      */
     public static function sampleStandards(): Standards {
-        return Standards::sample(); /*63:standards*/
+        return Standards::sample(); /*66:standards*/
     }
 
     /**
@@ -43623,7 +43608,7 @@ class Obj5 {
      * @return StaticClass
      */
     public static function sampleStatic(): StaticClass {
-        return StaticClass::sample(); /*64:static*/
+        return StaticClass::sample(); /*67:static*/
     }
 
     /**
@@ -43671,7 +43656,7 @@ class Obj5 {
      * @return StaticAssert
      */
     public static function sampleStaticAssert(): StaticAssert {
-        return StaticAssert::sample(); /*65:staticAssert*/
+        return StaticAssert::sample(); /*68:staticAssert*/
     }
 
     /**
@@ -43719,7 +43704,7 @@ class Obj5 {
      * @return StaticCast
      */
     public static function sampleStaticCast(): StaticCast {
-        return StaticCast::sample(); /*66:staticCast*/
+        return StaticCast::sample(); /*69:staticCast*/
     }
 
     /**
@@ -43767,7 +43752,7 @@ class Obj5 {
      * @return StdDeserializer
      */
     public static function sampleStdDeserializer(): StdDeserializer {
-        return StdDeserializer::sample(); /*67:stdDeserializer*/
+        return StdDeserializer::sample(); /*70:stdDeserializer*/
     }
 
     /**
@@ -43815,7 +43800,7 @@ class Obj5 {
      * @return StdSerializer
      */
     public static function sampleStdSerializer(): StdSerializer {
-        return StdSerializer::sample(); /*68:stdSerializer*/
+        return StdSerializer::sample(); /*71:stdSerializer*/
     }
 
     /**
@@ -43863,7 +43848,7 @@ class Obj5 {
      * @return Strictfp
      */
     public static function sampleStrictfp(): Strictfp {
-        return Strictfp::sample(); /*69:strictfp*/
+        return Strictfp::sample(); /*72:strictfp*/
     }
 
     /**
@@ -43911,7 +43896,7 @@ class Obj5 {
      * @return StringClass
      */
     public static function sampleString(): StringClass {
-        return StringClass::sample(); /*70:string*/
+        return StringClass::sample(); /*73:string*/
     }
 
     /**
@@ -43959,7 +43944,7 @@ class Obj5 {
      * @return Struct
      */
     public static function sampleStruct(): Struct {
-        return Struct::sample(); /*71:struct*/
+        return Struct::sample(); /*74:struct*/
     }
 
     /**
@@ -44007,7 +43992,7 @@ class Obj5 {
      * @return Subscript
      */
     public static function sampleSubscript(): Subscript {
-        return Subscript::sample(); /*72:subscript*/
+        return Subscript::sample(); /*75:subscript*/
     }
 
     /**
@@ -44055,7 +44040,7 @@ class Obj5 {
      * @return Super
      */
     public static function sampleSuper(): Super {
-        return Super::sample(); /*73:super*/
+        return Super::sample(); /*76:super*/
     }
 
     /**
@@ -44103,7 +44088,7 @@ class Obj5 {
      * @return SwitchClass
      */
     public static function sampleSwitch(): SwitchClass {
-        return SwitchClass::sample(); /*74:switch*/
+        return SwitchClass::sample(); /*77:switch*/
     }
 
     /**
@@ -44151,7 +44136,7 @@ class Obj5 {
      * @return Symbol
      */
     public static function sampleSymbol(): Symbol {
-        return Symbol::sample(); /*75:symbol*/
+        return Symbol::sample(); /*78:symbol*/
     }
 
     /**
@@ -44199,7 +44184,7 @@ class Obj5 {
      * @return Synchronized
      */
     public static function sampleSynchronized(): Synchronized {
-        return Synchronized::sample(); /*76:synchronized*/
+        return Synchronized::sample(); /*79:synchronized*/
     }
 
     /**
@@ -44247,7 +44232,7 @@ class Obj5 {
      * @return System
      */
     public static function sampleSystem(): System {
-        return System::sample(); /*77:system*/
+        return System::sample(); /*80:system*/
     }
 
     /**
@@ -44295,7 +44280,7 @@ class Obj5 {
      * @return Template
      */
     public static function sampleTemplate(): Template {
-        return Template::sample(); /*78:template*/
+        return Template::sample(); /*81:template*/
     }
 
     /**
@@ -44343,7 +44328,7 @@ class Obj5 {
      * @return TextNode
      */
     public static function sampleTextNode(): TextNode {
-        return TextNode::sample(); /*79:textNode*/
+        return TextNode::sample(); /*82:textNode*/
     }
 
     /**
@@ -44391,7 +44376,7 @@ class Obj5 {
      * @return Then
      */
     public static function sampleThen(): Then {
-        return Then::sample(); /*80:then*/
+        return Then::sample(); /*83:then*/
     }
 
     /**
@@ -44439,7 +44424,7 @@ class Obj5 {
      * @return ThreadLocal
      */
     public static function sampleThreadLocal(): ThreadLocal {
-        return ThreadLocal::sample(); /*81:threadLocal*/
+        return ThreadLocal::sample(); /*84:threadLocal*/
     }
 
     /**
@@ -44487,7 +44472,7 @@ class Obj5 {
      * @return ThrowClass
      */
     public static function sampleThrow(): ThrowClass {
-        return ThrowClass::sample(); /*82:throw*/
+        return ThrowClass::sample(); /*85:throw*/
     }
 
     /**
@@ -44535,7 +44520,7 @@ class Obj5 {
      * @return Throws
      */
     public static function sampleThrows(): Throws {
-        return Throws::sample(); /*83:throws*/
+        return Throws::sample(); /*86:throws*/
     }
 
     /**
@@ -44583,7 +44568,7 @@ class Obj5 {
      * @return TimeOnly
      */
     public static function sampleTimeOnly(): TimeOnly {
-        return TimeOnly::sample(); /*84:timeOnly*/
+        return TimeOnly::sample(); /*87:timeOnly*/
     }
 
     /**
@@ -44631,7 +44616,7 @@ class Obj5 {
      * @return TimeOnlyConverter
      */
     public static function sampleTimeOnlyConverter(): TimeOnlyConverter {
-        return TimeOnlyConverter::sample(); /*85:timeOnlyConverter*/
+        return TimeOnlyConverter::sample(); /*88:timeOnlyConverter*/
     }
 
     /**
@@ -44679,7 +44664,7 @@ class Obj5 {
      * @return TimeZone
      */
     public static function sampleTimeZone(): TimeZone {
-        return TimeZone::sample(); /*86:timeZone*/
+        return TimeZone::sample(); /*89:timeZone*/
     }
 
     /**
@@ -44727,7 +44712,7 @@ class Obj5 {
      * @return ToDict
      */
     public static function sampleToDict(): ToDict {
-        return ToDict::sample(); /*87:toDict*/
+        return ToDict::sample(); /*90:toDict*/
     }
 
     /**
@@ -44775,7 +44760,7 @@ class Obj5 {
      * @return ToJSON
      */
     public static function sampleToJSON(): ToJSON {
-        return ToJSON::sample(); /*88:toJSON*/
+        return ToJSON::sample(); /*91:toJSON*/
     }
 
     /**
@@ -44823,7 +44808,7 @@ class Obj5 {
      * @return ToString
      */
     public static function sampleToString(): ToString {
-        return ToString::sample(); /*89:toString*/
+        return ToString::sample(); /*92:toString*/
     }
 
     /**
@@ -44871,7 +44856,7 @@ class Obj5 {
      * @return TopLevelClass
      */
     public static function sampleTopLevel(): TopLevelClass {
-        return TopLevelClass::sample(); /*90:topLevel*/
+        return TopLevelClass::sample(); /*93:topLevel*/
     }
 
     /**
@@ -44919,7 +44904,7 @@ class Obj5 {
      * @return Transient
      */
     public static function sampleTransient(): Transient {
-        return Transient::sample(); /*91:transient*/
+        return Transient::sample(); /*94:transient*/
     }
 
     /**
@@ -44967,151 +44952,7 @@ class Obj5 {
      * @return TrueClass
      */
     public static function sampleTrue(): TrueClass {
-        return TrueClass::sample(); /*92:true*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return TryClass
-     */
-    public static function fromTry(stdClass $value): TryClass {
-        return TryClass::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toTry(): stdClass {
-        if (Obj5::validateTry($this->try))  {
-            return $this->try->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj5::try');
-    }
-
-    /**
-     * @param TryClass
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateTry(TryClass $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return TryClass
-     */
-    public function getTry(): TryClass {
-        if (Obj5::validateTry($this->try))  {
-            return $this->try;
-        }
-        throw new Exception('never get to getTry Obj5::try');
-    }
-
-    /**
-     * @return TryClass
-     */
-    public static function sampleTry(): TryClass {
-        return TryClass::sample(); /*93:try*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Type
-     */
-    public static function fromType(stdClass $value): Type {
-        return Type::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toType(): stdClass {
-        if (Obj5::validateType($this->type))  {
-            return $this->type->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj5::type');
-    }
-
-    /**
-     * @param Type
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateType(Type $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Type
-     */
-    public function getType(): Type {
-        if (Obj5::validateType($this->type))  {
-            return $this->type;
-        }
-        throw new Exception('never get to getType Obj5::type');
-    }
-
-    /**
-     * @return Type
-     */
-    public static function sampleType(): Type {
-        return Type::sample(); /*94:type*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Typealias
-     */
-    public static function fromTypealias(stdClass $value): Typealias {
-        return Typealias::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toTypealias(): stdClass {
-        if (Obj5::validateTypealias($this->typealias))  {
-            return $this->typealias->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj5::typealias');
-    }
-
-    /**
-     * @param Typealias
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateTypealias(Typealias $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Typealias
-     */
-    public function getTypealias(): Typealias {
-        if (Obj5::validateTypealias($this->typealias))  {
-            return $this->typealias;
-        }
-        throw new Exception('never get to getTypealias Obj5::typealias');
-    }
-
-    /**
-     * @return Typealias
-     */
-    public static function sampleTypealias(): Typealias {
-        return Typealias::sample(); /*95:typealias*/
+        return TrueClass::sample(); /*95:true*/
     }
 
     /**
@@ -45124,8 +44965,11 @@ class Obj5 {
         || Obj5::validateObj5Self($this->obj5Self)
         || Obj5::validateObj5This($this->obj5This)
         || Obj5::validateObj5True($this->obj5True)
-        || Obj5::validateObj5Type($this->obj5Type)
         || Obj5::validatePrimitiveKind($this->primitiveKind)
+        || Obj5::validateRepeat($this->repeat)
+        || Obj5::validateRequire($this->require)
+        || Obj5::validateRequired($this->required)
+        || Obj5::validateRequires($this->requires)
         || Obj5::validateRestrict($this->restrict)
         || Obj5::validateRetain($this->retain)
         || Obj5::validateRethrows($this->rethrows)
@@ -45180,10 +45024,7 @@ class Obj5 {
         || Obj5::validateToString($this->toString)
         || Obj5::validateTopLevel($this->topLevel)
         || Obj5::validateTransient($this->transient)
-        || Obj5::validateTrue($this->true)
-        || Obj5::validateTry($this->try)
-        || Obj5::validateType($this->type)
-        || Obj5::validateTypealias($this->typealias);
+        || Obj5::validateTrue($this->true);
     }
 
     /**
@@ -45197,8 +45038,11 @@ class Obj5 {
         $out->{'self'} = $this->toObj5Self();
         $out->{'this'} = $this->toObj5This();
         $out->{'true'} = $this->toObj5True();
-        $out->{'type'} = $this->toObj5Type();
         $out->{'PrimitiveKind'} = $this->toPrimitiveKind();
+        $out->{'repeat'} = $this->toRepeat();
+        $out->{'require'} = $this->toRequire();
+        $out->{'required'} = $this->toRequired();
+        $out->{'requires'} = $this->toRequires();
         $out->{'restrict'} = $this->toRestrict();
         $out->{'retain'} = $this->toRetain();
         $out->{'rethrows'} = $this->toRethrows();
@@ -45254,9 +45098,6 @@ class Obj5 {
         $out->{'top_level'} = $this->toTopLevel();
         $out->{'transient'} = $this->toTransient();
         $out->{'True'} = $this->toTrue();
-        $out->{'try'} = $this->toTry();
-        $out->{'Type'} = $this->toType();
-        $out->{'typealias'} = $this->toTypealias();
         return $out;
     }
 
@@ -45281,10 +45122,19 @@ class Obj5 {
         if (!property_exists($obj, 'true')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'type')) {
+        if (!property_exists($obj, 'PrimitiveKind')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'PrimitiveKind')) {
+        if (!property_exists($obj, 'repeat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'require')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'requires')) {
             throw new Exception("Missing required property");
         }
         if (!property_exists($obj, 'restrict')) {
@@ -45452,23 +45302,17 @@ class Obj5 {
         if (!property_exists($obj, 'True')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'try')) {
-            throw new Exception("Missing required property");
-        }
-        if (!property_exists($obj, 'Type')) {
-            throw new Exception("Missing required property");
-        }
-        if (!property_exists($obj, 'typealias')) {
-            throw new Exception("Missing required property");
-        }
         return new Obj5(
          Obj5::fromDummy($obj->{'dummy'})
         ,Obj5::fromKSerializer($obj->{'KSerializer'})
         ,Obj5::fromObj5Self($obj->{'self'})
         ,Obj5::fromObj5This($obj->{'this'})
         ,Obj5::fromObj5True($obj->{'true'})
-        ,Obj5::fromObj5Type($obj->{'type'})
         ,Obj5::fromPrimitiveKind($obj->{'PrimitiveKind'})
+        ,Obj5::fromRepeat($obj->{'repeat'})
+        ,Obj5::fromRequire($obj->{'require'})
+        ,Obj5::fromRequired($obj->{'required'})
+        ,Obj5::fromRequires($obj->{'requires'})
         ,Obj5::fromRestrict($obj->{'restrict'})
         ,Obj5::fromRetain($obj->{'retain'})
         ,Obj5::fromRethrows($obj->{'rethrows'})
@@ -45524,9 +45368,6 @@ class Obj5 {
         ,Obj5::fromTopLevel($obj->{'top_level'})
         ,Obj5::fromTransient($obj->{'transient'})
         ,Obj5::fromTrue($obj->{'True'})
-        ,Obj5::fromTry($obj->{'try'})
-        ,Obj5::fromType($obj->{'Type'})
-        ,Obj5::fromTypealias($obj->{'typealias'})
         );
     }
 
@@ -45540,8 +45381,11 @@ class Obj5 {
         ,Obj5::sampleObj5Self()
         ,Obj5::sampleObj5This()
         ,Obj5::sampleObj5True()
-        ,Obj5::sampleObj5Type()
         ,Obj5::samplePrimitiveKind()
+        ,Obj5::sampleRepeat()
+        ,Obj5::sampleRequire()
+        ,Obj5::sampleRequired()
+        ,Obj5::sampleRequires()
         ,Obj5::sampleRestrict()
         ,Obj5::sampleRetain()
         ,Obj5::sampleRethrows()
@@ -45597,9 +45441,6 @@ class Obj5 {
         ,Obj5::sampleTopLevel()
         ,Obj5::sampleTransient()
         ,Obj5::sampleTrue()
-        ,Obj5::sampleTry()
-        ,Obj5::sampleType()
-        ,Obj5::sampleTypealias()
         );
     }
 }
@@ -46008,16 +45849,16 @@ class Obj5True {
     }
 }
 
-// This is an autogenerated file:TypeClass
+// This is an autogenerated file:PrimitiveKind
 
-class TypeClass {
-    private int $type; // json:type Required
+class PrimitiveKind {
+    private int $primitiveKind; // json:PrimitiveKind Required
 
     /**
-     * @param int $type
+     * @param int $primitiveKind
      */
-    public function __construct(int $type) {
-        $this->type = $type;
+    public function __construct(int $primitiveKind) {
+        $this->primitiveKind = $primitiveKind;
     }
 
     /**
@@ -46025,7 +45866,7 @@ class TypeClass {
      * @throws Exception
      * @return int
      */
-    public static function fromType(int $value): int {
+    public static function fromPrimitiveKind(int $value): int {
         return $value; /*int*/
     }
 
@@ -46033,11 +45874,11 @@ class TypeClass {
      * @throws Exception
      * @return int
      */
-    public function toType(): int {
-        if (TypeClass::validateType($this->type))  {
-            return $this->type; /*int*/
+    public function toPrimitiveKind(): int {
+        if (PrimitiveKind::validatePrimitiveKind($this->primitiveKind))  {
+            return $this->primitiveKind; /*int*/
         }
-        throw new Exception('never get to this TypeClass::type');
+        throw new Exception('never get to this PrimitiveKind::primitiveKind');
     }
 
     /**
@@ -46045,7 +45886,7 @@ class TypeClass {
      * @return bool
      * @throws Exception
      */
-    public static function validateType(int $value): bool {
+    public static function validatePrimitiveKind(int $value): bool {
         return true;
     }
 
@@ -46053,18 +45894,18 @@ class TypeClass {
      * @throws Exception
      * @return int
      */
-    public function getType(): int {
-        if (TypeClass::validateType($this->type))  {
-            return $this->type;
+    public function getPrimitiveKind(): int {
+        if (PrimitiveKind::validatePrimitiveKind($this->primitiveKind))  {
+            return $this->primitiveKind;
         }
-        throw new Exception('never get to getType TypeClass::type');
+        throw new Exception('never get to getPrimitiveKind PrimitiveKind::primitiveKind');
     }
 
     /**
      * @return int
      */
-    public static function sampleType(): int {
-        return 31; /*31:type*/
+    public static function samplePrimitiveKind(): int {
+        return 31; /*31:primitiveKind*/
     }
 
     /**
@@ -46072,7 +45913,7 @@ class TypeClass {
      * @return bool
      */
     public function validate(): bool {
-        return TypeClass::validateType($this->type);
+        return PrimitiveKind::validatePrimitiveKind($this->primitiveKind);
     }
 
     /**
@@ -46081,44 +45922,44 @@ class TypeClass {
      */
     public function to(): stdClass  {
         $out = new stdClass();
-        $out->{'type'} = $this->toType();
+        $out->{'PrimitiveKind'} = $this->toPrimitiveKind();
         return $out;
     }
 
     /**
      * @param stdClass $obj
-     * @return TypeClass
+     * @return PrimitiveKind
      * @throws Exception
      */
-    public static function from(stdClass $obj): TypeClass {
-        if (!property_exists($obj, 'type')) {
+    public static function from(stdClass $obj): PrimitiveKind {
+        if (!property_exists($obj, 'PrimitiveKind')) {
             throw new Exception("Missing required property");
         }
-        return new TypeClass(
-         TypeClass::fromType($obj->{'type'})
+        return new PrimitiveKind(
+         PrimitiveKind::fromPrimitiveKind($obj->{'PrimitiveKind'})
         );
     }
 
     /**
-     * @return TypeClass
+     * @return PrimitiveKind
      */
-    public static function sample(): TypeClass {
-        return new TypeClass(
-         TypeClass::sampleType()
+    public static function sample(): PrimitiveKind {
+        return new PrimitiveKind(
+         PrimitiveKind::samplePrimitiveKind()
         );
     }
 }
 
-// This is an autogenerated file:PrimitiveKind
+// This is an autogenerated file:Repeat
 
-class PrimitiveKind {
-    private int $primitiveKind; // json:PrimitiveKind Required
+class Repeat {
+    private int $repeat; // json:repeat Required
 
     /**
-     * @param int $primitiveKind
+     * @param int $repeat
      */
-    public function __construct(int $primitiveKind) {
-        $this->primitiveKind = $primitiveKind;
+    public function __construct(int $repeat) {
+        $this->repeat = $repeat;
     }
 
     /**
@@ -46126,7 +45967,7 @@ class PrimitiveKind {
      * @throws Exception
      * @return int
      */
-    public static function fromPrimitiveKind(int $value): int {
+    public static function fromRepeat(int $value): int {
         return $value; /*int*/
     }
 
@@ -46134,11 +45975,11 @@ class PrimitiveKind {
      * @throws Exception
      * @return int
      */
-    public function toPrimitiveKind(): int {
-        if (PrimitiveKind::validatePrimitiveKind($this->primitiveKind))  {
-            return $this->primitiveKind; /*int*/
+    public function toRepeat(): int {
+        if (Repeat::validateRepeat($this->repeat))  {
+            return $this->repeat; /*int*/
         }
-        throw new Exception('never get to this PrimitiveKind::primitiveKind');
+        throw new Exception('never get to this Repeat::repeat');
     }
 
     /**
@@ -46146,7 +45987,7 @@ class PrimitiveKind {
      * @return bool
      * @throws Exception
      */
-    public static function validatePrimitiveKind(int $value): bool {
+    public static function validateRepeat(int $value): bool {
         return true;
     }
 
@@ -46154,18 +45995,18 @@ class PrimitiveKind {
      * @throws Exception
      * @return int
      */
-    public function getPrimitiveKind(): int {
-        if (PrimitiveKind::validatePrimitiveKind($this->primitiveKind))  {
-            return $this->primitiveKind;
+    public function getRepeat(): int {
+        if (Repeat::validateRepeat($this->repeat))  {
+            return $this->repeat;
         }
-        throw new Exception('never get to getPrimitiveKind PrimitiveKind::primitiveKind');
+        throw new Exception('never get to getRepeat Repeat::repeat');
     }
 
     /**
      * @return int
      */
-    public static function samplePrimitiveKind(): int {
-        return 31; /*31:primitiveKind*/
+    public static function sampleRepeat(): int {
+        return 31; /*31:repeat*/
     }
 
     /**
@@ -46173,7 +46014,7 @@ class PrimitiveKind {
      * @return bool
      */
     public function validate(): bool {
-        return PrimitiveKind::validatePrimitiveKind($this->primitiveKind);
+        return Repeat::validateRepeat($this->repeat);
     }
 
     /**
@@ -46182,30 +46023,333 @@ class PrimitiveKind {
      */
     public function to(): stdClass  {
         $out = new stdClass();
-        $out->{'PrimitiveKind'} = $this->toPrimitiveKind();
+        $out->{'repeat'} = $this->toRepeat();
         return $out;
     }
 
     /**
      * @param stdClass $obj
-     * @return PrimitiveKind
+     * @return Repeat
      * @throws Exception
      */
-    public static function from(stdClass $obj): PrimitiveKind {
-        if (!property_exists($obj, 'PrimitiveKind')) {
+    public static function from(stdClass $obj): Repeat {
+        if (!property_exists($obj, 'repeat')) {
             throw new Exception("Missing required property");
         }
-        return new PrimitiveKind(
-         PrimitiveKind::fromPrimitiveKind($obj->{'PrimitiveKind'})
+        return new Repeat(
+         Repeat::fromRepeat($obj->{'repeat'})
         );
     }
 
     /**
-     * @return PrimitiveKind
+     * @return Repeat
      */
-    public static function sample(): PrimitiveKind {
-        return new PrimitiveKind(
-         PrimitiveKind::samplePrimitiveKind()
+    public static function sample(): Repeat {
+        return new Repeat(
+         Repeat::sampleRepeat()
+        );
+    }
+}
+
+// This is an autogenerated file:RequireClass
+
+class RequireClass {
+    private int $require; // json:require Required
+
+    /**
+     * @param int $require
+     */
+    public function __construct(int $require) {
+        $this->require = $require;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromRequire(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toRequire(): int {
+        if (RequireClass::validateRequire($this->require))  {
+            return $this->require; /*int*/
+        }
+        throw new Exception('never get to this RequireClass::require');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateRequire(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getRequire(): int {
+        if (RequireClass::validateRequire($this->require))  {
+            return $this->require;
+        }
+        throw new Exception('never get to getRequire RequireClass::require');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleRequire(): int {
+        return 31; /*31:require*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return RequireClass::validateRequire($this->require);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'require'} = $this->toRequire();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return RequireClass
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): RequireClass {
+        if (!property_exists($obj, 'require')) {
+            throw new Exception("Missing required property");
+        }
+        return new RequireClass(
+         RequireClass::fromRequire($obj->{'require'})
+        );
+    }
+
+    /**
+     * @return RequireClass
+     */
+    public static function sample(): RequireClass {
+        return new RequireClass(
+         RequireClass::sampleRequire()
+        );
+    }
+}
+
+// This is an autogenerated file:Required
+
+class Required {
+    private int $required; // json:required Required
+
+    /**
+     * @param int $required
+     */
+    public function __construct(int $required) {
+        $this->required = $required;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromRequired(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toRequired(): int {
+        if (Required::validateRequired($this->required))  {
+            return $this->required; /*int*/
+        }
+        throw new Exception('never get to this Required::required');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateRequired(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getRequired(): int {
+        if (Required::validateRequired($this->required))  {
+            return $this->required;
+        }
+        throw new Exception('never get to getRequired Required::required');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleRequired(): int {
+        return 31; /*31:required*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Required::validateRequired($this->required);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'required'} = $this->toRequired();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Required
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Required {
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
+        return new Required(
+         Required::fromRequired($obj->{'required'})
+        );
+    }
+
+    /**
+     * @return Required
+     */
+    public static function sample(): Required {
+        return new Required(
+         Required::sampleRequired()
+        );
+    }
+}
+
+// This is an autogenerated file:Requires
+
+class Requires {
+    private int $requires; // json:requires Required
+
+    /**
+     * @param int $requires
+     */
+    public function __construct(int $requires) {
+        $this->requires = $requires;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromRequires(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toRequires(): int {
+        if (Requires::validateRequires($this->requires))  {
+            return $this->requires; /*int*/
+        }
+        throw new Exception('never get to this Requires::requires');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateRequires(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getRequires(): int {
+        if (Requires::validateRequires($this->requires))  {
+            return $this->requires;
+        }
+        throw new Exception('never get to getRequires Requires::requires');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleRequires(): int {
+        return 31; /*31:requires*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Requires::validateRequires($this->requires);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'requires'} = $this->toRequires();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Requires
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Requires {
+        if (!property_exists($obj, 'requires')) {
+            throw new Exception("Missing required property");
+        }
+        return new Requires(
+         Requires::fromRequires($obj->{'requires'})
+        );
+    }
+
+    /**
+     * @return Requires
+     */
+    public static function sample(): Requires {
+        return new Requires(
+         Requires::sampleRequires()
         );
     }
 }
@@ -51765,313 +51909,14 @@ class TrueClass {
     }
 }
 
-// This is an autogenerated file:TryClass
-
-class TryClass {
-    private int $try; // json:try Required
-
-    /**
-     * @param int $try
-     */
-    public function __construct(int $try) {
-        $this->try = $try;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromTry(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toTry(): int {
-        if (TryClass::validateTry($this->try))  {
-            return $this->try; /*int*/
-        }
-        throw new Exception('never get to this TryClass::try');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateTry(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getTry(): int {
-        if (TryClass::validateTry($this->try))  {
-            return $this->try;
-        }
-        throw new Exception('never get to getTry TryClass::try');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleTry(): int {
-        return 31; /*31:try*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return TryClass::validateTry($this->try);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'try'} = $this->toTry();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return TryClass
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): TryClass {
-        if (!property_exists($obj, 'try')) {
-            throw new Exception("Missing required property");
-        }
-        return new TryClass(
-         TryClass::fromTry($obj->{'try'})
-        );
-    }
-
-    /**
-     * @return TryClass
-     */
-    public static function sample(): TryClass {
-        return new TryClass(
-         TryClass::sampleTry()
-        );
-    }
-}
-
-// This is an autogenerated file:Type
-
-class Type {
-    private int $type; // json:Type Required
-
-    /**
-     * @param int $type
-     */
-    public function __construct(int $type) {
-        $this->type = $type;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromType(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toType(): int {
-        if (Type::validateType($this->type))  {
-            return $this->type; /*int*/
-        }
-        throw new Exception('never get to this Type::type');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateType(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getType(): int {
-        if (Type::validateType($this->type))  {
-            return $this->type;
-        }
-        throw new Exception('never get to getType Type::type');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleType(): int {
-        return 31; /*31:type*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Type::validateType($this->type);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'Type'} = $this->toType();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Type
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Type {
-        if (!property_exists($obj, 'Type')) {
-            throw new Exception("Missing required property");
-        }
-        return new Type(
-         Type::fromType($obj->{'Type'})
-        );
-    }
-
-    /**
-     * @return Type
-     */
-    public static function sample(): Type {
-        return new Type(
-         Type::sampleType()
-        );
-    }
-}
-
-// This is an autogenerated file:Typealias
-
-class Typealias {
-    private int $typealias; // json:typealias Required
-
-    /**
-     * @param int $typealias
-     */
-    public function __construct(int $typealias) {
-        $this->typealias = $typealias;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromTypealias(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toTypealias(): int {
-        if (Typealias::validateTypealias($this->typealias))  {
-            return $this->typealias; /*int*/
-        }
-        throw new Exception('never get to this Typealias::typealias');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateTypealias(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getTypealias(): int {
-        if (Typealias::validateTypealias($this->typealias))  {
-            return $this->typealias;
-        }
-        throw new Exception('never get to getTypealias Typealias::typealias');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleTypealias(): int {
-        return 31; /*31:typealias*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Typealias::validateTypealias($this->typealias);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'typealias'} = $this->toTypealias();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Typealias
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Typealias {
-        if (!property_exists($obj, 'typealias')) {
-            throw new Exception("Missing required property");
-        }
-        return new Typealias(
-         Typealias::fromTypealias($obj->{'typealias'})
-        );
-    }
-
-    /**
-     * @return Typealias
-     */
-    public static function sample(): Typealias {
-        return new Typealias(
-         Typealias::sampleTypealias()
-        );
-    }
-}
-
 // This is an autogenerated file:Obj6
 
 class Obj6 {
     private int $dummy; // json:dummy Required
+    private TypeClass $obj6Type; // json:type Required
+    private TryClass $try; // json:try Required
+    private Type $type; // json:Type Required
+    private Typealias $typealias; // json:typealias Required
     private Typedef $typedef; // json:typedef Required
     private Typeid $typeid; // json:typeid Required
     private Typename $typename; // json:typename Required
@@ -52108,6 +51953,10 @@ class Obj6 {
 
     /**
      * @param int $dummy
+     * @param TypeClass $obj6Type
+     * @param TryClass $try
+     * @param Type $type
+     * @param Typealias $typealias
      * @param Typedef $typedef
      * @param Typeid $typeid
      * @param Typename $typename
@@ -52142,8 +51991,12 @@ class Obj6 {
      * @param Yes $yes
      * @param YieldClass $yield
      */
-    public function __construct(int $dummy, Typedef $typedef, Typeid $typeid, Typename $typename, Typeof $typeof, Uint $uint, Ulong $ulong, Unchecked $unchecked, Undefined $undefined, Union $union, UnmarshalJSON $unmarshalJSON, Unowned $unowned, Unsafe $unsafe, Unsigned $unsigned, UseSerializers $useSerializers, Ushort $ushort, Using $using, Utf8JSONReader $utf8JSONReader, Utf8JSONWriter $utf8JSONWriter, UUID $uuid, VarClass $var, Virtual $virtual, VoidClass $void, Volatile $volatile, WcharT $wcharT, Weak $weak, Where $where, WhileClass $while, WillSet $willSet, With $with, XorClass $xor, XorEq $xorEq, Yes $yes, YieldClass $yield) {
+    public function __construct(int $dummy, TypeClass $obj6Type, TryClass $try, Type $type, Typealias $typealias, Typedef $typedef, Typeid $typeid, Typename $typename, Typeof $typeof, Uint $uint, Ulong $ulong, Unchecked $unchecked, Undefined $undefined, Union $union, UnmarshalJSON $unmarshalJSON, Unowned $unowned, Unsafe $unsafe, Unsigned $unsigned, UseSerializers $useSerializers, Ushort $ushort, Using $using, Utf8JSONReader $utf8JSONReader, Utf8JSONWriter $utf8JSONWriter, UUID $uuid, VarClass $var, Virtual $virtual, VoidClass $void, Volatile $volatile, WcharT $wcharT, Weak $weak, Where $where, WhileClass $while, WillSet $willSet, With $with, XorClass $xor, XorEq $xorEq, Yes $yes, YieldClass $yield) {
         $this->dummy = $dummy;
+        $this->obj6Type = $obj6Type;
+        $this->try = $try;
+        $this->type = $type;
+        $this->typealias = $typealias;
         $this->typedef = $typedef;
         $this->typeid = $typeid;
         $this->typename = $typename;
@@ -52226,6 +52079,198 @@ class Obj6 {
         return 31; /*31:dummy*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return TypeClass
+     */
+    public static function fromObj6Type(stdClass $value): TypeClass {
+        return TypeClass::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toObj6Type(): stdClass {
+        if (Obj6::validateObj6Type($this->obj6Type))  {
+            return $this->obj6Type->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj6::obj6Type');
+    }
+
+    /**
+     * @param TypeClass
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateObj6Type(TypeClass $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return TypeClass
+     */
+    public function getObj6Type(): TypeClass {
+        if (Obj6::validateObj6Type($this->obj6Type))  {
+            return $this->obj6Type;
+        }
+        throw new Exception('never get to getObj6Type Obj6::obj6Type');
+    }
+
+    /**
+     * @return TypeClass
+     */
+    public static function sampleObj6Type(): TypeClass {
+        return TypeClass::sample(); /*32:obj6Type*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return TryClass
+     */
+    public static function fromTry(stdClass $value): TryClass {
+        return TryClass::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toTry(): stdClass {
+        if (Obj6::validateTry($this->try))  {
+            return $this->try->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj6::try');
+    }
+
+    /**
+     * @param TryClass
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateTry(TryClass $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return TryClass
+     */
+    public function getTry(): TryClass {
+        if (Obj6::validateTry($this->try))  {
+            return $this->try;
+        }
+        throw new Exception('never get to getTry Obj6::try');
+    }
+
+    /**
+     * @return TryClass
+     */
+    public static function sampleTry(): TryClass {
+        return TryClass::sample(); /*33:try*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Type
+     */
+    public static function fromType(stdClass $value): Type {
+        return Type::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toType(): stdClass {
+        if (Obj6::validateType($this->type))  {
+            return $this->type->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj6::type');
+    }
+
+    /**
+     * @param Type
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateType(Type $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Type
+     */
+    public function getType(): Type {
+        if (Obj6::validateType($this->type))  {
+            return $this->type;
+        }
+        throw new Exception('never get to getType Obj6::type');
+    }
+
+    /**
+     * @return Type
+     */
+    public static function sampleType(): Type {
+        return Type::sample(); /*34:type*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Typealias
+     */
+    public static function fromTypealias(stdClass $value): Typealias {
+        return Typealias::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toTypealias(): stdClass {
+        if (Obj6::validateTypealias($this->typealias))  {
+            return $this->typealias->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj6::typealias');
+    }
+
+    /**
+     * @param Typealias
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateTypealias(Typealias $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Typealias
+     */
+    public function getTypealias(): Typealias {
+        if (Obj6::validateTypealias($this->typealias))  {
+            return $this->typealias;
+        }
+        throw new Exception('never get to getTypealias Obj6::typealias');
+    }
+
+    /**
+     * @return Typealias
+     */
+    public static function sampleTypealias(): Typealias {
+        return Typealias::sample(); /*35:typealias*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -52271,7 +52316,7 @@ class Obj6 {
      * @return Typedef
      */
     public static function sampleTypedef(): Typedef {
-        return Typedef::sample(); /*32:typedef*/
+        return Typedef::sample(); /*36:typedef*/
     }
 
     /**
@@ -52319,7 +52364,7 @@ class Obj6 {
      * @return Typeid
      */
     public static function sampleTypeid(): Typeid {
-        return Typeid::sample(); /*33:typeid*/
+        return Typeid::sample(); /*37:typeid*/
     }
 
     /**
@@ -52367,7 +52412,7 @@ class Obj6 {
      * @return Typename
      */
     public static function sampleTypename(): Typename {
-        return Typename::sample(); /*34:typename*/
+        return Typename::sample(); /*38:typename*/
     }
 
     /**
@@ -52415,7 +52460,7 @@ class Obj6 {
      * @return Typeof
      */
     public static function sampleTypeof(): Typeof {
-        return Typeof::sample(); /*35:typeof*/
+        return Typeof::sample(); /*39:typeof*/
     }
 
     /**
@@ -52463,7 +52508,7 @@ class Obj6 {
      * @return Uint
      */
     public static function sampleUint(): Uint {
-        return Uint::sample(); /*36:uint*/
+        return Uint::sample(); /*40:uint*/
     }
 
     /**
@@ -52511,7 +52556,7 @@ class Obj6 {
      * @return Ulong
      */
     public static function sampleUlong(): Ulong {
-        return Ulong::sample(); /*37:ulong*/
+        return Ulong::sample(); /*41:ulong*/
     }
 
     /**
@@ -52559,7 +52604,7 @@ class Obj6 {
      * @return Unchecked
      */
     public static function sampleUnchecked(): Unchecked {
-        return Unchecked::sample(); /*38:unchecked*/
+        return Unchecked::sample(); /*42:unchecked*/
     }
 
     /**
@@ -52607,7 +52652,7 @@ class Obj6 {
      * @return Undefined
      */
     public static function sampleUndefined(): Undefined {
-        return Undefined::sample(); /*39:undefined*/
+        return Undefined::sample(); /*43:undefined*/
     }
 
     /**
@@ -52655,7 +52700,7 @@ class Obj6 {
      * @return Union
      */
     public static function sampleUnion(): Union {
-        return Union::sample(); /*40:union*/
+        return Union::sample(); /*44:union*/
     }
 
     /**
@@ -52703,7 +52748,7 @@ class Obj6 {
      * @return UnmarshalJSON
      */
     public static function sampleUnmarshalJSON(): UnmarshalJSON {
-        return UnmarshalJSON::sample(); /*41:unmarshalJSON*/
+        return UnmarshalJSON::sample(); /*45:unmarshalJSON*/
     }
 
     /**
@@ -52751,7 +52796,7 @@ class Obj6 {
      * @return Unowned
      */
     public static function sampleUnowned(): Unowned {
-        return Unowned::sample(); /*42:unowned*/
+        return Unowned::sample(); /*46:unowned*/
     }
 
     /**
@@ -52799,7 +52844,7 @@ class Obj6 {
      * @return Unsafe
      */
     public static function sampleUnsafe(): Unsafe {
-        return Unsafe::sample(); /*43:unsafe*/
+        return Unsafe::sample(); /*47:unsafe*/
     }
 
     /**
@@ -52847,7 +52892,7 @@ class Obj6 {
      * @return Unsigned
      */
     public static function sampleUnsigned(): Unsigned {
-        return Unsigned::sample(); /*44:unsigned*/
+        return Unsigned::sample(); /*48:unsigned*/
     }
 
     /**
@@ -52895,7 +52940,7 @@ class Obj6 {
      * @return UseSerializers
      */
     public static function sampleUseSerializers(): UseSerializers {
-        return UseSerializers::sample(); /*45:useSerializers*/
+        return UseSerializers::sample(); /*49:useSerializers*/
     }
 
     /**
@@ -52943,7 +52988,7 @@ class Obj6 {
      * @return Ushort
      */
     public static function sampleUshort(): Ushort {
-        return Ushort::sample(); /*46:ushort*/
+        return Ushort::sample(); /*50:ushort*/
     }
 
     /**
@@ -52991,7 +53036,7 @@ class Obj6 {
      * @return Using
      */
     public static function sampleUsing(): Using {
-        return Using::sample(); /*47:using*/
+        return Using::sample(); /*51:using*/
     }
 
     /**
@@ -53039,7 +53084,7 @@ class Obj6 {
      * @return Utf8JSONReader
      */
     public static function sampleUtf8JSONReader(): Utf8JSONReader {
-        return Utf8JSONReader::sample(); /*48:utf8JSONReader*/
+        return Utf8JSONReader::sample(); /*52:utf8JSONReader*/
     }
 
     /**
@@ -53087,7 +53132,7 @@ class Obj6 {
      * @return Utf8JSONWriter
      */
     public static function sampleUtf8JSONWriter(): Utf8JSONWriter {
-        return Utf8JSONWriter::sample(); /*49:utf8JSONWriter*/
+        return Utf8JSONWriter::sample(); /*53:utf8JSONWriter*/
     }
 
     /**
@@ -53135,7 +53180,7 @@ class Obj6 {
      * @return UUID
      */
     public static function sampleUUID(): UUID {
-        return UUID::sample(); /*50:uuid*/
+        return UUID::sample(); /*54:uuid*/
     }
 
     /**
@@ -53183,7 +53228,7 @@ class Obj6 {
      * @return VarClass
      */
     public static function sampleVar(): VarClass {
-        return VarClass::sample(); /*51:var*/
+        return VarClass::sample(); /*55:var*/
     }
 
     /**
@@ -53231,7 +53276,7 @@ class Obj6 {
      * @return Virtual
      */
     public static function sampleVirtual(): Virtual {
-        return Virtual::sample(); /*52:virtual*/
+        return Virtual::sample(); /*56:virtual*/
     }
 
     /**
@@ -53279,7 +53324,7 @@ class Obj6 {
      * @return VoidClass
      */
     public static function sampleVoid(): VoidClass {
-        return VoidClass::sample(); /*53:void*/
+        return VoidClass::sample(); /*57:void*/
     }
 
     /**
@@ -53327,7 +53372,7 @@ class Obj6 {
      * @return Volatile
      */
     public static function sampleVolatile(): Volatile {
-        return Volatile::sample(); /*54:volatile*/
+        return Volatile::sample(); /*58:volatile*/
     }
 
     /**
@@ -53375,7 +53420,7 @@ class Obj6 {
      * @return WcharT
      */
     public static function sampleWcharT(): WcharT {
-        return WcharT::sample(); /*55:wcharT*/
+        return WcharT::sample(); /*59:wcharT*/
     }
 
     /**
@@ -53423,7 +53468,7 @@ class Obj6 {
      * @return Weak
      */
     public static function sampleWeak(): Weak {
-        return Weak::sample(); /*56:weak*/
+        return Weak::sample(); /*60:weak*/
     }
 
     /**
@@ -53471,7 +53516,7 @@ class Obj6 {
      * @return Where
      */
     public static function sampleWhere(): Where {
-        return Where::sample(); /*57:where*/
+        return Where::sample(); /*61:where*/
     }
 
     /**
@@ -53519,7 +53564,7 @@ class Obj6 {
      * @return WhileClass
      */
     public static function sampleWhile(): WhileClass {
-        return WhileClass::sample(); /*58:while*/
+        return WhileClass::sample(); /*62:while*/
     }
 
     /**
@@ -53567,7 +53612,7 @@ class Obj6 {
      * @return WillSet
      */
     public static function sampleWillSet(): WillSet {
-        return WillSet::sample(); /*59:willSet*/
+        return WillSet::sample(); /*63:willSet*/
     }
 
     /**
@@ -53615,7 +53660,7 @@ class Obj6 {
      * @return With
      */
     public static function sampleWith(): With {
-        return With::sample(); /*60:with*/
+        return With::sample(); /*64:with*/
     }
 
     /**
@@ -53663,7 +53708,7 @@ class Obj6 {
      * @return XorClass
      */
     public static function sampleXor(): XorClass {
-        return XorClass::sample(); /*61:xor*/
+        return XorClass::sample(); /*65:xor*/
     }
 
     /**
@@ -53711,7 +53756,7 @@ class Obj6 {
      * @return XorEq
      */
     public static function sampleXorEq(): XorEq {
-        return XorEq::sample(); /*62:xorEq*/
+        return XorEq::sample(); /*66:xorEq*/
     }
 
     /**
@@ -53759,7 +53804,7 @@ class Obj6 {
      * @return Yes
      */
     public static function sampleYes(): Yes {
-        return Yes::sample(); /*63:yes*/
+        return Yes::sample(); /*67:yes*/
     }
 
     /**
@@ -53807,7 +53852,7 @@ class Obj6 {
      * @return YieldClass
      */
     public static function sampleYield(): YieldClass {
-        return YieldClass::sample(); /*64:yield*/
+        return YieldClass::sample(); /*68:yield*/
     }
 
     /**
@@ -53816,6 +53861,10 @@ class Obj6 {
      */
     public function validate(): bool {
         return Obj6::validateDummy($this->dummy)
+        || Obj6::validateObj6Type($this->obj6Type)
+        || Obj6::validateTry($this->try)
+        || Obj6::validateType($this->type)
+        || Obj6::validateTypealias($this->typealias)
         || Obj6::validateTypedef($this->typedef)
         || Obj6::validateTypeid($this->typeid)
         || Obj6::validateTypename($this->typename)
@@ -53858,6 +53907,10 @@ class Obj6 {
     public function to(): stdClass  {
         $out = new stdClass();
         $out->{'dummy'} = $this->toDummy();
+        $out->{'type'} = $this->toObj6Type();
+        $out->{'try'} = $this->toTry();
+        $out->{'Type'} = $this->toType();
+        $out->{'typealias'} = $this->toTypealias();
         $out->{'typedef'} = $this->toTypedef();
         $out->{'typeid'} = $this->toTypeid();
         $out->{'typename'} = $this->toTypename();
@@ -53903,6 +53956,18 @@ class Obj6 {
         if (!property_exists($obj, 'dummy')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'try')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'typealias')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'typedef')) {
             throw new Exception("Missing required property");
         }
@@ -54004,6 +54069,10 @@ class Obj6 {
         }
         return new Obj6(
          Obj6::fromDummy($obj->{'dummy'})
+        ,Obj6::fromObj6Type($obj->{'type'})
+        ,Obj6::fromTry($obj->{'try'})
+        ,Obj6::fromType($obj->{'Type'})
+        ,Obj6::fromTypealias($obj->{'typealias'})
         ,Obj6::fromTypedef($obj->{'typedef'})
         ,Obj6::fromTypeid($obj->{'typeid'})
         ,Obj6::fromTypename($obj->{'typename'})
@@ -54046,6 +54115,10 @@ class Obj6 {
     public static function sample(): Obj6 {
         return new Obj6(
          Obj6::sampleDummy()
+        ,Obj6::sampleObj6Type()
+        ,Obj6::sampleTry()
+        ,Obj6::sampleType()
+        ,Obj6::sampleTypealias()
         ,Obj6::sampleTypedef()
         ,Obj6::sampleTypeid()
         ,Obj6::sampleTypename()
@@ -54083,6 +54156,410 @@ class Obj6 {
     }
 }
 
+// This is an autogenerated file:TypeClass
+
+class TypeClass {
+    private int $type; // json:type Required
+
+    /**
+     * @param int $type
+     */
+    public function __construct(int $type) {
+        $this->type = $type;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromType(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toType(): int {
+        if (TypeClass::validateType($this->type))  {
+            return $this->type; /*int*/
+        }
+        throw new Exception('never get to this TypeClass::type');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateType(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getType(): int {
+        if (TypeClass::validateType($this->type))  {
+            return $this->type;
+        }
+        throw new Exception('never get to getType TypeClass::type');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleType(): int {
+        return 31; /*31:type*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return TypeClass::validateType($this->type);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'type'} = $this->toType();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return TypeClass
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): TypeClass {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        return new TypeClass(
+         TypeClass::fromType($obj->{'type'})
+        );
+    }
+
+    /**
+     * @return TypeClass
+     */
+    public static function sample(): TypeClass {
+        return new TypeClass(
+         TypeClass::sampleType()
+        );
+    }
+}
+
+// This is an autogenerated file:TryClass
+
+class TryClass {
+    private int $try; // json:try Required
+
+    /**
+     * @param int $try
+     */
+    public function __construct(int $try) {
+        $this->try = $try;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromTry(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toTry(): int {
+        if (TryClass::validateTry($this->try))  {
+            return $this->try; /*int*/
+        }
+        throw new Exception('never get to this TryClass::try');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateTry(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getTry(): int {
+        if (TryClass::validateTry($this->try))  {
+            return $this->try;
+        }
+        throw new Exception('never get to getTry TryClass::try');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleTry(): int {
+        return 31; /*31:try*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return TryClass::validateTry($this->try);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'try'} = $this->toTry();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return TryClass
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): TryClass {
+        if (!property_exists($obj, 'try')) {
+            throw new Exception("Missing required property");
+        }
+        return new TryClass(
+         TryClass::fromTry($obj->{'try'})
+        );
+    }
+
+    /**
+     * @return TryClass
+     */
+    public static function sample(): TryClass {
+        return new TryClass(
+         TryClass::sampleTry()
+        );
+    }
+}
+
+// This is an autogenerated file:Type
+
+class Type {
+    private int $type; // json:Type Required
+
+    /**
+     * @param int $type
+     */
+    public function __construct(int $type) {
+        $this->type = $type;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromType(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toType(): int {
+        if (Type::validateType($this->type))  {
+            return $this->type; /*int*/
+        }
+        throw new Exception('never get to this Type::type');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateType(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getType(): int {
+        if (Type::validateType($this->type))  {
+            return $this->type;
+        }
+        throw new Exception('never get to getType Type::type');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleType(): int {
+        return 31; /*31:type*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Type::validateType($this->type);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'Type'} = $this->toType();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Type
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Type {
+        if (!property_exists($obj, 'Type')) {
+            throw new Exception("Missing required property");
+        }
+        return new Type(
+         Type::fromType($obj->{'Type'})
+        );
+    }
+
+    /**
+     * @return Type
+     */
+    public static function sample(): Type {
+        return new Type(
+         Type::sampleType()
+        );
+    }
+}
+
+// This is an autogenerated file:Typealias
+
+class Typealias {
+    private int $typealias; // json:typealias Required
+
+    /**
+     * @param int $typealias
+     */
+    public function __construct(int $typealias) {
+        $this->typealias = $typealias;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromTypealias(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toTypealias(): int {
+        if (Typealias::validateTypealias($this->typealias))  {
+            return $this->typealias; /*int*/
+        }
+        throw new Exception('never get to this Typealias::typealias');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateTypealias(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getTypealias(): int {
+        if (Typealias::validateTypealias($this->typealias))  {
+            return $this->typealias;
+        }
+        throw new Exception('never get to getTypealias Typealias::typealias');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleTypealias(): int {
+        return 31; /*31:typealias*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Typealias::validateTypealias($this->typealias);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'typealias'} = $this->toTypealias();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Typealias
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Typealias {
+        if (!property_exists($obj, 'typealias')) {
+            throw new Exception("Missing required property");
+        }
+        return new Typealias(
+         Typealias::fromTypealias($obj->{'typealias'})
+        );
+    }
+
+    /**
+     * @return Typealias
+     */
+    public static function sample(): Typealias {
+        return new Typealias(
+         Typealias::sampleTypealias()
+        );
+    }
+}
+
 // This is an autogenerated file:Typedef
 
 class Typedef {
diff --git a/base/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod b/head/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod
index 20d2109..1dd97a4 100644
--- a/base/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod
+++ b/head/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod
@@ -3355,6 +3355,7 @@ class Obj3 {
     Left                       left;                           // json: "left"
     Let                        let;                            // json: "let"
     List                       list;                           // json: "list"
+    LocalDate                  local_date;                     // json: "LocalDate"
     Locale                     locale;                         // json: "Locale"
     Lock                       lock;                           // json: "lock"
     Long                       long;                           // json: "long"
@@ -3364,8 +3365,6 @@ class Obj3 {
     MarshalJson                marshal_json;                   // json: "MarshalJSON"
     MetadataPropertyHandling   metadata_property_handling;     // json: "metadata_property_handling"
     Module                     module;                         // json: "module"
-    Mutable                    mutable;                        // json: "mutable"
-    Mutating                   mutating;                       // json: "mutating"
     Function                   obj3_function;                  // json: "function"
     Global                     obj3_global;                    // json: "global"
     If                         obj3_if;                        // json: "if"
@@ -3424,6 +3423,7 @@ class Obj3 {
             "left" : left,
             "let" : let,
             "list" : list,
+            "LocalDate" : local_date,
             "Locale" : locale,
             "lock" : lock,
             "long" : long,
@@ -3433,8 +3433,6 @@ class Obj3 {
             "MarshalJSON" : marshal_json,
             "metadata_property_handling" : metadata_property_handling,
             "module" : module,
-            "mutable" : mutable,
-            "mutating" : mutating,
             "function" : obj3_function,
             "global" : obj3_global,
             "if" : obj3_if,
@@ -3547,6 +3545,8 @@ Obj3 Obj3_from_JSON(mixed json) {
     retval.let = json["let"];
     if (!mappingp(json["list"])) error("Expected object");
     retval.list = json["list"];
+    if (!mappingp(json["LocalDate"])) error("Expected object");
+    retval.local_date = json["LocalDate"];
     if (!mappingp(json["Locale"])) error("Expected object");
     retval.locale = json["Locale"];
     if (!mappingp(json["lock"])) error("Expected object");
@@ -3565,10 +3565,6 @@ Obj3 Obj3_from_JSON(mixed json) {
     retval.metadata_property_handling = json["metadata_property_handling"];
     if (!mappingp(json["module"])) error("Expected object");
     retval.module = json["module"];
-    if (!mappingp(json["mutable"])) error("Expected object");
-    retval.mutable = json["mutable"];
-    if (!mappingp(json["mutating"])) error("Expected object");
-    retval.mutating = json["mutating"];
     if (!mappingp(json["function"])) error("Expected object");
     retval.obj3_function = json["function"];
     if (!mappingp(json["global"])) error("Expected object");
@@ -4573,6 +4569,27 @@ List List_from_JSON(mixed json) {
     return retval;
 }
 
+class LocalDate {
+    int local_date; // json: "LocalDate"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "LocalDate" : local_date,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+LocalDate LocalDate_from_JSON(mixed json) {
+    LocalDate retval = LocalDate();
+
+    if (!intp(json["LocalDate"])) error("Expected integer");
+    retval.local_date = json["LocalDate"];
+
+    return retval;
+}
+
 class Locale {
     int locale; // json: "Locale"
 
@@ -4762,48 +4779,6 @@ Module Module_from_JSON(mixed json) {
     return retval;
 }
 
-class Mutable {
-    int mutable; // json: "mutable"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "mutable" : mutable,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Mutable Mutable_from_JSON(mixed json) {
-    Mutable retval = Mutable();
-
-    if (!intp(json["mutable"])) error("Expected integer");
-    retval.mutable = json["mutable"];
-
-    return retval;
-}
-
-class Mutating {
-    int mutating; // json: "mutating"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "mutating" : mutating,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Mutating Mutating_from_JSON(mixed json) {
-    Mutating retval = Mutating();
-
-    if (!intp(json["mutating"])) error("Expected integer");
-    retval.mutating = json["mutating"];
-
-    return retval;
-}
-
 class Function {
     int function_function; // json: "function"
 
@@ -4953,6 +4928,8 @@ Lambda Lambda_from_JSON(mixed json) {
 
 class Obj4 {
     int             dummy;            // json: "dummy"
+    Mutable         mutable;          // json: "mutable"
+    Mutating        mutating;         // json: "mutating"
     Namespace       namespace;        // json: "namespace"
     Native          native;           // json: "native"
     New             new;              // json: "new"
@@ -4987,6 +4964,8 @@ class Obj4 {
     ObjectReader    object_reader;    // json: "ObjectReader"
     ObjectWriter    object_writer;    // json: "ObjectWriter"
     Of              of;               // json: "of"
+    OffsetDateTime  offset_date_time; // json: "OffsetDateTime"
+    OffsetTime      offset_time;      // json: "OffsetTime"
     Oneway          oneway;           // json: "oneway"
     Open            open;             // json: "open"
     Operator        operator;         // json: "operator"
@@ -5013,14 +4992,12 @@ class Obj4 {
     RegExp          reg_exp;          // json: "RegExp"
     Register        register;         // json: "register"
     ReinterpretCast reinterpret_cast; // json: "reinterpret_cast"
-    Repeat          repeat;           // json: "repeat"
-    Require         require;          // json: "require"
-    Required        required;         // json: "required"
-    Requires        requires;         // json: "requires"
 
     string encode_json() {
         mapping(string:mixed) json = ([
             "dummy" : dummy,
+            "mutable" : mutable,
+            "mutating" : mutating,
             "namespace" : namespace,
             "native" : native,
             "new" : new,
@@ -5055,6 +5032,8 @@ class Obj4 {
             "ObjectReader" : object_reader,
             "ObjectWriter" : object_writer,
             "of" : of,
+            "OffsetDateTime" : offset_date_time,
+            "OffsetTime" : offset_time,
             "oneway" : oneway,
             "open" : open,
             "operator" : operator,
@@ -5081,10 +5060,6 @@ class Obj4 {
             "RegExp" : reg_exp,
             "register" : register,
             "reinterpret_cast" : reinterpret_cast,
-            "repeat" : repeat,
-            "require" : require,
-            "required" : required,
-            "requires" : requires,
         ]);
 
         return Standards.JSON.encode(json);
@@ -5096,6 +5071,10 @@ Obj4 Obj4_from_JSON(mixed json) {
 
     if (!intp(json["dummy"])) error("Expected integer");
     retval.dummy = json["dummy"];
+    if (!mappingp(json["mutable"])) error("Expected object");
+    retval.mutable = json["mutable"];
+    if (!mappingp(json["mutating"])) error("Expected object");
+    retval.mutating = json["mutating"];
     if (!mappingp(json["namespace"])) error("Expected object");
     retval.namespace = json["namespace"];
     if (!mappingp(json["native"])) error("Expected object");
@@ -5164,6 +5143,10 @@ Obj4 Obj4_from_JSON(mixed json) {
     retval.object_writer = json["ObjectWriter"];
     if (!mappingp(json["of"])) error("Expected object");
     retval.of = json["of"];
+    if (!mappingp(json["OffsetDateTime"])) error("Expected object");
+    retval.offset_date_time = json["OffsetDateTime"];
+    if (!mappingp(json["OffsetTime"])) error("Expected object");
+    retval.offset_time = json["OffsetTime"];
     if (!mappingp(json["oneway"])) error("Expected object");
     retval.oneway = json["oneway"];
     if (!mappingp(json["open"])) error("Expected object");
@@ -5216,14 +5199,48 @@ Obj4 Obj4_from_JSON(mixed json) {
     retval.register = json["register"];
     if (!mappingp(json["reinterpret_cast"])) error("Expected object");
     retval.reinterpret_cast = json["reinterpret_cast"];
-    if (!mappingp(json["repeat"])) error("Expected object");
-    retval.repeat = json["repeat"];
-    if (!mappingp(json["require"])) error("Expected object");
-    retval.require = json["require"];
-    if (!mappingp(json["required"])) error("Expected object");
-    retval.required = json["required"];
-    if (!mappingp(json["requires"])) error("Expected object");
-    retval.requires = json["requires"];
+
+    return retval;
+}
+
+class Mutable {
+    int mutable; // json: "mutable"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "mutable" : mutable,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Mutable Mutable_from_JSON(mixed json) {
+    Mutable retval = Mutable();
+
+    if (!intp(json["mutable"])) error("Expected integer");
+    retval.mutable = json["mutable"];
+
+    return retval;
+}
+
+class Mutating {
+    int mutating; // json: "mutating"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "mutating" : mutating,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Mutating Mutating_from_JSON(mixed json) {
+    Mutating retval = Mutating();
+
+    if (!intp(json["mutating"])) error("Expected integer");
+    retval.mutating = json["mutating"];
 
     return retval;
 }
@@ -5942,6 +5959,48 @@ Of Of_from_JSON(mixed json) {
     return retval;
 }
 
+class OffsetDateTime {
+    int offset_date_time; // json: "OffsetDateTime"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "OffsetDateTime" : offset_date_time,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+OffsetDateTime OffsetDateTime_from_JSON(mixed json) {
+    OffsetDateTime retval = OffsetDateTime();
+
+    if (!intp(json["OffsetDateTime"])) error("Expected integer");
+    retval.offset_date_time = json["OffsetDateTime"];
+
+    return retval;
+}
+
+class OffsetTime {
+    int offset_time; // json: "OffsetTime"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "OffsetTime" : offset_time,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+OffsetTime OffsetTime_from_JSON(mixed json) {
+    OffsetTime retval = OffsetTime();
+
+    if (!intp(json["OffsetTime"])) error("Expected integer");
+    retval.offset_time = json["OffsetTime"];
+
+    return retval;
+}
+
 class Oneway {
     int oneway; // json: "oneway"
 
@@ -6487,90 +6546,6 @@ ReinterpretCast ReinterpretCast_from_JSON(mixed json) {
     return retval;
 }
 
-class Repeat {
-    int repeat; // json: "repeat"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "repeat" : repeat,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Repeat Repeat_from_JSON(mixed json) {
-    Repeat retval = Repeat();
-
-    if (!intp(json["repeat"])) error("Expected integer");
-    retval.repeat = json["repeat"];
-
-    return retval;
-}
-
-class Require {
-    int require; // json: "require"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "require" : require,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Require Require_from_JSON(mixed json) {
-    Require retval = Require();
-
-    if (!intp(json["require"])) error("Expected integer");
-    retval.require = json["require"];
-
-    return retval;
-}
-
-class Required {
-    int required; // json: "required"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "required" : required,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Required Required_from_JSON(mixed json) {
-    Required retval = Required();
-
-    if (!intp(json["required"])) error("Expected integer");
-    retval.required = json["required"];
-
-    return retval;
-}
-
-class Requires {
-    int requires; // json: "requires"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "requires" : requires,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Requires Requires_from_JSON(mixed json) {
-    Requires retval = Requires();
-
-    if (!intp(json["requires"])) error("Expected integer");
-    retval.requires = json["requires"];
-
-    return retval;
-}
-
 class Obj5 {
     int                  dummy;                 // json: "dummy"
     KSerializer          k_serializer;          // json: "KSerializer"
@@ -6580,8 +6555,11 @@ class Obj5 {
     String               obj5_string;           // json: "string"
     Switch               obj5_switch;           // json: "switch"
     TrueClass            obj5_true;             // json: "true"
-    TypeClass            obj5_type;             // json: "type"
     PrimitiveKind        primitive_kind;        // json: "PrimitiveKind"
+    Repeat               repeat;                // json: "repeat"
+    Require              require;               // json: "require"
+    Required             required;              // json: "required"
+    Requires             requires;              // json: "requires"
     Restrict             restrict;              // json: "restrict"
     Retain               retain;                // json: "retain"
     Rethrows             rethrows;              // json: "rethrows"
@@ -6634,9 +6612,6 @@ class Obj5 {
     TopLevelClass        top_level;             // json: "top_level"
     Transient            transient;             // json: "transient"
     True                 true;                  // json: "True"
-    Try                  try;                   // json: "try"
-    Type                 type;                  // json: "Type"
-    Typealias            typealias;             // json: "typealias"
 
     string encode_json() {
         mapping(string:mixed) json = ([
@@ -6648,8 +6623,11 @@ class Obj5 {
             "string" : obj5_string,
             "switch" : obj5_switch,
             "true" : obj5_true,
-            "type" : obj5_type,
             "PrimitiveKind" : primitive_kind,
+            "repeat" : repeat,
+            "require" : require,
+            "required" : required,
+            "requires" : requires,
             "restrict" : restrict,
             "retain" : retain,
             "rethrows" : rethrows,
@@ -6702,9 +6680,6 @@ class Obj5 {
             "top_level" : top_level,
             "transient" : transient,
             "True" : true,
-            "try" : try,
-            "Type" : type,
-            "typealias" : typealias,
         ]);
 
         return Standards.JSON.encode(json);
@@ -6730,10 +6705,16 @@ Obj5 Obj5_from_JSON(mixed json) {
     retval.obj5_switch = json["switch"];
     if (!mappingp(json["true"])) error("Expected object");
     retval.obj5_true = json["true"];
-    if (!mappingp(json["type"])) error("Expected object");
-    retval.obj5_type = json["type"];
     if (!mappingp(json["PrimitiveKind"])) error("Expected object");
     retval.primitive_kind = json["PrimitiveKind"];
+    if (!mappingp(json["repeat"])) error("Expected object");
+    retval.repeat = json["repeat"];
+    if (!mappingp(json["require"])) error("Expected object");
+    retval.require = json["require"];
+    if (!mappingp(json["required"])) error("Expected object");
+    retval.required = json["required"];
+    if (!mappingp(json["requires"])) error("Expected object");
+    retval.requires = json["requires"];
     if (!mappingp(json["restrict"])) error("Expected object");
     retval.restrict = json["restrict"];
     if (!mappingp(json["retain"])) error("Expected object");
@@ -6838,12 +6819,6 @@ Obj5 Obj5_from_JSON(mixed json) {
     retval.transient = json["transient"];
     if (!mappingp(json["True"])) error("Expected object");
     retval.true = json["True"];
-    if (!mappingp(json["try"])) error("Expected object");
-    retval.try = json["try"];
-    if (!mappingp(json["Type"])) error("Expected object");
-    retval.type = json["Type"];
-    if (!mappingp(json["typealias"])) error("Expected object");
-    retval.typealias = json["typealias"];
 
     return retval;
 }
@@ -6995,44 +6970,107 @@ TrueClass TrueClass_from_JSON(mixed json) {
     return retval;
 }
 
-class TypeClass {
-    int type; // json: "type"
+class PrimitiveKind {
+    int primitive_kind; // json: "PrimitiveKind"
 
     string encode_json() {
         mapping(string:mixed) json = ([
-            "type" : type,
+            "PrimitiveKind" : primitive_kind,
         ]);
 
         return Standards.JSON.encode(json);
     }
 }
 
-TypeClass TypeClass_from_JSON(mixed json) {
-    TypeClass retval = TypeClass();
+PrimitiveKind PrimitiveKind_from_JSON(mixed json) {
+    PrimitiveKind retval = PrimitiveKind();
 
-    if (!intp(json["type"])) error("Expected integer");
-    retval.type = json["type"];
+    if (!intp(json["PrimitiveKind"])) error("Expected integer");
+    retval.primitive_kind = json["PrimitiveKind"];
 
     return retval;
 }
 
-class PrimitiveKind {
-    int primitive_kind; // json: "PrimitiveKind"
+class Repeat {
+    int repeat; // json: "repeat"
 
     string encode_json() {
         mapping(string:mixed) json = ([
-            "PrimitiveKind" : primitive_kind,
+            "repeat" : repeat,
         ]);
 
         return Standards.JSON.encode(json);
     }
 }
 
-PrimitiveKind PrimitiveKind_from_JSON(mixed json) {
-    PrimitiveKind retval = PrimitiveKind();
+Repeat Repeat_from_JSON(mixed json) {
+    Repeat retval = Repeat();
 
-    if (!intp(json["PrimitiveKind"])) error("Expected integer");
-    retval.primitive_kind = json["PrimitiveKind"];
+    if (!intp(json["repeat"])) error("Expected integer");
+    retval.repeat = json["repeat"];
+
+    return retval;
+}
+
+class Require {
+    int require; // json: "require"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "require" : require,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Require Require_from_JSON(mixed json) {
+    Require retval = Require();
+
+    if (!intp(json["require"])) error("Expected integer");
+    retval.require = json["require"];
+
+    return retval;
+}
+
+class Required {
+    int required; // json: "required"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "required" : required,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Required Required_from_JSON(mixed json) {
+    Required retval = Required();
+
+    if (!intp(json["required"])) error("Expected integer");
+    retval.required = json["required"];
+
+    return retval;
+}
+
+class Requires {
+    int requires; // json: "requires"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "requires" : requires,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Requires Requires_from_JSON(mixed json) {
+    Requires retval = Requires();
+
+    if (!intp(json["requires"])) error("Expected integer");
+    retval.requires = json["requires"];
 
     return retval;
 }
@@ -8129,75 +8167,16 @@ True True_from_JSON(mixed json) {
     return retval;
 }
 
-class Try {
-    int try; // json: "try"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "try" : try,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Try Try_from_JSON(mixed json) {
-    Try retval = Try();
-
-    if (!intp(json["try"])) error("Expected integer");
-    retval.try = json["try"];
-
-    return retval;
-}
-
-class Type {
-    int type; // json: "Type"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "Type" : type,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Type Type_from_JSON(mixed json) {
-    Type retval = Type();
-
-    if (!intp(json["Type"])) error("Expected integer");
-    retval.type = json["Type"];
-
-    return retval;
-}
-
-class Typealias {
-    int typealias; // json: "typealias"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "typealias" : typealias,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Typealias Typealias_from_JSON(mixed json) {
-    Typealias retval = Typealias();
-
-    if (!intp(json["typealias"])) error("Expected integer");
-    retval.typealias = json["typealias"];
-
-    return retval;
-}
-
 class Obj6 {
     int            dummy;            // json: "dummy"
+    TypeClass      obj6_type;        // json: "type"
     Typedef        obj6_typedef;     // json: "typedef"
     Typeof         obj6_typeof;      // json: "typeof"
     Void           obj6_void;        // json: "void"
     While          obj6_while;       // json: "while"
+    Try            try;              // json: "try"
+    Type           type;             // json: "Type"
+    Typealias      typealias;        // json: "typealias"
     Typeid         typeid;           // json: "typeid"
     Typename       typename;         // json: "typename"
     Uint           uint;             // json: "uint"
@@ -8231,10 +8210,14 @@ class Obj6 {
     string encode_json() {
         mapping(string:mixed) json = ([
             "dummy" : dummy,
+            "type" : obj6_type,
             "typedef" : obj6_typedef,
             "typeof" : obj6_typeof,
             "void" : obj6_void,
             "while" : obj6_while,
+            "try" : try,
+            "Type" : type,
+            "typealias" : typealias,
             "typeid" : typeid,
             "typename" : typename,
             "uint" : uint,
@@ -8275,6 +8258,8 @@ Obj6 Obj6_from_JSON(mixed json) {
 
     if (!intp(json["dummy"])) error("Expected integer");
     retval.dummy = json["dummy"];
+    if (!mappingp(json["type"])) error("Expected object");
+    retval.obj6_type = json["type"];
     if (!mappingp(json["typedef"])) error("Expected object");
     retval.obj6_typedef = json["typedef"];
     if (!mappingp(json["typeof"])) error("Expected object");
@@ -8283,6 +8268,12 @@ Obj6 Obj6_from_JSON(mixed json) {
     retval.obj6_void = json["void"];
     if (!mappingp(json["while"])) error("Expected object");
     retval.obj6_while = json["while"];
+    if (!mappingp(json["try"])) error("Expected object");
+    retval.try = json["try"];
+    if (!mappingp(json["Type"])) error("Expected object");
+    retval.type = json["Type"];
+    if (!mappingp(json["typealias"])) error("Expected object");
+    retval.typealias = json["typealias"];
     if (!mappingp(json["typeid"])) error("Expected object");
     retval.typeid = json["typeid"];
     if (!mappingp(json["typename"])) error("Expected object");
@@ -8345,6 +8336,27 @@ Obj6 Obj6_from_JSON(mixed json) {
     return retval;
 }
 
+class TypeClass {
+    int type; // json: "type"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "type" : type,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+TypeClass TypeClass_from_JSON(mixed json) {
+    TypeClass retval = TypeClass();
+
+    if (!intp(json["type"])) error("Expected integer");
+    retval.type = json["type"];
+
+    return retval;
+}
+
 class Typedef {
     int typedef_typedef; // json: "typedef"
 
@@ -8429,6 +8441,69 @@ While While_from_JSON(mixed json) {
     return retval;
 }
 
+class Try {
+    int try; // json: "try"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "try" : try,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Try Try_from_JSON(mixed json) {
+    Try retval = Try();
+
+    if (!intp(json["try"])) error("Expected integer");
+    retval.try = json["try"];
+
+    return retval;
+}
+
+class Type {
+    int type; // json: "Type"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "Type" : type,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Type Type_from_JSON(mixed json) {
+    Type retval = Type();
+
+    if (!intp(json["Type"])) error("Expected integer");
+    retval.type = json["Type"];
+
+    return retval;
+}
+
+class Typealias {
+    int typealias; // json: "typealias"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "typealias" : typealias,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Typealias Typealias_from_JSON(mixed json) {
+    Typealias retval = Typealias();
+
+    if (!intp(json["typealias"])) error("Expected integer");
+    retval.typealias = json["typealias"];
+
+    return retval;
+}
+
 class Typeid {
     int typeid; // json: "typeid"
 
diff --git a/base/python/test/inputs/json/priority/keywords.json/default/quicktype.py b/head/python/test/inputs/json/priority/keywords.json/default/quicktype.py
index 323cb50..16b6387 100644
--- a/base/python/test/inputs/json/priority/keywords.json/default/quicktype.py
+++ b/head/python/test/inputs/json/priority/keywords.json/default/quicktype.py
@@ -3260,6 +3260,22 @@ class ListClass:
         return result
 
 
+@dataclass
+class LocalDate:
+    local_date: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'LocalDate':
+        assert isinstance(obj, dict)
+        local_date = from_int(obj["LocalDate"])
+        return LocalDate(local_date)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["LocalDate"] = from_int(self.local_date)
+        return result
+
+
 @dataclass
 class Locale:
     locale: int
@@ -3404,38 +3420,6 @@ class Module:
         return result
 
 
-@dataclass
-class Mutable:
-    mutable: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Mutable':
-        assert isinstance(obj, dict)
-        mutable = from_int(obj["mutable"])
-        return Mutable(mutable)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["mutable"] = from_int(self.mutable)
-        return result
-
-
-@dataclass
-class Mutating:
-    mutating: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Mutating':
-        assert isinstance(obj, dict)
-        mutating = from_int(obj["mutating"])
-        return Mutating(mutating)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["mutating"] = from_int(self.mutating)
-        return result
-
-
 @dataclass
 class Global:
     global_global: int
@@ -3566,6 +3550,7 @@ class Obj3:
     json_parser: JSONParser
     json_reader: JSONReader
     json_token_type: JSONTokenType
+    local_date: LocalDate
     locale: Locale
     long_node: LongNode
     map_entry: MapEntry
@@ -3614,8 +3599,6 @@ class Obj3:
     map: Map
     metadata_property_handling: MetadataPropertyHandling
     module: Module
-    mutable: Mutable
-    mutating: Mutating
 
     @staticmethod
     def from_dict(obj: Any) -> 'Obj3':
@@ -3636,6 +3619,7 @@ class Obj3:
         json_parser = JSONParser.from_dict(obj["JsonParser"])
         json_reader = JSONReader.from_dict(obj["JsonReader"])
         json_token_type = JSONTokenType.from_dict(obj["JsonTokenType"])
+        local_date = LocalDate.from_dict(obj["LocalDate"])
         locale = Locale.from_dict(obj["Locale"])
         long_node = LongNode.from_dict(obj["LongNode"])
         map_entry = MapEntry.from_dict(obj["MapEntry"])
@@ -3684,9 +3668,7 @@ class Obj3:
         map = Map.from_dict(obj["map"])
         metadata_property_handling = MetadataPropertyHandling.from_dict(obj["metadata_property_handling"])
         module = Module.from_dict(obj["module"])
-        mutable = Mutable.from_dict(obj["mutable"])
-        mutating = Mutating.from_dict(obj["mutating"])
-        return Obj3(hashable, hasher, imp, int_node, iso_date_time_offset_converter, json_any, json_coding_key, json_decoder, json_encoder, json_null, json_exception, json_generator, json_node, json_parser, json_reader, json_token_type, locale, long_node, map_entry, marshal_json, dummy, function, get, obj3_global, go, goto, guard, has_own_property, hash_code, id, obj3_if, implements, implicit, obj3_import, obj3_in, indirect, infix, init, inline, inout, instanceof, obj3_int, interface, internal, obj3_is, iterable, jdec, jenc, jpipe, json, json_converter, json_serializer, json_token, json_writer, obj3_lambda, lazy, left, let, list, lock, long, map, metadata_property_handling, module, mutable, mutating)
+        return Obj3(hashable, hasher, imp, int_node, iso_date_time_offset_converter, json_any, json_coding_key, json_decoder, json_encoder, json_null, json_exception, json_generator, json_node, json_parser, json_reader, json_token_type, local_date, locale, long_node, map_entry, marshal_json, dummy, function, get, obj3_global, go, goto, guard, has_own_property, hash_code, id, obj3_if, implements, implicit, obj3_import, obj3_in, indirect, infix, init, inline, inout, instanceof, obj3_int, interface, internal, obj3_is, iterable, jdec, jenc, jpipe, json, json_converter, json_serializer, json_token, json_writer, obj3_lambda, lazy, left, let, list, lock, long, map, metadata_property_handling, module)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -3706,6 +3688,7 @@ class Obj3:
         result["JsonParser"] = to_class(JSONParser, self.json_parser)
         result["JsonReader"] = to_class(JSONReader, self.json_reader)
         result["JsonTokenType"] = to_class(JSONTokenType, self.json_token_type)
+        result["LocalDate"] = to_class(LocalDate, self.local_date)
         result["Locale"] = to_class(Locale, self.locale)
         result["LongNode"] = to_class(LongNode, self.long_node)
         result["MapEntry"] = to_class(MapEntry, self.map_entry)
@@ -3754,8 +3737,38 @@ class Obj3:
         result["map"] = to_class(Map, self.map)
         result["metadata_property_handling"] = to_class(MetadataPropertyHandling, self.metadata_property_handling)
         result["module"] = to_class(Module, self.module)
-        result["mutable"] = to_class(Mutable, self.mutable)
-        result["mutating"] = to_class(Mutating, self.mutating)
+        return result
+
+
+@dataclass
+class Mutable:
+    mutable: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Mutable':
+        assert isinstance(obj, dict)
+        mutable = from_int(obj["mutable"])
+        return Mutable(mutable)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["mutable"] = from_int(self.mutable)
+        return result
+
+
+@dataclass
+class Mutating:
+    mutating: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Mutating':
+        assert isinstance(obj, dict)
+        mutating = from_int(obj["mutating"])
+        return Mutating(mutating)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["mutating"] = from_int(self.mutating)
         return result
 
 
@@ -4303,6 +4316,38 @@ class Of:
         return result
 
 
+@dataclass
+class OffsetDateTime:
+    offset_date_time: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'OffsetDateTime':
+        assert isinstance(obj, dict)
+        offset_date_time = from_int(obj["OffsetDateTime"])
+        return OffsetDateTime(offset_date_time)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["OffsetDateTime"] = from_int(self.offset_date_time)
+        return result
+
+
+@dataclass
+class OffsetTime:
+    offset_time: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'OffsetTime':
+        assert isinstance(obj, dict)
+        offset_time = from_int(obj["OffsetTime"])
+        return OffsetTime(offset_time)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["OffsetTime"] = from_int(self.offset_time)
+        return result
+
+
 @dataclass
 class Oneway:
     oneway: int
@@ -4719,70 +4764,6 @@ class ReinterpretCast:
         return result
 
 
-@dataclass
-class Repeat:
-    repeat: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Repeat':
-        assert isinstance(obj, dict)
-        repeat = from_int(obj["repeat"])
-        return Repeat(repeat)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["repeat"] = from_int(self.repeat)
-        return result
-
-
-@dataclass
-class Require:
-    require: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Require':
-        assert isinstance(obj, dict)
-        require = from_int(obj["require"])
-        return Require(require)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["require"] = from_int(self.require)
-        return result
-
-
-@dataclass
-class Required:
-    required: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Required':
-        assert isinstance(obj, dict)
-        required = from_int(obj["required"])
-        return Required(required)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["required"] = from_int(self.required)
-        return result
-
-
-@dataclass
-class Requires:
-    requires: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Requires':
-        assert isinstance(obj, dict)
-        requires = from_int(obj["requires"])
-        return Requires(requires)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["requires"] = from_int(self.requires)
-        return result
-
-
 @dataclass
 class Obj4:
     no: No
@@ -4796,9 +4777,13 @@ class Obj4:
     object_node: ObjectNode
     object_reader: ObjectReader
     object_writer: ObjectWriter
+    offset_date_time: OffsetDateTime
+    offset_time: OffsetTime
     protocol: Protocol
     reg_exp: RegExp
     dummy: int
+    mutable: Mutable
+    mutating: Mutating
     namespace: Namespace
     native: Native
     new: New
@@ -4846,10 +4831,6 @@ class Obj4:
     ref: Ref
     register: Register
     reinterpret_cast: ReinterpretCast
-    repeat: Repeat
-    require: Require
-    required: Required
-    requires: Requires
 
     @staticmethod
     def from_dict(obj: Any) -> 'Obj4':
@@ -4865,9 +4846,13 @@ class Obj4:
         object_node = ObjectNode.from_dict(obj["ObjectNode"])
         object_reader = ObjectReader.from_dict(obj["ObjectReader"])
         object_writer = ObjectWriter.from_dict(obj["ObjectWriter"])
+        offset_date_time = OffsetDateTime.from_dict(obj["OffsetDateTime"])
+        offset_time = OffsetTime.from_dict(obj["OffsetTime"])
         protocol = Protocol.from_dict(obj["Protocol"])
         reg_exp = RegExp.from_dict(obj["RegExp"])
         dummy = from_int(obj["dummy"])
+        mutable = Mutable.from_dict(obj["mutable"])
+        mutating = Mutating.from_dict(obj["mutating"])
         namespace = Namespace.from_dict(obj["namespace"])
         native = Native.from_dict(obj["native"])
         new = New.from_dict(obj["new"])
@@ -4915,11 +4900,7 @@ class Obj4:
         ref = Ref.from_dict(obj["ref"])
         register = Register.from_dict(obj["register"])
         reinterpret_cast = ReinterpretCast.from_dict(obj["reinterpret_cast"])
-        repeat = Repeat.from_dict(obj["repeat"])
-        require = Require.from_dict(obj["require"])
-        required = Required.from_dict(obj["required"])
-        requires = Requires.from_dict(obj["requires"])
-        return Obj4(no, ns_error, ns_object, ns_string, null, none, null_node, object_mapper, object_node, object_reader, object_writer, protocol, reg_exp, dummy, namespace, native, new, newtonsoft, nil, no_such_method, noexcept, nonatomic, obj4_none, obj4_nonlocal, nonmutating, obj4_not, not_eq, obj4_null, nullptr, number, object, of, oneway, open, operator, optional, obj4_or, or_eq, out, override, package, params, obj4_pass, port, postfix, precedence, prefix, obj4_print, print_members, printf, private, protected, obj4_protocol, public, quicktype, obj4_raise, range, readonly, ref, register, reinterpret_cast, repeat, require, required, requires)
+        return Obj4(no, ns_error, ns_object, ns_string, null, none, null_node, object_mapper, object_node, object_reader, object_writer, offset_date_time, offset_time, protocol, reg_exp, dummy, mutable, mutating, namespace, native, new, newtonsoft, nil, no_such_method, noexcept, nonatomic, obj4_none, obj4_nonlocal, nonmutating, obj4_not, not_eq, obj4_null, nullptr, number, object, of, oneway, open, operator, optional, obj4_or, or_eq, out, override, package, params, obj4_pass, port, postfix, precedence, prefix, obj4_print, print_members, printf, private, protected, obj4_protocol, public, quicktype, obj4_raise, range, readonly, ref, register, reinterpret_cast)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -4934,9 +4915,13 @@ class Obj4:
         result["ObjectNode"] = to_class(ObjectNode, self.object_node)
         result["ObjectReader"] = to_class(ObjectReader, self.object_reader)
         result["ObjectWriter"] = to_class(ObjectWriter, self.object_writer)
+        result["OffsetDateTime"] = to_class(OffsetDateTime, self.offset_date_time)
+        result["OffsetTime"] = to_class(OffsetTime, self.offset_time)
         result["Protocol"] = to_class(Protocol, self.protocol)
         result["RegExp"] = to_class(RegExp, self.reg_exp)
         result["dummy"] = from_int(self.dummy)
+        result["mutable"] = to_class(Mutable, self.mutable)
+        result["mutating"] = to_class(Mutating, self.mutating)
         result["namespace"] = to_class(Namespace, self.namespace)
         result["native"] = to_class(Native, self.native)
         result["new"] = to_class(New, self.new)
@@ -4984,10 +4969,6 @@ class Obj4:
         result["ref"] = to_class(Ref, self.ref)
         result["register"] = to_class(Register, self.register)
         result["reinterpret_cast"] = to_class(ReinterpretCast, self.reinterpret_cast)
-        result["repeat"] = to_class(Repeat, self.repeat)
-        result["require"] = to_class(Require, self.require)
-        result["required"] = to_class(Required, self.required)
-        result["requires"] = to_class(Requires, self.requires)
         return result
 
 
@@ -5072,66 +5053,98 @@ class Obj5True:
 
 
 @dataclass
-class Try:
-    try_try: int
+class PrimitiveKind:
+    primitive_kind: int
 
     @staticmethod
-    def from_dict(obj: Any) -> 'Try':
+    def from_dict(obj: Any) -> 'PrimitiveKind':
         assert isinstance(obj, dict)
-        try_try = from_int(obj["try"])
-        return Try(try_try)
+        primitive_kind = from_int(obj["PrimitiveKind"])
+        return PrimitiveKind(primitive_kind)
 
     def to_dict(self) -> dict:
         result: dict = {}
-        result["try"] = from_int(self.try_try)
+        result["PrimitiveKind"] = from_int(self.primitive_kind)
         return result
 
 
 @dataclass
-class Obj5Type:
-    type: int
+class SelfClass:
+    self_self: int
 
     @staticmethod
-    def from_dict(obj: Any) -> 'Obj5Type':
+    def from_dict(obj: Any) -> 'SelfClass':
         assert isinstance(obj, dict)
-        type = from_int(obj["type"])
-        return Obj5Type(type)
+        self_self = from_int(obj["self"])
+        return SelfClass(self_self)
 
     def to_dict(self) -> dict:
         result: dict = {}
-        result["type"] = from_int(self.type)
+        result["self"] = from_int(self.self_self)
         return result
 
 
 @dataclass
-class PrimitiveKind:
-    primitive_kind: int
+class Repeat:
+    repeat: int
 
     @staticmethod
-    def from_dict(obj: Any) -> 'PrimitiveKind':
+    def from_dict(obj: Any) -> 'Repeat':
         assert isinstance(obj, dict)
-        primitive_kind = from_int(obj["PrimitiveKind"])
-        return PrimitiveKind(primitive_kind)
+        repeat = from_int(obj["repeat"])
+        return Repeat(repeat)
 
     def to_dict(self) -> dict:
         result: dict = {}
-        result["PrimitiveKind"] = from_int(self.primitive_kind)
+        result["repeat"] = from_int(self.repeat)
         return result
 
 
 @dataclass
-class SelfClass:
-    self_self: int
+class Require:
+    require: int
 
     @staticmethod
-    def from_dict(obj: Any) -> 'SelfClass':
+    def from_dict(obj: Any) -> 'Require':
         assert isinstance(obj, dict)
-        self_self = from_int(obj["self"])
-        return SelfClass(self_self)
+        require = from_int(obj["require"])
+        return Require(require)
 
     def to_dict(self) -> dict:
         result: dict = {}
-        result["self"] = from_int(self.self_self)
+        result["require"] = from_int(self.require)
+        return result
+
+
+@dataclass
+class Required:
+    required: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Required':
+        assert isinstance(obj, dict)
+        required = from_int(obj["required"])
+        return Required(required)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["required"] = from_int(self.required)
+        return result
+
+
+@dataclass
+class Requires:
+    requires: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Requires':
+        assert isinstance(obj, dict)
+        requires = from_int(obj["requires"])
+        return Requires(requires)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["requires"] = from_int(self.requires)
         return result
 
 
@@ -5983,38 +5996,6 @@ class TrueClass:
         return result
 
 
-@dataclass
-class TypeClass:
-    type: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'TypeClass':
-        assert isinstance(obj, dict)
-        type = from_int(obj["Type"])
-        return TypeClass(type)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["Type"] = from_int(self.type)
-        return result
-
-
-@dataclass
-class Typealias:
-    typealias: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Typealias':
-        assert isinstance(obj, dict)
-        typealias = from_int(obj["typealias"])
-        return Typealias(typealias)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["typealias"] = from_int(self.typealias)
-        return result
-
-
 @dataclass
 class Obj5:
     k_serializer: KSerializer
@@ -6036,8 +6017,11 @@ class Obj5:
     time_only_converter: TimeOnlyConverter
     time_zone: TimeZone
     true: TrueClass
-    type: TypeClass
     dummy: int
+    repeat: Repeat
+    require: Require
+    required: Required
+    requires: Requires
     restrict: Restrict
     retain: Retain
     rethrows: Rethrows
@@ -6079,9 +6063,6 @@ class Obj5:
     top_level: TopLevelClass
     transient: Transient
     obj5_true: Obj5True
-    obj5_try: Try
-    obj5_type: Obj5Type
-    typealias: Typealias
 
     @staticmethod
     def from_dict(obj: Any) -> 'Obj5':
@@ -6105,8 +6086,11 @@ class Obj5:
         time_only_converter = TimeOnlyConverter.from_dict(obj["TimeOnlyConverter"])
         time_zone = TimeZone.from_dict(obj["TimeZone"])
         true = TrueClass.from_dict(obj["True"])
-        type = TypeClass.from_dict(obj["Type"])
         dummy = from_int(obj["dummy"])
+        repeat = Repeat.from_dict(obj["repeat"])
+        require = Require.from_dict(obj["require"])
+        required = Required.from_dict(obj["required"])
+        requires = Requires.from_dict(obj["requires"])
         restrict = Restrict.from_dict(obj["restrict"])
         retain = Retain.from_dict(obj["retain"])
         rethrows = Rethrows.from_dict(obj["rethrows"])
@@ -6148,10 +6132,7 @@ class Obj5:
         top_level = TopLevelClass.from_dict(obj["top_level"])
         transient = Transient.from_dict(obj["transient"])
         obj5_true = Obj5True.from_dict(obj["true"])
-        obj5_try = Try.from_dict(obj["try"])
-        obj5_type = Obj5Type.from_dict(obj["type"])
-        typealias = Typealias.from_dict(obj["typealias"])
-        return Obj5(k_serializer, primitive_kind, sel, obj5_self, sendable, serial_descriptor, serial_name, serializable, serialization_feature, serializer_provider, simple_module, standards, std_deserializer, std_serializer, text_node, time_only, time_only_converter, time_zone, true, type, dummy, restrict, retain, rethrows, obj5_return, right, runtime_type, s, sbyte, sealed, select, purple_self, serialize, set, short, signed, sizeof, stackalloc, static, static_assert, static_cast, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, then, this, thread_local, throw, throws, to_string, obj5_to_dict, to_json, top_level, transient, obj5_true, obj5_try, obj5_type, typealias)
+        return Obj5(k_serializer, primitive_kind, sel, obj5_self, sendable, serial_descriptor, serial_name, serializable, serialization_feature, serializer_provider, simple_module, standards, std_deserializer, std_serializer, text_node, time_only, time_only_converter, time_zone, true, dummy, repeat, require, required, requires, restrict, retain, rethrows, obj5_return, right, runtime_type, s, sbyte, sealed, select, purple_self, serialize, set, short, signed, sizeof, stackalloc, static, static_assert, static_cast, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, then, this, thread_local, throw, throws, to_string, obj5_to_dict, to_json, top_level, transient, obj5_true)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -6174,8 +6155,11 @@ class Obj5:
         result["TimeOnlyConverter"] = to_class(TimeOnlyConverter, self.time_only_converter)
         result["TimeZone"] = to_class(TimeZone, self.time_zone)
         result["True"] = to_class(TrueClass, self.true)
-        result["Type"] = to_class(TypeClass, self.type)
         result["dummy"] = from_int(self.dummy)
+        result["repeat"] = to_class(Repeat, self.repeat)
+        result["require"] = to_class(Require, self.require)
+        result["required"] = to_class(Required, self.required)
+        result["requires"] = to_class(Requires, self.requires)
         result["restrict"] = to_class(Restrict, self.restrict)
         result["retain"] = to_class(Retain, self.retain)
         result["rethrows"] = to_class(Rethrows, self.rethrows)
@@ -6217,9 +6201,38 @@ class Obj5:
         result["top_level"] = to_class(TopLevelClass, self.top_level)
         result["transient"] = to_class(Transient, self.transient)
         result["true"] = to_class(Obj5True, self.obj5_true)
-        result["try"] = to_class(Try, self.obj5_try)
-        result["type"] = to_class(Obj5Type, self.obj5_type)
-        result["typealias"] = to_class(Typealias, self.typealias)
+        return result
+
+
+@dataclass
+class Try:
+    try_try: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Try':
+        assert isinstance(obj, dict)
+        try_try = from_int(obj["try"])
+        return Try(try_try)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["try"] = from_int(self.try_try)
+        return result
+
+
+@dataclass
+class Obj6Type:
+    type: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Obj6Type':
+        assert isinstance(obj, dict)
+        type = from_int(obj["type"])
+        return Obj6Type(type)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["type"] = from_int(self.type)
         return result
 
 
@@ -6271,6 +6284,38 @@ class Yield:
         return result
 
 
+@dataclass
+class TypeClass:
+    type: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'TypeClass':
+        assert isinstance(obj, dict)
+        type = from_int(obj["Type"])
+        return TypeClass(type)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["Type"] = from_int(self.type)
+        return result
+
+
+@dataclass
+class Typealias:
+    typealias: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Typealias':
+        assert isinstance(obj, dict)
+        typealias = from_int(obj["typealias"])
+        return Typealias(typealias)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["typealias"] = from_int(self.typealias)
+        return result
+
+
 @dataclass
 class Typedef:
     typedef: int
@@ -6753,6 +6798,7 @@ class Yes:
 
 @dataclass
 class Obj6:
+    type: TypeClass
     uuid: UUIDClass
     unmarshal_json: UnmarshalJSON
     use_serializers: UseSerializers
@@ -6760,6 +6806,9 @@ class Obj6:
     utf8_json_writer: Utf8JSONWriter
     yes: Yes
     dummy: int
+    obj6_try: Try
+    obj6_type: Obj6Type
+    typealias: Typealias
     typedef: Typedef
     typeid: Typeid
     typename: Typename
@@ -6791,6 +6840,7 @@ class Obj6:
     @staticmethod
     def from_dict(obj: Any) -> 'Obj6':
         assert isinstance(obj, dict)
+        type = TypeClass.from_dict(obj["Type"])
         uuid = UUIDClass.from_dict(obj["UUID"])
         unmarshal_json = UnmarshalJSON.from_dict(obj["UnmarshalJSON"])
         use_serializers = UseSerializers.from_dict(obj["UseSerializers"])
@@ -6798,6 +6848,9 @@ class Obj6:
         utf8_json_writer = Utf8JSONWriter.from_dict(obj["Utf8JsonWriter"])
         yes = Yes.from_dict(obj["YES"])
         dummy = from_int(obj["dummy"])
+        obj6_try = Try.from_dict(obj["try"])
+        obj6_type = Obj6Type.from_dict(obj["type"])
+        typealias = Typealias.from_dict(obj["typealias"])
         typedef = Typedef.from_dict(obj["typedef"])
         typeid = Typeid.from_dict(obj["typeid"])
         typename = Typename.from_dict(obj["typename"])
@@ -6825,10 +6878,11 @@ class Obj6:
         xor = Xor.from_dict(obj["xor"])
         xor_eq = XorEq.from_dict(obj["xor_eq"])
         obj6_yield = Yield.from_dict(obj["yield"])
-        return Obj6(uuid, unmarshal_json, use_serializers, utf8_json_reader, utf8_json_writer, yes, dummy, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined, union, unowned, unsafe, unsigned, ushort, using, var, virtual, void, volatile, wchar_t, weak, where, obj6_while, will_set, obj6_with, xor, xor_eq, obj6_yield)
+        return Obj6(type, uuid, unmarshal_json, use_serializers, utf8_json_reader, utf8_json_writer, yes, dummy, obj6_try, obj6_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined, union, unowned, unsafe, unsigned, ushort, using, var, virtual, void, volatile, wchar_t, weak, where, obj6_while, will_set, obj6_with, xor, xor_eq, obj6_yield)
 
     def to_dict(self) -> dict:
         result: dict = {}
+        result["Type"] = to_class(TypeClass, self.type)
         result["UUID"] = to_class(UUIDClass, self.uuid)
         result["UnmarshalJSON"] = to_class(UnmarshalJSON, self.unmarshal_json)
         result["UseSerializers"] = to_class(UseSerializers, self.use_serializers)
@@ -6836,6 +6890,9 @@ class Obj6:
         result["Utf8JsonWriter"] = to_class(Utf8JSONWriter, self.utf8_json_writer)
         result["YES"] = to_class(Yes, self.yes)
         result["dummy"] = from_int(self.dummy)
+        result["try"] = to_class(Try, self.obj6_try)
+        result["type"] = to_class(Obj6Type, self.obj6_type)
+        result["typealias"] = to_class(Typealias, self.typealias)
         result["typedef"] = to_class(Typedef, self.typedef)
         result["typeid"] = to_class(Typeid, self.typeid)
         result["typename"] = to_class(Typename, self.typename)
diff --git a/base/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb b/head/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb
index db7ee84..b260332 100644
--- a/base/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb
+++ b/head/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb
@@ -4936,6 +4936,31 @@ class List < Dry::Struct
   end
 end
 
+class LocalDate < Dry::Struct
+  attribute :local_date, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      local_date: d.fetch("LocalDate"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "LocalDate" => local_date,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Locale < Dry::Struct
   attribute :locale, Types::Integer
 
@@ -5136,56 +5161,6 @@ class MetadataPropertyHandling < Dry::Struct
   end
 end
 
-class Mutable < Dry::Struct
-  attribute :mutable, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      mutable: d.fetch("mutable"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "mutable" => mutable,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
-class Mutating < Dry::Struct
-  attribute :mutating, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      mutating: d.fetch("mutating"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "mutating" => mutating,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
 class If < Dry::Struct
   attribute :if_if, Types::Integer
 
@@ -5339,6 +5314,7 @@ class Obj3 < Dry::Struct
   attribute :left,                           Left
   attribute :let,                            Let
   attribute :list,                           List
+  attribute :local_date,                     LocalDate
   attribute :locale,                         Locale
   attribute :lock,                           Lock
   attribute :long,                           Long
@@ -5347,8 +5323,6 @@ class Obj3 < Dry::Struct
   attribute :map_entry,                      MapEntry
   attribute :marshal_json,                   MarshalJSON
   attribute :metadata_property_handling,     MetadataPropertyHandling
-  attribute :mutable,                        Mutable
-  attribute :mutating,                       Mutating
   attribute :obj3_if,                        If
   attribute :obj3_in,                        In
   attribute :obj3_lambda,                    Lambda
@@ -5409,6 +5383,7 @@ class Obj3 < Dry::Struct
       left:                           Left.from_dynamic!(d.fetch("left")),
       let:                            Let.from_dynamic!(d.fetch("let")),
       list:                           List.from_dynamic!(d.fetch("list")),
+      local_date:                     LocalDate.from_dynamic!(d.fetch("LocalDate")),
       locale:                         Locale.from_dynamic!(d.fetch("Locale")),
       lock:                           Lock.from_dynamic!(d.fetch("lock")),
       long:                           Long.from_dynamic!(d.fetch("long")),
@@ -5417,8 +5392,6 @@ class Obj3 < Dry::Struct
       map_entry:                      MapEntry.from_dynamic!(d.fetch("MapEntry")),
       marshal_json:                   MarshalJSON.from_dynamic!(d.fetch("MarshalJSON")),
       metadata_property_handling:     MetadataPropertyHandling.from_dynamic!(d.fetch("metadata_property_handling")),
-      mutable:                        Mutable.from_dynamic!(d.fetch("mutable")),
-      mutating:                       Mutating.from_dynamic!(d.fetch("mutating")),
       obj3_if:                        If.from_dynamic!(d.fetch("if")),
       obj3_in:                        In.from_dynamic!(d.fetch("in")),
       obj3_lambda:                    Lambda.from_dynamic!(d.fetch("lambda")),
@@ -5484,6 +5457,7 @@ class Obj3 < Dry::Struct
       "left"                       => left.to_dynamic,
       "let"                        => let.to_dynamic,
       "list"                       => list.to_dynamic,
+      "LocalDate"                  => local_date.to_dynamic,
       "Locale"                     => locale.to_dynamic,
       "lock"                       => lock.to_dynamic,
       "long"                       => long.to_dynamic,
@@ -5492,8 +5466,6 @@ class Obj3 < Dry::Struct
       "MapEntry"                   => map_entry.to_dynamic,
       "MarshalJSON"                => marshal_json.to_dynamic,
       "metadata_property_handling" => metadata_property_handling.to_dynamic,
-      "mutable"                    => mutable.to_dynamic,
-      "mutating"                   => mutating.to_dynamic,
       "if"                         => obj3_if.to_dynamic,
       "in"                         => obj3_in.to_dynamic,
       "lambda"                     => obj3_lambda.to_dynamic,
@@ -5506,6 +5478,56 @@ class Obj3 < Dry::Struct
   end
 end
 
+class Mutable < Dry::Struct
+  attribute :mutable, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      mutable: d.fetch("mutable"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "mutable" => mutable,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class Mutating < Dry::Struct
+  attribute :mutating, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      mutating: d.fetch("mutating"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "mutating" => mutating,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Namespace < Dry::Struct
   attribute :namespace, Types::Integer
 
@@ -6256,31 +6278,6 @@ class Raise < Dry::Struct
   end
 end
 
-class Require < Dry::Struct
-  attribute :require_require, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      require_require: d.fetch("require"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "require" => require_require,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
 class ObjectClass < Dry::Struct
   attribute :object, Types::Integer
 
@@ -6431,6 +6428,56 @@ class Of < Dry::Struct
   end
 end
 
+class OffsetDateTime < Dry::Struct
+  attribute :offset_date_time, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      offset_date_time: d.fetch("OffsetDateTime"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "OffsetDateTime" => offset_date_time,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class OffsetTime < Dry::Struct
+  attribute :offset_time, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      offset_time: d.fetch("OffsetTime"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "OffsetTime" => offset_time,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Oneway < Dry::Struct
   attribute :oneway, Types::Integer
 
@@ -7031,83 +7078,10 @@ class ReinterpretCast < Dry::Struct
   end
 end
 
-class Repeat < Dry::Struct
-  attribute :repeat, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      repeat: d.fetch("repeat"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "repeat" => repeat,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
-class Required < Dry::Struct
-  attribute :required, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      required: d.fetch("required"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "required" => required,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
-class Requires < Dry::Struct
-  attribute :requires, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      requires: d.fetch("requires"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "requires" => requires,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
 class Obj4 < Dry::Struct
   attribute :dummy,            Types::Integer
+  attribute :mutable,          Mutable
+  attribute :mutating,         Mutating
   attribute :namespace,        Namespace
   attribute :native,           Native
   attribute :newtonsoft,       Newtonsoft
@@ -7138,13 +7112,14 @@ class Obj4 < Dry::Struct
   attribute :obj4_printf,      Printf
   attribute :obj4_protocol,    ProtocolClass
   attribute :obj4_raise,       Raise
-  attribute :obj4_require,     Require
   attribute :object,           ObjectClass
   attribute :object_mapper,    ObjectMapper
   attribute :object_node,      ObjectNode
   attribute :object_reader,    ObjectReader
   attribute :object_writer,    ObjectWriter
   attribute :of,               Of
+  attribute :offset_date_time, OffsetDateTime
+  attribute :offset_time,      OffsetTime
   attribute :oneway,           Oneway
   attribute :operator,         Operator
   attribute :or_eq,            OrEq
@@ -7169,14 +7144,13 @@ class Obj4 < Dry::Struct
   attribute :reg_exp,          RegExp
   attribute :register,         Register
   attribute :reinterpret_cast, ReinterpretCast
-  attribute :repeat,           Repeat
-  attribute :required,         Required
-  attribute :requires,         Requires
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
       dummy:            d.fetch("dummy"),
+      mutable:          Mutable.from_dynamic!(d.fetch("mutable")),
+      mutating:         Mutating.from_dynamic!(d.fetch("mutating")),
       namespace:        Namespace.from_dynamic!(d.fetch("namespace")),
       native:           Native.from_dynamic!(d.fetch("native")),
       newtonsoft:       Newtonsoft.from_dynamic!(d.fetch("newtonsoft")),
@@ -7207,13 +7181,14 @@ class Obj4 < Dry::Struct
       obj4_printf:      Printf.from_dynamic!(d.fetch("printf")),
       obj4_protocol:    ProtocolClass.from_dynamic!(d.fetch("protocol")),
       obj4_raise:       Raise.from_dynamic!(d.fetch("raise")),
-      obj4_require:     Require.from_dynamic!(d.fetch("require")),
       object:           ObjectClass.from_dynamic!(d.fetch("object")),
       object_mapper:    ObjectMapper.from_dynamic!(d.fetch("ObjectMapper")),
       object_node:      ObjectNode.from_dynamic!(d.fetch("ObjectNode")),
       object_reader:    ObjectReader.from_dynamic!(d.fetch("ObjectReader")),
       object_writer:    ObjectWriter.from_dynamic!(d.fetch("ObjectWriter")),
       of:               Of.from_dynamic!(d.fetch("of")),
+      offset_date_time: OffsetDateTime.from_dynamic!(d.fetch("OffsetDateTime")),
+      offset_time:      OffsetTime.from_dynamic!(d.fetch("OffsetTime")),
       oneway:           Oneway.from_dynamic!(d.fetch("oneway")),
       operator:         Operator.from_dynamic!(d.fetch("operator")),
       or_eq:            OrEq.from_dynamic!(d.fetch("or_eq")),
@@ -7238,9 +7213,6 @@ class Obj4 < Dry::Struct
       reg_exp:          RegExp.from_dynamic!(d.fetch("RegExp")),
       register:         Register.from_dynamic!(d.fetch("register")),
       reinterpret_cast: ReinterpretCast.from_dynamic!(d.fetch("reinterpret_cast")),
-      repeat:           Repeat.from_dynamic!(d.fetch("repeat")),
-      required:         Required.from_dynamic!(d.fetch("required")),
-      requires:         Requires.from_dynamic!(d.fetch("requires")),
     )
   end
 
@@ -7251,6 +7223,8 @@ class Obj4 < Dry::Struct
   def to_dynamic
     {
       "dummy"            => dummy,
+      "mutable"          => mutable.to_dynamic,
+      "mutating"         => mutating.to_dynamic,
       "namespace"        => namespace.to_dynamic,
       "native"           => native.to_dynamic,
       "newtonsoft"       => newtonsoft.to_dynamic,
@@ -7281,13 +7255,14 @@ class Obj4 < Dry::Struct
       "printf"           => obj4_printf.to_dynamic,
       "protocol"         => obj4_protocol.to_dynamic,
       "raise"            => obj4_raise.to_dynamic,
-      "require"          => obj4_require.to_dynamic,
       "object"           => object.to_dynamic,
       "ObjectMapper"     => object_mapper.to_dynamic,
       "ObjectNode"       => object_node.to_dynamic,
       "ObjectReader"     => object_reader.to_dynamic,
       "ObjectWriter"     => object_writer.to_dynamic,
       "of"               => of.to_dynamic,
+      "OffsetDateTime"   => offset_date_time.to_dynamic,
+      "OffsetTime"       => offset_time.to_dynamic,
       "oneway"           => oneway.to_dynamic,
       "operator"         => operator.to_dynamic,
       "or_eq"            => or_eq.to_dynamic,
@@ -7312,9 +7287,6 @@ class Obj4 < Dry::Struct
       "RegExp"           => reg_exp.to_dynamic,
       "register"         => register.to_dynamic,
       "reinterpret_cast" => reinterpret_cast.to_dynamic,
-      "repeat"           => repeat.to_dynamic,
-      "required"         => required.to_dynamic,
-      "requires"         => requires.to_dynamic,
     }
   end
 
@@ -7348,6 +7320,31 @@ class KSerializer < Dry::Struct
   end
 end
 
+class Require < Dry::Struct
+  attribute :require_require, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      require_require: d.fetch("require"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "require" => require_require,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Return < Dry::Struct
   attribute :return_return, Types::Integer
 
@@ -7573,13 +7570,13 @@ class True < Dry::Struct
   end
 end
 
-class Try < Dry::Struct
-  attribute :try_try, Types::Integer
+class PrimitiveKind < Dry::Struct
+  attribute :primitive_kind, Types::Integer
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
-      try_try: d.fetch("try"),
+      primitive_kind: d.fetch("PrimitiveKind"),
     )
   end
 
@@ -7589,7 +7586,7 @@ class Try < Dry::Struct
 
   def to_dynamic
     {
-      "try" => try_try,
+      "PrimitiveKind" => primitive_kind,
     }
   end
 
@@ -7598,13 +7595,13 @@ class Try < Dry::Struct
   end
 end
 
-class Type < Dry::Struct
-  attribute :type_type, Types::Integer
+class Repeat < Dry::Struct
+  attribute :repeat, Types::Integer
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
-      type_type: d.fetch("Type"),
+      repeat: d.fetch("repeat"),
     )
   end
 
@@ -7614,7 +7611,7 @@ class Type < Dry::Struct
 
   def to_dynamic
     {
-      "Type" => type_type,
+      "repeat" => repeat,
     }
   end
 
@@ -7623,13 +7620,13 @@ class Type < Dry::Struct
   end
 end
 
-class PrimitiveKind < Dry::Struct
-  attribute :primitive_kind, Types::Integer
+class Required < Dry::Struct
+  attribute :required, Types::Integer
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
-      primitive_kind: d.fetch("PrimitiveKind"),
+      required: d.fetch("required"),
     )
   end
 
@@ -7639,7 +7636,32 @@ class PrimitiveKind < Dry::Struct
 
   def to_dynamic
     {
-      "PrimitiveKind" => primitive_kind,
+      "required" => required,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class Requires < Dry::Struct
+  attribute :requires, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      requires: d.fetch("requires"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "requires" => requires,
     }
   end
 
@@ -8873,59 +8895,10 @@ class Obj5True < Dry::Struct
   end
 end
 
-class TypeClass < Dry::Struct
-  attribute :type_type, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      type_type: d.fetch("type"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "type" => type_type,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
-class Typealias < Dry::Struct
-  attribute :typealias, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      typealias: d.fetch("typealias"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "typealias" => typealias,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
 class Obj5 < Dry::Struct
   attribute :dummy,                 Types::Integer
   attribute :k_serializer,          KSerializer
+  attribute :obj5_require,          Require
   attribute :obj5_return,           Return
   attribute :obj5_select,           Select
   attribute :obj5_self,             SelfClass
@@ -8935,9 +8908,10 @@ class Obj5 < Dry::Struct
   attribute :obj5_throw,            Throw
   attribute :obj5_to_json,          ToJSON
   attribute :obj5_true,             True
-  attribute :obj5_try,              Try
-  attribute :obj5_type,             Type
   attribute :primitive_kind,        PrimitiveKind
+  attribute :repeat,                Repeat
+  attribute :required,              Required
+  attribute :requires,              Requires
   attribute :restrict,              Restrict
   attribute :retain,                Retain
   attribute :rethrows,              Rethrows
@@ -8987,14 +8961,13 @@ class Obj5 < Dry::Struct
   attribute :top_level,             TopLevelClass
   attribute :transient,             Transient
   attribute :true_1,                Obj5True
-  attribute :type_1,                TypeClass
-  attribute :typealias,             Typealias
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
       dummy:                 d.fetch("dummy"),
       k_serializer:          KSerializer.from_dynamic!(d.fetch("KSerializer")),
+      obj5_require:          Require.from_dynamic!(d.fetch("require")),
       obj5_return:           Return.from_dynamic!(d.fetch("return")),
       obj5_select:           Select.from_dynamic!(d.fetch("select")),
       obj5_self:             SelfClass.from_dynamic!(d.fetch("Self")),
@@ -9004,9 +8977,10 @@ class Obj5 < Dry::Struct
       obj5_throw:            Throw.from_dynamic!(d.fetch("throw")),
       obj5_to_json:          ToJSON.from_dynamic!(d.fetch("to_json")),
       obj5_true:             True.from_dynamic!(d.fetch("True")),
-      obj5_try:              Try.from_dynamic!(d.fetch("try")),
-      obj5_type:             Type.from_dynamic!(d.fetch("Type")),
       primitive_kind:        PrimitiveKind.from_dynamic!(d.fetch("PrimitiveKind")),
+      repeat:                Repeat.from_dynamic!(d.fetch("repeat")),
+      required:              Required.from_dynamic!(d.fetch("required")),
+      requires:              Requires.from_dynamic!(d.fetch("requires")),
       restrict:              Restrict.from_dynamic!(d.fetch("restrict")),
       retain:                Retain.from_dynamic!(d.fetch("retain")),
       rethrows:              Rethrows.from_dynamic!(d.fetch("rethrows")),
@@ -9056,8 +9030,6 @@ class Obj5 < Dry::Struct
       top_level:             TopLevelClass.from_dynamic!(d.fetch("top_level")),
       transient:             Transient.from_dynamic!(d.fetch("transient")),
       true_1:                Obj5True.from_dynamic!(d.fetch("true")),
-      type_1:                TypeClass.from_dynamic!(d.fetch("type")),
-      typealias:             Typealias.from_dynamic!(d.fetch("typealias")),
     )
   end
 
@@ -9069,6 +9041,7 @@ class Obj5 < Dry::Struct
     {
       "dummy"                => dummy,
       "KSerializer"          => k_serializer.to_dynamic,
+      "require"              => obj5_require.to_dynamic,
       "return"               => obj5_return.to_dynamic,
       "select"               => obj5_select.to_dynamic,
       "Self"                 => obj5_self.to_dynamic,
@@ -9078,9 +9051,10 @@ class Obj5 < Dry::Struct
       "throw"                => obj5_throw.to_dynamic,
       "to_json"              => obj5_to_json.to_dynamic,
       "True"                 => obj5_true.to_dynamic,
-      "try"                  => obj5_try.to_dynamic,
-      "Type"                 => obj5_type.to_dynamic,
       "PrimitiveKind"        => primitive_kind.to_dynamic,
+      "repeat"               => repeat.to_dynamic,
+      "required"             => required.to_dynamic,
+      "requires"             => requires.to_dynamic,
       "restrict"             => restrict.to_dynamic,
       "retain"               => retain.to_dynamic,
       "rethrows"             => rethrows.to_dynamic,
@@ -9130,8 +9104,56 @@ class Obj5 < Dry::Struct
       "top_level"            => top_level.to_dynamic,
       "transient"            => transient.to_dynamic,
       "true"                 => true_1.to_dynamic,
-      "type"                 => type_1.to_dynamic,
-      "typealias"            => typealias.to_dynamic,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class Try < Dry::Struct
+  attribute :try_try, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      try_try: d.fetch("try"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "try" => try_try,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class Type < Dry::Struct
+  attribute :type_type, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      type_type: d.fetch("Type"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "Type" => type_type,
     }
   end
 
@@ -9215,6 +9237,56 @@ class Yield < Dry::Struct
   end
 end
 
+class TypeClass < Dry::Struct
+  attribute :type_type, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      type_type: d.fetch("type"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "type" => type_type,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class Typealias < Dry::Struct
+  attribute :typealias, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      typealias: d.fetch("typealias"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "typealias" => typealias,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Typedef < Dry::Struct
   attribute :typedef, Types::Integer
 
@@ -9967,9 +10039,13 @@ end
 
 class Obj6 < Dry::Struct
   attribute :dummy,            Types::Integer
+  attribute :obj6_try,         Try
+  attribute :obj6_type,        Type
   attribute :obj6_while,       While
   attribute :obj6_with,        With
   attribute :obj6_yield,       Yield
+  attribute :type_1,           TypeClass
+  attribute :typealias,        Typealias
   attribute :typedef,          Typedef
   attribute :typeid,           Typeid
   attribute :typename,         Typename
@@ -10005,9 +10081,13 @@ class Obj6 < Dry::Struct
     d = Types::Hash[d]
     new(
       dummy:            d.fetch("dummy"),
+      obj6_try:         Try.from_dynamic!(d.fetch("try")),
+      obj6_type:        Type.from_dynamic!(d.fetch("Type")),
       obj6_while:       While.from_dynamic!(d.fetch("while")),
       obj6_with:        With.from_dynamic!(d.fetch("with")),
       obj6_yield:       Yield.from_dynamic!(d.fetch("yield")),
+      type_1:           TypeClass.from_dynamic!(d.fetch("type")),
+      typealias:        Typealias.from_dynamic!(d.fetch("typealias")),
       typedef:          Typedef.from_dynamic!(d.fetch("typedef")),
       typeid:           Typeid.from_dynamic!(d.fetch("typeid")),
       typename:         Typename.from_dynamic!(d.fetch("typename")),
@@ -10048,9 +10128,13 @@ class Obj6 < Dry::Struct
   def to_dynamic
     {
       "dummy"          => dummy,
+      "try"            => obj6_try.to_dynamic,
+      "Type"           => obj6_type.to_dynamic,
       "while"          => obj6_while.to_dynamic,
       "with"           => obj6_with.to_dynamic,
       "yield"          => obj6_yield.to_dynamic,
+      "type"           => type_1.to_dynamic,
+      "typealias"      => typealias.to_dynamic,
       "typedef"        => typedef.to_dynamic,
       "typeid"         => typeid.to_dynamic,
       "typename"       => typename.to_dynamic,
diff --git a/base/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs b/head/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs
index fdc9098..2b3ac95 100644
--- a/base/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs
+++ b/head/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs
@@ -1164,6 +1164,9 @@ pub struct Obj3 {
 
     pub list: List,
 
+    #[serde(rename = "LocalDate")]
+    pub local_date: LocalDate,
+
     #[serde(rename = "Locale")]
     pub locale: Locale,
 
@@ -1186,10 +1189,6 @@ pub struct Obj3 {
 
     pub module: Module,
 
-    pub mutable: Mutable,
-
-    pub mutating: Mutating,
-
     #[serde(rename = "if")]
     pub obj3_if: If,
 
@@ -1478,6 +1477,12 @@ pub struct List {
     pub list: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "PascalCase")]
+pub struct LocalDate {
+    pub local_date: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(rename_all = "PascalCase")]
 pub struct Locale {
@@ -1528,16 +1533,6 @@ pub struct Module {
     pub module: i64,
 }
 
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Mutable {
-    pub mutable: i64,
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Mutating {
-    pub mutating: i64,
-}
-
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct If {
     #[serde(rename = "if")]
@@ -1560,6 +1555,10 @@ pub struct Let {
 pub struct Obj4 {
     pub dummy: i64,
 
+    pub mutable: Mutable,
+
+    pub mutating: Mutating,
+
     pub namespace: Namespace,
 
     pub native: Native,
@@ -1641,6 +1640,12 @@ pub struct Obj4 {
 
     pub of: Of,
 
+    #[serde(rename = "OffsetDateTime")]
+    pub offset_date_time: OffsetDateTime,
+
+    #[serde(rename = "OffsetTime")]
+    pub offset_time: OffsetTime,
+
     pub oneway: Oneway,
 
     pub open: Open,
@@ -1699,14 +1704,16 @@ pub struct Obj4 {
     pub register: Register,
 
     pub reinterpret_cast: ReinterpretCast,
+}
 
-    pub repeat: Repeat,
-
-    pub require: Require,
-
-    pub required: Required,
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Mutable {
+    pub mutable: i64,
+}
 
-    pub requires: Requires,
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Mutating {
+    pub mutating: i64,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -1886,6 +1893,18 @@ pub struct Of {
     pub of: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "PascalCase")]
+pub struct OffsetDateTime {
+    pub offset_date_time: i64,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "PascalCase")]
+pub struct OffsetTime {
+    pub offset_time: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Oneway {
     pub oneway: i64,
@@ -2029,26 +2048,6 @@ pub struct ReinterpretCast {
     pub reinterpret_cast: i64,
 }
 
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Repeat {
-    pub repeat: i64,
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Require {
-    pub require: i64,
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Required {
-    pub required: i64,
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Requires {
-    pub requires: i64,
-}
-
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Obj5 {
     pub dummy: i64,
@@ -2077,9 +2076,6 @@ pub struct Obj5 {
     #[serde(rename = "True")]
     pub obj5_true: True,
 
-    #[serde(rename = "Type")]
-    pub obj5_type: Type,
-
     #[serde(rename = "PrimitiveKind")]
     pub primitive_kind: PrimitiveKind,
 
@@ -2089,8 +2085,13 @@ pub struct Obj5 {
     #[serde(rename = "true")]
     pub purple_true: TrueClass,
 
-    #[serde(rename = "type")]
-    pub purple_type: TypeClass,
+    pub repeat: Repeat,
+
+    pub require: Require,
+
+    pub required: Required,
+
+    pub requires: Requires,
 
     pub restrict: Restrict,
 
@@ -2206,10 +2207,6 @@ pub struct Obj5 {
     pub top_level: TopLevelClass,
 
     pub transient: Transient,
-
-    pub try: Try,
-
-    pub typealias: Typealias,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -2262,13 +2259,6 @@ pub struct True {
     pub true_true: i64,
 }
 
-#[derive(Debug, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "PascalCase")]
-pub struct Type {
-    #[serde(rename = "Type")]
-    pub type_type: i64,
-}
-
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(rename_all = "PascalCase")]
 pub struct PrimitiveKind {
@@ -2288,9 +2278,23 @@ pub struct TrueClass {
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct TypeClass {
-    #[serde(rename = "type")]
-    pub type_type: i64,
+pub struct Repeat {
+    pub repeat: i64,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Require {
+    pub require: i64,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Required {
+    pub required: i64,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Requires {
+    pub requires: i64,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -2555,20 +2559,13 @@ pub struct Transient {
     pub transient: i64,
 }
 
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Try {
-    pub try: i64,
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Typealias {
-    pub typealias: i64,
-}
-
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Obj6 {
     pub dummy: i64,
 
+    #[serde(rename = "Type")]
+    pub obj6_type: Type,
+
     #[serde(rename = "typeof")]
     pub obj6_typeof: Typeof,
 
@@ -2590,6 +2587,13 @@ pub struct Obj6 {
     #[serde(rename = "yield")]
     pub obj6_yield: Yield,
 
+    #[serde(rename = "type")]
+    pub purple_type: TypeClass,
+
+    pub try: Try,
+
+    pub typealias: Typealias,
+
     pub typedef: Typedef,
 
     pub typeid: Typeid,
@@ -2650,6 +2654,13 @@ pub struct Obj6 {
     pub yes: Yes,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "PascalCase")]
+pub struct Type {
+    #[serde(rename = "Type")]
+    pub type_type: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Typeof {
     #[serde(rename = "typeof")]
@@ -2692,6 +2703,22 @@ pub struct Yield {
     pub yield_yield: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct TypeClass {
+    #[serde(rename = "type")]
+    pub type_type: i64,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Try {
+    pub try: i64,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Typealias {
+    pub typealias: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Typedef {
     pub typedef: i64,
diff --git a/base/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala b/head/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala
index 11d719b..43c8ae4 100644
--- a/base/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala
+++ b/head/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala
@@ -759,6 +759,7 @@ case class Obj3 (
     val left : Left,
     val let : Let,
     val list : ListClass,
+    val LocalDate : LocalDate,
     val Locale : Locale,
     val lock : Lock,
     val long : LongClass,
@@ -768,8 +769,6 @@ case class Obj3 (
     val MarshalJSON : MarshalJSON,
     val metadata_property_handling : MetadataPropertyHandling,
     val module : Module,
-    val mutable : Mutable,
-    val mutating : Mutating,
     val `if` : If,
     val `implicit` : Implicit,
     val `import` : Import,
@@ -994,6 +993,10 @@ case class ListClass (
     val list : Long
 ) derives Encoder.AsObject, Decoder
 
+case class LocalDate (
+    val LocalDate : Long
+) derives Encoder.AsObject, Decoder
+
 case class Locale (
     val Locale : Long
 ) derives Encoder.AsObject, Decoder
@@ -1030,14 +1033,6 @@ case class Module (
     val module : Long
 ) derives Encoder.AsObject, Decoder
 
-case class Mutable (
-    val mutable : Long
-) derives Encoder.AsObject, Decoder
-
-case class Mutating (
-    val mutating : Long
-) derives Encoder.AsObject, Decoder
-
 case class If (
     val `if` : Long
 ) derives Encoder.AsObject, Decoder
@@ -1056,6 +1051,8 @@ case class Lazy (
 
 case class Obj4 (
     val dummy : Long,
+    val mutable : Mutable,
+    val mutating : Mutating,
     val namespace : Namespace,
     val native : Native,
     val newtonsoft : Newtonsoft,
@@ -1090,6 +1087,8 @@ case class Obj4 (
     val ObjectReader : ObjectReader,
     val ObjectWriter : ObjectWriter,
     val of : Of,
+    val OffsetDateTime : OffsetDateTime,
+    val OffsetTime : OffsetTime,
     val oneway : Oneway,
     val open : Open,
     val operator : Operator,
@@ -1115,11 +1114,15 @@ case class Obj4 (
     val ref : Ref,
     val RegExp : RegExp,
     val register : Register,
-    val reinterpret_cast : ReinterpretCast,
-    val repeat : Repeat,
-    val require : Require,
-    val required : Required,
-    val requires : Requires
+    val reinterpret_cast : ReinterpretCast
+) derives Encoder.AsObject, Decoder
+
+case class Mutable (
+    val mutable : Long
+) derives Encoder.AsObject, Decoder
+
+case class Mutating (
+    val mutating : Long
 ) derives Encoder.AsObject, Decoder
 
 case class Namespace (
@@ -1258,6 +1261,14 @@ case class Of (
     val of : Long
 ) derives Encoder.AsObject, Decoder
 
+case class OffsetDateTime (
+    val OffsetDateTime : Long
+) derives Encoder.AsObject, Decoder
+
+case class OffsetTime (
+    val OffsetTime : Long
+) derives Encoder.AsObject, Decoder
+
 case class Oneway (
     val oneway : Long
 ) derives Encoder.AsObject, Decoder
@@ -1362,22 +1373,6 @@ case class ReinterpretCast (
     val reinterpret_cast : Long
 ) derives Encoder.AsObject, Decoder
 
-case class Repeat (
-    val repeat : Long
-) derives Encoder.AsObject, Decoder
-
-case class Require (
-    val require : Long
-) derives Encoder.AsObject, Decoder
-
-case class Required (
-    val required : Long
-) derives Encoder.AsObject, Decoder
-
-case class Requires (
-    val requires : Long
-) derives Encoder.AsObject, Decoder
-
 case class Obj5 (
     val dummy : Long,
     val KSerializer : KSerializer,
@@ -1389,11 +1384,12 @@ case class Obj5 (
     val `this` : This,
     val `throw` : Throw,
     val True : True,
-    val `try` : Try,
-    val Type : Type,
     val PrimitiveKind : PrimitiveKind,
     val `true` : TrueClass,
-    val `type` : TypeClass,
+    val repeat : Repeat,
+    val require : Require,
+    val required : Required,
+    val requires : Requires,
     val restrict : Restrict,
     val retain : Retain,
     val rethrows : Rethrows,
@@ -1442,8 +1438,7 @@ case class Obj5 (
     val to_json : ToJSON,
     val toStringValue : ToString,
     val top_level : TopLevelClass,
-    val transient : Transient,
-    val typealias : Typealias
+    val transient : Transient
 )
 
 object Obj5:
@@ -1492,14 +1487,6 @@ case class True (
     val True : Long
 ) derives Encoder.AsObject, Decoder
 
-case class Try (
-    val `try` : Long
-) derives Encoder.AsObject, Decoder
-
-case class Type (
-    val Type : Long
-) derives Encoder.AsObject, Decoder
-
 case class PrimitiveKind (
     val PrimitiveKind : Long
 ) derives Encoder.AsObject, Decoder
@@ -1508,8 +1495,20 @@ case class TrueClass (
     val `true` : Long
 ) derives Encoder.AsObject, Decoder
 
-case class TypeClass (
-    val `type` : Long
+case class Repeat (
+    val repeat : Long
+) derives Encoder.AsObject, Decoder
+
+case class Require (
+    val require : Long
+) derives Encoder.AsObject, Decoder
+
+case class Required (
+    val required : Long
+) derives Encoder.AsObject, Decoder
+
+case class Requires (
+    val requires : Long
 ) derives Encoder.AsObject, Decoder
 
 case class Restrict (
@@ -1726,16 +1725,16 @@ case class Transient (
     val transient : Long
 ) derives Encoder.AsObject, Decoder
 
-case class Typealias (
-    val typealias : Long
-) derives Encoder.AsObject, Decoder
-
 case class Obj6 (
     val dummy : Long,
+    val `try` : Try,
+    val Type : Type,
     val `var` : Var,
     val `while` : While,
     val `with` : With,
     val `yield` : Yield,
+    val `type` : TypeClass,
+    val typealias : Typealias,
     val typedef : Typedef,
     val typeid : Typeid,
     val typename : Typename,
@@ -1767,6 +1766,14 @@ case class Obj6 (
     val YES : Yes
 ) derives Encoder.AsObject, Decoder
 
+case class Try (
+    val `try` : Long
+) derives Encoder.AsObject, Decoder
+
+case class Type (
+    val Type : Long
+) derives Encoder.AsObject, Decoder
+
 case class Var (
     val `var` : Long
 ) derives Encoder.AsObject, Decoder
@@ -1783,6 +1790,14 @@ case class Yield (
     val `yield` : Long
 ) derives Encoder.AsObject, Decoder
 
+case class TypeClass (
+    val `type` : Long
+) derives Encoder.AsObject, Decoder
+
+case class Typealias (
+    val typealias : Long
+) derives Encoder.AsObject, Decoder
+
 case class Typedef (
     val typedef : Long
 ) derives Encoder.AsObject, Decoder
diff --git a/base/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala b/head/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala
index 8b3627b..2419496 100644
--- a/base/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala
+++ b/head/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala
@@ -809,6 +809,7 @@ case class Obj3 (
     val left : Left,
     val let : Let,
     val list : ListClass,
+    val LocalDate : LocalDate,
     val Locale : Locale,
     val lock : Lock,
     val long : LongClass,
@@ -818,8 +819,6 @@ case class Obj3 (
     val MarshalJSON : MarshalJSON,
     val metadata_property_handling : MetadataPropertyHandling,
     val module : Module,
-    val mutable : Mutable,
-    val mutating : Mutating,
     val `if` : If,
     val `implicit` : Implicit,
     val `import` : Import,
@@ -1027,6 +1026,10 @@ case class ListClass (
     val list : Long
 ) derives OptionPickler.ReadWriter
 
+case class LocalDate (
+    val LocalDate : Long
+) derives OptionPickler.ReadWriter
+
 case class Locale (
     val Locale : Long
 ) derives OptionPickler.ReadWriter
@@ -1063,14 +1066,6 @@ case class Module (
     val module : Long
 ) derives OptionPickler.ReadWriter
 
-case class Mutable (
-    val mutable : Long
-) derives OptionPickler.ReadWriter
-
-case class Mutating (
-    val mutating : Long
-) derives OptionPickler.ReadWriter
-
 case class If (
     val `if` : Long
 ) derives OptionPickler.ReadWriter
@@ -1089,6 +1084,8 @@ case class Lazy (
 
 case class Obj4 (
     val dummy : Long,
+    val mutable : Mutable,
+    val mutating : Mutating,
     val namespace : Namespace,
     val native : Native,
     val newtonsoft : Newtonsoft,
@@ -1123,6 +1120,8 @@ case class Obj4 (
     val ObjectReader : ObjectReader,
     val ObjectWriter : ObjectWriter,
     val of : Of,
+    val OffsetDateTime : OffsetDateTime,
+    val OffsetTime : OffsetTime,
     val oneway : Oneway,
     val open : Open,
     val operator : Operator,
@@ -1148,11 +1147,15 @@ case class Obj4 (
     val ref : Ref,
     val RegExp : RegExp,
     val register : Register,
-    val reinterpret_cast : ReinterpretCast,
-    val repeat : Repeat,
-    val require : Require,
-    val required : Required,
-    val requires : Requires
+    val reinterpret_cast : ReinterpretCast
+) derives OptionPickler.ReadWriter
+
+case class Mutable (
+    val mutable : Long
+) derives OptionPickler.ReadWriter
+
+case class Mutating (
+    val mutating : Long
 ) derives OptionPickler.ReadWriter
 
 case class Namespace (
@@ -1291,6 +1294,14 @@ case class Of (
     val of : Long
 ) derives OptionPickler.ReadWriter
 
+case class OffsetDateTime (
+    val OffsetDateTime : Long
+) derives OptionPickler.ReadWriter
+
+case class OffsetTime (
+    val OffsetTime : Long
+) derives OptionPickler.ReadWriter
+
 case class Oneway (
     val oneway : Long
 ) derives OptionPickler.ReadWriter
@@ -1395,22 +1406,6 @@ case class ReinterpretCast (
     val reinterpret_cast : Long
 ) derives OptionPickler.ReadWriter
 
-case class Repeat (
-    val repeat : Long
-) derives OptionPickler.ReadWriter
-
-case class Require (
-    val require : Long
-) derives OptionPickler.ReadWriter
-
-case class Required (
-    val required : Long
-) derives OptionPickler.ReadWriter
-
-case class Requires (
-    val requires : Long
-) derives OptionPickler.ReadWriter
-
 case class Obj5 (
     val dummy : Long,
     val KSerializer : KSerializer,
@@ -1422,11 +1417,12 @@ case class Obj5 (
     val `this` : This,
     val `throw` : Throw,
     val True : True,
-    val `try` : Try,
-    val Type : Type,
     val PrimitiveKind : PrimitiveKind,
     val `true` : TrueClass,
-    val `type` : TypeClass,
+    val repeat : Repeat,
+    val require : Require,
+    val required : Required,
+    val requires : Requires,
     val restrict : Restrict,
     val retain : Retain,
     val rethrows : Rethrows,
@@ -1477,8 +1473,7 @@ case class Obj5 (
     @upickle.implicits.key("toString")
     val toStringValue : ToString,
     val top_level : TopLevelClass,
-    val transient : Transient,
-    val typealias : Typealias
+    val transient : Transient
 ) derives OptionPickler.ReadWriter
 
 case class KSerializer (
@@ -1517,14 +1512,6 @@ case class True (
     val True : Long
 ) derives OptionPickler.ReadWriter
 
-case class Try (
-    val `try` : Long
-) derives OptionPickler.ReadWriter
-
-case class Type (
-    val Type : Long
-) derives OptionPickler.ReadWriter
-
 case class PrimitiveKind (
     val PrimitiveKind : Long
 ) derives OptionPickler.ReadWriter
@@ -1533,8 +1520,20 @@ case class TrueClass (
     val `true` : Long
 ) derives OptionPickler.ReadWriter
 
-case class TypeClass (
-    val `type` : Long
+case class Repeat (
+    val repeat : Long
+) derives OptionPickler.ReadWriter
+
+case class Require (
+    val require : Long
+) derives OptionPickler.ReadWriter
+
+case class Required (
+    val required : Long
+) derives OptionPickler.ReadWriter
+
+case class Requires (
+    val requires : Long
 ) derives OptionPickler.ReadWriter
 
 case class Restrict (
@@ -1735,16 +1734,16 @@ case class Transient (
     val transient : Long
 ) derives OptionPickler.ReadWriter
 
-case class Typealias (
-    val typealias : Long
-) derives OptionPickler.ReadWriter
-
 case class Obj6 (
     val dummy : Long,
+    val `try` : Try,
+    val Type : Type,
     val `var` : Var,
     val `while` : While,
     val `with` : With,
     val `yield` : Yield,
+    val `type` : TypeClass,
+    val typealias : Typealias,
     val typedef : Typedef,
     val typeid : Typeid,
     val typename : Typename,
@@ -1776,6 +1775,14 @@ case class Obj6 (
     val YES : Yes
 ) derives OptionPickler.ReadWriter
 
+case class Try (
+    val `try` : Long
+) derives OptionPickler.ReadWriter
+
+case class Type (
+    val Type : Long
+) derives OptionPickler.ReadWriter
+
 case class Var (
     val `var` : Long
 ) derives OptionPickler.ReadWriter
@@ -1792,6 +1799,14 @@ case class Yield (
     val `yield` : Long
 ) derives OptionPickler.ReadWriter
 
+case class TypeClass (
+    val `type` : Long
+) derives OptionPickler.ReadWriter
+
+case class Typealias (
+    val typealias : Long
+) derives OptionPickler.ReadWriter
+
 case class Typedef (
     val typedef : Long
 ) derives OptionPickler.ReadWriter
diff --git a/base/schema-cjson/test/inputs/schema/date-time.schema/default/TopLevel.c b/head/schema-cjson/test/inputs/schema/date-time.schema/default/TopLevel.c
index 3a46a64..05a99ad 100644
--- a/base/schema-cjson/test/inputs/schema/date-time.schema/default/TopLevel.c
+++ b/head/schema-cjson/test/inputs/schema/date-time.schema/default/TopLevel.c
@@ -48,6 +48,153 @@ void cJSON_DeleteComplexUnionArray(struct ComplexUnionArray * x) {
     }
 }
 
+struct LocalDate * cJSON_ParseLocalDate(const char * s) {
+    struct LocalDate * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetLocalDateValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct LocalDate * cJSON_GetLocalDateValue(const cJSON * j) {
+    struct LocalDate * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct LocalDate)))) {
+            memset(x, 0, sizeof(struct LocalDate));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateLocalDate(const struct LocalDate * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintLocalDate(const struct LocalDate * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateLocalDate(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteLocalDate(struct LocalDate * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
+struct OffsetDateTime * cJSON_ParseOffsetDateTime(const char * s) {
+    struct OffsetDateTime * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetOffsetDateTimeValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct OffsetDateTime * cJSON_GetOffsetDateTimeValue(const cJSON * j) {
+    struct OffsetDateTime * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct OffsetDateTime)))) {
+            memset(x, 0, sizeof(struct OffsetDateTime));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateOffsetDateTime(const struct OffsetDateTime * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintOffsetDateTime(const struct OffsetDateTime * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateOffsetDateTime(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteOffsetDateTime(struct OffsetDateTime * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
+struct OffsetTime * cJSON_ParseOffsetTime(const char * s) {
+    struct OffsetTime * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetOffsetTimeValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct OffsetTime * cJSON_GetOffsetTimeValue(const cJSON * j) {
+    struct OffsetTime * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct OffsetTime)))) {
+            memset(x, 0, sizeof(struct OffsetTime));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateOffsetTime(const struct OffsetTime * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintOffsetTime(const struct OffsetTime * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateOffsetTime(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteOffsetTime(struct OffsetTime * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct TopLevel * cJSON_ParseTopLevel(const char * s) {
     struct TopLevel * x = NULL;
     if (NULL != s) {
@@ -103,6 +250,21 @@ struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
                     x->date_time[0] = '\0';
                 }
             }
+            if (cJSON_HasObjectItem(j, "local-date-class")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "local-date-class"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->local_date_class = cJSON_GetLocalDateValue(cJSON_GetObjectItemCaseSensitive(j, "local-date-class"));
+                if (NULL == x->local_date_class) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
+            if (cJSON_HasObjectItem(j, "offset-date-time-class")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "offset-date-time-class"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->offset_date_time_class = cJSON_GetOffsetDateTimeValue(cJSON_GetObjectItemCaseSensitive(j, "offset-date-time-class"));
+                if (NULL == x->offset_date_time_class) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
+            if (cJSON_HasObjectItem(j, "offset-time-class")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "offset-time-class"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->offset_time_class = cJSON_GetOffsetTimeValue(cJSON_GetObjectItemCaseSensitive(j, "offset-time-class"));
+                if (NULL == x->offset_time_class) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "time")) { cJSON_DeleteTopLevel(x); return NULL; }
             if (cJSON_HasObjectItem(j, "time")) {
                 if (!cJSON_IsString(cJSON_GetObjectItemCaseSensitive(j, "time"))) { cJSON_DeleteTopLevel(x); return NULL; }
@@ -160,6 +322,15 @@ cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
             else {
                 cJSON_AddStringToObject(j, "date-time", "");
             }
+            if (NULL != x->local_date_class) {
+                cJSON_AddItemToObject(j, "local-date-class", cJSON_CreateLocalDate(x->local_date_class));
+            }
+            if (NULL != x->offset_date_time_class) {
+                cJSON_AddItemToObject(j, "offset-date-time-class", cJSON_CreateOffsetDateTime(x->offset_date_time_class));
+            }
+            if (NULL != x->offset_time_class) {
+                cJSON_AddItemToObject(j, "offset-time-class", cJSON_CreateOffsetTime(x->offset_time_class));
+            }
             if (NULL != x->time) {
                 cJSON_AddStringToObject(j, "time", x->time);
             }
@@ -209,6 +380,15 @@ void cJSON_DeleteTopLevel(struct TopLevel * x) {
         if (NULL != x->date_time) {
             cJSON_free(x->date_time);
         }
+        if (NULL != x->local_date_class) {
+            cJSON_DeleteLocalDate(x->local_date_class);
+        }
+        if (NULL != x->offset_date_time_class) {
+            cJSON_DeleteOffsetDateTime(x->offset_date_time_class);
+        }
+        if (NULL != x->offset_time_class) {
+            cJSON_DeleteOffsetTime(x->offset_time_class);
+        }
         if (NULL != x->time) {
             cJSON_free(x->time);
         }
diff --git a/base/schema-cjson/test/inputs/schema/date-time.schema/default/TopLevel.h b/head/schema-cjson/test/inputs/schema/date-time.schema/default/TopLevel.h
index 7f98055..44fa1a4 100644
--- a/base/schema-cjson/test/inputs/schema/date-time.schema/default/TopLevel.h
+++ b/head/schema-cjson/test/inputs/schema/date-time.schema/default/TopLevel.h
@@ -56,10 +56,22 @@ struct ComplexUnionArray {
     } value;
 };
 
+struct LocalDate {
+};
+
+struct OffsetDateTime {
+};
+
+struct OffsetTime {
+};
+
 struct TopLevel {
     list_t * complex_union_array;
     char * date;
     char * date_time;
+    struct LocalDate * local_date_class;
+    struct OffsetDateTime * offset_date_time_class;
+    struct OffsetTime * offset_time_class;
     char * time;
     list_t * union_array;
 };
@@ -71,6 +83,24 @@ void cJSON_DeleteComplexUnionArray(struct ComplexUnionArray * x);
 struct ComplexUnionArray * cJSON_ParseComplexUnionArray(const char * s);
 char * cJSON_PrintComplexUnionArray(const struct ComplexUnionArray * x);
 
+struct LocalDate * cJSON_ParseLocalDate(const char * s);
+struct LocalDate * cJSON_GetLocalDateValue(const cJSON * j);
+cJSON * cJSON_CreateLocalDate(const struct LocalDate * x);
+char * cJSON_PrintLocalDate(const struct LocalDate * x);
+void cJSON_DeleteLocalDate(struct LocalDate * x);
+
+struct OffsetDateTime * cJSON_ParseOffsetDateTime(const char * s);
+struct OffsetDateTime * cJSON_GetOffsetDateTimeValue(const cJSON * j);
+cJSON * cJSON_CreateOffsetDateTime(const struct OffsetDateTime * x);
+char * cJSON_PrintOffsetDateTime(const struct OffsetDateTime * x);
+void cJSON_DeleteOffsetDateTime(struct OffsetDateTime * x);
+
+struct OffsetTime * cJSON_ParseOffsetTime(const char * s);
+struct OffsetTime * cJSON_GetOffsetTimeValue(const cJSON * j);
+cJSON * cJSON_CreateOffsetTime(const struct OffsetTime * x);
+char * cJSON_PrintOffsetTime(const struct OffsetTime * x);
+void cJSON_DeleteOffsetTime(struct OffsetTime * x);
+
 struct TopLevel * cJSON_ParseTopLevel(const char * s);
 struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j);
 cJSON * cJSON_CreateTopLevel(const struct TopLevel * x);
diff --git a/base/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.c b/head/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.c
index 1937ac3..d76b127 100644
--- a/base/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.c
+++ b/head/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.c
@@ -190,6 +190,7 @@ enum Enum cJSON_GetEnumValue(const cJSON * j) {
         else if (!strcmp(cJSON_GetStringValue(j), "left")) x = ENUM_LEFT;
         else if (!strcmp(cJSON_GetStringValue(j), "let")) x = ENUM_LET;
         else if (!strcmp(cJSON_GetStringValue(j), "list")) x = ENUM_LIST;
+        else if (!strcmp(cJSON_GetStringValue(j), "LocalDate")) x = ENUM_LOCAL_DATE;
         else if (!strcmp(cJSON_GetStringValue(j), "LongNode")) x = ENUM_LONG_NODE;
         else if (!strcmp(cJSON_GetStringValue(j), "Locale")) x = ENUM_LOCALE;
         else if (!strcmp(cJSON_GetStringValue(j), "lock")) x = ENUM_LOCK;
@@ -225,6 +226,8 @@ enum Enum cJSON_GetEnumValue(const cJSON * j) {
         else if (!strcmp(cJSON_GetStringValue(j), "nullptr")) x = ENUM_NULLPTR;
         else if (!strcmp(cJSON_GetStringValue(j), "number")) x = ENUM_NUMBER;
         else if (!strcmp(cJSON_GetStringValue(j), "object")) x = ENUM_OBJECT;
+        else if (!strcmp(cJSON_GetStringValue(j), "OffsetDateTime")) x = ENUM_OFFSET_DATE_TIME;
+        else if (!strcmp(cJSON_GetStringValue(j), "OffsetTime")) x = ENUM_OFFSET_TIME;
         else if (!strcmp(cJSON_GetStringValue(j), "ObjectNode")) x = ENUM_OBJECT_NODE;
         else if (!strcmp(cJSON_GetStringValue(j), "ObjectMapper")) x = ENUM_OBJECT_MAPPER;
         else if (!strcmp(cJSON_GetStringValue(j), "ObjectReader")) x = ENUM_OBJECT_READER;
@@ -552,6 +555,7 @@ cJSON * cJSON_CreateEnum(const enum Enum x) {
         case ENUM_LEFT: j = cJSON_CreateString("left"); break;
         case ENUM_LET: j = cJSON_CreateString("let"); break;
         case ENUM_LIST: j = cJSON_CreateString("list"); break;
+        case ENUM_LOCAL_DATE: j = cJSON_CreateString("LocalDate"); break;
         case ENUM_LONG_NODE: j = cJSON_CreateString("LongNode"); break;
         case ENUM_LOCALE: j = cJSON_CreateString("Locale"); break;
         case ENUM_LOCK: j = cJSON_CreateString("lock"); break;
@@ -587,6 +591,8 @@ cJSON * cJSON_CreateEnum(const enum Enum x) {
         case ENUM_NULLPTR: j = cJSON_CreateString("nullptr"); break;
         case ENUM_NUMBER: j = cJSON_CreateString("number"); break;
         case ENUM_OBJECT: j = cJSON_CreateString("object"); break;
+        case ENUM_OFFSET_DATE_TIME: j = cJSON_CreateString("OffsetDateTime"); break;
+        case ENUM_OFFSET_TIME: j = cJSON_CreateString("OffsetTime"); break;
         case ENUM_OBJECT_NODE: j = cJSON_CreateString("ObjectNode"); break;
         case ENUM_OBJECT_MAPPER: j = cJSON_CreateString("ObjectMapper"); break;
         case ENUM_OBJECT_READER: j = cJSON_CreateString("ObjectReader"); break;
diff --git a/base/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.h b/head/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.h
index c1f23bc..e033152 100644
--- a/base/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.h
+++ b/head/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.h
@@ -231,6 +231,7 @@ enum Enum {
     ENUM_LEFT,
     ENUM_LET,
     ENUM_LIST,
+    ENUM_LOCAL_DATE,
     ENUM_LONG_NODE,
     ENUM_LOCALE,
     ENUM_LOCK,
@@ -266,6 +267,8 @@ enum Enum {
     ENUM_NULLPTR,
     ENUM_NUMBER,
     ENUM_OBJECT,
+    ENUM_OFFSET_DATE_TIME,
+    ENUM_OFFSET_TIME,
     ENUM_OBJECT_NODE,
     ENUM_OBJECT_MAPPER,
     ENUM_OBJECT_READER,
diff --git a/base/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.c b/head/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.c
index 4577cbc..e02eeb7 100644
--- a/base/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.c
+++ b/head/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.c
@@ -5725,6 +5725,50 @@ void cJSON_DeleteUnionList(struct UnionList * x) {
     }
 }
 
+struct UnionLocalDate * cJSON_GetUnionLocalDateValue(const cJSON * j) {
+    struct UnionLocalDate * x = cJSON_malloc(sizeof(struct UnionLocalDate));
+    if (NULL != x) {
+        memset(x, 0, sizeof(struct UnionLocalDate));
+        if (cJSON_IsNumber(j)) {
+            x->type = cJSON_Number;
+            x->value.number = cJSON_GetNumberValue(j);
+        }
+        else if (cJSON_IsObject(j)) {
+            x->type = cJSON_Object;
+            x->value.local_date = cJSON_GetLocalDateValue(j);
+            if (NULL == x->value.local_date) x->type = 0;
+        }
+        if (0 == x->type) { cJSON_free(x); return NULL; }
+    }
+    return x;
+}
+struct UnionLocalDate * cJSON_ParseUnionLocalDate(const char * s) { cJSON * j = cJSON_Parse(s); struct UnionLocalDate * x = j ? cJSON_GetUnionLocalDateValue(j) : NULL; cJSON_Delete(j); return x; }
+char * cJSON_PrintUnionLocalDate(const struct UnionLocalDate * x) { cJSON * j = cJSON_CreateUnionLocalDate(x); char * s = j ? cJSON_Print(j) : NULL; cJSON_Delete(j); return s; }
+
+cJSON * cJSON_CreateUnionLocalDate(const struct UnionLocalDate * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+            j = cJSON_CreateNumber(x->value.number);
+        }
+        else if (cJSON_Object == x->type) {
+            j = cJSON_CreateLocalDate(x->value.local_date);
+        }
+    }
+    return j;
+}
+
+void cJSON_DeleteUnionLocalDate(struct UnionLocalDate * x) {
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+        }
+        else if (cJSON_Object == x->type) {
+            cJSON_DeleteLocalDate(x->value.local_date);
+        }
+        cJSON_free(x);
+    }
+}
+
 struct UnionLocale * cJSON_GetUnionLocaleValue(const cJSON * j) {
     struct UnionLocale * x = cJSON_malloc(sizeof(struct UnionLocale));
     if (NULL != x) {
@@ -7001,6 +7045,94 @@ void cJSON_DeleteUnionOf(struct UnionOf * x) {
     }
 }
 
+struct UnionOffsetDateTime * cJSON_GetUnionOffsetDateTimeValue(const cJSON * j) {
+    struct UnionOffsetDateTime * x = cJSON_malloc(sizeof(struct UnionOffsetDateTime));
+    if (NULL != x) {
+        memset(x, 0, sizeof(struct UnionOffsetDateTime));
+        if (cJSON_IsNumber(j)) {
+            x->type = cJSON_Number;
+            x->value.number = cJSON_GetNumberValue(j);
+        }
+        else if (cJSON_IsObject(j)) {
+            x->type = cJSON_Object;
+            x->value.offset_date_time = cJSON_GetOffsetDateTimeValue(j);
+            if (NULL == x->value.offset_date_time) x->type = 0;
+        }
+        if (0 == x->type) { cJSON_free(x); return NULL; }
+    }
+    return x;
+}
+struct UnionOffsetDateTime * cJSON_ParseUnionOffsetDateTime(const char * s) { cJSON * j = cJSON_Parse(s); struct UnionOffsetDateTime * x = j ? cJSON_GetUnionOffsetDateTimeValue(j) : NULL; cJSON_Delete(j); return x; }
+char * cJSON_PrintUnionOffsetDateTime(const struct UnionOffsetDateTime * x) { cJSON * j = cJSON_CreateUnionOffsetDateTime(x); char * s = j ? cJSON_Print(j) : NULL; cJSON_Delete(j); return s; }
+
+cJSON * cJSON_CreateUnionOffsetDateTime(const struct UnionOffsetDateTime * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+            j = cJSON_CreateNumber(x->value.number);
+        }
+        else if (cJSON_Object == x->type) {
+            j = cJSON_CreateOffsetDateTime(x->value.offset_date_time);
+        }
+    }
+    return j;
+}
+
+void cJSON_DeleteUnionOffsetDateTime(struct UnionOffsetDateTime * x) {
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+        }
+        else if (cJSON_Object == x->type) {
+            cJSON_DeleteOffsetDateTime(x->value.offset_date_time);
+        }
+        cJSON_free(x);
+    }
+}
+
+struct UnionOffsetTime * cJSON_GetUnionOffsetTimeValue(const cJSON * j) {
+    struct UnionOffsetTime * x = cJSON_malloc(sizeof(struct UnionOffsetTime));
+    if (NULL != x) {
+        memset(x, 0, sizeof(struct UnionOffsetTime));
+        if (cJSON_IsNumber(j)) {
+            x->type = cJSON_Number;
+            x->value.number = cJSON_GetNumberValue(j);
+        }
+        else if (cJSON_IsObject(j)) {
+            x->type = cJSON_Object;
+            x->value.offset_time = cJSON_GetOffsetTimeValue(j);
+            if (NULL == x->value.offset_time) x->type = 0;
+        }
+        if (0 == x->type) { cJSON_free(x); return NULL; }
+    }
+    return x;
+}
+struct UnionOffsetTime * cJSON_ParseUnionOffsetTime(const char * s) { cJSON * j = cJSON_Parse(s); struct UnionOffsetTime * x = j ? cJSON_GetUnionOffsetTimeValue(j) : NULL; cJSON_Delete(j); return x; }
+char * cJSON_PrintUnionOffsetTime(const struct UnionOffsetTime * x) { cJSON * j = cJSON_CreateUnionOffsetTime(x); char * s = j ? cJSON_Print(j) : NULL; cJSON_Delete(j); return s; }
+
+cJSON * cJSON_CreateUnionOffsetTime(const struct UnionOffsetTime * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+            j = cJSON_CreateNumber(x->value.number);
+        }
+        else if (cJSON_Object == x->type) {
+            j = cJSON_CreateOffsetTime(x->value.offset_time);
+        }
+    }
+    return j;
+}
+
+void cJSON_DeleteUnionOffsetTime(struct UnionOffsetTime * x) {
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+        }
+        else if (cJSON_Object == x->type) {
+            cJSON_DeleteOffsetTime(x->value.offset_time);
+        }
+        cJSON_free(x);
+    }
+}
+
 struct UnionOneway * cJSON_GetUnionOnewayValue(const cJSON * j) {
     struct UnionOneway * x = cJSON_malloc(sizeof(struct UnionOneway));
     if (NULL != x) {
@@ -21951,6 +22083,55 @@ void cJSON_DeleteList(struct List * x) {
     }
 }
 
+struct LocalDate * cJSON_ParseLocalDate(const char * s) {
+    struct LocalDate * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetLocalDateValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct LocalDate * cJSON_GetLocalDateValue(const cJSON * j) {
+    struct LocalDate * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct LocalDate)))) {
+            memset(x, 0, sizeof(struct LocalDate));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateLocalDate(const struct LocalDate * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintLocalDate(const struct LocalDate * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateLocalDate(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteLocalDate(struct LocalDate * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Locale * cJSON_ParseLocale(const char * s) {
     struct Locale * x = NULL;
     if (NULL != s) {
@@ -23372,6 +23553,104 @@ void cJSON_DeleteOf(struct Of * x) {
     }
 }
 
+struct OffsetDateTime * cJSON_ParseOffsetDateTime(const char * s) {
+    struct OffsetDateTime * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetOffsetDateTimeValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct OffsetDateTime * cJSON_GetOffsetDateTimeValue(const cJSON * j) {
+    struct OffsetDateTime * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct OffsetDateTime)))) {
+            memset(x, 0, sizeof(struct OffsetDateTime));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateOffsetDateTime(const struct OffsetDateTime * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintOffsetDateTime(const struct OffsetDateTime * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateOffsetDateTime(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteOffsetDateTime(struct OffsetDateTime * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
+struct OffsetTime * cJSON_ParseOffsetTime(const char * s) {
+    struct OffsetTime * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetOffsetTimeValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct OffsetTime * cJSON_GetOffsetTimeValue(const cJSON * j) {
+    struct OffsetTime * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct OffsetTime)))) {
+            memset(x, 0, sizeof(struct OffsetTime));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateOffsetTime(const struct OffsetTime * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintOffsetTime(const struct OffsetTime * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateOffsetTime(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteOffsetTime(struct OffsetTime * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Oneway * cJSON_ParseOneway(const char * s) {
     struct Oneway * x = NULL;
     if (NULL != s) {
@@ -33865,6 +34144,11 @@ struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
                 x->list = cJSON_GetUnionListValue(cJSON_GetObjectItemCaseSensitive(j, "list"));
                 if (NULL == x->list) { cJSON_DeleteTopLevel(x); return NULL; }
             }
+            if (cJSON_HasObjectItem(j, "LocalDate")) {
+                if (!cJSON_IsUnionLocalDate(cJSON_GetObjectItemCaseSensitive(j, "LocalDate"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->local_date = cJSON_GetUnionLocalDateValue(cJSON_GetObjectItemCaseSensitive(j, "LocalDate"));
+                if (NULL == x->local_date) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
             if (cJSON_HasObjectItem(j, "Locale")) {
                 if (!cJSON_IsUnionLocale(cJSON_GetObjectItemCaseSensitive(j, "Locale"))) { cJSON_DeleteTopLevel(x); return NULL; }
                 x->locale = cJSON_GetUnionLocaleValue(cJSON_GetObjectItemCaseSensitive(j, "Locale"));
@@ -34065,6 +34349,16 @@ struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
                 x->of = cJSON_GetUnionOfValue(cJSON_GetObjectItemCaseSensitive(j, "of"));
                 if (NULL == x->of) { cJSON_DeleteTopLevel(x); return NULL; }
             }
+            if (cJSON_HasObjectItem(j, "OffsetDateTime")) {
+                if (!cJSON_IsUnionOffsetDateTime(cJSON_GetObjectItemCaseSensitive(j, "OffsetDateTime"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->offset_date_time = cJSON_GetUnionOffsetDateTimeValue(cJSON_GetObjectItemCaseSensitive(j, "OffsetDateTime"));
+                if (NULL == x->offset_date_time) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
+            if (cJSON_HasObjectItem(j, "OffsetTime")) {
+                if (!cJSON_IsUnionOffsetTime(cJSON_GetObjectItemCaseSensitive(j, "OffsetTime"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->offset_time = cJSON_GetUnionOffsetTimeValue(cJSON_GetObjectItemCaseSensitive(j, "OffsetTime"));
+                if (NULL == x->offset_time) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
             if (cJSON_HasObjectItem(j, "oneway")) {
                 if (!cJSON_IsUnionOneway(cJSON_GetObjectItemCaseSensitive(j, "oneway"))) { cJSON_DeleteTopLevel(x); return NULL; }
                 x->oneway = cJSON_GetUnionOnewayValue(cJSON_GetObjectItemCaseSensitive(j, "oneway"));
@@ -35281,6 +35575,9 @@ cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
             if (NULL != x->list) {
                 cJSON_AddItemToObject(j, "list", cJSON_CreateUnionList(x->list));
             }
+            if (NULL != x->local_date) {
+                cJSON_AddItemToObject(j, "LocalDate", cJSON_CreateUnionLocalDate(x->local_date));
+            }
             if (NULL != x->locale) {
                 cJSON_AddItemToObject(j, "Locale", cJSON_CreateUnionLocale(x->locale));
             }
@@ -35401,6 +35698,12 @@ cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
             if (NULL != x->of) {
                 cJSON_AddItemToObject(j, "of", cJSON_CreateUnionOf(x->of));
             }
+            if (NULL != x->offset_date_time) {
+                cJSON_AddItemToObject(j, "OffsetDateTime", cJSON_CreateUnionOffsetDateTime(x->offset_date_time));
+            }
+            if (NULL != x->offset_time) {
+                cJSON_AddItemToObject(j, "OffsetTime", cJSON_CreateUnionOffsetTime(x->offset_time));
+            }
             if (NULL != x->oneway) {
                 cJSON_AddItemToObject(j, "oneway", cJSON_CreateUnionOneway(x->oneway));
             }
@@ -36365,6 +36668,9 @@ void cJSON_DeleteTopLevel(struct TopLevel * x) {
         if (NULL != x->list) {
             cJSON_DeleteUnionList(x->list);
         }
+        if (NULL != x->local_date) {
+            cJSON_DeleteUnionLocalDate(x->local_date);
+        }
         if (NULL != x->locale) {
             cJSON_DeleteUnionLocale(x->locale);
         }
@@ -36485,6 +36791,12 @@ void cJSON_DeleteTopLevel(struct TopLevel * x) {
         if (NULL != x->of) {
             cJSON_DeleteUnionOf(x->of);
         }
+        if (NULL != x->offset_date_time) {
+            cJSON_DeleteUnionOffsetDateTime(x->offset_date_time);
+        }
+        if (NULL != x->offset_time) {
+            cJSON_DeleteUnionOffsetTime(x->offset_time);
+        }
         if (NULL != x->oneway) {
             cJSON_DeleteUnionOneway(x->oneway);
         }
diff --git a/base/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.h b/head/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.h
index 100717b..ee7ad33 100644
--- a/base/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.h
+++ b/head/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.h
@@ -1478,6 +1478,17 @@ struct UnionList {
     } value;
 };
 
+struct LocalDate {
+};
+
+struct UnionLocalDate {
+    int type;
+    union {
+        double number;
+        struct LocalDate * local_date;
+    } value;
+};
+
 struct Locale {
 };
 
@@ -1797,6 +1808,28 @@ struct UnionOf {
     } value;
 };
 
+struct OffsetDateTime {
+};
+
+struct UnionOffsetDateTime {
+    int type;
+    union {
+        double number;
+        struct OffsetDateTime * offset_date_time;
+    } value;
+};
+
+struct OffsetTime {
+};
+
+struct UnionOffsetTime {
+    int type;
+    union {
+        double number;
+        struct OffsetTime * offset_time;
+    } value;
+};
+
 struct Oneway {
 };
 
@@ -4127,6 +4160,7 @@ struct TopLevel {
     struct UnionLeft * left;
     struct UnionLet * let;
     struct UnionList * list;
+    struct UnionLocalDate * local_date;
     struct UnionLocale * locale;
     struct UnionLock * lock;
     struct UnionLong * top_level_long;
@@ -4167,6 +4201,8 @@ struct TopLevel {
     struct UnionObjectReader * object_reader;
     struct UnionObjectWriter * object_writer;
     struct UnionOf * of;
+    struct UnionOffsetDateTime * offset_date_time;
+    struct UnionOffsetTime * offset_time;
     struct UnionOneway * oneway;
     struct UnionOpen * open;
     struct UnionOperator * top_level_operator;
@@ -5210,6 +5246,13 @@ void cJSON_DeleteUnionList(struct UnionList * x);
 struct UnionList * cJSON_ParseUnionList(const char * s);
 char * cJSON_PrintUnionList(const struct UnionList * x);
 
+#define cJSON_IsUnionLocalDate(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
+struct UnionLocalDate * cJSON_GetUnionLocalDateValue(const cJSON * j);
+cJSON * cJSON_CreateUnionLocalDate(const struct UnionLocalDate * x);
+void cJSON_DeleteUnionLocalDate(struct UnionLocalDate * x);
+struct UnionLocalDate * cJSON_ParseUnionLocalDate(const char * s);
+char * cJSON_PrintUnionLocalDate(const struct UnionLocalDate * x);
+
 #define cJSON_IsUnionLocale(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
 struct UnionLocale * cJSON_GetUnionLocaleValue(const cJSON * j);
 cJSON * cJSON_CreateUnionLocale(const struct UnionLocale * x);
@@ -5413,6 +5456,20 @@ void cJSON_DeleteUnionOf(struct UnionOf * x);
 struct UnionOf * cJSON_ParseUnionOf(const char * s);
 char * cJSON_PrintUnionOf(const struct UnionOf * x);
 
+#define cJSON_IsUnionOffsetDateTime(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
+struct UnionOffsetDateTime * cJSON_GetUnionOffsetDateTimeValue(const cJSON * j);
+cJSON * cJSON_CreateUnionOffsetDateTime(const struct UnionOffsetDateTime * x);
+void cJSON_DeleteUnionOffsetDateTime(struct UnionOffsetDateTime * x);
+struct UnionOffsetDateTime * cJSON_ParseUnionOffsetDateTime(const char * s);
+char * cJSON_PrintUnionOffsetDateTime(const struct UnionOffsetDateTime * x);
+
+#define cJSON_IsUnionOffsetTime(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
+struct UnionOffsetTime * cJSON_GetUnionOffsetTimeValue(const cJSON * j);
+cJSON * cJSON_CreateUnionOffsetTime(const struct UnionOffsetTime * x);
+void cJSON_DeleteUnionOffsetTime(struct UnionOffsetTime * x);
+struct UnionOffsetTime * cJSON_ParseUnionOffsetTime(const char * s);
+char * cJSON_PrintUnionOffsetTime(const struct UnionOffsetTime * x);
+
 #define cJSON_IsUnionOneway(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
 struct UnionOneway * cJSON_GetUnionOnewayValue(const cJSON * j);
 cJSON * cJSON_CreateUnionOneway(const struct UnionOneway * x);
@@ -7558,6 +7615,12 @@ cJSON * cJSON_CreateList(const struct List * x);
 char * cJSON_PrintList(const struct List * x);
 void cJSON_DeleteList(struct List * x);
 
+struct LocalDate * cJSON_ParseLocalDate(const char * s);
+struct LocalDate * cJSON_GetLocalDateValue(const cJSON * j);
+cJSON * cJSON_CreateLocalDate(const struct LocalDate * x);
+char * cJSON_PrintLocalDate(const struct LocalDate * x);
+void cJSON_DeleteLocalDate(struct LocalDate * x);
+
 struct Locale * cJSON_ParseLocale(const char * s);
 struct Locale * cJSON_GetLocaleValue(const cJSON * j);
 cJSON * cJSON_CreateLocale(const struct Locale * x);
@@ -7732,6 +7795,18 @@ cJSON * cJSON_CreateOf(const struct Of * x);
 char * cJSON_PrintOf(const struct Of * x);
 void cJSON_DeleteOf(struct Of * x);
 
+struct OffsetDateTime * cJSON_ParseOffsetDateTime(const char * s);
+struct OffsetDateTime * cJSON_GetOffsetDateTimeValue(const cJSON * j);
+cJSON * cJSON_CreateOffsetDateTime(const struct OffsetDateTime * x);
+char * cJSON_PrintOffsetDateTime(const struct OffsetDateTime * x);
+void cJSON_DeleteOffsetDateTime(struct OffsetDateTime * x);
+
+struct OffsetTime * cJSON_ParseOffsetTime(const char * s);
+struct OffsetTime * cJSON_GetOffsetTimeValue(const cJSON * j);
+cJSON * cJSON_CreateOffsetTime(const struct OffsetTime * x);
+char * cJSON_PrintOffsetTime(const struct OffsetTime * x);
+void cJSON_DeleteOffsetTime(struct OffsetTime * x);
+
 struct Oneway * cJSON_ParseOneway(const char * s);
 struct Oneway * cJSON_GetOnewayValue(const cJSON * j);
 cJSON * cJSON_CreateOneway(const struct Oneway * x);
diff --git a/base/schema-cplusplus/test/inputs/schema/date-time.schema/default/quicktype.hpp b/head/schema-cplusplus/test/inputs/schema/date-time.schema/default/quicktype.hpp
index a198eb5..6aa08f3 100644
--- a/base/schema-cplusplus/test/inputs/schema/date-time.schema/default/quicktype.hpp
+++ b/head/schema-cplusplus/test/inputs/schema/date-time.schema/default/quicktype.hpp
@@ -8,6 +8,7 @@
 
 #pragma once
 
+#include <optional>
 #include <variant>
 #include "json.hpp"
 
@@ -92,6 +93,36 @@ namespace quicktype {
 
     using ComplexUnionArrayElement = std::variant<std::string, ComplexUnionArrayEnum, int64_t>;
 
+    class LocalDate {
+        public:
+        LocalDate() = default;
+        virtual ~LocalDate() = default;
+
+        private:
+
+        public:
+    };
+
+    class OffsetDateTime {
+        public:
+        OffsetDateTime() = default;
+        virtual ~OffsetDateTime() = default;
+
+        private:
+
+        public:
+    };
+
+    class OffsetTime {
+        public:
+        OffsetTime() = default;
+        virtual ~OffsetTime() = default;
+
+        private:
+
+        public:
+    };
+
     class TopLevel {
         public:
         TopLevel() = default;
@@ -101,6 +132,9 @@ namespace quicktype {
         std::vector<ComplexUnionArrayElement> complex_union_array;
         std::string date;
         std::string date_time;
+        std::optional<LocalDate> local_date_class;
+        std::optional<OffsetDateTime> offset_date_time_class;
+        std::optional<OffsetTime> offset_time_class;
         std::string time;
         std::vector<std::string> union_array;
 
@@ -117,6 +151,18 @@ namespace quicktype {
         std::string & get_mutable_date_time() { return date_time; }
         void set_date_time(const std::string & value) { this->date_time = value; }
 
+        const std::optional<LocalDate> & get_local_date_class() const { return local_date_class; }
+        std::optional<LocalDate> & get_mutable_local_date_class() { return local_date_class; }
+        void set_local_date_class(const std::optional<LocalDate> & value) { this->local_date_class = value; }
+
+        const std::optional<OffsetDateTime> & get_offset_date_time_class() const { return offset_date_time_class; }
+        std::optional<OffsetDateTime> & get_mutable_offset_date_time_class() { return offset_date_time_class; }
+        void set_offset_date_time_class(const std::optional<OffsetDateTime> & value) { this->offset_date_time_class = value; }
+
+        const std::optional<OffsetTime> & get_offset_time_class() const { return offset_time_class; }
+        std::optional<OffsetTime> & get_mutable_offset_time_class() { return offset_time_class; }
+        void set_offset_time_class(const std::optional<OffsetTime> & value) { this->offset_time_class = value; }
+
         const std::string & get_time() const { return time; }
         std::string & get_mutable_time() { return time; }
         void set_time(const std::string & value) { this->time = value; }
@@ -128,6 +174,15 @@ namespace quicktype {
 }
 
 namespace quicktype {
+void from_json(const json & j, LocalDate & x);
+void to_json(json & j, const LocalDate & x);
+
+void from_json(const json & j, OffsetDateTime & x);
+void to_json(json & j, const OffsetDateTime & x);
+
+void from_json(const json & j, OffsetTime & x);
+void to_json(json & j, const OffsetTime & x);
+
 void from_json(const json & j, TopLevel & x);
 void to_json(json & j, const TopLevel & x);
 
@@ -142,12 +197,51 @@ struct adl_serializer<std::variant<std::string, quicktype::ComplexUnionArrayEnum
 };
 }
 namespace quicktype {
+    inline void from_json(const json & j, LocalDate& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const LocalDate & x) {
+        j = json::object();
+        (void)x;
+    }
+
+    inline void from_json(const json & j, OffsetDateTime& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const OffsetDateTime & x) {
+        j = json::object();
+        (void)x;
+    }
+
+    inline void from_json(const json & j, OffsetTime& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const OffsetTime & x) {
+        j = json::object();
+        (void)x;
+    }
+
     inline void from_json(const json & j, TopLevel& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         x.set_complex_union_array(j.at("complex-union-array").get<std::vector<ComplexUnionArrayElement>>());
         x.set_date(j.at("date").get<std::string>());
         if (j.find("date-time") != j.end() && !std::regex_match(j.at("date-time").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
         x.set_date_time(j.at("date-time").get<std::string>());
+        if (j.find("local-date-class") != j.end() && j.at("local-date-class").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_local_date_class(get_stack_optional<LocalDate>(j, "local-date-class"));
+        if (j.find("offset-date-time-class") != j.end() && j.at("offset-date-time-class").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_offset_date_time_class(get_stack_optional<OffsetDateTime>(j, "offset-date-time-class"));
+        if (j.find("offset-time-class") != j.end() && j.at("offset-time-class").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_offset_time_class(get_stack_optional<OffsetTime>(j, "offset-time-class"));
         x.set_time(j.at("time").get<std::string>());
         x.set_union_array(j.at("union-array").get<std::vector<std::string>>());
     }
@@ -157,6 +251,9 @@ namespace quicktype {
         j["complex-union-array"] = x.get_complex_union_array();
         j["date"] = x.get_date();
         j["date-time"] = x.get_date_time();
+        j["local-date-class"] = x.get_local_date_class();
+        j["offset-date-time-class"] = x.get_offset_date_time_class();
+        j["offset-time-class"] = x.get_offset_time_class();
         j["time"] = x.get_time();
         j["union-array"] = x.get_union_array();
     }
diff --git a/base/schema-cplusplus/test/inputs/schema/keyword-enum.schema/default/quicktype.hpp b/head/schema-cplusplus/test/inputs/schema/keyword-enum.schema/default/quicktype.hpp
index 18a6b84..9887593 100644
--- a/base/schema-cplusplus/test/inputs/schema/keyword-enum.schema/default/quicktype.hpp
+++ b/head/schema-cplusplus/test/inputs/schema/keyword-enum.schema/default/quicktype.hpp
@@ -89,7 +89,7 @@ namespace quicktype {
     }
     #endif
 
-    enum class Enum : int { EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY_NODE, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BOOLEAN_NODE, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DESERIALIZATION_FEATURE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DOUBLE_NODE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INT_NODE, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LONG_NODE, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NULL_NODE, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, ENUM_NULL, PURPLE_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_NODE, OBJECT_MAPPER, OBJECT_READER, OBJECT_WRITER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZATION_FEATURE, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, TEXT_NODE, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY };
+    enum class Enum : int { EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY_NODE, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BOOLEAN_NODE, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DESERIALIZATION_FEATURE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DOUBLE_NODE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INT_NODE, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCAL_DATE, LONG_NODE, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NULL_NODE, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, ENUM_NULL, PURPLE_NULL, NULLPTR, NUMBER, OBJECT, OFFSET_DATE_TIME, OFFSET_TIME, OBJECT_NODE, OBJECT_MAPPER, OBJECT_READER, OBJECT_WRITER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZATION_FEATURE, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, TEXT_NODE, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY };
 
     class TopLevel {
         public:
@@ -308,6 +308,7 @@ namespace quicktype {
             {"left", Enum::LEFT},
             {"let", Enum::LET},
             {"list", Enum::LIST},
+            {"LocalDate", Enum::LOCAL_DATE},
             {"LongNode", Enum::LONG_NODE},
             {"Locale", Enum::LOCALE},
             {"lock", Enum::LOCK},
@@ -343,6 +344,8 @@ namespace quicktype {
             {"nullptr", Enum::NULLPTR},
             {"number", Enum::NUMBER},
             {"object", Enum::OBJECT},
+            {"OffsetDateTime", Enum::OFFSET_DATE_TIME},
+            {"OffsetTime", Enum::OFFSET_TIME},
             {"ObjectNode", Enum::OBJECT_NODE},
             {"ObjectMapper", Enum::OBJECT_MAPPER},
             {"ObjectReader", Enum::OBJECT_READER},
@@ -673,6 +676,7 @@ namespace quicktype {
             case Enum::LEFT: j = "left"; break;
             case Enum::LET: j = "let"; break;
             case Enum::LIST: j = "list"; break;
+            case Enum::LOCAL_DATE: j = "LocalDate"; break;
             case Enum::LONG_NODE: j = "LongNode"; break;
             case Enum::LOCALE: j = "Locale"; break;
             case Enum::LOCK: j = "lock"; break;
@@ -708,6 +712,8 @@ namespace quicktype {
             case Enum::NULLPTR: j = "nullptr"; break;
             case Enum::NUMBER: j = "number"; break;
             case Enum::OBJECT: j = "object"; break;
+            case Enum::OFFSET_DATE_TIME: j = "OffsetDateTime"; break;
+            case Enum::OFFSET_TIME: j = "OffsetTime"; break;
             case Enum::OBJECT_NODE: j = "ObjectNode"; break;
             case Enum::OBJECT_MAPPER: j = "ObjectMapper"; break;
             case Enum::OBJECT_READER: j = "ObjectReader"; break;
diff --git a/base/schema-cplusplus/test/inputs/schema/keyword-unions.schema/default/quicktype.hpp b/head/schema-cplusplus/test/inputs/schema/keyword-unions.schema/default/quicktype.hpp
index a1ec7f2..01d8e5f 100644
--- a/base/schema-cplusplus/test/inputs/schema/keyword-unions.schema/default/quicktype.hpp
+++ b/head/schema-cplusplus/test/inputs/schema/keyword-unions.schema/default/quicktype.hpp
@@ -1649,6 +1649,18 @@ namespace quicktype {
 
     using UnionList = std::variant<List, double>;
 
+    class LocalDate {
+        public:
+        LocalDate() = default;
+        virtual ~LocalDate() = default;
+
+        private:
+
+        public:
+    };
+
+    using UnionLocalDate = std::variant<LocalDate, double>;
+
     class Locale {
         public:
         Locale() = default;
@@ -1997,6 +2009,30 @@ namespace quicktype {
 
     using UnionOf = std::variant<Of, double>;
 
+    class OffsetDateTime {
+        public:
+        OffsetDateTime() = default;
+        virtual ~OffsetDateTime() = default;
+
+        private:
+
+        public:
+    };
+
+    using UnionOffsetDateTime = std::variant<OffsetDateTime, double>;
+
+    class OffsetTime {
+        public:
+        OffsetTime() = default;
+        virtual ~OffsetTime() = default;
+
+        private:
+
+        public:
+    };
+
+    using UnionOffsetTime = std::variant<OffsetTime, double>;
+
     class Oneway {
         public:
         Oneway() = default;
@@ -4527,6 +4563,7 @@ namespace quicktype {
         std::optional<UnionLeft> left;
         std::optional<UnionLet> let;
         std::optional<UnionList> list;
+        std::optional<UnionLocalDate> local_date;
         std::optional<UnionLocale> locale;
         std::optional<UnionLock> lock;
         std::optional<UnionLong> top_level_long;
@@ -4567,6 +4604,8 @@ namespace quicktype {
         std::optional<UnionObjectReader> object_reader;
         std::optional<UnionObjectWriter> object_writer;
         std::optional<UnionOf> of;
+        std::optional<UnionOffsetDateTime> offset_date_time;
+        std::optional<UnionOffsetTime> offset_time;
         std::optional<UnionOneway> oneway;
         std::optional<UnionOpen> open;
         std::optional<UnionOperator> top_level_operator;
@@ -5436,6 +5475,10 @@ namespace quicktype {
         std::optional<UnionList> & get_mutable_list() { return list; }
         void set_list(const std::optional<UnionList> & value) { this->list = value; }
 
+        const std::optional<UnionLocalDate> & get_local_date() const { return local_date; }
+        std::optional<UnionLocalDate> & get_mutable_local_date() { return local_date; }
+        void set_local_date(const std::optional<UnionLocalDate> & value) { this->local_date = value; }
+
         const std::optional<UnionLocale> & get_locale() const { return locale; }
         std::optional<UnionLocale> & get_mutable_locale() { return locale; }
         void set_locale(const std::optional<UnionLocale> & value) { this->locale = value; }
@@ -5596,6 +5639,14 @@ namespace quicktype {
         std::optional<UnionOf> & get_mutable_of() { return of; }
         void set_of(const std::optional<UnionOf> & value) { this->of = value; }
 
+        const std::optional<UnionOffsetDateTime> & get_offset_date_time() const { return offset_date_time; }
+        std::optional<UnionOffsetDateTime> & get_mutable_offset_date_time() { return offset_date_time; }
+        void set_offset_date_time(const std::optional<UnionOffsetDateTime> & value) { this->offset_date_time = value; }
+
+        const std::optional<UnionOffsetTime> & get_offset_time() const { return offset_time; }
+        std::optional<UnionOffsetTime> & get_mutable_offset_time() { return offset_time; }
+        void set_offset_time(const std::optional<UnionOffsetTime> & value) { this->offset_time = value; }
+
         const std::optional<UnionOneway> & get_oneway() const { return oneway; }
         std::optional<UnionOneway> & get_mutable_oneway() { return oneway; }
         void set_oneway(const std::optional<UnionOneway> & value) { this->oneway = value; }
@@ -6513,6 +6564,9 @@ void to_json(json & j, const Let & x);
 void from_json(const json & j, List & x);
 void to_json(json & j, const List & x);
 
+void from_json(const json & j, LocalDate & x);
+void to_json(json & j, const LocalDate & x);
+
 void from_json(const json & j, Locale & x);
 void to_json(json & j, const Locale & x);
 
@@ -6600,6 +6654,12 @@ void to_json(json & j, const ObjectWriter & x);
 void from_json(const json & j, Of & x);
 void to_json(json & j, const Of & x);
 
+void from_json(const json & j, OffsetDateTime & x);
+void to_json(json & j, const OffsetDateTime & x);
+
+void from_json(const json & j, OffsetTime & x);
+void to_json(json & j, const OffsetTime & x);
+
 void from_json(const json & j, Oneway & x);
 void to_json(json & j, const Oneway & x);
 
@@ -7969,6 +8029,12 @@ struct adl_serializer<std::variant<quicktype::List, double>> {
     static void to_json(json & j, const std::variant<quicktype::List, double> & x);
 };
 
+template <>
+struct adl_serializer<std::variant<quicktype::LocalDate, double>> {
+    static void from_json(const json & j, std::variant<quicktype::LocalDate, double> & x);
+    static void to_json(json & j, const std::variant<quicktype::LocalDate, double> & x);
+};
+
 template <>
 struct adl_serializer<std::variant<quicktype::Locale, double>> {
     static void from_json(const json & j, std::variant<quicktype::Locale, double> & x);
@@ -8143,6 +8209,18 @@ struct adl_serializer<std::variant<quicktype::Of, double>> {
     static void to_json(json & j, const std::variant<quicktype::Of, double> & x);
 };
 
+template <>
+struct adl_serializer<std::variant<quicktype::OffsetDateTime, double>> {
+    static void from_json(const json & j, std::variant<quicktype::OffsetDateTime, double> & x);
+    static void to_json(json & j, const std::variant<quicktype::OffsetDateTime, double> & x);
+};
+
+template <>
+struct adl_serializer<std::variant<quicktype::OffsetTime, double>> {
+    static void from_json(const json & j, std::variant<quicktype::OffsetTime, double> & x);
+    static void to_json(json & j, const std::variant<quicktype::OffsetTime, double> & x);
+};
+
 template <>
 struct adl_serializer<std::variant<quicktype::Oneway, double>> {
     static void from_json(const json & j, std::variant<quicktype::Oneway, double> & x);
@@ -10744,6 +10822,17 @@ namespace quicktype {
         (void)x;
     }
 
+    inline void from_json(const json & j, LocalDate& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const LocalDate & x) {
+        j = json::object();
+        (void)x;
+    }
+
     inline void from_json(const json & j, Locale& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         (void)j;
@@ -11063,6 +11152,28 @@ namespace quicktype {
         (void)x;
     }
 
+    inline void from_json(const json & j, OffsetDateTime& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const OffsetDateTime & x) {
+        j = json::object();
+        (void)x;
+    }
+
+    inline void from_json(const json & j, OffsetTime& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const OffsetTime & x) {
+        j = json::object();
+        (void)x;
+    }
+
     inline void from_json(const json & j, Oneway& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         (void)j;
@@ -13578,6 +13689,8 @@ namespace quicktype {
         x.set_let(get_stack_optional<std::variant<Let, double>>(j, "let"));
         if (j.find("list") != j.end() && j.at("list").is_null()) throw std::runtime_error("Unexpected null");
         x.set_list(get_stack_optional<std::variant<List, double>>(j, "list"));
+        if (j.find("LocalDate") != j.end() && j.at("LocalDate").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_local_date(get_stack_optional<std::variant<LocalDate, double>>(j, "LocalDate"));
         if (j.find("Locale") != j.end() && j.at("Locale").is_null()) throw std::runtime_error("Unexpected null");
         x.set_locale(get_stack_optional<std::variant<Locale, double>>(j, "Locale"));
         if (j.find("lock") != j.end() && j.at("lock").is_null()) throw std::runtime_error("Unexpected null");
@@ -13658,6 +13771,10 @@ namespace quicktype {
         x.set_object_writer(get_stack_optional<std::variant<ObjectWriter, double>>(j, "ObjectWriter"));
         if (j.find("of") != j.end() && j.at("of").is_null()) throw std::runtime_error("Unexpected null");
         x.set_of(get_stack_optional<std::variant<Of, double>>(j, "of"));
+        if (j.find("OffsetDateTime") != j.end() && j.at("OffsetDateTime").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_offset_date_time(get_stack_optional<std::variant<OffsetDateTime, double>>(j, "OffsetDateTime"));
+        if (j.find("OffsetTime") != j.end() && j.at("OffsetTime").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_offset_time(get_stack_optional<std::variant<OffsetTime, double>>(j, "OffsetTime"));
         if (j.find("oneway") != j.end() && j.at("oneway").is_null()) throw std::runtime_error("Unexpected null");
         x.set_oneway(get_stack_optional<std::variant<Oneway, double>>(j, "oneway"));
         if (j.find("open") != j.end() && j.at("open").is_null()) throw std::runtime_error("Unexpected null");
@@ -14108,6 +14225,7 @@ namespace quicktype {
         j["left"] = x.get_left();
         j["let"] = x.get_let();
         j["list"] = x.get_list();
+        j["LocalDate"] = x.get_local_date();
         j["Locale"] = x.get_locale();
         j["lock"] = x.get_lock();
         j["long"] = x.get_top_level_long();
@@ -14148,6 +14266,8 @@ namespace quicktype {
         j["ObjectReader"] = x.get_object_reader();
         j["ObjectWriter"] = x.get_object_writer();
         j["of"] = x.get_of();
+        j["OffsetDateTime"] = x.get_offset_date_time();
+        j["OffsetTime"] = x.get_offset_time();
         j["oneway"] = x.get_oneway();
         j["open"] = x.get_open();
         j["operator"] = x.get_top_level_operator();
@@ -16882,6 +17002,26 @@ namespace nlohmann {
         }
     }
 
+    inline void adl_serializer<std::variant<quicktype::LocalDate, double>>::from_json(const json & j, std::variant<quicktype::LocalDate, double> & x) {
+        if (j.is_number())
+            x = j.get<double>();
+        else if (j.is_object())
+            x = j.get<quicktype::LocalDate>();
+        else throw std::runtime_error("Could not deserialise!");
+    }
+
+    inline void adl_serializer<std::variant<quicktype::LocalDate, double>>::to_json(json & j, const std::variant<quicktype::LocalDate, double> & x) {
+        switch (x.index()) {
+            case 0:
+                j = std::get<quicktype::LocalDate>(x);
+                break;
+            case 1:
+                j = std::get<double>(x);
+                break;
+            default: throw std::runtime_error("Input JSON does not conform to schema!");
+        }
+    }
+
     inline void adl_serializer<std::variant<quicktype::Locale, double>>::from_json(const json & j, std::variant<quicktype::Locale, double> & x) {
         if (j.is_number())
             x = j.get<double>();
@@ -17462,6 +17602,46 @@ namespace nlohmann {
         }
     }
 
+    inline void adl_serializer<std::variant<quicktype::OffsetDateTime, double>>::from_json(const json & j, std::variant<quicktype::OffsetDateTime, double> & x) {
+        if (j.is_number())
+            x = j.get<double>();
+        else if (j.is_object())
+            x = j.get<quicktype::OffsetDateTime>();
+        else throw std::runtime_error("Could not deserialise!");
+    }
+
+    inline void adl_serializer<std::variant<quicktype::OffsetDateTime, double>>::to_json(json & j, const std::variant<quicktype::OffsetDateTime, double> & x) {
+        switch (x.index()) {
+            case 0:
+                j = std::get<quicktype::OffsetDateTime>(x);
+                break;
+            case 1:
+                j = std::get<double>(x);
+                break;
+            default: throw std::runtime_error("Input JSON does not conform to schema!");
+        }
+    }
+
+    inline void adl_serializer<std::variant<quicktype::OffsetTime, double>>::from_json(const json & j, std::variant<quicktype::OffsetTime, double> & x) {
+        if (j.is_number())
+            x = j.get<double>();
+        else if (j.is_object())
+            x = j.get<quicktype::OffsetTime>();
+        else throw std::runtime_error("Could not deserialise!");
+    }
+
+    inline void adl_serializer<std::variant<quicktype::OffsetTime, double>>::to_json(json & j, const std::variant<quicktype::OffsetTime, double> & x) {
+        switch (x.index()) {
+            case 0:
+                j = std::get<quicktype::OffsetTime>(x);
+                break;
+            case 1:
+                j = std::get<double>(x);
+                break;
+            default: throw std::runtime_error("Input JSON does not conform to schema!");
+        }
+    }
+
     inline void adl_serializer<std::variant<quicktype::Oneway, double>>::from_json(const json & j, std::variant<quicktype::Oneway, double> & x) {
         if (j.is_number())
             x = j.get<double>();
diff --git a/base/schema-crystal/test/inputs/schema/date-time.schema/default/TopLevel.cr b/head/schema-crystal/test/inputs/schema/date-time.schema/default/TopLevel.cr
index ba810c2..cec8ffc 100644
--- a/base/schema-crystal/test/inputs/schema/date-time.schema/default/TopLevel.cr
+++ b/head/schema-crystal/test/inputs/schema/date-time.schema/default/TopLevel.cr
@@ -11,10 +11,34 @@ class TopLevel
   @[JSON::Field(key: "date-time")]
   property date_time : String
 
+  @[JSON::Field(key: "local-date-class")]
+  property local_date_class : LocalDate?
+
+  @[JSON::Field(key: "offset-date-time-class")]
+  property offset_date_time_class : OffsetDateTime?
+
+  @[JSON::Field(key: "offset-time-class")]
+  property offset_time_class : OffsetTime?
+
   property time : String
 
   @[JSON::Field(key: "union-array")]
   property union_array : Array(String)
 end
 
+class LocalDate
+  include JSON::Serializable
+
+end
+
+class OffsetDateTime
+  include JSON::Serializable
+
+end
+
+class OffsetTime
+  include JSON::Serializable
+
+end
+
 alias ComplexUnionArray = Int64 | String
diff --git a/base/schema-crystal/test/inputs/schema/keyword-unions.schema/default/TopLevel.cr b/head/schema-crystal/test/inputs/schema/keyword-unions.schema/default/TopLevel.cr
index 2fd0653..5f936a6 100644
--- a/base/schema-crystal/test/inputs/schema/keyword-unions.schema/default/TopLevel.cr
+++ b/head/schema-crystal/test/inputs/schema/keyword-unions.schema/default/TopLevel.cr
@@ -436,6 +436,9 @@ class TopLevel
 
   property list : UnionList?
 
+  @[JSON::Field(key: "LocalDate")]
+  property local_date : UnionLocalDate?
+
   @[JSON::Field(key: "Locale")]
   property locale : UnionLocale?
 
@@ -537,6 +540,12 @@ class TopLevel
   @[JSON::Field(key: "of")]
   property top_level_of : UnionOf?
 
+  @[JSON::Field(key: "OffsetDateTime")]
+  property offset_date_time : UnionOffsetDateTime?
+
+  @[JSON::Field(key: "OffsetTime")]
+  property offset_time : UnionOffsetTime?
+
   property oneway : UnionOneway?
 
   property open : UnionOpen?
@@ -1671,6 +1680,11 @@ class List
 
 end
 
+class LocalDate
+  include JSON::Serializable
+
+end
+
 class Locale
   include JSON::Serializable
 
@@ -1846,6 +1860,16 @@ class ObjectWriter
 
 end
 
+class OffsetDateTime
+  include JSON::Serializable
+
+end
+
+class OffsetTime
+  include JSON::Serializable
+
+end
+
 class Oneway
   include JSON::Serializable
 
@@ -2949,6 +2973,8 @@ alias UnionLet = Float64 | Let
 
 alias UnionList = Float64 | List
 
+alias UnionLocalDate = Float64 | LocalDate
+
 alias UnionLocale = Float64 | Locale
 
 alias UnionLock = Float64 | Lock
@@ -3019,6 +3045,10 @@ alias UnionObjectReader = Float64 | ObjectReader
 
 alias UnionObjectWriter = Float64 | ObjectWriter
 
+alias UnionOffsetDateTime = Float64 | OffsetDateTime
+
+alias UnionOffsetTime = Float64 | OffsetTime
+
 alias UnionOneway = Float64 | Oneway
 
 alias UnionOpen = Float64 | Open
diff --git a/base/schema-csharp/test/inputs/schema/date-time.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/date-time.schema/default/QuickType.cs
index 04196fd..2ccd544 100644
--- a/base/schema-csharp/test/inputs/schema/date-time.schema/default/QuickType.cs
+++ b/head/schema-csharp/test/inputs/schema/date-time.schema/default/QuickType.cs
@@ -34,6 +34,15 @@ namespace QuickType
         [JsonProperty("date-time", Required = Required.Always)]
         public DateTimeOffset DateTime { get; set; }
 
+        [JsonProperty("local-date-class", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LocalDate? LocalDateClass { get; set; }
+
+        [JsonProperty("offset-date-time-class", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public OffsetDateTime? OffsetDateTimeClass { get; set; }
+
+        [JsonProperty("offset-time-class", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public OffsetTime? OffsetTimeClass { get; set; }
+
         [JsonProperty("time", Required = Required.Always)]
         public DateTimeOffset Time { get; set; }
 
@@ -41,6 +50,18 @@ namespace QuickType
         public DateTimeOffset[] UnionArray { get; set; }
     }
 
+    public partial class LocalDate
+    {
+    }
+
+    public partial class OffsetDateTime
+    {
+    }
+
+    public partial class OffsetTime
+    {
+    }
+
     public enum ComplexUnionArrayEnum { Foo, Bar };
 
     public partial struct ComplexUnionArrayElement
diff --git a/base/schema-csharp/test/inputs/schema/keyword-enum.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
index 4304b4a..08a7f42 100644
--- a/base/schema-csharp/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
+++ b/head/schema-csharp/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
@@ -29,7 +29,7 @@ namespace QuickType
         public Enum? Enum { get; set; }
     }
 
-    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, ArrayNode, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, BooleanNode, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, DeserializationFeature, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, DoubleNode, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, IntNode, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, LongNode, Locale, Lock, Long, Map, MarshalJson, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, NullNode, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, ObjectNode, ObjectMapper, ObjectReader, ObjectWriter, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializationFeature, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, TextNode, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJson, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
+    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, ArrayNode, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, BooleanNode, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, DeserializationFeature, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, DoubleNode, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, IntNode, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, LocalDate, LongNode, Locale, Lock, Long, Map, MarshalJson, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, NullNode, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, OffsetDateTime, OffsetTime, ObjectNode, ObjectMapper, ObjectReader, ObjectWriter, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializationFeature, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, TextNode, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJson, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
 
     public partial class TopLevel
     {
@@ -429,6 +429,8 @@ namespace QuickType
                     return Enum.Let;
                 case "list":
                     return Enum.List;
+                case "LocalDate":
+                    return Enum.LocalDate;
                 case "LongNode":
                     return Enum.LongNode;
                 case "Locale":
@@ -499,6 +501,10 @@ namespace QuickType
                     return Enum.Number;
                 case "object":
                     return Enum.Object;
+                case "OffsetDateTime":
+                    return Enum.OffsetDateTime;
+                case "OffsetTime":
+                    return Enum.OffsetTime;
                 case "ObjectNode":
                     return Enum.ObjectNode;
                 case "ObjectMapper":
@@ -1335,6 +1341,9 @@ namespace QuickType
                 case Enum.List:
                     serializer.Serialize(writer, "list");
                     return;
+                case Enum.LocalDate:
+                    serializer.Serialize(writer, "LocalDate");
+                    return;
                 case Enum.LongNode:
                     serializer.Serialize(writer, "LongNode");
                     return;
@@ -1440,6 +1449,12 @@ namespace QuickType
                 case Enum.Object:
                     serializer.Serialize(writer, "object");
                     return;
+                case Enum.OffsetDateTime:
+                    serializer.Serialize(writer, "OffsetDateTime");
+                    return;
+                case Enum.OffsetTime:
+                    serializer.Serialize(writer, "OffsetTime");
+                    return;
                 case Enum.ObjectNode:
                     serializer.Serialize(writer, "ObjectNode");
                     return;
diff --git a/base/schema-csharp/test/inputs/schema/keyword-unions.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
index 2752b0b..b8880d8 100644
--- a/base/schema-csharp/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
+++ b/head/schema-csharp/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
@@ -577,6 +577,9 @@ namespace QuickType
         [JsonProperty("list", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionList? List { get; set; }
 
+        [JsonProperty("LocalDate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionLocalDate? LocalDate { get; set; }
+
         [JsonProperty("Locale", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionLocale? Locale { get; set; }
 
@@ -697,6 +700,12 @@ namespace QuickType
         [JsonProperty("of", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionOf? Of { get; set; }
 
+        [JsonProperty("OffsetDateTime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOffsetDateTime? OffsetDateTime { get; set; }
+
+        [JsonProperty("OffsetTime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOffsetTime? OffsetTime { get; set; }
+
         [JsonProperty("oneway", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionOneway? Oneway { get; set; }
 
@@ -1799,6 +1808,10 @@ namespace QuickType
     {
     }
 
+    public partial class LocalDate
+    {
+    }
+
     public partial class Locale
     {
     }
@@ -1951,6 +1964,14 @@ namespace QuickType
     {
     }
 
+    public partial class OffsetDateTime
+    {
+    }
+
+    public partial class OffsetTime
+    {
+    }
+
     public partial class Oneway
     {
     }
@@ -4100,6 +4121,15 @@ namespace QuickType
         public static implicit operator UnionList(List List) => new UnionList { List = List };
     }
 
+    public partial struct UnionLocalDate
+    {
+        public double? Double;
+        public LocalDate? LocalDate;
+
+        public static implicit operator UnionLocalDate(double Double) => new UnionLocalDate { Double = Double };
+        public static implicit operator UnionLocalDate(LocalDate LocalDate) => new UnionLocalDate { LocalDate = LocalDate };
+    }
+
     public partial struct UnionLocale
     {
         public double? Double;
@@ -4442,6 +4472,24 @@ namespace QuickType
         public static implicit operator UnionOf(Of Of) => new UnionOf { Of = Of };
     }
 
+    public partial struct UnionOffsetDateTime
+    {
+        public double? Double;
+        public OffsetDateTime? OffsetDateTime;
+
+        public static implicit operator UnionOffsetDateTime(double Double) => new UnionOffsetDateTime { Double = Double };
+        public static implicit operator UnionOffsetDateTime(OffsetDateTime OffsetDateTime) => new UnionOffsetDateTime { OffsetDateTime = OffsetDateTime };
+    }
+
+    public partial struct UnionOffsetTime
+    {
+        public double? Double;
+        public OffsetTime? OffsetTime;
+
+        public static implicit operator UnionOffsetTime(double Double) => new UnionOffsetTime { Double = Double };
+        public static implicit operator UnionOffsetTime(OffsetTime OffsetTime) => new UnionOffsetTime { OffsetTime = OffsetTime };
+    }
+
     public partial struct UnionOneway
     {
         public double? Double;
@@ -5752,6 +5800,7 @@ namespace QuickType
                 UnionJsonReaderConverter.Singleton,
                 UnionJsonTokenTypeConverter.Singleton,
                 UnionKSerializerConverter.Singleton,
+                UnionLocalDateConverter.Singleton,
                 UnionLocaleConverter.Singleton,
                 UnionLongNodeConverter.Singleton,
                 UnionMapEntryConverter.Singleton,
@@ -5767,6 +5816,8 @@ namespace QuickType
                 UnionObjectNodeConverter.Singleton,
                 UnionObjectReaderConverter.Singleton,
                 UnionObjectWriterConverter.Singleton,
+                UnionOffsetDateTimeConverter.Singleton,
+                UnionOffsetTimeConverter.Singleton,
                 UnionPrimitiveKindConverter.Singleton,
                 UnionProtocolConverter.Singleton,
                 UnionRegExpConverter.Singleton,
@@ -7628,6 +7679,44 @@ namespace QuickType
         public static readonly UnionKSerializerConverter Singleton = new UnionKSerializerConverter();
     }
 
+    internal class UnionLocalDateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionLocalDate) || t == typeof(UnionLocalDate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionLocalDate { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LocalDate>(reader);
+                    return new UnionLocalDate { LocalDate = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionLocalDate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionLocalDate)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.LocalDate != null)
+            {
+                serializer.Serialize(writer, value.LocalDate);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionLocalDate");
+        }
+
+        public static readonly UnionLocalDateConverter Singleton = new UnionLocalDateConverter();
+    }
+
     internal class UnionLocaleConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionLocale) || t == typeof(UnionLocale?);
@@ -8198,6 +8287,82 @@ namespace QuickType
         public static readonly UnionObjectWriterConverter Singleton = new UnionObjectWriterConverter();
     }
 
+    internal class UnionOffsetDateTimeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOffsetDateTime) || t == typeof(UnionOffsetDateTime?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOffsetDateTime { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OffsetDateTime>(reader);
+                    return new UnionOffsetDateTime { OffsetDateTime = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOffsetDateTime");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOffsetDateTime)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OffsetDateTime != null)
+            {
+                serializer.Serialize(writer, value.OffsetDateTime);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOffsetDateTime");
+        }
+
+        public static readonly UnionOffsetDateTimeConverter Singleton = new UnionOffsetDateTimeConverter();
+    }
+
+    internal class UnionOffsetTimeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOffsetTime) || t == typeof(UnionOffsetTime?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOffsetTime { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OffsetTime>(reader);
+                    return new UnionOffsetTime { OffsetTime = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOffsetTime");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOffsetTime)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OffsetTime != null)
+            {
+                serializer.Serialize(writer, value.OffsetTime);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOffsetTime");
+        }
+
+        public static readonly UnionOffsetTimeConverter Singleton = new UnionOffsetTimeConverter();
+    }
+
     internal class UnionPrimitiveKindConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionPrimitiveKind) || t == typeof(UnionPrimitiveKind?);
diff --git a/base/schema-csharp-SystemTextJson/test/inputs/schema/date-time.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/date-time.schema/default/QuickType.cs
index cd0075f..8deb683 100644
--- a/base/schema-csharp-SystemTextJson/test/inputs/schema/date-time.schema/default/QuickType.cs
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/date-time.schema/default/QuickType.cs
@@ -34,6 +34,18 @@ namespace QuickType
         [JsonPropertyName("date-time")]
         public DateTimeOffset DateTime { get; set; }
 
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("local-date-class")]
+        public LocalDate? LocalDateClass { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("offset-date-time-class")]
+        public OffsetDateTime? OffsetDateTimeClass { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("offset-time-class")]
+        public OffsetTime? OffsetTimeClass { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("time")]
         public DateTimeOffset Time { get; set; }
@@ -43,6 +55,18 @@ namespace QuickType
         public DateTimeOffset[] UnionArray { get; set; }
     }
 
+    public partial class LocalDate
+    {
+    }
+
+    public partial class OffsetDateTime
+    {
+    }
+
+    public partial class OffsetTime
+    {
+    }
+
     public enum ComplexUnionArrayEnum { Foo, Bar };
 
     public partial struct ComplexUnionArrayElement
diff --git a/base/schema-csharp-SystemTextJson/test/inputs/schema/keyword-enum.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
index 33babce..d13da48 100644
--- a/base/schema-csharp-SystemTextJson/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
@@ -27,7 +27,7 @@ namespace QuickType
         public Enum? Enum { get; set; }
     }
 
-    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, ArrayNode, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, BooleanNode, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, DeserializationFeature, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, DoubleNode, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, IntNode, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, LongNode, Locale, Lock, Long, Map, MarshalJson, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, NullNode, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, ObjectNode, ObjectMapper, ObjectReader, ObjectWriter, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializationFeature, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, TextNode, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJson, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
+    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, ArrayNode, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, BooleanNode, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, DeserializationFeature, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, DoubleNode, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, IntNode, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, LocalDate, LongNode, Locale, Lock, Long, Map, MarshalJson, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, NullNode, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, OffsetDateTime, OffsetTime, ObjectNode, ObjectMapper, ObjectReader, ObjectWriter, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializationFeature, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, TextNode, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJson, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
 
     public partial class TopLevel
     {
@@ -426,6 +426,8 @@ namespace QuickType
                     return Enum.Let;
                 case "list":
                     return Enum.List;
+                case "LocalDate":
+                    return Enum.LocalDate;
                 case "LongNode":
                     return Enum.LongNode;
                 case "Locale":
@@ -496,6 +498,10 @@ namespace QuickType
                     return Enum.Number;
                 case "object":
                     return Enum.Object;
+                case "OffsetDateTime":
+                    return Enum.OffsetDateTime;
+                case "OffsetTime":
+                    return Enum.OffsetTime;
                 case "ObjectNode":
                     return Enum.ObjectNode;
                 case "ObjectMapper":
@@ -1326,6 +1332,9 @@ namespace QuickType
                 case Enum.List:
                     JsonSerializer.Serialize(writer, "list", options);
                     return;
+                case Enum.LocalDate:
+                    JsonSerializer.Serialize(writer, "LocalDate", options);
+                    return;
                 case Enum.LongNode:
                     JsonSerializer.Serialize(writer, "LongNode", options);
                     return;
@@ -1431,6 +1440,12 @@ namespace QuickType
                 case Enum.Object:
                     JsonSerializer.Serialize(writer, "object", options);
                     return;
+                case Enum.OffsetDateTime:
+                    JsonSerializer.Serialize(writer, "OffsetDateTime", options);
+                    return;
+                case Enum.OffsetTime:
+                    JsonSerializer.Serialize(writer, "OffsetTime", options);
+                    return;
                 case Enum.ObjectNode:
                     JsonSerializer.Serialize(writer, "ObjectNode", options);
                     return;
diff --git a/base/schema-csharp-SystemTextJson/test/inputs/schema/keyword-unions.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
index f396860..73e2f73 100644
--- a/base/schema-csharp-SystemTextJson/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
@@ -758,6 +758,10 @@ namespace QuickType
         [JsonPropertyName("list")]
         public UnionList? List { get; set; }
 
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("LocalDate")]
+        public UnionLocalDate? LocalDate { get; set; }
+
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("Locale")]
         public UnionLocale? Locale { get; set; }
@@ -918,6 +922,14 @@ namespace QuickType
         [JsonPropertyName("of")]
         public UnionOf? Of { get; set; }
 
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("OffsetDateTime")]
+        public UnionOffsetDateTime? OffsetDateTime { get; set; }
+
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("OffsetTime")]
+        public UnionOffsetTime? OffsetTime { get; set; }
+
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("oneway")]
         public UnionOneway? Oneway { get; set; }
@@ -2151,6 +2163,10 @@ namespace QuickType
     {
     }
 
+    public partial class LocalDate
+    {
+    }
+
     public partial class Locale
     {
     }
@@ -2303,6 +2319,14 @@ namespace QuickType
     {
     }
 
+    public partial class OffsetDateTime
+    {
+    }
+
+    public partial class OffsetTime
+    {
+    }
+
     public partial class Oneway
     {
     }
@@ -4452,6 +4476,15 @@ namespace QuickType
         public static implicit operator UnionList(List List) => new UnionList { List = List };
     }
 
+    public partial struct UnionLocalDate
+    {
+        public double? Double;
+        public LocalDate? LocalDate;
+
+        public static implicit operator UnionLocalDate(double Double) => new UnionLocalDate { Double = Double };
+        public static implicit operator UnionLocalDate(LocalDate LocalDate) => new UnionLocalDate { LocalDate = LocalDate };
+    }
+
     public partial struct UnionLocale
     {
         public double? Double;
@@ -4794,6 +4827,24 @@ namespace QuickType
         public static implicit operator UnionOf(Of Of) => new UnionOf { Of = Of };
     }
 
+    public partial struct UnionOffsetDateTime
+    {
+        public double? Double;
+        public OffsetDateTime? OffsetDateTime;
+
+        public static implicit operator UnionOffsetDateTime(double Double) => new UnionOffsetDateTime { Double = Double };
+        public static implicit operator UnionOffsetDateTime(OffsetDateTime OffsetDateTime) => new UnionOffsetDateTime { OffsetDateTime = OffsetDateTime };
+    }
+
+    public partial struct UnionOffsetTime
+    {
+        public double? Double;
+        public OffsetTime? OffsetTime;
+
+        public static implicit operator UnionOffsetTime(double Double) => new UnionOffsetTime { Double = Double };
+        public static implicit operator UnionOffsetTime(OffsetTime OffsetTime) => new UnionOffsetTime { OffsetTime = OffsetTime };
+    }
+
     public partial struct UnionOneway
     {
         public double? Double;
@@ -6102,6 +6153,7 @@ namespace QuickType
                 UnionJsonReaderConverter.Singleton,
                 UnionJsonTokenTypeConverter.Singleton,
                 UnionKSerializerConverter.Singleton,
+                UnionLocalDateConverter.Singleton,
                 UnionLocaleConverter.Singleton,
                 UnionLongNodeConverter.Singleton,
                 UnionMapEntryConverter.Singleton,
@@ -6117,6 +6169,8 @@ namespace QuickType
                 UnionObjectNodeConverter.Singleton,
                 UnionObjectReaderConverter.Singleton,
                 UnionObjectWriterConverter.Singleton,
+                UnionOffsetDateTimeConverter.Singleton,
+                UnionOffsetTimeConverter.Singleton,
                 UnionPrimitiveKindConverter.Singleton,
                 UnionProtocolConverter.Singleton,
                 UnionRegExpConverter.Singleton,
@@ -7898,6 +7952,42 @@ namespace QuickType
         public static readonly UnionKSerializerConverter Singleton = new UnionKSerializerConverter();
     }
 
+    internal class UnionLocalDateConverter : JsonConverter<UnionLocalDate>
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionLocalDate);
+
+        public override UnionLocalDate Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new UnionLocalDate { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<LocalDate>(ref reader, options);
+                    return new UnionLocalDate { LocalDate = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type UnionLocalDate");
+        }
+
+        public override void Write(Utf8JsonWriter writer, UnionLocalDate value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.LocalDate != null)
+            {
+                JsonSerializer.Serialize(writer, value.LocalDate, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type UnionLocalDate");
+        }
+
+        public static readonly UnionLocalDateConverter Singleton = new UnionLocalDateConverter();
+    }
+
     internal class UnionLocaleConverter : JsonConverter<UnionLocale>
     {
         public override bool CanConvert(Type t) => t == typeof(UnionLocale);
@@ -8438,6 +8528,78 @@ namespace QuickType
         public static readonly UnionObjectWriterConverter Singleton = new UnionObjectWriterConverter();
     }
 
+    internal class UnionOffsetDateTimeConverter : JsonConverter<UnionOffsetDateTime>
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOffsetDateTime);
+
+        public override UnionOffsetDateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new UnionOffsetDateTime { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<OffsetDateTime>(ref reader, options);
+                    return new UnionOffsetDateTime { OffsetDateTime = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type UnionOffsetDateTime");
+        }
+
+        public override void Write(Utf8JsonWriter writer, UnionOffsetDateTime value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.OffsetDateTime != null)
+            {
+                JsonSerializer.Serialize(writer, value.OffsetDateTime, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type UnionOffsetDateTime");
+        }
+
+        public static readonly UnionOffsetDateTimeConverter Singleton = new UnionOffsetDateTimeConverter();
+    }
+
+    internal class UnionOffsetTimeConverter : JsonConverter<UnionOffsetTime>
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOffsetTime);
+
+        public override UnionOffsetTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new UnionOffsetTime { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<OffsetTime>(ref reader, options);
+                    return new UnionOffsetTime { OffsetTime = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type UnionOffsetTime");
+        }
+
+        public override void Write(Utf8JsonWriter writer, UnionOffsetTime value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.OffsetTime != null)
+            {
+                JsonSerializer.Serialize(writer, value.OffsetTime, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type UnionOffsetTime");
+        }
+
+        public static readonly UnionOffsetTimeConverter Singleton = new UnionOffsetTimeConverter();
+    }
+
     internal class UnionPrimitiveKindConverter : JsonConverter<UnionPrimitiveKind>
     {
         public override bool CanConvert(Type t) => t == typeof(UnionPrimitiveKind);
diff --git a/base/schema-csharp-records/test/inputs/schema/date-time.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/date-time.schema/default/QuickType.cs
index 06fcbfa..04d9d6c 100644
--- a/base/schema-csharp-records/test/inputs/schema/date-time.schema/default/QuickType.cs
+++ b/head/schema-csharp-records/test/inputs/schema/date-time.schema/default/QuickType.cs
@@ -34,6 +34,15 @@ namespace QuickType
         [JsonProperty("date-time", Required = Required.Always)]
         public DateTimeOffset DateTime { get; set; }
 
+        [JsonProperty("local-date-class", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public LocalDate? LocalDateClass { get; set; }
+
+        [JsonProperty("offset-date-time-class", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public OffsetDateTime? OffsetDateTimeClass { get; set; }
+
+        [JsonProperty("offset-time-class", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public OffsetTime? OffsetTimeClass { get; set; }
+
         [JsonProperty("time", Required = Required.Always)]
         public DateTimeOffset Time { get; set; }
 
@@ -41,6 +50,18 @@ namespace QuickType
         public DateTimeOffset[] UnionArray { get; set; }
     }
 
+    public partial record LocalDate
+    {
+    }
+
+    public partial record OffsetDateTime
+    {
+    }
+
+    public partial record OffsetTime
+    {
+    }
+
     public enum ComplexUnionArrayEnum { Foo, Bar };
 
     public partial struct ComplexUnionArrayElement
diff --git a/base/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
index a96f222..e5a0da8 100644
--- a/base/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
+++ b/head/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
@@ -29,7 +29,7 @@ namespace QuickType
         public Enum? Enum { get; set; }
     }
 
-    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, ArrayNode, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, BooleanNode, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, DeserializationFeature, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, DoubleNode, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, IntNode, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, LongNode, Locale, Lock, Long, Map, MarshalJson, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, NullNode, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, ObjectNode, ObjectMapper, ObjectReader, ObjectWriter, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializationFeature, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, TextNode, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJson, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
+    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, ArrayNode, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, BooleanNode, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, DeserializationFeature, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, DoubleNode, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, IntNode, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, LocalDate, LongNode, Locale, Lock, Long, Map, MarshalJson, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, NullNode, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, OffsetDateTime, OffsetTime, ObjectNode, ObjectMapper, ObjectReader, ObjectWriter, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializationFeature, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, TextNode, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJson, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
 
     public partial record TopLevel
     {
@@ -429,6 +429,8 @@ namespace QuickType
                     return Enum.Let;
                 case "list":
                     return Enum.List;
+                case "LocalDate":
+                    return Enum.LocalDate;
                 case "LongNode":
                     return Enum.LongNode;
                 case "Locale":
@@ -499,6 +501,10 @@ namespace QuickType
                     return Enum.Number;
                 case "object":
                     return Enum.Object;
+                case "OffsetDateTime":
+                    return Enum.OffsetDateTime;
+                case "OffsetTime":
+                    return Enum.OffsetTime;
                 case "ObjectNode":
                     return Enum.ObjectNode;
                 case "ObjectMapper":
@@ -1335,6 +1341,9 @@ namespace QuickType
                 case Enum.List:
                     serializer.Serialize(writer, "list");
                     return;
+                case Enum.LocalDate:
+                    serializer.Serialize(writer, "LocalDate");
+                    return;
                 case Enum.LongNode:
                     serializer.Serialize(writer, "LongNode");
                     return;
@@ -1440,6 +1449,12 @@ namespace QuickType
                 case Enum.Object:
                     serializer.Serialize(writer, "object");
                     return;
+                case Enum.OffsetDateTime:
+                    serializer.Serialize(writer, "OffsetDateTime");
+                    return;
+                case Enum.OffsetTime:
+                    serializer.Serialize(writer, "OffsetTime");
+                    return;
                 case Enum.ObjectNode:
                     serializer.Serialize(writer, "ObjectNode");
                     return;
diff --git a/base/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
index 282145a..d421f81 100644
--- a/base/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
+++ b/head/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
@@ -577,6 +577,9 @@ namespace QuickType
         [JsonProperty("list", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionList? List { get; set; }
 
+        [JsonProperty("LocalDate", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionLocalDate? LocalDate { get; set; }
+
         [JsonProperty("Locale", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionLocale? Locale { get; set; }
 
@@ -697,6 +700,12 @@ namespace QuickType
         [JsonProperty("of", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionOf? Of { get; set; }
 
+        [JsonProperty("OffsetDateTime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOffsetDateTime? OffsetDateTime { get; set; }
+
+        [JsonProperty("OffsetTime", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionOffsetTime? OffsetTime { get; set; }
+
         [JsonProperty("oneway", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionOneway? Oneway { get; set; }
 
@@ -1791,6 +1800,10 @@ namespace QuickType
     {
     }
 
+    public partial record LocalDate
+    {
+    }
+
     public partial record Locale
     {
     }
@@ -1943,6 +1956,14 @@ namespace QuickType
     {
     }
 
+    public partial record OffsetDateTime
+    {
+    }
+
+    public partial record OffsetTime
+    {
+    }
+
     public partial record Oneway
     {
     }
@@ -4082,6 +4103,15 @@ namespace QuickType
         public static implicit operator UnionList(List List) => new UnionList { List = List };
     }
 
+    public partial struct UnionLocalDate
+    {
+        public double? Double;
+        public LocalDate? LocalDate;
+
+        public static implicit operator UnionLocalDate(double Double) => new UnionLocalDate { Double = Double };
+        public static implicit operator UnionLocalDate(LocalDate LocalDate) => new UnionLocalDate { LocalDate = LocalDate };
+    }
+
     public partial struct UnionLocale
     {
         public double? Double;
@@ -4424,6 +4454,24 @@ namespace QuickType
         public static implicit operator UnionOf(Of Of) => new UnionOf { Of = Of };
     }
 
+    public partial struct UnionOffsetDateTime
+    {
+        public double? Double;
+        public OffsetDateTime? OffsetDateTime;
+
+        public static implicit operator UnionOffsetDateTime(double Double) => new UnionOffsetDateTime { Double = Double };
+        public static implicit operator UnionOffsetDateTime(OffsetDateTime OffsetDateTime) => new UnionOffsetDateTime { OffsetDateTime = OffsetDateTime };
+    }
+
+    public partial struct UnionOffsetTime
+    {
+        public double? Double;
+        public OffsetTime? OffsetTime;
+
+        public static implicit operator UnionOffsetTime(double Double) => new UnionOffsetTime { Double = Double };
+        public static implicit operator UnionOffsetTime(OffsetTime OffsetTime) => new UnionOffsetTime { OffsetTime = OffsetTime };
+    }
+
     public partial struct UnionOneway
     {
         public double? Double;
@@ -5752,6 +5800,7 @@ namespace QuickType
                 UnionJsonReaderConverter.Singleton,
                 UnionJsonTokenTypeConverter.Singleton,
                 UnionKSerializerConverter.Singleton,
+                UnionLocalDateConverter.Singleton,
                 UnionLocaleConverter.Singleton,
                 UnionLongNodeConverter.Singleton,
                 UnionMapEntryConverter.Singleton,
@@ -5767,6 +5816,8 @@ namespace QuickType
                 UnionObjectNodeConverter.Singleton,
                 UnionObjectReaderConverter.Singleton,
                 UnionObjectWriterConverter.Singleton,
+                UnionOffsetDateTimeConverter.Singleton,
+                UnionOffsetTimeConverter.Singleton,
                 UnionPrimitiveKindConverter.Singleton,
                 UnionProtocolConverter.Singleton,
                 UnionRegExpConverter.Singleton,
@@ -7628,6 +7679,44 @@ namespace QuickType
         public static readonly UnionKSerializerConverter Singleton = new UnionKSerializerConverter();
     }
 
+    internal class UnionLocalDateConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionLocalDate) || t == typeof(UnionLocalDate?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionLocalDate { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<LocalDate>(reader);
+                    return new UnionLocalDate { LocalDate = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionLocalDate");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionLocalDate)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.LocalDate != null)
+            {
+                serializer.Serialize(writer, value.LocalDate);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionLocalDate");
+        }
+
+        public static readonly UnionLocalDateConverter Singleton = new UnionLocalDateConverter();
+    }
+
     internal class UnionLocaleConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionLocale) || t == typeof(UnionLocale?);
@@ -8198,6 +8287,82 @@ namespace QuickType
         public static readonly UnionObjectWriterConverter Singleton = new UnionObjectWriterConverter();
     }
 
+    internal class UnionOffsetDateTimeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOffsetDateTime) || t == typeof(UnionOffsetDateTime?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOffsetDateTime { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OffsetDateTime>(reader);
+                    return new UnionOffsetDateTime { OffsetDateTime = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOffsetDateTime");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOffsetDateTime)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OffsetDateTime != null)
+            {
+                serializer.Serialize(writer, value.OffsetDateTime);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOffsetDateTime");
+        }
+
+        public static readonly UnionOffsetDateTimeConverter Singleton = new UnionOffsetDateTimeConverter();
+    }
+
+    internal class UnionOffsetTimeConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionOffsetTime) || t == typeof(UnionOffsetTime?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionOffsetTime { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<OffsetTime>(reader);
+                    return new UnionOffsetTime { OffsetTime = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionOffsetTime");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionOffsetTime)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.OffsetTime != null)
+            {
+                serializer.Serialize(writer, value.OffsetTime);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionOffsetTime");
+        }
+
+        public static readonly UnionOffsetTimeConverter Singleton = new UnionOffsetTimeConverter();
+    }
+
     internal class UnionPrimitiveKindConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionPrimitiveKind) || t == typeof(UnionPrimitiveKind?);
diff --git a/base/schema-dart/test/inputs/schema/date-time.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/date-time.schema/default/TopLevel.dart
index c9e211f..da17ab1 100644
--- a/base/schema-dart/test/inputs/schema/date-time.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/date-time.schema/default/TopLevel.dart
@@ -12,6 +12,9 @@ class TopLevel {
     final List<dynamic> complexUnionArray;
     final DateTime date;
     final DateTime dateTime;
+    final LocalDate? localDateClass;
+    final OffsetDateTime? offsetDateTimeClass;
+    final OffsetTime? offsetTimeClass;
     final String time;
     final List<String> unionArray;
 
@@ -19,6 +22,9 @@ class TopLevel {
         required this.complexUnionArray,
         required this.date,
         required this.dateTime,
+        this.localDateClass,
+        this.offsetDateTimeClass,
+        this.offsetTimeClass,
         required this.time,
         required this.unionArray,
     });
@@ -27,6 +33,9 @@ class TopLevel {
         complexUnionArray: List<dynamic>.from(json["complex-union-array"].map((x) => x)),
         date: DateTime.parse(json["date"]),
         dateTime: DateTime.parse(json["date-time"]),
+        localDateClass: json["local-date-class"] == null ? null : LocalDate.fromJson(json["local-date-class"]),
+        offsetDateTimeClass: json["offset-date-time-class"] == null ? null : OffsetDateTime.fromJson(json["offset-date-time-class"]),
+        offsetTimeClass: json["offset-time-class"] == null ? null : OffsetTime.fromJson(json["offset-time-class"]),
         time: json["time"],
         unionArray: List<String>.from(json["union-array"].map((x) => x)),
     );
@@ -35,6 +44,9 @@ class TopLevel {
         "complex-union-array": List<dynamic>.from(complexUnionArray.map((x) => x)),
         "date": "${date.year.toString().padLeft(4, '0')}-${date.month.toString().padLeft(2, '0')}-${date.day.toString().padLeft(2, '0')}",
         "date-time": dateTime.toIso8601String(),
+        "local-date-class": localDateClass?.toJson(),
+        "offset-date-time-class": offsetDateTimeClass?.toJson(),
+        "offset-time-class": offsetTimeClass?.toJson(),
         "time": time,
         "union-array": List<dynamic>.from(unionArray.map((x) => x)),
     };
@@ -50,6 +62,36 @@ final complexUnionArrayEnumValues = EnumValues({
     "bar": ComplexUnionArrayEnum.BAR
 });
 
+class LocalDate {
+    LocalDate();
+
+    factory LocalDate.fromJson(Map<String, dynamic> json) => LocalDate(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
+class OffsetDateTime {
+    OffsetDateTime();
+
+    factory OffsetDateTime.fromJson(Map<String, dynamic> json) => OffsetDateTime(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
+class OffsetTime {
+    OffsetTime();
+
+    factory OffsetTime.fromJson(Map<String, dynamic> json) => OffsetTime(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
 class EnumValues<T> {
     Map<String, T> map;
     late Map<T, String> reverseMap;
diff --git a/base/schema-dart/test/inputs/schema/keyword-enum.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/keyword-enum.schema/default/TopLevel.dart
index 3df5fe6..5f73900 100644
--- a/base/schema-dart/test/inputs/schema/keyword-enum.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/keyword-enum.schema/default/TopLevel.dart
@@ -207,6 +207,7 @@ enum Enum {
     LEFT,
     LET,
     LIST,
+    LOCAL_DATE,
     LONG_NODE,
     LOCALE,
     LOCK,
@@ -242,6 +243,8 @@ enum Enum {
     NULLPTR,
     NUMBER,
     OBJECT,
+    OFFSET_DATE_TIME,
+    OFFSET_TIME,
     OBJECT_NODE,
     OBJECT_MAPPER,
     OBJECT_READER,
@@ -565,6 +568,7 @@ final enumValues = EnumValues({
     "left": Enum.LEFT,
     "let": Enum.LET,
     "list": Enum.LIST,
+    "LocalDate": Enum.LOCAL_DATE,
     "LongNode": Enum.LONG_NODE,
     "Locale": Enum.LOCALE,
     "lock": Enum.LOCK,
@@ -600,6 +604,8 @@ final enumValues = EnumValues({
     "nullptr": Enum.NULLPTR,
     "number": Enum.NUMBER,
     "object": Enum.OBJECT,
+    "OffsetDateTime": Enum.OFFSET_DATE_TIME,
+    "OffsetTime": Enum.OFFSET_TIME,
     "ObjectNode": Enum.OBJECT_NODE,
     "ObjectMapper": Enum.OBJECT_MAPPER,
     "ObjectReader": Enum.OBJECT_READER,
diff --git a/base/schema-dart/test/inputs/schema/keyword-unions.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/keyword-unions.schema/default/TopLevel.dart
index 1be5623..3a259b9 100644
--- a/base/schema-dart/test/inputs/schema/keyword-unions.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/keyword-unions.schema/default/TopLevel.dart
@@ -193,6 +193,7 @@ class TopLevel {
     final dynamic left;
     final dynamic let;
     final dynamic list;
+    final dynamic localDate;
     final dynamic locale;
     final dynamic lock;
     final dynamic long;
@@ -233,6 +234,8 @@ class TopLevel {
     final dynamic objectReader;
     final dynamic objectWriter;
     final dynamic of;
+    final dynamic offsetDateTime;
+    final dynamic offsetTime;
     final dynamic oneway;
     final dynamic open;
     final dynamic topLevelOperator;
@@ -550,6 +553,7 @@ class TopLevel {
         this.left,
         this.let,
         this.list,
+        this.localDate,
         this.locale,
         this.lock,
         this.long,
@@ -590,6 +594,8 @@ class TopLevel {
         this.objectReader,
         this.objectWriter,
         this.of,
+        this.offsetDateTime,
+        this.offsetTime,
         this.oneway,
         this.open,
         this.topLevelOperator,
@@ -908,6 +914,7 @@ class TopLevel {
         left: json["left"],
         let: json["let"],
         list: json["list"],
+        localDate: json["LocalDate"],
         locale: json["Locale"],
         lock: json["lock"],
         long: json["long"],
@@ -948,6 +955,8 @@ class TopLevel {
         objectReader: json["ObjectReader"],
         objectWriter: json["ObjectWriter"],
         of: json["of"],
+        offsetDateTime: json["OffsetDateTime"],
+        offsetTime: json["OffsetTime"],
         oneway: json["oneway"],
         open: json["open"],
         topLevelOperator: json["operator"],
@@ -1266,6 +1275,7 @@ class TopLevel {
         "left": left,
         "let": let,
         "list": list,
+        "LocalDate": localDate,
         "Locale": locale,
         "lock": lock,
         "long": long,
@@ -1306,6 +1316,8 @@ class TopLevel {
         "ObjectReader": objectReader,
         "ObjectWriter": objectWriter,
         "of": of,
+        "OffsetDateTime": offsetDateTime,
+        "OffsetTime": offsetTime,
         "oneway": oneway,
         "open": open,
         "operator": topLevelOperator,
@@ -2890,6 +2902,16 @@ class ListClass {
     };
 }
 
+class LocalDate {
+    LocalDate();
+
+    factory LocalDate.fromJson(Map<String, dynamic> json) => LocalDate(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
 class Locale {
     Locale();
 
@@ -3240,6 +3262,26 @@ class Of {
     };
 }
 
+class OffsetDateTime {
+    OffsetDateTime();
+
+    factory OffsetDateTime.fromJson(Map<String, dynamic> json) => OffsetDateTime(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
+class OffsetTime {
+    OffsetTime();
+
+    factory OffsetTime.fromJson(Map<String, dynamic> json) => OffsetTime(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
 class Oneway {
     Oneway();
 
diff --git a/base/schema-elixir/test/inputs/schema/date-time.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/date-time.schema/default/QuickType.ex
index 4d75e9a..ffdc502 100644
--- a/base/schema-elixir/test/inputs/schema/date-time.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/date-time.schema/default/QuickType.ex
@@ -5,14 +5,104 @@
 # Decode a JSON string: TopLevel.from_json(data)
 # Encode into a JSON string: TopLevel.to_json(struct)
 
+defmodule LocalDate do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %LocalDate{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule OffsetDateTime do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %OffsetDateTime{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule OffsetTime do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %OffsetTime{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule TopLevel do
   @enforce_keys [:complex_union_array, :date, :date_time, :time, :union_array]
-  defstruct [:complex_union_array, :date, :date_time, :time, :union_array]
+  defstruct [:complex_union_array, :date, :date_time, :local_date_class, :offset_date_time_class, :offset_time_class, :time, :union_array]
 
   @type t :: %__MODULE__{
           complex_union_array: [integer() | String.t()],
           date: String.t(),
           date_time: String.t(),
+          local_date_class: LocalDate.t() | nil,
+          offset_date_time_class: OffsetDateTime.t() | nil,
+          offset_time_class: OffsetTime.t() | nil,
           time: String.t(),
           union_array: [String.t()]
         }
@@ -60,6 +150,9 @@ defmodule TopLevel do
       complex_union_array: Enum.map(m["complex-union-array"], &decode_complex_union_array_element/1),
       date: decode_date(m["date"]),
       date_time: decode_date_time(m["date-time"]),
+      local_date_class: m["local-date-class"] && LocalDate.from_map(m["local-date-class"]),
+      offset_date_time_class: m["offset-date-time-class"] && OffsetDateTime.from_map(m["offset-date-time-class"]),
+      offset_time_class: m["offset-time-class"] && OffsetTime.from_map(m["offset-time-class"]),
       time: decode_time(m["time"]),
       union_array: decode_union_array(m["union-array"]),
     }
@@ -76,6 +169,9 @@ defmodule TopLevel do
       "complex-union-array" => struct.complex_union_array && Enum.map(struct.complex_union_array, &encode_complex_union_array_element/1),
       "date" => struct.date,
       "date-time" => struct.date_time,
+      "local-date-class" => struct.local_date_class && LocalDate.to_map(struct.local_date_class),
+      "offset-date-time-class" => struct.offset_date_time_class && OffsetDateTime.to_map(struct.offset_date_time_class),
+      "offset-time-class" => struct.offset_time_class && OffsetTime.to_map(struct.offset_time_class),
       "time" => struct.time,
       "union-array" => struct.union_array,
     }
diff --git a/base/schema-elixir/test/inputs/schema/keyword-enum.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/keyword-enum.schema/default/QuickType.ex
index faab5e9..c371cae 100644
--- a/base/schema-elixir/test/inputs/schema/keyword-enum.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/keyword-enum.schema/default/QuickType.ex
@@ -189,6 +189,7 @@ defmodule EnumEnum do
     :left,
     :let,
     :list,
+    :LocalDate,
     :LongNode,
     :Locale,
     :lock,
@@ -224,6 +225,8 @@ defmodule EnumEnum do
     :nullptr,
     :number,
     :object,
+    :OffsetDateTime,
+    :OffsetTime,
     :ObjectNode,
     :ObjectMapper,
     :ObjectReader,
diff --git a/base/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex
index d83c603..2d7a7d3 100644
--- a/base/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex
@@ -4993,6 +4993,35 @@ defmodule ListClass do
   end
 end
 
+defmodule LocalDate do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %LocalDate{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Locale do
   defstruct []
 
@@ -6037,6 +6066,64 @@ defmodule Of do
   end
 end
 
+defmodule OffsetDateTime do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %OffsetDateTime{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule OffsetTime do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %OffsetTime{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Oneway do
   defstruct []
 
@@ -10272,7 +10359,7 @@ defmodule Yield do
 end
 
 defmodule TopLevel do
-  defstruct [:empty, :top_level_bool, :complex, :imaginery, :abstract, :alignas, :alignof, :top_level_and, :and_eq, :top_level_any, :any, :array, :array_node, :as, :asm, :assert, :associatedtype, :associativity, :async, :atomic, :atomic_cancel, :atomic_commit, :atomic_noexcept, :auto, :await, :base, :bitand, :bitor, :bool, :bool_1, :boolean, :boolean_node, :break, :bycopy, :byref, :byte, :calendar, :case, :top_level_catch, :chan, :char, :char16_t, :char32_t, :checked, :top_level_class, :class, :clone, :co_await, :co_return, :co_yield, :codable, :coding_key, :coding_keys, :compl, :concept, :console, :const, :const_cast, :constexpr, :constructor, :continue, :convenience, :convert, :converter, :culture_info, :date, :date_parse_handling, :date_formatter, :date_only, :date_only_converter, :date_time, :date_time_styles, :debugger, :decimal, :declare, :decltype, :decode_string, :decoder, :decoding_error, :top_level_def, :default, :defer, :deinit, :del, :delegate, :delete, :deserialization_feature, :dict, :dictionary, :did_set, :top_level_do, :double, :double_node, :dummy, :dynamic, :dynamic_cast, :elif, :top_level_else, :encode_quick_type, :encoder, :enum, :enum_values, :equality_contract, :equatable, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :top_level_false, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :format_exception, :friend, :from, :from_dict, :from_json, :func, :function, :get, :global, :go, :goto, :guard, :hashable, :hash_code, :hasher, :has_own_property, :id, :if, :imp, :implements, :implicit, :top_level_import, :top_level_in, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :int_node, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_converter, :json_serializer, :json_token, :json_writer, :json_any, :json_coding_key, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_token_type, :k_serializer, :lambda, :lazy, :left, :let, :list, :locale, :lock, :long, :long_node, :map, :map_entry, :marshal_json, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :top_level_nil, :no, :noexcept, :nonatomic, :top_level_none, :none, :nonlocal, :nonmutating, :no_such_method, :top_level_not, :not_eq, :ns_error, :ns_object, :ns_string, :null, :top_level_null, :null_node, :nullptr, :number, :object, :object_mapper, :object_node, :object_reader, :object_writer, :of, :oneway, :open, :operator, :optional, :top_level_or, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :primitive_kind, :print, :printf, :print_members, :private, :protected, :protocol, :top_level_protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :top_level_self, :sendable, :serial_descriptor, :serializable, :serialization_feature, :serialize, :serializer_provider, :serial_name, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :text_node, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_dict, :to_json, :top_level, :to_string, :transient, :top_level_true, :true_1, :try, :type, :top_level_type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unmarshal_json, :unowned, :unsafe, :unsigned, :use_serializers, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
+  defstruct [:empty, :top_level_bool, :complex, :imaginery, :abstract, :alignas, :alignof, :top_level_and, :and_eq, :top_level_any, :any, :array, :array_node, :as, :asm, :assert, :associatedtype, :associativity, :async, :atomic, :atomic_cancel, :atomic_commit, :atomic_noexcept, :auto, :await, :base, :bitand, :bitor, :bool, :bool_1, :boolean, :boolean_node, :break, :bycopy, :byref, :byte, :calendar, :case, :top_level_catch, :chan, :char, :char16_t, :char32_t, :checked, :top_level_class, :class, :clone, :co_await, :co_return, :co_yield, :codable, :coding_key, :coding_keys, :compl, :concept, :console, :const, :const_cast, :constexpr, :constructor, :continue, :convenience, :convert, :converter, :culture_info, :date, :date_parse_handling, :date_formatter, :date_only, :date_only_converter, :date_time, :date_time_styles, :debugger, :decimal, :declare, :decltype, :decode_string, :decoder, :decoding_error, :top_level_def, :default, :defer, :deinit, :del, :delegate, :delete, :deserialization_feature, :dict, :dictionary, :did_set, :top_level_do, :double, :double_node, :dummy, :dynamic, :dynamic_cast, :elif, :top_level_else, :encode_quick_type, :encoder, :enum, :enum_values, :equality_contract, :equatable, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :top_level_false, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :format_exception, :friend, :from, :from_dict, :from_json, :func, :function, :get, :global, :go, :goto, :guard, :hashable, :hash_code, :hasher, :has_own_property, :id, :if, :imp, :implements, :implicit, :top_level_import, :top_level_in, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :int_node, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_converter, :json_serializer, :json_token, :json_writer, :json_any, :json_coding_key, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_token_type, :k_serializer, :lambda, :lazy, :left, :let, :list, :local_date, :locale, :lock, :long, :long_node, :map, :map_entry, :marshal_json, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :top_level_nil, :no, :noexcept, :nonatomic, :top_level_none, :none, :nonlocal, :nonmutating, :no_such_method, :top_level_not, :not_eq, :ns_error, :ns_object, :ns_string, :null, :top_level_null, :null_node, :nullptr, :number, :object, :object_mapper, :object_node, :object_reader, :object_writer, :of, :offset_date_time, :offset_time, :oneway, :open, :operator, :optional, :top_level_or, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :primitive_kind, :print, :printf, :print_members, :private, :protected, :protocol, :top_level_protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :top_level_self, :sendable, :serial_descriptor, :serializable, :serialization_feature, :serialize, :serializer_provider, :serial_name, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :text_node, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_dict, :to_json, :top_level, :to_string, :transient, :top_level_true, :true_1, :try, :type, :top_level_type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unmarshal_json, :unowned, :unsafe, :unsigned, :use_serializers, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
 
   @type t :: %__MODULE__{
           empty: Empty.t() | float() | nil,
@@ -10459,6 +10546,7 @@ defmodule TopLevel do
           left: Left.t() | float() | nil,
           let: Let.t() | float() | nil,
           list: ListClass.t() | float() | nil,
+          local_date: LocalDate.t() | float() | nil,
           locale: Locale.t() | float() | nil,
           lock: Lock.t() | float() | nil,
           long: Long.t() | float() | nil,
@@ -10499,6 +10587,8 @@ defmodule TopLevel do
           object_reader: ObjectReader.t() | float() | nil,
           object_writer: ObjectWriter.t() | float() | nil,
           of: Of.t() | float() | nil,
+          offset_date_time: OffsetDateTime.t() | float() | nil,
+          offset_time: OffsetTime.t() | float() | nil,
           oneway: Oneway.t() | float() | nil,
           open: Open.t() | float() | nil,
           operator: Operator.t() | float() | nil,
@@ -12836,6 +12926,18 @@ defmodule TopLevel do
   def encode_list(value) when is_nil(value), do: value
   def encode_list(_), do: {:error, "Unexpected type when encoding TopLevel.list"}
 
+  def decode_local_date(%{} = value), do: LocalDate.from_map(value)
+  def decode_local_date(value) when is_float(value), do: value
+  def decode_local_date(value) when is_integer(value), do: value
+  def decode_local_date(value) when is_nil(value), do: value
+  def decode_local_date(_), do: {:error, "Unexpected type when decoding TopLevel.local_date"}
+
+  def encode_local_date(%LocalDate{} = value), do: LocalDate.to_map(value)
+  def encode_local_date(value) when is_float(value), do: value
+  def encode_local_date(value) when is_integer(value), do: value
+  def encode_local_date(value) when is_nil(value), do: value
+  def encode_local_date(_), do: {:error, "Unexpected type when encoding TopLevel.local_date"}
+
   def decode_locale(%{} = value), do: Locale.from_map(value)
   def decode_locale(value) when is_float(value), do: value
   def decode_locale(value) when is_integer(value), do: value
@@ -13316,6 +13418,30 @@ defmodule TopLevel do
   def encode_of(value) when is_nil(value), do: value
   def encode_of(_), do: {:error, "Unexpected type when encoding TopLevel.of"}
 
+  def decode_offset_date_time(%{} = value), do: OffsetDateTime.from_map(value)
+  def decode_offset_date_time(value) when is_float(value), do: value
+  def decode_offset_date_time(value) when is_integer(value), do: value
+  def decode_offset_date_time(value) when is_nil(value), do: value
+  def decode_offset_date_time(_), do: {:error, "Unexpected type when decoding TopLevel.offset_date_time"}
+
+  def encode_offset_date_time(%OffsetDateTime{} = value), do: OffsetDateTime.to_map(value)
+  def encode_offset_date_time(value) when is_float(value), do: value
+  def encode_offset_date_time(value) when is_integer(value), do: value
+  def encode_offset_date_time(value) when is_nil(value), do: value
+  def encode_offset_date_time(_), do: {:error, "Unexpected type when encoding TopLevel.offset_date_time"}
+
+  def decode_offset_time(%{} = value), do: OffsetTime.from_map(value)
+  def decode_offset_time(value) when is_float(value), do: value
+  def decode_offset_time(value) when is_integer(value), do: value
+  def decode_offset_time(value) when is_nil(value), do: value
+  def decode_offset_time(_), do: {:error, "Unexpected type when decoding TopLevel.offset_time"}
+
+  def encode_offset_time(%OffsetTime{} = value), do: OffsetTime.to_map(value)
+  def encode_offset_time(value) when is_float(value), do: value
+  def encode_offset_time(value) when is_integer(value), do: value
+  def encode_offset_time(value) when is_nil(value), do: value
+  def encode_offset_time(_), do: {:error, "Unexpected type when encoding TopLevel.offset_time"}
+
   def decode_oneway(%{} = value), do: Oneway.from_map(value)
   def decode_oneway(value) when is_float(value), do: value
   def decode_oneway(value) when is_integer(value), do: value
@@ -15074,6 +15200,7 @@ defmodule TopLevel do
       left: decode_left(m["left"]),
       let: decode_let(m["let"]),
       list: decode_list(m["list"]),
+      local_date: decode_local_date(m["LocalDate"]),
       locale: decode_locale(m["Locale"]),
       lock: decode_lock(m["lock"]),
       long: decode_long(m["long"]),
@@ -15114,6 +15241,8 @@ defmodule TopLevel do
       object_reader: decode_object_reader(m["ObjectReader"]),
       object_writer: decode_object_writer(m["ObjectWriter"]),
       of: decode_of(m["of"]),
+      offset_date_time: decode_offset_date_time(m["OffsetDateTime"]),
+      offset_time: decode_offset_time(m["OffsetTime"]),
       oneway: decode_oneway(m["oneway"]),
       open: decode_open(m["open"]),
       operator: decode_operator(m["operator"]),
@@ -15440,6 +15569,7 @@ defmodule TopLevel do
       "left" => encode_left(struct.left),
       "let" => encode_let(struct.let),
       "list" => encode_list(struct.list),
+      "LocalDate" => encode_local_date(struct.local_date),
       "Locale" => encode_locale(struct.locale),
       "lock" => encode_lock(struct.lock),
       "long" => encode_long(struct.long),
@@ -15480,6 +15610,8 @@ defmodule TopLevel do
       "ObjectReader" => encode_object_reader(struct.object_reader),
       "ObjectWriter" => encode_object_writer(struct.object_writer),
       "of" => encode_of(struct.of),
+      "OffsetDateTime" => encode_offset_date_time(struct.offset_date_time),
+      "OffsetTime" => encode_offset_time(struct.offset_time),
       "oneway" => encode_oneway(struct.oneway),
       "open" => encode_open(struct.open),
       "operator" => encode_operator(struct.operator),
diff --git a/base/schema-elm/test/inputs/schema/date-time.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/date-time.schema/default/QuickType.elm
index 765b331..0891330 100644
--- a/base/schema-elm/test/inputs/schema/date-time.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/date-time.schema/default/QuickType.elm
@@ -15,6 +15,9 @@ module QuickType exposing
     ( QuickType
     , quickTypeToString
     , quickType
+    , LocalDate
+    , OffsetDateTime
+    , OffsetTime
     , ComplexUnionArray(..)
     )
 
@@ -27,6 +30,9 @@ type alias QuickType =
     { complexUnionArray : List ComplexUnionArray
     , date : String
     , dateTime : String
+    , localDateClass : Maybe LocalDate
+    , offsetDateTimeClass : Maybe OffsetDateTime
+    , offsetTimeClass : Maybe OffsetTime
     , time : String
     , unionArray : List String
     }
@@ -35,6 +41,18 @@ type ComplexUnionArray
     = IntegerInComplexUnionArray Int
     | StringInComplexUnionArray String
 
+type alias LocalDate =
+    {
+    }
+
+type alias OffsetDateTime =
+    {
+    }
+
+type alias OffsetTime =
+    {
+    }
+
 -- decoders and encoders
 optionalField key decoder fallback =
     Jdec.dict Jdec.value
@@ -52,6 +70,9 @@ quickType =
         |> Jpipe.required "complex-union-array" (Jdec.list complexUnionArray )
         |> Jpipe.required "date" Jdec.string
         |> Jpipe.required "date-time" Jdec.string
+        |> Jpipe.custom (optionalField "local-date-class" (Jdec.map Just localDate) Nothing)
+        |> Jpipe.custom (optionalField "offset-date-time-class" (Jdec.map Just offsetDateTime) Nothing)
+        |> Jpipe.custom (optionalField "offset-time-class" (Jdec.map Just offsetTime) Nothing)
         |> Jpipe.required "time" Jdec.string
         |> Jpipe.required "union-array" (Jdec.list Jdec.string )
 
@@ -61,6 +82,9 @@ encodeQuickType x =
         [ ("complex-union-array", Jenc.list encodeComplexUnionArray x.complexUnionArray)
         , ("date", Jenc.string x.date)
         , ("date-time", Jenc.string x.dateTime)
+        , ("local-date-class", makeNullableEncoder encodeLocalDate x.localDateClass)
+        , ("offset-date-time-class", makeNullableEncoder encodeOffsetDateTime x.offsetDateTimeClass)
+        , ("offset-time-class", makeNullableEncoder encodeOffsetTime x.offsetTimeClass)
         , ("time", Jenc.string x.time)
         , ("union-array", Jenc.list Jenc.string x.unionArray)
         ]
@@ -77,6 +101,36 @@ encodeComplexUnionArray x = case x of
     IntegerInComplexUnionArray y -> Jenc.int y
     StringInComplexUnionArray y -> Jenc.string y
 
+localDate : Jdec.Decoder LocalDate
+localDate =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> LocalDate)
+
+encodeLocalDate : LocalDate -> Jenc.Value
+encodeLocalDate x =
+    Jenc.object
+        [
+        ]
+
+offsetDateTime : Jdec.Decoder OffsetDateTime
+offsetDateTime =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> OffsetDateTime)
+
+encodeOffsetDateTime : OffsetDateTime -> Jenc.Value
+encodeOffsetDateTime x =
+    Jenc.object
+        [
+        ]
+
+offsetTime : Jdec.Decoder OffsetTime
+offsetTime =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> OffsetTime)
+
+encodeOffsetTime : OffsetTime -> Jenc.Value
+encodeOffsetTime x =
+    Jenc.object
+        [
+        ]
+
 --- encoder helpers
 
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
diff --git a/base/schema-elm/test/inputs/schema/keyword-enum.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/keyword-enum.schema/default/QuickType.elm
index f9e2ca9..2fb6f9c 100644
--- a/base/schema-elm/test/inputs/schema/keyword-enum.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/keyword-enum.schema/default/QuickType.elm
@@ -210,6 +210,7 @@ type EnumEnum
     | Left
     | Let
     | EnumList
+    | LocalDate
     | LongNode
     | Locale
     | Lock
@@ -245,6 +246,8 @@ type EnumEnum
     | Nullptr
     | Number
     | Object
+    | OffsetDateTime
+    | OffsetTime
     | ObjectNode
     | ObjectMapper
     | ObjectReader
@@ -593,6 +596,7 @@ enumEnum =
                 "left" -> Jdec.succeed Left
                 "let" -> Jdec.succeed Let
                 "list" -> Jdec.succeed EnumList
+                "LocalDate" -> Jdec.succeed LocalDate
                 "LongNode" -> Jdec.succeed LongNode
                 "Locale" -> Jdec.succeed Locale
                 "lock" -> Jdec.succeed Lock
@@ -628,6 +632,8 @@ enumEnum =
                 "nullptr" -> Jdec.succeed Nullptr
                 "number" -> Jdec.succeed Number
                 "object" -> Jdec.succeed Object
+                "OffsetDateTime" -> Jdec.succeed OffsetDateTime
+                "OffsetTime" -> Jdec.succeed OffsetTime
                 "ObjectNode" -> Jdec.succeed ObjectNode
                 "ObjectMapper" -> Jdec.succeed ObjectMapper
                 "ObjectReader" -> Jdec.succeed ObjectReader
@@ -953,6 +959,7 @@ encodeEnumEnum x = case x of
     Left -> Jenc.string "left"
     Let -> Jenc.string "let"
     EnumList -> Jenc.string "list"
+    LocalDate -> Jenc.string "LocalDate"
     LongNode -> Jenc.string "LongNode"
     Locale -> Jenc.string "Locale"
     Lock -> Jenc.string "lock"
@@ -988,6 +995,8 @@ encodeEnumEnum x = case x of
     Nullptr -> Jenc.string "nullptr"
     Number -> Jenc.string "number"
     Object -> Jenc.string "object"
+    OffsetDateTime -> Jenc.string "OffsetDateTime"
+    OffsetTime -> Jenc.string "OffsetTime"
     ObjectNode -> Jenc.string "ObjectNode"
     ObjectMapper -> Jenc.string "ObjectMapper"
     ObjectReader -> Jenc.string "ObjectReader"
diff --git a/base/schema-elm/test/inputs/schema/keyword-unions.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/keyword-unions.schema/default/QuickType.elm
index 3b18d33..d4086a3 100644
--- a/base/schema-elm/test/inputs/schema/keyword-unions.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/keyword-unions.schema/default/QuickType.elm
@@ -180,6 +180,7 @@ module QuickType exposing
     , Lazy
     , Left
     , ListClass
+    , LocalDate
     , Locale
     , Lock
     , Long
@@ -216,6 +217,8 @@ module QuickType exposing
     , ObjectNode
     , ObjectReader
     , ObjectWriter
+    , OffsetDateTime
+    , OffsetTime
     , Oneway
     , Open
     , Operator
@@ -534,6 +537,7 @@ module QuickType exposing
     , UnionLazy(..)
     , UnionLeft(..)
     , UnionList(..)
+    , UnionLocalDate(..)
     , UnionLocale(..)
     , UnionLock(..)
     , UnionLong(..)
@@ -570,6 +574,8 @@ module QuickType exposing
     , UnionObjectNode(..)
     , UnionObjectReader(..)
     , UnionObjectWriter(..)
+    , UnionOffsetDateTime(..)
+    , UnionOffsetTime(..)
     , UnionOneway(..)
     , UnionOpen(..)
     , UnionOperator(..)
@@ -915,6 +921,7 @@ type alias QuickType =
     , left : Maybe UnionLeft
     , quickTypeLet : Maybe UnionLet
     , list : Maybe UnionList
+    , localDate : Maybe UnionLocalDate
     , locale : Maybe UnionLocale
     , lock : Maybe UnionLock
     , long : Maybe UnionLong
@@ -955,6 +962,8 @@ type alias QuickType =
     , objectReader : Maybe UnionObjectReader
     , objectWriter : Maybe UnionObjectWriter
     , quickTypeOf : Maybe UnionOf
+    , offsetDateTime : Maybe UnionOffsetDateTime
+    , offsetTime : Maybe UnionOffsetTime
     , oneway : Maybe UnionOneway
     , open : Maybe UnionOpen
     , operator : Maybe UnionOperator
@@ -2408,6 +2417,14 @@ type alias ListClass =
     {
     }
 
+type UnionLocalDate
+    = DoubleInUnionLocalDate Float
+    | LocalDateInUnionLocalDate LocalDate
+
+type alias LocalDate =
+    {
+    }
+
 type UnionLocale
     = DoubleInUnionLocale Float
     | LocaleInUnionLocale Locale
@@ -2696,6 +2713,22 @@ type alias ObjectWriter =
     {
     }
 
+type UnionOffsetDateTime
+    = DoubleInUnionOffsetDateTime Float
+    | OffsetDateTimeInUnionOffsetDateTime OffsetDateTime
+
+type alias OffsetDateTime =
+    {
+    }
+
+type UnionOffsetTime
+    = DoubleInUnionOffsetTime Float
+    | OffsetTimeInUnionOffsetTime OffsetTime
+
+type alias OffsetTime =
+    {
+    }
+
 type UnionOneway
     = DoubleInUnionOneway Float
     | OnewayInUnionOneway Oneway
@@ -4118,6 +4151,7 @@ quickType =
         |> Jpipe.custom (optionalField "left" (Jdec.map Just unionLeft) Nothing)
         |> Jpipe.custom (optionalField "let" (Jdec.map Just unionLet) Nothing)
         |> Jpipe.custom (optionalField "list" (Jdec.map Just unionList) Nothing)
+        |> Jpipe.custom (optionalField "LocalDate" (Jdec.map Just unionLocalDate) Nothing)
         |> Jpipe.custom (optionalField "Locale" (Jdec.map Just unionLocale) Nothing)
         |> Jpipe.custom (optionalField "lock" (Jdec.map Just unionLock) Nothing)
         |> Jpipe.custom (optionalField "long" (Jdec.map Just unionLong) Nothing)
@@ -4158,6 +4192,8 @@ quickType =
         |> Jpipe.custom (optionalField "ObjectReader" (Jdec.map Just unionObjectReader) Nothing)
         |> Jpipe.custom (optionalField "ObjectWriter" (Jdec.map Just unionObjectWriter) Nothing)
         |> Jpipe.custom (optionalField "of" (Jdec.map Just unionOf) Nothing)
+        |> Jpipe.custom (optionalField "OffsetDateTime" (Jdec.map Just unionOffsetDateTime) Nothing)
+        |> Jpipe.custom (optionalField "OffsetTime" (Jdec.map Just unionOffsetTime) Nothing)
         |> Jpipe.custom (optionalField "oneway" (Jdec.map Just unionOneway) Nothing)
         |> Jpipe.custom (optionalField "open" (Jdec.map Just unionOpen) Nothing)
         |> Jpipe.custom (optionalField "operator" (Jdec.map Just unionOperator) Nothing)
@@ -4477,6 +4513,7 @@ encodeQuickType x =
         , ("left", makeNullableEncoder encodeUnionLeft x.left)
         , ("let", makeNullableEncoder encodeUnionLet x.quickTypeLet)
         , ("list", makeNullableEncoder encodeUnionList x.list)
+        , ("LocalDate", makeNullableEncoder encodeUnionLocalDate x.localDate)
         , ("Locale", makeNullableEncoder encodeUnionLocale x.locale)
         , ("lock", makeNullableEncoder encodeUnionLock x.lock)
         , ("long", makeNullableEncoder encodeUnionLong x.long)
@@ -4517,6 +4554,8 @@ encodeQuickType x =
         , ("ObjectReader", makeNullableEncoder encodeUnionObjectReader x.objectReader)
         , ("ObjectWriter", makeNullableEncoder encodeUnionObjectWriter x.objectWriter)
         , ("of", makeNullableEncoder encodeUnionOf x.quickTypeOf)
+        , ("OffsetDateTime", makeNullableEncoder encodeUnionOffsetDateTime x.offsetDateTime)
+        , ("OffsetTime", makeNullableEncoder encodeUnionOffsetTime x.offsetTime)
         , ("oneway", makeNullableEncoder encodeUnionOneway x.oneway)
         , ("open", makeNullableEncoder encodeUnionOpen x.open)
         , ("operator", makeNullableEncoder encodeUnionOperator x.operator)
@@ -8280,6 +8319,28 @@ encodeListClass x =
         [
         ]
 
+unionLocalDate : Jdec.Decoder UnionLocalDate
+unionLocalDate =
+    Jdec.oneOf
+        [ Jdec.map DoubleInUnionLocalDate Jdec.float
+        , Jdec.map LocalDateInUnionLocalDate localDate
+        ]
+
+encodeUnionLocalDate : UnionLocalDate -> Jenc.Value
+encodeUnionLocalDate x = case x of
+    DoubleInUnionLocalDate y -> Jenc.float y
+    LocalDateInUnionLocalDate y -> encodeLocalDate y
+
+localDate : Jdec.Decoder LocalDate
+localDate =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> LocalDate)
+
+encodeLocalDate : LocalDate -> Jenc.Value
+encodeLocalDate x =
+    Jenc.object
+        [
+        ]
+
 unionLocale : Jdec.Decoder UnionLocale
 unionLocale =
     Jdec.oneOf
@@ -9072,6 +9133,50 @@ encodeObjectWriter x =
         [
         ]
 
+unionOffsetDateTime : Jdec.Decoder UnionOffsetDateTime
+unionOffsetDateTime =
+    Jdec.oneOf
+        [ Jdec.map DoubleInUnionOffsetDateTime Jdec.float
+        , Jdec.map OffsetDateTimeInUnionOffsetDateTime offsetDateTime
+        ]
+
+encodeUnionOffsetDateTime : UnionOffsetDateTime -> Jenc.Value
+encodeUnionOffsetDateTime x = case x of
+    DoubleInUnionOffsetDateTime y -> Jenc.float y
+    OffsetDateTimeInUnionOffsetDateTime y -> encodeOffsetDateTime y
+
+offsetDateTime : Jdec.Decoder OffsetDateTime
+offsetDateTime =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> OffsetDateTime)
+
+encodeOffsetDateTime : OffsetDateTime -> Jenc.Value
+encodeOffsetDateTime x =
+    Jenc.object
+        [
+        ]
+
+unionOffsetTime : Jdec.Decoder UnionOffsetTime
+unionOffsetTime =
+    Jdec.oneOf
+        [ Jdec.map DoubleInUnionOffsetTime Jdec.float
+        , Jdec.map OffsetTimeInUnionOffsetTime offsetTime
+        ]
+
+encodeUnionOffsetTime : UnionOffsetTime -> Jenc.Value
+encodeUnionOffsetTime x = case x of
+    DoubleInUnionOffsetTime y -> Jenc.float y
+    OffsetTimeInUnionOffsetTime y -> encodeOffsetTime y
+
+offsetTime : Jdec.Decoder OffsetTime
+offsetTime =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> OffsetTime)
+
+encodeOffsetTime : OffsetTime -> Jenc.Value
+encodeOffsetTime x =
+    Jenc.object
+        [
+        ]
+
 unionOneway : Jdec.Decoder UnionOneway
 unionOneway =
     Jdec.oneOf
diff --git a/base/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js
index 5679fa7..a2535a9 100644
--- a/base/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js
@@ -10,11 +10,14 @@
 // match the expected interface, even if the JSON is valid.
 
 export type TopLevel = {
-    "complex-union-array": ComplexUnionArrayElement[];
-    date:                  Date;
-    "date-time":           Date;
-    time:                  string;
-    "union-array":         string[];
+    "complex-union-array":     ComplexUnionArrayElement[];
+    date:                      Date;
+    "date-time":               Date;
+    "local-date-class"?:       LocalDate;
+    "offset-date-time-class"?: OffsetDateTime;
+    "offset-time-class"?:      OffsetTime;
+    time:                      string;
+    "union-array":             string[];
 };
 
 export type ComplexUnionArrayElement = Date | ComplexUnionArrayEnum | number;
@@ -23,6 +26,15 @@ export type ComplexUnionArrayEnum =
       "foo"
     | "bar";
 
+export type LocalDate = {
+};
+
+export type OffsetDateTime = {
+};
+
+export type OffsetTime = {
+};
+
 // Converts JSON strings to/from your types
 // and asserts the results of JSON.parse at runtime
 function toTopLevel(json: string): TopLevel {
@@ -212,9 +224,18 @@ const typeMap: any = {
         { json: "complex-union-array", js: "complex-union-array", typ: a(u(Date, r("ComplexUnionArrayEnum"), i(0))) },
         { json: "date", js: "date", typ: Date },
         { json: "date-time", js: "date-time", typ: Date },
+        { json: "local-date-class", js: "local-date-class", typ: u(undefined, r("LocalDate")) },
+        { json: "offset-date-time-class", js: "offset-date-time-class", typ: u(undefined, r("OffsetDateTime")) },
+        { json: "offset-time-class", js: "offset-time-class", typ: u(undefined, r("OffsetTime")) },
         { json: "time", js: "time", typ: "" },
         { json: "union-array", js: "union-array", typ: a("") },
     ], false),
+    "LocalDate": o([
+    ], false),
+    "OffsetDateTime": o([
+    ], false),
+    "OffsetTime": o([
+    ], false),
     "ComplexUnionArrayEnum": [
         "foo",
         "bar",
diff --git a/base/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
index 0701197..f5f7f3a 100644
--- a/base/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
@@ -197,6 +197,7 @@ export type Enum =
     | "left"
     | "let"
     | "list"
+    | "LocalDate"
     | "LongNode"
     | "Locale"
     | "lock"
@@ -232,6 +233,8 @@ export type Enum =
     | "nullptr"
     | "number"
     | "object"
+    | "OffsetDateTime"
+    | "OffsetTime"
     | "ObjectNode"
     | "ObjectMapper"
     | "ObjectReader"
@@ -742,6 +745,7 @@ const typeMap: any = {
         "left",
         "let",
         "list",
+        "LocalDate",
         "LongNode",
         "Locale",
         "lock",
@@ -777,6 +781,8 @@ const typeMap: any = {
         "nullptr",
         "number",
         "object",
+        "OffsetDateTime",
+        "OffsetTime",
         "ObjectNode",
         "ObjectMapper",
         "ObjectReader",
diff --git a/base/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
index a48f6d7..3dc426d 100644
--- a/base/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
@@ -194,6 +194,7 @@ export type TopLevel = {
     left?:                       UnionLeft;
     let?:                        UnionLet;
     list?:                       UnionList;
+    LocalDate?:                  UnionLocalDate;
     Locale?:                     UnionLocale;
     lock?:                       UnionLock;
     long?:                       UnionLong;
@@ -234,6 +235,8 @@ export type TopLevel = {
     ObjectReader?:               UnionObjectReader;
     ObjectWriter?:               UnionObjectWriter;
     of?:                         UnionOf;
+    OffsetDateTime?:             UnionOffsetDateTime;
+    OffsetTime?:                 UnionOffsetTime;
     oneway?:                     UnionOneway;
     open?:                       UnionOpen;
     operator?:                   UnionOperator;
@@ -573,6 +576,11 @@ export type UnionKSerializer = KSerializer | number;
 export type KSerializer = {
 };
 
+export type UnionLocalDate = LocalDate | number;
+
+export type LocalDate = {
+};
+
 export type UnionLocale = Locale | number;
 
 export type Locale = {
@@ -648,6 +656,16 @@ export type UnionObjectWriter = ObjectWriter | number;
 export type ObjectWriter = {
 };
 
+export type UnionOffsetDateTime = OffsetDateTime | number;
+
+export type OffsetDateTime = {
+};
+
+export type UnionOffsetTime = OffsetTime | number;
+
+export type OffsetTime = {
+};
+
 export type UnionPrimitiveKind = PrimitiveKind | number;
 
 export type PrimitiveKind = {
@@ -2508,6 +2526,7 @@ const typeMap: any = {
         { json: "left", js: "left", typ: u(undefined, u(r("Left"), 3.14)) },
         { json: "let", js: "let", typ: u(undefined, u(r("Let"), 3.14)) },
         { json: "list", js: "list", typ: u(undefined, u(r("List"), 3.14)) },
+        { json: "LocalDate", js: "LocalDate", typ: u(undefined, u(r("LocalDate"), 3.14)) },
         { json: "Locale", js: "Locale", typ: u(undefined, u(r("Locale"), 3.14)) },
         { json: "lock", js: "lock", typ: u(undefined, u(r("Lock"), 3.14)) },
         { json: "long", js: "long", typ: u(undefined, u(r("Long"), 3.14)) },
@@ -2548,6 +2567,8 @@ const typeMap: any = {
         { json: "ObjectReader", js: "ObjectReader", typ: u(undefined, u(r("ObjectReader"), 3.14)) },
         { json: "ObjectWriter", js: "ObjectWriter", typ: u(undefined, u(r("ObjectWriter"), 3.14)) },
         { json: "of", js: "of", typ: u(undefined, u(r("Of"), 3.14)) },
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: u(undefined, u(r("OffsetDateTime"), 3.14)) },
+        { json: "OffsetTime", js: "OffsetTime", typ: u(undefined, u(r("OffsetTime"), 3.14)) },
         { json: "oneway", js: "oneway", typ: u(undefined, u(r("Oneway"), 3.14)) },
         { json: "open", js: "open", typ: u(undefined, u(r("Open"), 3.14)) },
         { json: "operator", js: "operator", typ: u(undefined, u(r("Operator"), 3.14)) },
@@ -2762,6 +2783,8 @@ const typeMap: any = {
     ], false),
     "KSerializer": o([
     ], false),
+    "LocalDate": o([
+    ], false),
     "Locale": o([
     ], false),
     "LongNode": o([
@@ -2792,6 +2815,10 @@ const typeMap: any = {
     ], false),
     "ObjectWriter": o([
     ], false),
+    "OffsetDateTime": o([
+    ], false),
+    "OffsetTime": o([
+    ], false),
     "PrimitiveKind": o([
     ], false),
     "Protocol": o([
diff --git a/base/schema-golang/test/inputs/schema/date-time.schema/default/quicktype.go b/head/schema-golang/test/inputs/schema/date-time.schema/default/quicktype.go
index 6053f35..dae04c2 100644
--- a/base/schema-golang/test/inputs/schema/date-time.schema/default/quicktype.go
+++ b/head/schema-golang/test/inputs/schema/date-time.schema/default/quicktype.go
@@ -23,11 +23,23 @@ func (r *TopLevel) Marshal() ([]byte, error) {
 }
 
 type TopLevel struct {
-	ComplexUnionArray []ComplexUnionArrayElement `json:"complex-union-array"`
-	Date              string                     `json:"date"`
-	DateTime          time.Time                  `json:"date-time"`
-	Time              string                     `json:"time"`
-	UnionArray        []string                   `json:"union-array"`
+	ComplexUnionArray   []ComplexUnionArrayElement `json:"complex-union-array"`
+	Date                string                     `json:"date"`
+	DateTime            time.Time                  `json:"date-time"`
+	LocalDateClass      *LocalDate                 `json:"local-date-class,omitempty"`
+	OffsetDateTimeClass *OffsetDateTime            `json:"offset-date-time-class,omitempty"`
+	OffsetTimeClass     *OffsetTime                `json:"offset-time-class,omitempty"`
+	Time                string                     `json:"time"`
+	UnionArray          []string                   `json:"union-array"`
+}
+
+type LocalDate struct {
+}
+
+type OffsetDateTime struct {
+}
+
+type OffsetTime struct {
 }
 
 type ComplexUnionArrayEnum string
diff --git a/base/schema-golang/test/inputs/schema/keyword-enum.schema/default/quicktype.go b/head/schema-golang/test/inputs/schema/keyword-enum.schema/default/quicktype.go
index eaaa732..a5101d4 100644
--- a/base/schema-golang/test/inputs/schema/keyword-enum.schema/default/quicktype.go
+++ b/head/schema-golang/test/inputs/schema/keyword-enum.schema/default/quicktype.go
@@ -207,6 +207,7 @@ const (
 	Left                       EnumEnum = "left"
 	Let                        EnumEnum = "let"
 	List                       EnumEnum = "list"
+	LocalDate                  EnumEnum = "LocalDate"
 	LongNode                   EnumEnum = "LongNode"
 	Locale                     EnumEnum = "Locale"
 	Lock                       EnumEnum = "lock"
@@ -242,6 +243,8 @@ const (
 	Nullptr                    EnumEnum = "nullptr"
 	Number                     EnumEnum = "number"
 	Object                     EnumEnum = "object"
+	OffsetDateTime             EnumEnum = "OffsetDateTime"
+	OffsetTime                 EnumEnum = "OffsetTime"
 	ObjectNode                 EnumEnum = "ObjectNode"
 	ObjectMapper               EnumEnum = "ObjectMapper"
 	ObjectReader               EnumEnum = "ObjectReader"
@@ -389,7 +392,7 @@ func (x *EnumEnum) UnmarshalJSON(data []byte) error {
 	var value string
 	if err := json.Unmarshal(data, &value); err != nil { return err }
 	switch EnumEnum(value) {
-	case Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, ArrayNode, Array, As, ASM, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBOOL, EnumBool, Boolean, BooleanNode, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, DeserializationFeature, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, DoubleNode, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJSON, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, ID, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, IntNode, Interface, Internal, ISODateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, JSON, JSONConverter, JSONSerializer, JSONToken, JSONWriter, JSONAny, JSONCodingKey, JSONDecoder, JSONEncoder, JSONException, JSONGenerator, JSONNode, JSONNull, JSONParser, JSONReader, JSONTokenType, Lambda, Lazy, Left, Let, List, LongNode, Locale, Lock, Long, Map, MarshalJSON, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, NullNode, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NSObject, NoSuchMethod, Not, NotEq, NSError, NSString, Null, EnumNull, Nullptr, Number, Object, ObjectNode, ObjectMapper, ObjectReader, ObjectWriter, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializationFeature, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, TextNode, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJSON, EnumTopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJSON, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JSONReader, Utf8JSONWriter, UUID, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy: *x = EnumEnum(value); return nil
+	case Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, ArrayNode, Array, As, ASM, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBOOL, EnumBool, Boolean, BooleanNode, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, DeserializationFeature, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, DoubleNode, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJSON, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, ID, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, IntNode, Interface, Internal, ISODateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, JSON, JSONConverter, JSONSerializer, JSONToken, JSONWriter, JSONAny, JSONCodingKey, JSONDecoder, JSONEncoder, JSONException, JSONGenerator, JSONNode, JSONNull, JSONParser, JSONReader, JSONTokenType, Lambda, Lazy, Left, Let, List, LocalDate, LongNode, Locale, Lock, Long, Map, MarshalJSON, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, NullNode, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NSObject, NoSuchMethod, Not, NotEq, NSError, NSString, Null, EnumNull, Nullptr, Number, Object, OffsetDateTime, OffsetTime, ObjectNode, ObjectMapper, ObjectReader, ObjectWriter, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializationFeature, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, TextNode, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJSON, EnumTopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJSON, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JSONReader, Utf8JSONWriter, UUID, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy: *x = EnumEnum(value); return nil
 	}
 	return invalidEnumEnum(value)
 }
diff --git a/base/schema-golang/test/inputs/schema/keyword-unions.schema/default/quicktype.go b/head/schema-golang/test/inputs/schema/keyword-unions.schema/default/quicktype.go
index 9157a1b..24c2422 100644
--- a/base/schema-golang/test/inputs/schema/keyword-unions.schema/default/quicktype.go
+++ b/head/schema-golang/test/inputs/schema/keyword-unions.schema/default/quicktype.go
@@ -206,6 +206,7 @@ type TopLevel struct {
 	Left                       *UnionLeft                       `json:"left"`
 	Let                        *UnionLet                        `json:"let"`
 	List                       *UnionList                       `json:"list"`
+	LocalDate                  *UnionLocalDate                  `json:"LocalDate"`
 	Locale                     *UnionLocale                     `json:"Locale"`
 	Lock                       *UnionLock                       `json:"lock"`
 	Long                       *UnionLong                       `json:"long"`
@@ -246,6 +247,8 @@ type TopLevel struct {
 	ObjectReader               *UnionObjectReader               `json:"ObjectReader"`
 	ObjectWriter               *UnionObjectWriter               `json:"ObjectWriter"`
 	Of                         *UnionOf                         `json:"of"`
+	OffsetDateTime             *UnionOffsetDateTime             `json:"OffsetDateTime"`
+	OffsetTime                 *UnionOffsetTime                 `json:"OffsetTime"`
 	Oneway                     *UnionOneway                     `json:"oneway"`
 	Open                       *UnionOpen                       `json:"open"`
 	Operator                   *UnionOperator                   `json:"operator"`
@@ -913,6 +916,9 @@ type Let struct {
 type List struct {
 }
 
+type LocalDate struct {
+}
+
 type Locale struct {
 }
 
@@ -1027,6 +1033,12 @@ type ObjectWriter struct {
 type Of struct {
 }
 
+type OffsetDateTime struct {
+}
+
+type OffsetTime struct {
+}
+
 type Oneway struct {
 }
 
@@ -5357,6 +5369,28 @@ func (x *UnionList) MarshalJSON() ([]byte, error) {
 	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.List != nil, x.List, false, nil, false, nil, false)
 }
 
+type UnionLocalDate struct {
+	Double    *float64
+	LocalDate *LocalDate
+}
+
+func (x *UnionLocalDate) UnmarshalJSON(data []byte) error {
+	x.LocalDate = nil
+	var c LocalDate
+	object, err := unmarshalUnion(data, nil, &x.Double, nil, nil, false, nil, true, &c, false, nil, false, nil, false)
+	if err != nil {
+		return err
+	}
+	if object {
+		x.LocalDate = &c
+	}
+	return nil
+}
+
+func (x *UnionLocalDate) MarshalJSON() ([]byte, error) {
+	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.LocalDate != nil, x.LocalDate, false, nil, false, nil, false)
+}
+
 type UnionLocale struct {
 	Double *float64
 	Locale *Locale
@@ -6193,6 +6227,50 @@ func (x *UnionOf) MarshalJSON() ([]byte, error) {
 	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.Of != nil, x.Of, false, nil, false, nil, false)
 }
 
+type UnionOffsetDateTime struct {
+	Double         *float64
+	OffsetDateTime *OffsetDateTime
+}
+
+func (x *UnionOffsetDateTime) UnmarshalJSON(data []byte) error {
+	x.OffsetDateTime = nil
+	var c OffsetDateTime
+	object, err := unmarshalUnion(data, nil, &x.Double, nil, nil, false, nil, true, &c, false, nil, false, nil, false)
+	if err != nil {
+		return err
+	}
+	if object {
+		x.OffsetDateTime = &c
+	}
+	return nil
+}
+
+func (x *UnionOffsetDateTime) MarshalJSON() ([]byte, error) {
+	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.OffsetDateTime != nil, x.OffsetDateTime, false, nil, false, nil, false)
+}
+
+type UnionOffsetTime struct {
+	Double     *float64
+	OffsetTime *OffsetTime
+}
+
+func (x *UnionOffsetTime) UnmarshalJSON(data []byte) error {
+	x.OffsetTime = nil
+	var c OffsetTime
+	object, err := unmarshalUnion(data, nil, &x.Double, nil, nil, false, nil, true, &c, false, nil, false, nil, false)
+	if err != nil {
+		return err
+	}
+	if object {
+		x.OffsetTime = &c
+	}
+	return nil
+}
+
+func (x *UnionOffsetTime) MarshalJSON() ([]byte, error) {
+	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.OffsetTime != nil, x.OffsetTime, false, nil, false, nil, false)
+}
+
 type UnionOneway struct {
 	Double *float64
 	Oneway *Oneway
diff --git a/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/LocalDate.go b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/LocalDate.go
new file mode 100644
index 0000000..a76df49
--- /dev/null
+++ b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/LocalDate.go
@@ -0,0 +1,4 @@
+package main
+
+type LocalDate struct {
+}
diff --git a/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/OffsetDateTime.go b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/OffsetDateTime.go
new file mode 100644
index 0000000..15c1d9e
--- /dev/null
+++ b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/OffsetDateTime.go
@@ -0,0 +1,4 @@
+package main
+
+type OffsetDateTime struct {
+}
diff --git a/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/OffsetTime.go b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/OffsetTime.go
new file mode 100644
index 0000000..2be7605
--- /dev/null
+++ b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/OffsetTime.go
@@ -0,0 +1,4 @@
+package main
+
+type OffsetTime struct {
+}
diff --git a/base/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/TopLevel.go b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/TopLevel.go
index e01fa21..5bb2f7c 100644
--- a/base/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/TopLevel.go
+++ b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/multi/TopLevel.go
@@ -14,9 +14,12 @@ func (r *TopLevel) Marshal() ([]byte, error) {
 }
 
 type TopLevel struct {
-	ComplexUnionArray []ComplexUnionArrayElement `json:"complex-union-array"`
-	Date              string                     `json:"date"`
-	DateTime          time.Time                  `json:"date-time"`
-	Time              string                     `json:"time"`
-	UnionArray        []string                   `json:"union-array"`
+	ComplexUnionArray   []ComplexUnionArrayElement `json:"complex-union-array"`
+	Date                string                     `json:"date"`
+	DateTime            time.Time                  `json:"date-time"`
+	LocalDateClass      *LocalDate                 `json:"local-date-class,omitempty"`
+	OffsetDateTimeClass *OffsetDateTime            `json:"offset-date-time-class,omitempty"`
+	OffsetTimeClass     *OffsetTime                `json:"offset-time-class,omitempty"`
+	Time                string                     `json:"time"`
+	UnionArray          []string                   `json:"union-array"`
 }
diff --git a/base/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/quicktype.go b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/quicktype.go
index 02c9ed5..f00dd22 100644
--- a/base/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/quicktype.go
+++ b/head/schema-golang-leading-comments/test/inputs/schema/date-time.schema/default/quicktype.go
@@ -17,11 +17,23 @@ func (r *TopLevel) Marshal() ([]byte, error) {
 }
 
 type TopLevel struct {
-	ComplexUnionArray []ComplexUnionArrayElement `json:"complex-union-array"`
-	Date              string                     `json:"date"`
-	DateTime          time.Time                  `json:"date-time"`
-	Time              string                     `json:"time"`
-	UnionArray        []string                   `json:"union-array"`
+	ComplexUnionArray   []ComplexUnionArrayElement `json:"complex-union-array"`
+	Date                string                     `json:"date"`
+	DateTime            time.Time                  `json:"date-time"`
+	LocalDateClass      *LocalDate                 `json:"local-date-class,omitempty"`
+	OffsetDateTimeClass *OffsetDateTime            `json:"offset-date-time-class,omitempty"`
+	OffsetTimeClass     *OffsetTime                `json:"offset-time-class,omitempty"`
+	Time                string                     `json:"time"`
+	UnionArray          []string                   `json:"union-array"`
+}
+
+type LocalDate struct {
+}
+
+type OffsetDateTime struct {
+}
+
+type OffsetTime struct {
 }
 
 type ComplexUnionArrayEnum string
diff --git a/base/schema-haskell/test/inputs/schema/date-time.schema/default/QuickType.hs b/head/schema-haskell/test/inputs/schema/date-time.schema/default/QuickType.hs
index a167212..d1d59af 100644
--- a/base/schema-haskell/test/inputs/schema/date-time.schema/default/QuickType.hs
+++ b/head/schema-haskell/test/inputs/schema/date-time.schema/default/QuickType.hs
@@ -3,6 +3,9 @@
 
 module QuickType
     ( QuickType (..)
+    , LocalDate (..)
+    , OffsetDateTime (..)
+    , OffsetTime (..)
     , ComplexUnionArray (..)
     , decodeTopLevel
     ) where
@@ -17,6 +20,9 @@ data QuickType = QuickType
     { complexUnionArrayQuickType :: [ComplexUnionArray]
     , dateQuickType :: Text
     , dateTimeQuickType :: Text
+    , localDateClassQuickType :: Maybe LocalDate
+    , offsetDateTimeClassQuickType :: Maybe OffsetDateTime
+    , offsetTimeClassQuickType :: Maybe OffsetTime
     , timeQuickType :: Text
     , unionArrayQuickType :: [Text]
     } deriving (Show)
@@ -26,15 +32,30 @@ data ComplexUnionArray
     | StringInComplexUnionArray Text
     deriving (Show)
 
+data LocalDate = LocalDate
+    {
+    } deriving (Show)
+
+data OffsetDateTime = OffsetDateTime
+    {
+    } deriving (Show)
+
+data OffsetTime = OffsetTime
+    {
+    } deriving (Show)
+
 decodeTopLevel :: ByteString -> Maybe QuickType
 decodeTopLevel = decode
 
 instance ToJSON QuickType where
-    toJSON (QuickType complexUnionArrayQuickType dateQuickType dateTimeQuickType timeQuickType unionArrayQuickType) =
+    toJSON (QuickType complexUnionArrayQuickType dateQuickType dateTimeQuickType localDateClassQuickType offsetDateTimeClassQuickType offsetTimeClassQuickType timeQuickType unionArrayQuickType) =
         object $ foldMap (maybe [] pure)
         [ Just $ "complex-union-array" .= complexUnionArrayQuickType
         , Just $ "date" .= dateQuickType
         , Just $ "date-time" .= dateTimeQuickType
+        , ("local-date-class" .=) <$> localDateClassQuickType
+        , ("offset-date-time-class" .=) <$> offsetDateTimeClassQuickType
+        , ("offset-time-class" .=) <$> offsetTimeClassQuickType
         , Just $ "time" .= timeQuickType
         , Just $ "union-array" .= unionArrayQuickType
         ]
@@ -44,6 +65,9 @@ instance FromJSON QuickType where
         <$> v .: "complex-union-array"
         <*> v .: "date"
         <*> v .: "date-time"
+        <*> v .:! "local-date-class"
+        <*> v .:! "offset-date-time-class"
+        <*> v .:! "offset-time-class"
         <*> v .: "time"
         <*> v .: "union-array"
 
@@ -54,3 +78,21 @@ instance ToJSON ComplexUnionArray where
 instance FromJSON ComplexUnionArray where
     parseJSON xs@(Number _) = (fmap IntegerInComplexUnionArray . parseJSON) xs
     parseJSON xs@(String _) = (fmap StringInComplexUnionArray . parseJSON) xs
+
+instance ToJSON LocalDate where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON LocalDate where
+    parseJSON (Object _) = return LocalDate
+
+instance ToJSON OffsetDateTime where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON OffsetDateTime where
+    parseJSON (Object _) = return OffsetDateTime
+
+instance ToJSON OffsetTime where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON OffsetTime where
+    parseJSON (Object _) = return OffsetTime
diff --git a/base/schema-haskell/test/inputs/schema/keyword-enum.schema/default/QuickType.hs b/head/schema-haskell/test/inputs/schema/keyword-enum.schema/default/QuickType.hs
index c65dd0b..b11fd19 100644
--- a/base/schema-haskell/test/inputs/schema/keyword-enum.schema/default/QuickType.hs
+++ b/head/schema-haskell/test/inputs/schema/keyword-enum.schema/default/QuickType.hs
@@ -200,6 +200,7 @@ data EnumEnum
     | LeftEnumEnum
     | LetEnumEnum
     | ListEnumEnum
+    | LocalDateEnumEnum
     | LongNodeEnumEnum
     | LocaleEnumEnum
     | LockEnumEnum
@@ -235,6 +236,8 @@ data EnumEnum
     | NullptrEnumEnum
     | NumberEnumEnum
     | ObjectEnumEnum
+    | OffsetDateTimeEnumEnum
+    | OffsetTimeEnumEnum
     | ObjectNodeEnumEnum
     | ObjectMapperEnumEnum
     | ObjectReaderEnumEnum
@@ -571,6 +574,7 @@ instance ToJSON EnumEnum where
     toJSON LeftEnumEnum = "left"
     toJSON LetEnumEnum = "let"
     toJSON ListEnumEnum = "list"
+    toJSON LocalDateEnumEnum = "LocalDate"
     toJSON LongNodeEnumEnum = "LongNode"
     toJSON LocaleEnumEnum = "Locale"
     toJSON LockEnumEnum = "lock"
@@ -606,6 +610,8 @@ instance ToJSON EnumEnum where
     toJSON NullptrEnumEnum = "nullptr"
     toJSON NumberEnumEnum = "number"
     toJSON ObjectEnumEnum = "object"
+    toJSON OffsetDateTimeEnumEnum = "OffsetDateTime"
+    toJSON OffsetTimeEnumEnum = "OffsetTime"
     toJSON ObjectNodeEnumEnum = "ObjectNode"
     toJSON ObjectMapperEnumEnum = "ObjectMapper"
     toJSON ObjectReaderEnumEnum = "ObjectReader"
@@ -930,6 +936,7 @@ instance FromJSON EnumEnum where
             parseText "left" = return LeftEnumEnum
             parseText "let" = return LetEnumEnum
             parseText "list" = return ListEnumEnum
+            parseText "LocalDate" = return LocalDateEnumEnum
             parseText "LongNode" = return LongNodeEnumEnum
             parseText "Locale" = return LocaleEnumEnum
             parseText "lock" = return LockEnumEnum
@@ -965,6 +972,8 @@ instance FromJSON EnumEnum where
             parseText "nullptr" = return NullptrEnumEnum
             parseText "number" = return NumberEnumEnum
             parseText "object" = return ObjectEnumEnum
+            parseText "OffsetDateTime" = return OffsetDateTimeEnumEnum
+            parseText "OffsetTime" = return OffsetTimeEnumEnum
             parseText "ObjectNode" = return ObjectNodeEnumEnum
             parseText "ObjectMapper" = return ObjectMapperEnumEnum
             parseText "ObjectReader" = return ObjectReaderEnumEnum
diff --git a/base/schema-haskell/test/inputs/schema/keyword-unions.schema/default/QuickType.hs b/head/schema-haskell/test/inputs/schema/keyword-unions.schema/default/QuickType.hs
index d3a74d2..e231928 100644
--- a/base/schema-haskell/test/inputs/schema/keyword-unions.schema/default/QuickType.hs
+++ b/head/schema-haskell/test/inputs/schema/keyword-unions.schema/default/QuickType.hs
@@ -169,6 +169,7 @@ module QuickType
     , Lazy (..)
     , LeftClass (..)
     , List (..)
+    , LocalDate (..)
     , Locale (..)
     , Lock (..)
     , Long (..)
@@ -205,6 +206,8 @@ module QuickType
     , ObjectNode (..)
     , ObjectReader (..)
     , ObjectWriter (..)
+    , OffsetDateTime (..)
+    , OffsetTime (..)
     , Oneway (..)
     , Open (..)
     , Operator (..)
@@ -523,6 +526,7 @@ module QuickType
     , UnionLazy (..)
     , UnionLeft (..)
     , UnionList (..)
+    , UnionLocalDate (..)
     , UnionLocale (..)
     , UnionLock (..)
     , UnionLong (..)
@@ -559,6 +563,8 @@ module QuickType
     , UnionObjectNode (..)
     , UnionObjectReader (..)
     , UnionObjectWriter (..)
+    , UnionOffsetDateTime (..)
+    , UnionOffsetTime (..)
     , UnionOneway (..)
     , UnionOpen (..)
     , UnionOperator (..)
@@ -905,6 +911,7 @@ data QuickType = QuickType
     , leftQuickType :: Maybe UnionLeft
     , quickTypeLetQuickType :: Maybe UnionLet
     , listQuickType :: Maybe UnionList
+    , localDateQuickType :: Maybe UnionLocalDate
     , localeQuickType :: Maybe UnionLocale
     , lockQuickType :: Maybe UnionLock
     , longQuickType :: Maybe UnionLong
@@ -945,6 +952,8 @@ data QuickType = QuickType
     , objectReaderQuickType :: Maybe UnionObjectReader
     , objectWriterQuickType :: Maybe UnionObjectWriter
     , quickTypeOfQuickType :: Maybe UnionOf
+    , offsetDateTimeQuickType :: Maybe UnionOffsetDateTime
+    , offsetTimeQuickType :: Maybe UnionOffsetTime
     , onewayQuickType :: Maybe UnionOneway
     , openQuickType :: Maybe UnionOpen
     , operatorQuickType :: Maybe UnionOperator
@@ -2572,6 +2581,15 @@ data List = List
     {
     } deriving (Show)
 
+data UnionLocalDate
+    = DoubleInUnionLocalDate Double
+    | LocalDateInUnionLocalDate LocalDate
+    deriving (Show)
+
+data LocalDate = LocalDate
+    {
+    } deriving (Show)
+
 data UnionLocale
     = DoubleInUnionLocale Double
     | LocaleInUnionLocale Locale
@@ -2896,6 +2914,24 @@ data ObjectWriter = ObjectWriter
     {
     } deriving (Show)
 
+data UnionOffsetDateTime
+    = DoubleInUnionOffsetDateTime Double
+    | OffsetDateTimeInUnionOffsetDateTime OffsetDateTime
+    deriving (Show)
+
+data OffsetDateTime = OffsetDateTime
+    {
+    } deriving (Show)
+
+data UnionOffsetTime
+    = DoubleInUnionOffsetTime Double
+    | OffsetTimeInUnionOffsetTime OffsetTime
+    deriving (Show)
+
+data OffsetTime = OffsetTime
+    {
+    } deriving (Show)
+
 data UnionOneway
     = DoubleInUnionOneway Double
     | OnewayInUnionOneway Oneway
@@ -4268,7 +4304,7 @@ decodeTopLevel :: ByteString -> Maybe QuickType
 decodeTopLevel = decode
 
 instance ToJSON QuickType where
-    toJSON (QuickType emptyQuickType quickTypeBoolQuickType complexQuickType imagineryQuickType abstractQuickType alignasQuickType alignofQuickType andQuickType andEqQuickType quickTypeAnyQuickType anyQuickType arrayQuickType arrayNodeQuickType quickTypeAsQuickType asmQuickType assertQuickType associatedtypeQuickType associativityQuickType asyncQuickType atomicQuickType atomicCancelQuickType atomicCommitQuickType atomicNoexceptQuickType autoQuickType awaitQuickType baseQuickType bitandQuickType bitorQuickType boolQuickType purpleBoolQuickType booleanQuickType booleanNodeQuickType breakQuickType bycopyQuickType byrefQuickType byteQuickType calendarQuickType quickTypeCaseQuickType catchQuickType chanQuickType charQuickType char16TQuickType char32TQuickType checkedQuickType purpleClassQuickType quickTypeClassQuickType cloneQuickType coAwaitQuickType coReturnQuickType coYieldQuickType codableQuickType codingKeyQuickType codingKeysQuickType complQuickType conceptQuickType consoleQuickType constQuickType constCastQuickType constexprQuickType constructorQuickType continueQuickType convenienceQuickType convertQuickType converterQuickType cultureInfoQuickType dateQuickType dateParseHandlingQuickType dateFormatterQuickType dateOnlyQuickType dateOnlyConverterQuickType dateTimeQuickType dateTimeStylesQuickType debuggerQuickType decimalQuickType declareQuickType decltypeQuickType decodeStringQuickType decoderQuickType decodingErrorQuickType defQuickType quickTypeDefaultQuickType deferQuickType deinitQuickType delQuickType delegateQuickType deleteQuickType deserializationFeatureQuickType dictQuickType dictionaryQuickType didSetQuickType quickTypeDoQuickType doubleQuickType doubleNodeQuickType dummyQuickType dynamicQuickType dynamicCastQuickType elifQuickType quickTypeElseQuickType encodeQuickTypeQuickType encoderQuickType enumQuickType enumValuesQuickType equalityContractQuickType equatableQuickType eventQuickType exceptQuickType exceptionQuickType explicitQuickType exportQuickType exposingQuickType extendsQuickType extensionQuickType externQuickType fallthroughQuickType quickTypeFalseQuickType falseQuickType fileprivateQuickType finalQuickType finallyQuickType fixedQuickType floatQuickType forQuickType foreachQuickType formatExceptionQuickType friendQuickType fromQuickType fromDictQuickType fromJSONQuickType funcQuickType functionQuickType getQuickType globalQuickType goQuickType gotoQuickType guardQuickType hashableQuickType hashCodeQuickType hasherQuickType hasOwnPropertyQuickType quickTypeIDQuickType quickTypeIfQuickType impQuickType implementsQuickType implicitQuickType quickTypeImportQuickType quickTypeInQuickType indirectQuickType quickTypeInfixQuickType initQuickType inlineQuickType inoutQuickType instanceofQuickType intQuickType interfaceQuickType internalQuickType intNodeQuickType isQuickType isoDateTimeOffsetConverterQuickType iterableQuickType jdecQuickType jencQuickType jpipeQuickType jsonQuickType jsonConverterQuickType jsonSerializerQuickType jsonTokenQuickType jsonWriterQuickType jsonAnyQuickType jsonCodingKeyQuickType jsonDecoderQuickType jsonEncoderQuickType jsonExceptionQuickType jsonGeneratorQuickType jsonNodeQuickType jsonNullQuickType jsonParserQuickType jsonReaderQuickType jsonTokenTypeQuickType kSerializerQuickType lambdaQuickType lazyQuickType leftQuickType quickTypeLetQuickType listQuickType localeQuickType lockQuickType longQuickType longNodeQuickType mapQuickType mapEntryQuickType marshalJSONQuickType metadataPropertyHandlingQuickType quickTypeModuleQuickType mutableQuickType mutatingQuickType namespaceQuickType nativeQuickType newQuickType newtonsoftQuickType nilQuickType noQuickType noexceptQuickType nonatomicQuickType quickTypeNoneQuickType noneQuickType nonlocalQuickType nonmutatingQuickType noSuchMethodQuickType notQuickType notEqQuickType nsErrorQuickType nsObjectQuickType nsStringQuickType nullQuickType quickTypeNullQuickType nullNodeQuickType nullptrQuickType numberQuickType objectQuickType objectMapperQuickType objectNodeQuickType objectReaderQuickType objectWriterQuickType quickTypeOfQuickType onewayQuickType openQuickType operatorQuickType optionalQuickType orQuickType orEqQuickType outQuickType overrideQuickType packageQuickType paramsQuickType passQuickType portQuickType postfixQuickType precedenceQuickType prefixQuickType primitiveKindQuickType printQuickType printfQuickType printMembersQuickType privateQuickType protectedQuickType protocolQuickType quickTypeProtocolQuickType publicQuickType quicktypeQuickType raiseQuickType rangeQuickType readonlyQuickType refQuickType regExpQuickType registerQuickType reinterpretCastQuickType repeatQuickType requireQuickType requiredQuickType requiresQuickType restrictQuickType retainQuickType rethrowsQuickType returnQuickType rightQuickType runtimeTypeQuickType sQuickType sbyteQuickType sealedQuickType selQuickType selectQuickType selfQuickType quickTypeSelfQuickType sendableQuickType serialDescriptorQuickType serializableQuickType serializationFeatureQuickType serializeQuickType serializerProviderQuickType serialNameQuickType setQuickType shortQuickType signedQuickType simpleModuleQuickType sizeofQuickType stackallocQuickType standardsQuickType staticQuickType staticAssertQuickType staticCastQuickType stdDeserializerQuickType stdSerializerQuickType strictfpQuickType stringQuickType structQuickType subscriptQuickType superQuickType switchQuickType symbolQuickType synchronizedQuickType systemQuickType templateQuickType textNodeQuickType quickTypeThenQuickType thisQuickType threadLocalQuickType throwQuickType throwsQuickType timeOnlyQuickType timeOnlyConverterQuickType timeZoneQuickType toDictQuickType toJSONQuickType topLevelQuickType toStringQuickType transientQuickType trueQuickType quickTypeTrueQuickType tryQuickType quickTypeTypeQuickType purpleTypeQuickType typealiasQuickType typedefQuickType typeidQuickType typenameQuickType typeofQuickType uintQuickType ulongQuickType uncheckedQuickType undefinedQuickType unionQuickType unmarshalJSONQuickType unownedQuickType unsafeQuickType unsignedQuickType useSerializersQuickType ushortQuickType usingQuickType utf8JSONReaderQuickType utf8JSONWriterQuickType uuidQuickType varQuickType virtualQuickType voidQuickType volatileQuickType wcharTQuickType weakQuickType quickTypeWhereQuickType whileQuickType willSetQuickType withQuickType xorQuickType xorEqQuickType yesQuickType yieldQuickType) =
+    toJSON (QuickType emptyQuickType quickTypeBoolQuickType complexQuickType imagineryQuickType abstractQuickType alignasQuickType alignofQuickType andQuickType andEqQuickType quickTypeAnyQuickType anyQuickType arrayQuickType arrayNodeQuickType quickTypeAsQuickType asmQuickType assertQuickType associatedtypeQuickType associativityQuickType asyncQuickType atomicQuickType atomicCancelQuickType atomicCommitQuickType atomicNoexceptQuickType autoQuickType awaitQuickType baseQuickType bitandQuickType bitorQuickType boolQuickType purpleBoolQuickType booleanQuickType booleanNodeQuickType breakQuickType bycopyQuickType byrefQuickType byteQuickType calendarQuickType quickTypeCaseQuickType catchQuickType chanQuickType charQuickType char16TQuickType char32TQuickType checkedQuickType purpleClassQuickType quickTypeClassQuickType cloneQuickType coAwaitQuickType coReturnQuickType coYieldQuickType codableQuickType codingKeyQuickType codingKeysQuickType complQuickType conceptQuickType consoleQuickType constQuickType constCastQuickType constexprQuickType constructorQuickType continueQuickType convenienceQuickType convertQuickType converterQuickType cultureInfoQuickType dateQuickType dateParseHandlingQuickType dateFormatterQuickType dateOnlyQuickType dateOnlyConverterQuickType dateTimeQuickType dateTimeStylesQuickType debuggerQuickType decimalQuickType declareQuickType decltypeQuickType decodeStringQuickType decoderQuickType decodingErrorQuickType defQuickType quickTypeDefaultQuickType deferQuickType deinitQuickType delQuickType delegateQuickType deleteQuickType deserializationFeatureQuickType dictQuickType dictionaryQuickType didSetQuickType quickTypeDoQuickType doubleQuickType doubleNodeQuickType dummyQuickType dynamicQuickType dynamicCastQuickType elifQuickType quickTypeElseQuickType encodeQuickTypeQuickType encoderQuickType enumQuickType enumValuesQuickType equalityContractQuickType equatableQuickType eventQuickType exceptQuickType exceptionQuickType explicitQuickType exportQuickType exposingQuickType extendsQuickType extensionQuickType externQuickType fallthroughQuickType quickTypeFalseQuickType falseQuickType fileprivateQuickType finalQuickType finallyQuickType fixedQuickType floatQuickType forQuickType foreachQuickType formatExceptionQuickType friendQuickType fromQuickType fromDictQuickType fromJSONQuickType funcQuickType functionQuickType getQuickType globalQuickType goQuickType gotoQuickType guardQuickType hashableQuickType hashCodeQuickType hasherQuickType hasOwnPropertyQuickType quickTypeIDQuickType quickTypeIfQuickType impQuickType implementsQuickType implicitQuickType quickTypeImportQuickType quickTypeInQuickType indirectQuickType quickTypeInfixQuickType initQuickType inlineQuickType inoutQuickType instanceofQuickType intQuickType interfaceQuickType internalQuickType intNodeQuickType isQuickType isoDateTimeOffsetConverterQuickType iterableQuickType jdecQuickType jencQuickType jpipeQuickType jsonQuickType jsonConverterQuickType jsonSerializerQuickType jsonTokenQuickType jsonWriterQuickType jsonAnyQuickType jsonCodingKeyQuickType jsonDecoderQuickType jsonEncoderQuickType jsonExceptionQuickType jsonGeneratorQuickType jsonNodeQuickType jsonNullQuickType jsonParserQuickType jsonReaderQuickType jsonTokenTypeQuickType kSerializerQuickType lambdaQuickType lazyQuickType leftQuickType quickTypeLetQuickType listQuickType localDateQuickType localeQuickType lockQuickType longQuickType longNodeQuickType mapQuickType mapEntryQuickType marshalJSONQuickType metadataPropertyHandlingQuickType quickTypeModuleQuickType mutableQuickType mutatingQuickType namespaceQuickType nativeQuickType newQuickType newtonsoftQuickType nilQuickType noQuickType noexceptQuickType nonatomicQuickType quickTypeNoneQuickType noneQuickType nonlocalQuickType nonmutatingQuickType noSuchMethodQuickType notQuickType notEqQuickType nsErrorQuickType nsObjectQuickType nsStringQuickType nullQuickType quickTypeNullQuickType nullNodeQuickType nullptrQuickType numberQuickType objectQuickType objectMapperQuickType objectNodeQuickType objectReaderQuickType objectWriterQuickType quickTypeOfQuickType offsetDateTimeQuickType offsetTimeQuickType onewayQuickType openQuickType operatorQuickType optionalQuickType orQuickType orEqQuickType outQuickType overrideQuickType packageQuickType paramsQuickType passQuickType portQuickType postfixQuickType precedenceQuickType prefixQuickType primitiveKindQuickType printQuickType printfQuickType printMembersQuickType privateQuickType protectedQuickType protocolQuickType quickTypeProtocolQuickType publicQuickType quicktypeQuickType raiseQuickType rangeQuickType readonlyQuickType refQuickType regExpQuickType registerQuickType reinterpretCastQuickType repeatQuickType requireQuickType requiredQuickType requiresQuickType restrictQuickType retainQuickType rethrowsQuickType returnQuickType rightQuickType runtimeTypeQuickType sQuickType sbyteQuickType sealedQuickType selQuickType selectQuickType selfQuickType quickTypeSelfQuickType sendableQuickType serialDescriptorQuickType serializableQuickType serializationFeatureQuickType serializeQuickType serializerProviderQuickType serialNameQuickType setQuickType shortQuickType signedQuickType simpleModuleQuickType sizeofQuickType stackallocQuickType standardsQuickType staticQuickType staticAssertQuickType staticCastQuickType stdDeserializerQuickType stdSerializerQuickType strictfpQuickType stringQuickType structQuickType subscriptQuickType superQuickType switchQuickType symbolQuickType synchronizedQuickType systemQuickType templateQuickType textNodeQuickType quickTypeThenQuickType thisQuickType threadLocalQuickType throwQuickType throwsQuickType timeOnlyQuickType timeOnlyConverterQuickType timeZoneQuickType toDictQuickType toJSONQuickType topLevelQuickType toStringQuickType transientQuickType trueQuickType quickTypeTrueQuickType tryQuickType quickTypeTypeQuickType purpleTypeQuickType typealiasQuickType typedefQuickType typeidQuickType typenameQuickType typeofQuickType uintQuickType ulongQuickType uncheckedQuickType undefinedQuickType unionQuickType unmarshalJSONQuickType unownedQuickType unsafeQuickType unsignedQuickType useSerializersQuickType ushortQuickType usingQuickType utf8JSONReaderQuickType utf8JSONWriterQuickType uuidQuickType varQuickType virtualQuickType voidQuickType volatileQuickType wcharTQuickType weakQuickType quickTypeWhereQuickType whileQuickType willSetQuickType withQuickType xorQuickType xorEqQuickType yesQuickType yieldQuickType) =
         object $ foldMap (maybe [] pure)
         [ ("_" .=) <$> emptyQuickType
         , ("_Bool" .=) <$> quickTypeBoolQuickType
@@ -4454,6 +4490,7 @@ instance ToJSON QuickType where
         , ("left" .=) <$> leftQuickType
         , ("let" .=) <$> quickTypeLetQuickType
         , ("list" .=) <$> listQuickType
+        , ("LocalDate" .=) <$> localDateQuickType
         , ("Locale" .=) <$> localeQuickType
         , ("lock" .=) <$> lockQuickType
         , ("long" .=) <$> longQuickType
@@ -4494,6 +4531,8 @@ instance ToJSON QuickType where
         , ("ObjectReader" .=) <$> objectReaderQuickType
         , ("ObjectWriter" .=) <$> objectWriterQuickType
         , ("of" .=) <$> quickTypeOfQuickType
+        , ("OffsetDateTime" .=) <$> offsetDateTimeQuickType
+        , ("OffsetTime" .=) <$> offsetTimeQuickType
         , ("oneway" .=) <$> onewayQuickType
         , ("open" .=) <$> openQuickType
         , ("operator" .=) <$> operatorQuickType
@@ -4813,6 +4852,7 @@ instance FromJSON QuickType where
         <*> v .:! "left"
         <*> v .:! "let"
         <*> v .:! "list"
+        <*> v .:! "LocalDate"
         <*> v .:! "Locale"
         <*> v .:! "lock"
         <*> v .:! "long"
@@ -4853,6 +4893,8 @@ instance FromJSON QuickType where
         <*> v .:! "ObjectReader"
         <*> v .:! "ObjectWriter"
         <*> v .:! "of"
+        <*> v .:! "OffsetDateTime"
+        <*> v .:! "OffsetTime"
         <*> v .:! "oneway"
         <*> v .:! "open"
         <*> v .:! "operator"
@@ -7309,6 +7351,20 @@ instance ToJSON List where
 instance FromJSON List where
     parseJSON (Object _) = return List
 
+instance ToJSON UnionLocalDate where
+    toJSON (DoubleInUnionLocalDate x) = toJSON x
+    toJSON (LocalDateInUnionLocalDate x) = toJSON x
+
+instance FromJSON UnionLocalDate where
+    parseJSON xs@(Number _) = (fmap DoubleInUnionLocalDate . parseJSON) xs
+    parseJSON xs@(Object _) = (fmap LocalDateInUnionLocalDate . parseJSON) xs
+
+instance ToJSON LocalDate where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON LocalDate where
+    parseJSON (Object _) = return LocalDate
+
 instance ToJSON UnionLocale where
     toJSON (DoubleInUnionLocale x) = toJSON x
     toJSON (LocaleInUnionLocale x) = toJSON x
@@ -7813,6 +7869,34 @@ instance ToJSON ObjectWriter where
 instance FromJSON ObjectWriter where
     parseJSON (Object _) = return ObjectWriter
 
+instance ToJSON UnionOffsetDateTime where
+    toJSON (DoubleInUnionOffsetDateTime x) = toJSON x
+    toJSON (OffsetDateTimeInUnionOffsetDateTime x) = toJSON x
+
+instance FromJSON UnionOffsetDateTime where
+    parseJSON xs@(Number _) = (fmap DoubleInUnionOffsetDateTime . parseJSON) xs
+    parseJSON xs@(Object _) = (fmap OffsetDateTimeInUnionOffsetDateTime . parseJSON) xs
+
+instance ToJSON OffsetDateTime where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON OffsetDateTime where
+    parseJSON (Object _) = return OffsetDateTime
+
+instance ToJSON UnionOffsetTime where
+    toJSON (DoubleInUnionOffsetTime x) = toJSON x
+    toJSON (OffsetTimeInUnionOffsetTime x) = toJSON x
+
+instance FromJSON UnionOffsetTime where
+    parseJSON xs@(Number _) = (fmap DoubleInUnionOffsetTime . parseJSON) xs
+    parseJSON xs@(Object _) = (fmap OffsetTimeInUnionOffsetTime . parseJSON) xs
+
+instance ToJSON OffsetTime where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON OffsetTime where
+    parseJSON (Object _) = return OffsetTime
+
 instance ToJSON UnionOneway where
     toJSON (DoubleInUnionOneway x) = toJSON x
     toJSON (OnewayInUnionOneway x) = toJSON x
diff --git a/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/LocalDateClassClass.java b/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/LocalDateClassClass.java
new file mode 100644
index 0000000..70d51eb
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/LocalDateClassClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class LocalDateClassClass {
+}
diff --git a/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetDateTimeClassClass.java b/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetDateTimeClassClass.java
new file mode 100644
index 0000000..9eb79a1
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetDateTimeClassClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetDateTimeClassClass {
+}
diff --git a/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetTimeClassClass.java b/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetTimeClassClass.java
new file mode 100644
index 0000000..87382b7
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetTimeClassClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetTimeClassClass {
+}
diff --git a/base/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/TopLevel.java
index 238cf5f..8727ad5 100644
--- a/base/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/TopLevel.java
+++ b/head/schema-java/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -10,6 +10,9 @@ public class TopLevel {
     private List<ComplexUnionArrayElement> complexUnionArray;
     private LocalDate date;
     private OffsetDateTime dateTime;
+    private LocalDateClassClass localDateClass;
+    private OffsetDateTimeClassClass offsetDateTimeClass;
+    private OffsetTimeClassClass offsetTimeClass;
     private OffsetTime time;
     private List<UnionArray> unionArray;
 
@@ -29,6 +32,21 @@ public class TopLevel {
     @JsonSetter(nulls = Nulls.FAIL)
     public void setDateTime(OffsetDateTime value) { this.dateTime = value; }
 
+    @JsonProperty("local-date-class")
+    public LocalDateClassClass getLocalDateClass() { return localDateClass; }
+    @JsonProperty("local-date-class")
+    public void setLocalDateClass(LocalDateClassClass value) { this.localDateClass = value; }
+
+    @JsonProperty("offset-date-time-class")
+    public OffsetDateTimeClassClass getOffsetDateTimeClass() { return offsetDateTimeClass; }
+    @JsonProperty("offset-date-time-class")
+    public void setOffsetDateTimeClass(OffsetDateTimeClassClass value) { this.offsetDateTimeClass = value; }
+
+    @JsonProperty("offset-time-class")
+    public OffsetTimeClassClass getOffsetTimeClass() { return offsetTimeClass; }
+    @JsonProperty("offset-time-class")
+    public void setOffsetTimeClass(OffsetTimeClassClass value) { this.offsetTimeClass = value; }
+
     @JsonProperty("time")
     public OffsetTime getTime() { return time; }
     @JsonProperty("time")
diff --git a/base/schema-java/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java b/head/schema-java/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
index 4f99e7b..7ffadce 100644
--- a/base/schema-java/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
+++ b/head/schema-java/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
@@ -4,7 +4,7 @@ import java.io.IOException;
 import com.fasterxml.jackson.annotation.*;
 
 public enum Enum {
-    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY_NODE, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BOOLEAN_NODE, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DESERIALIZATION_FEATURE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DOUBLE_NODE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INT_NODE, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LONG_NODE, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NULL_NODE, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_NODE, OBJECT_MAPPER, OBJECT_READER, OBJECT_WRITER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZATION_FEATURE, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, TEXT_NODE, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
+    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY_NODE, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BOOLEAN_NODE, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DESERIALIZATION_FEATURE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DOUBLE_NODE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INT_NODE, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCAL_DATE, LONG_NODE, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NULL_NODE, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OFFSET_DATE_TIME, OFFSET_TIME, OBJECT_NODE, OBJECT_MAPPER, OBJECT_READER, OBJECT_WRITER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZATION_FEATURE, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, TEXT_NODE, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
 
     @JsonValue
     public String toValue() {
@@ -191,6 +191,7 @@ public enum Enum {
             case LEFT: return "left";
             case LET: return "let";
             case LIST: return "list";
+            case LOCAL_DATE: return "LocalDate";
             case LONG_NODE: return "LongNode";
             case LOCALE: return "Locale";
             case LOCK: return "lock";
@@ -226,6 +227,8 @@ public enum Enum {
             case NULLPTR: return "nullptr";
             case NUMBER: return "number";
             case OBJECT: return "object";
+            case OFFSET_DATE_TIME: return "OffsetDateTime";
+            case OFFSET_TIME: return "OffsetTime";
             case OBJECT_NODE: return "ObjectNode";
             case OBJECT_MAPPER: return "ObjectMapper";
             case OBJECT_READER: return "ObjectReader";
@@ -552,6 +555,7 @@ public enum Enum {
         if (value.equals("left")) return LEFT;
         if (value.equals("let")) return LET;
         if (value.equals("list")) return LIST;
+        if (value.equals("LocalDate")) return LOCAL_DATE;
         if (value.equals("LongNode")) return LONG_NODE;
         if (value.equals("Locale")) return LOCALE;
         if (value.equals("lock")) return LOCK;
@@ -587,6 +591,8 @@ public enum Enum {
         if (value.equals("nullptr")) return NULLPTR;
         if (value.equals("number")) return NUMBER;
         if (value.equals("object")) return OBJECT;
+        if (value.equals("OffsetDateTime")) return OFFSET_DATE_TIME;
+        if (value.equals("OffsetTime")) return OFFSET_TIME;
         if (value.equals("ObjectNode")) return OBJECT_NODE;
         if (value.equals("ObjectMapper")) return OBJECT_MAPPER;
         if (value.equals("ObjectReader")) return OBJECT_READER;
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/LocalDateClass.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/LocalDateClass.java
new file mode 100644
index 0000000..14feb5c
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/LocalDateClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class LocalDateClass {
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetDateTimeClass.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetDateTimeClass.java
new file mode 100644
index 0000000..6993590
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetDateTimeClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetDateTimeClass {
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetTimeClass.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetTimeClass.java
new file mode 100644
index 0000000..6048fbe
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetTimeClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetTimeClass {
+}
diff --git a/base/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
index bda61f0..c6a6b27 100644
--- a/base/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -187,6 +187,7 @@ public class TopLevel {
     private UnionLeft left;
     private UnionLet let;
     private UnionList list;
+    private UnionLocalDate localDate;
     private UnionLocale locale;
     private UnionLock lock;
     private UnionLong topLevelLong;
@@ -227,6 +228,8 @@ public class TopLevel {
     private UnionObjectReader objectReader;
     private UnionObjectWriter objectWriter;
     private UnionOf of;
+    private UnionOffsetDateTime offsetDateTime;
+    private UnionOffsetTime offsetTime;
     private UnionOneway oneway;
     private UnionOpen open;
     private UnionOperator operator;
@@ -1279,6 +1282,11 @@ public class TopLevel {
     @JsonProperty("list")
     public void setList(UnionList value) { this.list = value; }
 
+    @JsonProperty("LocalDate")
+    public UnionLocalDate getLocalDate() { return localDate; }
+    @JsonProperty("LocalDate")
+    public void setLocalDate(UnionLocalDate value) { this.localDate = value; }
+
     @JsonProperty("Locale")
     public UnionLocale getLocale() { return locale; }
     @JsonProperty("Locale")
@@ -1479,6 +1487,16 @@ public class TopLevel {
     @JsonProperty("of")
     public void setOf(UnionOf value) { this.of = value; }
 
+    @JsonProperty("OffsetDateTime")
+    public UnionOffsetDateTime getOffsetDateTime() { return offsetDateTime; }
+    @JsonProperty("OffsetDateTime")
+    public void setOffsetDateTime(UnionOffsetDateTime value) { this.offsetDateTime = value; }
+
+    @JsonProperty("OffsetTime")
+    public UnionOffsetTime getOffsetTime() { return offsetTime; }
+    @JsonProperty("OffsetTime")
+    public void setOffsetTime(UnionOffsetTime value) { this.offsetTime = value; }
+
     @JsonProperty("oneway")
     public UnionOneway getOneway() { return oneway; }
     @JsonProperty("oneway")
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionLocalDate.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionLocalDate.java
new file mode 100644
index 0000000..45d3960
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionLocalDate.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionLocalDate.Deserializer.class)
+@JsonSerialize(using = UnionLocalDate.Serializer.class)
+public class UnionLocalDate {
+    public Double doubleValue;
+    public LocalDateClass localDateClassValue;
+
+    static class Deserializer extends JsonDeserializer<UnionLocalDate> {
+        @Override
+        public UnionLocalDate deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionLocalDate value = new UnionLocalDate();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.localDateClassValue = jsonParser.readValueAs(LocalDateClass.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionLocalDate");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionLocalDate> {
+        @Override
+        public void serialize(UnionLocalDate obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.localDateClassValue != null) {
+                jsonGenerator.writeObject(obj.localDateClassValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetDateTime.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetDateTime.java
new file mode 100644
index 0000000..c47e556
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetDateTime.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionOffsetDateTime.Deserializer.class)
+@JsonSerialize(using = UnionOffsetDateTime.Serializer.class)
+public class UnionOffsetDateTime {
+    public Double doubleValue;
+    public OffsetDateTimeClass offsetDateTimeClassValue;
+
+    static class Deserializer extends JsonDeserializer<UnionOffsetDateTime> {
+        @Override
+        public UnionOffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionOffsetDateTime value = new UnionOffsetDateTime();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.offsetDateTimeClassValue = jsonParser.readValueAs(OffsetDateTimeClass.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionOffsetDateTime");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionOffsetDateTime> {
+        @Override
+        public void serialize(UnionOffsetDateTime obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.offsetDateTimeClassValue != null) {
+                jsonGenerator.writeObject(obj.offsetDateTimeClassValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetTime.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetTime.java
new file mode 100644
index 0000000..ece1e4c
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetTime.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionOffsetTime.Deserializer.class)
+@JsonSerialize(using = UnionOffsetTime.Serializer.class)
+public class UnionOffsetTime {
+    public Double doubleValue;
+    public OffsetTimeClass offsetTimeClassValue;
+
+    static class Deserializer extends JsonDeserializer<UnionOffsetTime> {
+        @Override
+        public UnionOffsetTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionOffsetTime value = new UnionOffsetTime();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.offsetTimeClassValue = jsonParser.readValueAs(OffsetTimeClass.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionOffsetTime");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionOffsetTime> {
+        @Override
+        public void serialize(UnionOffsetTime obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.offsetTimeClassValue != null) {
+                jsonGenerator.writeObject(obj.offsetTimeClassValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/base/schema-java-datetime-legacy/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
index 4f99e7b..7ffadce 100644
--- a/base/schema-java-datetime-legacy/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
@@ -4,7 +4,7 @@ import java.io.IOException;
 import com.fasterxml.jackson.annotation.*;
 
 public enum Enum {
-    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY_NODE, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BOOLEAN_NODE, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DESERIALIZATION_FEATURE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DOUBLE_NODE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INT_NODE, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LONG_NODE, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NULL_NODE, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_NODE, OBJECT_MAPPER, OBJECT_READER, OBJECT_WRITER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZATION_FEATURE, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, TEXT_NODE, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
+    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY_NODE, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BOOLEAN_NODE, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DESERIALIZATION_FEATURE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DOUBLE_NODE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INT_NODE, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCAL_DATE, LONG_NODE, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NULL_NODE, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OFFSET_DATE_TIME, OFFSET_TIME, OBJECT_NODE, OBJECT_MAPPER, OBJECT_READER, OBJECT_WRITER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZATION_FEATURE, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, TEXT_NODE, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
 
     @JsonValue
     public String toValue() {
@@ -191,6 +191,7 @@ public enum Enum {
             case LEFT: return "left";
             case LET: return "let";
             case LIST: return "list";
+            case LOCAL_DATE: return "LocalDate";
             case LONG_NODE: return "LongNode";
             case LOCALE: return "Locale";
             case LOCK: return "lock";
@@ -226,6 +227,8 @@ public enum Enum {
             case NULLPTR: return "nullptr";
             case NUMBER: return "number";
             case OBJECT: return "object";
+            case OFFSET_DATE_TIME: return "OffsetDateTime";
+            case OFFSET_TIME: return "OffsetTime";
             case OBJECT_NODE: return "ObjectNode";
             case OBJECT_MAPPER: return "ObjectMapper";
             case OBJECT_READER: return "ObjectReader";
@@ -552,6 +555,7 @@ public enum Enum {
         if (value.equals("left")) return LEFT;
         if (value.equals("let")) return LET;
         if (value.equals("list")) return LIST;
+        if (value.equals("LocalDate")) return LOCAL_DATE;
         if (value.equals("LongNode")) return LONG_NODE;
         if (value.equals("Locale")) return LOCALE;
         if (value.equals("lock")) return LOCK;
@@ -587,6 +591,8 @@ public enum Enum {
         if (value.equals("nullptr")) return NULLPTR;
         if (value.equals("number")) return NUMBER;
         if (value.equals("object")) return OBJECT;
+        if (value.equals("OffsetDateTime")) return OFFSET_DATE_TIME;
+        if (value.equals("OffsetTime")) return OFFSET_TIME;
         if (value.equals("ObjectNode")) return OBJECT_NODE;
         if (value.equals("ObjectMapper")) return OBJECT_MAPPER;
         if (value.equals("ObjectReader")) return OBJECT_READER;
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/LocalDate.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/LocalDate.java
new file mode 100644
index 0000000..4e0f2e6
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/LocalDate.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class LocalDate {
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetDateTime.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetDateTime.java
new file mode 100644
index 0000000..38cfa24
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetDateTime.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetDateTime {
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetTime.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetTime.java
new file mode 100644
index 0000000..2704ebe
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetTime.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetTime {
+}
diff --git a/base/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
index bda61f0..c6a6b27 100644
--- a/base/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -187,6 +187,7 @@ public class TopLevel {
     private UnionLeft left;
     private UnionLet let;
     private UnionList list;
+    private UnionLocalDate localDate;
     private UnionLocale locale;
     private UnionLock lock;
     private UnionLong topLevelLong;
@@ -227,6 +228,8 @@ public class TopLevel {
     private UnionObjectReader objectReader;
     private UnionObjectWriter objectWriter;
     private UnionOf of;
+    private UnionOffsetDateTime offsetDateTime;
+    private UnionOffsetTime offsetTime;
     private UnionOneway oneway;
     private UnionOpen open;
     private UnionOperator operator;
@@ -1279,6 +1282,11 @@ public class TopLevel {
     @JsonProperty("list")
     public void setList(UnionList value) { this.list = value; }
 
+    @JsonProperty("LocalDate")
+    public UnionLocalDate getLocalDate() { return localDate; }
+    @JsonProperty("LocalDate")
+    public void setLocalDate(UnionLocalDate value) { this.localDate = value; }
+
     @JsonProperty("Locale")
     public UnionLocale getLocale() { return locale; }
     @JsonProperty("Locale")
@@ -1479,6 +1487,16 @@ public class TopLevel {
     @JsonProperty("of")
     public void setOf(UnionOf value) { this.of = value; }
 
+    @JsonProperty("OffsetDateTime")
+    public UnionOffsetDateTime getOffsetDateTime() { return offsetDateTime; }
+    @JsonProperty("OffsetDateTime")
+    public void setOffsetDateTime(UnionOffsetDateTime value) { this.offsetDateTime = value; }
+
+    @JsonProperty("OffsetTime")
+    public UnionOffsetTime getOffsetTime() { return offsetTime; }
+    @JsonProperty("OffsetTime")
+    public void setOffsetTime(UnionOffsetTime value) { this.offsetTime = value; }
+
     @JsonProperty("oneway")
     public UnionOneway getOneway() { return oneway; }
     @JsonProperty("oneway")
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionLocalDate.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionLocalDate.java
new file mode 100644
index 0000000..dbb5624
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionLocalDate.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionLocalDate.Deserializer.class)
+@JsonSerialize(using = UnionLocalDate.Serializer.class)
+public class UnionLocalDate {
+    public Double doubleValue;
+    public LocalDate localDateValue;
+
+    static class Deserializer extends JsonDeserializer<UnionLocalDate> {
+        @Override
+        public UnionLocalDate deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionLocalDate value = new UnionLocalDate();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.localDateValue = jsonParser.readValueAs(LocalDate.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionLocalDate");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionLocalDate> {
+        @Override
+        public void serialize(UnionLocalDate obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.localDateValue != null) {
+                jsonGenerator.writeObject(obj.localDateValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetDateTime.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetDateTime.java
new file mode 100644
index 0000000..be47ae1
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetDateTime.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionOffsetDateTime.Deserializer.class)
+@JsonSerialize(using = UnionOffsetDateTime.Serializer.class)
+public class UnionOffsetDateTime {
+    public Double doubleValue;
+    public OffsetDateTime offsetDateTimeValue;
+
+    static class Deserializer extends JsonDeserializer<UnionOffsetDateTime> {
+        @Override
+        public UnionOffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionOffsetDateTime value = new UnionOffsetDateTime();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.offsetDateTimeValue = jsonParser.readValueAs(OffsetDateTime.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionOffsetDateTime");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionOffsetDateTime> {
+        @Override
+        public void serialize(UnionOffsetDateTime obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.offsetDateTimeValue != null) {
+                jsonGenerator.writeObject(obj.offsetDateTimeValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetTime.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetTime.java
new file mode 100644
index 0000000..3eba8f3
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetTime.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionOffsetTime.Deserializer.class)
+@JsonSerialize(using = UnionOffsetTime.Serializer.class)
+public class UnionOffsetTime {
+    public Double doubleValue;
+    public OffsetTime offsetTimeValue;
+
+    static class Deserializer extends JsonDeserializer<UnionOffsetTime> {
+        @Override
+        public UnionOffsetTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionOffsetTime value = new UnionOffsetTime();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.offsetTimeValue = jsonParser.readValueAs(OffsetTime.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionOffsetTime");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionOffsetTime> {
+        @Override
+        public void serialize(UnionOffsetTime obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.offsetTimeValue != null) {
+                jsonGenerator.writeObject(obj.offsetTimeValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/LocalDateClassClass.java b/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/LocalDateClassClass.java
new file mode 100644
index 0000000..70d51eb
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/LocalDateClassClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class LocalDateClassClass {
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetDateTimeClassClass.java b/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetDateTimeClassClass.java
new file mode 100644
index 0000000..9eb79a1
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetDateTimeClassClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetDateTimeClassClass {
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetTimeClassClass.java b/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetTimeClassClass.java
new file mode 100644
index 0000000..87382b7
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/OffsetTimeClassClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetTimeClassClass {
+}
diff --git a/base/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/TopLevel.java
index 238cf5f..8727ad5 100644
--- a/base/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/TopLevel.java
+++ b/head/schema-java-lombok/test/inputs/schema/date-time.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -10,6 +10,9 @@ public class TopLevel {
     private List<ComplexUnionArrayElement> complexUnionArray;
     private LocalDate date;
     private OffsetDateTime dateTime;
+    private LocalDateClassClass localDateClass;
+    private OffsetDateTimeClassClass offsetDateTimeClass;
+    private OffsetTimeClassClass offsetTimeClass;
     private OffsetTime time;
     private List<UnionArray> unionArray;
 
@@ -29,6 +32,21 @@ public class TopLevel {
     @JsonSetter(nulls = Nulls.FAIL)
     public void setDateTime(OffsetDateTime value) { this.dateTime = value; }
 
+    @JsonProperty("local-date-class")
+    public LocalDateClassClass getLocalDateClass() { return localDateClass; }
+    @JsonProperty("local-date-class")
+    public void setLocalDateClass(LocalDateClassClass value) { this.localDateClass = value; }
+
+    @JsonProperty("offset-date-time-class")
+    public OffsetDateTimeClassClass getOffsetDateTimeClass() { return offsetDateTimeClass; }
+    @JsonProperty("offset-date-time-class")
+    public void setOffsetDateTimeClass(OffsetDateTimeClassClass value) { this.offsetDateTimeClass = value; }
+
+    @JsonProperty("offset-time-class")
+    public OffsetTimeClassClass getOffsetTimeClass() { return offsetTimeClass; }
+    @JsonProperty("offset-time-class")
+    public void setOffsetTimeClass(OffsetTimeClassClass value) { this.offsetTimeClass = value; }
+
     @JsonProperty("time")
     public OffsetTime getTime() { return time; }
     @JsonProperty("time")
diff --git a/base/schema-java-lombok/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java b/head/schema-java-lombok/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
index 4f99e7b..7ffadce 100644
--- a/base/schema-java-lombok/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
@@ -4,7 +4,7 @@ import java.io.IOException;
 import com.fasterxml.jackson.annotation.*;
 
 public enum Enum {
-    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY_NODE, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BOOLEAN_NODE, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DESERIALIZATION_FEATURE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DOUBLE_NODE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INT_NODE, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LONG_NODE, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NULL_NODE, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_NODE, OBJECT_MAPPER, OBJECT_READER, OBJECT_WRITER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZATION_FEATURE, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, TEXT_NODE, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
+    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY_NODE, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BOOLEAN_NODE, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DESERIALIZATION_FEATURE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DOUBLE_NODE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INT_NODE, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCAL_DATE, LONG_NODE, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NULL_NODE, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OFFSET_DATE_TIME, OFFSET_TIME, OBJECT_NODE, OBJECT_MAPPER, OBJECT_READER, OBJECT_WRITER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZATION_FEATURE, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, TEXT_NODE, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
 
     @JsonValue
     public String toValue() {
@@ -191,6 +191,7 @@ public enum Enum {
             case LEFT: return "left";
             case LET: return "let";
             case LIST: return "list";
+            case LOCAL_DATE: return "LocalDate";
             case LONG_NODE: return "LongNode";
             case LOCALE: return "Locale";
             case LOCK: return "lock";
@@ -226,6 +227,8 @@ public enum Enum {
             case NULLPTR: return "nullptr";
             case NUMBER: return "number";
             case OBJECT: return "object";
+            case OFFSET_DATE_TIME: return "OffsetDateTime";
+            case OFFSET_TIME: return "OffsetTime";
             case OBJECT_NODE: return "ObjectNode";
             case OBJECT_MAPPER: return "ObjectMapper";
             case OBJECT_READER: return "ObjectReader";
@@ -552,6 +555,7 @@ public enum Enum {
         if (value.equals("left")) return LEFT;
         if (value.equals("let")) return LET;
         if (value.equals("list")) return LIST;
+        if (value.equals("LocalDate")) return LOCAL_DATE;
         if (value.equals("LongNode")) return LONG_NODE;
         if (value.equals("Locale")) return LOCALE;
         if (value.equals("lock")) return LOCK;
@@ -587,6 +591,8 @@ public enum Enum {
         if (value.equals("nullptr")) return NULLPTR;
         if (value.equals("number")) return NUMBER;
         if (value.equals("object")) return OBJECT;
+        if (value.equals("OffsetDateTime")) return OFFSET_DATE_TIME;
+        if (value.equals("OffsetTime")) return OFFSET_TIME;
         if (value.equals("ObjectNode")) return OBJECT_NODE;
         if (value.equals("ObjectMapper")) return OBJECT_MAPPER;
         if (value.equals("ObjectReader")) return OBJECT_READER;
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/LocalDateClass.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/LocalDateClass.java
new file mode 100644
index 0000000..14feb5c
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/LocalDateClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class LocalDateClass {
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetDateTimeClass.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetDateTimeClass.java
new file mode 100644
index 0000000..6993590
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetDateTimeClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetDateTimeClass {
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetTimeClass.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetTimeClass.java
new file mode 100644
index 0000000..6048fbe
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/OffsetTimeClass.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class OffsetTimeClass {
+}
diff --git a/base/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
index bda61f0..c6a6b27 100644
--- a/base/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -187,6 +187,7 @@ public class TopLevel {
     private UnionLeft left;
     private UnionLet let;
     private UnionList list;
+    private UnionLocalDate localDate;
     private UnionLocale locale;
     private UnionLock lock;
     private UnionLong topLevelLong;
@@ -227,6 +228,8 @@ public class TopLevel {
     private UnionObjectReader objectReader;
     private UnionObjectWriter objectWriter;
     private UnionOf of;
+    private UnionOffsetDateTime offsetDateTime;
+    private UnionOffsetTime offsetTime;
     private UnionOneway oneway;
     private UnionOpen open;
     private UnionOperator operator;
@@ -1279,6 +1282,11 @@ public class TopLevel {
     @JsonProperty("list")
     public void setList(UnionList value) { this.list = value; }
 
+    @JsonProperty("LocalDate")
+    public UnionLocalDate getLocalDate() { return localDate; }
+    @JsonProperty("LocalDate")
+    public void setLocalDate(UnionLocalDate value) { this.localDate = value; }
+
     @JsonProperty("Locale")
     public UnionLocale getLocale() { return locale; }
     @JsonProperty("Locale")
@@ -1479,6 +1487,16 @@ public class TopLevel {
     @JsonProperty("of")
     public void setOf(UnionOf value) { this.of = value; }
 
+    @JsonProperty("OffsetDateTime")
+    public UnionOffsetDateTime getOffsetDateTime() { return offsetDateTime; }
+    @JsonProperty("OffsetDateTime")
+    public void setOffsetDateTime(UnionOffsetDateTime value) { this.offsetDateTime = value; }
+
+    @JsonProperty("OffsetTime")
+    public UnionOffsetTime getOffsetTime() { return offsetTime; }
+    @JsonProperty("OffsetTime")
+    public void setOffsetTime(UnionOffsetTime value) { this.offsetTime = value; }
+
     @JsonProperty("oneway")
     public UnionOneway getOneway() { return oneway; }
     @JsonProperty("oneway")
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionLocalDate.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionLocalDate.java
new file mode 100644
index 0000000..45d3960
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionLocalDate.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionLocalDate.Deserializer.class)
+@JsonSerialize(using = UnionLocalDate.Serializer.class)
+public class UnionLocalDate {
+    public Double doubleValue;
+    public LocalDateClass localDateClassValue;
+
+    static class Deserializer extends JsonDeserializer<UnionLocalDate> {
+        @Override
+        public UnionLocalDate deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionLocalDate value = new UnionLocalDate();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.localDateClassValue = jsonParser.readValueAs(LocalDateClass.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionLocalDate");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionLocalDate> {
+        @Override
+        public void serialize(UnionLocalDate obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.localDateClassValue != null) {
+                jsonGenerator.writeObject(obj.localDateClassValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetDateTime.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetDateTime.java
new file mode 100644
index 0000000..c47e556
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetDateTime.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionOffsetDateTime.Deserializer.class)
+@JsonSerialize(using = UnionOffsetDateTime.Serializer.class)
+public class UnionOffsetDateTime {
+    public Double doubleValue;
+    public OffsetDateTimeClass offsetDateTimeClassValue;
+
+    static class Deserializer extends JsonDeserializer<UnionOffsetDateTime> {
+        @Override
+        public UnionOffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionOffsetDateTime value = new UnionOffsetDateTime();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.offsetDateTimeClassValue = jsonParser.readValueAs(OffsetDateTimeClass.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionOffsetDateTime");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionOffsetDateTime> {
+        @Override
+        public void serialize(UnionOffsetDateTime obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.offsetDateTimeClassValue != null) {
+                jsonGenerator.writeObject(obj.offsetDateTimeClassValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetTime.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetTime.java
new file mode 100644
index 0000000..ece1e4c
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionOffsetTime.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionOffsetTime.Deserializer.class)
+@JsonSerialize(using = UnionOffsetTime.Serializer.class)
+public class UnionOffsetTime {
+    public Double doubleValue;
+    public OffsetTimeClass offsetTimeClassValue;
+
+    static class Deserializer extends JsonDeserializer<UnionOffsetTime> {
+        @Override
+        public UnionOffsetTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionOffsetTime value = new UnionOffsetTime();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.offsetTimeClassValue = jsonParser.readValueAs(OffsetTimeClass.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionOffsetTime");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionOffsetTime> {
+        @Override
+        public void serialize(UnionOffsetTime obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.offsetTimeClassValue != null) {
+                jsonGenerator.writeObject(obj.offsetTimeClassValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/base/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js
index e3c81ff..b871237 100644
--- a/base/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js
@@ -196,9 +196,18 @@ const typeMap = {
         { json: "complex-union-array", js: "complex-union-array", typ: a(u(Date, r("ComplexUnionArrayEnum"), i(0))) },
         { json: "date", js: "date", typ: Date },
         { json: "date-time", js: "date-time", typ: Date },
+        { json: "local-date-class", js: "local-date-class", typ: u(undefined, r("LocalDate")) },
+        { json: "offset-date-time-class", js: "offset-date-time-class", typ: u(undefined, r("OffsetDateTime")) },
+        { json: "offset-time-class", js: "offset-time-class", typ: u(undefined, r("OffsetTime")) },
         { json: "time", js: "time", typ: "" },
         { json: "union-array", js: "union-array", typ: a("") },
     ], false),
+    "LocalDate": o([
+    ], false),
+    "OffsetDateTime": o([
+    ], false),
+    "OffsetTime": o([
+    ], false),
     "ComplexUnionArrayEnum": [
         "foo",
         "bar",
diff --git a/base/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
index de37488..18c2224 100644
--- a/base/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
@@ -378,6 +378,7 @@ const typeMap = {
         "left",
         "let",
         "list",
+        "LocalDate",
         "LongNode",
         "Locale",
         "lock",
@@ -413,6 +414,8 @@ const typeMap = {
         "nullptr",
         "number",
         "object",
+        "OffsetDateTime",
+        "OffsetTime",
         "ObjectNode",
         "ObjectMapper",
         "ObjectReader",
diff --git a/base/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
index d48a480..9ccd987 100644
--- a/base/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
@@ -377,6 +377,7 @@ const typeMap = {
         { json: "left", js: "left", typ: u(undefined, u(r("Left"), 3.14)) },
         { json: "let", js: "let", typ: u(undefined, u(r("Let"), 3.14)) },
         { json: "list", js: "list", typ: u(undefined, u(r("List"), 3.14)) },
+        { json: "LocalDate", js: "LocalDate", typ: u(undefined, u(r("LocalDate"), 3.14)) },
         { json: "Locale", js: "Locale", typ: u(undefined, u(r("Locale"), 3.14)) },
         { json: "lock", js: "lock", typ: u(undefined, u(r("Lock"), 3.14)) },
         { json: "long", js: "long", typ: u(undefined, u(r("Long"), 3.14)) },
@@ -417,6 +418,8 @@ const typeMap = {
         { json: "ObjectReader", js: "ObjectReader", typ: u(undefined, u(r("ObjectReader"), 3.14)) },
         { json: "ObjectWriter", js: "ObjectWriter", typ: u(undefined, u(r("ObjectWriter"), 3.14)) },
         { json: "of", js: "of", typ: u(undefined, u(r("Of"), 3.14)) },
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: u(undefined, u(r("OffsetDateTime"), 3.14)) },
+        { json: "OffsetTime", js: "OffsetTime", typ: u(undefined, u(r("OffsetTime"), 3.14)) },
         { json: "oneway", js: "oneway", typ: u(undefined, u(r("Oneway"), 3.14)) },
         { json: "open", js: "open", typ: u(undefined, u(r("Open"), 3.14)) },
         { json: "operator", js: "operator", typ: u(undefined, u(r("Operator"), 3.14)) },
@@ -631,6 +634,8 @@ const typeMap = {
     ], false),
     "KSerializer": o([
     ], false),
+    "LocalDate": o([
+    ], false),
     "Locale": o([
     ], false),
     "LongNode": o([
@@ -661,6 +666,10 @@ const typeMap = {
     ], false),
     "ObjectWriter": o([
     ], false),
+    "OffsetDateTime": o([
+    ], false),
+    "OffsetTime": o([
+    ], false),
     "PrimitiveKind": o([
     ], false),
     "Protocol": o([
diff --git a/base/schema-javascript-prop-types/test/inputs/schema/date-time.schema/default/toplevel.js b/head/schema-javascript-prop-types/test/inputs/schema/date-time.schema/default/toplevel.js
index dc1ae7b..ea49939 100644
--- a/base/schema-javascript-prop-types/test/inputs/schema/date-time.schema/default/toplevel.js
+++ b/head/schema-javascript-prop-types/test/inputs/schema/date-time.schema/default/toplevel.js
@@ -14,11 +14,23 @@ import PropTypes from "prop-types";
 const Integer = (props, name) => props[name] == null || Number.isInteger(props[name]) ? null : new Error("Expected integer");
 
 let _TopLevel;
+let _LocalDate;
+let _OffsetDateTime;
+let _OffsetTime;
 const _ComplexUnionArrayEnum = PropTypes.oneOf(['foo', 'bar']);
+_LocalDate = PropTypes.shape({
+});
+_OffsetDateTime = PropTypes.shape({
+});
+_OffsetTime = PropTypes.shape({
+});
 _TopLevel = PropTypes.shape({
     "complex-union-array": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), _ComplexUnionArrayEnum, Integer]))]).isRequired,
     "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
     "date-time": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
+    "local-date-class": PropTypes.oneOfType([_LocalDate, PropTypes.oneOf([null])]),
+    "offset-date-time-class": PropTypes.oneOfType([_OffsetDateTime, PropTypes.oneOf([null])]),
+    "offset-time-class": PropTypes.oneOfType([_OffsetTime, PropTypes.oneOf([null])]),
     "time": PropTypes.oneOfType([PropTypes.string]).isRequired,
     "union-array": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string)]).isRequired,
 });
diff --git a/base/schema-javascript-prop-types/test/inputs/schema/keyword-enum.schema/default/toplevel.js b/head/schema-javascript-prop-types/test/inputs/schema/keyword-enum.schema/default/toplevel.js
index 282151b..597b28f 100644
--- a/base/schema-javascript-prop-types/test/inputs/schema/keyword-enum.schema/default/toplevel.js
+++ b/head/schema-javascript-prop-types/test/inputs/schema/keyword-enum.schema/default/toplevel.js
@@ -13,7 +13,7 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Enum = PropTypes.oneOf(['_', '_Bool', '_Complex', '_Imaginery', 'abstract', 'alignas', 'alignof', 'and', 'and_eq', 'any', 'Any', 'ArrayNode', 'array', 'as', 'asm', 'assert', 'associatedtype', 'associativity', 'async', 'atomic', 'atomic_cancel', 'atomic_commit', 'atomic_noexcept', 'auto', 'await', 'base', 'bitand', 'bitor', 'BOOL', 'bool', 'boolean', 'BooleanNode', 'break', 'bycopy', 'byref', 'byte', 'Calendar', 'case', 'catch', 'chan', 'char', 'char16_t', 'char32_t', 'checked', 'class', 'Class', 'clone', 'co_await', 'co_return', 'co_yield', 'Codable', 'CodingKey', 'CodingKeys', 'compl', 'concept', 'console', 'const', 'const_cast', 'constexpr', 'constructor', 'continue', 'convenience', 'convert', 'converter', 'CultureInfo', 'date', 'date_parse_handling', 'DateFormatter', 'DateOnly', 'DateOnlyConverter', 'DateTime', 'DateTimeStyles', 'debugger', 'decimal', 'declare', 'DeserializationFeature', 'decltype', 'decode_string', 'Decoder', 'DecodingError', 'def', 'default', 'defer', 'deinit', 'del', 'delegate', 'delete', 'dict', 'dictionary', 'didSet', 'do', 'double', 'DoubleNode', 'dynamic', 'dynamic_cast', 'elif', 'else', 'encode_quick_type', 'Encoder', 'enum', 'EnumValues', 'Equatable', 'equalityContract', 'event', 'except', 'exception', 'explicit', 'export', 'exposing', 'extends', 'extension', 'extern', 'fallthrough', 'false', 'False', 'fileprivate', 'final', 'finally', 'fixed', 'float', 'for', 'foreach', 'FormatException', 'friend', 'from', 'from_dict', 'from_json', 'func', 'function', 'get', 'global', 'go', 'goto', 'guard', 'Hashable', 'hashCode', 'Hasher', 'hasOwnProperty', 'id', 'if', 'IMP', 'implements', 'implicit', 'import', 'in', 'indirect', 'infix', 'init', 'inline', 'inout', 'instanceof', 'int', 'IntNode', 'interface', 'internal', 'IsoDateTimeOffsetConverter', 'iterable', 'is', 'jdec', 'jenc', 'jpipe', 'json', 'json_converter', 'json_serializer', 'json_token', 'json_writer', 'JSONAny', 'JSONCodingKey', 'JSONDecoder', 'JSONEncoder', 'JsonException', 'JsonGenerator', 'JsonNode', 'JSONNull', 'JsonParser', 'JsonReader', 'JsonTokenType', 'lambda', 'lazy', 'left', 'let', 'list', 'LongNode', 'Locale', 'lock', 'long', 'map', 'MarshalJSON', 'MapEntry', 'metadata_property_handling', 'module', 'mutable', 'mutating', 'namespace', 'native', 'new', 'newtonsoft', 'nil', 'NullNode', 'NO', 'noexcept', 'nonatomic', 'none', 'None', 'nonlocal', 'nonmutating', 'NSObject', 'noSuchMethod', 'not', 'not_eq', 'NSError', 'NSString', 'NULL', 'null', 'nullptr', 'number', 'object', 'ObjectNode', 'ObjectMapper', 'ObjectReader', 'ObjectWriter', 'of', 'oneway', 'open', 'operator', 'optional', 'or', 'or_eq', 'out', 'override', 'package', 'params', 'pass', 'port', 'postfix', 'precedence', 'prefix', 'print', 'printf', 'printMembers', 'private', 'protected', 'Protocol', 'protocol', 'public', 'quicktype', 'raise', 'range', 'readonly', 'ref', 'RegExp', 'register', 'reinterpret_cast', 'repeat', 'require', 'required', 'requires', 'restrict', 'retain', 'rethrows', 'return', 'right', 'runtimeType', 's', 'sbyte', 'sealed', 'SEL', 'select', 'Self', 'Serializable', 'self', 'Sendable', 'serialize', 'SerialName', 'KSerializer', 'PrimitiveKind', 'SerialDescriptor', 'SerializationFeature', 'SerializerProvider', 'set', 'short', 'signed', 'SimpleModule', 'sizeof', 'stackalloc', 'Standards', 'static', 'static_assert', 'static_cast', 'StdDeserializer', 'StdSerializer', 'strictfp', 'string', 'struct', 'subscript', 'super', 'switch', 'symbol', 'synchronized', 'system', 'template', 'then', 'this', 'TextNode', 'thread_local', 'throw', 'throws', 'TimeOnly', 'TimeOnlyConverter', 'TimeZone', 'to_json', 'top_level', 'toString', 'to_dict', 'transient', 'True', 'true', 'try', 'Type', 'type', 'typealias', 'typedef', 'typeid', 'typename', 'typeof', 'uint', 'ulong', 'unchecked', 'undefined', 'union', 'UnmarshalJSON', 'UseSerializers', 'unowned', 'unsafe', 'unsigned', 'ushort', 'using', 'Utf8JsonReader', 'Utf8JsonWriter', 'UUID', 'var', 'virtual', 'void', 'volatile', 'wchar_t', 'weak', 'where', 'while', 'willSet', 'with', 'xor', 'xor_eq', 'YES', 'yield', 'dummy']);
+const _Enum = PropTypes.oneOf(['_', '_Bool', '_Complex', '_Imaginery', 'abstract', 'alignas', 'alignof', 'and', 'and_eq', 'any', 'Any', 'ArrayNode', 'array', 'as', 'asm', 'assert', 'associatedtype', 'associativity', 'async', 'atomic', 'atomic_cancel', 'atomic_commit', 'atomic_noexcept', 'auto', 'await', 'base', 'bitand', 'bitor', 'BOOL', 'bool', 'boolean', 'BooleanNode', 'break', 'bycopy', 'byref', 'byte', 'Calendar', 'case', 'catch', 'chan', 'char', 'char16_t', 'char32_t', 'checked', 'class', 'Class', 'clone', 'co_await', 'co_return', 'co_yield', 'Codable', 'CodingKey', 'CodingKeys', 'compl', 'concept', 'console', 'const', 'const_cast', 'constexpr', 'constructor', 'continue', 'convenience', 'convert', 'converter', 'CultureInfo', 'date', 'date_parse_handling', 'DateFormatter', 'DateOnly', 'DateOnlyConverter', 'DateTime', 'DateTimeStyles', 'debugger', 'decimal', 'declare', 'DeserializationFeature', 'decltype', 'decode_string', 'Decoder', 'DecodingError', 'def', 'default', 'defer', 'deinit', 'del', 'delegate', 'delete', 'dict', 'dictionary', 'didSet', 'do', 'double', 'DoubleNode', 'dynamic', 'dynamic_cast', 'elif', 'else', 'encode_quick_type', 'Encoder', 'enum', 'EnumValues', 'Equatable', 'equalityContract', 'event', 'except', 'exception', 'explicit', 'export', 'exposing', 'extends', 'extension', 'extern', 'fallthrough', 'false', 'False', 'fileprivate', 'final', 'finally', 'fixed', 'float', 'for', 'foreach', 'FormatException', 'friend', 'from', 'from_dict', 'from_json', 'func', 'function', 'get', 'global', 'go', 'goto', 'guard', 'Hashable', 'hashCode', 'Hasher', 'hasOwnProperty', 'id', 'if', 'IMP', 'implements', 'implicit', 'import', 'in', 'indirect', 'infix', 'init', 'inline', 'inout', 'instanceof', 'int', 'IntNode', 'interface', 'internal', 'IsoDateTimeOffsetConverter', 'iterable', 'is', 'jdec', 'jenc', 'jpipe', 'json', 'json_converter', 'json_serializer', 'json_token', 'json_writer', 'JSONAny', 'JSONCodingKey', 'JSONDecoder', 'JSONEncoder', 'JsonException', 'JsonGenerator', 'JsonNode', 'JSONNull', 'JsonParser', 'JsonReader', 'JsonTokenType', 'lambda', 'lazy', 'left', 'let', 'list', 'LocalDate', 'LongNode', 'Locale', 'lock', 'long', 'map', 'MarshalJSON', 'MapEntry', 'metadata_property_handling', 'module', 'mutable', 'mutating', 'namespace', 'native', 'new', 'newtonsoft', 'nil', 'NullNode', 'NO', 'noexcept', 'nonatomic', 'none', 'None', 'nonlocal', 'nonmutating', 'NSObject', 'noSuchMethod', 'not', 'not_eq', 'NSError', 'NSString', 'NULL', 'null', 'nullptr', 'number', 'object', 'OffsetDateTime', 'OffsetTime', 'ObjectNode', 'ObjectMapper', 'ObjectReader', 'ObjectWriter', 'of', 'oneway', 'open', 'operator', 'optional', 'or', 'or_eq', 'out', 'override', 'package', 'params', 'pass', 'port', 'postfix', 'precedence', 'prefix', 'print', 'printf', 'printMembers', 'private', 'protected', 'Protocol', 'protocol', 'public', 'quicktype', 'raise', 'range', 'readonly', 'ref', 'RegExp', 'register', 'reinterpret_cast', 'repeat', 'require', 'required', 'requires', 'restrict', 'retain', 'rethrows', 'return', 'right', 'runtimeType', 's', 'sbyte', 'sealed', 'SEL', 'select', 'Self', 'Serializable', 'self', 'Sendable', 'serialize', 'SerialName', 'KSerializer', 'PrimitiveKind', 'SerialDescriptor', 'SerializationFeature', 'SerializerProvider', 'set', 'short', 'signed', 'SimpleModule', 'sizeof', 'stackalloc', 'Standards', 'static', 'static_assert', 'static_cast', 'StdDeserializer', 'StdSerializer', 'strictfp', 'string', 'struct', 'subscript', 'super', 'switch', 'symbol', 'synchronized', 'system', 'template', 'then', 'this', 'TextNode', 'thread_local', 'throw', 'throws', 'TimeOnly', 'TimeOnlyConverter', 'TimeZone', 'to_json', 'top_level', 'toString', 'to_dict', 'transient', 'True', 'true', 'try', 'Type', 'type', 'typealias', 'typedef', 'typeid', 'typename', 'typeof', 'uint', 'ulong', 'unchecked', 'undefined', 'union', 'UnmarshalJSON', 'UseSerializers', 'unowned', 'unsafe', 'unsigned', 'ushort', 'using', 'Utf8JsonReader', 'Utf8JsonWriter', 'UUID', 'var', 'virtual', 'void', 'volatile', 'wchar_t', 'weak', 'where', 'while', 'willSet', 'with', 'xor', 'xor_eq', 'YES', 'yield', 'dummy']);
 _TopLevel = PropTypes.shape({
     "enum": PropTypes.oneOfType([_Enum, PropTypes.oneOf([null])]),
 });
diff --git a/base/schema-javascript-prop-types/test/inputs/schema/keyword-unions.schema/default/toplevel.js b/head/schema-javascript-prop-types/test/inputs/schema/keyword-unions.schema/default/toplevel.js
index c2b007d..7e1ef0d 100644
--- a/base/schema-javascript-prop-types/test/inputs/schema/keyword-unions.schema/default/toplevel.js
+++ b/head/schema-javascript-prop-types/test/inputs/schema/keyword-unions.schema/default/toplevel.js
@@ -54,6 +54,7 @@ let _JSONParser;
 let _JSONReader;
 let _JSONTokenType;
 let _KSerializer;
+let _LocalDate;
 let _Locale;
 let _LongNode;
 let _MapEntry;
@@ -69,6 +70,8 @@ let _ObjectMapper;
 let _ObjectNode;
 let _ObjectReader;
 let _ObjectWriter;
+let _OffsetDateTime;
+let _OffsetTime;
 let _PrimitiveKind;
 let _Protocol;
 let _RegExp;
@@ -449,6 +452,8 @@ _JSONTokenType = PropTypes.shape({
 });
 _KSerializer = PropTypes.shape({
 });
+_LocalDate = PropTypes.shape({
+});
 _Locale = PropTypes.shape({
 });
 _LongNode = PropTypes.shape({
@@ -479,6 +484,10 @@ _ObjectReader = PropTypes.shape({
 });
 _ObjectWriter = PropTypes.shape({
 });
+_OffsetDateTime = PropTypes.shape({
+});
+_OffsetTime = PropTypes.shape({
+});
 _PrimitiveKind = PropTypes.shape({
 });
 _Protocol = PropTypes.shape({
@@ -1260,6 +1269,7 @@ _TopLevel = PropTypes.shape({
     "left": PropTypes.oneOfType([_Left, PropTypes.number, PropTypes.oneOf([null])]),
     "let": PropTypes.oneOfType([_Let, PropTypes.number, PropTypes.oneOf([null])]),
     "list": PropTypes.oneOfType([_List, PropTypes.number, PropTypes.oneOf([null])]),
+    "LocalDate": PropTypes.oneOfType([_LocalDate, PropTypes.number, PropTypes.oneOf([null])]),
     "Locale": PropTypes.oneOfType([_Locale, PropTypes.number, PropTypes.oneOf([null])]),
     "lock": PropTypes.oneOfType([_Lock, PropTypes.number, PropTypes.oneOf([null])]),
     "long": PropTypes.oneOfType([_Long, PropTypes.number, PropTypes.oneOf([null])]),
@@ -1300,6 +1310,8 @@ _TopLevel = PropTypes.shape({
     "ObjectReader": PropTypes.oneOfType([_ObjectReader, PropTypes.number, PropTypes.oneOf([null])]),
     "ObjectWriter": PropTypes.oneOfType([_ObjectWriter, PropTypes.number, PropTypes.oneOf([null])]),
     "of": PropTypes.oneOfType([_Of, PropTypes.number, PropTypes.oneOf([null])]),
+    "OffsetDateTime": PropTypes.oneOfType([_OffsetDateTime, PropTypes.number, PropTypes.oneOf([null])]),
+    "OffsetTime": PropTypes.oneOfType([_OffsetTime, PropTypes.number, PropTypes.oneOf([null])]),
     "oneway": PropTypes.oneOfType([_Oneway, PropTypes.number, PropTypes.oneOf([null])]),
     "open": PropTypes.oneOfType([_Open, PropTypes.number, PropTypes.oneOf([null])]),
     "operator": PropTypes.oneOfType([_Operator, PropTypes.number, PropTypes.oneOf([null])]),
diff --git a/base/schema-kotlin/test/inputs/schema/date-time.schema/default/TopLevel.kt b/head/schema-kotlin/test/inputs/schema/date-time.schema/default/TopLevel.kt
index fc3404d..85aca01 100644
--- a/base/schema-kotlin/test/inputs/schema/date-time.schema/default/TopLevel.kt
+++ b/head/schema-kotlin/test/inputs/schema/date-time.schema/default/TopLevel.kt
@@ -22,6 +22,7 @@ private val klaxon = Klaxon()
     .convert(OffsetDateTime::class,           { OffsetDateTime.parse(it.string!!) },            { "\"${java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(it)}\"" })
     .convert(LocalDate::class,                { LocalDate.parse(it.string!!) },                 { "\"${java.time.format.DateTimeFormatter.ISO_LOCAL_DATE.format(it)}\"" })
     .convert(OffsetTime::class,               { OffsetTime.parse(it.string!!) },                { "\"${java.time.format.DateTimeFormatter.ISO_OFFSET_TIME.format(it)}\"" })
+    .convert(JsonObject::class,               { it.obj!! },                                     { it.toJsonString() })
     .convert(ComplexUnionArrayEnum::class,    { ComplexUnionArrayEnum.fromValue(it.string!!) }, { Klaxon().toJsonString(it.value) })
     .convert(ComplexUnionArrayElement::class, { ComplexUnionArrayElement.fromJson(it) },        { it.toJson() }, true)
     .convert(UnionArray::class,               { UnionArray.fromJson(it) },                      { it.toJson() }, true)
@@ -35,6 +36,15 @@ data class TopLevel (
     @Json(name = "date-time")
     val dateTime: OffsetDateTime,
 
+    @Json(name = "local-date-class")
+    val localDateClass: LocalDateClassClass? = null,
+
+    @Json(name = "offset-date-time-class")
+    val offsetDateTimeClass: OffsetDateTimeClassClass? = null,
+
+    @Json(name = "offset-time-class")
+    val offsetTimeClass: OffsetTimeClassClass? = null,
+
     val time: OffsetTime,
 
     @Json(name = "union-array")
@@ -80,6 +90,12 @@ enum class ComplexUnionArrayEnum(val value: String) {
     }
 }
 
+typealias LocalDateClassClass = JsonObject
+
+typealias OffsetDateTimeClassClass = JsonObject
+
+typealias OffsetTimeClassClass = JsonObject
+
 sealed class UnionArray {
     class DateTimeValue(val value: OffsetDateTime) : UnionArray()
     class DateValue(val value: LocalDate)          : UnionArray()
diff --git a/base/schema-kotlin/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt b/head/schema-kotlin/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
index e5ce303..aedfda0 100644
--- a/base/schema-kotlin/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
+++ b/head/schema-kotlin/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
@@ -210,6 +210,7 @@ enum class EnumEnum(val value: String) {
     Left("left"),
     Let("let"),
     EnumList("list"),
+    LocalDate("LocalDate"),
     LongNode("LongNode"),
     Locale("Locale"),
     Lock("lock"),
@@ -245,6 +246,8 @@ enum class EnumEnum(val value: String) {
     Nullptr("nullptr"),
     Number("number"),
     Object("object"),
+    OffsetDateTime("OffsetDateTime"),
+    OffsetTime("OffsetTime"),
     ObjectNode("ObjectNode"),
     ObjectMapper("ObjectMapper"),
     ObjectReader("ObjectReader"),
@@ -568,6 +571,7 @@ enum class EnumEnum(val value: String) {
             "left"                       -> Left
             "let"                        -> Let
             "list"                       -> EnumList
+            "LocalDate"                  -> LocalDate
             "LongNode"                   -> LongNode
             "Locale"                     -> Locale
             "lock"                       -> Lock
@@ -603,6 +607,8 @@ enum class EnumEnum(val value: String) {
             "nullptr"                    -> Nullptr
             "number"                     -> Number
             "object"                     -> Object
+            "OffsetDateTime"             -> OffsetDateTime
+            "OffsetTime"                 -> OffsetTime
             "ObjectNode"                 -> ObjectNode
             "ObjectMapper"               -> ObjectMapper
             "ObjectReader"               -> ObjectReader
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/date-time.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/date-time.schema/default/TopLevel.kt
index 19163f5..12a734e 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/date-time.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/date-time.schema/default/TopLevel.kt
@@ -50,6 +50,15 @@ data class TopLevel (
     @get:JsonProperty("date-time", required=true)@field:JsonProperty("date-time", required=true)
     val dateTime: OffsetDateTime,
 
+    @get:JsonProperty("local-date-class")@field:JsonProperty("local-date-class")
+    val localDateClass: LocalDateClassClass? = null,
+
+    @get:JsonProperty("offset-date-time-class")@field:JsonProperty("offset-date-time-class")
+    val offsetDateTimeClass: OffsetDateTimeClassClass? = null,
+
+    @get:JsonProperty("offset-time-class")@field:JsonProperty("offset-time-class")
+    val offsetTimeClass: OffsetTimeClassClass? = null,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val time: OffsetTime,
 
@@ -96,6 +105,12 @@ enum class ComplexUnionArrayEnum(val value: String) {
     }
 }
 
+typealias LocalDateClassClass = ObjectNode
+
+typealias OffsetDateTimeClassClass = ObjectNode
+
+typealias OffsetTimeClassClass = ObjectNode
+
 sealed class UnionArray {
     class DateTimeValue(val value: OffsetDateTime) : UnionArray()
     class DateValue(val value: LocalDate)          : UnionArray()
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
index 12dbeca..af8e31b 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
@@ -223,6 +223,7 @@ enum class EnumEnum(val value: String) {
     Left("left"),
     Let("let"),
     EnumList("list"),
+    LocalDate("LocalDate"),
     EnumLongNode("LongNode"),
     Locale("Locale"),
     Lock("lock"),
@@ -258,6 +259,8 @@ enum class EnumEnum(val value: String) {
     Nullptr("nullptr"),
     Number("number"),
     Object("object"),
+    OffsetDateTime("OffsetDateTime"),
+    OffsetTime("OffsetTime"),
     EnumObjectNode("ObjectNode"),
     EnumObjectMapper("ObjectMapper"),
     ObjectReader("ObjectReader"),
@@ -581,6 +584,7 @@ enum class EnumEnum(val value: String) {
             "left"                       -> Left
             "let"                        -> Let
             "list"                       -> EnumList
+            "LocalDate"                  -> LocalDate
             "LongNode"                   -> EnumLongNode
             "Locale"                     -> Locale
             "lock"                       -> Lock
@@ -616,6 +620,8 @@ enum class EnumEnum(val value: String) {
             "nullptr"                    -> Nullptr
             "number"                     -> Number
             "object"                     -> Object
+            "OffsetDateTime"             -> OffsetDateTime
+            "OffsetTime"                 -> OffsetTime
             "ObjectNode"                 -> EnumObjectNode
             "ObjectMapper"               -> EnumObjectMapper
             "ObjectReader"               -> ObjectReader
diff --git a/base/schema-kotlinx/test/inputs/schema/date-time.schema/default/TopLevel.kt b/head/schema-kotlinx/test/inputs/schema/date-time.schema/default/TopLevel.kt
index 01df8c2..09b6877 100644
--- a/base/schema-kotlinx/test/inputs/schema/date-time.schema/default/TopLevel.kt
+++ b/head/schema-kotlinx/test/inputs/schema/date-time.schema/default/TopLevel.kt
@@ -26,6 +26,15 @@ data class TopLevel (
     @SerialName("date-time")
     val dateTime: OffsetDateTime,
 
+    @SerialName("local-date-class")
+    val localDateClass: LocalDateClassClass? = null,
+
+    @SerialName("offset-date-time-class")
+    val offsetDateTimeClass: OffsetDateTimeClassClass? = null,
+
+    @SerialName("offset-time-class")
+    val offsetTimeClass: OffsetTimeClassClass? = null,
+
     val time: OffsetTime,
 
     @SerialName("union-array")
@@ -40,6 +49,15 @@ enum class ComplexUnionArrayEnum(val value: String) {
     @SerialName("bar") Bar("bar");
 }
 
+@Serializable
+class LocalDateClassClass()
+
+@Serializable
+class OffsetDateTimeClassClass()
+
+@Serializable
+class OffsetTimeClassClass()
+
 typealias UnionArray = JsonElement
 
 object OffsetDateTimeSerializer : KSerializer<OffsetDateTime> {
diff --git a/base/schema-kotlinx/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt b/head/schema-kotlinx/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
index 674f63a..cf59881 100644
--- a/base/schema-kotlinx/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
+++ b/head/schema-kotlinx/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
@@ -199,6 +199,7 @@ enum class EnumEnum(val value: String) {
     @SerialName("left") Left("left"),
     @SerialName("let") Let("let"),
     @SerialName("list") EnumList("list"),
+    @SerialName("LocalDate") LocalDate("LocalDate"),
     @SerialName("LongNode") LongNode("LongNode"),
     @SerialName("Locale") Locale("Locale"),
     @SerialName("lock") Lock("lock"),
@@ -234,6 +235,8 @@ enum class EnumEnum(val value: String) {
     @SerialName("nullptr") Nullptr("nullptr"),
     @SerialName("number") Number("number"),
     @SerialName("object") Object("object"),
+    @SerialName("OffsetDateTime") OffsetDateTime("OffsetDateTime"),
+    @SerialName("OffsetTime") OffsetTime("OffsetTime"),
     @SerialName("ObjectNode") ObjectNode("ObjectNode"),
     @SerialName("ObjectMapper") ObjectMapper("ObjectMapper"),
     @SerialName("ObjectReader") ObjectReader("ObjectReader"),
diff --git a/base/schema-objective-c/test/inputs/schema/date-time.schema/default/QTTopLevel.h b/head/schema-objective-c/test/inputs/schema/date-time.schema/default/QTTopLevel.h
index 46b0788..6631b59 100644
--- a/base/schema-objective-c/test/inputs/schema/date-time.schema/default/QTTopLevel.h
+++ b/head/schema-objective-c/test/inputs/schema/date-time.schema/default/QTTopLevel.h
@@ -7,6 +7,9 @@
 
 @class QTTopLevel;
 @class QTComplexUnionArrayEnum;
+@class QTLocalDate;
+@class QTOffsetDateTime;
+@class QTOffsetTime;
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -29,11 +32,14 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 #pragma mark - Object interfaces
 
 @interface QTTopLevel : NSObject
-@property (nonatomic, copy) NSArray<id> *complexUnionArray;
-@property (nonatomic, copy) NSString *date;
-@property (nonatomic, copy) NSString *dateTime;
-@property (nonatomic, copy) NSString *time;
-@property (nonatomic, copy) NSArray<NSString *> *unionArray;
+@property (nonatomic, copy)             NSArray<id> *complexUnionArray;
+@property (nonatomic, copy)             NSString *date;
+@property (nonatomic, copy)             NSString *dateTime;
+@property (nonatomic, nullable, strong) QTLocalDate *localDateClass;
+@property (nonatomic, nullable, strong) QTOffsetDateTime *offsetDateTimeClass;
+@property (nonatomic, nullable, strong) QTOffsetTime *offsetTimeClass;
+@property (nonatomic, copy)             NSString *time;
+@property (nonatomic, copy)             NSArray<NSString *> *unionArray;
 
 + (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;
 + (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error;
@@ -41,4 +47,13 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 - (NSData *_Nullable)toData:(NSError *_Nullable *)error;
 @end
 
+@interface QTLocalDate : NSObject
+@end
+
+@interface QTOffsetDateTime : NSObject
+@end
+
+@interface QTOffsetTime : NSObject
+@end
+
 NS_ASSUME_NONNULL_END
diff --git a/base/schema-objective-c/test/inputs/schema/date-time.schema/default/QTTopLevel.m b/head/schema-objective-c/test/inputs/schema/date-time.schema/default/QTTopLevel.m
index d7eebe6..5805028 100644
--- a/base/schema-objective-c/test/inputs/schema/date-time.schema/default/QTTopLevel.m
+++ b/head/schema-objective-c/test/inputs/schema/date-time.schema/default/QTTopLevel.m
@@ -13,6 +13,21 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTLocalDate (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@interface QTOffsetDateTime (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@interface QTOffsetTime (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @implementation QTComplexUnionArrayEnum
 + (NSDictionary<NSString *, QTComplexUnionArrayEnum *> *)values
 {
@@ -96,6 +111,9 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"complex-union-array": @"complexUnionArray",
         @"date": @"date",
         @"date-time": @"dateTime",
+        @"local-date-class": @"localDateClass",
+        @"offset-date-time-class": @"offsetDateTimeClass",
+        @"offset-time-class": @"offsetTimeClass",
         @"time": @"time",
         @"union-array": @"unionArray",
     };
@@ -126,6 +144,12 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"time"] isKindOfClass:NSString.class]) return nil;
         if (![dict[@"union-array"] isKindOfClass:NSArray.class]) return nil;
         [self setValuesForKeysWithDictionary:dict];
+        _localDateClass = [QTLocalDate fromJSONDictionary:(id)_localDateClass];
+        if (!_localDateClass && dict[@"local-date-class"] && ![dict[@"local-date-class"] isKindOfClass:NSNull.class]) return nil;
+        _offsetDateTimeClass = [QTOffsetDateTime fromJSONDictionary:(id)_offsetDateTimeClass];
+        if (!_offsetDateTimeClass && dict[@"offset-date-time-class"] && ![dict[@"offset-date-time-class"] isKindOfClass:NSNull.class]) return nil;
+        _offsetTimeClass = [QTOffsetTime fromJSONDictionary:(id)_offsetTimeClass];
+        if (!_offsetTimeClass && dict[@"offset-time-class"] && ![dict[@"offset-time-class"] isKindOfClass:NSNull.class]) return nil;
     }
     return self;
 }
@@ -154,6 +178,12 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         }
     }
 
+    [dict addEntriesFromDictionary:@{
+        @"local-date-class": NSNullify([_localDateClass isKindOfClass:NSNull.class] ? nil : [_localDateClass JSONDictionary]),
+        @"offset-date-time-class": NSNullify([_offsetDateTimeClass isKindOfClass:NSNull.class] ? nil : [_offsetDateTimeClass JSONDictionary]),
+        @"offset-time-class": NSNullify([_offsetTimeClass isKindOfClass:NSNull.class] ? nil : [_offsetTimeClass JSONDictionary]),
+    }];
+
     return dict;
 }
 
@@ -168,4 +198,121 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTLocalDate
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTLocalDate alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTLocalDate.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTLocalDate.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTLocalDate.properties.allValues];
+}
+@end
+
+@implementation QTOffsetDateTime
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTOffsetDateTime alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTOffsetDateTime.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTOffsetDateTime.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTOffsetDateTime.properties.allValues];
+}
+@end
+
+@implementation QTOffsetTime
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTOffsetTime alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTOffsetTime.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTOffsetTime.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTOffsetTime.properties.allValues];
+}
+@end
+
 NS_ASSUME_NONNULL_END
diff --git a/base/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.h b/head/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.h
index 330aaf3..7666133 100644
--- a/base/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.h
+++ b/head/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.h
@@ -197,6 +197,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)left;
 + (QTEnum *)let;
 + (QTEnum *)list;
++ (QTEnum *)localDate;
 + (QTEnum *)longNode;
 + (QTEnum *)locale;
 + (QTEnum *)lock;
@@ -232,6 +233,8 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)nullptr;
 + (QTEnum *)number;
 + (QTEnum *)object;
++ (QTEnum *)offsetDateTime;
++ (QTEnum *)offsetTime;
 + (QTEnum *)objectNode;
 + (QTEnum *)objectMapper;
 + (QTEnum *)objectReader;
diff --git a/base/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.m b/head/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.m
index 12df470..44c13e6 100644
--- a/base/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.m
+++ b/head/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.m
@@ -200,6 +200,7 @@ NS_ASSUME_NONNULL_BEGIN
         @"left": [[QTEnum alloc] initWithValue:@"left"],
         @"let": [[QTEnum alloc] initWithValue:@"let"],
         @"list": [[QTEnum alloc] initWithValue:@"list"],
+        @"LocalDate": [[QTEnum alloc] initWithValue:@"LocalDate"],
         @"LongNode": [[QTEnum alloc] initWithValue:@"LongNode"],
         @"Locale": [[QTEnum alloc] initWithValue:@"Locale"],
         @"lock": [[QTEnum alloc] initWithValue:@"lock"],
@@ -235,6 +236,8 @@ NS_ASSUME_NONNULL_BEGIN
         @"nullptr": [[QTEnum alloc] initWithValue:@"nullptr"],
         @"number": [[QTEnum alloc] initWithValue:@"number"],
         @"object": [[QTEnum alloc] initWithValue:@"object"],
+        @"OffsetDateTime": [[QTEnum alloc] initWithValue:@"OffsetDateTime"],
+        @"OffsetTime": [[QTEnum alloc] initWithValue:@"OffsetTime"],
         @"ObjectNode": [[QTEnum alloc] initWithValue:@"ObjectNode"],
         @"ObjectMapper": [[QTEnum alloc] initWithValue:@"ObjectMapper"],
         @"ObjectReader": [[QTEnum alloc] initWithValue:@"ObjectReader"],
@@ -558,6 +561,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)left { return QTEnum.values[@"left"]; }
 + (QTEnum *)let { return QTEnum.values[@"let"]; }
 + (QTEnum *)list { return QTEnum.values[@"list"]; }
++ (QTEnum *)localDate { return QTEnum.values[@"LocalDate"]; }
 + (QTEnum *)longNode { return QTEnum.values[@"LongNode"]; }
 + (QTEnum *)locale { return QTEnum.values[@"Locale"]; }
 + (QTEnum *)lock { return QTEnum.values[@"lock"]; }
@@ -593,6 +597,8 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)nullptr { return QTEnum.values[@"nullptr"]; }
 + (QTEnum *)number { return QTEnum.values[@"number"]; }
 + (QTEnum *)object { return QTEnum.values[@"object"]; }
++ (QTEnum *)offsetDateTime { return QTEnum.values[@"OffsetDateTime"]; }
++ (QTEnum *)offsetTime { return QTEnum.values[@"OffsetTime"]; }
 + (QTEnum *)objectNode { return QTEnum.values[@"ObjectNode"]; }
 + (QTEnum *)objectMapper { return QTEnum.values[@"ObjectMapper"]; }
 + (QTEnum *)objectReader { return QTEnum.values[@"ObjectReader"]; }
diff --git a/base/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.h b/head/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.h
index 100ceaa..6299d9a 100644
--- a/base/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.h
+++ b/head/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.h
@@ -160,6 +160,7 @@
 @class QTLeft;
 @class QTLet;
 @class QTList;
+@class QTLocalDate;
 @class QTLocale;
 @class QTLock;
 @class QTLongNode;
@@ -194,6 +195,8 @@
 @class QTObjectReader;
 @class QTObjectWriter;
 @class QTOf;
+@class QTOffsetDateTime;
+@class QTOffsetTime;
 @class QTOneway;
 @class QTOpen;
 @class QTOperator;
@@ -557,6 +560,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, nullable, copy)   id left;
 @property (nonatomic, nullable, copy)   id let;
 @property (nonatomic, nullable, copy)   id list;
+@property (nonatomic, nullable, copy)   id localDate;
 @property (nonatomic, nullable, copy)   id locale;
 @property (nonatomic, nullable, copy)   id lock;
 @property (nonatomic, nullable, copy)   id qtTopLevelLong;
@@ -597,6 +601,8 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, nullable, copy)   id objectReader;
 @property (nonatomic, nullable, copy)   id objectWriter;
 @property (nonatomic, nullable, copy)   id of;
+@property (nonatomic, nullable, copy)   id offsetDateTime;
+@property (nonatomic, nullable, copy)   id offsetTime;
 @property (nonatomic, nullable, copy)   id oneway;
 @property (nonatomic, nullable, copy)   id open;
 @property (nonatomic, nullable, copy)   id operator;
@@ -1197,6 +1203,9 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @interface QTList : NSObject
 @end
 
+@interface QTLocalDate : NSObject
+@end
+
 @interface QTLocale : NSObject
 @end
 
@@ -1299,6 +1308,12 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @interface QTOf : NSObject
 @end
 
+@interface QTOffsetDateTime : NSObject
+@end
+
+@interface QTOffsetTime : NSObject
+@end
+
 @interface QTOneway : NSObject
 @end
 
diff --git a/base/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.m b/head/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.m
index eca30aa..f81e01a 100644
--- a/base/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.m
+++ b/head/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.m
@@ -783,6 +783,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTLocalDate (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTLocale (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -953,6 +958,16 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTOffsetDateTime (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@interface QTOffsetTime (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTOneway (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -2008,6 +2023,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"left": @"left",
         @"let": @"let",
         @"list": @"list",
+        @"LocalDate": @"localDate",
         @"Locale": @"locale",
         @"lock": @"lock",
         @"long": @"qtTopLevelLong",
@@ -2048,6 +2064,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"ObjectReader": @"objectReader",
         @"ObjectWriter": @"objectWriter",
         @"of": @"of",
+        @"OffsetDateTime": @"offsetDateTime",
+        @"OffsetTime": @"offsetTime",
         @"oneway": @"oneway",
         @"open": @"open",
         @"operator": @"operator",
@@ -8249,6 +8267,45 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTLocalDate
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTLocalDate alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTLocalDate.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTLocalDate.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTLocalDate.properties.allValues];
+}
+@end
+
 @implementation QTLocale
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -9575,6 +9632,84 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTOffsetDateTime
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTOffsetDateTime alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTOffsetDateTime.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTOffsetDateTime.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTOffsetDateTime.properties.allValues];
+}
+@end
+
+@implementation QTOffsetTime
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTOffsetTime alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTOffsetTime.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTOffsetTime.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTOffsetTime.properties.allValues];
+}
+@end
+
 @implementation QTOneway
 + (NSDictionary<NSString *, NSString *> *)properties
 {
diff --git a/base/schema-php/test/inputs/schema/date-time.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/date-time.schema/default/TopLevel.php
index fa72b0b..5b1252b 100644
--- a/base/schema-php/test/inputs/schema/date-time.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/date-time.schema/default/TopLevel.php
@@ -7,6 +7,9 @@ class TopLevel {
     private array $complexUnionArray; // json:complex-union-array Required
     private string $date; // json:date Required
     private DateTime $dateTime; // json:date-time Required
+    private ?LocalDate $localDateClass; // json:local-date-class Optional
+    private ?OffsetDateTime $offsetDateTimeClass; // json:offset-date-time-class Optional
+    private ?OffsetTime $offsetTimeClass; // json:offset-time-class Optional
     private string $time; // json:time Required
     private array $unionArray; // json:union-array Required
 
@@ -14,13 +17,19 @@ class TopLevel {
      * @param array $complexUnionArray
      * @param string $date
      * @param DateTime $dateTime
+     * @param LocalDate|null $localDateClass
+     * @param OffsetDateTime|null $offsetDateTimeClass
+     * @param OffsetTime|null $offsetTimeClass
      * @param string $time
      * @param array $unionArray
      */
-    public function __construct(array $complexUnionArray, string $date, DateTime $dateTime, string $time, array $unionArray) {
+    public function __construct(array $complexUnionArray, string $date, DateTime $dateTime, ?LocalDate $localDateClass, ?OffsetDateTime $offsetDateTimeClass, ?OffsetTime $offsetTimeClass, string $time, array $unionArray) {
         $this->complexUnionArray = $complexUnionArray;
         $this->date = $date;
         $this->dateTime = $dateTime;
+        $this->localDateClass = $localDateClass;
+        $this->offsetDateTimeClass = $offsetDateTimeClass;
+        $this->offsetTimeClass = $offsetTimeClass;
         $this->time = $time;
         $this->unionArray = $unionArray;
     }
@@ -217,6 +226,180 @@ class TopLevel {
         return DateTime::createFromFormat(DateTimeInterface::ISO8601, '2020-12-30T12:30:30+00:00');
     }
 
+    /**
+     * @param ?stdClass $value
+     * @throws Exception
+     * @return ?LocalDate
+     */
+    public static function fromLocalDateClass(?stdClass $value): ?LocalDate {
+        if (!is_null($value)) {
+            return LocalDate::from($value); /*class*/
+        } else {
+            return  null;
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return ?stdClass
+     */
+    public function toLocalDateClass(): ?stdClass {
+        if (TopLevel::validateLocalDateClass($this->localDateClass))  {
+            if (!is_null($this->localDateClass)) {
+                return $this->localDateClass->to(); /*class*/
+            } else {
+                return  null;
+            }
+        }
+        throw new Exception('never get to this TopLevel::localDateClass');
+    }
+
+    /**
+     * @param LocalDate|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateLocalDateClass(?LocalDate $value): bool {
+        if (!is_null($value)) {
+            $value->validate();
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return ?LocalDate
+     */
+    public function getLocalDateClass(): ?LocalDate {
+        if (TopLevel::validateLocalDateClass($this->localDateClass))  {
+            return $this->localDateClass;
+        }
+        throw new Exception('never get to getLocalDateClass TopLevel::localDateClass');
+    }
+
+    /**
+     * @return ?LocalDate
+     */
+    public static function sampleLocalDateClass(): ?LocalDate {
+        return LocalDate::sample(); /*34:localDateClass*/
+    }
+
+    /**
+     * @param ?stdClass $value
+     * @throws Exception
+     * @return ?OffsetDateTime
+     */
+    public static function fromOffsetDateTimeClass(?stdClass $value): ?OffsetDateTime {
+        if (!is_null($value)) {
+            return OffsetDateTime::from($value); /*class*/
+        } else {
+            return  null;
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return ?stdClass
+     */
+    public function toOffsetDateTimeClass(): ?stdClass {
+        if (TopLevel::validateOffsetDateTimeClass($this->offsetDateTimeClass))  {
+            if (!is_null($this->offsetDateTimeClass)) {
+                return $this->offsetDateTimeClass->to(); /*class*/
+            } else {
+                return  null;
+            }
+        }
+        throw new Exception('never get to this TopLevel::offsetDateTimeClass');
+    }
+
+    /**
+     * @param OffsetDateTime|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateOffsetDateTimeClass(?OffsetDateTime $value): bool {
+        if (!is_null($value)) {
+            $value->validate();
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return ?OffsetDateTime
+     */
+    public function getOffsetDateTimeClass(): ?OffsetDateTime {
+        if (TopLevel::validateOffsetDateTimeClass($this->offsetDateTimeClass))  {
+            return $this->offsetDateTimeClass;
+        }
+        throw new Exception('never get to getOffsetDateTimeClass TopLevel::offsetDateTimeClass');
+    }
+
+    /**
+     * @return ?OffsetDateTime
+     */
+    public static function sampleOffsetDateTimeClass(): ?OffsetDateTime {
+        return OffsetDateTime::sample(); /*35:offsetDateTimeClass*/
+    }
+
+    /**
+     * @param ?stdClass $value
+     * @throws Exception
+     * @return ?OffsetTime
+     */
+    public static function fromOffsetTimeClass(?stdClass $value): ?OffsetTime {
+        if (!is_null($value)) {
+            return OffsetTime::from($value); /*class*/
+        } else {
+            return  null;
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return ?stdClass
+     */
+    public function toOffsetTimeClass(): ?stdClass {
+        if (TopLevel::validateOffsetTimeClass($this->offsetTimeClass))  {
+            if (!is_null($this->offsetTimeClass)) {
+                return $this->offsetTimeClass->to(); /*class*/
+            } else {
+                return  null;
+            }
+        }
+        throw new Exception('never get to this TopLevel::offsetTimeClass');
+    }
+
+    /**
+     * @param OffsetTime|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateOffsetTimeClass(?OffsetTime $value): bool {
+        if (!is_null($value)) {
+            $value->validate();
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return ?OffsetTime
+     */
+    public function getOffsetTimeClass(): ?OffsetTime {
+        if (TopLevel::validateOffsetTimeClass($this->offsetTimeClass))  {
+            return $this->offsetTimeClass;
+        }
+        throw new Exception('never get to getOffsetTimeClass TopLevel::offsetTimeClass');
+    }
+
+    /**
+     * @return ?OffsetTime
+     */
+    public static function sampleOffsetTimeClass(): ?OffsetTime {
+        return OffsetTime::sample(); /*36:offsetTimeClass*/
+    }
+
     /**
      * @param string $value
      * @throws Exception
@@ -261,7 +444,7 @@ class TopLevel {
      * @return string
      */
     public static function sampleTime(): string {
-        return 'TopLevel::time::34'; /*34:time*/
+        return 'TopLevel::time::37'; /*37:time*/
     }
 
     /**
@@ -321,8 +504,8 @@ class TopLevel {
      */
     public static function sampleUnionArray(): array {
         return  array(
-            'TopLevel::::35' /*35:*/
-        ); /* 35:unionArray*/
+            'TopLevel::::38' /*38:*/
+        ); /* 38:unionArray*/
     }
 
     /**
@@ -333,6 +516,9 @@ class TopLevel {
         return TopLevel::validateComplexUnionArray($this->complexUnionArray)
         || TopLevel::validateDate($this->date)
         || TopLevel::validateDateTime($this->dateTime)
+        || TopLevel::validateLocalDateClass($this->localDateClass)
+        || TopLevel::validateOffsetDateTimeClass($this->offsetDateTimeClass)
+        || TopLevel::validateOffsetTimeClass($this->offsetTimeClass)
         || TopLevel::validateTime($this->time)
         || TopLevel::validateUnionArray($this->unionArray);
     }
@@ -346,6 +532,9 @@ class TopLevel {
         $out->{'complex-union-array'} = $this->toComplexUnionArray();
         $out->{'date'} = $this->toDate();
         $out->{'date-time'} = $this->toDateTime();
+        $out->{'local-date-class'} = $this->toLocalDateClass();
+        $out->{'offset-date-time-class'} = $this->toOffsetDateTimeClass();
+        $out->{'offset-time-class'} = $this->toOffsetTimeClass();
         $out->{'time'} = $this->toTime();
         $out->{'union-array'} = $this->toUnionArray();
         return $out;
@@ -376,6 +565,9 @@ class TopLevel {
          TopLevel::fromComplexUnionArray($obj->{'complex-union-array'})
         ,TopLevel::fromDate($obj->{'date'})
         ,TopLevel::fromDateTime($obj->{'date-time'})
+        ,TopLevel::fromLocalDateClass($obj->{'local-date-class'})
+        ,TopLevel::fromOffsetDateTimeClass($obj->{'offset-date-time-class'})
+        ,TopLevel::fromOffsetTimeClass($obj->{'offset-time-class'})
         ,TopLevel::fromTime($obj->{'time'})
         ,TopLevel::fromUnionArray($obj->{'union-array'})
         );
@@ -389,6 +581,9 @@ class TopLevel {
          TopLevel::sampleComplexUnionArray()
         ,TopLevel::sampleDate()
         ,TopLevel::sampleDateTime()
+        ,TopLevel::sampleLocalDateClass()
+        ,TopLevel::sampleOffsetDateTimeClass()
+        ,TopLevel::sampleOffsetTimeClass()
         ,TopLevel::sampleTime()
         ,TopLevel::sampleUnionArray()
         );
@@ -443,3 +638,138 @@ class ComplexUnionArray {
     }
 }
 ComplexUnionArray::init();
+
+// This is an autogenerated file:LocalDate
+
+class LocalDate {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return LocalDate
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): LocalDate {
+        return new LocalDate(
+        );
+    }
+
+    /**
+     * @return LocalDate
+     */
+    public static function sample(): LocalDate {
+        return new LocalDate(
+        );
+    }
+}
+
+// This is an autogenerated file:OffsetDateTime
+
+class OffsetDateTime {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return OffsetDateTime
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): OffsetDateTime {
+        return new OffsetDateTime(
+        );
+    }
+
+    /**
+     * @return OffsetDateTime
+     */
+    public static function sample(): OffsetDateTime {
+        return new OffsetDateTime(
+        );
+    }
+}
+
+// This is an autogenerated file:OffsetTime
+
+class OffsetTime {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return OffsetTime
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): OffsetTime {
+        return new OffsetTime(
+        );
+    }
+
+    /**
+     * @return OffsetTime
+     */
+    public static function sample(): OffsetTime {
+        return new OffsetTime(
+        );
+    }
+}
diff --git a/base/schema-php/test/inputs/schema/keyword-enum.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/keyword-enum.schema/default/TopLevel.php
index 0ffb19a..26b4d49 100644
--- a/base/schema-php/test/inputs/schema/keyword-enum.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/keyword-enum.schema/default/TopLevel.php
@@ -295,6 +295,7 @@ class EnumEnum {
     public static EnumEnum $LEFT;
     public static EnumEnum $LET;
     public static EnumEnum $LIST;
+    public static EnumEnum $LOCAL_DATE;
     public static EnumEnum $LONG_NODE;
     public static EnumEnum $LOCALE;
     public static EnumEnum $LOCK;
@@ -330,6 +331,8 @@ class EnumEnum {
     public static EnumEnum $NULLPTR;
     public static EnumEnum $NUMBER;
     public static EnumEnum $OBJECT;
+    public static EnumEnum $OFFSET_DATE_TIME;
+    public static EnumEnum $OFFSET_TIME;
     public static EnumEnum $OBJECT_NODE;
     public static EnumEnum $OBJECT_MAPPER;
     public static EnumEnum $OBJECT_READER;
@@ -651,6 +654,7 @@ class EnumEnum {
         EnumEnum::$LEFT = new EnumEnum('left');
         EnumEnum::$LET = new EnumEnum('let');
         EnumEnum::$LIST = new EnumEnum('list');
+        EnumEnum::$LOCAL_DATE = new EnumEnum('LocalDate');
         EnumEnum::$LONG_NODE = new EnumEnum('LongNode');
         EnumEnum::$LOCALE = new EnumEnum('Locale');
         EnumEnum::$LOCK = new EnumEnum('lock');
@@ -686,6 +690,8 @@ class EnumEnum {
         EnumEnum::$NULLPTR = new EnumEnum('nullptr');
         EnumEnum::$NUMBER = new EnumEnum('number');
         EnumEnum::$OBJECT = new EnumEnum('object');
+        EnumEnum::$OFFSET_DATE_TIME = new EnumEnum('OffsetDateTime');
+        EnumEnum::$OFFSET_TIME = new EnumEnum('OffsetTime');
         EnumEnum::$OBJECT_NODE = new EnumEnum('ObjectNode');
         EnumEnum::$OBJECT_MAPPER = new EnumEnum('ObjectMapper');
         EnumEnum::$OBJECT_READER = new EnumEnum('ObjectReader');
@@ -1019,6 +1025,7 @@ class EnumEnum {
             case EnumEnum::$LEFT->enum: return 'left';
             case EnumEnum::$LET->enum: return 'let';
             case EnumEnum::$LIST->enum: return 'list';
+            case EnumEnum::$LOCAL_DATE->enum: return 'LocalDate';
             case EnumEnum::$LONG_NODE->enum: return 'LongNode';
             case EnumEnum::$LOCALE->enum: return 'Locale';
             case EnumEnum::$LOCK->enum: return 'lock';
@@ -1054,6 +1061,8 @@ class EnumEnum {
             case EnumEnum::$NULLPTR->enum: return 'nullptr';
             case EnumEnum::$NUMBER->enum: return 'number';
             case EnumEnum::$OBJECT->enum: return 'object';
+            case EnumEnum::$OFFSET_DATE_TIME->enum: return 'OffsetDateTime';
+            case EnumEnum::$OFFSET_TIME->enum: return 'OffsetTime';
             case EnumEnum::$OBJECT_NODE->enum: return 'ObjectNode';
             case EnumEnum::$OBJECT_MAPPER->enum: return 'ObjectMapper';
             case EnumEnum::$OBJECT_READER->enum: return 'ObjectReader';
@@ -1385,6 +1394,7 @@ class EnumEnum {
             case 'left': return EnumEnum::$LEFT;
             case 'let': return EnumEnum::$LET;
             case 'list': return EnumEnum::$LIST;
+            case 'LocalDate': return EnumEnum::$LOCAL_DATE;
             case 'LongNode': return EnumEnum::$LONG_NODE;
             case 'Locale': return EnumEnum::$LOCALE;
             case 'lock': return EnumEnum::$LOCK;
@@ -1420,6 +1430,8 @@ class EnumEnum {
             case 'nullptr': return EnumEnum::$NULLPTR;
             case 'number': return EnumEnum::$NUMBER;
             case 'object': return EnumEnum::$OBJECT;
+            case 'OffsetDateTime': return EnumEnum::$OFFSET_DATE_TIME;
+            case 'OffsetTime': return EnumEnum::$OFFSET_TIME;
             case 'ObjectNode': return EnumEnum::$OBJECT_NODE;
             case 'ObjectMapper': return EnumEnum::$OBJECT_MAPPER;
             case 'ObjectReader': return EnumEnum::$OBJECT_READER;
diff --git a/base/schema-php/test/inputs/schema/keyword-unions.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/keyword-unions.schema/default/TopLevel.php
index 867ff98..59344ec 100644
--- a/base/schema-php/test/inputs/schema/keyword-unions.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/keyword-unions.schema/default/TopLevel.php
@@ -188,6 +188,7 @@ class TopLevel {
     private Left|float|null $left; // json:left Optional
     private Let|float|null $let; // json:let Optional
     private ListClass|float|null $list; // json:list Optional
+    private LocalDate|float|null $localDate; // json:LocalDate Optional
     private LocaleClass|float|null $locale; // json:Locale Optional
     private Lock|float|null $lock; // json:lock Optional
     private Long|float|null $long; // json:long Optional
@@ -228,6 +229,8 @@ class TopLevel {
     private ObjectReader|float|null $objectReader; // json:ObjectReader Optional
     private ObjectWriter|float|null $objectWriter; // json:ObjectWriter Optional
     private Of|float|null $of; // json:of Optional
+    private OffsetDateTime|float|null $offsetDateTime; // json:OffsetDateTime Optional
+    private OffsetTime|float|null $offsetTime; // json:OffsetTime Optional
     private Oneway|float|null $oneway; // json:oneway Optional
     private Open|float|null $open; // json:open Optional
     private Operator|float|null $operator; // json:operator Optional
@@ -545,6 +548,7 @@ class TopLevel {
      * @param Left|float|null $left
      * @param Let|float|null $let
      * @param ListClass|float|null $list
+     * @param LocalDate|float|null $localDate
      * @param LocaleClass|float|null $locale
      * @param Lock|float|null $lock
      * @param Long|float|null $long
@@ -585,6 +589,8 @@ class TopLevel {
      * @param ObjectReader|float|null $objectReader
      * @param ObjectWriter|float|null $objectWriter
      * @param Of|float|null $of
+     * @param OffsetDateTime|float|null $offsetDateTime
+     * @param OffsetTime|float|null $offsetTime
      * @param Oneway|float|null $oneway
      * @param Open|float|null $open
      * @param Operator|float|null $operator
@@ -717,7 +723,7 @@ class TopLevel {
      * @param Yes|float|null $yes
      * @param YieldClass|float|null $yield
      */
-    public function __construct(Union|float|null $empty, UnionBoolBool|float|null $topLevelBool, Complex|float|null $complex, Imaginery|float|null $imaginery, AbstractClass|float|null $abstract, Alignas|float|null $alignas, Alignof|float|null $alignof, AndClass|float|null $and, AndEq|float|null $andEq, AnyClass|float|null $topLevelAny, Any|float|null $any, ArrayClass|float|null $array, ArrayNode|float|null $arrayNode, AsClass|float|null $as, ASM|float|null $asm, Assert|float|null $assert, Associatedtype|float|null $associatedtype, Associativity|float|null $associativity, Async|float|null $async, Atomic|float|null $atomic, AtomicCancel|float|null $atomicCancel, AtomicCommit|float|null $atomicCommit, AtomicNoexcept|float|null $atomicNoexcept, Auto|float|null $auto, Await|float|null $await, Base|float|null $base, Bitand|float|null $bitand, Bitor|float|null $bitor, BOOLClass|float|null $bool, UnionBoolBoolClass|float|null $purpleBool, Boolean|float|null $boolean, BooleanNode|float|null $booleanNode, BreakClass|float|null $break, Bycopy|float|null $bycopy, Byref|float|null $byref, Byte|float|null $byte, Calendar|float|null $calendar, CaseClass|float|null $case, CatchClass|float|null $catch, Chan|float|null $chan, Char|float|null $char, Char16T|float|null $char16T, Char32T|float|null $char32T, Checked|float|null $checked, UnionClassClass|float|null $topLevelClass, ClassClass|float|null $class, CloneClass|float|null $clone, CoAwait|float|null $coAwait, CoReturn|float|null $coReturn, CoYield|float|null $coYield, Codable|float|null $codable, CodingKey|float|null $codingKey, CodingKeys|float|null $codingKeys, Compl|float|null $compl, Concept|float|null $concept, Console|float|null $console, ConstClass|float|null $const, ConstCast|float|null $constCast, Constexpr|float|null $constexpr, Constructor|float|null $constructor, ContinueClass|float|null $continue, Convenience|float|null $convenience, Convert|float|null $convert, ConverterClass|float|null $converter, CultureInfo|float|null $cultureInfo, Date|float|null $date, DateParseHandling|float|null $dateParseHandling, DateFormatter|float|null $dateFormatter, DateOnly|float|null $dateOnly, DateOnlyConverter|float|null $dateOnlyConverter, DateTimeClass|float|null $dateTime, DateTimeStyles|float|null $dateTimeStyles, Debugger|float|null $debugger, Decimal|float|null $decimal, DeclareClass|float|null $declare, Decltype|float|null $decltype, DecodeString|float|null $decodeString, Decoder|float|null $decoder, DecodingError|float|null $decodingError, Def|float|null $def, DefaultClass|float|null $default, Defer|float|null $defer, Deinit|float|null $deinit, Del|float|null $del, Delegate|float|null $delegate, Delete|float|null $delete, DeserializationFeature|float|null $deserializationFeature, Dict|float|null $dict, Dictionary|float|null $dictionary, DidSet|float|null $didSet, DoClass|float|null $do, Double|float|null $double, DoubleNode|float|null $doubleNode, ?float $dummy, Dynamic|float|null $dynamic, DynamicCast|float|null $dynamicCast, Elif|float|null $elif, ElseClass|float|null $else, EncodeQuickType|float|null $encodeQuickType, Encoder|float|null $encoder, EnumClass|float|null $enum, EnumValues|float|null $enumValues, EqualityContract|float|null $equalityContract, Equatable|float|null $equatable, Event|float|null $event, Except|float|null $except, ExceptionClass|float|null $exception, Explicit|float|null $explicit, Export|float|null $export, Exposing|float|null $exposing, ExtendsClass|float|null $extends, Extension|float|null $extension, Extern|float|null $extern, Fallthrough|float|null $fallthrough, UnionFalseFalse|float|null $topLevelFalse, FalseClass|float|null $false, Fileprivate|float|null $fileprivate, FinalClass|float|null $final, FinallyClass|float|null $finally, Fixed|float|null $fixed, FloatClass|float|null $float, ForClass|float|null $for, ForeachClass|float|null $foreach, FormatException|float|null $formatException, Friend|float|null $friend, From|float|null $from, FromDict|float|null $fromDict, FromJSON|float|null $fromJSON, Func|float|null $func, FunctionClass|float|null $function, Get|float|null $get, GlobalClass|float|null $global, Go|float|null $go, GotoClass|float|null $goto, Guard|float|null $guard, Hashable|float|null $hashable, HashCode|float|null $hashCode, Hasher|float|null $hasher, HasOwnProperty|float|null $hasOwnProperty, ID|float|null $id, IfClass|float|null $if, Imp|float|null $imp, ImplementsClass|float|null $implements, Implicit|float|null $implicit, Import|float|null $import, In|float|null $in, Indirect|float|null $indirect, Infix|float|null $infix, Init|float|null $init, Inline|float|null $inline, Inout|float|null $inout, InstanceofClass|float|null $instanceof, IntClass|float|null $int, InterfaceClass|float|null $interface, Internal|float|null $internal, IntNode|float|null $intNode, Is|float|null $is, ISODateTimeOffsetConverter|float|null $isoDateTimeOffsetConverter, IterableClass|float|null $iterable, Jdec|float|null $jdec, Jenc|float|null $jenc, Jpipe|float|null $jpipe, JSON|float|null $json, JSONConverter|float|null $jsonConverter, JSONSerializer|float|null $jsonSerializer, JSONToken|float|null $jsonToken, JSONWriter|float|null $jsonWriter, JSONAny|float|null $jsonAny, JSONCodingKey|float|null $jsonCodingKey, JSONDecoder|float|null $jsonDecoder, JSONEncoder|float|null $jsonEncoder, JSONExceptionClass|float|null $jsonException, JSONGenerator|float|null $jsonGenerator, JSONNode|float|null $jsonNode, JSONNull|float|null $jsonNull, JSONParser|float|null $jsonParser, JSONReader|float|null $jsonReader, JSONTokenType|float|null $jsonTokenType, KSerializer|float|null $kSerializer, Lambda|float|null $lambda, Lazy|float|null $lazy, Left|float|null $left, Let|float|null $let, ListClass|float|null $list, LocaleClass|float|null $locale, Lock|float|null $lock, Long|float|null $long, LongNode|float|null $longNode, Map|float|null $map, MapEntry|float|null $mapEntry, MarshalJSON|float|null $marshalJSON, MetadataPropertyHandling|float|null $metadataPropertyHandling, Module|float|null $module, Mutable|float|null $mutable, Mutating|float|null $mutating, NamespaceClass|float|null $namespace, Native|float|null $native, NewClass|float|null $new, Newtonsoft|float|null $newtonsoft, Nil|float|null $nil, No|float|null $no, Noexcept|float|null $noexcept, Nonatomic|float|null $nonatomic, NoneClass|float|null $topLevelNone, None|float|null $none, Nonlocal|float|null $nonlocal, Nonmutating|float|null $nonmutating, NoSuchMethod|float|null $noSuchMethod, Not|float|null $not, NotEq|float|null $notEq, NSError|float|null $nsError, NSObject|float|null $nsObject, NSString|float|null $nsString, NULLClass|float|null $null, UnionNullNull|float|null $topLevelNull, NullNode|float|null $nullNode, Nullptr|float|null $nullptr, Number|float|null $number, ObjectClass|float|null $object, ObjectMapper|float|null $objectMapper, ObjectNode|float|null $objectNode, ObjectReader|float|null $objectReader, ObjectWriter|float|null $objectWriter, Of|float|null $of, Oneway|float|null $oneway, Open|float|null $open, Operator|float|null $operator, Optional|float|null $optional, OrClass|float|null $or, OrEq|float|null $orEq, Out|float|null $out, OverrideClass|float|null $override, Package|float|null $package, Params|float|null $params, Pass|float|null $pass, Port|float|null $port, Postfix|float|null $postfix, Precedence|float|null $precedence, Prefix|float|null $prefix, PrimitiveKind|float|null $primitiveKind, PrintClass|float|null $print, Printf|float|null $printf, PrintMembers|float|null $printMembers, PrivateClass|float|null $private, ProtectedClass|float|null $protected, Protocol|float|null $protocol, ProtocolClass|float|null $topLevelProtocol, PublicClass|float|null $public, Quicktype|float|null $quicktype, Raise|float|null $raise, Range|float|null $range, ReadonlyClass|float|null $readonly, Ref|float|null $ref, RegExp|float|null $regExp, Register|float|null $register, ReinterpretCast|float|null $reinterpretCast, Repeat|float|null $repeat, RequireClass|float|null $require, Required|float|null $required, Requires|float|null $requires, Restrict|float|null $restrict, Retain|float|null $retain, Rethrows|float|null $rethrows, ReturnClass|float|null $return, Right|float|null $right, RuntimeType|float|null $runtimeType, S|float|null $s, Sbyte|float|null $sbyte, Sealed|float|null $sealed, Sel|float|null $sel, Select|float|null $select, SelfClass|float|null $self, UnionSelfSelf|float|null $topLevelSelf, Sendable|float|null $sendable, SerialDescriptor|float|null $serialDescriptor, SerializableClass|float|null $serializable, SerializationFeature|float|null $serializationFeature, Serialize|float|null $serialize, SerializerProvider|float|null $serializerProvider, SerialName|float|null $serialName, Set|float|null $set, Short|float|null $short, Signed|float|null $signed, SimpleModule|float|null $simpleModule, Sizeof|float|null $sizeof, Stackalloc|float|null $stackalloc, Standards|float|null $standards, StaticClass|float|null $static, StaticAssert|float|null $staticAssert, StaticCast|float|null $staticCast, StdDeserializer|float|null $stdDeserializer, StdSerializer|float|null $stdSerializer, Strictfp|float|null $strictfp, StringClass|float|null $string, Struct|float|null $struct, Subscript|float|null $subscript, Super|float|null $super, SwitchClass|float|null $switch, Symbol|float|null $symbol, Synchronized|float|null $synchronized, System|float|null $system, Template|float|null $template, TextNode|float|null $textNode, Then|float|null $then, This|float|null $topLevelThis, ThreadLocal|float|null $threadLocal, ThrowClass|float|null $throw, Throws|float|null $throws, TimeOnly|float|null $timeOnly, TimeOnlyConverter|float|null $timeOnlyConverter, TimeZone|float|null $timeZone, ToDict|float|null $toDict, ToJSON|float|null $toJSON, TopLevelClass|float|null $topLevel, ToString|float|null $toString, Transient|float|null $transient, TrueClass|float|null $true, UnionTrueTrue|float|null $topLevelTrue, TryClass|float|null $try, Type|float|null $type, TypeClass|float|null $topLevelType, Typealias|float|null $typealias, Typedef|float|null $typedef, Typeid|float|null $typeid, Typename|float|null $typename, Typeof|float|null $typeof, Uint|float|null $uint, Ulong|float|null $ulong, Unchecked|float|null $unchecked, Undefined|float|null $undefined, UnionClass|float|null $union, UnmarshalJSON|float|null $unmarshalJSON, Unowned|float|null $unowned, Unsafe|float|null $unsafe, Unsigned|float|null $unsigned, UseSerializers|float|null $useSerializers, Ushort|float|null $ushort, Using|float|null $using, Utf8JSONReader|float|null $utf8JSONReader, Utf8JSONWriter|float|null $utf8JSONWriter, UUID|float|null $uuid, VarClass|float|null $var, Virtual|float|null $virtual, VoidClass|float|null $void, Volatile|float|null $volatile, WcharT|float|null $wcharT, Weak|float|null $weak, Where|float|null $where, WhileClass|float|null $while, WillSet|float|null $willSet, With|float|null $with, XorClass|float|null $xor, XorEq|float|null $xorEq, Yes|float|null $yes, YieldClass|float|null $yield) {
+    public function __construct(Union|float|null $empty, UnionBoolBool|float|null $topLevelBool, Complex|float|null $complex, Imaginery|float|null $imaginery, AbstractClass|float|null $abstract, Alignas|float|null $alignas, Alignof|float|null $alignof, AndClass|float|null $and, AndEq|float|null $andEq, AnyClass|float|null $topLevelAny, Any|float|null $any, ArrayClass|float|null $array, ArrayNode|float|null $arrayNode, AsClass|float|null $as, ASM|float|null $asm, Assert|float|null $assert, Associatedtype|float|null $associatedtype, Associativity|float|null $associativity, Async|float|null $async, Atomic|float|null $atomic, AtomicCancel|float|null $atomicCancel, AtomicCommit|float|null $atomicCommit, AtomicNoexcept|float|null $atomicNoexcept, Auto|float|null $auto, Await|float|null $await, Base|float|null $base, Bitand|float|null $bitand, Bitor|float|null $bitor, BOOLClass|float|null $bool, UnionBoolBoolClass|float|null $purpleBool, Boolean|float|null $boolean, BooleanNode|float|null $booleanNode, BreakClass|float|null $break, Bycopy|float|null $bycopy, Byref|float|null $byref, Byte|float|null $byte, Calendar|float|null $calendar, CaseClass|float|null $case, CatchClass|float|null $catch, Chan|float|null $chan, Char|float|null $char, Char16T|float|null $char16T, Char32T|float|null $char32T, Checked|float|null $checked, UnionClassClass|float|null $topLevelClass, ClassClass|float|null $class, CloneClass|float|null $clone, CoAwait|float|null $coAwait, CoReturn|float|null $coReturn, CoYield|float|null $coYield, Codable|float|null $codable, CodingKey|float|null $codingKey, CodingKeys|float|null $codingKeys, Compl|float|null $compl, Concept|float|null $concept, Console|float|null $console, ConstClass|float|null $const, ConstCast|float|null $constCast, Constexpr|float|null $constexpr, Constructor|float|null $constructor, ContinueClass|float|null $continue, Convenience|float|null $convenience, Convert|float|null $convert, ConverterClass|float|null $converter, CultureInfo|float|null $cultureInfo, Date|float|null $date, DateParseHandling|float|null $dateParseHandling, DateFormatter|float|null $dateFormatter, DateOnly|float|null $dateOnly, DateOnlyConverter|float|null $dateOnlyConverter, DateTimeClass|float|null $dateTime, DateTimeStyles|float|null $dateTimeStyles, Debugger|float|null $debugger, Decimal|float|null $decimal, DeclareClass|float|null $declare, Decltype|float|null $decltype, DecodeString|float|null $decodeString, Decoder|float|null $decoder, DecodingError|float|null $decodingError, Def|float|null $def, DefaultClass|float|null $default, Defer|float|null $defer, Deinit|float|null $deinit, Del|float|null $del, Delegate|float|null $delegate, Delete|float|null $delete, DeserializationFeature|float|null $deserializationFeature, Dict|float|null $dict, Dictionary|float|null $dictionary, DidSet|float|null $didSet, DoClass|float|null $do, Double|float|null $double, DoubleNode|float|null $doubleNode, ?float $dummy, Dynamic|float|null $dynamic, DynamicCast|float|null $dynamicCast, Elif|float|null $elif, ElseClass|float|null $else, EncodeQuickType|float|null $encodeQuickType, Encoder|float|null $encoder, EnumClass|float|null $enum, EnumValues|float|null $enumValues, EqualityContract|float|null $equalityContract, Equatable|float|null $equatable, Event|float|null $event, Except|float|null $except, ExceptionClass|float|null $exception, Explicit|float|null $explicit, Export|float|null $export, Exposing|float|null $exposing, ExtendsClass|float|null $extends, Extension|float|null $extension, Extern|float|null $extern, Fallthrough|float|null $fallthrough, UnionFalseFalse|float|null $topLevelFalse, FalseClass|float|null $false, Fileprivate|float|null $fileprivate, FinalClass|float|null $final, FinallyClass|float|null $finally, Fixed|float|null $fixed, FloatClass|float|null $float, ForClass|float|null $for, ForeachClass|float|null $foreach, FormatException|float|null $formatException, Friend|float|null $friend, From|float|null $from, FromDict|float|null $fromDict, FromJSON|float|null $fromJSON, Func|float|null $func, FunctionClass|float|null $function, Get|float|null $get, GlobalClass|float|null $global, Go|float|null $go, GotoClass|float|null $goto, Guard|float|null $guard, Hashable|float|null $hashable, HashCode|float|null $hashCode, Hasher|float|null $hasher, HasOwnProperty|float|null $hasOwnProperty, ID|float|null $id, IfClass|float|null $if, Imp|float|null $imp, ImplementsClass|float|null $implements, Implicit|float|null $implicit, Import|float|null $import, In|float|null $in, Indirect|float|null $indirect, Infix|float|null $infix, Init|float|null $init, Inline|float|null $inline, Inout|float|null $inout, InstanceofClass|float|null $instanceof, IntClass|float|null $int, InterfaceClass|float|null $interface, Internal|float|null $internal, IntNode|float|null $intNode, Is|float|null $is, ISODateTimeOffsetConverter|float|null $isoDateTimeOffsetConverter, IterableClass|float|null $iterable, Jdec|float|null $jdec, Jenc|float|null $jenc, Jpipe|float|null $jpipe, JSON|float|null $json, JSONConverter|float|null $jsonConverter, JSONSerializer|float|null $jsonSerializer, JSONToken|float|null $jsonToken, JSONWriter|float|null $jsonWriter, JSONAny|float|null $jsonAny, JSONCodingKey|float|null $jsonCodingKey, JSONDecoder|float|null $jsonDecoder, JSONEncoder|float|null $jsonEncoder, JSONExceptionClass|float|null $jsonException, JSONGenerator|float|null $jsonGenerator, JSONNode|float|null $jsonNode, JSONNull|float|null $jsonNull, JSONParser|float|null $jsonParser, JSONReader|float|null $jsonReader, JSONTokenType|float|null $jsonTokenType, KSerializer|float|null $kSerializer, Lambda|float|null $lambda, Lazy|float|null $lazy, Left|float|null $left, Let|float|null $let, ListClass|float|null $list, LocalDate|float|null $localDate, LocaleClass|float|null $locale, Lock|float|null $lock, Long|float|null $long, LongNode|float|null $longNode, Map|float|null $map, MapEntry|float|null $mapEntry, MarshalJSON|float|null $marshalJSON, MetadataPropertyHandling|float|null $metadataPropertyHandling, Module|float|null $module, Mutable|float|null $mutable, Mutating|float|null $mutating, NamespaceClass|float|null $namespace, Native|float|null $native, NewClass|float|null $new, Newtonsoft|float|null $newtonsoft, Nil|float|null $nil, No|float|null $no, Noexcept|float|null $noexcept, Nonatomic|float|null $nonatomic, NoneClass|float|null $topLevelNone, None|float|null $none, Nonlocal|float|null $nonlocal, Nonmutating|float|null $nonmutating, NoSuchMethod|float|null $noSuchMethod, Not|float|null $not, NotEq|float|null $notEq, NSError|float|null $nsError, NSObject|float|null $nsObject, NSString|float|null $nsString, NULLClass|float|null $null, UnionNullNull|float|null $topLevelNull, NullNode|float|null $nullNode, Nullptr|float|null $nullptr, Number|float|null $number, ObjectClass|float|null $object, ObjectMapper|float|null $objectMapper, ObjectNode|float|null $objectNode, ObjectReader|float|null $objectReader, ObjectWriter|float|null $objectWriter, Of|float|null $of, OffsetDateTime|float|null $offsetDateTime, OffsetTime|float|null $offsetTime, Oneway|float|null $oneway, Open|float|null $open, Operator|float|null $operator, Optional|float|null $optional, OrClass|float|null $or, OrEq|float|null $orEq, Out|float|null $out, OverrideClass|float|null $override, Package|float|null $package, Params|float|null $params, Pass|float|null $pass, Port|float|null $port, Postfix|float|null $postfix, Precedence|float|null $precedence, Prefix|float|null $prefix, PrimitiveKind|float|null $primitiveKind, PrintClass|float|null $print, Printf|float|null $printf, PrintMembers|float|null $printMembers, PrivateClass|float|null $private, ProtectedClass|float|null $protected, Protocol|float|null $protocol, ProtocolClass|float|null $topLevelProtocol, PublicClass|float|null $public, Quicktype|float|null $quicktype, Raise|float|null $raise, Range|float|null $range, ReadonlyClass|float|null $readonly, Ref|float|null $ref, RegExp|float|null $regExp, Register|float|null $register, ReinterpretCast|float|null $reinterpretCast, Repeat|float|null $repeat, RequireClass|float|null $require, Required|float|null $required, Requires|float|null $requires, Restrict|float|null $restrict, Retain|float|null $retain, Rethrows|float|null $rethrows, ReturnClass|float|null $return, Right|float|null $right, RuntimeType|float|null $runtimeType, S|float|null $s, Sbyte|float|null $sbyte, Sealed|float|null $sealed, Sel|float|null $sel, Select|float|null $select, SelfClass|float|null $self, UnionSelfSelf|float|null $topLevelSelf, Sendable|float|null $sendable, SerialDescriptor|float|null $serialDescriptor, SerializableClass|float|null $serializable, SerializationFeature|float|null $serializationFeature, Serialize|float|null $serialize, SerializerProvider|float|null $serializerProvider, SerialName|float|null $serialName, Set|float|null $set, Short|float|null $short, Signed|float|null $signed, SimpleModule|float|null $simpleModule, Sizeof|float|null $sizeof, Stackalloc|float|null $stackalloc, Standards|float|null $standards, StaticClass|float|null $static, StaticAssert|float|null $staticAssert, StaticCast|float|null $staticCast, StdDeserializer|float|null $stdDeserializer, StdSerializer|float|null $stdSerializer, Strictfp|float|null $strictfp, StringClass|float|null $string, Struct|float|null $struct, Subscript|float|null $subscript, Super|float|null $super, SwitchClass|float|null $switch, Symbol|float|null $symbol, Synchronized|float|null $synchronized, System|float|null $system, Template|float|null $template, TextNode|float|null $textNode, Then|float|null $then, This|float|null $topLevelThis, ThreadLocal|float|null $threadLocal, ThrowClass|float|null $throw, Throws|float|null $throws, TimeOnly|float|null $timeOnly, TimeOnlyConverter|float|null $timeOnlyConverter, TimeZone|float|null $timeZone, ToDict|float|null $toDict, ToJSON|float|null $toJSON, TopLevelClass|float|null $topLevel, ToString|float|null $toString, Transient|float|null $transient, TrueClass|float|null $true, UnionTrueTrue|float|null $topLevelTrue, TryClass|float|null $try, Type|float|null $type, TypeClass|float|null $topLevelType, Typealias|float|null $typealias, Typedef|float|null $typedef, Typeid|float|null $typeid, Typename|float|null $typename, Typeof|float|null $typeof, Uint|float|null $uint, Ulong|float|null $ulong, Unchecked|float|null $unchecked, Undefined|float|null $undefined, UnionClass|float|null $union, UnmarshalJSON|float|null $unmarshalJSON, Unowned|float|null $unowned, Unsafe|float|null $unsafe, Unsigned|float|null $unsigned, UseSerializers|float|null $useSerializers, Ushort|float|null $ushort, Using|float|null $using, Utf8JSONReader|float|null $utf8JSONReader, Utf8JSONWriter|float|null $utf8JSONWriter, UUID|float|null $uuid, VarClass|float|null $var, Virtual|float|null $virtual, VoidClass|float|null $void, Volatile|float|null $volatile, WcharT|float|null $wcharT, Weak|float|null $weak, Where|float|null $where, WhileClass|float|null $while, WillSet|float|null $willSet, With|float|null $with, XorClass|float|null $xor, XorEq|float|null $xorEq, Yes|float|null $yes, YieldClass|float|null $yield) {
         $this->empty = $empty;
         $this->topLevelBool = $topLevelBool;
         $this->complex = $complex;
@@ -902,6 +908,7 @@ class TopLevel {
         $this->left = $left;
         $this->let = $let;
         $this->list = $list;
+        $this->localDate = $localDate;
         $this->locale = $locale;
         $this->lock = $lock;
         $this->long = $long;
@@ -942,6 +949,8 @@ class TopLevel {
         $this->objectReader = $objectReader;
         $this->objectWriter = $objectWriter;
         $this->of = $of;
+        $this->offsetDateTime = $offsetDateTime;
+        $this->offsetTime = $offsetTime;
         $this->oneway = $oneway;
         $this->open = $open;
         $this->operator = $operator;
@@ -15040,6 +15049,82 @@ class TopLevel {
         return ListClass::sample(); /*214:list*/
     }
 
+    /**
+     * @param stdClass|float|null $value
+     * @throws Exception
+     * @return LocalDate|float|null
+     */
+    public static function fromLocalDate(stdClass|float|null $value): LocalDate|float|null {
+        if (is_null($value)) {
+            return $value; /*null*/
+        } elseif (is_object($value)) {
+            return LocalDate::from($value); /*class*/
+        } elseif (is_float($value) || is_int($value)) {
+            return $value; /*float*/
+        } else {
+            throw new Exception('Cannot deserialize union value in TopLevel');
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass|float|null
+     */
+    public function toLocalDate(): stdClass|float|null {
+        if (TopLevel::validateLocalDate($this->localDate))  {
+            if (is_null($this->localDate)) {
+                return $this->localDate; /*null*/
+            } elseif ($this->localDate instanceof LocalDate) {
+                return $this->localDate->to(); /*class*/
+            } elseif (is_float($this->localDate) || is_int($this->localDate)) {
+                return $this->localDate; /*float*/
+            } else {
+                throw new Exception('Union value has no matching member in TopLevel');
+            }
+        }
+        throw new Exception('never get to this TopLevel::localDate');
+    }
+
+    /**
+     * @param LocalDate|float|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateLocalDate(LocalDate|float|null $value): bool {
+        if (is_null($value)) {
+            if (!is_null($value)) {
+                throw new Exception("Attribute Error:TopLevel::localDate");
+            }
+        } elseif ($value instanceof LocalDate) {
+            $value->validate();
+        } elseif (is_float($value) || is_int($value)) {
+            if (!is_float($value) && !is_int($value)) {
+                throw new Exception("Attribute Error:TopLevel::localDate");
+            }
+        } else {
+            throw new Exception("Attribute Error:TopLevel::localDate");
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return LocalDate|float|null
+     */
+    public function getLocalDate(): LocalDate|float|null {
+        if (TopLevel::validateLocalDate($this->localDate))  {
+            return $this->localDate;
+        }
+        throw new Exception('never get to getLocalDate TopLevel::localDate');
+    }
+
+    /**
+     * @return LocalDate|float|null
+     */
+    public static function sampleLocalDate(): LocalDate|float|null {
+        return LocalDate::sample(); /*215:localDate*/
+    }
+
     /**
      * @param stdClass|float|null $value
      * @throws Exception
@@ -15113,7 +15198,7 @@ class TopLevel {
      * @return LocaleClass|float|null
      */
     public static function sampleLocale(): LocaleClass|float|null {
-        return LocaleClass::sample(); /*215:locale*/
+        return LocaleClass::sample(); /*216:locale*/
     }
 
     /**
@@ -15189,7 +15274,7 @@ class TopLevel {
      * @return Lock|float|null
      */
     public static function sampleLock(): Lock|float|null {
-        return Lock::sample(); /*216:lock*/
+        return Lock::sample(); /*217:lock*/
     }
 
     /**
@@ -15265,7 +15350,7 @@ class TopLevel {
      * @return Long|float|null
      */
     public static function sampleLong(): Long|float|null {
-        return Long::sample(); /*217:long*/
+        return Long::sample(); /*218:long*/
     }
 
     /**
@@ -15341,7 +15426,7 @@ class TopLevel {
      * @return LongNode|float|null
      */
     public static function sampleLongNode(): LongNode|float|null {
-        return LongNode::sample(); /*218:longNode*/
+        return LongNode::sample(); /*219:longNode*/
     }
 
     /**
@@ -15417,7 +15502,7 @@ class TopLevel {
      * @return Map|float|null
      */
     public static function sampleMap(): Map|float|null {
-        return Map::sample(); /*219:map*/
+        return Map::sample(); /*220:map*/
     }
 
     /**
@@ -15493,7 +15578,7 @@ class TopLevel {
      * @return MapEntry|float|null
      */
     public static function sampleMapEntry(): MapEntry|float|null {
-        return MapEntry::sample(); /*220:mapEntry*/
+        return MapEntry::sample(); /*221:mapEntry*/
     }
 
     /**
@@ -15569,7 +15654,7 @@ class TopLevel {
      * @return MarshalJSON|float|null
      */
     public static function sampleMarshalJSON(): MarshalJSON|float|null {
-        return MarshalJSON::sample(); /*221:marshalJSON*/
+        return MarshalJSON::sample(); /*222:marshalJSON*/
     }
 
     /**
@@ -15645,7 +15730,7 @@ class TopLevel {
      * @return MetadataPropertyHandling|float|null
      */
     public static function sampleMetadataPropertyHandling(): MetadataPropertyHandling|float|null {
-        return MetadataPropertyHandling::sample(); /*222:metadataPropertyHandling*/
+        return MetadataPropertyHandling::sample(); /*223:metadataPropertyHandling*/
     }
 
     /**
@@ -15721,7 +15806,7 @@ class TopLevel {
      * @return Module|float|null
      */
     public static function sampleModule(): Module|float|null {
-        return Module::sample(); /*223:module*/
+        return Module::sample(); /*224:module*/
     }
 
     /**
@@ -15797,7 +15882,7 @@ class TopLevel {
      * @return Mutable|float|null
      */
     public static function sampleMutable(): Mutable|float|null {
-        return Mutable::sample(); /*224:mutable*/
+        return Mutable::sample(); /*225:mutable*/
     }
 
     /**
@@ -15873,7 +15958,7 @@ class TopLevel {
      * @return Mutating|float|null
      */
     public static function sampleMutating(): Mutating|float|null {
-        return Mutating::sample(); /*225:mutating*/
+        return Mutating::sample(); /*226:mutating*/
     }
 
     /**
@@ -15949,7 +16034,7 @@ class TopLevel {
      * @return NamespaceClass|float|null
      */
     public static function sampleNamespace(): NamespaceClass|float|null {
-        return NamespaceClass::sample(); /*226:namespace*/
+        return NamespaceClass::sample(); /*227:namespace*/
     }
 
     /**
@@ -16025,7 +16110,7 @@ class TopLevel {
      * @return Native|float|null
      */
     public static function sampleNative(): Native|float|null {
-        return Native::sample(); /*227:native*/
+        return Native::sample(); /*228:native*/
     }
 
     /**
@@ -16101,7 +16186,7 @@ class TopLevel {
      * @return NewClass|float|null
      */
     public static function sampleNew(): NewClass|float|null {
-        return NewClass::sample(); /*228:new*/
+        return NewClass::sample(); /*229:new*/
     }
 
     /**
@@ -16177,7 +16262,7 @@ class TopLevel {
      * @return Newtonsoft|float|null
      */
     public static function sampleNewtonsoft(): Newtonsoft|float|null {
-        return Newtonsoft::sample(); /*229:newtonsoft*/
+        return Newtonsoft::sample(); /*230:newtonsoft*/
     }
 
     /**
@@ -16253,7 +16338,7 @@ class TopLevel {
      * @return Nil|float|null
      */
     public static function sampleNil(): Nil|float|null {
-        return Nil::sample(); /*230:nil*/
+        return Nil::sample(); /*231:nil*/
     }
 
     /**
@@ -16329,7 +16414,7 @@ class TopLevel {
      * @return No|float|null
      */
     public static function sampleNo(): No|float|null {
-        return No::sample(); /*231:no*/
+        return No::sample(); /*232:no*/
     }
 
     /**
@@ -16405,7 +16490,7 @@ class TopLevel {
      * @return Noexcept|float|null
      */
     public static function sampleNoexcept(): Noexcept|float|null {
-        return Noexcept::sample(); /*232:noexcept*/
+        return Noexcept::sample(); /*233:noexcept*/
     }
 
     /**
@@ -16481,7 +16566,7 @@ class TopLevel {
      * @return Nonatomic|float|null
      */
     public static function sampleNonatomic(): Nonatomic|float|null {
-        return Nonatomic::sample(); /*233:nonatomic*/
+        return Nonatomic::sample(); /*234:nonatomic*/
     }
 
     /**
@@ -16557,7 +16642,7 @@ class TopLevel {
      * @return NoneClass|float|null
      */
     public static function sampleTopLevelNone(): NoneClass|float|null {
-        return NoneClass::sample(); /*234:topLevelNone*/
+        return NoneClass::sample(); /*235:topLevelNone*/
     }
 
     /**
@@ -16633,7 +16718,7 @@ class TopLevel {
      * @return None|float|null
      */
     public static function sampleNone(): None|float|null {
-        return None::sample(); /*235:none*/
+        return None::sample(); /*236:none*/
     }
 
     /**
@@ -16709,7 +16794,7 @@ class TopLevel {
      * @return Nonlocal|float|null
      */
     public static function sampleNonlocal(): Nonlocal|float|null {
-        return Nonlocal::sample(); /*236:nonlocal*/
+        return Nonlocal::sample(); /*237:nonlocal*/
     }
 
     /**
@@ -16785,7 +16870,7 @@ class TopLevel {
      * @return Nonmutating|float|null
      */
     public static function sampleNonmutating(): Nonmutating|float|null {
-        return Nonmutating::sample(); /*237:nonmutating*/
+        return Nonmutating::sample(); /*238:nonmutating*/
     }
 
     /**
@@ -16861,7 +16946,7 @@ class TopLevel {
      * @return NoSuchMethod|float|null
      */
     public static function sampleNoSuchMethod(): NoSuchMethod|float|null {
-        return NoSuchMethod::sample(); /*238:noSuchMethod*/
+        return NoSuchMethod::sample(); /*239:noSuchMethod*/
     }
 
     /**
@@ -16937,7 +17022,7 @@ class TopLevel {
      * @return Not|float|null
      */
     public static function sampleNot(): Not|float|null {
-        return Not::sample(); /*239:not*/
+        return Not::sample(); /*240:not*/
     }
 
     /**
@@ -17013,7 +17098,7 @@ class TopLevel {
      * @return NotEq|float|null
      */
     public static function sampleNotEq(): NotEq|float|null {
-        return NotEq::sample(); /*240:notEq*/
+        return NotEq::sample(); /*241:notEq*/
     }
 
     /**
@@ -17089,7 +17174,7 @@ class TopLevel {
      * @return NSError|float|null
      */
     public static function sampleNSError(): NSError|float|null {
-        return NSError::sample(); /*241:nsError*/
+        return NSError::sample(); /*242:nsError*/
     }
 
     /**
@@ -17165,7 +17250,7 @@ class TopLevel {
      * @return NSObject|float|null
      */
     public static function sampleNSObject(): NSObject|float|null {
-        return NSObject::sample(); /*242:nsObject*/
+        return NSObject::sample(); /*243:nsObject*/
     }
 
     /**
@@ -17241,7 +17326,7 @@ class TopLevel {
      * @return NSString|float|null
      */
     public static function sampleNSString(): NSString|float|null {
-        return NSString::sample(); /*243:nsString*/
+        return NSString::sample(); /*244:nsString*/
     }
 
     /**
@@ -17317,7 +17402,7 @@ class TopLevel {
      * @return NULLClass|float|null
      */
     public static function sampleNull(): NULLClass|float|null {
-        return NULLClass::sample(); /*244:null*/
+        return NULLClass::sample(); /*245:null*/
     }
 
     /**
@@ -17393,7 +17478,7 @@ class TopLevel {
      * @return UnionNullNull|float|null
      */
     public static function sampleTopLevelNull(): UnionNullNull|float|null {
-        return UnionNullNull::sample(); /*245:topLevelNull*/
+        return UnionNullNull::sample(); /*246:topLevelNull*/
     }
 
     /**
@@ -17469,7 +17554,7 @@ class TopLevel {
      * @return NullNode|float|null
      */
     public static function sampleNullNode(): NullNode|float|null {
-        return NullNode::sample(); /*246:nullNode*/
+        return NullNode::sample(); /*247:nullNode*/
     }
 
     /**
@@ -17545,7 +17630,7 @@ class TopLevel {
      * @return Nullptr|float|null
      */
     public static function sampleNullptr(): Nullptr|float|null {
-        return Nullptr::sample(); /*247:nullptr*/
+        return Nullptr::sample(); /*248:nullptr*/
     }
 
     /**
@@ -17621,7 +17706,7 @@ class TopLevel {
      * @return Number|float|null
      */
     public static function sampleNumber(): Number|float|null {
-        return Number::sample(); /*248:number*/
+        return Number::sample(); /*249:number*/
     }
 
     /**
@@ -17697,7 +17782,7 @@ class TopLevel {
      * @return ObjectClass|float|null
      */
     public static function sampleObject(): ObjectClass|float|null {
-        return ObjectClass::sample(); /*249:object*/
+        return ObjectClass::sample(); /*250:object*/
     }
 
     /**
@@ -17773,7 +17858,7 @@ class TopLevel {
      * @return ObjectMapper|float|null
      */
     public static function sampleObjectMapper(): ObjectMapper|float|null {
-        return ObjectMapper::sample(); /*250:objectMapper*/
+        return ObjectMapper::sample(); /*251:objectMapper*/
     }
 
     /**
@@ -17849,7 +17934,7 @@ class TopLevel {
      * @return ObjectNode|float|null
      */
     public static function sampleObjectNode(): ObjectNode|float|null {
-        return ObjectNode::sample(); /*251:objectNode*/
+        return ObjectNode::sample(); /*252:objectNode*/
     }
 
     /**
@@ -17925,7 +18010,7 @@ class TopLevel {
      * @return ObjectReader|float|null
      */
     public static function sampleObjectReader(): ObjectReader|float|null {
-        return ObjectReader::sample(); /*252:objectReader*/
+        return ObjectReader::sample(); /*253:objectReader*/
     }
 
     /**
@@ -18001,7 +18086,7 @@ class TopLevel {
      * @return ObjectWriter|float|null
      */
     public static function sampleObjectWriter(): ObjectWriter|float|null {
-        return ObjectWriter::sample(); /*253:objectWriter*/
+        return ObjectWriter::sample(); /*254:objectWriter*/
     }
 
     /**
@@ -18077,7 +18162,159 @@ class TopLevel {
      * @return Of|float|null
      */
     public static function sampleOf(): Of|float|null {
-        return Of::sample(); /*254:of*/
+        return Of::sample(); /*255:of*/
+    }
+
+    /**
+     * @param stdClass|float|null $value
+     * @throws Exception
+     * @return OffsetDateTime|float|null
+     */
+    public static function fromOffsetDateTime(stdClass|float|null $value): OffsetDateTime|float|null {
+        if (is_null($value)) {
+            return $value; /*null*/
+        } elseif (is_object($value)) {
+            return OffsetDateTime::from($value); /*class*/
+        } elseif (is_float($value) || is_int($value)) {
+            return $value; /*float*/
+        } else {
+            throw new Exception('Cannot deserialize union value in TopLevel');
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass|float|null
+     */
+    public function toOffsetDateTime(): stdClass|float|null {
+        if (TopLevel::validateOffsetDateTime($this->offsetDateTime))  {
+            if (is_null($this->offsetDateTime)) {
+                return $this->offsetDateTime; /*null*/
+            } elseif ($this->offsetDateTime instanceof OffsetDateTime) {
+                return $this->offsetDateTime->to(); /*class*/
+            } elseif (is_float($this->offsetDateTime) || is_int($this->offsetDateTime)) {
+                return $this->offsetDateTime; /*float*/
+            } else {
+                throw new Exception('Union value has no matching member in TopLevel');
+            }
+        }
+        throw new Exception('never get to this TopLevel::offsetDateTime');
+    }
+
+    /**
+     * @param OffsetDateTime|float|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateOffsetDateTime(OffsetDateTime|float|null $value): bool {
+        if (is_null($value)) {
+            if (!is_null($value)) {
+                throw new Exception("Attribute Error:TopLevel::offsetDateTime");
+            }
+        } elseif ($value instanceof OffsetDateTime) {
+            $value->validate();
+        } elseif (is_float($value) || is_int($value)) {
+            if (!is_float($value) && !is_int($value)) {
+                throw new Exception("Attribute Error:TopLevel::offsetDateTime");
+            }
+        } else {
+            throw new Exception("Attribute Error:TopLevel::offsetDateTime");
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return OffsetDateTime|float|null
+     */
+    public function getOffsetDateTime(): OffsetDateTime|float|null {
+        if (TopLevel::validateOffsetDateTime($this->offsetDateTime))  {
+            return $this->offsetDateTime;
+        }
+        throw new Exception('never get to getOffsetDateTime TopLevel::offsetDateTime');
+    }
+
+    /**
+     * @return OffsetDateTime|float|null
+     */
+    public static function sampleOffsetDateTime(): OffsetDateTime|float|null {
+        return OffsetDateTime::sample(); /*256:offsetDateTime*/
+    }
+
+    /**
+     * @param stdClass|float|null $value
+     * @throws Exception
+     * @return OffsetTime|float|null
+     */
+    public static function fromOffsetTime(stdClass|float|null $value): OffsetTime|float|null {
+        if (is_null($value)) {
+            return $value; /*null*/
+        } elseif (is_object($value)) {
+            return OffsetTime::from($value); /*class*/
+        } elseif (is_float($value) || is_int($value)) {
+            return $value; /*float*/
+        } else {
+            throw new Exception('Cannot deserialize union value in TopLevel');
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass|float|null
+     */
+    public function toOffsetTime(): stdClass|float|null {
+        if (TopLevel::validateOffsetTime($this->offsetTime))  {
+            if (is_null($this->offsetTime)) {
+                return $this->offsetTime; /*null*/
+            } elseif ($this->offsetTime instanceof OffsetTime) {
+                return $this->offsetTime->to(); /*class*/
+            } elseif (is_float($this->offsetTime) || is_int($this->offsetTime)) {
+                return $this->offsetTime; /*float*/
+            } else {
+                throw new Exception('Union value has no matching member in TopLevel');
+            }
+        }
+        throw new Exception('never get to this TopLevel::offsetTime');
+    }
+
+    /**
+     * @param OffsetTime|float|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateOffsetTime(OffsetTime|float|null $value): bool {
+        if (is_null($value)) {
+            if (!is_null($value)) {
+                throw new Exception("Attribute Error:TopLevel::offsetTime");
+            }
+        } elseif ($value instanceof OffsetTime) {
+            $value->validate();
+        } elseif (is_float($value) || is_int($value)) {
+            if (!is_float($value) && !is_int($value)) {
+                throw new Exception("Attribute Error:TopLevel::offsetTime");
+            }
+        } else {
+            throw new Exception("Attribute Error:TopLevel::offsetTime");
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return OffsetTime|float|null
+     */
+    public function getOffsetTime(): OffsetTime|float|null {
+        if (TopLevel::validateOffsetTime($this->offsetTime))  {
+            return $this->offsetTime;
+        }
+        throw new Exception('never get to getOffsetTime TopLevel::offsetTime');
+    }
+
+    /**
+     * @return OffsetTime|float|null
+     */
+    public static function sampleOffsetTime(): OffsetTime|float|null {
+        return OffsetTime::sample(); /*257:offsetTime*/
     }
 
     /**
@@ -18153,7 +18390,7 @@ class TopLevel {
      * @return Oneway|float|null
      */
     public static function sampleOneway(): Oneway|float|null {
-        return Oneway::sample(); /*255:oneway*/
+        return Oneway::sample(); /*258:oneway*/
     }
 
     /**
@@ -18229,7 +18466,7 @@ class TopLevel {
      * @return Open|float|null
      */
     public static function sampleOpen(): Open|float|null {
-        return Open::sample(); /*256:open*/
+        return Open::sample(); /*259:open*/
     }
 
     /**
@@ -18305,7 +18542,7 @@ class TopLevel {
      * @return Operator|float|null
      */
     public static function sampleOperator(): Operator|float|null {
-        return Operator::sample(); /*257:operator*/
+        return Operator::sample(); /*260:operator*/
     }
 
     /**
@@ -18381,7 +18618,7 @@ class TopLevel {
      * @return Optional|float|null
      */
     public static function sampleOptional(): Optional|float|null {
-        return Optional::sample(); /*258:optional*/
+        return Optional::sample(); /*261:optional*/
     }
 
     /**
@@ -18457,7 +18694,7 @@ class TopLevel {
      * @return OrClass|float|null
      */
     public static function sampleOr(): OrClass|float|null {
-        return OrClass::sample(); /*259:or*/
+        return OrClass::sample(); /*262:or*/
     }
 
     /**
@@ -18533,7 +18770,7 @@ class TopLevel {
      * @return OrEq|float|null
      */
     public static function sampleOrEq(): OrEq|float|null {
-        return OrEq::sample(); /*260:orEq*/
+        return OrEq::sample(); /*263:orEq*/
     }
 
     /**
@@ -18609,7 +18846,7 @@ class TopLevel {
      * @return Out|float|null
      */
     public static function sampleOut(): Out|float|null {
-        return Out::sample(); /*261:out*/
+        return Out::sample(); /*264:out*/
     }
 
     /**
@@ -18685,7 +18922,7 @@ class TopLevel {
      * @return OverrideClass|float|null
      */
     public static function sampleOverride(): OverrideClass|float|null {
-        return OverrideClass::sample(); /*262:override*/
+        return OverrideClass::sample(); /*265:override*/
     }
 
     /**
@@ -18761,7 +18998,7 @@ class TopLevel {
      * @return Package|float|null
      */
     public static function samplePackage(): Package|float|null {
-        return Package::sample(); /*263:package*/
+        return Package::sample(); /*266:package*/
     }
 
     /**
@@ -18837,7 +19074,7 @@ class TopLevel {
      * @return Params|float|null
      */
     public static function sampleParams(): Params|float|null {
-        return Params::sample(); /*264:params*/
+        return Params::sample(); /*267:params*/
     }
 
     /**
@@ -18913,7 +19150,7 @@ class TopLevel {
      * @return Pass|float|null
      */
     public static function samplePass(): Pass|float|null {
-        return Pass::sample(); /*265:pass*/
+        return Pass::sample(); /*268:pass*/
     }
 
     /**
@@ -18989,7 +19226,7 @@ class TopLevel {
      * @return Port|float|null
      */
     public static function samplePort(): Port|float|null {
-        return Port::sample(); /*266:port*/
+        return Port::sample(); /*269:port*/
     }
 
     /**
@@ -19065,7 +19302,7 @@ class TopLevel {
      * @return Postfix|float|null
      */
     public static function samplePostfix(): Postfix|float|null {
-        return Postfix::sample(); /*267:postfix*/
+        return Postfix::sample(); /*270:postfix*/
     }
 
     /**
@@ -19141,7 +19378,7 @@ class TopLevel {
      * @return Precedence|float|null
      */
     public static function samplePrecedence(): Precedence|float|null {
-        return Precedence::sample(); /*268:precedence*/
+        return Precedence::sample(); /*271:precedence*/
     }
 
     /**
@@ -19217,7 +19454,7 @@ class TopLevel {
      * @return Prefix|float|null
      */
     public static function samplePrefix(): Prefix|float|null {
-        return Prefix::sample(); /*269:prefix*/
+        return Prefix::sample(); /*272:prefix*/
     }
 
     /**
@@ -19293,7 +19530,7 @@ class TopLevel {
      * @return PrimitiveKind|float|null
      */
     public static function samplePrimitiveKind(): PrimitiveKind|float|null {
-        return PrimitiveKind::sample(); /*270:primitiveKind*/
+        return PrimitiveKind::sample(); /*273:primitiveKind*/
     }
 
     /**
@@ -19369,7 +19606,7 @@ class TopLevel {
      * @return PrintClass|float|null
      */
     public static function samplePrint(): PrintClass|float|null {
-        return PrintClass::sample(); /*271:print*/
+        return PrintClass::sample(); /*274:print*/
     }
 
     /**
@@ -19445,7 +19682,7 @@ class TopLevel {
      * @return Printf|float|null
      */
     public static function samplePrintf(): Printf|float|null {
-        return Printf::sample(); /*272:printf*/
+        return Printf::sample(); /*275:printf*/
     }
 
     /**
@@ -19521,7 +19758,7 @@ class TopLevel {
      * @return PrintMembers|float|null
      */
     public static function samplePrintMembers(): PrintMembers|float|null {
-        return PrintMembers::sample(); /*273:printMembers*/
+        return PrintMembers::sample(); /*276:printMembers*/
     }
 
     /**
@@ -19597,7 +19834,7 @@ class TopLevel {
      * @return PrivateClass|float|null
      */
     public static function samplePrivate(): PrivateClass|float|null {
-        return PrivateClass::sample(); /*274:private*/
+        return PrivateClass::sample(); /*277:private*/
     }
 
     /**
@@ -19673,7 +19910,7 @@ class TopLevel {
      * @return ProtectedClass|float|null
      */
     public static function sampleProtected(): ProtectedClass|float|null {
-        return ProtectedClass::sample(); /*275:protected*/
+        return ProtectedClass::sample(); /*278:protected*/
     }
 
     /**
@@ -19749,7 +19986,7 @@ class TopLevel {
      * @return Protocol|float|null
      */
     public static function sampleProtocol(): Protocol|float|null {
-        return Protocol::sample(); /*276:protocol*/
+        return Protocol::sample(); /*279:protocol*/
     }
 
     /**
@@ -19825,7 +20062,7 @@ class TopLevel {
      * @return ProtocolClass|float|null
      */
     public static function sampleTopLevelProtocol(): ProtocolClass|float|null {
-        return ProtocolClass::sample(); /*277:topLevelProtocol*/
+        return ProtocolClass::sample(); /*280:topLevelProtocol*/
     }
 
     /**
@@ -19901,7 +20138,7 @@ class TopLevel {
      * @return PublicClass|float|null
      */
     public static function samplePublic(): PublicClass|float|null {
-        return PublicClass::sample(); /*278:public*/
+        return PublicClass::sample(); /*281:public*/
     }
 
     /**
@@ -19977,7 +20214,7 @@ class TopLevel {
      * @return Quicktype|float|null
      */
     public static function sampleQuicktype(): Quicktype|float|null {
-        return Quicktype::sample(); /*279:quicktype*/
+        return Quicktype::sample(); /*282:quicktype*/
     }
 
     /**
@@ -20053,7 +20290,7 @@ class TopLevel {
      * @return Raise|float|null
      */
     public static function sampleRaise(): Raise|float|null {
-        return Raise::sample(); /*280:raise*/
+        return Raise::sample(); /*283:raise*/
     }
 
     /**
@@ -20129,7 +20366,7 @@ class TopLevel {
      * @return Range|float|null
      */
     public static function sampleRange(): Range|float|null {
-        return Range::sample(); /*281:range*/
+        return Range::sample(); /*284:range*/
     }
 
     /**
@@ -20205,7 +20442,7 @@ class TopLevel {
      * @return ReadonlyClass|float|null
      */
     public static function sampleReadonly(): ReadonlyClass|float|null {
-        return ReadonlyClass::sample(); /*282:readonly*/
+        return ReadonlyClass::sample(); /*285:readonly*/
     }
 
     /**
@@ -20281,7 +20518,7 @@ class TopLevel {
      * @return Ref|float|null
      */
     public static function sampleRef(): Ref|float|null {
-        return Ref::sample(); /*283:ref*/
+        return Ref::sample(); /*286:ref*/
     }
 
     /**
@@ -20357,7 +20594,7 @@ class TopLevel {
      * @return RegExp|float|null
      */
     public static function sampleRegExp(): RegExp|float|null {
-        return RegExp::sample(); /*284:regExp*/
+        return RegExp::sample(); /*287:regExp*/
     }
 
     /**
@@ -20433,7 +20670,7 @@ class TopLevel {
      * @return Register|float|null
      */
     public static function sampleRegister(): Register|float|null {
-        return Register::sample(); /*285:register*/
+        return Register::sample(); /*288:register*/
     }
 
     /**
@@ -20509,7 +20746,7 @@ class TopLevel {
      * @return ReinterpretCast|float|null
      */
     public static function sampleReinterpretCast(): ReinterpretCast|float|null {
-        return ReinterpretCast::sample(); /*286:reinterpretCast*/
+        return ReinterpretCast::sample(); /*289:reinterpretCast*/
     }
 
     /**
@@ -20585,7 +20822,7 @@ class TopLevel {
      * @return Repeat|float|null
      */
     public static function sampleRepeat(): Repeat|float|null {
-        return Repeat::sample(); /*287:repeat*/
+        return Repeat::sample(); /*290:repeat*/
     }
 
     /**
@@ -20661,7 +20898,7 @@ class TopLevel {
      * @return RequireClass|float|null
      */
     public static function sampleRequire(): RequireClass|float|null {
-        return RequireClass::sample(); /*288:require*/
+        return RequireClass::sample(); /*291:require*/
     }
 
     /**
@@ -20737,7 +20974,7 @@ class TopLevel {
      * @return Required|float|null
      */
     public static function sampleRequired(): Required|float|null {
-        return Required::sample(); /*289:required*/
+        return Required::sample(); /*292:required*/
     }
 
     /**
@@ -20813,7 +21050,7 @@ class TopLevel {
      * @return Requires|float|null
      */
     public static function sampleRequires(): Requires|float|null {
-        return Requires::sample(); /*290:requires*/
+        return Requires::sample(); /*293:requires*/
     }
 
     /**
@@ -20889,7 +21126,7 @@ class TopLevel {
      * @return Restrict|float|null
      */
     public static function sampleRestrict(): Restrict|float|null {
-        return Restrict::sample(); /*291:restrict*/
+        return Restrict::sample(); /*294:restrict*/
     }
 
     /**
@@ -20965,7 +21202,7 @@ class TopLevel {
      * @return Retain|float|null
      */
     public static function sampleRetain(): Retain|float|null {
-        return Retain::sample(); /*292:retain*/
+        return Retain::sample(); /*295:retain*/
     }
 
     /**
@@ -21041,7 +21278,7 @@ class TopLevel {
      * @return Rethrows|float|null
      */
     public static function sampleRethrows(): Rethrows|float|null {
-        return Rethrows::sample(); /*293:rethrows*/
+        return Rethrows::sample(); /*296:rethrows*/
     }
 
     /**
@@ -21117,7 +21354,7 @@ class TopLevel {
      * @return ReturnClass|float|null
      */
     public static function sampleReturn(): ReturnClass|float|null {
-        return ReturnClass::sample(); /*294:return*/
+        return ReturnClass::sample(); /*297:return*/
     }
 
     /**
@@ -21193,7 +21430,7 @@ class TopLevel {
      * @return Right|float|null
      */
     public static function sampleRight(): Right|float|null {
-        return Right::sample(); /*295:right*/
+        return Right::sample(); /*298:right*/
     }
 
     /**
@@ -21269,7 +21506,7 @@ class TopLevel {
      * @return RuntimeType|float|null
      */
     public static function sampleRuntimeType(): RuntimeType|float|null {
-        return RuntimeType::sample(); /*296:runtimeType*/
+        return RuntimeType::sample(); /*299:runtimeType*/
     }
 
     /**
@@ -21345,7 +21582,7 @@ class TopLevel {
      * @return S|float|null
      */
     public static function sampleS(): S|float|null {
-        return S::sample(); /*297:s*/
+        return S::sample(); /*300:s*/
     }
 
     /**
@@ -21421,7 +21658,7 @@ class TopLevel {
      * @return Sbyte|float|null
      */
     public static function sampleSbyte(): Sbyte|float|null {
-        return Sbyte::sample(); /*298:sbyte*/
+        return Sbyte::sample(); /*301:sbyte*/
     }
 
     /**
@@ -21497,7 +21734,7 @@ class TopLevel {
      * @return Sealed|float|null
      */
     public static function sampleSealed(): Sealed|float|null {
-        return Sealed::sample(); /*299:sealed*/
+        return Sealed::sample(); /*302:sealed*/
     }
 
     /**
@@ -21573,7 +21810,7 @@ class TopLevel {
      * @return Sel|float|null
      */
     public static function sampleSel(): Sel|float|null {
-        return Sel::sample(); /*300:sel*/
+        return Sel::sample(); /*303:sel*/
     }
 
     /**
@@ -21649,7 +21886,7 @@ class TopLevel {
      * @return Select|float|null
      */
     public static function sampleSelect(): Select|float|null {
-        return Select::sample(); /*301:select*/
+        return Select::sample(); /*304:select*/
     }
 
     /**
@@ -21725,7 +21962,7 @@ class TopLevel {
      * @return SelfClass|float|null
      */
     public static function sampleSelf(): SelfClass|float|null {
-        return SelfClass::sample(); /*302:self*/
+        return SelfClass::sample(); /*305:self*/
     }
 
     /**
@@ -21801,7 +22038,7 @@ class TopLevel {
      * @return UnionSelfSelf|float|null
      */
     public static function sampleTopLevelSelf(): UnionSelfSelf|float|null {
-        return UnionSelfSelf::sample(); /*303:topLevelSelf*/
+        return UnionSelfSelf::sample(); /*306:topLevelSelf*/
     }
 
     /**
@@ -21877,7 +22114,7 @@ class TopLevel {
      * @return Sendable|float|null
      */
     public static function sampleSendable(): Sendable|float|null {
-        return Sendable::sample(); /*304:sendable*/
+        return Sendable::sample(); /*307:sendable*/
     }
 
     /**
@@ -21953,7 +22190,7 @@ class TopLevel {
      * @return SerialDescriptor|float|null
      */
     public static function sampleSerialDescriptor(): SerialDescriptor|float|null {
-        return SerialDescriptor::sample(); /*305:serialDescriptor*/
+        return SerialDescriptor::sample(); /*308:serialDescriptor*/
     }
 
     /**
@@ -22029,7 +22266,7 @@ class TopLevel {
      * @return SerializableClass|float|null
      */
     public static function sampleSerializable(): SerializableClass|float|null {
-        return SerializableClass::sample(); /*306:serializable*/
+        return SerializableClass::sample(); /*309:serializable*/
     }
 
     /**
@@ -22105,7 +22342,7 @@ class TopLevel {
      * @return SerializationFeature|float|null
      */
     public static function sampleSerializationFeature(): SerializationFeature|float|null {
-        return SerializationFeature::sample(); /*307:serializationFeature*/
+        return SerializationFeature::sample(); /*310:serializationFeature*/
     }
 
     /**
@@ -22181,7 +22418,7 @@ class TopLevel {
      * @return Serialize|float|null
      */
     public static function sampleSerialize(): Serialize|float|null {
-        return Serialize::sample(); /*308:serialize*/
+        return Serialize::sample(); /*311:serialize*/
     }
 
     /**
@@ -22257,7 +22494,7 @@ class TopLevel {
      * @return SerializerProvider|float|null
      */
     public static function sampleSerializerProvider(): SerializerProvider|float|null {
-        return SerializerProvider::sample(); /*309:serializerProvider*/
+        return SerializerProvider::sample(); /*312:serializerProvider*/
     }
 
     /**
@@ -22333,7 +22570,7 @@ class TopLevel {
      * @return SerialName|float|null
      */
     public static function sampleSerialName(): SerialName|float|null {
-        return SerialName::sample(); /*310:serialName*/
+        return SerialName::sample(); /*313:serialName*/
     }
 
     /**
@@ -22409,7 +22646,7 @@ class TopLevel {
      * @return Set|float|null
      */
     public static function sampleSet(): Set|float|null {
-        return Set::sample(); /*311:set*/
+        return Set::sample(); /*314:set*/
     }
 
     /**
@@ -22485,7 +22722,7 @@ class TopLevel {
      * @return Short|float|null
      */
     public static function sampleShort(): Short|float|null {
-        return Short::sample(); /*312:short*/
+        return Short::sample(); /*315:short*/
     }
 
     /**
@@ -22561,7 +22798,7 @@ class TopLevel {
      * @return Signed|float|null
      */
     public static function sampleSigned(): Signed|float|null {
-        return Signed::sample(); /*313:signed*/
+        return Signed::sample(); /*316:signed*/
     }
 
     /**
@@ -22637,7 +22874,7 @@ class TopLevel {
      * @return SimpleModule|float|null
      */
     public static function sampleSimpleModule(): SimpleModule|float|null {
-        return SimpleModule::sample(); /*314:simpleModule*/
+        return SimpleModule::sample(); /*317:simpleModule*/
     }
 
     /**
@@ -22713,7 +22950,7 @@ class TopLevel {
      * @return Sizeof|float|null
      */
     public static function sampleSizeof(): Sizeof|float|null {
-        return Sizeof::sample(); /*315:sizeof*/
+        return Sizeof::sample(); /*318:sizeof*/
     }
 
     /**
@@ -22789,7 +23026,7 @@ class TopLevel {
      * @return Stackalloc|float|null
      */
     public static function sampleStackalloc(): Stackalloc|float|null {
-        return Stackalloc::sample(); /*316:stackalloc*/
+        return Stackalloc::sample(); /*319:stackalloc*/
     }
 
     /**
@@ -22865,7 +23102,7 @@ class TopLevel {
      * @return Standards|float|null
      */
     public static function sampleStandards(): Standards|float|null {
-        return Standards::sample(); /*317:standards*/
+        return Standards::sample(); /*320:standards*/
     }
 
     /**
@@ -22941,7 +23178,7 @@ class TopLevel {
      * @return StaticClass|float|null
      */
     public static function sampleStatic(): StaticClass|float|null {
-        return StaticClass::sample(); /*318:static*/
+        return StaticClass::sample(); /*321:static*/
     }
 
     /**
@@ -23017,7 +23254,7 @@ class TopLevel {
      * @return StaticAssert|float|null
      */
     public static function sampleStaticAssert(): StaticAssert|float|null {
-        return StaticAssert::sample(); /*319:staticAssert*/
+        return StaticAssert::sample(); /*322:staticAssert*/
     }
 
     /**
@@ -23093,7 +23330,7 @@ class TopLevel {
      * @return StaticCast|float|null
      */
     public static function sampleStaticCast(): StaticCast|float|null {
-        return StaticCast::sample(); /*320:staticCast*/
+        return StaticCast::sample(); /*323:staticCast*/
     }
 
     /**
@@ -23169,7 +23406,7 @@ class TopLevel {
      * @return StdDeserializer|float|null
      */
     public static function sampleStdDeserializer(): StdDeserializer|float|null {
-        return StdDeserializer::sample(); /*321:stdDeserializer*/
+        return StdDeserializer::sample(); /*324:stdDeserializer*/
     }
 
     /**
@@ -23245,7 +23482,7 @@ class TopLevel {
      * @return StdSerializer|float|null
      */
     public static function sampleStdSerializer(): StdSerializer|float|null {
-        return StdSerializer::sample(); /*322:stdSerializer*/
+        return StdSerializer::sample(); /*325:stdSerializer*/
     }
 
     /**
@@ -23321,7 +23558,7 @@ class TopLevel {
      * @return Strictfp|float|null
      */
     public static function sampleStrictfp(): Strictfp|float|null {
-        return Strictfp::sample(); /*323:strictfp*/
+        return Strictfp::sample(); /*326:strictfp*/
     }
 
     /**
@@ -23397,7 +23634,7 @@ class TopLevel {
      * @return StringClass|float|null
      */
     public static function sampleString(): StringClass|float|null {
-        return StringClass::sample(); /*324:string*/
+        return StringClass::sample(); /*327:string*/
     }
 
     /**
@@ -23473,7 +23710,7 @@ class TopLevel {
      * @return Struct|float|null
      */
     public static function sampleStruct(): Struct|float|null {
-        return Struct::sample(); /*325:struct*/
+        return Struct::sample(); /*328:struct*/
     }
 
     /**
@@ -23549,7 +23786,7 @@ class TopLevel {
      * @return Subscript|float|null
      */
     public static function sampleSubscript(): Subscript|float|null {
-        return Subscript::sample(); /*326:subscript*/
+        return Subscript::sample(); /*329:subscript*/
     }
 
     /**
@@ -23625,7 +23862,7 @@ class TopLevel {
      * @return Super|float|null
      */
     public static function sampleSuper(): Super|float|null {
-        return Super::sample(); /*327:super*/
+        return Super::sample(); /*330:super*/
     }
 
     /**
@@ -23701,7 +23938,7 @@ class TopLevel {
      * @return SwitchClass|float|null
      */
     public static function sampleSwitch(): SwitchClass|float|null {
-        return SwitchClass::sample(); /*328:switch*/
+        return SwitchClass::sample(); /*331:switch*/
     }
 
     /**
@@ -23777,7 +24014,7 @@ class TopLevel {
      * @return Symbol|float|null
      */
     public static function sampleSymbol(): Symbol|float|null {
-        return Symbol::sample(); /*329:symbol*/
+        return Symbol::sample(); /*332:symbol*/
     }
 
     /**
@@ -23853,7 +24090,7 @@ class TopLevel {
      * @return Synchronized|float|null
      */
     public static function sampleSynchronized(): Synchronized|float|null {
-        return Synchronized::sample(); /*330:synchronized*/
+        return Synchronized::sample(); /*333:synchronized*/
     }
 
     /**
@@ -23929,7 +24166,7 @@ class TopLevel {
      * @return System|float|null
      */
     public static function sampleSystem(): System|float|null {
-        return System::sample(); /*331:system*/
+        return System::sample(); /*334:system*/
     }
 
     /**
@@ -24005,7 +24242,7 @@ class TopLevel {
      * @return Template|float|null
      */
     public static function sampleTemplate(): Template|float|null {
-        return Template::sample(); /*332:template*/
+        return Template::sample(); /*335:template*/
     }
 
     /**
@@ -24081,7 +24318,7 @@ class TopLevel {
      * @return TextNode|float|null
      */
     public static function sampleTextNode(): TextNode|float|null {
-        return TextNode::sample(); /*333:textNode*/
+        return TextNode::sample(); /*336:textNode*/
     }
 
     /**
@@ -24157,7 +24394,7 @@ class TopLevel {
      * @return Then|float|null
      */
     public static function sampleThen(): Then|float|null {
-        return Then::sample(); /*334:then*/
+        return Then::sample(); /*337:then*/
     }
 
     /**
@@ -24233,7 +24470,7 @@ class TopLevel {
      * @return This|float|null
      */
     public static function sampleTopLevelThis(): This|float|null {
-        return This::sample(); /*335:topLevelThis*/
+        return This::sample(); /*338:topLevelThis*/
     }
 
     /**
@@ -24309,7 +24546,7 @@ class TopLevel {
      * @return ThreadLocal|float|null
      */
     public static function sampleThreadLocal(): ThreadLocal|float|null {
-        return ThreadLocal::sample(); /*336:threadLocal*/
+        return ThreadLocal::sample(); /*339:threadLocal*/
     }
 
     /**
@@ -24385,7 +24622,7 @@ class TopLevel {
      * @return ThrowClass|float|null
      */
     public static function sampleThrow(): ThrowClass|float|null {
-        return ThrowClass::sample(); /*337:throw*/
+        return ThrowClass::sample(); /*340:throw*/
     }
 
     /**
@@ -24461,7 +24698,7 @@ class TopLevel {
      * @return Throws|float|null
      */
     public static function sampleThrows(): Throws|float|null {
-        return Throws::sample(); /*338:throws*/
+        return Throws::sample(); /*341:throws*/
     }
 
     /**
@@ -24537,7 +24774,7 @@ class TopLevel {
      * @return TimeOnly|float|null
      */
     public static function sampleTimeOnly(): TimeOnly|float|null {
-        return TimeOnly::sample(); /*339:timeOnly*/
+        return TimeOnly::sample(); /*342:timeOnly*/
     }
 
     /**
@@ -24613,7 +24850,7 @@ class TopLevel {
      * @return TimeOnlyConverter|float|null
      */
     public static function sampleTimeOnlyConverter(): TimeOnlyConverter|float|null {
-        return TimeOnlyConverter::sample(); /*340:timeOnlyConverter*/
+        return TimeOnlyConverter::sample(); /*343:timeOnlyConverter*/
     }
 
     /**
@@ -24689,7 +24926,7 @@ class TopLevel {
      * @return TimeZone|float|null
      */
     public static function sampleTimeZone(): TimeZone|float|null {
-        return TimeZone::sample(); /*341:timeZone*/
+        return TimeZone::sample(); /*344:timeZone*/
     }
 
     /**
@@ -24765,7 +25002,7 @@ class TopLevel {
      * @return ToDict|float|null
      */
     public static function sampleToDict(): ToDict|float|null {
-        return ToDict::sample(); /*342:toDict*/
+        return ToDict::sample(); /*345:toDict*/
     }
 
     /**
@@ -24841,7 +25078,7 @@ class TopLevel {
      * @return ToJSON|float|null
      */
     public static function sampleToJSON(): ToJSON|float|null {
-        return ToJSON::sample(); /*343:toJSON*/
+        return ToJSON::sample(); /*346:toJSON*/
     }
 
     /**
@@ -24917,7 +25154,7 @@ class TopLevel {
      * @return TopLevelClass|float|null
      */
     public static function sampleTopLevel(): TopLevelClass|float|null {
-        return TopLevelClass::sample(); /*344:topLevel*/
+        return TopLevelClass::sample(); /*347:topLevel*/
     }
 
     /**
@@ -24993,7 +25230,7 @@ class TopLevel {
      * @return ToString|float|null
      */
     public static function sampleToString(): ToString|float|null {
-        return ToString::sample(); /*345:toString*/
+        return ToString::sample(); /*348:toString*/
     }
 
     /**
@@ -25069,7 +25306,7 @@ class TopLevel {
      * @return Transient|float|null
      */
     public static function sampleTransient(): Transient|float|null {
-        return Transient::sample(); /*346:transient*/
+        return Transient::sample(); /*349:transient*/
     }
 
     /**
@@ -25145,7 +25382,7 @@ class TopLevel {
      * @return TrueClass|float|null
      */
     public static function sampleTrue(): TrueClass|float|null {
-        return TrueClass::sample(); /*347:true*/
+        return TrueClass::sample(); /*350:true*/
     }
 
     /**
@@ -25221,7 +25458,7 @@ class TopLevel {
      * @return UnionTrueTrue|float|null
      */
     public static function sampleTopLevelTrue(): UnionTrueTrue|float|null {
-        return UnionTrueTrue::sample(); /*348:topLevelTrue*/
+        return UnionTrueTrue::sample(); /*351:topLevelTrue*/
     }
 
     /**
@@ -25297,7 +25534,7 @@ class TopLevel {
      * @return TryClass|float|null
      */
     public static function sampleTry(): TryClass|float|null {
-        return TryClass::sample(); /*349:try*/
+        return TryClass::sample(); /*352:try*/
     }
 
     /**
@@ -25373,7 +25610,7 @@ class TopLevel {
      * @return Type|float|null
      */
     public static function sampleType(): Type|float|null {
-        return Type::sample(); /*350:type*/
+        return Type::sample(); /*353:type*/
     }
 
     /**
@@ -25449,7 +25686,7 @@ class TopLevel {
      * @return TypeClass|float|null
      */
     public static function sampleTopLevelType(): TypeClass|float|null {
-        return TypeClass::sample(); /*351:topLevelType*/
+        return TypeClass::sample(); /*354:topLevelType*/
     }
 
     /**
@@ -25525,7 +25762,7 @@ class TopLevel {
      * @return Typealias|float|null
      */
     public static function sampleTypealias(): Typealias|float|null {
-        return Typealias::sample(); /*352:typealias*/
+        return Typealias::sample(); /*355:typealias*/
     }
 
     /**
@@ -25601,7 +25838,7 @@ class TopLevel {
      * @return Typedef|float|null
      */
     public static function sampleTypedef(): Typedef|float|null {
-        return Typedef::sample(); /*353:typedef*/
+        return Typedef::sample(); /*356:typedef*/
     }
 
     /**
@@ -25677,7 +25914,7 @@ class TopLevel {
      * @return Typeid|float|null
      */
     public static function sampleTypeid(): Typeid|float|null {
-        return Typeid::sample(); /*354:typeid*/
+        return Typeid::sample(); /*357:typeid*/
     }
 
     /**
@@ -25753,7 +25990,7 @@ class TopLevel {
      * @return Typename|float|null
      */
     public static function sampleTypename(): Typename|float|null {
-        return Typename::sample(); /*355:typename*/
+        return Typename::sample(); /*358:typename*/
     }
 
     /**
@@ -25829,7 +26066,7 @@ class TopLevel {
      * @return Typeof|float|null
      */
     public static function sampleTypeof(): Typeof|float|null {
-        return Typeof::sample(); /*356:typeof*/
+        return Typeof::sample(); /*359:typeof*/
     }
 
     /**
@@ -25905,7 +26142,7 @@ class TopLevel {
      * @return Uint|float|null
      */
     public static function sampleUint(): Uint|float|null {
-        return Uint::sample(); /*357:uint*/
+        return Uint::sample(); /*360:uint*/
     }
 
     /**
@@ -25981,7 +26218,7 @@ class TopLevel {
      * @return Ulong|float|null
      */
     public static function sampleUlong(): Ulong|float|null {
-        return Ulong::sample(); /*358:ulong*/
+        return Ulong::sample(); /*361:ulong*/
     }
 
     /**
@@ -26057,7 +26294,7 @@ class TopLevel {
      * @return Unchecked|float|null
      */
     public static function sampleUnchecked(): Unchecked|float|null {
-        return Unchecked::sample(); /*359:unchecked*/
+        return Unchecked::sample(); /*362:unchecked*/
     }
 
     /**
@@ -26133,7 +26370,7 @@ class TopLevel {
      * @return Undefined|float|null
      */
     public static function sampleUndefined(): Undefined|float|null {
-        return Undefined::sample(); /*360:undefined*/
+        return Undefined::sample(); /*363:undefined*/
     }
 
     /**
@@ -26209,7 +26446,7 @@ class TopLevel {
      * @return UnionClass|float|null
      */
     public static function sampleUnion(): UnionClass|float|null {
-        return UnionClass::sample(); /*361:union*/
+        return UnionClass::sample(); /*364:union*/
     }
 
     /**
@@ -26285,7 +26522,7 @@ class TopLevel {
      * @return UnmarshalJSON|float|null
      */
     public static function sampleUnmarshalJSON(): UnmarshalJSON|float|null {
-        return UnmarshalJSON::sample(); /*362:unmarshalJSON*/
+        return UnmarshalJSON::sample(); /*365:unmarshalJSON*/
     }
 
     /**
@@ -26361,7 +26598,7 @@ class TopLevel {
      * @return Unowned|float|null
      */
     public static function sampleUnowned(): Unowned|float|null {
-        return Unowned::sample(); /*363:unowned*/
+        return Unowned::sample(); /*366:unowned*/
     }
 
     /**
@@ -26437,7 +26674,7 @@ class TopLevel {
      * @return Unsafe|float|null
      */
     public static function sampleUnsafe(): Unsafe|float|null {
-        return Unsafe::sample(); /*364:unsafe*/
+        return Unsafe::sample(); /*367:unsafe*/
     }
 
     /**
@@ -26513,7 +26750,7 @@ class TopLevel {
      * @return Unsigned|float|null
      */
     public static function sampleUnsigned(): Unsigned|float|null {
-        return Unsigned::sample(); /*365:unsigned*/
+        return Unsigned::sample(); /*368:unsigned*/
     }
 
     /**
@@ -26589,7 +26826,7 @@ class TopLevel {
      * @return UseSerializers|float|null
      */
     public static function sampleUseSerializers(): UseSerializers|float|null {
-        return UseSerializers::sample(); /*366:useSerializers*/
+        return UseSerializers::sample(); /*369:useSerializers*/
     }
 
     /**
@@ -26665,7 +26902,7 @@ class TopLevel {
      * @return Ushort|float|null
      */
     public static function sampleUshort(): Ushort|float|null {
-        return Ushort::sample(); /*367:ushort*/
+        return Ushort::sample(); /*370:ushort*/
     }
 
     /**
@@ -26741,7 +26978,7 @@ class TopLevel {
      * @return Using|float|null
      */
     public static function sampleUsing(): Using|float|null {
-        return Using::sample(); /*368:using*/
+        return Using::sample(); /*371:using*/
     }
 
     /**
@@ -26817,7 +27054,7 @@ class TopLevel {
      * @return Utf8JSONReader|float|null
      */
     public static function sampleUtf8JSONReader(): Utf8JSONReader|float|null {
-        return Utf8JSONReader::sample(); /*369:utf8JSONReader*/
+        return Utf8JSONReader::sample(); /*372:utf8JSONReader*/
     }
 
     /**
@@ -26893,7 +27130,7 @@ class TopLevel {
      * @return Utf8JSONWriter|float|null
      */
     public static function sampleUtf8JSONWriter(): Utf8JSONWriter|float|null {
-        return Utf8JSONWriter::sample(); /*370:utf8JSONWriter*/
+        return Utf8JSONWriter::sample(); /*373:utf8JSONWriter*/
     }
 
     /**
@@ -26969,7 +27206,7 @@ class TopLevel {
      * @return UUID|float|null
      */
     public static function sampleUUID(): UUID|float|null {
-        return UUID::sample(); /*371:uuid*/
+        return UUID::sample(); /*374:uuid*/
     }
 
     /**
@@ -27045,7 +27282,7 @@ class TopLevel {
      * @return VarClass|float|null
      */
     public static function sampleVar(): VarClass|float|null {
-        return VarClass::sample(); /*372:var*/
+        return VarClass::sample(); /*375:var*/
     }
 
     /**
@@ -27121,7 +27358,7 @@ class TopLevel {
      * @return Virtual|float|null
      */
     public static function sampleVirtual(): Virtual|float|null {
-        return Virtual::sample(); /*373:virtual*/
+        return Virtual::sample(); /*376:virtual*/
     }
 
     /**
@@ -27197,7 +27434,7 @@ class TopLevel {
      * @return VoidClass|float|null
      */
     public static function sampleVoid(): VoidClass|float|null {
-        return VoidClass::sample(); /*374:void*/
+        return VoidClass::sample(); /*377:void*/
     }
 
     /**
@@ -27273,7 +27510,7 @@ class TopLevel {
      * @return Volatile|float|null
      */
     public static function sampleVolatile(): Volatile|float|null {
-        return Volatile::sample(); /*375:volatile*/
+        return Volatile::sample(); /*378:volatile*/
     }
 
     /**
@@ -27349,7 +27586,7 @@ class TopLevel {
      * @return WcharT|float|null
      */
     public static function sampleWcharT(): WcharT|float|null {
-        return WcharT::sample(); /*376:wcharT*/
+        return WcharT::sample(); /*379:wcharT*/
     }
 
     /**
@@ -27425,7 +27662,7 @@ class TopLevel {
      * @return Weak|float|null
      */
     public static function sampleWeak(): Weak|float|null {
-        return Weak::sample(); /*377:weak*/
+        return Weak::sample(); /*380:weak*/
     }
 
     /**
@@ -27501,7 +27738,7 @@ class TopLevel {
      * @return Where|float|null
      */
     public static function sampleWhere(): Where|float|null {
-        return Where::sample(); /*378:where*/
+        return Where::sample(); /*381:where*/
     }
 
     /**
@@ -27577,7 +27814,7 @@ class TopLevel {
      * @return WhileClass|float|null
      */
     public static function sampleWhile(): WhileClass|float|null {
-        return WhileClass::sample(); /*379:while*/
+        return WhileClass::sample(); /*382:while*/
     }
 
     /**
@@ -27653,7 +27890,7 @@ class TopLevel {
      * @return WillSet|float|null
      */
     public static function sampleWillSet(): WillSet|float|null {
-        return WillSet::sample(); /*380:willSet*/
+        return WillSet::sample(); /*383:willSet*/
     }
 
     /**
@@ -27729,7 +27966,7 @@ class TopLevel {
      * @return With|float|null
      */
     public static function sampleWith(): With|float|null {
-        return With::sample(); /*381:with*/
+        return With::sample(); /*384:with*/
     }
 
     /**
@@ -27805,7 +28042,7 @@ class TopLevel {
      * @return XorClass|float|null
      */
     public static function sampleXor(): XorClass|float|null {
-        return XorClass::sample(); /*382:xor*/
+        return XorClass::sample(); /*385:xor*/
     }
 
     /**
@@ -27881,7 +28118,7 @@ class TopLevel {
      * @return XorEq|float|null
      */
     public static function sampleXorEq(): XorEq|float|null {
-        return XorEq::sample(); /*383:xorEq*/
+        return XorEq::sample(); /*386:xorEq*/
     }
 
     /**
@@ -27957,7 +28194,7 @@ class TopLevel {
      * @return Yes|float|null
      */
     public static function sampleYes(): Yes|float|null {
-        return Yes::sample(); /*384:yes*/
+        return Yes::sample(); /*387:yes*/
     }
 
     /**
@@ -28033,7 +28270,7 @@ class TopLevel {
      * @return YieldClass|float|null
      */
     public static function sampleYield(): YieldClass|float|null {
-        return YieldClass::sample(); /*385:yield*/
+        return YieldClass::sample(); /*388:yield*/
     }
 
     /**
@@ -28225,6 +28462,7 @@ class TopLevel {
         || TopLevel::validateLeft($this->left)
         || TopLevel::validateLet($this->let)
         || TopLevel::validateList($this->list)
+        || TopLevel::validateLocalDate($this->localDate)
         || TopLevel::validateLocale($this->locale)
         || TopLevel::validateLock($this->lock)
         || TopLevel::validateLong($this->long)
@@ -28265,6 +28503,8 @@ class TopLevel {
         || TopLevel::validateObjectReader($this->objectReader)
         || TopLevel::validateObjectWriter($this->objectWriter)
         || TopLevel::validateOf($this->of)
+        || TopLevel::validateOffsetDateTime($this->offsetDateTime)
+        || TopLevel::validateOffsetTime($this->offsetTime)
         || TopLevel::validateOneway($this->oneway)
         || TopLevel::validateOpen($this->open)
         || TopLevel::validateOperator($this->operator)
@@ -28588,6 +28828,7 @@ class TopLevel {
         $out->{'left'} = $this->toLeft();
         $out->{'let'} = $this->toLet();
         $out->{'list'} = $this->toList();
+        $out->{'LocalDate'} = $this->toLocalDate();
         $out->{'Locale'} = $this->toLocale();
         $out->{'lock'} = $this->toLock();
         $out->{'long'} = $this->toLong();
@@ -28628,6 +28869,8 @@ class TopLevel {
         $out->{'ObjectReader'} = $this->toObjectReader();
         $out->{'ObjectWriter'} = $this->toObjectWriter();
         $out->{'of'} = $this->toOf();
+        $out->{'OffsetDateTime'} = $this->toOffsetDateTime();
+        $out->{'OffsetTime'} = $this->toOffsetTime();
         $out->{'oneway'} = $this->toOneway();
         $out->{'open'} = $this->toOpen();
         $out->{'operator'} = $this->toOperator();
@@ -28953,6 +29196,7 @@ class TopLevel {
         ,TopLevel::fromLeft($obj->{'left'})
         ,TopLevel::fromLet($obj->{'let'})
         ,TopLevel::fromList($obj->{'list'})
+        ,TopLevel::fromLocalDate($obj->{'LocalDate'})
         ,TopLevel::fromLocale($obj->{'Locale'})
         ,TopLevel::fromLock($obj->{'lock'})
         ,TopLevel::fromLong($obj->{'long'})
@@ -28993,6 +29237,8 @@ class TopLevel {
         ,TopLevel::fromObjectReader($obj->{'ObjectReader'})
         ,TopLevel::fromObjectWriter($obj->{'ObjectWriter'})
         ,TopLevel::fromOf($obj->{'of'})
+        ,TopLevel::fromOffsetDateTime($obj->{'OffsetDateTime'})
+        ,TopLevel::fromOffsetTime($obj->{'OffsetTime'})
         ,TopLevel::fromOneway($obj->{'oneway'})
         ,TopLevel::fromOpen($obj->{'open'})
         ,TopLevel::fromOperator($obj->{'operator'})
@@ -29316,6 +29562,7 @@ class TopLevel {
         ,TopLevel::sampleLeft()
         ,TopLevel::sampleLet()
         ,TopLevel::sampleList()
+        ,TopLevel::sampleLocalDate()
         ,TopLevel::sampleLocale()
         ,TopLevel::sampleLock()
         ,TopLevel::sampleLong()
@@ -29356,6 +29603,8 @@ class TopLevel {
         ,TopLevel::sampleObjectReader()
         ,TopLevel::sampleObjectWriter()
         ,TopLevel::sampleOf()
+        ,TopLevel::sampleOffsetDateTime()
+        ,TopLevel::sampleOffsetTime()
         ,TopLevel::sampleOneway()
         ,TopLevel::sampleOpen()
         ,TopLevel::sampleOperator()
@@ -37501,6 +37750,51 @@ class ListClass {
     }
 }
 
+// This is an autogenerated file:LocalDate
+
+class LocalDate {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return LocalDate
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): LocalDate {
+        return new LocalDate(
+        );
+    }
+
+    /**
+     * @return LocalDate
+     */
+    public static function sample(): LocalDate {
+        return new LocalDate(
+        );
+    }
+}
+
 // This is an autogenerated file:LocaleClass
 
 class LocaleClass {
@@ -39211,6 +39505,96 @@ class Of {
     }
 }
 
+// This is an autogenerated file:OffsetDateTime
+
+class OffsetDateTime {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return OffsetDateTime
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): OffsetDateTime {
+        return new OffsetDateTime(
+        );
+    }
+
+    /**
+     * @return OffsetDateTime
+     */
+    public static function sample(): OffsetDateTime {
+        return new OffsetDateTime(
+        );
+    }
+}
+
+// This is an autogenerated file:OffsetTime
+
+class OffsetTime {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return OffsetTime
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): OffsetTime {
+        return new OffsetTime(
+        );
+    }
+
+    /**
+     * @return OffsetTime
+     */
+    public static function sample(): OffsetTime {
+        return new OffsetTime(
+        );
+    }
+}
+
 // This is an autogenerated file:Oneway
 
 class Oneway {
diff --git a/base/schema-pike/test/inputs/schema/date-time.schema/default/TopLevel.pmod b/head/schema-pike/test/inputs/schema/date-time.schema/default/TopLevel.pmod
index 642fe6f..5134e95 100644
--- a/base/schema-pike/test/inputs/schema/date-time.schema/default/TopLevel.pmod
+++ b/head/schema-pike/test/inputs/schema/date-time.schema/default/TopLevel.pmod
@@ -13,17 +13,23 @@
 // match the expected interface, even if the JSON itself is valid.
 
 class TopLevel {
-    array(ComplexUnionArray) complex_union_array; // json: "complex-union-array"
-    string                   date;                // json: "date"
-    string                   date_time;           // json: "date-time"
-    string                   time;                // json: "time"
-    array(string)            union_array;         // json: "union-array"
+    array(ComplexUnionArray) complex_union_array;    // json: "complex-union-array"
+    string                   date;                   // json: "date"
+    string                   date_time;              // json: "date-time"
+    LocalDate|mixed          local_date_class;       // json: "local-date-class"
+    OffsetDateTime|mixed     offset_date_time_class; // json: "offset-date-time-class"
+    OffsetTime|mixed         offset_time_class;      // json: "offset-time-class"
+    string                   time;                   // json: "time"
+    array(string)            union_array;            // json: "union-array"
 
     string encode_json() {
         mapping(string:mixed) json = ([
             "complex-union-array" : complex_union_array,
             "date" : date,
             "date-time" : date_time,
+            "local-date-class" : local_date_class,
+            "offset-date-time-class" : offset_date_time_class,
+            "offset-time-class" : offset_time_class,
             "time" : time,
             "union-array" : union_array,
         ]);
@@ -38,6 +44,9 @@ TopLevel TopLevel_from_JSON(mixed json) {
     retval.complex_union_array = json["complex-union-array"];
     retval.date = json["date"];
     retval.date_time = json["date-time"];
+    retval.local_date_class = json["local-date-class"];
+    retval.offset_date_time_class = json["offset-date-time-class"];
+    retval.offset_time_class = json["offset-time-class"];
     retval.time = json["time"];
     retval.union_array = json["union-array"];
 
@@ -49,3 +58,51 @@ typedef int|string ComplexUnionArray;
 ComplexUnionArray ComplexUnionArray_from_JSON(mixed json) {
     return json;
 }
+
+class LocalDate {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+LocalDate LocalDate_from_JSON(mixed json) {
+    LocalDate retval = LocalDate();
+
+    return retval;
+}
+
+class OffsetDateTime {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+OffsetDateTime OffsetDateTime_from_JSON(mixed json) {
+    OffsetDateTime retval = OffsetDateTime();
+
+    return retval;
+}
+
+class OffsetTime {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+OffsetTime OffsetTime_from_JSON(mixed json) {
+    OffsetTime retval = OffsetTime();
+
+    return retval;
+}
diff --git a/base/schema-pike/test/inputs/schema/keyword-enum.schema/default/TopLevel.pmod b/head/schema-pike/test/inputs/schema/keyword-enum.schema/default/TopLevel.pmod
index 39efd9d..c96b055 100644
--- a/base/schema-pike/test/inputs/schema/keyword-enum.schema/default/TopLevel.pmod
+++ b/head/schema-pike/test/inputs/schema/keyword-enum.schema/default/TopLevel.pmod
@@ -215,6 +215,7 @@ enum Enum {
     LEFT = "left",                                                 // json: "left"
     LET = "let",                                                   // json: "let"
     LIST = "list",                                                 // json: "list"
+    LOCAL_DATE = "LocalDate",                                      // json: "LocalDate"
     LONG_NODE = "LongNode",                                        // json: "LongNode"
     LOCALE = "Locale",                                             // json: "Locale"
     LOCK = "lock",                                                 // json: "lock"
@@ -250,6 +251,8 @@ enum Enum {
     NULLPTR = "nullptr",                                           // json: "nullptr"
     NUMBER = "number",                                             // json: "number"
     OBJECT = "object",                                             // json: "object"
+    OFFSET_DATE_TIME = "OffsetDateTime",                           // json: "OffsetDateTime"
+    OFFSET_TIME = "OffsetTime",                                    // json: "OffsetTime"
     OBJECT_NODE = "ObjectNode",                                    // json: "ObjectNode"
     OBJECT_MAPPER = "ObjectMapper",                                // json: "ObjectMapper"
     OBJECT_READER = "ObjectReader",                                // json: "ObjectReader"
@@ -391,5 +394,5 @@ enum Enum {
 }
 
 Enum Enum_from_JSON(mixed json) {
-    if(!zero_type(json)&&json != "_"&&json != "_Bool"&&json != "_Complex"&&json != "_Imaginery"&&json != "abstract"&&json != "alignas"&&json != "alignof"&&json != "and"&&json != "and_eq"&&json != "any"&&json != "Any"&&json != "ArrayNode"&&json != "array"&&json != "as"&&json != "asm"&&json != "assert"&&json != "associatedtype"&&json != "associativity"&&json != "async"&&json != "atomic"&&json != "atomic_cancel"&&json != "atomic_commit"&&json != "atomic_noexcept"&&json != "auto"&&json != "await"&&json != "base"&&json != "bitand"&&json != "bitor"&&json != "BOOL"&&json != "bool"&&json != "boolean"&&json != "BooleanNode"&&json != "break"&&json != "bycopy"&&json != "byref"&&json != "byte"&&json != "Calendar"&&json != "case"&&json != "catch"&&json != "chan"&&json != "char"&&json != "char16_t"&&json != "char32_t"&&json != "checked"&&json != "class"&&json != "Class"&&json != "clone"&&json != "co_await"&&json != "co_return"&&json != "co_yield"&&json != "Codable"&&json != "CodingKey"&&json != "CodingKeys"&&json != "compl"&&json != "concept"&&json != "console"&&json != "const"&&json != "const_cast"&&json != "constexpr"&&json != "constructor"&&json != "continue"&&json != "convenience"&&json != "convert"&&json != "converter"&&json != "CultureInfo"&&json != "date"&&json != "date_parse_handling"&&json != "DateFormatter"&&json != "DateOnly"&&json != "DateOnlyConverter"&&json != "DateTime"&&json != "DateTimeStyles"&&json != "debugger"&&json != "decimal"&&json != "declare"&&json != "DeserializationFeature"&&json != "decltype"&&json != "decode_string"&&json != "Decoder"&&json != "DecodingError"&&json != "def"&&json != "default"&&json != "defer"&&json != "deinit"&&json != "del"&&json != "delegate"&&json != "delete"&&json != "dict"&&json != "dictionary"&&json != "didSet"&&json != "do"&&json != "double"&&json != "DoubleNode"&&json != "dynamic"&&json != "dynamic_cast"&&json != "elif"&&json != "else"&&json != "encode_quick_type"&&json != "Encoder"&&json != "enum"&&json != "EnumValues"&&json != "Equatable"&&json != "equalityContract"&&json != "event"&&json != "except"&&json != "exception"&&json != "explicit"&&json != "export"&&json != "exposing"&&json != "extends"&&json != "extension"&&json != "extern"&&json != "fallthrough"&&json != "false"&&json != "False"&&json != "fileprivate"&&json != "final"&&json != "finally"&&json != "fixed"&&json != "float"&&json != "for"&&json != "foreach"&&json != "FormatException"&&json != "friend"&&json != "from"&&json != "from_dict"&&json != "from_json"&&json != "func"&&json != "function"&&json != "get"&&json != "global"&&json != "go"&&json != "goto"&&json != "guard"&&json != "Hashable"&&json != "hashCode"&&json != "Hasher"&&json != "hasOwnProperty"&&json != "id"&&json != "if"&&json != "IMP"&&json != "implements"&&json != "implicit"&&json != "import"&&json != "in"&&json != "indirect"&&json != "infix"&&json != "init"&&json != "inline"&&json != "inout"&&json != "instanceof"&&json != "int"&&json != "IntNode"&&json != "interface"&&json != "internal"&&json != "IsoDateTimeOffsetConverter"&&json != "iterable"&&json != "is"&&json != "jdec"&&json != "jenc"&&json != "jpipe"&&json != "json"&&json != "json_converter"&&json != "json_serializer"&&json != "json_token"&&json != "json_writer"&&json != "JSONAny"&&json != "JSONCodingKey"&&json != "JSONDecoder"&&json != "JSONEncoder"&&json != "JsonException"&&json != "JsonGenerator"&&json != "JsonNode"&&json != "JSONNull"&&json != "JsonParser"&&json != "JsonReader"&&json != "JsonTokenType"&&json != "lambda"&&json != "lazy"&&json != "left"&&json != "let"&&json != "list"&&json != "LongNode"&&json != "Locale"&&json != "lock"&&json != "long"&&json != "map"&&json != "MarshalJSON"&&json != "MapEntry"&&json != "metadata_property_handling"&&json != "module"&&json != "mutable"&&json != "mutating"&&json != "namespace"&&json != "native"&&json != "new"&&json != "newtonsoft"&&json != "nil"&&json != "NullNode"&&json != "NO"&&json != "noexcept"&&json != "nonatomic"&&json != "none"&&json != "None"&&json != "nonlocal"&&json != "nonmutating"&&json != "NSObject"&&json != "noSuchMethod"&&json != "not"&&json != "not_eq"&&json != "NSError"&&json != "NSString"&&json != "NULL"&&json != "null"&&json != "nullptr"&&json != "number"&&json != "object"&&json != "ObjectNode"&&json != "ObjectMapper"&&json != "ObjectReader"&&json != "ObjectWriter"&&json != "of"&&json != "oneway"&&json != "open"&&json != "operator"&&json != "optional"&&json != "or"&&json != "or_eq"&&json != "out"&&json != "override"&&json != "package"&&json != "params"&&json != "pass"&&json != "port"&&json != "postfix"&&json != "precedence"&&json != "prefix"&&json != "print"&&json != "printf"&&json != "printMembers"&&json != "private"&&json != "protected"&&json != "Protocol"&&json != "protocol"&&json != "public"&&json != "quicktype"&&json != "raise"&&json != "range"&&json != "readonly"&&json != "ref"&&json != "RegExp"&&json != "register"&&json != "reinterpret_cast"&&json != "repeat"&&json != "require"&&json != "required"&&json != "requires"&&json != "restrict"&&json != "retain"&&json != "rethrows"&&json != "return"&&json != "right"&&json != "runtimeType"&&json != "s"&&json != "sbyte"&&json != "sealed"&&json != "SEL"&&json != "select"&&json != "Self"&&json != "Serializable"&&json != "self"&&json != "Sendable"&&json != "serialize"&&json != "SerialName"&&json != "KSerializer"&&json != "PrimitiveKind"&&json != "SerialDescriptor"&&json != "SerializationFeature"&&json != "SerializerProvider"&&json != "set"&&json != "short"&&json != "signed"&&json != "SimpleModule"&&json != "sizeof"&&json != "stackalloc"&&json != "Standards"&&json != "static"&&json != "static_assert"&&json != "static_cast"&&json != "StdDeserializer"&&json != "StdSerializer"&&json != "strictfp"&&json != "string"&&json != "struct"&&json != "subscript"&&json != "super"&&json != "switch"&&json != "symbol"&&json != "synchronized"&&json != "system"&&json != "template"&&json != "then"&&json != "this"&&json != "TextNode"&&json != "thread_local"&&json != "throw"&&json != "throws"&&json != "TimeOnly"&&json != "TimeOnlyConverter"&&json != "TimeZone"&&json != "to_json"&&json != "top_level"&&json != "toString"&&json != "to_dict"&&json != "transient"&&json != "True"&&json != "true"&&json != "try"&&json != "Type"&&json != "type"&&json != "typealias"&&json != "typedef"&&json != "typeid"&&json != "typename"&&json != "typeof"&&json != "uint"&&json != "ulong"&&json != "unchecked"&&json != "undefined"&&json != "union"&&json != "UnmarshalJSON"&&json != "UseSerializers"&&json != "unowned"&&json != "unsafe"&&json != "unsigned"&&json != "ushort"&&json != "using"&&json != "Utf8JsonReader"&&json != "Utf8JsonWriter"&&json != "UUID"&&json != "var"&&json != "virtual"&&json != "void"&&json != "volatile"&&json != "wchar_t"&&json != "weak"&&json != "where"&&json != "while"&&json != "willSet"&&json != "with"&&json != "xor"&&json != "xor_eq"&&json != "YES"&&json != "yield"&&json != "dummy")error("enum");return json;
+    if(!zero_type(json)&&json != "_"&&json != "_Bool"&&json != "_Complex"&&json != "_Imaginery"&&json != "abstract"&&json != "alignas"&&json != "alignof"&&json != "and"&&json != "and_eq"&&json != "any"&&json != "Any"&&json != "ArrayNode"&&json != "array"&&json != "as"&&json != "asm"&&json != "assert"&&json != "associatedtype"&&json != "associativity"&&json != "async"&&json != "atomic"&&json != "atomic_cancel"&&json != "atomic_commit"&&json != "atomic_noexcept"&&json != "auto"&&json != "await"&&json != "base"&&json != "bitand"&&json != "bitor"&&json != "BOOL"&&json != "bool"&&json != "boolean"&&json != "BooleanNode"&&json != "break"&&json != "bycopy"&&json != "byref"&&json != "byte"&&json != "Calendar"&&json != "case"&&json != "catch"&&json != "chan"&&json != "char"&&json != "char16_t"&&json != "char32_t"&&json != "checked"&&json != "class"&&json != "Class"&&json != "clone"&&json != "co_await"&&json != "co_return"&&json != "co_yield"&&json != "Codable"&&json != "CodingKey"&&json != "CodingKeys"&&json != "compl"&&json != "concept"&&json != "console"&&json != "const"&&json != "const_cast"&&json != "constexpr"&&json != "constructor"&&json != "continue"&&json != "convenience"&&json != "convert"&&json != "converter"&&json != "CultureInfo"&&json != "date"&&json != "date_parse_handling"&&json != "DateFormatter"&&json != "DateOnly"&&json != "DateOnlyConverter"&&json != "DateTime"&&json != "DateTimeStyles"&&json != "debugger"&&json != "decimal"&&json != "declare"&&json != "DeserializationFeature"&&json != "decltype"&&json != "decode_string"&&json != "Decoder"&&json != "DecodingError"&&json != "def"&&json != "default"&&json != "defer"&&json != "deinit"&&json != "del"&&json != "delegate"&&json != "delete"&&json != "dict"&&json != "dictionary"&&json != "didSet"&&json != "do"&&json != "double"&&json != "DoubleNode"&&json != "dynamic"&&json != "dynamic_cast"&&json != "elif"&&json != "else"&&json != "encode_quick_type"&&json != "Encoder"&&json != "enum"&&json != "EnumValues"&&json != "Equatable"&&json != "equalityContract"&&json != "event"&&json != "except"&&json != "exception"&&json != "explicit"&&json != "export"&&json != "exposing"&&json != "extends"&&json != "extension"&&json != "extern"&&json != "fallthrough"&&json != "false"&&json != "False"&&json != "fileprivate"&&json != "final"&&json != "finally"&&json != "fixed"&&json != "float"&&json != "for"&&json != "foreach"&&json != "FormatException"&&json != "friend"&&json != "from"&&json != "from_dict"&&json != "from_json"&&json != "func"&&json != "function"&&json != "get"&&json != "global"&&json != "go"&&json != "goto"&&json != "guard"&&json != "Hashable"&&json != "hashCode"&&json != "Hasher"&&json != "hasOwnProperty"&&json != "id"&&json != "if"&&json != "IMP"&&json != "implements"&&json != "implicit"&&json != "import"&&json != "in"&&json != "indirect"&&json != "infix"&&json != "init"&&json != "inline"&&json != "inout"&&json != "instanceof"&&json != "int"&&json != "IntNode"&&json != "interface"&&json != "internal"&&json != "IsoDateTimeOffsetConverter"&&json != "iterable"&&json != "is"&&json != "jdec"&&json != "jenc"&&json != "jpipe"&&json != "json"&&json != "json_converter"&&json != "json_serializer"&&json != "json_token"&&json != "json_writer"&&json != "JSONAny"&&json != "JSONCodingKey"&&json != "JSONDecoder"&&json != "JSONEncoder"&&json != "JsonException"&&json != "JsonGenerator"&&json != "JsonNode"&&json != "JSONNull"&&json != "JsonParser"&&json != "JsonReader"&&json != "JsonTokenType"&&json != "lambda"&&json != "lazy"&&json != "left"&&json != "let"&&json != "list"&&json != "LocalDate"&&json != "LongNode"&&json != "Locale"&&json != "lock"&&json != "long"&&json != "map"&&json != "MarshalJSON"&&json != "MapEntry"&&json != "metadata_property_handling"&&json != "module"&&json != "mutable"&&json != "mutating"&&json != "namespace"&&json != "native"&&json != "new"&&json != "newtonsoft"&&json != "nil"&&json != "NullNode"&&json != "NO"&&json != "noexcept"&&json != "nonatomic"&&json != "none"&&json != "None"&&json != "nonlocal"&&json != "nonmutating"&&json != "NSObject"&&json != "noSuchMethod"&&json != "not"&&json != "not_eq"&&json != "NSError"&&json != "NSString"&&json != "NULL"&&json != "null"&&json != "nullptr"&&json != "number"&&json != "object"&&json != "OffsetDateTime"&&json != "OffsetTime"&&json != "ObjectNode"&&json != "ObjectMapper"&&json != "ObjectReader"&&json != "ObjectWriter"&&json != "of"&&json != "oneway"&&json != "open"&&json != "operator"&&json != "optional"&&json != "or"&&json != "or_eq"&&json != "out"&&json != "override"&&json != "package"&&json != "params"&&json != "pass"&&json != "port"&&json != "postfix"&&json != "precedence"&&json != "prefix"&&json != "print"&&json != "printf"&&json != "printMembers"&&json != "private"&&json != "protected"&&json != "Protocol"&&json != "protocol"&&json != "public"&&json != "quicktype"&&json != "raise"&&json != "range"&&json != "readonly"&&json != "ref"&&json != "RegExp"&&json != "register"&&json != "reinterpret_cast"&&json != "repeat"&&json != "require"&&json != "required"&&json != "requires"&&json != "restrict"&&json != "retain"&&json != "rethrows"&&json != "return"&&json != "right"&&json != "runtimeType"&&json != "s"&&json != "sbyte"&&json != "sealed"&&json != "SEL"&&json != "select"&&json != "Self"&&json != "Serializable"&&json != "self"&&json != "Sendable"&&json != "serialize"&&json != "SerialName"&&json != "KSerializer"&&json != "PrimitiveKind"&&json != "SerialDescriptor"&&json != "SerializationFeature"&&json != "SerializerProvider"&&json != "set"&&json != "short"&&json != "signed"&&json != "SimpleModule"&&json != "sizeof"&&json != "stackalloc"&&json != "Standards"&&json != "static"&&json != "static_assert"&&json != "static_cast"&&json != "StdDeserializer"&&json != "StdSerializer"&&json != "strictfp"&&json != "string"&&json != "struct"&&json != "subscript"&&json != "super"&&json != "switch"&&json != "symbol"&&json != "synchronized"&&json != "system"&&json != "template"&&json != "then"&&json != "this"&&json != "TextNode"&&json != "thread_local"&&json != "throw"&&json != "throws"&&json != "TimeOnly"&&json != "TimeOnlyConverter"&&json != "TimeZone"&&json != "to_json"&&json != "top_level"&&json != "toString"&&json != "to_dict"&&json != "transient"&&json != "True"&&json != "true"&&json != "try"&&json != "Type"&&json != "type"&&json != "typealias"&&json != "typedef"&&json != "typeid"&&json != "typename"&&json != "typeof"&&json != "uint"&&json != "ulong"&&json != "unchecked"&&json != "undefined"&&json != "union"&&json != "UnmarshalJSON"&&json != "UseSerializers"&&json != "unowned"&&json != "unsafe"&&json != "unsigned"&&json != "ushort"&&json != "using"&&json != "Utf8JsonReader"&&json != "Utf8JsonWriter"&&json != "UUID"&&json != "var"&&json != "virtual"&&json != "void"&&json != "volatile"&&json != "wchar_t"&&json != "weak"&&json != "where"&&json != "while"&&json != "willSet"&&json != "with"&&json != "xor"&&json != "xor_eq"&&json != "YES"&&json != "yield"&&json != "dummy")error("enum");return json;
 }
diff --git a/base/schema-pike/test/inputs/schema/keyword-unions.schema/default/TopLevel.pmod b/head/schema-pike/test/inputs/schema/keyword-unions.schema/default/TopLevel.pmod
index b97ee4f..efcb7e2 100644
--- a/base/schema-pike/test/inputs/schema/keyword-unions.schema/default/TopLevel.pmod
+++ b/head/schema-pike/test/inputs/schema/keyword-unions.schema/default/TopLevel.pmod
@@ -197,6 +197,7 @@ class TopLevel {
     UnionLeft                       left;                           // json: "left"
     UnionLet                        let;                            // json: "let"
     UnionList                       list;                           // json: "list"
+    UnionLocalDate                  local_date;                     // json: "LocalDate"
     UnionLocale                     locale;                         // json: "Locale"
     UnionLock                       lock;                           // json: "lock"
     UnionLong                       long;                           // json: "long"
@@ -237,6 +238,8 @@ class TopLevel {
     UnionObjectReader               object_reader;                  // json: "ObjectReader"
     UnionObjectWriter               object_writer;                  // json: "ObjectWriter"
     UnionOf                         of;                             // json: "of"
+    UnionOffsetDateTime             offset_date_time;               // json: "OffsetDateTime"
+    UnionOffsetTime                 offset_time;                    // json: "OffsetTime"
     UnionOneway                     oneway;                         // json: "oneway"
     UnionOpen                       open;                           // json: "open"
     UnionOperator                   operator;                       // json: "operator"
@@ -555,6 +558,7 @@ class TopLevel {
             "left" : left,
             "let" : let,
             "list" : list,
+            "LocalDate" : local_date,
             "Locale" : locale,
             "lock" : lock,
             "long" : long,
@@ -595,6 +599,8 @@ class TopLevel {
             "ObjectReader" : object_reader,
             "ObjectWriter" : object_writer,
             "of" : of,
+            "OffsetDateTime" : offset_date_time,
+            "OffsetTime" : offset_time,
             "oneway" : oneway,
             "open" : open,
             "operator" : operator,
@@ -1102,6 +1108,8 @@ TopLevel TopLevel_from_JSON(mixed json) {
     retval.let = json["let"];
     if (arrayp(json["list"])) error("Unexpected array");
     retval.list = json["list"];
+    if (arrayp(json["LocalDate"])) error("Unexpected array");
+    retval.local_date = json["LocalDate"];
     if (arrayp(json["Locale"])) error("Unexpected array");
     retval.locale = json["Locale"];
     if (arrayp(json["lock"])) error("Unexpected array");
@@ -1182,6 +1190,10 @@ TopLevel TopLevel_from_JSON(mixed json) {
     retval.object_writer = json["ObjectWriter"];
     if (arrayp(json["of"])) error("Unexpected array");
     retval.of = json["of"];
+    if (arrayp(json["OffsetDateTime"])) error("Unexpected array");
+    retval.offset_date_time = json["OffsetDateTime"];
+    if (arrayp(json["OffsetTime"])) error("Unexpected array");
+    retval.offset_time = json["OffsetTime"];
     if (arrayp(json["oneway"])) error("Unexpected array");
     retval.oneway = json["oneway"];
     if (arrayp(json["open"])) error("Unexpected array");
@@ -4836,6 +4848,28 @@ List List_from_JSON(mixed json) {
     return retval;
 }
 
+typedef float|LocalDate UnionLocalDate;
+
+UnionLocalDate UnionLocalDate_from_JSON(mixed json) {
+    return json;
+}
+
+class LocalDate {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+LocalDate LocalDate_from_JSON(mixed json) {
+    LocalDate retval = LocalDate();
+
+    return retval;
+}
+
 typedef float|Locale UnionLocale;
 
 UnionLocale UnionLocale_from_JSON(mixed json) {
@@ -5650,6 +5684,50 @@ Of Of_from_JSON(mixed json) {
     return retval;
 }
 
+typedef float|OffsetDateTime UnionOffsetDateTime;
+
+UnionOffsetDateTime UnionOffsetDateTime_from_JSON(mixed json) {
+    return json;
+}
+
+class OffsetDateTime {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+OffsetDateTime OffsetDateTime_from_JSON(mixed json) {
+    OffsetDateTime retval = OffsetDateTime();
+
+    return retval;
+}
+
+typedef float|OffsetTime UnionOffsetTime;
+
+UnionOffsetTime UnionOffsetTime_from_JSON(mixed json) {
+    return json;
+}
+
+class OffsetTime {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+OffsetTime OffsetTime_from_JSON(mixed json) {
+    OffsetTime retval = OffsetTime();
+
+    return retval;
+}
+
 typedef float|Oneway UnionOneway;
 
 UnionOneway UnionOneway_from_JSON(mixed json) {
diff --git a/base/schema-python/test/inputs/schema/date-time.schema/default/quicktype.py b/head/schema-python/test/inputs/schema/date-time.schema/default/quicktype.py
index 3e734ee..2be9df0 100644
--- a/base/schema-python/test/inputs/schema/date-time.schema/default/quicktype.py
+++ b/head/schema-python/test/inputs/schema/date-time.schema/default/quicktype.py
@@ -43,6 +43,11 @@ def from_time(x: Any) -> datetime.time:
     return dateutil.parser.parse(x).timetz()
 
 
+def from_none(x: Any) -> Any:
+    assert x is None
+    return x
+
+
 def to_enum(c: Type[EnumT], x: Any) -> EnumT:
     assert isinstance(x, c)
     return x.value
@@ -58,6 +63,48 @@ class ComplexUnionArrayEnum(Enum):
     BAR = "bar"
 
 
+@dataclass
+class LocalDate:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'LocalDate':
+        assert isinstance(obj, dict)
+        return LocalDate()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
+@dataclass
+class OffsetDateTime:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'OffsetDateTime':
+        assert isinstance(obj, dict)
+        return OffsetDateTime()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
+@dataclass
+class OffsetTime:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'OffsetTime':
+        assert isinstance(obj, dict)
+        return OffsetTime()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
 @dataclass
 class TopLevel:
     complex_union_array: list[int | ComplexUnionArrayEnum | datetime.datetime]
@@ -65,6 +112,9 @@ class TopLevel:
     date_time: datetime.datetime
     time: datetime.time
     union_array: list[datetime.date | datetime.time | datetime.datetime]
+    local_date_class: LocalDate | None = None
+    offset_date_time_class: OffsetDateTime | None = None
+    offset_time_class: OffsetTime | None = None
 
     @staticmethod
     def from_dict(obj: Any) -> 'TopLevel':
@@ -74,7 +124,10 @@ class TopLevel:
         date_time = from_datetime(obj["date-time"])
         time = from_time(obj["time"])
         union_array = from_list(lambda x: from_union([from_date, from_time, from_datetime], x), obj["union-array"])
-        return TopLevel(complex_union_array, date, date_time, time, union_array)
+        local_date_class = from_union([LocalDate.from_dict, from_none], obj.get("local-date-class"))
+        offset_date_time_class = from_union([OffsetDateTime.from_dict, from_none], obj.get("offset-date-time-class"))
+        offset_time_class = from_union([OffsetTime.from_dict, from_none], obj.get("offset-time-class"))
+        return TopLevel(complex_union_array, date, date_time, time, union_array, local_date_class, offset_date_time_class, offset_time_class)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -83,6 +136,12 @@ class TopLevel:
         result["date-time"] = self.date_time.isoformat()
         result["time"] = self.time.isoformat()
         result["union-array"] = from_list(lambda x: from_union([lambda x: x.isoformat(), lambda x: x.isoformat(), lambda x: x.isoformat()], x), self.union_array)
+        if self.local_date_class is not None:
+            result["local-date-class"] = from_union([lambda x: to_class(LocalDate, x), from_none], self.local_date_class)
+        if self.offset_date_time_class is not None:
+            result["offset-date-time-class"] = from_union([lambda x: to_class(OffsetDateTime, x), from_none], self.offset_date_time_class)
+        if self.offset_time_class is not None:
+            result["offset-time-class"] = from_union([lambda x: to_class(OffsetTime, x), from_none], self.offset_time_class)
         return result
 
 
diff --git a/base/schema-python/test/inputs/schema/keyword-enum.schema/default/quicktype.py b/head/schema-python/test/inputs/schema/keyword-enum.schema/default/quicktype.py
index 6becfb9..c7d3e2d 100644
--- a/base/schema-python/test/inputs/schema/keyword-enum.schema/default/quicktype.py
+++ b/head/schema-python/test/inputs/schema/keyword-enum.schema/default/quicktype.py
@@ -214,6 +214,7 @@ class EnumEnum(Enum):
     LEFT = "left"
     LET = "let"
     LIST = "list"
+    LOCAL_DATE = "LocalDate"
     LONG_NODE = "LongNode"
     LOCALE = "Locale"
     LOCK = "lock"
@@ -249,6 +250,8 @@ class EnumEnum(Enum):
     NULLPTR = "nullptr"
     NUMBER = "number"
     OBJECT = "object"
+    OFFSET_DATE_TIME = "OffsetDateTime"
+    OFFSET_TIME = "OffsetTime"
     OBJECT_NODE = "ObjectNode"
     OBJECT_MAPPER = "ObjectMapper"
     OBJECT_READER = "ObjectReader"
diff --git a/base/schema-python/test/inputs/schema/keyword-unions.schema/default/quicktype.py b/head/schema-python/test/inputs/schema/keyword-unions.schema/default/quicktype.py
index a6c45f7..389cd77 100644
--- a/base/schema-python/test/inputs/schema/keyword-unions.schema/default/quicktype.py
+++ b/head/schema-python/test/inputs/schema/keyword-unions.schema/default/quicktype.py
@@ -2162,6 +2162,20 @@ class ListClass:
         return result
 
 
+@dataclass
+class LocalDate:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'LocalDate':
+        assert isinstance(obj, dict)
+        return LocalDate()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
 @dataclass
 class Locale:
     pass
@@ -2666,6 +2680,34 @@ class Of:
         return result
 
 
+@dataclass
+class OffsetDateTime:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'OffsetDateTime':
+        assert isinstance(obj, dict)
+        return OffsetDateTime()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
+@dataclass
+class OffsetTime:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'OffsetTime':
+        assert isinstance(obj, dict)
+        return OffsetTime()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
 @dataclass
 class Oneway:
     pass
@@ -5176,6 +5218,7 @@ class TopLevel:
     left: float | Left | None = None
     let: float | Let | None = None
     list: float | ListClass | None = None
+    local_date: float | LocalDate | None = None
     locale: float | Locale | None = None
     lock: float | Lock | None = None
     long: float | Long | None = None
@@ -5216,6 +5259,8 @@ class TopLevel:
     object_reader: float | ObjectReader | None = None
     object_writer: float | ObjectWriter | None = None
     of: float | Of | None = None
+    offset_date_time: float | OffsetDateTime | None = None
+    offset_time: float | OffsetTime | None = None
     oneway: float | Oneway | None = None
     open: float | Open | None = None
     operator: float | Operator | None = None
@@ -5535,6 +5580,7 @@ class TopLevel:
         left = from_union([from_float, Left.from_dict, from_none], obj.get("left"))
         let = from_union([from_float, Let.from_dict, from_none], obj.get("let"))
         list = from_union([from_float, ListClass.from_dict, from_none], obj.get("list"))
+        local_date = from_union([from_float, LocalDate.from_dict, from_none], obj.get("LocalDate"))
         locale = from_union([from_float, Locale.from_dict, from_none], obj.get("Locale"))
         lock = from_union([from_float, Lock.from_dict, from_none], obj.get("lock"))
         long = from_union([from_float, Long.from_dict, from_none], obj.get("long"))
@@ -5575,6 +5621,8 @@ class TopLevel:
         object_reader = from_union([from_float, ObjectReader.from_dict, from_none], obj.get("ObjectReader"))
         object_writer = from_union([from_float, ObjectWriter.from_dict, from_none], obj.get("ObjectWriter"))
         of = from_union([from_float, Of.from_dict, from_none], obj.get("of"))
+        offset_date_time = from_union([from_float, OffsetDateTime.from_dict, from_none], obj.get("OffsetDateTime"))
+        offset_time = from_union([from_float, OffsetTime.from_dict, from_none], obj.get("OffsetTime"))
         oneway = from_union([from_float, Oneway.from_dict, from_none], obj.get("oneway"))
         open = from_union([from_float, Open.from_dict, from_none], obj.get("open"))
         operator = from_union([from_float, Operator.from_dict, from_none], obj.get("operator"))
@@ -5706,7 +5754,7 @@ class TopLevel:
         xor_eq = from_union([from_float, XorEq.from_dict, from_none], obj.get("xor_eq"))
         yes = from_union([from_float, Yes.from_dict, from_none], obj.get("YES"))
         top_level_yield = from_union([from_float, Yield.from_dict, from_none], obj.get("yield"))
-        return TopLevel(empty, purple_bool, complex, imaginery, abstract, alignas, alignof, top_level_and, and_eq, top_level_any, any, array, array_node, top_level_as, asm, top_level_assert, associatedtype, associativity, top_level_async, atomic, atomic_cancel, atomic_commit, atomic_noexcept, auto, top_level_await, base, bitand, bitor, top_level_bool, fluffy_bool, boolean, boolean_node, top_level_break, bycopy, byref, byte, calendar, case, catch, chan, char, char16_t, char32_t, checked, purple_class, top_level_class, clone, co_await, co_return, co_yield, codable, coding_key, coding_keys, compl, concept, console, const, const_cast, constexpr, constructor, top_level_continue, convenience, convert, converter, culture_info, date, date_parse_handling, date_formatter, date_only, date_only_converter, date_time, date_time_styles, debugger, decimal, declare, decltype, decode_string, decoder, decoding_error, top_level_def, default, defer, deinit, top_level_del, delegate, delete, deserialization_feature, top_level_dict, dictionary, did_set, do, double, double_node, dummy, dynamic, dynamic_cast, top_level_elif, top_level_else, encode_quick_type, encoder, enum, enum_values, equality_contract, equatable, event, top_level_except, exception, explicit, export, exposing, extends, extension, extern, fallthrough, top_level_false, false, fileprivate, final, top_level_finally, fixed, top_level_float, top_level_for, foreach, format_exception, friend, top_level_from, top_level_from_dict, from_json, func, function, get, top_level_global, go, goto, guard, hashable, hash_code, hasher, has_own_property, id, top_level_if, imp, implements, implicit, top_level_import, top_level_in, indirect, infix, init, inline, inout, instanceof, top_level_int, interface, internal, int_node, top_level_is, iso_date_time_offset_converter, iterable, jdec, jenc, jpipe, json, json_converter, json_serializer, json_token, json_writer, json_any, json_coding_key, json_decoder, json_encoder, json_exception, json_generator, json_node, json_null, json_parser, json_reader, json_token_type, k_serializer, top_level_lambda, lazy, left, let, list, locale, lock, long, long_node, map, map_entry, marshal_json, metadata_property_handling, module, mutable, mutating, namespace, native, new, newtonsoft, nil, no, noexcept, nonatomic, top_level_none, none, top_level_nonlocal, nonmutating, no_such_method, top_level_not, not_eq, ns_error, ns_object, ns_string, null, top_level_null, null_node, nullptr, number, object, object_mapper, object_node, object_reader, object_writer, of, oneway, open, operator, optional, top_level_or, or_eq, out, override, package, params, top_level_pass, port, postfix, precedence, prefix, primitive_kind, top_level_print, printf, print_members, private, protected, protocol, top_level_protocol, public, quicktype, top_level_raise, range, readonly, ref, reg_exp, register, reinterpret_cast, repeat, require, required, requires, restrict, retain, rethrows, top_level_return, right, runtime_type, s, sbyte, sealed, sel, select, top_level_self, purple_self, sendable, serial_descriptor, serializable, serialization_feature, serialize, serializer_provider, serial_name, set, short, signed, simple_module, sizeof, stackalloc, standards, static, static_assert, static_cast, std_deserializer, std_serializer, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, text_node, then, this, thread_local, throw, throws, time_only, time_only_converter, time_zone, top_level_to_dict, to_json, top_level, to_string, transient, true, top_level_true, top_level_try, type, top_level_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined, union, unmarshal_json, unowned, unsafe, unsigned, use_serializers, ushort, using, utf8_json_reader, utf8_json_writer, uuid, var, virtual, void, volatile, wchar_t, weak, where, top_level_while, will_set, top_level_with, xor, xor_eq, yes, top_level_yield)
+        return TopLevel(empty, purple_bool, complex, imaginery, abstract, alignas, alignof, top_level_and, and_eq, top_level_any, any, array, array_node, top_level_as, asm, top_level_assert, associatedtype, associativity, top_level_async, atomic, atomic_cancel, atomic_commit, atomic_noexcept, auto, top_level_await, base, bitand, bitor, top_level_bool, fluffy_bool, boolean, boolean_node, top_level_break, bycopy, byref, byte, calendar, case, catch, chan, char, char16_t, char32_t, checked, purple_class, top_level_class, clone, co_await, co_return, co_yield, codable, coding_key, coding_keys, compl, concept, console, const, const_cast, constexpr, constructor, top_level_continue, convenience, convert, converter, culture_info, date, date_parse_handling, date_formatter, date_only, date_only_converter, date_time, date_time_styles, debugger, decimal, declare, decltype, decode_string, decoder, decoding_error, top_level_def, default, defer, deinit, top_level_del, delegate, delete, deserialization_feature, top_level_dict, dictionary, did_set, do, double, double_node, dummy, dynamic, dynamic_cast, top_level_elif, top_level_else, encode_quick_type, encoder, enum, enum_values, equality_contract, equatable, event, top_level_except, exception, explicit, export, exposing, extends, extension, extern, fallthrough, top_level_false, false, fileprivate, final, top_level_finally, fixed, top_level_float, top_level_for, foreach, format_exception, friend, top_level_from, top_level_from_dict, from_json, func, function, get, top_level_global, go, goto, guard, hashable, hash_code, hasher, has_own_property, id, top_level_if, imp, implements, implicit, top_level_import, top_level_in, indirect, infix, init, inline, inout, instanceof, top_level_int, interface, internal, int_node, top_level_is, iso_date_time_offset_converter, iterable, jdec, jenc, jpipe, json, json_converter, json_serializer, json_token, json_writer, json_any, json_coding_key, json_decoder, json_encoder, json_exception, json_generator, json_node, json_null, json_parser, json_reader, json_token_type, k_serializer, top_level_lambda, lazy, left, let, list, local_date, locale, lock, long, long_node, map, map_entry, marshal_json, metadata_property_handling, module, mutable, mutating, namespace, native, new, newtonsoft, nil, no, noexcept, nonatomic, top_level_none, none, top_level_nonlocal, nonmutating, no_such_method, top_level_not, not_eq, ns_error, ns_object, ns_string, null, top_level_null, null_node, nullptr, number, object, object_mapper, object_node, object_reader, object_writer, of, offset_date_time, offset_time, oneway, open, operator, optional, top_level_or, or_eq, out, override, package, params, top_level_pass, port, postfix, precedence, prefix, primitive_kind, top_level_print, printf, print_members, private, protected, protocol, top_level_protocol, public, quicktype, top_level_raise, range, readonly, ref, reg_exp, register, reinterpret_cast, repeat, require, required, requires, restrict, retain, rethrows, top_level_return, right, runtime_type, s, sbyte, sealed, sel, select, top_level_self, purple_self, sendable, serial_descriptor, serializable, serialization_feature, serialize, serializer_provider, serial_name, set, short, signed, simple_module, sizeof, stackalloc, standards, static, static_assert, static_cast, std_deserializer, std_serializer, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, text_node, then, this, thread_local, throw, throws, time_only, time_only_converter, time_zone, top_level_to_dict, to_json, top_level, to_string, transient, true, top_level_true, top_level_try, type, top_level_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined, union, unmarshal_json, unowned, unsafe, unsigned, use_serializers, ushort, using, utf8_json_reader, utf8_json_writer, uuid, var, virtual, void, volatile, wchar_t, weak, where, top_level_while, will_set, top_level_with, xor, xor_eq, yes, top_level_yield)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -6078,6 +6126,8 @@ class TopLevel:
             result["let"] = from_union([to_float, lambda x: to_class(Let, x), from_none], self.let)
         if self.list is not None:
             result["list"] = from_union([to_float, lambda x: to_class(ListClass, x), from_none], self.list)
+        if self.local_date is not None:
+            result["LocalDate"] = from_union([to_float, lambda x: to_class(LocalDate, x), from_none], self.local_date)
         if self.locale is not None:
             result["Locale"] = from_union([to_float, lambda x: to_class(Locale, x), from_none], self.locale)
         if self.lock is not None:
@@ -6158,6 +6208,10 @@ class TopLevel:
             result["ObjectWriter"] = from_union([to_float, lambda x: to_class(ObjectWriter, x), from_none], self.object_writer)
         if self.of is not None:
             result["of"] = from_union([to_float, lambda x: to_class(Of, x), from_none], self.of)
+        if self.offset_date_time is not None:
+            result["OffsetDateTime"] = from_union([to_float, lambda x: to_class(OffsetDateTime, x), from_none], self.offset_date_time)
+        if self.offset_time is not None:
+            result["OffsetTime"] = from_union([to_float, lambda x: to_class(OffsetTime, x), from_none], self.offset_time)
         if self.oneway is not None:
             result["oneway"] = from_union([to_float, lambda x: to_class(Oneway, x), from_none], self.oneway)
         if self.open is not None:
diff --git a/base/schema-ruby/test/inputs/schema/date-time.schema/default/TopLevel.rb b/head/schema-ruby/test/inputs/schema/date-time.schema/default/TopLevel.rb
index af05a9c..49a06a1 100644
--- a/base/schema-ruby/test/inputs/schema/date-time.schema/default/TopLevel.rb
+++ b/head/schema-ruby/test/inputs/schema/date-time.schema/default/TopLevel.rb
@@ -63,21 +63,93 @@ class ComplexUnionArrayElement < Dry::Struct
   end
 end
 
+class LocalDate < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class OffsetDateTime < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class OffsetTime < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class TopLevel < Dry::Struct
-  attribute :complex_union_array, Types.Array(Types.Instance(ComplexUnionArrayElement))
-  attribute :date,                Types::String
-  attribute :date_time,           Types::String.constrained(format: /\A\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.\d+)?(?:Z|[+-]\d\d:\d\d)\z/i)
-  attribute :time,                Types::String
-  attribute :union_array,         Types.Array(Types::String)
+  attribute :complex_union_array,    Types.Array(Types.Instance(ComplexUnionArrayElement))
+  attribute :date,                   Types::String
+  attribute :date_time,              Types::String.constrained(format: /\A\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.\d+)?(?:Z|[+-]\d\d:\d\d)\z/i)
+  attribute :local_date_class,       LocalDate.optional
+  attribute :offset_date_time_class, OffsetDateTime.optional
+  attribute :offset_time_class,      OffsetTime.optional
+  attribute :time,                   Types::String
+  attribute :union_array,            Types.Array(Types::String)
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
-      complex_union_array: d.fetch("complex-union-array").map { |x| ComplexUnionArrayElement.from_dynamic!(x) },
-      date:                d.fetch("date"),
-      date_time:           d.fetch("date-time"),
-      time:                d.fetch("time"),
-      union_array:         d.fetch("union-array"),
+      complex_union_array:    d.fetch("complex-union-array").map { |x| ComplexUnionArrayElement.from_dynamic!(x) },
+      date:                   d.fetch("date"),
+      date_time:              d.fetch("date-time"),
+      local_date_class:       d.key?("local-date-class") ? LocalDate.from_dynamic!(d["local-date-class"]) : nil,
+      offset_date_time_class: d.key?("offset-date-time-class") ? OffsetDateTime.from_dynamic!(d["offset-date-time-class"]) : nil,
+      offset_time_class:      d.key?("offset-time-class") ? OffsetTime.from_dynamic!(d["offset-time-class"]) : nil,
+      time:                   d.fetch("time"),
+      union_array:            d.fetch("union-array"),
     )
   end
 
@@ -87,11 +159,14 @@ class TopLevel < Dry::Struct
 
   def to_dynamic
     {
-      "complex-union-array" => complex_union_array.map { |x| x.to_dynamic },
-      "date"                => date,
-      "date-time"           => date_time,
-      "time"                => time,
-      "union-array"         => union_array,
+      "complex-union-array"    => complex_union_array.map { |x| x.to_dynamic },
+      "date"                   => date,
+      "date-time"              => date_time,
+      "local-date-class"       => local_date_class&.to_dynamic,
+      "offset-date-time-class" => offset_date_time_class&.to_dynamic,
+      "offset-time-class"      => offset_time_class&.to_dynamic,
+      "time"                   => time,
+      "union-array"            => union_array,
     }
   end
 
diff --git a/base/schema-ruby/test/inputs/schema/keyword-enum.schema/default/TopLevel.rb b/head/schema-ruby/test/inputs/schema/keyword-enum.schema/default/TopLevel.rb
index dc8b510..4f3568b 100644
--- a/base/schema-ruby/test/inputs/schema/keyword-enum.schema/default/TopLevel.rb
+++ b/head/schema-ruby/test/inputs/schema/keyword-enum.schema/default/TopLevel.rb
@@ -17,7 +17,7 @@ module Types
 
   Hash   = Strict::Hash
   String = Strict::String
-  Enum   = Strict::String.enum("_", "_Bool", "_Complex", "_Imaginery", "abstract", "alignas", "alignof", "and", "and_eq", "any", "Any", "ArrayNode", "array", "as", "asm", "assert", "associatedtype", "associativity", "async", "atomic", "atomic_cancel", "atomic_commit", "atomic_noexcept", "auto", "await", "base", "bitand", "bitor", "BOOL", "bool", "boolean", "BooleanNode", "break", "bycopy", "byref", "byte", "Calendar", "case", "catch", "chan", "char", "char16_t", "char32_t", "checked", "class", "Class", "clone", "co_await", "co_return", "co_yield", "Codable", "CodingKey", "CodingKeys", "compl", "concept", "console", "const", "const_cast", "constexpr", "constructor", "continue", "convenience", "convert", "converter", "CultureInfo", "date", "date_parse_handling", "DateFormatter", "DateOnly", "DateOnlyConverter", "DateTime", "DateTimeStyles", "debugger", "decimal", "declare", "DeserializationFeature", "decltype", "decode_string", "Decoder", "DecodingError", "def", "default", "defer", "deinit", "del", "delegate", "delete", "dict", "dictionary", "didSet", "do", "double", "DoubleNode", "dynamic", "dynamic_cast", "elif", "else", "encode_quick_type", "Encoder", "enum", "EnumValues", "Equatable", "equalityContract", "event", "except", "exception", "explicit", "export", "exposing", "extends", "extension", "extern", "fallthrough", "false", "False", "fileprivate", "final", "finally", "fixed", "float", "for", "foreach", "FormatException", "friend", "from", "from_dict", "from_json", "func", "function", "get", "global", "go", "goto", "guard", "Hashable", "hashCode", "Hasher", "hasOwnProperty", "id", "if", "IMP", "implements", "implicit", "import", "in", "indirect", "infix", "init", "inline", "inout", "instanceof", "int", "IntNode", "interface", "internal", "IsoDateTimeOffsetConverter", "iterable", "is", "jdec", "jenc", "jpipe", "json", "json_converter", "json_serializer", "json_token", "json_writer", "JSONAny", "JSONCodingKey", "JSONDecoder", "JSONEncoder", "JsonException", "JsonGenerator", "JsonNode", "JSONNull", "JsonParser", "JsonReader", "JsonTokenType", "lambda", "lazy", "left", "let", "list", "LongNode", "Locale", "lock", "long", "map", "MarshalJSON", "MapEntry", "metadata_property_handling", "module", "mutable", "mutating", "namespace", "native", "new", "newtonsoft", "nil", "NullNode", "NO", "noexcept", "nonatomic", "none", "None", "nonlocal", "nonmutating", "NSObject", "noSuchMethod", "not", "not_eq", "NSError", "NSString", "NULL", "null", "nullptr", "number", "object", "ObjectNode", "ObjectMapper", "ObjectReader", "ObjectWriter", "of", "oneway", "open", "operator", "optional", "or", "or_eq", "out", "override", "package", "params", "pass", "port", "postfix", "precedence", "prefix", "print", "printf", "printMembers", "private", "protected", "Protocol", "protocol", "public", "quicktype", "raise", "range", "readonly", "ref", "RegExp", "register", "reinterpret_cast", "repeat", "require", "required", "requires", "restrict", "retain", "rethrows", "return", "right", "runtimeType", "s", "sbyte", "sealed", "SEL", "select", "Self", "Serializable", "self", "Sendable", "serialize", "SerialName", "KSerializer", "PrimitiveKind", "SerialDescriptor", "SerializationFeature", "SerializerProvider", "set", "short", "signed", "SimpleModule", "sizeof", "stackalloc", "Standards", "static", "static_assert", "static_cast", "StdDeserializer", "StdSerializer", "strictfp", "string", "struct", "subscript", "super", "switch", "symbol", "synchronized", "system", "template", "then", "this", "TextNode", "thread_local", "throw", "throws", "TimeOnly", "TimeOnlyConverter", "TimeZone", "to_json", "top_level", "toString", "to_dict", "transient", "True", "true", "try", "Type", "type", "typealias", "typedef", "typeid", "typename", "typeof", "uint", "ulong", "unchecked", "undefined", "union", "UnmarshalJSON", "UseSerializers", "unowned", "unsafe", "unsigned", "ushort", "using", "Utf8JsonReader", "Utf8JsonWriter", "UUID", "var", "virtual", "void", "volatile", "wchar_t", "weak", "where", "while", "willSet", "with", "xor", "xor_eq", "YES", "yield", "dummy")
+  Enum   = Strict::String.enum("_", "_Bool", "_Complex", "_Imaginery", "abstract", "alignas", "alignof", "and", "and_eq", "any", "Any", "ArrayNode", "array", "as", "asm", "assert", "associatedtype", "associativity", "async", "atomic", "atomic_cancel", "atomic_commit", "atomic_noexcept", "auto", "await", "base", "bitand", "bitor", "BOOL", "bool", "boolean", "BooleanNode", "break", "bycopy", "byref", "byte", "Calendar", "case", "catch", "chan", "char", "char16_t", "char32_t", "checked", "class", "Class", "clone", "co_await", "co_return", "co_yield", "Codable", "CodingKey", "CodingKeys", "compl", "concept", "console", "const", "const_cast", "constexpr", "constructor", "continue", "convenience", "convert", "converter", "CultureInfo", "date", "date_parse_handling", "DateFormatter", "DateOnly", "DateOnlyConverter", "DateTime", "DateTimeStyles", "debugger", "decimal", "declare", "DeserializationFeature", "decltype", "decode_string", "Decoder", "DecodingError", "def", "default", "defer", "deinit", "del", "delegate", "delete", "dict", "dictionary", "didSet", "do", "double", "DoubleNode", "dynamic", "dynamic_cast", "elif", "else", "encode_quick_type", "Encoder", "enum", "EnumValues", "Equatable", "equalityContract", "event", "except", "exception", "explicit", "export", "exposing", "extends", "extension", "extern", "fallthrough", "false", "False", "fileprivate", "final", "finally", "fixed", "float", "for", "foreach", "FormatException", "friend", "from", "from_dict", "from_json", "func", "function", "get", "global", "go", "goto", "guard", "Hashable", "hashCode", "Hasher", "hasOwnProperty", "id", "if", "IMP", "implements", "implicit", "import", "in", "indirect", "infix", "init", "inline", "inout", "instanceof", "int", "IntNode", "interface", "internal", "IsoDateTimeOffsetConverter", "iterable", "is", "jdec", "jenc", "jpipe", "json", "json_converter", "json_serializer", "json_token", "json_writer", "JSONAny", "JSONCodingKey", "JSONDecoder", "JSONEncoder", "JsonException", "JsonGenerator", "JsonNode", "JSONNull", "JsonParser", "JsonReader", "JsonTokenType", "lambda", "lazy", "left", "let", "list", "LocalDate", "LongNode", "Locale", "lock", "long", "map", "MarshalJSON", "MapEntry", "metadata_property_handling", "module", "mutable", "mutating", "namespace", "native", "new", "newtonsoft", "nil", "NullNode", "NO", "noexcept", "nonatomic", "none", "None", "nonlocal", "nonmutating", "NSObject", "noSuchMethod", "not", "not_eq", "NSError", "NSString", "NULL", "null", "nullptr", "number", "object", "OffsetDateTime", "OffsetTime", "ObjectNode", "ObjectMapper", "ObjectReader", "ObjectWriter", "of", "oneway", "open", "operator", "optional", "or", "or_eq", "out", "override", "package", "params", "pass", "port", "postfix", "precedence", "prefix", "print", "printf", "printMembers", "private", "protected", "Protocol", "protocol", "public", "quicktype", "raise", "range", "readonly", "ref", "RegExp", "register", "reinterpret_cast", "repeat", "require", "required", "requires", "restrict", "retain", "rethrows", "return", "right", "runtimeType", "s", "sbyte", "sealed", "SEL", "select", "Self", "Serializable", "self", "Sendable", "serialize", "SerialName", "KSerializer", "PrimitiveKind", "SerialDescriptor", "SerializationFeature", "SerializerProvider", "set", "short", "signed", "SimpleModule", "sizeof", "stackalloc", "Standards", "static", "static_assert", "static_cast", "StdDeserializer", "StdSerializer", "strictfp", "string", "struct", "subscript", "super", "switch", "symbol", "synchronized", "system", "template", "then", "this", "TextNode", "thread_local", "throw", "throws", "TimeOnly", "TimeOnlyConverter", "TimeZone", "to_json", "top_level", "toString", "to_dict", "transient", "True", "true", "try", "Type", "type", "typealias", "typedef", "typeid", "typename", "typeof", "uint", "ulong", "unchecked", "undefined", "union", "UnmarshalJSON", "UseSerializers", "unowned", "unsafe", "unsigned", "ushort", "using", "Utf8JsonReader", "Utf8JsonWriter", "UUID", "var", "virtual", "void", "volatile", "wchar_t", "weak", "where", "while", "willSet", "with", "xor", "xor_eq", "YES", "yield", "dummy")
 end
 
 module Enum
@@ -203,6 +203,7 @@ module Enum
   Left                       = "left"
   Let                        = "let"
   List                       = "list"
+  LocalDate                  = "LocalDate"
   LongNode                   = "LongNode"
   Locale                     = "Locale"
   Lock                       = "lock"
@@ -238,6 +239,8 @@ module Enum
   Nullptr                    = "nullptr"
   Number                     = "number"
   Object                     = "object"
+  OffsetDateTime             = "OffsetDateTime"
+  OffsetTime                 = "OffsetTime"
   ObjectNode                 = "ObjectNode"
   ObjectMapper               = "ObjectMapper"
   ObjectReader               = "ObjectReader"
diff --git a/base/schema-ruby/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb b/head/schema-ruby/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
index 40cfb3d..485c4b4 100644
--- a/base/schema-ruby/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
+++ b/head/schema-ruby/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
@@ -9367,6 +9367,63 @@ class UnionList < Dry::Struct
   end
 end
 
+class LocalDate < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionLocalDate < Dry::Struct
+  attribute :double,     Types::Double.optional
+  attribute :local_date, LocalDate.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, local_date: nil)
+    end
+    begin
+      value = LocalDate.from_dynamic!(d)
+      if schema.key(:local_date).type.right.valid? value
+        return new(local_date: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif local_date != nil
+      local_date.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Locale < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -11305,6 +11362,120 @@ class UnionOf < Dry::Struct
   end
 end
 
+class OffsetDateTime < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionOffsetDateTime < Dry::Struct
+  attribute :double,           Types::Double.optional
+  attribute :offset_date_time, OffsetDateTime.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, offset_date_time: nil)
+    end
+    begin
+      value = OffsetDateTime.from_dynamic!(d)
+      if schema.key(:offset_date_time).type.right.valid? value
+        return new(offset_date_time: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif offset_date_time != nil
+      offset_date_time.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class OffsetTime < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionOffsetTime < Dry::Struct
+  attribute :double,      Types::Double.optional
+  attribute :offset_time, OffsetTime.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, offset_time: nil)
+    end
+    begin
+      value = OffsetTime.from_dynamic!(d)
+      if schema.key(:offset_time).type.right.valid? value
+        return new(offset_time: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif offset_time != nil
+      offset_time.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Oneway < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -20382,6 +20553,7 @@ class TopLevel < Dry::Struct
   attribute :left,                           Types.Instance(UnionLeft).optional
   attribute :let,                            Types.Instance(UnionLet).optional
   attribute :list,                           Types.Instance(UnionList).optional
+  attribute :local_date,                     Types.Instance(UnionLocalDate).optional
   attribute :locale,                         Types.Instance(UnionLocale).optional
   attribute :lock,                           Types.Instance(UnionLock).optional
   attribute :long,                           Types.Instance(UnionLong).optional
@@ -20422,6 +20594,8 @@ class TopLevel < Dry::Struct
   attribute :object_reader,                  Types.Instance(UnionObjectReader).optional
   attribute :object_writer,                  Types.Instance(UnionObjectWriter).optional
   attribute :of,                             Types.Instance(UnionOf).optional
+  attribute :offset_date_time,               Types.Instance(UnionOffsetDateTime).optional
+  attribute :offset_time,                    Types.Instance(UnionOffsetTime).optional
   attribute :oneway,                         Types.Instance(UnionOneway).optional
   attribute :top_level_open,                 Types.Instance(UnionOpen).optional
   attribute :operator,                       Types.Instance(UnionOperator).optional
@@ -20741,6 +20915,7 @@ class TopLevel < Dry::Struct
       left:                           d.key?("left") ? UnionLeft.from_dynamic!(d["left"]) : nil,
       let:                            d.key?("let") ? UnionLet.from_dynamic!(d["let"]) : nil,
       list:                           d.key?("list") ? UnionList.from_dynamic!(d["list"]) : nil,
+      local_date:                     d.key?("LocalDate") ? UnionLocalDate.from_dynamic!(d["LocalDate"]) : nil,
       locale:                         d.key?("Locale") ? UnionLocale.from_dynamic!(d["Locale"]) : nil,
       lock:                           d.key?("lock") ? UnionLock.from_dynamic!(d["lock"]) : nil,
       long:                           d.key?("long") ? UnionLong.from_dynamic!(d["long"]) : nil,
@@ -20781,6 +20956,8 @@ class TopLevel < Dry::Struct
       object_reader:                  d.key?("ObjectReader") ? UnionObjectReader.from_dynamic!(d["ObjectReader"]) : nil,
       object_writer:                  d.key?("ObjectWriter") ? UnionObjectWriter.from_dynamic!(d["ObjectWriter"]) : nil,
       of:                             d.key?("of") ? UnionOf.from_dynamic!(d["of"]) : nil,
+      offset_date_time:               d.key?("OffsetDateTime") ? UnionOffsetDateTime.from_dynamic!(d["OffsetDateTime"]) : nil,
+      offset_time:                    d.key?("OffsetTime") ? UnionOffsetTime.from_dynamic!(d["OffsetTime"]) : nil,
       oneway:                         d.key?("oneway") ? UnionOneway.from_dynamic!(d["oneway"]) : nil,
       top_level_open:                 d.key?("open") ? UnionOpen.from_dynamic!(d["open"]) : nil,
       operator:                       d.key?("operator") ? UnionOperator.from_dynamic!(d["operator"]) : nil,
@@ -21105,6 +21282,7 @@ class TopLevel < Dry::Struct
       "left"                       => left&.to_dynamic,
       "let"                        => let&.to_dynamic,
       "list"                       => list&.to_dynamic,
+      "LocalDate"                  => local_date&.to_dynamic,
       "Locale"                     => locale&.to_dynamic,
       "lock"                       => lock&.to_dynamic,
       "long"                       => long&.to_dynamic,
@@ -21145,6 +21323,8 @@ class TopLevel < Dry::Struct
       "ObjectReader"               => object_reader&.to_dynamic,
       "ObjectWriter"               => object_writer&.to_dynamic,
       "of"                         => of&.to_dynamic,
+      "OffsetDateTime"             => offset_date_time&.to_dynamic,
+      "OffsetTime"                 => offset_time&.to_dynamic,
       "oneway"                     => oneway&.to_dynamic,
       "open"                       => top_level_open&.to_dynamic,
       "operator"                   => operator&.to_dynamic,
diff --git a/base/schema-ruby-syntax/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb b/head/schema-ruby-syntax/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
index 40cfb3d..485c4b4 100644
--- a/base/schema-ruby-syntax/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
+++ b/head/schema-ruby-syntax/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
@@ -9367,6 +9367,63 @@ class UnionList < Dry::Struct
   end
 end
 
+class LocalDate < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionLocalDate < Dry::Struct
+  attribute :double,     Types::Double.optional
+  attribute :local_date, LocalDate.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, local_date: nil)
+    end
+    begin
+      value = LocalDate.from_dynamic!(d)
+      if schema.key(:local_date).type.right.valid? value
+        return new(local_date: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif local_date != nil
+      local_date.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Locale < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -11305,6 +11362,120 @@ class UnionOf < Dry::Struct
   end
 end
 
+class OffsetDateTime < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionOffsetDateTime < Dry::Struct
+  attribute :double,           Types::Double.optional
+  attribute :offset_date_time, OffsetDateTime.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, offset_date_time: nil)
+    end
+    begin
+      value = OffsetDateTime.from_dynamic!(d)
+      if schema.key(:offset_date_time).type.right.valid? value
+        return new(offset_date_time: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif offset_date_time != nil
+      offset_date_time.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class OffsetTime < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionOffsetTime < Dry::Struct
+  attribute :double,      Types::Double.optional
+  attribute :offset_time, OffsetTime.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, offset_time: nil)
+    end
+    begin
+      value = OffsetTime.from_dynamic!(d)
+      if schema.key(:offset_time).type.right.valid? value
+        return new(offset_time: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif offset_time != nil
+      offset_time.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Oneway < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -20382,6 +20553,7 @@ class TopLevel < Dry::Struct
   attribute :left,                           Types.Instance(UnionLeft).optional
   attribute :let,                            Types.Instance(UnionLet).optional
   attribute :list,                           Types.Instance(UnionList).optional
+  attribute :local_date,                     Types.Instance(UnionLocalDate).optional
   attribute :locale,                         Types.Instance(UnionLocale).optional
   attribute :lock,                           Types.Instance(UnionLock).optional
   attribute :long,                           Types.Instance(UnionLong).optional
@@ -20422,6 +20594,8 @@ class TopLevel < Dry::Struct
   attribute :object_reader,                  Types.Instance(UnionObjectReader).optional
   attribute :object_writer,                  Types.Instance(UnionObjectWriter).optional
   attribute :of,                             Types.Instance(UnionOf).optional
+  attribute :offset_date_time,               Types.Instance(UnionOffsetDateTime).optional
+  attribute :offset_time,                    Types.Instance(UnionOffsetTime).optional
   attribute :oneway,                         Types.Instance(UnionOneway).optional
   attribute :top_level_open,                 Types.Instance(UnionOpen).optional
   attribute :operator,                       Types.Instance(UnionOperator).optional
@@ -20741,6 +20915,7 @@ class TopLevel < Dry::Struct
       left:                           d.key?("left") ? UnionLeft.from_dynamic!(d["left"]) : nil,
       let:                            d.key?("let") ? UnionLet.from_dynamic!(d["let"]) : nil,
       list:                           d.key?("list") ? UnionList.from_dynamic!(d["list"]) : nil,
+      local_date:                     d.key?("LocalDate") ? UnionLocalDate.from_dynamic!(d["LocalDate"]) : nil,
       locale:                         d.key?("Locale") ? UnionLocale.from_dynamic!(d["Locale"]) : nil,
       lock:                           d.key?("lock") ? UnionLock.from_dynamic!(d["lock"]) : nil,
       long:                           d.key?("long") ? UnionLong.from_dynamic!(d["long"]) : nil,
@@ -20781,6 +20956,8 @@ class TopLevel < Dry::Struct
       object_reader:                  d.key?("ObjectReader") ? UnionObjectReader.from_dynamic!(d["ObjectReader"]) : nil,
       object_writer:                  d.key?("ObjectWriter") ? UnionObjectWriter.from_dynamic!(d["ObjectWriter"]) : nil,
       of:                             d.key?("of") ? UnionOf.from_dynamic!(d["of"]) : nil,
+      offset_date_time:               d.key?("OffsetDateTime") ? UnionOffsetDateTime.from_dynamic!(d["OffsetDateTime"]) : nil,
+      offset_time:                    d.key?("OffsetTime") ? UnionOffsetTime.from_dynamic!(d["OffsetTime"]) : nil,
       oneway:                         d.key?("oneway") ? UnionOneway.from_dynamic!(d["oneway"]) : nil,
       top_level_open:                 d.key?("open") ? UnionOpen.from_dynamic!(d["open"]) : nil,
       operator:                       d.key?("operator") ? UnionOperator.from_dynamic!(d["operator"]) : nil,
@@ -21105,6 +21282,7 @@ class TopLevel < Dry::Struct
       "left"                       => left&.to_dynamic,
       "let"                        => let&.to_dynamic,
       "list"                       => list&.to_dynamic,
+      "LocalDate"                  => local_date&.to_dynamic,
       "Locale"                     => locale&.to_dynamic,
       "lock"                       => lock&.to_dynamic,
       "long"                       => long&.to_dynamic,
@@ -21145,6 +21323,8 @@ class TopLevel < Dry::Struct
       "ObjectReader"               => object_reader&.to_dynamic,
       "ObjectWriter"               => object_writer&.to_dynamic,
       "of"                         => of&.to_dynamic,
+      "OffsetDateTime"             => offset_date_time&.to_dynamic,
+      "OffsetTime"                 => offset_time&.to_dynamic,
       "oneway"                     => oneway&.to_dynamic,
       "open"                       => top_level_open&.to_dynamic,
       "operator"                   => operator&.to_dynamic,
diff --git a/base/schema-rust/test/inputs/schema/date-time.schema/default/module_under_test.rs b/head/schema-rust/test/inputs/schema/date-time.schema/default/module_under_test.rs
index 4654b68..0573e0b 100644
--- a/base/schema-rust/test/inputs/schema/date-time.schema/default/module_under_test.rs
+++ b/head/schema-rust/test/inputs/schema/date-time.schema/default/module_under_test.rs
@@ -22,6 +22,12 @@ pub struct TopLevel {
 
     pub date_time: String,
 
+    pub local_date_class: Option<LocalDate>,
+
+    pub offset_date_time_class: Option<OffsetDateTime>,
+
+    pub offset_time_class: Option<OffsetTime>,
+
     pub time: String,
 
     pub union_array: Vec<String>,
@@ -34,3 +40,15 @@ pub enum ComplexUnionArray {
 
     PurpleString(String),
 }
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct LocalDate {
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct OffsetDateTime {
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct OffsetTime {
+}
diff --git a/base/schema-rust/test/inputs/schema/keyword-enum.schema/default/module_under_test.rs b/head/schema-rust/test/inputs/schema/keyword-enum.schema/default/module_under_test.rs
index b749a2d..cefb7e4 100644
--- a/base/schema-rust/test/inputs/schema/keyword-enum.schema/default/module_under_test.rs
+++ b/head/schema-rust/test/inputs/schema/keyword-enum.schema/default/module_under_test.rs
@@ -455,6 +455,9 @@ pub enum Enum {
 
     List,
 
+    #[serde(rename = "LocalDate")]
+    LocalDate,
+
     #[serde(rename = "LongNode")]
     LongNode,
 
@@ -541,6 +544,12 @@ pub enum Enum {
 
     Object,
 
+    #[serde(rename = "OffsetDateTime")]
+    OffsetDateTime,
+
+    #[serde(rename = "OffsetTime")]
+    OffsetTime,
+
     #[serde(rename = "ObjectNode")]
     ObjectNode,
 
diff --git a/base/schema-rust/test/inputs/schema/keyword-unions.schema/default/module_under_test.rs b/head/schema-rust/test/inputs/schema/keyword-unions.schema/default/module_under_test.rs
index 2b5f408..ccddb49 100644
--- a/base/schema-rust/test/inputs/schema/keyword-unions.schema/default/module_under_test.rs
+++ b/head/schema-rust/test/inputs/schema/keyword-unions.schema/default/module_under_test.rs
@@ -454,6 +454,9 @@ pub struct TopLevel {
 
     pub list: Option<UnionList>,
 
+    #[serde(rename = "LocalDate")]
+    pub local_date: Option<UnionLocalDate>,
+
     #[serde(rename = "Locale")]
     pub locale: Option<UnionLocale>,
 
@@ -552,6 +555,12 @@ pub struct TopLevel {
 
     pub of: Option<UnionOf>,
 
+    #[serde(rename = "OffsetDateTime")]
+    pub offset_date_time: Option<UnionOffsetDateTime>,
+
+    #[serde(rename = "OffsetTime")]
+    pub offset_time: Option<UnionOffsetTime>,
+
     pub oneway: Option<UnionOneway>,
 
     pub open: Option<UnionOpen>,
@@ -2772,6 +2781,18 @@ pub enum UnionList {
 pub struct List {
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum UnionLocalDate {
+    Double(f64),
+
+    LocalDate(LocalDate),
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct LocalDate {
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(untagged)]
 pub enum UnionLocale {
@@ -3228,6 +3249,30 @@ pub enum UnionOf {
 pub struct Of {
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum UnionOffsetDateTime {
+    Double(f64),
+
+    OffsetDateTime(OffsetDateTime),
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct OffsetDateTime {
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum UnionOffsetTime {
+    Double(f64),
+
+    OffsetTime(OffsetTime),
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct OffsetTime {
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(untagged)]
 pub enum UnionOneway {
diff --git a/base/schema-scala3/test/inputs/schema/date-time.schema/default/TopLevel.scala b/head/schema-scala3/test/inputs/schema/date-time.schema/default/TopLevel.scala
index 2659eae..766d4ae 100644
--- a/base/schema-scala3/test/inputs/schema/date-time.schema/default/TopLevel.scala
+++ b/head/schema-scala3/test/inputs/schema/date-time.schema/default/TopLevel.scala
@@ -11,6 +11,9 @@ case class TopLevel (
     val `complex-union-array` : Seq[ComplexUnionArrayElement],
     val date : String,
     val `date-time` : java.time.Instant,
+    val `local-date-class` : Option[LocalDate] = None,
+    val `offset-date-time-class` : Option[OffsetDateTime] = None,
+    val `offset-time-class` : Option[OffsetTime] = None,
     val time : String,
     val `union-array` : Seq[String]
 ) derives Encoder.AsObject, Decoder
@@ -43,3 +46,9 @@ given Encoder[ComplexUnionArrayEnum] = Encoder.encodeString.contramap {
     case ComplexUnionArrayEnum.Foo => "foo"
     case ComplexUnionArrayEnum.Bar => "bar"
 }
+
+case class LocalDate()  derives Encoder.AsObject, Decoder
+
+case class OffsetDateTime()  derives Encoder.AsObject, Decoder
+
+case class OffsetTime()  derives Encoder.AsObject, Decoder
diff --git a/base/schema-scala3/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala b/head/schema-scala3/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
index 7c27f6a..8d10ea5 100644
--- a/base/schema-scala3/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
+++ b/head/schema-scala3/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
@@ -194,6 +194,7 @@ enum EnumEnum :
     case Left
     case Let
     case EnumList
+    case LocalDate
     case LongNode
     case Locale
     case Lock
@@ -229,6 +230,8 @@ enum EnumEnum :
     case Nullptr
     case Number
     case Object
+    case OffsetDateTime
+    case OffsetTime
     case ObjectNode
     case ObjectMapper
     case ObjectReader
@@ -551,6 +554,7 @@ given Decoder[EnumEnum] = Decoder.decodeString.emap {
     case "left" => scala.Right(EnumEnum.Left)
     case "let" => scala.Right(EnumEnum.Let)
     case "list" => scala.Right(EnumEnum.EnumList)
+    case "LocalDate" => scala.Right(EnumEnum.LocalDate)
     case "LongNode" => scala.Right(EnumEnum.LongNode)
     case "Locale" => scala.Right(EnumEnum.Locale)
     case "lock" => scala.Right(EnumEnum.Lock)
@@ -586,6 +590,8 @@ given Decoder[EnumEnum] = Decoder.decodeString.emap {
     case "nullptr" => scala.Right(EnumEnum.Nullptr)
     case "number" => scala.Right(EnumEnum.Number)
     case "object" => scala.Right(EnumEnum.Object)
+    case "OffsetDateTime" => scala.Right(EnumEnum.OffsetDateTime)
+    case "OffsetTime" => scala.Right(EnumEnum.OffsetTime)
     case "ObjectNode" => scala.Right(EnumEnum.ObjectNode)
     case "ObjectMapper" => scala.Right(EnumEnum.ObjectMapper)
     case "ObjectReader" => scala.Right(EnumEnum.ObjectReader)
@@ -909,6 +915,7 @@ given Encoder[EnumEnum] = Encoder.encodeString.contramap {
     case EnumEnum.Left => "left"
     case EnumEnum.Let => "let"
     case EnumEnum.EnumList => "list"
+    case EnumEnum.LocalDate => "LocalDate"
     case EnumEnum.LongNode => "LongNode"
     case EnumEnum.Locale => "Locale"
     case EnumEnum.Lock => "lock"
@@ -944,6 +951,8 @@ given Encoder[EnumEnum] = Encoder.encodeString.contramap {
     case EnumEnum.Nullptr => "nullptr"
     case EnumEnum.Number => "number"
     case EnumEnum.Object => "object"
+    case EnumEnum.OffsetDateTime => "OffsetDateTime"
+    case EnumEnum.OffsetTime => "OffsetTime"
     case EnumEnum.ObjectNode => "ObjectNode"
     case EnumEnum.ObjectMapper => "ObjectMapper"
     case EnumEnum.ObjectReader => "ObjectReader"
diff --git a/base/schema-scala3-upickle/test/inputs/schema/date-time.schema/default/TopLevel.scala b/head/schema-scala3-upickle/test/inputs/schema/date-time.schema/default/TopLevel.scala
index 476d1ea..87d5768 100644
--- a/base/schema-scala3-upickle/test/inputs/schema/date-time.schema/default/TopLevel.scala
+++ b/head/schema-scala3-upickle/test/inputs/schema/date-time.schema/default/TopLevel.scala
@@ -82,6 +82,9 @@ case class TopLevel (
     val `complex-union-array` : Seq[ComplexUnionArrayElement],
     val date : String,
     val `date-time` : java.time.Instant,
+    val `local-date-class` : Option[LocalDate] = None,
+    val `offset-date-time-class` : Option[OffsetDateTime] = None,
+    val `offset-time-class` : Option[OffsetTime] = None,
     val time : String,
     val `union-array` : Seq[String]
 ) derives OptionPickler.ReadWriter
@@ -115,3 +118,10 @@ given OptionPickler.ReadWriter[ComplexUnionArrayEnum] = OptionPickler.readwriter
         case other => throw new upickle.core.Abort("invalid ComplexUnionArrayEnum: " + other)
     }
 )
+
+case class LocalDate()
+ derives OptionPickler.ReadWriter
+case class OffsetDateTime()
+ derives OptionPickler.ReadWriter
+case class OffsetTime()
+ derives OptionPickler.ReadWriter
\ No newline at end of file
diff --git a/base/schema-scala3-upickle/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala b/head/schema-scala3-upickle/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
index a69763e..7f3c7e9 100644
--- a/base/schema-scala3-upickle/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
+++ b/head/schema-scala3-upickle/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
@@ -265,6 +265,7 @@ enum EnumEnum :
     case Left
     case Let
     case EnumList
+    case LocalDate
     case LongNode
     case Locale
     case Lock
@@ -300,6 +301,8 @@ enum EnumEnum :
     case Nullptr
     case Number
     case Object
+    case OffsetDateTime
+    case OffsetTime
     case ObjectNode
     case ObjectMapper
     case ObjectReader
@@ -623,6 +626,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case EnumEnum.Left => "left"
         case EnumEnum.Let => "let"
         case EnumEnum.EnumList => "list"
+        case EnumEnum.LocalDate => "LocalDate"
         case EnumEnum.LongNode => "LongNode"
         case EnumEnum.Locale => "Locale"
         case EnumEnum.Lock => "lock"
@@ -658,6 +662,8 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case EnumEnum.Nullptr => "nullptr"
         case EnumEnum.Number => "number"
         case EnumEnum.Object => "object"
+        case EnumEnum.OffsetDateTime => "OffsetDateTime"
+        case EnumEnum.OffsetTime => "OffsetTime"
         case EnumEnum.ObjectNode => "ObjectNode"
         case EnumEnum.ObjectMapper => "ObjectMapper"
         case EnumEnum.ObjectReader => "ObjectReader"
@@ -980,6 +986,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case "left" => EnumEnum.Left
         case "let" => EnumEnum.Let
         case "list" => EnumEnum.EnumList
+        case "LocalDate" => EnumEnum.LocalDate
         case "LongNode" => EnumEnum.LongNode
         case "Locale" => EnumEnum.Locale
         case "lock" => EnumEnum.Lock
@@ -1015,6 +1022,8 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case "nullptr" => EnumEnum.Nullptr
         case "number" => EnumEnum.Number
         case "object" => EnumEnum.Object
+        case "OffsetDateTime" => EnumEnum.OffsetDateTime
+        case "OffsetTime" => EnumEnum.OffsetTime
         case "ObjectNode" => EnumEnum.ObjectNode
         case "ObjectMapper" => EnumEnum.ObjectMapper
         case "ObjectReader" => EnumEnum.ObjectReader
diff --git a/base/schema-schema/test/inputs/schema/date-time.schema/default/TopLevel.schema b/head/schema-schema/test/inputs/schema/date-time.schema/default/TopLevel.schema
index ac88afa..add5fe7 100644
--- a/base/schema-schema/test/inputs/schema/date-time.schema/default/TopLevel.schema
+++ b/head/schema-schema/test/inputs/schema/date-time.schema/default/TopLevel.schema
@@ -20,6 +20,15 @@
                     "type": "string",
                     "format": "date-time"
                 },
+                "local-date-class": {
+                    "$ref": "#/definitions/LocalDate"
+                },
+                "offset-date-time-class": {
+                    "$ref": "#/definitions/OffsetDateTime"
+                },
+                "offset-time-class": {
+                    "$ref": "#/definitions/OffsetTime"
+                },
                 "time": {
                     "type": "string",
                     "format": "time"
@@ -40,6 +49,21 @@
             ],
             "title": "TopLevel"
         },
+        "LocalDate": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "LocalDate"
+        },
+        "OffsetDateTime": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "OffsetDateTime"
+        },
+        "OffsetTime": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "OffsetTime"
+        },
         "ComplexUnionArrayElement": {
             "anyOf": [
                 {
diff --git a/base/schema-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.schema b/head/schema-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.schema
index d2a2007..af4a58e 100644
--- a/base/schema-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.schema
+++ b/head/schema-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.schema
@@ -198,6 +198,7 @@
                 "left",
                 "let",
                 "list",
+                "LocalDate",
                 "LongNode",
                 "Locale",
                 "lock",
@@ -233,6 +234,8 @@
                 "nullptr",
                 "number",
                 "object",
+                "OffsetDateTime",
+                "OffsetTime",
                 "ObjectNode",
                 "ObjectMapper",
                 "ObjectReader",
diff --git a/base/schema-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.schema b/head/schema-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.schema
index 32732c6..0e0e074 100644
--- a/base/schema-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.schema
+++ b/head/schema-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.schema
@@ -558,6 +558,9 @@
                 "list": {
                     "$ref": "#/definitions/UnionList"
                 },
+                "LocalDate": {
+                    "$ref": "#/definitions/UnionLocalDate"
+                },
                 "Locale": {
                     "$ref": "#/definitions/UnionLocale"
                 },
@@ -678,6 +681,12 @@
                 "of": {
                     "$ref": "#/definitions/UnionOf"
                 },
+                "OffsetDateTime": {
+                    "$ref": "#/definitions/UnionOffsetDateTime"
+                },
+                "OffsetTime": {
+                    "$ref": "#/definitions/UnionOffsetTime"
+                },
                 "oneway": {
                     "$ref": "#/definitions/UnionOneway"
                 },
@@ -1280,6 +1289,11 @@
             "additionalProperties": false,
             "title": "KSerializer"
         },
+        "LocalDate": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "LocalDate"
+        },
         "Locale": {
             "type": "object",
             "additionalProperties": false,
@@ -1355,6 +1369,16 @@
             "additionalProperties": false,
             "title": "ObjectWriter"
         },
+        "OffsetDateTime": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "OffsetDateTime"
+        },
+        "OffsetTime": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "OffsetTime"
+        },
         "PrimitiveKind": {
             "type": "object",
             "additionalProperties": false,
@@ -3296,6 +3320,17 @@
             ],
             "title": "UnionKSerializer"
         },
+        "UnionLocalDate": {
+            "anyOf": [
+                {
+                    "$ref": "#/definitions/LocalDate"
+                },
+                {
+                    "type": "number"
+                }
+            ],
+            "title": "UnionLocalDate"
+        },
         "UnionLocale": {
             "anyOf": [
                 {
@@ -3461,6 +3496,28 @@
             ],
             "title": "UnionObjectWriter"
         },
+        "UnionOffsetDateTime": {
+            "anyOf": [
+                {
+                    "$ref": "#/definitions/OffsetDateTime"
+                },
+                {
+                    "type": "number"
+                }
+            ],
+            "title": "UnionOffsetDateTime"
+        },
+        "UnionOffsetTime": {
+            "anyOf": [
+                {
+                    "$ref": "#/definitions/OffsetTime"
+                },
+                {
+                    "type": "number"
+                }
+            ],
+            "title": "UnionOffsetTime"
+        },
         "UnionPrimitiveKind": {
             "anyOf": [
                 {
diff --git a/base/schema-swift/test/inputs/schema/date-time.schema/default/quicktype.swift b/head/schema-swift/test/inputs/schema/date-time.schema/default/quicktype.swift
index b7a2062..979e314 100644
--- a/base/schema-swift/test/inputs/schema/date-time.schema/default/quicktype.swift
+++ b/head/schema-swift/test/inputs/schema/date-time.schema/default/quicktype.swift
@@ -10,6 +10,9 @@ struct TopLevel: Codable {
     let complexUnionArray: [ComplexUnionArrayElement]
     let date: String
     let dateTime: Date
+    let localDateClass: LocalDate?
+    let offsetDateTimeClass: OffsetDateTime?
+    let offsetTimeClass: OffsetTime?
     let time: String
     let unionArray: [String]
 
@@ -17,6 +20,9 @@ struct TopLevel: Codable {
         case complexUnionArray = "complex-union-array"
         case date = "date"
         case dateTime = "date-time"
+        case localDateClass = "local-date-class"
+        case offsetDateTimeClass = "offset-date-time-class"
+        case offsetTimeClass = "offset-time-class"
         case time = "time"
         case unionArray = "union-array"
     }
@@ -44,6 +50,9 @@ extension TopLevel {
         complexUnionArray: [ComplexUnionArrayElement]? = nil,
         date: String? = nil,
         dateTime: Date? = nil,
+        localDateClass: LocalDate?? = nil,
+        offsetDateTimeClass: OffsetDateTime?? = nil,
+        offsetTimeClass: OffsetTime?? = nil,
         time: String? = nil,
         unionArray: [String]? = nil
     ) -> TopLevel {
@@ -51,6 +60,9 @@ extension TopLevel {
             complexUnionArray: complexUnionArray ?? self.complexUnionArray,
             date: date ?? self.date,
             dateTime: dateTime ?? self.dateTime,
+            localDateClass: localDateClass ?? self.localDateClass,
+            offsetDateTimeClass: offsetDateTimeClass ?? self.offsetDateTimeClass,
+            offsetTimeClass: offsetTimeClass ?? self.offsetTimeClass,
             time: time ?? self.time,
             unionArray: unionArray ?? self.unionArray
         )
@@ -105,6 +117,135 @@ enum ComplexUnionArrayEnum: String, Codable {
     case bar = "bar"
 }
 
+// MARK: - LocalDate
+struct LocalDate: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: LocalDate convenience initializers and mutators
+
+extension LocalDate {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LocalDate.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+    ) -> LocalDate {
+        return LocalDate(
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - OffsetDateTime
+struct OffsetDateTime: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: OffsetDateTime convenience initializers and mutators
+
+extension OffsetDateTime {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OffsetDateTime.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+    ) -> OffsetDateTime {
+        return OffsetDateTime(
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - OffsetTime
+struct OffsetTime: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: OffsetTime convenience initializers and mutators
+
+extension OffsetTime {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OffsetTime.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+    ) -> OffsetTime {
+        return OffsetTime(
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Helper functions for creating encoders and decoders
 
 func newJSONDecoder() -> JSONDecoder {
diff --git a/base/schema-swift/test/inputs/schema/keyword-enum.schema/default/quicktype.swift b/head/schema-swift/test/inputs/schema/keyword-enum.schema/default/quicktype.swift
index aaea042..a11b85f 100644
--- a/base/schema-swift/test/inputs/schema/keyword-enum.schema/default/quicktype.swift
+++ b/head/schema-swift/test/inputs/schema/keyword-enum.schema/default/quicktype.swift
@@ -232,6 +232,7 @@ enum Enum: String, Codable {
     case enumLeft = "left"
     case enumLet = "let"
     case list = "list"
+    case localDate = "LocalDate"
     case longNode = "LongNode"
     case locale = "Locale"
     case lock = "lock"
@@ -267,6 +268,8 @@ enum Enum: String, Codable {
     case nullptr = "nullptr"
     case number = "number"
     case object = "object"
+    case offsetDateTime = "OffsetDateTime"
+    case offsetTime = "OffsetTime"
     case objectNode = "ObjectNode"
     case objectMapper = "ObjectMapper"
     case objectReader = "ObjectReader"
diff --git a/base/schema-swift/test/inputs/schema/keyword-unions.schema/default/quicktype.swift b/head/schema-swift/test/inputs/schema/keyword-unions.schema/default/quicktype.swift
index 668d4c1..7d85bad 100644
--- a/base/schema-swift/test/inputs/schema/keyword-unions.schema/default/quicktype.swift
+++ b/head/schema-swift/test/inputs/schema/keyword-unions.schema/default/quicktype.swift
@@ -191,6 +191,7 @@ struct TopLevel: Codable {
     let topLevelLeft: UnionLeft?
     let topLevelLet: UnionLet?
     let list: UnionList?
+    let localDate: UnionLocalDate?
     let locale: UnionLocale?
     let lock: UnionLock?
     let long: UnionLong?
@@ -231,6 +232,8 @@ struct TopLevel: Codable {
     let objectReader: UnionObjectReader?
     let objectWriter: UnionObjectWriter?
     let of: UnionOf?
+    let offsetDateTime: UnionOffsetDateTime?
+    let offsetTime: UnionOffsetTime?
     let oneway: UnionOneway?
     let topLevelOpen: UnionOpen?
     let topLevelOperator: UnionOperator?
@@ -548,6 +551,7 @@ struct TopLevel: Codable {
         case topLevelLeft = "left"
         case topLevelLet = "let"
         case list = "list"
+        case localDate = "LocalDate"
         case locale = "Locale"
         case lock = "lock"
         case long = "long"
@@ -588,6 +592,8 @@ struct TopLevel: Codable {
         case objectReader = "ObjectReader"
         case objectWriter = "ObjectWriter"
         case of = "of"
+        case offsetDateTime = "OffsetDateTime"
+        case offsetTime = "OffsetTime"
         case oneway = "oneway"
         case topLevelOpen = "open"
         case topLevelOperator = "operator"
@@ -925,6 +931,7 @@ extension TopLevel {
         topLevelLeft: UnionLeft?? = nil,
         topLevelLet: UnionLet?? = nil,
         list: UnionList?? = nil,
+        localDate: UnionLocalDate?? = nil,
         locale: UnionLocale?? = nil,
         lock: UnionLock?? = nil,
         long: UnionLong?? = nil,
@@ -965,6 +972,8 @@ extension TopLevel {
         objectReader: UnionObjectReader?? = nil,
         objectWriter: UnionObjectWriter?? = nil,
         of: UnionOf?? = nil,
+        offsetDateTime: UnionOffsetDateTime?? = nil,
+        offsetTime: UnionOffsetTime?? = nil,
         oneway: UnionOneway?? = nil,
         topLevelOpen: UnionOpen?? = nil,
         topLevelOperator: UnionOperator?? = nil,
@@ -1282,6 +1291,7 @@ extension TopLevel {
             topLevelLeft: topLevelLeft ?? self.topLevelLeft,
             topLevelLet: topLevelLet ?? self.topLevelLet,
             list: list ?? self.list,
+            localDate: localDate ?? self.localDate,
             locale: locale ?? self.locale,
             lock: lock ?? self.lock,
             long: long ?? self.long,
@@ -1322,6 +1332,8 @@ extension TopLevel {
             objectReader: objectReader ?? self.objectReader,
             objectWriter: objectWriter ?? self.objectWriter,
             of: of ?? self.of,
+            offsetDateTime: offsetDateTime ?? self.offsetDateTime,
+            offsetTime: offsetTime ?? self.offsetTime,
             oneway: oneway ?? self.oneway,
             topLevelOpen: topLevelOpen ?? self.topLevelOpen,
             topLevelOperator: topLevelOperator ?? self.topLevelOperator,
@@ -11263,6 +11275,77 @@ extension List {
     }
 }
 
+enum UnionLocalDate: Codable {
+    case double(Double)
+    case localDate(LocalDate)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(LocalDate.self) {
+            self = .localDate(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnionLocalDate.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnionLocalDate"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .localDate(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LocalDate
+struct LocalDate: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: LocalDate convenience initializers and mutators
+
+extension LocalDate {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LocalDate.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+    ) -> LocalDate {
+        return LocalDate(
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 enum UnionLocale: Codable {
     case double(Double)
     case localeClass(LocaleClass)
@@ -13748,6 +13831,148 @@ extension Of {
     }
 }
 
+enum UnionOffsetDateTime: Codable {
+    case double(Double)
+    case offsetDateTime(OffsetDateTime)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(OffsetDateTime.self) {
+            self = .offsetDateTime(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnionOffsetDateTime.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnionOffsetDateTime"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .offsetDateTime(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - OffsetDateTime
+struct OffsetDateTime: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: OffsetDateTime convenience initializers and mutators
+
+extension OffsetDateTime {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OffsetDateTime.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+    ) -> OffsetDateTime {
+        return OffsetDateTime(
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum UnionOffsetTime: Codable {
+    case double(Double)
+    case offsetTime(OffsetTime)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(OffsetTime.self) {
+            self = .offsetTime(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnionOffsetTime.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnionOffsetTime"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .offsetTime(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - OffsetTime
+struct OffsetTime: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: OffsetTime convenience initializers and mutators
+
+extension OffsetTime {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OffsetTime.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+    ) -> OffsetTime {
+        return OffsetTime(
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 enum UnionOneway: Codable {
     case double(Double)
     case oneway(Oneway)
diff --git a/base/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts
index 4427935..bdad9bf 100644
--- a/base/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts
@@ -8,11 +8,14 @@
 // match the expected interface, even if the JSON is valid.
 
 export interface TopLevel {
-    "complex-union-array": ComplexUnionArrayElement[];
-    date:                  Date;
-    "date-time":           Date;
-    time:                  string;
-    "union-array":         string[];
+    "complex-union-array":     ComplexUnionArrayElement[];
+    date:                      Date;
+    "date-time":               Date;
+    "local-date-class"?:       object;
+    "offset-date-time-class"?: object;
+    "offset-time-class"?:      object;
+    time:                      string;
+    "union-array":             string[];
 }
 
 export type ComplexUnionArrayElement = Date | ComplexUnionArrayEnum | number;
@@ -210,6 +213,9 @@ const typeMap: any = {
         { json: "complex-union-array", js: "complex-union-array", typ: a(u(Date, r("ComplexUnionArrayEnum"), i(0))) },
         { json: "date", js: "date", typ: Date },
         { json: "date-time", js: "date-time", typ: Date },
+        { json: "local-date-class", js: "local-date-class", typ: u(undefined, m("any")) },
+        { json: "offset-date-time-class", js: "offset-date-time-class", typ: u(undefined, m("any")) },
+        { json: "offset-time-class", js: "offset-time-class", typ: u(undefined, m("any")) },
         { json: "time", js: "time", typ: "" },
         { json: "union-array", js: "union-array", typ: a("") },
     ], false),
diff --git a/base/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
index 11df0e4..d06af27 100644
--- a/base/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
@@ -12,7 +12,7 @@ export interface TopLevel {
     [property: string]: unknown;
 }
 
-export type Enum = "_" | "_Bool" | "_Complex" | "_Imaginery" | "abstract" | "alignas" | "alignof" | "and" | "and_eq" | "any" | "Any" | "ArrayNode" | "array" | "as" | "asm" | "assert" | "associatedtype" | "associativity" | "async" | "atomic" | "atomic_cancel" | "atomic_commit" | "atomic_noexcept" | "auto" | "await" | "base" | "bitand" | "bitor" | "BOOL" | "bool" | "boolean" | "BooleanNode" | "break" | "bycopy" | "byref" | "byte" | "Calendar" | "case" | "catch" | "chan" | "char" | "char16_t" | "char32_t" | "checked" | "class" | "Class" | "clone" | "co_await" | "co_return" | "co_yield" | "Codable" | "CodingKey" | "CodingKeys" | "compl" | "concept" | "console" | "const" | "const_cast" | "constexpr" | "constructor" | "continue" | "convenience" | "convert" | "converter" | "CultureInfo" | "date" | "date_parse_handling" | "DateFormatter" | "DateOnly" | "DateOnlyConverter" | "DateTime" | "DateTimeStyles" | "debugger" | "decimal" | "declare" | "DeserializationFeature" | "decltype" | "decode_string" | "Decoder" | "DecodingError" | "def" | "default" | "defer" | "deinit" | "del" | "delegate" | "delete" | "dict" | "dictionary" | "didSet" | "do" | "double" | "DoubleNode" | "dynamic" | "dynamic_cast" | "elif" | "else" | "encode_quick_type" | "Encoder" | "enum" | "EnumValues" | "Equatable" | "equalityContract" | "event" | "except" | "exception" | "explicit" | "export" | "exposing" | "extends" | "extension" | "extern" | "fallthrough" | "false" | "False" | "fileprivate" | "final" | "finally" | "fixed" | "float" | "for" | "foreach" | "FormatException" | "friend" | "from" | "from_dict" | "from_json" | "func" | "function" | "get" | "global" | "go" | "goto" | "guard" | "Hashable" | "hashCode" | "Hasher" | "hasOwnProperty" | "id" | "if" | "IMP" | "implements" | "implicit" | "import" | "in" | "indirect" | "infix" | "init" | "inline" | "inout" | "instanceof" | "int" | "IntNode" | "interface" | "internal" | "IsoDateTimeOffsetConverter" | "iterable" | "is" | "jdec" | "jenc" | "jpipe" | "json" | "json_converter" | "json_serializer" | "json_token" | "json_writer" | "JSONAny" | "JSONCodingKey" | "JSONDecoder" | "JSONEncoder" | "JsonException" | "JsonGenerator" | "JsonNode" | "JSONNull" | "JsonParser" | "JsonReader" | "JsonTokenType" | "lambda" | "lazy" | "left" | "let" | "list" | "LongNode" | "Locale" | "lock" | "long" | "map" | "MarshalJSON" | "MapEntry" | "metadata_property_handling" | "module" | "mutable" | "mutating" | "namespace" | "native" | "new" | "newtonsoft" | "nil" | "NullNode" | "NO" | "noexcept" | "nonatomic" | "none" | "None" | "nonlocal" | "nonmutating" | "NSObject" | "noSuchMethod" | "not" | "not_eq" | "NSError" | "NSString" | "NULL" | "null" | "nullptr" | "number" | "object" | "ObjectNode" | "ObjectMapper" | "ObjectReader" | "ObjectWriter" | "of" | "oneway" | "open" | "operator" | "optional" | "or" | "or_eq" | "out" | "override" | "package" | "params" | "pass" | "port" | "postfix" | "precedence" | "prefix" | "print" | "printf" | "printMembers" | "private" | "protected" | "Protocol" | "protocol" | "public" | "quicktype" | "raise" | "range" | "readonly" | "ref" | "RegExp" | "register" | "reinterpret_cast" | "repeat" | "require" | "required" | "requires" | "restrict" | "retain" | "rethrows" | "return" | "right" | "runtimeType" | "s" | "sbyte" | "sealed" | "SEL" | "select" | "Self" | "Serializable" | "self" | "Sendable" | "serialize" | "SerialName" | "KSerializer" | "PrimitiveKind" | "SerialDescriptor" | "SerializationFeature" | "SerializerProvider" | "set" | "short" | "signed" | "SimpleModule" | "sizeof" | "stackalloc" | "Standards" | "static" | "static_assert" | "static_cast" | "StdDeserializer" | "StdSerializer" | "strictfp" | "string" | "struct" | "subscript" | "super" | "switch" | "symbol" | "synchronized" | "system" | "template" | "then" | "this" | "TextNode" | "thread_local" | "throw" | "throws" | "TimeOnly" | "TimeOnlyConverter" | "TimeZone" | "to_json" | "top_level" | "toString" | "to_dict" | "transient" | "True" | "true" | "try" | "Type" | "type" | "typealias" | "typedef" | "typeid" | "typename" | "typeof" | "uint" | "ulong" | "unchecked" | "undefined" | "union" | "UnmarshalJSON" | "UseSerializers" | "unowned" | "unsafe" | "unsigned" | "ushort" | "using" | "Utf8JsonReader" | "Utf8JsonWriter" | "UUID" | "var" | "virtual" | "void" | "volatile" | "wchar_t" | "weak" | "where" | "while" | "willSet" | "with" | "xor" | "xor_eq" | "YES" | "yield" | "dummy";
+export type Enum = "_" | "_Bool" | "_Complex" | "_Imaginery" | "abstract" | "alignas" | "alignof" | "and" | "and_eq" | "any" | "Any" | "ArrayNode" | "array" | "as" | "asm" | "assert" | "associatedtype" | "associativity" | "async" | "atomic" | "atomic_cancel" | "atomic_commit" | "atomic_noexcept" | "auto" | "await" | "base" | "bitand" | "bitor" | "BOOL" | "bool" | "boolean" | "BooleanNode" | "break" | "bycopy" | "byref" | "byte" | "Calendar" | "case" | "catch" | "chan" | "char" | "char16_t" | "char32_t" | "checked" | "class" | "Class" | "clone" | "co_await" | "co_return" | "co_yield" | "Codable" | "CodingKey" | "CodingKeys" | "compl" | "concept" | "console" | "const" | "const_cast" | "constexpr" | "constructor" | "continue" | "convenience" | "convert" | "converter" | "CultureInfo" | "date" | "date_parse_handling" | "DateFormatter" | "DateOnly" | "DateOnlyConverter" | "DateTime" | "DateTimeStyles" | "debugger" | "decimal" | "declare" | "DeserializationFeature" | "decltype" | "decode_string" | "Decoder" | "DecodingError" | "def" | "default" | "defer" | "deinit" | "del" | "delegate" | "delete" | "dict" | "dictionary" | "didSet" | "do" | "double" | "DoubleNode" | "dynamic" | "dynamic_cast" | "elif" | "else" | "encode_quick_type" | "Encoder" | "enum" | "EnumValues" | "Equatable" | "equalityContract" | "event" | "except" | "exception" | "explicit" | "export" | "exposing" | "extends" | "extension" | "extern" | "fallthrough" | "false" | "False" | "fileprivate" | "final" | "finally" | "fixed" | "float" | "for" | "foreach" | "FormatException" | "friend" | "from" | "from_dict" | "from_json" | "func" | "function" | "get" | "global" | "go" | "goto" | "guard" | "Hashable" | "hashCode" | "Hasher" | "hasOwnProperty" | "id" | "if" | "IMP" | "implements" | "implicit" | "import" | "in" | "indirect" | "infix" | "init" | "inline" | "inout" | "instanceof" | "int" | "IntNode" | "interface" | "internal" | "IsoDateTimeOffsetConverter" | "iterable" | "is" | "jdec" | "jenc" | "jpipe" | "json" | "json_converter" | "json_serializer" | "json_token" | "json_writer" | "JSONAny" | "JSONCodingKey" | "JSONDecoder" | "JSONEncoder" | "JsonException" | "JsonGenerator" | "JsonNode" | "JSONNull" | "JsonParser" | "JsonReader" | "JsonTokenType" | "lambda" | "lazy" | "left" | "let" | "list" | "LocalDate" | "LongNode" | "Locale" | "lock" | "long" | "map" | "MarshalJSON" | "MapEntry" | "metadata_property_handling" | "module" | "mutable" | "mutating" | "namespace" | "native" | "new" | "newtonsoft" | "nil" | "NullNode" | "NO" | "noexcept" | "nonatomic" | "none" | "None" | "nonlocal" | "nonmutating" | "NSObject" | "noSuchMethod" | "not" | "not_eq" | "NSError" | "NSString" | "NULL" | "null" | "nullptr" | "number" | "object" | "OffsetDateTime" | "OffsetTime" | "ObjectNode" | "ObjectMapper" | "ObjectReader" | "ObjectWriter" | "of" | "oneway" | "open" | "operator" | "optional" | "or" | "or_eq" | "out" | "override" | "package" | "params" | "pass" | "port" | "postfix" | "precedence" | "prefix" | "print" | "printf" | "printMembers" | "private" | "protected" | "Protocol" | "protocol" | "public" | "quicktype" | "raise" | "range" | "readonly" | "ref" | "RegExp" | "register" | "reinterpret_cast" | "repeat" | "require" | "required" | "requires" | "restrict" | "retain" | "rethrows" | "return" | "right" | "runtimeType" | "s" | "sbyte" | "sealed" | "SEL" | "select" | "Self" | "Serializable" | "self" | "Sendable" | "serialize" | "SerialName" | "KSerializer" | "PrimitiveKind" | "SerialDescriptor" | "SerializationFeature" | "SerializerProvider" | "set" | "short" | "signed" | "SimpleModule" | "sizeof" | "stackalloc" | "Standards" | "static" | "static_assert" | "static_cast" | "StdDeserializer" | "StdSerializer" | "strictfp" | "string" | "struct" | "subscript" | "super" | "switch" | "symbol" | "synchronized" | "system" | "template" | "then" | "this" | "TextNode" | "thread_local" | "throw" | "throws" | "TimeOnly" | "TimeOnlyConverter" | "TimeZone" | "to_json" | "top_level" | "toString" | "to_dict" | "transient" | "True" | "true" | "try" | "Type" | "type" | "typealias" | "typedef" | "typeid" | "typename" | "typeof" | "uint" | "ulong" | "unchecked" | "undefined" | "union" | "UnmarshalJSON" | "UseSerializers" | "unowned" | "unsafe" | "unsigned" | "ushort" | "using" | "Utf8JsonReader" | "Utf8JsonWriter" | "UUID" | "var" | "virtual" | "void" | "volatile" | "wchar_t" | "weak" | "where" | "while" | "willSet" | "with" | "xor" | "xor_eq" | "YES" | "yield" | "dummy";
 
 // Converts JSON strings to/from your types
 // and asserts the results of JSON.parse at runtime
@@ -387,6 +387,7 @@ const typeMap: any = {
         "left",
         "let",
         "list",
+        "LocalDate",
         "LongNode",
         "Locale",
         "lock",
@@ -422,6 +423,8 @@ const typeMap: any = {
         "nullptr",
         "number",
         "object",
+        "OffsetDateTime",
+        "OffsetTime",
         "ObjectNode",
         "ObjectMapper",
         "ObjectReader",
diff --git a/base/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
index 9baf522..8072fbb 100644
--- a/base/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
@@ -192,6 +192,7 @@ export interface TopLevel {
     left?:                       UnionLeft;
     let?:                        UnionLet;
     list?:                       UnionList;
+    LocalDate?:                  UnionLocalDate;
     Locale?:                     UnionLocale;
     lock?:                       UnionLock;
     long?:                       UnionLong;
@@ -232,6 +233,8 @@ export interface TopLevel {
     ObjectReader?:               UnionObjectReader;
     ObjectWriter?:               UnionObjectWriter;
     of?:                         UnionOf;
+    OffsetDateTime?:             UnionOffsetDateTime;
+    OffsetTime?:                 UnionOffsetTime;
     oneway?:                     UnionOneway;
     open?:                       UnionOpen;
     operator?:                   UnionOperator;
@@ -448,6 +451,8 @@ export type UnionJSONTokenType = object | number;
 
 export type UnionKSerializer = object | number;
 
+export type UnionLocalDate = object | number;
+
 export type UnionLocale = object | number;
 
 export type UnionLongNode = object | number;
@@ -478,6 +483,10 @@ export type UnionObjectReader = object | number;
 
 export type UnionObjectWriter = object | number;
 
+export type UnionOffsetDateTime = object | number;
+
+export type UnionOffsetTime = object | number;
+
 export type UnionPrimitiveKind = object | number;
 
 export type UnionProtocol = object | number;
@@ -1446,6 +1455,7 @@ const typeMap: any = {
         { json: "left", js: "left", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "let", js: "let", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "list", js: "list", typ: u(undefined, u(m("any"), 3.14)) },
+        { json: "LocalDate", js: "LocalDate", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "Locale", js: "Locale", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "lock", js: "lock", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "long", js: "long", typ: u(undefined, u(m("any"), 3.14)) },
@@ -1486,6 +1496,8 @@ const typeMap: any = {
         { json: "ObjectReader", js: "ObjectReader", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "ObjectWriter", js: "ObjectWriter", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "of", js: "of", typ: u(undefined, u(m("any"), 3.14)) },
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: u(undefined, u(m("any"), 3.14)) },
+        { json: "OffsetTime", js: "OffsetTime", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "oneway", js: "oneway", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "open", js: "open", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "operator", js: "operator", typ: u(undefined, u(m("any"), 3.14)) },
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/date-time.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/date-time.schema/default/TopLevel.ts
index c0de558..b3c44c4 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/date-time.schema/default/TopLevel.ts
@@ -7,10 +7,22 @@ export const ComplexUnionArrayEnum = S.Literal(
 );
 export type ComplexUnionArrayEnum = S.Schema.Type<typeof ComplexUnionArrayEnum>;
 
+export class OffsetTime extends S.Class<OffsetTime>("OffsetTime")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
+export class OffsetDateTime extends S.Class<OffsetDateTime>("OffsetDateTime")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
+export class LocalDate extends S.Class<LocalDate>("LocalDate")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "complex-union-array": S.Array(S.Union(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)), ComplexUnionArrayEnum, S.Int)),
     "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
     "date-time": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)),
+    "local-date-class": S.optional(LocalDate),
+    "offset-date-time-class": S.optional(OffsetDateTime),
+    "offset-time-class": S.optional(OffsetTime),
     "time": S.String.pipe(S.pattern(/^\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)),
     "union-array": S.Array(S.Union(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)), S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)), S.String.pipe(S.pattern(/^\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)))),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
index 2a02e0a..f4c056f 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
@@ -184,6 +184,7 @@ export const Enum = S.Literal(
     "left",
     "let",
     "list",
+    "LocalDate",
     "LongNode",
     "Locale",
     "lock",
@@ -219,6 +220,8 @@ export const Enum = S.Literal(
     "nullptr",
     "number",
     "object",
+    "OffsetDateTime",
+    "OffsetTime",
     "ObjectNode",
     "ObjectMapper",
     "ObjectReader",
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
index 5f455c4..89f01a7 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
@@ -415,6 +415,12 @@ export class Open extends S.Class<Open>("Open")(S.Struct({}).pipe(S.filter(value
 export class Oneway extends S.Class<Oneway>("Oneway")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
+export class OffsetTime extends S.Class<OffsetTime>("OffsetTime")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
+export class OffsetDateTime extends S.Class<OffsetDateTime>("OffsetDateTime")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
 export class Of extends S.Class<Of>("Of")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
@@ -529,6 +535,9 @@ export class Lock extends S.Class<Lock>("Lock")(S.Struct({}).pipe(S.filter(value
 export class Locale extends S.Class<Locale>("Locale")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
+export class LocalDate extends S.Class<LocalDate>("LocalDate")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
 export class List extends S.Class<List>("List")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
@@ -1248,6 +1257,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "left": S.optional(S.Union(S.Number, Left)),
     "let": S.optional(S.Union(S.Number, Let)),
     "list": S.optional(S.Union(S.Number, List)),
+    "LocalDate": S.optional(S.Union(S.Number, LocalDate)),
     "Locale": S.optional(S.Union(S.Number, Locale)),
     "lock": S.optional(S.Union(S.Number, Lock)),
     "long": S.optional(S.Union(S.Number, Long)),
@@ -1288,6 +1298,8 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "ObjectReader": S.optional(S.Union(S.Number, ObjectReader)),
     "ObjectWriter": S.optional(S.Union(S.Number, ObjectWriter)),
     "of": S.optional(S.Union(S.Number, Of)),
+    "OffsetDateTime": S.optional(S.Union(S.Number, OffsetDateTime)),
+    "OffsetTime": S.optional(S.Union(S.Number, OffsetTime)),
     "oneway": S.optional(S.Union(S.Number, Oneway)),
     "open": S.optional(S.Union(S.Number, Open)),
     "operator": S.optional(S.Union(S.Number, Operator)),
diff --git a/base/schema-typescript-zod/test/inputs/schema/date-time.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/date-time.schema/default/TopLevel.ts
index 7033fc8..9aaffab 100644
--- a/base/schema-typescript-zod/test/inputs/schema/date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/date-time.schema/default/TopLevel.ts
@@ -7,10 +7,25 @@ export const ComplexUnionArrayEnumSchema = z.enum([
 ]);
 export type ComplexUnionArrayEnum = z.infer<typeof ComplexUnionArrayEnumSchema>;
 
+export const LocalDateSchema = z.object({
+});
+export type LocalDate = z.infer<typeof LocalDateSchema>;
+
+export const OffsetDateTimeSchema = z.object({
+});
+export type OffsetDateTime = z.infer<typeof OffsetDateTimeSchema>;
+
+export const OffsetTimeSchema = z.object({
+});
+export type OffsetTime = z.infer<typeof OffsetTimeSchema>;
+
 export const TopLevelSchema = z.object({
     "complex-union-array": z.array(z.union([ComplexUnionArrayEnumSchema, z.number().int(), z.string().pipe(z.coerce.date())])),
     "date": z.string(),
     "date-time": z.string().pipe(z.coerce.date()),
+    "local-date-class": LocalDateSchema.optional(),
+    "offset-date-time-class": OffsetDateTimeSchema.optional(),
+    "offset-time-class": OffsetTimeSchema.optional(),
     "time": z.string(),
     "union-array": z.array(z.string()),
 });
diff --git a/base/schema-typescript-zod/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
index a69036d..af183cf 100644
--- a/base/schema-typescript-zod/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
@@ -184,6 +184,7 @@ export const EnumSchema = z.enum([
     "left",
     "let",
     "list",
+    "LocalDate",
     "LongNode",
     "Locale",
     "lock",
@@ -219,6 +220,8 @@ export const EnumSchema = z.enum([
     "nullptr",
     "number",
     "object",
+    "OffsetDateTime",
+    "OffsetTime",
     "ObjectNode",
     "ObjectMapper",
     "ObjectReader",
diff --git a/base/schema-typescript-zod/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
index 1736ae3..ac2c042 100644
--- a/base/schema-typescript-zod/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
@@ -713,6 +713,10 @@ export const ListSchema = z.object({
 });
 export type List = z.infer<typeof ListSchema>;
 
+export const LocalDateSchema = z.object({
+});
+export type LocalDate = z.infer<typeof LocalDateSchema>;
+
 export const LocaleSchema = z.object({
 });
 export type Locale = z.infer<typeof LocaleSchema>;
@@ -865,6 +869,14 @@ export const OfSchema = z.object({
 });
 export type Of = z.infer<typeof OfSchema>;
 
+export const OffsetDateTimeSchema = z.object({
+});
+export type OffsetDateTime = z.infer<typeof OffsetDateTimeSchema>;
+
+export const OffsetTimeSchema = z.object({
+});
+export type OffsetTime = z.infer<typeof OffsetTimeSchema>;
+
 export const OnewaySchema = z.object({
 });
 export type Oneway = z.infer<typeof OnewaySchema>;
@@ -1602,6 +1614,7 @@ export const TopLevelSchema = z.preprocess(value => typeof value === "object" &&
     "left": z.union([LeftSchema, z.number()]).optional(),
     "let": z.union([LetSchema, z.number()]).optional(),
     "list": z.union([ListSchema, z.number()]).optional(),
+    "LocalDate": z.union([LocalDateSchema, z.number()]).optional(),
     "Locale": z.union([LocaleSchema, z.number()]).optional(),
     "lock": z.union([LockSchema, z.number()]).optional(),
     "long": z.union([LongSchema, z.number()]).optional(),
@@ -1642,6 +1655,8 @@ export const TopLevelSchema = z.preprocess(value => typeof value === "object" &&
     "ObjectReader": z.union([ObjectReaderSchema, z.number()]).optional(),
     "ObjectWriter": z.union([ObjectWriterSchema, z.number()]).optional(),
     "of": z.union([OfSchema, z.number()]).optional(),
+    "OffsetDateTime": z.union([OffsetDateTimeSchema, z.number()]).optional(),
+    "OffsetTime": z.union([OffsetTimeSchema, z.number()]).optional(),
     "oneway": z.union([OnewaySchema, z.number()]).optional(),
     "open": z.union([OpenSchema, z.number()]).optional(),
     "operator": z.union([OperatorSchema, z.number()]).optional(),
diff --git a/base/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift b/head/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift
index 40ff877..4493f5b 100644
--- a/base/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift
+++ b/head/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift
@@ -6352,6 +6352,7 @@ struct Obj3: Codable {
     let jsonWriter: JSONWriter
     let lambda: Lambda
     let list: List
+    let localDate: LocalDate
     let locale: LocaleClass
     let lock: Lock
     let long: Long
@@ -6361,7 +6362,6 @@ struct Obj3: Codable {
     let marshalJSON: MarshalJSON
     let metadataPropertyHandling: MetadataPropertyHandling
     let module: Module
-    let mutable: Mutable
     let obj3Get: Get
     let obj3Guard: Guard
     let obj3If: If
@@ -6377,7 +6377,6 @@ struct Obj3: Codable {
     let obj3Lazy: Lazy
     let obj3Left: Left
     let obj3Let: Let
-    let obj3Mutating: Mutating
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
@@ -6420,6 +6419,7 @@ struct Obj3: Codable {
         case jsonWriter = "json_writer"
         case lambda = "lambda"
         case list = "list"
+        case localDate = "LocalDate"
         case locale = "Locale"
         case lock = "lock"
         case long = "long"
@@ -6429,7 +6429,6 @@ struct Obj3: Codable {
         case marshalJSON = "MarshalJSON"
         case metadataPropertyHandling = "metadata_property_handling"
         case module = "module"
-        case mutable = "mutable"
         case obj3Get = "get"
         case obj3Guard = "guard"
         case obj3If = "if"
@@ -6445,7 +6444,6 @@ struct Obj3: Codable {
         case obj3Lazy = "lazy"
         case obj3Left = "left"
         case obj3Let = "let"
-        case obj3Mutating = "mutating"
     }
 }
 
@@ -6508,6 +6506,7 @@ extension Obj3 {
         jsonWriter: JSONWriter? = nil,
         lambda: Lambda? = nil,
         list: List? = nil,
+        localDate: LocalDate? = nil,
         locale: LocaleClass? = nil,
         lock: Lock? = nil,
         long: Long? = nil,
@@ -6517,7 +6516,6 @@ extension Obj3 {
         marshalJSON: MarshalJSON? = nil,
         metadataPropertyHandling: MetadataPropertyHandling? = nil,
         module: Module? = nil,
-        mutable: Mutable? = nil,
         obj3Get: Get? = nil,
         obj3Guard: Guard? = nil,
         obj3If: If? = nil,
@@ -6532,8 +6530,7 @@ extension Obj3 {
         obj3JSON: JSON? = nil,
         obj3Lazy: Lazy? = nil,
         obj3Left: Left? = nil,
-        obj3Let: Let? = nil,
-        obj3Mutating: Mutating? = nil
+        obj3Let: Let? = nil
     ) -> Obj3 {
         return Obj3(
             dummy: dummy ?? self.dummy,
@@ -6576,6 +6573,7 @@ extension Obj3 {
             jsonWriter: jsonWriter ?? self.jsonWriter,
             lambda: lambda ?? self.lambda,
             list: list ?? self.list,
+            localDate: localDate ?? self.localDate,
             locale: locale ?? self.locale,
             lock: lock ?? self.lock,
             long: long ?? self.long,
@@ -6585,7 +6583,6 @@ extension Obj3 {
             marshalJSON: marshalJSON ?? self.marshalJSON,
             metadataPropertyHandling: metadataPropertyHandling ?? self.metadataPropertyHandling,
             module: module ?? self.module,
-            mutable: mutable ?? self.mutable,
             obj3Get: obj3Get ?? self.obj3Get,
             obj3Guard: obj3Guard ?? self.obj3Guard,
             obj3If: obj3If ?? self.obj3If,
@@ -6600,8 +6597,7 @@ extension Obj3 {
             obj3JSON: obj3JSON ?? self.obj3JSON,
             obj3Lazy: obj3Lazy ?? self.obj3Lazy,
             obj3Left: obj3Left ?? self.obj3Left,
-            obj3Let: obj3Let ?? self.obj3Let,
-            obj3Mutating: obj3Mutating ?? self.obj3Mutating
+            obj3Let: obj3Let ?? self.obj3Let
         )
     }
 
@@ -8330,6 +8326,50 @@ extension List {
     }
 }
 
+// MARK: - LocalDate
+struct LocalDate: Codable {
+    let localDate: Int
+
+    enum CodingKeys: String, CodingKey {
+        case localDate = "LocalDate"
+    }
+}
+
+// MARK: LocalDate convenience initializers and mutators
+
+extension LocalDate {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LocalDate.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        localDate: Int? = nil
+    ) -> LocalDate {
+        return LocalDate(
+            localDate: localDate ?? self.localDate
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - LocaleClass
 struct LocaleClass: Codable {
     let locale: Int
@@ -8726,50 +8766,6 @@ extension Module {
     }
 }
 
-// MARK: - Mutable
-struct Mutable: Codable {
-    let mutable: Int
-
-    enum CodingKeys: String, CodingKey {
-        case mutable = "mutable"
-    }
-}
-
-// MARK: Mutable convenience initializers and mutators
-
-extension Mutable {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Mutable.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        mutable: Int? = nil
-    ) -> Mutable {
-        return Mutable(
-            mutable: mutable ?? self.mutable
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Get
 struct Get: Codable {
     let getGet: Int
@@ -9430,53 +9426,10 @@ extension Let {
     }
 }
 
-// MARK: - Mutating
-struct Mutating: Codable {
-    let mutatingMutating: Int
-
-    enum CodingKeys: String, CodingKey {
-        case mutatingMutating = "mutating"
-    }
-}
-
-// MARK: Mutating convenience initializers and mutators
-
-extension Mutating {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Mutating.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        mutatingMutating: Int? = nil
-    ) -> Mutating {
-        return Mutating(
-            mutatingMutating: mutatingMutating ?? self.mutatingMutating
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Obj4
 struct Obj4: Codable {
     let dummy: Int
+    let mutable: Mutable
     let namespace: Namespace
     let native: Native
     let new: New
@@ -9496,6 +9449,7 @@ struct Obj4: Codable {
     let nullNode: NullNode
     let nullptr: Nullptr
     let number: Number
+    let obj4Mutating: Mutating
     let obj4Nil: Nil
     let obj4None: NoneClass
     let obj4Nonmutating: Nonmutating
@@ -9510,14 +9464,14 @@ struct Obj4: Codable {
     let obj4Private: Private
     let obj4Protocol: ProtocolClass
     let obj4Public: Public
-    let obj4Repeat: Repeat
-    let obj4Required: Required
     let object: Object
     let objectMapper: ObjectMapper
     let objectNode: ObjectNode
     let objectReader: ObjectReader
     let objectWriter: ObjectWriter
     let of: Of
+    let offsetDateTime: OffsetDateTime
+    let offsetTime: OffsetTime
     let oneway: Oneway
     let or: Or
     let orEq: OrEq
@@ -9539,11 +9493,10 @@ struct Obj4: Codable {
     let regExp: RegExp
     let register: Register
     let reinterpretCast: ReinterpretCast
-    let require: Require
-    let requires: Requires
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case mutable = "mutable"
         case namespace = "namespace"
         case native = "native"
         case new = "new"
@@ -9563,6 +9516,7 @@ struct Obj4: Codable {
         case nullNode = "NullNode"
         case nullptr = "nullptr"
         case number = "number"
+        case obj4Mutating = "mutating"
         case obj4Nil = "nil"
         case obj4None = "none"
         case obj4Nonmutating = "nonmutating"
@@ -9577,14 +9531,14 @@ struct Obj4: Codable {
         case obj4Private = "private"
         case obj4Protocol = "Protocol"
         case obj4Public = "public"
-        case obj4Repeat = "repeat"
-        case obj4Required = "required"
         case object = "object"
         case objectMapper = "ObjectMapper"
         case objectNode = "ObjectNode"
         case objectReader = "ObjectReader"
         case objectWriter = "ObjectWriter"
         case of = "of"
+        case offsetDateTime = "OffsetDateTime"
+        case offsetTime = "OffsetTime"
         case oneway = "oneway"
         case or = "or"
         case orEq = "or_eq"
@@ -9606,8 +9560,6 @@ struct Obj4: Codable {
         case regExp = "RegExp"
         case register = "register"
         case reinterpretCast = "reinterpret_cast"
-        case require = "require"
-        case requires = "requires"
     }
 }
 
@@ -9631,6 +9583,7 @@ extension Obj4 {
 
     func with(
         dummy: Int? = nil,
+        mutable: Mutable? = nil,
         namespace: Namespace? = nil,
         native: Native? = nil,
         new: New? = nil,
@@ -9650,6 +9603,7 @@ extension Obj4 {
         nullNode: NullNode? = nil,
         nullptr: Nullptr? = nil,
         number: Number? = nil,
+        obj4Mutating: Mutating? = nil,
         obj4Nil: Nil? = nil,
         obj4None: NoneClass? = nil,
         obj4Nonmutating: Nonmutating? = nil,
@@ -9664,14 +9618,14 @@ extension Obj4 {
         obj4Private: Private? = nil,
         obj4Protocol: ProtocolClass? = nil,
         obj4Public: Public? = nil,
-        obj4Repeat: Repeat? = nil,
-        obj4Required: Required? = nil,
         object: Object? = nil,
         objectMapper: ObjectMapper? = nil,
         objectNode: ObjectNode? = nil,
         objectReader: ObjectReader? = nil,
         objectWriter: ObjectWriter? = nil,
         of: Of? = nil,
+        offsetDateTime: OffsetDateTime? = nil,
+        offsetTime: OffsetTime? = nil,
         oneway: Oneway? = nil,
         or: Or? = nil,
         orEq: OrEq? = nil,
@@ -9692,12 +9646,11 @@ extension Obj4 {
         ref: Ref? = nil,
         regExp: RegExp? = nil,
         register: Register? = nil,
-        reinterpretCast: ReinterpretCast? = nil,
-        require: Require? = nil,
-        requires: Requires? = nil
+        reinterpretCast: ReinterpretCast? = nil
     ) -> Obj4 {
         return Obj4(
             dummy: dummy ?? self.dummy,
+            mutable: mutable ?? self.mutable,
             namespace: namespace ?? self.namespace,
             native: native ?? self.native,
             new: new ?? self.new,
@@ -9717,6 +9670,7 @@ extension Obj4 {
             nullNode: nullNode ?? self.nullNode,
             nullptr: nullptr ?? self.nullptr,
             number: number ?? self.number,
+            obj4Mutating: obj4Mutating ?? self.obj4Mutating,
             obj4Nil: obj4Nil ?? self.obj4Nil,
             obj4None: obj4None ?? self.obj4None,
             obj4Nonmutating: obj4Nonmutating ?? self.obj4Nonmutating,
@@ -9731,14 +9685,14 @@ extension Obj4 {
             obj4Private: obj4Private ?? self.obj4Private,
             obj4Protocol: obj4Protocol ?? self.obj4Protocol,
             obj4Public: obj4Public ?? self.obj4Public,
-            obj4Repeat: obj4Repeat ?? self.obj4Repeat,
-            obj4Required: obj4Required ?? self.obj4Required,
             object: object ?? self.object,
             objectMapper: objectMapper ?? self.objectMapper,
             objectNode: objectNode ?? self.objectNode,
             objectReader: objectReader ?? self.objectReader,
             objectWriter: objectWriter ?? self.objectWriter,
             of: of ?? self.of,
+            offsetDateTime: offsetDateTime ?? self.offsetDateTime,
+            offsetTime: offsetTime ?? self.offsetTime,
             oneway: oneway ?? self.oneway,
             or: or ?? self.or,
             orEq: orEq ?? self.orEq,
@@ -9759,9 +9713,51 @@ extension Obj4 {
             ref: ref ?? self.ref,
             regExp: regExp ?? self.regExp,
             register: register ?? self.register,
-            reinterpretCast: reinterpretCast ?? self.reinterpretCast,
-            require: require ?? self.require,
-            requires: requires ?? self.requires
+            reinterpretCast: reinterpretCast ?? self.reinterpretCast
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Mutable
+struct Mutable: Codable {
+    let mutable: Int
+
+    enum CodingKeys: String, CodingKey {
+        case mutable = "mutable"
+    }
+}
+
+// MARK: Mutable convenience initializers and mutators
+
+extension Mutable {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Mutable.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        mutable: Int? = nil
+    ) -> Mutable {
+        return Mutable(
+            mutable: mutable ?? self.mutable
         )
     }
 
@@ -10610,6 +10606,50 @@ extension Number {
     }
 }
 
+// MARK: - Mutating
+struct Mutating: Codable {
+    let mutatingMutating: Int
+
+    enum CodingKeys: String, CodingKey {
+        case mutatingMutating = "mutating"
+    }
+}
+
+// MARK: Mutating convenience initializers and mutators
+
+extension Mutating {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Mutating.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        mutatingMutating: Int? = nil
+    ) -> Mutating {
+        return Mutating(
+            mutatingMutating: mutatingMutating ?? self.mutatingMutating
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Nil
 struct Nil: Codable {
     let nilNil: Int
@@ -11226,20 +11266,20 @@ extension Public {
     }
 }
 
-// MARK: - Repeat
-struct Repeat: Codable {
-    let repeatRepeat: Int
+// MARK: - Object
+struct Object: Codable {
+    let object: Int
 
     enum CodingKeys: String, CodingKey {
-        case repeatRepeat = "repeat"
+        case object = "object"
     }
 }
 
-// MARK: Repeat convenience initializers and mutators
+// MARK: Object convenience initializers and mutators
 
-extension Repeat {
+extension Object {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Repeat.self, from: data)
+        self = try newJSONDecoder().decode(Object.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11254,10 +11294,10 @@ extension Repeat {
     }
 
     func with(
-        repeatRepeat: Int? = nil
-    ) -> Repeat {
-        return Repeat(
-            repeatRepeat: repeatRepeat ?? self.repeatRepeat
+        object: Int? = nil
+    ) -> Object {
+        return Object(
+            object: object ?? self.object
         )
     }
 
@@ -11270,20 +11310,20 @@ extension Repeat {
     }
 }
 
-// MARK: - Required
-struct Required: Codable {
-    let requiredRequired: Int
+// MARK: - ObjectMapper
+struct ObjectMapper: Codable {
+    let objectMapper: Int
 
     enum CodingKeys: String, CodingKey {
-        case requiredRequired = "required"
+        case objectMapper = "ObjectMapper"
     }
 }
 
-// MARK: Required convenience initializers and mutators
+// MARK: ObjectMapper convenience initializers and mutators
 
-extension Required {
+extension ObjectMapper {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Required.self, from: data)
+        self = try newJSONDecoder().decode(ObjectMapper.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11298,10 +11338,10 @@ extension Required {
     }
 
     func with(
-        requiredRequired: Int? = nil
-    ) -> Required {
-        return Required(
-            requiredRequired: requiredRequired ?? self.requiredRequired
+        objectMapper: Int? = nil
+    ) -> ObjectMapper {
+        return ObjectMapper(
+            objectMapper: objectMapper ?? self.objectMapper
         )
     }
 
@@ -11314,20 +11354,20 @@ extension Required {
     }
 }
 
-// MARK: - Object
-struct Object: Codable {
-    let object: Int
+// MARK: - ObjectNode
+struct ObjectNode: Codable {
+    let objectNode: Int
 
     enum CodingKeys: String, CodingKey {
-        case object = "object"
+        case objectNode = "ObjectNode"
     }
 }
 
-// MARK: Object convenience initializers and mutators
+// MARK: ObjectNode convenience initializers and mutators
 
-extension Object {
+extension ObjectNode {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Object.self, from: data)
+        self = try newJSONDecoder().decode(ObjectNode.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11342,10 +11382,10 @@ extension Object {
     }
 
     func with(
-        object: Int? = nil
-    ) -> Object {
-        return Object(
-            object: object ?? self.object
+        objectNode: Int? = nil
+    ) -> ObjectNode {
+        return ObjectNode(
+            objectNode: objectNode ?? self.objectNode
         )
     }
 
@@ -11358,20 +11398,20 @@ extension Object {
     }
 }
 
-// MARK: - ObjectMapper
-struct ObjectMapper: Codable {
-    let objectMapper: Int
+// MARK: - ObjectReader
+struct ObjectReader: Codable {
+    let objectReader: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectMapper = "ObjectMapper"
+        case objectReader = "ObjectReader"
     }
 }
 
-// MARK: ObjectMapper convenience initializers and mutators
+// MARK: ObjectReader convenience initializers and mutators
 
-extension ObjectMapper {
+extension ObjectReader {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectMapper.self, from: data)
+        self = try newJSONDecoder().decode(ObjectReader.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11386,10 +11426,10 @@ extension ObjectMapper {
     }
 
     func with(
-        objectMapper: Int? = nil
-    ) -> ObjectMapper {
-        return ObjectMapper(
-            objectMapper: objectMapper ?? self.objectMapper
+        objectReader: Int? = nil
+    ) -> ObjectReader {
+        return ObjectReader(
+            objectReader: objectReader ?? self.objectReader
         )
     }
 
@@ -11402,20 +11442,20 @@ extension ObjectMapper {
     }
 }
 
-// MARK: - ObjectNode
-struct ObjectNode: Codable {
-    let objectNode: Int
+// MARK: - ObjectWriter
+struct ObjectWriter: Codable {
+    let objectWriter: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectNode = "ObjectNode"
+        case objectWriter = "ObjectWriter"
     }
 }
 
-// MARK: ObjectNode convenience initializers and mutators
+// MARK: ObjectWriter convenience initializers and mutators
 
-extension ObjectNode {
+extension ObjectWriter {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectNode.self, from: data)
+        self = try newJSONDecoder().decode(ObjectWriter.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11430,10 +11470,10 @@ extension ObjectNode {
     }
 
     func with(
-        objectNode: Int? = nil
-    ) -> ObjectNode {
-        return ObjectNode(
-            objectNode: objectNode ?? self.objectNode
+        objectWriter: Int? = nil
+    ) -> ObjectWriter {
+        return ObjectWriter(
+            objectWriter: objectWriter ?? self.objectWriter
         )
     }
 
@@ -11446,20 +11486,20 @@ extension ObjectNode {
     }
 }
 
-// MARK: - ObjectReader
-struct ObjectReader: Codable {
-    let objectReader: Int
+// MARK: - Of
+struct Of: Codable {
+    let of: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectReader = "ObjectReader"
+        case of = "of"
     }
 }
 
-// MARK: ObjectReader convenience initializers and mutators
+// MARK: Of convenience initializers and mutators
 
-extension ObjectReader {
+extension Of {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectReader.self, from: data)
+        self = try newJSONDecoder().decode(Of.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11474,10 +11514,10 @@ extension ObjectReader {
     }
 
     func with(
-        objectReader: Int? = nil
-    ) -> ObjectReader {
-        return ObjectReader(
-            objectReader: objectReader ?? self.objectReader
+        of: Int? = nil
+    ) -> Of {
+        return Of(
+            of: of ?? self.of
         )
     }
 
@@ -11490,20 +11530,20 @@ extension ObjectReader {
     }
 }
 
-// MARK: - ObjectWriter
-struct ObjectWriter: Codable {
-    let objectWriter: Int
+// MARK: - OffsetDateTime
+struct OffsetDateTime: Codable {
+    let offsetDateTime: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectWriter = "ObjectWriter"
+        case offsetDateTime = "OffsetDateTime"
     }
 }
 
-// MARK: ObjectWriter convenience initializers and mutators
+// MARK: OffsetDateTime convenience initializers and mutators
 
-extension ObjectWriter {
+extension OffsetDateTime {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectWriter.self, from: data)
+        self = try newJSONDecoder().decode(OffsetDateTime.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11518,10 +11558,10 @@ extension ObjectWriter {
     }
 
     func with(
-        objectWriter: Int? = nil
-    ) -> ObjectWriter {
-        return ObjectWriter(
-            objectWriter: objectWriter ?? self.objectWriter
+        offsetDateTime: Int? = nil
+    ) -> OffsetDateTime {
+        return OffsetDateTime(
+            offsetDateTime: offsetDateTime ?? self.offsetDateTime
         )
     }
 
@@ -11534,20 +11574,20 @@ extension ObjectWriter {
     }
 }
 
-// MARK: - Of
-struct Of: Codable {
-    let of: Int
+// MARK: - OffsetTime
+struct OffsetTime: Codable {
+    let offsetTime: Int
 
     enum CodingKeys: String, CodingKey {
-        case of = "of"
+        case offsetTime = "OffsetTime"
     }
 }
 
-// MARK: Of convenience initializers and mutators
+// MARK: OffsetTime convenience initializers and mutators
 
-extension Of {
+extension OffsetTime {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Of.self, from: data)
+        self = try newJSONDecoder().decode(OffsetTime.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11562,10 +11602,10 @@ extension Of {
     }
 
     func with(
-        of: Int? = nil
-    ) -> Of {
-        return Of(
-            of: of ?? self.of
+        offsetTime: Int? = nil
+    ) -> OffsetTime {
+        return OffsetTime(
+            offsetTime: offsetTime ?? self.offsetTime
         )
     }
 
@@ -12502,98 +12542,12 @@ extension ReinterpretCast {
     }
 }
 
-// MARK: - Require
-struct Require: Codable {
-    let require: Int
-
-    enum CodingKeys: String, CodingKey {
-        case require = "require"
-    }
-}
-
-// MARK: Require convenience initializers and mutators
-
-extension Require {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Require.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        require: Int? = nil
-    ) -> Require {
-        return Require(
-            require: require ?? self.require
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-// MARK: - Requires
-struct Requires: Codable {
-    let requires: Int
-
-    enum CodingKeys: String, CodingKey {
-        case requires = "requires"
-    }
-}
-
-// MARK: Requires convenience initializers and mutators
-
-extension Requires {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Requires.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        requires: Int? = nil
-    ) -> Requires {
-        return Requires(
-            requires: requires ?? self.requires
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Obj5
 struct Obj5: Codable {
     let dummy: Int
     let kSerializer: KSerializer
+    let obj5Repeat: Repeat
+    let obj5Required: Required
     let obj5Rethrows: Rethrows
     let obj5Return: Return
     let obj5Right: Right
@@ -12607,12 +12561,11 @@ struct Obj5: Codable {
     let obj5Throw: Throw
     let obj5Throws: Throws
     let obj5True: True
-    let obj5Try: Try
-    let obj5Type: Obj5Type
-    let obj5Typealias: Typealias
     let primitiveKind: PrimitiveKind
     let purpleSelf: Obj5Self
     let purpleTrue: TrueClass
+    let require: Require
+    let requires: Requires
     let restrict: Restrict
     let retain: Retain
     let runtimeType: RuntimeType
@@ -12656,11 +12609,12 @@ struct Obj5: Codable {
     let toString: ToString
     let topLevel: TopLevelClass
     let transient: Transient
-    let type: TypeClass
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
         case kSerializer = "KSerializer"
+        case obj5Repeat = "repeat"
+        case obj5Required = "required"
         case obj5Rethrows = "rethrows"
         case obj5Return = "return"
         case obj5Right = "right"
@@ -12674,12 +12628,11 @@ struct Obj5: Codable {
         case obj5Throw = "throw"
         case obj5Throws = "throws"
         case obj5True = "True"
-        case obj5Try = "try"
-        case obj5Type = "type"
-        case obj5Typealias = "typealias"
         case primitiveKind = "PrimitiveKind"
         case purpleSelf = "self"
         case purpleTrue = "true"
+        case require = "require"
+        case requires = "requires"
         case restrict = "restrict"
         case retain = "retain"
         case runtimeType = "runtimeType"
@@ -12723,7 +12676,6 @@ struct Obj5: Codable {
         case toString = "toString"
         case topLevel = "top_level"
         case transient = "transient"
-        case type = "Type"
     }
 }
 
@@ -12748,6 +12700,8 @@ extension Obj5 {
     func with(
         dummy: Int? = nil,
         kSerializer: KSerializer? = nil,
+        obj5Repeat: Repeat? = nil,
+        obj5Required: Required? = nil,
         obj5Rethrows: Rethrows? = nil,
         obj5Return: Return? = nil,
         obj5Right: Right? = nil,
@@ -12761,12 +12715,11 @@ extension Obj5 {
         obj5Throw: Throw? = nil,
         obj5Throws: Throws? = nil,
         obj5True: True? = nil,
-        obj5Try: Try? = nil,
-        obj5Type: Obj5Type? = nil,
-        obj5Typealias: Typealias? = nil,
         primitiveKind: PrimitiveKind? = nil,
         purpleSelf: Obj5Self? = nil,
         purpleTrue: TrueClass? = nil,
+        require: Require? = nil,
+        requires: Requires? = nil,
         restrict: Restrict? = nil,
         retain: Retain? = nil,
         runtimeType: RuntimeType? = nil,
@@ -12809,12 +12762,13 @@ extension Obj5 {
         toJSON: ToJSON? = nil,
         toString: ToString? = nil,
         topLevel: TopLevelClass? = nil,
-        transient: Transient? = nil,
-        type: TypeClass? = nil
+        transient: Transient? = nil
     ) -> Obj5 {
         return Obj5(
             dummy: dummy ?? self.dummy,
             kSerializer: kSerializer ?? self.kSerializer,
+            obj5Repeat: obj5Repeat ?? self.obj5Repeat,
+            obj5Required: obj5Required ?? self.obj5Required,
             obj5Rethrows: obj5Rethrows ?? self.obj5Rethrows,
             obj5Return: obj5Return ?? self.obj5Return,
             obj5Right: obj5Right ?? self.obj5Right,
@@ -12828,12 +12782,11 @@ extension Obj5 {
             obj5Throw: obj5Throw ?? self.obj5Throw,
             obj5Throws: obj5Throws ?? self.obj5Throws,
             obj5True: obj5True ?? self.obj5True,
-            obj5Try: obj5Try ?? self.obj5Try,
-            obj5Type: obj5Type ?? self.obj5Type,
-            obj5Typealias: obj5Typealias ?? self.obj5Typealias,
             primitiveKind: primitiveKind ?? self.primitiveKind,
             purpleSelf: purpleSelf ?? self.purpleSelf,
             purpleTrue: purpleTrue ?? self.purpleTrue,
+            require: require ?? self.require,
+            requires: requires ?? self.requires,
             restrict: restrict ?? self.restrict,
             retain: retain ?? self.retain,
             runtimeType: runtimeType ?? self.runtimeType,
@@ -12876,8 +12829,7 @@ extension Obj5 {
             toJSON: toJSON ?? self.toJSON,
             toString: toString ?? self.toString,
             topLevel: topLevel ?? self.topLevel,
-            transient: transient ?? self.transient,
-            type: type ?? self.type
+            transient: transient ?? self.transient
         )
     }
 
@@ -12934,6 +12886,94 @@ extension KSerializer {
     }
 }
 
+// MARK: - Repeat
+struct Repeat: Codable {
+    let repeatRepeat: Int
+
+    enum CodingKeys: String, CodingKey {
+        case repeatRepeat = "repeat"
+    }
+}
+
+// MARK: Repeat convenience initializers and mutators
+
+extension Repeat {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Repeat.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        repeatRepeat: Int? = nil
+    ) -> Repeat {
+        return Repeat(
+            repeatRepeat: repeatRepeat ?? self.repeatRepeat
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Required
+struct Required: Codable {
+    let requiredRequired: Int
+
+    enum CodingKeys: String, CodingKey {
+        case requiredRequired = "required"
+    }
+}
+
+// MARK: Required convenience initializers and mutators
+
+extension Required {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Required.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        requiredRequired: Int? = nil
+    ) -> Required {
+        return Required(
+            requiredRequired: requiredRequired ?? self.requiredRequired
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Rethrows
 struct Rethrows: Codable {
     let rethrowsRethrows: Int
@@ -13506,64 +13546,20 @@ extension True {
     }
 }
 
-// MARK: - Try
-struct Try: Codable {
-    let tryTry: Int
-
-    enum CodingKeys: String, CodingKey {
-        case tryTry = "try"
-    }
-}
-
-// MARK: Try convenience initializers and mutators
-
-extension Try {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Try.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        tryTry: Int? = nil
-    ) -> Try {
-        return Try(
-            tryTry: tryTry ?? self.tryTry
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-// MARK: - Obj5Type
-struct Obj5Type: Codable {
-    let type: Int
+// MARK: - PrimitiveKind
+struct PrimitiveKind: Codable {
+    let primitiveKind: Int
 
     enum CodingKeys: String, CodingKey {
-        case type = "type"
+        case primitiveKind = "PrimitiveKind"
     }
 }
 
-// MARK: Obj5Type convenience initializers and mutators
+// MARK: PrimitiveKind convenience initializers and mutators
 
-extension Obj5Type {
+extension PrimitiveKind {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Obj5Type.self, from: data)
+        self = try newJSONDecoder().decode(PrimitiveKind.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13578,10 +13574,10 @@ extension Obj5Type {
     }
 
     func with(
-        type: Int? = nil
-    ) -> Obj5Type {
-        return Obj5Type(
-            type: type ?? self.type
+        primitiveKind: Int? = nil
+    ) -> PrimitiveKind {
+        return PrimitiveKind(
+            primitiveKind: primitiveKind ?? self.primitiveKind
         )
     }
 
@@ -13594,20 +13590,20 @@ extension Obj5Type {
     }
 }
 
-// MARK: - Typealias
-struct Typealias: Codable {
-    let typealiasTypealias: Int
+// MARK: - Obj5Self
+struct Obj5Self: Codable {
+    let selfSelf: Int
 
     enum CodingKeys: String, CodingKey {
-        case typealiasTypealias = "typealias"
+        case selfSelf = "self"
     }
 }
 
-// MARK: Typealias convenience initializers and mutators
+// MARK: Obj5Self convenience initializers and mutators
 
-extension Typealias {
+extension Obj5Self {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Typealias.self, from: data)
+        self = try newJSONDecoder().decode(Obj5Self.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13622,10 +13618,10 @@ extension Typealias {
     }
 
     func with(
-        typealiasTypealias: Int? = nil
-    ) -> Typealias {
-        return Typealias(
-            typealiasTypealias: typealiasTypealias ?? self.typealiasTypealias
+        selfSelf: Int? = nil
+    ) -> Obj5Self {
+        return Obj5Self(
+            selfSelf: selfSelf ?? self.selfSelf
         )
     }
 
@@ -13638,20 +13634,20 @@ extension Typealias {
     }
 }
 
-// MARK: - PrimitiveKind
-struct PrimitiveKind: Codable {
-    let primitiveKind: Int
+// MARK: - TrueClass
+struct TrueClass: Codable {
+    let trueTrue: Int
 
     enum CodingKeys: String, CodingKey {
-        case primitiveKind = "PrimitiveKind"
+        case trueTrue = "true"
     }
 }
 
-// MARK: PrimitiveKind convenience initializers and mutators
+// MARK: TrueClass convenience initializers and mutators
 
-extension PrimitiveKind {
+extension TrueClass {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(PrimitiveKind.self, from: data)
+        self = try newJSONDecoder().decode(TrueClass.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13666,10 +13662,10 @@ extension PrimitiveKind {
     }
 
     func with(
-        primitiveKind: Int? = nil
-    ) -> PrimitiveKind {
-        return PrimitiveKind(
-            primitiveKind: primitiveKind ?? self.primitiveKind
+        trueTrue: Int? = nil
+    ) -> TrueClass {
+        return TrueClass(
+            trueTrue: trueTrue ?? self.trueTrue
         )
     }
 
@@ -13682,20 +13678,20 @@ extension PrimitiveKind {
     }
 }
 
-// MARK: - Obj5Self
-struct Obj5Self: Codable {
-    let selfSelf: Int
+// MARK: - Require
+struct Require: Codable {
+    let require: Int
 
     enum CodingKeys: String, CodingKey {
-        case selfSelf = "self"
+        case require = "require"
     }
 }
 
-// MARK: Obj5Self convenience initializers and mutators
+// MARK: Require convenience initializers and mutators
 
-extension Obj5Self {
+extension Require {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Obj5Self.self, from: data)
+        self = try newJSONDecoder().decode(Require.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13710,10 +13706,10 @@ extension Obj5Self {
     }
 
     func with(
-        selfSelf: Int? = nil
-    ) -> Obj5Self {
-        return Obj5Self(
-            selfSelf: selfSelf ?? self.selfSelf
+        require: Int? = nil
+    ) -> Require {
+        return Require(
+            require: require ?? self.require
         )
     }
 
@@ -13726,20 +13722,20 @@ extension Obj5Self {
     }
 }
 
-// MARK: - TrueClass
-struct TrueClass: Codable {
-    let trueTrue: Int
+// MARK: - Requires
+struct Requires: Codable {
+    let requires: Int
 
     enum CodingKeys: String, CodingKey {
-        case trueTrue = "true"
+        case requires = "requires"
     }
 }
 
-// MARK: TrueClass convenience initializers and mutators
+// MARK: Requires convenience initializers and mutators
 
-extension TrueClass {
+extension Requires {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(TrueClass.self, from: data)
+        self = try newJSONDecoder().decode(Requires.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13754,10 +13750,10 @@ extension TrueClass {
     }
 
     func with(
-        trueTrue: Int? = nil
-    ) -> TrueClass {
-        return TrueClass(
-            trueTrue: trueTrue ?? self.trueTrue
+        requires: Int? = nil
+    ) -> Requires {
+        return Requires(
+            requires: requires ?? self.requires
         )
     }
 
@@ -15662,59 +15658,19 @@ extension Transient {
     }
 }
 
-// MARK: - TypeClass
-struct TypeClass: Codable {
-    let type: Int
-
-    enum CodingKeys: String, CodingKey {
-        case type = "Type"
-    }
-}
-
-// MARK: TypeClass convenience initializers and mutators
-
-extension TypeClass {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(TypeClass.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        type: Int? = nil
-    ) -> TypeClass {
-        return TypeClass(
-            type: type ?? self.type
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Obj6
 struct Obj6: Codable {
     let dummy: Int
+    let obj6Try: Try
+    let obj6Type: Obj6Type
+    let obj6Typealias: Typealias
     let obj6Unowned: Unowned
     let obj6Var: Var
     let obj6Weak: Weak
     let obj6Where: Where
     let obj6While: While
     let obj6WillSet: WillSet
+    let type: TypeClass
     let typedef: Typedef
     let typeid: Typeid
     let typename: Typename
@@ -15745,12 +15701,16 @@ struct Obj6: Codable {
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case obj6Try = "try"
+        case obj6Type = "type"
+        case obj6Typealias = "typealias"
         case obj6Unowned = "unowned"
         case obj6Var = "var"
         case obj6Weak = "weak"
         case obj6Where = "where"
         case obj6While = "while"
         case obj6WillSet = "willSet"
+        case type = "Type"
         case typedef = "typedef"
         case typeid = "typeid"
         case typename = "typename"
@@ -15801,12 +15761,16 @@ extension Obj6 {
 
     func with(
         dummy: Int? = nil,
+        obj6Try: Try? = nil,
+        obj6Type: Obj6Type? = nil,
+        obj6Typealias: Typealias? = nil,
         obj6Unowned: Unowned? = nil,
         obj6Var: Var? = nil,
         obj6Weak: Weak? = nil,
         obj6Where: Where? = nil,
         obj6While: While? = nil,
         obj6WillSet: WillSet? = nil,
+        type: TypeClass? = nil,
         typedef: Typedef? = nil,
         typeid: Typeid? = nil,
         typename: Typename? = nil,
@@ -15837,12 +15801,16 @@ extension Obj6 {
     ) -> Obj6 {
         return Obj6(
             dummy: dummy ?? self.dummy,
+            obj6Try: obj6Try ?? self.obj6Try,
+            obj6Type: obj6Type ?? self.obj6Type,
+            obj6Typealias: obj6Typealias ?? self.obj6Typealias,
             obj6Unowned: obj6Unowned ?? self.obj6Unowned,
             obj6Var: obj6Var ?? self.obj6Var,
             obj6Weak: obj6Weak ?? self.obj6Weak,
             obj6Where: obj6Where ?? self.obj6Where,
             obj6While: obj6While ?? self.obj6While,
             obj6WillSet: obj6WillSet ?? self.obj6WillSet,
+            type: type ?? self.type,
             typedef: typedef ?? self.typedef,
             typeid: typeid ?? self.typeid,
             typename: typename ?? self.typename,
@@ -15882,6 +15850,138 @@ extension Obj6 {
     }
 }
 
+// MARK: - Try
+struct Try: Codable {
+    let tryTry: Int
+
+    enum CodingKeys: String, CodingKey {
+        case tryTry = "try"
+    }
+}
+
+// MARK: Try convenience initializers and mutators
+
+extension Try {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Try.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        tryTry: Int? = nil
+    ) -> Try {
+        return Try(
+            tryTry: tryTry ?? self.tryTry
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Obj6Type
+struct Obj6Type: Codable {
+    let type: Int
+
+    enum CodingKeys: String, CodingKey {
+        case type = "type"
+    }
+}
+
+// MARK: Obj6Type convenience initializers and mutators
+
+extension Obj6Type {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Obj6Type.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        type: Int? = nil
+    ) -> Obj6Type {
+        return Obj6Type(
+            type: type ?? self.type
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Typealias
+struct Typealias: Codable {
+    let typealiasTypealias: Int
+
+    enum CodingKeys: String, CodingKey {
+        case typealiasTypealias = "typealias"
+    }
+}
+
+// MARK: Typealias convenience initializers and mutators
+
+extension Typealias {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Typealias.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        typealiasTypealias: Int? = nil
+    ) -> Typealias {
+        return Typealias(
+            typealiasTypealias: typealiasTypealias ?? self.typealiasTypealias
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Unowned
 struct Unowned: Codable {
     let unownedUnowned: Int
@@ -16146,6 +16246,50 @@ extension WillSet {
     }
 }
 
+// MARK: - TypeClass
+struct TypeClass: Codable {
+    let type: Int
+
+    enum CodingKeys: String, CodingKey {
+        case type = "Type"
+    }
+}
+
+// MARK: TypeClass convenience initializers and mutators
+
+extension TypeClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TypeClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        type: Int? = nil
+    ) -> TypeClass {
+        return TypeClass(
+            type: type ?? self.type
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Typedef
 struct Typedef: Codable {
     let typedef: Int
diff --git a/base/swift/test/inputs/json/priority/keywords.json/objective-c-support-true__struct-or-class-class--f14372afa3e4/quicktype.swift b/head/swift/test/inputs/json/priority/keywords.json/objective-c-support-true__struct-or-class-class--f14372afa3e4/quicktype.swift
index b483d2d..572e956 100644
--- a/base/swift/test/inputs/json/priority/keywords.json/objective-c-support-true__struct-or-class-class--f14372afa3e4/quicktype.swift
+++ b/head/swift/test/inputs/json/priority/keywords.json/objective-c-support-true__struct-or-class-class--f14372afa3e4/quicktype.swift
@@ -7141,6 +7141,7 @@ extension FalseClass {
     let jsonWriter: JSONWriter
     let lambda: Lambda
     let list: List
+    let localDate: LocalDate
     let locale: LocaleClass
     let lock: Lock
     let long: Long
@@ -7150,7 +7151,6 @@ extension FalseClass {
     let marshalJSON: MarshalJSON
     let metadataPropertyHandling: MetadataPropertyHandling
     let module: Module
-    let mutable: Mutable
     let obj3Get: Get
     let obj3Guard: Guard
     let obj3If: If
@@ -7166,7 +7166,6 @@ extension FalseClass {
     let obj3Lazy: Lazy
     let obj3Left: Left
     let obj3Let: Let
-    let obj3Mutating: Mutating
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
@@ -7209,6 +7208,7 @@ extension FalseClass {
         case jsonWriter = "json_writer"
         case lambda = "lambda"
         case list = "list"
+        case localDate = "LocalDate"
         case locale = "Locale"
         case lock = "lock"
         case long = "long"
@@ -7218,7 +7218,6 @@ extension FalseClass {
         case marshalJSON = "MarshalJSON"
         case metadataPropertyHandling = "metadata_property_handling"
         case module = "module"
-        case mutable = "mutable"
         case obj3Get = "get"
         case obj3Guard = "guard"
         case obj3If = "if"
@@ -7234,10 +7233,9 @@ extension FalseClass {
         case obj3Lazy = "lazy"
         case obj3Left = "left"
         case obj3Let = "let"
-        case obj3Mutating = "mutating"
     }
 
-    init(dummy: Int, function: Function, global: Global, go: Go, goto: Goto, hasOwnProperty: HasOwnProperty, hashCode: HashCode, hashable: HashableClass, hasher: HasherClass, id: ID, imp: Imp, implements: Implements, implicit: Implicit, inline: Inline, instanceof: Instanceof, int: IntClass, intNode: IntNode, interface: Interface, isoDateTimeOffsetConverter: ISODateTimeOffsetConverter, iterable: Iterable, jdec: Jdec, jenc: Jenc, jpipe: Jpipe, jsonAny: JSONAnyClass, jsonCodingKey: JSONCodingKeyClass, jsonConverter: JSONConverter, jsonDecoder: JSONDecoderClass, jsonEncoder: JSONEncoderClass, jsonException: JSONException, jsonGenerator: JSONGenerator, jsonNode: JSONNode, jsonNull: JSONNullClass, jsonParser: JSONParser, jsonReader: JSONReader, jsonSerializer: JSONSerializer, jsonToken: JSONToken, jsonTokenType: JSONTokenType, jsonWriter: JSONWriter, lambda: Lambda, list: List, locale: LocaleClass, lock: Lock, long: Long, longNode: LongNode, map: Map, mapEntry: MapEntry, marshalJSON: MarshalJSON, metadataPropertyHandling: MetadataPropertyHandling, module: Module, mutable: Mutable, obj3Get: Get, obj3Guard: Guard, obj3If: If, obj3Import: Import, obj3In: In, obj3Indirect: Indirect, obj3Infix: Infix, obj3Init: Init, obj3Inout: Inout, obj3Internal: Internal, obj3Is: Is, obj3JSON: JSON, obj3Lazy: Lazy, obj3Left: Left, obj3Let: Let, obj3Mutating: Mutating) {
+    init(dummy: Int, function: Function, global: Global, go: Go, goto: Goto, hasOwnProperty: HasOwnProperty, hashCode: HashCode, hashable: HashableClass, hasher: HasherClass, id: ID, imp: Imp, implements: Implements, implicit: Implicit, inline: Inline, instanceof: Instanceof, int: IntClass, intNode: IntNode, interface: Interface, isoDateTimeOffsetConverter: ISODateTimeOffsetConverter, iterable: Iterable, jdec: Jdec, jenc: Jenc, jpipe: Jpipe, jsonAny: JSONAnyClass, jsonCodingKey: JSONCodingKeyClass, jsonConverter: JSONConverter, jsonDecoder: JSONDecoderClass, jsonEncoder: JSONEncoderClass, jsonException: JSONException, jsonGenerator: JSONGenerator, jsonNode: JSONNode, jsonNull: JSONNullClass, jsonParser: JSONParser, jsonReader: JSONReader, jsonSerializer: JSONSerializer, jsonToken: JSONToken, jsonTokenType: JSONTokenType, jsonWriter: JSONWriter, lambda: Lambda, list: List, localDate: LocalDate, locale: LocaleClass, lock: Lock, long: Long, longNode: LongNode, map: Map, mapEntry: MapEntry, marshalJSON: MarshalJSON, metadataPropertyHandling: MetadataPropertyHandling, module: Module, obj3Get: Get, obj3Guard: Guard, obj3If: If, obj3Import: Import, obj3In: In, obj3Indirect: Indirect, obj3Infix: Infix, obj3Init: Init, obj3Inout: Inout, obj3Internal: Internal, obj3Is: Is, obj3JSON: JSON, obj3Lazy: Lazy, obj3Left: Left, obj3Let: Let) {
         self.dummy = dummy
         self.function = function
         self.global = global
@@ -7278,6 +7276,7 @@ extension FalseClass {
         self.jsonWriter = jsonWriter
         self.lambda = lambda
         self.list = list
+        self.localDate = localDate
         self.locale = locale
         self.lock = lock
         self.long = long
@@ -7287,7 +7286,6 @@ extension FalseClass {
         self.marshalJSON = marshalJSON
         self.metadataPropertyHandling = metadataPropertyHandling
         self.module = module
-        self.mutable = mutable
         self.obj3Get = obj3Get
         self.obj3Guard = obj3Guard
         self.obj3If = obj3If
@@ -7303,7 +7301,6 @@ extension FalseClass {
         self.obj3Lazy = obj3Lazy
         self.obj3Left = obj3Left
         self.obj3Let = obj3Let
-        self.obj3Mutating = obj3Mutating
     }
 }
 
@@ -7312,7 +7309,7 @@ extension FalseClass {
 extension Obj3 {
     convenience init(data: Data) throws {
         let me = try newJSONDecoder().decode(Obj3.self, from: data)
-        self.init(dummy: me.dummy, function: me.function, global: me.global, go: me.go, goto: me.goto, hasOwnProperty: me.hasOwnProperty, hashCode: me.hashCode, hashable: me.hashable, hasher: me.hasher, id: me.id, imp: me.imp, implements: me.implements, implicit: me.implicit, inline: me.inline, instanceof: me.instanceof, int: me.int, intNode: me.intNode, interface: me.interface, isoDateTimeOffsetConverter: me.isoDateTimeOffsetConverter, iterable: me.iterable, jdec: me.jdec, jenc: me.jenc, jpipe: me.jpipe, jsonAny: me.jsonAny, jsonCodingKey: me.jsonCodingKey, jsonConverter: me.jsonConverter, jsonDecoder: me.jsonDecoder, jsonEncoder: me.jsonEncoder, jsonException: me.jsonException, jsonGenerator: me.jsonGenerator, jsonNode: me.jsonNode, jsonNull: me.jsonNull, jsonParser: me.jsonParser, jsonReader: me.jsonReader, jsonSerializer: me.jsonSerializer, jsonToken: me.jsonToken, jsonTokenType: me.jsonTokenType, jsonWriter: me.jsonWriter, lambda: me.lambda, list: me.list, locale: me.locale, lock: me.lock, long: me.long, longNode: me.longNode, map: me.map, mapEntry: me.mapEntry, marshalJSON: me.marshalJSON, metadataPropertyHandling: me.metadataPropertyHandling, module: me.module, mutable: me.mutable, obj3Get: me.obj3Get, obj3Guard: me.obj3Guard, obj3If: me.obj3If, obj3Import: me.obj3Import, obj3In: me.obj3In, obj3Indirect: me.obj3Indirect, obj3Infix: me.obj3Infix, obj3Init: me.obj3Init, obj3Inout: me.obj3Inout, obj3Internal: me.obj3Internal, obj3Is: me.obj3Is, obj3JSON: me.obj3JSON, obj3Lazy: me.obj3Lazy, obj3Left: me.obj3Left, obj3Let: me.obj3Let, obj3Mutating: me.obj3Mutating)
+        self.init(dummy: me.dummy, function: me.function, global: me.global, go: me.go, goto: me.goto, hasOwnProperty: me.hasOwnProperty, hashCode: me.hashCode, hashable: me.hashable, hasher: me.hasher, id: me.id, imp: me.imp, implements: me.implements, implicit: me.implicit, inline: me.inline, instanceof: me.instanceof, int: me.int, intNode: me.intNode, interface: me.interface, isoDateTimeOffsetConverter: me.isoDateTimeOffsetConverter, iterable: me.iterable, jdec: me.jdec, jenc: me.jenc, jpipe: me.jpipe, jsonAny: me.jsonAny, jsonCodingKey: me.jsonCodingKey, jsonConverter: me.jsonConverter, jsonDecoder: me.jsonDecoder, jsonEncoder: me.jsonEncoder, jsonException: me.jsonException, jsonGenerator: me.jsonGenerator, jsonNode: me.jsonNode, jsonNull: me.jsonNull, jsonParser: me.jsonParser, jsonReader: me.jsonReader, jsonSerializer: me.jsonSerializer, jsonToken: me.jsonToken, jsonTokenType: me.jsonTokenType, jsonWriter: me.jsonWriter, lambda: me.lambda, list: me.list, localDate: me.localDate, locale: me.locale, lock: me.lock, long: me.long, longNode: me.longNode, map: me.map, mapEntry: me.mapEntry, marshalJSON: me.marshalJSON, metadataPropertyHandling: me.metadataPropertyHandling, module: me.module, obj3Get: me.obj3Get, obj3Guard: me.obj3Guard, obj3If: me.obj3If, obj3Import: me.obj3Import, obj3In: me.obj3In, obj3Indirect: me.obj3Indirect, obj3Infix: me.obj3Infix, obj3Init: me.obj3Init, obj3Inout: me.obj3Inout, obj3Internal: me.obj3Internal, obj3Is: me.obj3Is, obj3JSON: me.obj3JSON, obj3Lazy: me.obj3Lazy, obj3Left: me.obj3Left, obj3Let: me.obj3Let)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -7367,6 +7364,7 @@ extension Obj3 {
         jsonWriter: JSONWriter? = nil,
         lambda: Lambda? = nil,
         list: List? = nil,
+        localDate: LocalDate? = nil,
         locale: LocaleClass? = nil,
         lock: Lock? = nil,
         long: Long? = nil,
@@ -7376,7 +7374,6 @@ extension Obj3 {
         marshalJSON: MarshalJSON? = nil,
         metadataPropertyHandling: MetadataPropertyHandling? = nil,
         module: Module? = nil,
-        mutable: Mutable? = nil,
         obj3Get: Get? = nil,
         obj3Guard: Guard? = nil,
         obj3If: If? = nil,
@@ -7391,8 +7388,7 @@ extension Obj3 {
         obj3JSON: JSON? = nil,
         obj3Lazy: Lazy? = nil,
         obj3Left: Left? = nil,
-        obj3Let: Let? = nil,
-        obj3Mutating: Mutating? = nil
+        obj3Let: Let? = nil
     ) -> Obj3 {
         return Obj3(
             dummy: dummy ?? self.dummy,
@@ -7435,6 +7431,7 @@ extension Obj3 {
             jsonWriter: jsonWriter ?? self.jsonWriter,
             lambda: lambda ?? self.lambda,
             list: list ?? self.list,
+            localDate: localDate ?? self.localDate,
             locale: locale ?? self.locale,
             lock: lock ?? self.lock,
             long: long ?? self.long,
@@ -7444,7 +7441,6 @@ extension Obj3 {
             marshalJSON: marshalJSON ?? self.marshalJSON,
             metadataPropertyHandling: metadataPropertyHandling ?? self.metadataPropertyHandling,
             module: module ?? self.module,
-            mutable: mutable ?? self.mutable,
             obj3Get: obj3Get ?? self.obj3Get,
             obj3Guard: obj3Guard ?? self.obj3Guard,
             obj3If: obj3If ?? self.obj3If,
@@ -7459,8 +7455,7 @@ extension Obj3 {
             obj3JSON: obj3JSON ?? self.obj3JSON,
             obj3Lazy: obj3Lazy ?? self.obj3Lazy,
             obj3Left: obj3Left ?? self.obj3Left,
-            obj3Let: obj3Let ?? self.obj3Let,
-            obj3Mutating: obj3Mutating ?? self.obj3Mutating
+            obj3Let: obj3Let ?? self.obj3Let
         )
     }
 
@@ -9384,6 +9379,55 @@ extension List {
     }
 }
 
+// MARK: - LocalDate
+@objcMembers class LocalDate: NSObject, Codable {
+    let localDate: Int
+
+    enum CodingKeys: String, CodingKey {
+        case localDate = "LocalDate"
+    }
+
+    init(localDate: Int) {
+        self.localDate = localDate
+    }
+}
+
+// MARK: LocalDate convenience initializers and mutators
+
+extension LocalDate {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(LocalDate.self, from: data)
+        self.init(localDate: me.localDate)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        localDate: Int? = nil
+    ) -> LocalDate {
+        return LocalDate(
+            localDate: localDate ?? self.localDate
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - LocaleClass
 @objcMembers class LocaleClass: NSObject, Codable {
     let locale: Int
@@ -9825,55 +9869,6 @@ extension Module {
     }
 }
 
-// MARK: - Mutable
-@objcMembers class Mutable: NSObject, Codable {
-    let mutable: Int
-
-    enum CodingKeys: String, CodingKey {
-        case mutable = "mutable"
-    }
-
-    init(mutable: Int) {
-        self.mutable = mutable
-    }
-}
-
-// MARK: Mutable convenience initializers and mutators
-
-extension Mutable {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Mutable.self, from: data)
-        self.init(mutable: me.mutable)
-    }
-
-    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        mutable: Int? = nil
-    ) -> Mutable {
-        return Mutable(
-            mutable: mutable ?? self.mutable
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Get
 @objcMembers class Get: NSObject, Codable {
     let getGet: Int
@@ -10609,58 +10604,10 @@ extension Let {
     }
 }
 
-// MARK: - Mutating
-@objcMembers class Mutating: NSObject, Codable {
-    let mutatingMutating: Int
-
-    enum CodingKeys: String, CodingKey {
-        case mutatingMutating = "mutating"
-    }
-
-    init(mutatingMutating: Int) {
-        self.mutatingMutating = mutatingMutating
-    }
-}
-
-// MARK: Mutating convenience initializers and mutators
-
-extension Mutating {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Mutating.self, from: data)
-        self.init(mutatingMutating: me.mutatingMutating)
-    }
-
-    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        mutatingMutating: Int? = nil
-    ) -> Mutating {
-        return Mutating(
-            mutatingMutating: mutatingMutating ?? self.mutatingMutating
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Obj4
 @objcMembers class Obj4: NSObject, Codable {
     let dummy: Int
+    let mutable: Mutable
     let namespace: Namespace
     let native: Native
     let new: New
@@ -10680,6 +10627,7 @@ extension Mutating {
     let nullNode: NullNode
     let nullptr: Nullptr
     let number: Number
+    let obj4Mutating: Mutating
     let obj4Nil: Nil
     let obj4None: NoneClass
     let obj4Nonmutating: Nonmutating
@@ -10694,14 +10642,14 @@ extension Mutating {
     let obj4Private: Private
     let obj4Protocol: ProtocolClass
     let obj4Public: Public
-    let obj4Repeat: Repeat
-    let obj4Required: Required
     let object: Object
     let objectMapper: ObjectMapper
     let objectNode: ObjectNode
     let objectReader: ObjectReader
     let objectWriter: ObjectWriter
     let of: Of
+    let offsetDateTime: OffsetDateTime
+    let offsetTime: OffsetTime
     let oneway: Oneway
     let or: Or
     let orEq: OrEq
@@ -10723,11 +10671,10 @@ extension Mutating {
     let regExp: RegExp
     let register: Register
     let reinterpretCast: ReinterpretCast
-    let require: Require
-    let requires: Requires
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case mutable = "mutable"
         case namespace = "namespace"
         case native = "native"
         case new = "new"
@@ -10747,6 +10694,7 @@ extension Mutating {
         case nullNode = "NullNode"
         case nullptr = "nullptr"
         case number = "number"
+        case obj4Mutating = "mutating"
         case obj4Nil = "nil"
         case obj4None = "none"
         case obj4Nonmutating = "nonmutating"
@@ -10761,14 +10709,14 @@ extension Mutating {
         case obj4Private = "private"
         case obj4Protocol = "Protocol"
         case obj4Public = "public"
-        case obj4Repeat = "repeat"
-        case obj4Required = "required"
         case object = "object"
         case objectMapper = "ObjectMapper"
         case objectNode = "ObjectNode"
         case objectReader = "ObjectReader"
         case objectWriter = "ObjectWriter"
         case of = "of"
+        case offsetDateTime = "OffsetDateTime"
+        case offsetTime = "OffsetTime"
         case oneway = "oneway"
         case or = "or"
         case orEq = "or_eq"
@@ -10790,12 +10738,11 @@ extension Mutating {
         case regExp = "RegExp"
         case register = "register"
         case reinterpretCast = "reinterpret_cast"
-        case require = "require"
-        case requires = "requires"
     }
 
-    init(dummy: Int, namespace: Namespace, native: Native, new: New, newtonsoft: Newtonsoft, no: No, noSuchMethod: NoSuchMethod, noexcept: Noexcept, nonatomic: Nonatomic, none: None, nonlocal: Nonlocal, not: Not, notEq: NotEq, nsError: NSErrorClass, nsObject: NSObjectClass, nsString: NSString, null: Null, nullNode: NullNode, nullptr: Nullptr, number: Number, obj4Nil: Nil, obj4None: NoneClass, obj4Nonmutating: Nonmutating, obj4Null: NullClass, obj4Open: Open, obj4Operator: Operator, obj4Optional: Optional, obj4Override: Override, obj4Postfix: Postfix, obj4Precedence: Precedence, obj4Prefix: Prefix, obj4Private: Private, obj4Protocol: ProtocolClass, obj4Public: Public, obj4Repeat: Repeat, obj4Required: Required, object: Object, objectMapper: ObjectMapper, objectNode: ObjectNode, objectReader: ObjectReader, objectWriter: ObjectWriter, of: Of, oneway: Oneway, or: Or, orEq: OrEq, out: Out, package: Package, params: Params, pass: Pass, port: Port, print: Print, printMembers: PrintMembers, printf: Printf, protected: Protected, purpleProtocol: Obj4Protocol, quicktype: Quicktype, raise: Raise, range: Range, readonly: Readonly, ref: Ref, regExp: RegExp, register: Register, reinterpretCast: ReinterpretCast, require: Require, requires: Requires) {
+    init(dummy: Int, mutable: Mutable, namespace: Namespace, native: Native, new: New, newtonsoft: Newtonsoft, no: No, noSuchMethod: NoSuchMethod, noexcept: Noexcept, nonatomic: Nonatomic, none: None, nonlocal: Nonlocal, not: Not, notEq: NotEq, nsError: NSErrorClass, nsObject: NSObjectClass, nsString: NSString, null: Null, nullNode: NullNode, nullptr: Nullptr, number: Number, obj4Mutating: Mutating, obj4Nil: Nil, obj4None: NoneClass, obj4Nonmutating: Nonmutating, obj4Null: NullClass, obj4Open: Open, obj4Operator: Operator, obj4Optional: Optional, obj4Override: Override, obj4Postfix: Postfix, obj4Precedence: Precedence, obj4Prefix: Prefix, obj4Private: Private, obj4Protocol: ProtocolClass, obj4Public: Public, object: Object, objectMapper: ObjectMapper, objectNode: ObjectNode, objectReader: ObjectReader, objectWriter: ObjectWriter, of: Of, offsetDateTime: OffsetDateTime, offsetTime: OffsetTime, oneway: Oneway, or: Or, orEq: OrEq, out: Out, package: Package, params: Params, pass: Pass, port: Port, print: Print, printMembers: PrintMembers, printf: Printf, protected: Protected, purpleProtocol: Obj4Protocol, quicktype: Quicktype, raise: Raise, range: Range, readonly: Readonly, ref: Ref, regExp: RegExp, register: Register, reinterpretCast: ReinterpretCast) {
         self.dummy = dummy
+        self.mutable = mutable
         self.namespace = namespace
         self.native = native
         self.new = new
@@ -10815,6 +10762,7 @@ extension Mutating {
         self.nullNode = nullNode
         self.nullptr = nullptr
         self.number = number
+        self.obj4Mutating = obj4Mutating
         self.obj4Nil = obj4Nil
         self.obj4None = obj4None
         self.obj4Nonmutating = obj4Nonmutating
@@ -10829,14 +10777,14 @@ extension Mutating {
         self.obj4Private = obj4Private
         self.obj4Protocol = obj4Protocol
         self.obj4Public = obj4Public
-        self.obj4Repeat = obj4Repeat
-        self.obj4Required = obj4Required
         self.object = object
         self.objectMapper = objectMapper
         self.objectNode = objectNode
         self.objectReader = objectReader
         self.objectWriter = objectWriter
         self.of = of
+        self.offsetDateTime = offsetDateTime
+        self.offsetTime = offsetTime
         self.oneway = oneway
         self.or = or
         self.orEq = orEq
@@ -10858,8 +10806,6 @@ extension Mutating {
         self.regExp = regExp
         self.register = register
         self.reinterpretCast = reinterpretCast
-        self.require = require
-        self.requires = requires
     }
 }
 
@@ -10868,7 +10814,7 @@ extension Mutating {
 extension Obj4 {
     convenience init(data: Data) throws {
         let me = try newJSONDecoder().decode(Obj4.self, from: data)
-        self.init(dummy: me.dummy, namespace: me.namespace, native: me.native, new: me.new, newtonsoft: me.newtonsoft, no: me.no, noSuchMethod: me.noSuchMethod, noexcept: me.noexcept, nonatomic: me.nonatomic, none: me.none, nonlocal: me.nonlocal, not: me.not, notEq: me.notEq, nsError: me.nsError, nsObject: me.nsObject, nsString: me.nsString, null: me.null, nullNode: me.nullNode, nullptr: me.nullptr, number: me.number, obj4Nil: me.obj4Nil, obj4None: me.obj4None, obj4Nonmutating: me.obj4Nonmutating, obj4Null: me.obj4Null, obj4Open: me.obj4Open, obj4Operator: me.obj4Operator, obj4Optional: me.obj4Optional, obj4Override: me.obj4Override, obj4Postfix: me.obj4Postfix, obj4Precedence: me.obj4Precedence, obj4Prefix: me.obj4Prefix, obj4Private: me.obj4Private, obj4Protocol: me.obj4Protocol, obj4Public: me.obj4Public, obj4Repeat: me.obj4Repeat, obj4Required: me.obj4Required, object: me.object, objectMapper: me.objectMapper, objectNode: me.objectNode, objectReader: me.objectReader, objectWriter: me.objectWriter, of: me.of, oneway: me.oneway, or: me.or, orEq: me.orEq, out: me.out, package: me.package, params: me.params, pass: me.pass, port: me.port, print: me.print, printMembers: me.printMembers, printf: me.printf, protected: me.protected, purpleProtocol: me.purpleProtocol, quicktype: me.quicktype, raise: me.raise, range: me.range, readonly: me.readonly, ref: me.ref, regExp: me.regExp, register: me.register, reinterpretCast: me.reinterpretCast, require: me.require, requires: me.requires)
+        self.init(dummy: me.dummy, mutable: me.mutable, namespace: me.namespace, native: me.native, new: me.new, newtonsoft: me.newtonsoft, no: me.no, noSuchMethod: me.noSuchMethod, noexcept: me.noexcept, nonatomic: me.nonatomic, none: me.none, nonlocal: me.nonlocal, not: me.not, notEq: me.notEq, nsError: me.nsError, nsObject: me.nsObject, nsString: me.nsString, null: me.null, nullNode: me.nullNode, nullptr: me.nullptr, number: me.number, obj4Mutating: me.obj4Mutating, obj4Nil: me.obj4Nil, obj4None: me.obj4None, obj4Nonmutating: me.obj4Nonmutating, obj4Null: me.obj4Null, obj4Open: me.obj4Open, obj4Operator: me.obj4Operator, obj4Optional: me.obj4Optional, obj4Override: me.obj4Override, obj4Postfix: me.obj4Postfix, obj4Precedence: me.obj4Precedence, obj4Prefix: me.obj4Prefix, obj4Private: me.obj4Private, obj4Protocol: me.obj4Protocol, obj4Public: me.obj4Public, object: me.object, objectMapper: me.objectMapper, objectNode: me.objectNode, objectReader: me.objectReader, objectWriter: me.objectWriter, of: me.of, offsetDateTime: me.offsetDateTime, offsetTime: me.offsetTime, oneway: me.oneway, or: me.or, orEq: me.orEq, out: me.out, package: me.package, params: me.params, pass: me.pass, port: me.port, print: me.print, printMembers: me.printMembers, printf: me.printf, protected: me.protected, purpleProtocol: me.purpleProtocol, quicktype: me.quicktype, raise: me.raise, range: me.range, readonly: me.readonly, ref: me.ref, regExp: me.regExp, register: me.register, reinterpretCast: me.reinterpretCast)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -10884,6 +10830,7 @@ extension Obj4 {
 
     func with(
         dummy: Int? = nil,
+        mutable: Mutable? = nil,
         namespace: Namespace? = nil,
         native: Native? = nil,
         new: New? = nil,
@@ -10903,6 +10850,7 @@ extension Obj4 {
         nullNode: NullNode? = nil,
         nullptr: Nullptr? = nil,
         number: Number? = nil,
+        obj4Mutating: Mutating? = nil,
         obj4Nil: Nil? = nil,
         obj4None: NoneClass? = nil,
         obj4Nonmutating: Nonmutating? = nil,
@@ -10917,14 +10865,14 @@ extension Obj4 {
         obj4Private: Private? = nil,
         obj4Protocol: ProtocolClass? = nil,
         obj4Public: Public? = nil,
-        obj4Repeat: Repeat? = nil,
-        obj4Required: Required? = nil,
         object: Object? = nil,
         objectMapper: ObjectMapper? = nil,
         objectNode: ObjectNode? = nil,
         objectReader: ObjectReader? = nil,
         objectWriter: ObjectWriter? = nil,
         of: Of? = nil,
+        offsetDateTime: OffsetDateTime? = nil,
+        offsetTime: OffsetTime? = nil,
         oneway: Oneway? = nil,
         or: Or? = nil,
         orEq: OrEq? = nil,
@@ -10945,12 +10893,11 @@ extension Obj4 {
         ref: Ref? = nil,
         regExp: RegExp? = nil,
         register: Register? = nil,
-        reinterpretCast: ReinterpretCast? = nil,
-        require: Require? = nil,
-        requires: Requires? = nil
+        reinterpretCast: ReinterpretCast? = nil
     ) -> Obj4 {
         return Obj4(
             dummy: dummy ?? self.dummy,
+            mutable: mutable ?? self.mutable,
             namespace: namespace ?? self.namespace,
             native: native ?? self.native,
             new: new ?? self.new,
@@ -10970,6 +10917,7 @@ extension Obj4 {
             nullNode: nullNode ?? self.nullNode,
             nullptr: nullptr ?? self.nullptr,
             number: number ?? self.number,
+            obj4Mutating: obj4Mutating ?? self.obj4Mutating,
             obj4Nil: obj4Nil ?? self.obj4Nil,
             obj4None: obj4None ?? self.obj4None,
             obj4Nonmutating: obj4Nonmutating ?? self.obj4Nonmutating,
@@ -10984,14 +10932,14 @@ extension Obj4 {
             obj4Private: obj4Private ?? self.obj4Private,
             obj4Protocol: obj4Protocol ?? self.obj4Protocol,
             obj4Public: obj4Public ?? self.obj4Public,
-            obj4Repeat: obj4Repeat ?? self.obj4Repeat,
-            obj4Required: obj4Required ?? self.obj4Required,
             object: object ?? self.object,
             objectMapper: objectMapper ?? self.objectMapper,
             objectNode: objectNode ?? self.objectNode,
             objectReader: objectReader ?? self.objectReader,
             objectWriter: objectWriter ?? self.objectWriter,
             of: of ?? self.of,
+            offsetDateTime: offsetDateTime ?? self.offsetDateTime,
+            offsetTime: offsetTime ?? self.offsetTime,
             oneway: oneway ?? self.oneway,
             or: or ?? self.or,
             orEq: orEq ?? self.orEq,
@@ -11012,9 +10960,56 @@ extension Obj4 {
             ref: ref ?? self.ref,
             regExp: regExp ?? self.regExp,
             register: register ?? self.register,
-            reinterpretCast: reinterpretCast ?? self.reinterpretCast,
-            require: require ?? self.require,
-            requires: requires ?? self.requires
+            reinterpretCast: reinterpretCast ?? self.reinterpretCast
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Mutable
+@objcMembers class Mutable: NSObject, Codable {
+    let mutable: Int
+
+    enum CodingKeys: String, CodingKey {
+        case mutable = "mutable"
+    }
+
+    init(mutable: Int) {
+        self.mutable = mutable
+    }
+}
+
+// MARK: Mutable convenience initializers and mutators
+
+extension Mutable {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Mutable.self, from: data)
+        self.init(mutable: me.mutable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        mutable: Int? = nil
+    ) -> Mutable {
+        return Mutable(
+            mutable: mutable ?? self.mutable
         )
     }
 
@@ -11958,6 +11953,55 @@ extension Number {
     }
 }
 
+// MARK: - Mutating
+@objcMembers class Mutating: NSObject, Codable {
+    let mutatingMutating: Int
+
+    enum CodingKeys: String, CodingKey {
+        case mutatingMutating = "mutating"
+    }
+
+    init(mutatingMutating: Int) {
+        self.mutatingMutating = mutatingMutating
+    }
+}
+
+// MARK: Mutating convenience initializers and mutators
+
+extension Mutating {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Mutating.self, from: data)
+        self.init(mutatingMutating: me.mutatingMutating)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        mutatingMutating: Int? = nil
+    ) -> Mutating {
+        return Mutating(
+            mutatingMutating: mutatingMutating ?? self.mutatingMutating
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Nil
 @objcMembers class Nil: NSObject, Codable {
     let nilNil: Int
@@ -12644,104 +12688,6 @@ extension Public {
     }
 }
 
-// MARK: - Repeat
-@objcMembers class Repeat: NSObject, Codable {
-    let repeatRepeat: Int
-
-    enum CodingKeys: String, CodingKey {
-        case repeatRepeat = "repeat"
-    }
-
-    init(repeatRepeat: Int) {
-        self.repeatRepeat = repeatRepeat
-    }
-}
-
-// MARK: Repeat convenience initializers and mutators
-
-extension Repeat {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Repeat.self, from: data)
-        self.init(repeatRepeat: me.repeatRepeat)
-    }
-
-    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        repeatRepeat: Int? = nil
-    ) -> Repeat {
-        return Repeat(
-            repeatRepeat: repeatRepeat ?? self.repeatRepeat
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-// MARK: - Required
-@objcMembers class Required: NSObject, Codable {
-    let requiredRequired: Int
-
-    enum CodingKeys: String, CodingKey {
-        case requiredRequired = "required"
-    }
-
-    init(requiredRequired: Int) {
-        self.requiredRequired = requiredRequired
-    }
-}
-
-// MARK: Required convenience initializers and mutators
-
-extension Required {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Required.self, from: data)
-        self.init(requiredRequired: me.requiredRequired)
-    }
-
-    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        requiredRequired: Int? = nil
-    ) -> Required {
-        return Required(
-            requiredRequired: requiredRequired ?? self.requiredRequired
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Object
 @objcMembers class Object: NSObject, Codable {
     let object: Int
@@ -13036,6 +12982,104 @@ extension Of {
     }
 }
 
+// MARK: - OffsetDateTime
+@objcMembers class OffsetDateTime: NSObject, Codable {
+    let offsetDateTime: Int
+
+    enum CodingKeys: String, CodingKey {
+        case offsetDateTime = "OffsetDateTime"
+    }
+
+    init(offsetDateTime: Int) {
+        self.offsetDateTime = offsetDateTime
+    }
+}
+
+// MARK: OffsetDateTime convenience initializers and mutators
+
+extension OffsetDateTime {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(OffsetDateTime.self, from: data)
+        self.init(offsetDateTime: me.offsetDateTime)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        offsetDateTime: Int? = nil
+    ) -> OffsetDateTime {
+        return OffsetDateTime(
+            offsetDateTime: offsetDateTime ?? self.offsetDateTime
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - OffsetTime
+@objcMembers class OffsetTime: NSObject, Codable {
+    let offsetTime: Int
+
+    enum CodingKeys: String, CodingKey {
+        case offsetTime = "OffsetTime"
+    }
+
+    init(offsetTime: Int) {
+        self.offsetTime = offsetTime
+    }
+}
+
+// MARK: OffsetTime convenience initializers and mutators
+
+extension OffsetTime {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(OffsetTime.self, from: data)
+        self.init(offsetTime: me.offsetTime)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        offsetTime: Int? = nil
+    ) -> OffsetTime {
+        return OffsetTime(
+            offsetTime: offsetTime ?? self.offsetTime
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Oneway
 @objcMembers class Oneway: NSObject, Codable {
     let oneway: Int
@@ -14065,195 +14109,98 @@ extension ReinterpretCast {
     }
 }
 
-// MARK: - Require
-@objcMembers class Require: NSObject, Codable {
-    let require: Int
+// MARK: - Obj5
+@objcMembers class Obj5: NSObject, Codable {
+    let dummy: Int
+    let kSerializer: KSerializer
+    let obj5Repeat: Repeat
+    let obj5Required: Required
+    let obj5Retain: Retain
+    let obj5Rethrows: Rethrows
+    let obj5Return: Return
+    let obj5Right: Right
+    let obj5Self: SelfClass
+    let obj5Set: Set
+    let obj5Static: Static
+    let obj5Struct: Struct
+    let obj5Subscript: Subscript
+    let obj5Super: Super
+    let obj5Switch: Switch
+    let obj5Throw: Throw
+    let obj5Throws: Throws
+    let obj5True: True
+    let primitiveKind: PrimitiveKind
+    let purpleSelf: Obj5Self
+    let purpleTrue: TrueClass
+    let require: Require
+    let requires: Requires
+    let restrict: Restrict
+    let runtimeType: RuntimeType
+    let s: S
+    let sbyte: Sbyte
+    let sealed: Sealed
+    let sel: Sel
+    let select: Select
+    let sendable: Sendable
+    let serialDescriptor: SerialDescriptor
+    let serialName: SerialName
+    let serializable: Serializable
+    let serializationFeature: SerializationFeature
+    let serialize: Serialize
+    let serializerProvider: SerializerProvider
+    let short: Short
+    let signed: Signed
+    let simpleModule: SimpleModule
+    let sizeof: Sizeof
+    let stackalloc: Stackalloc
+    let standards: Standards
+    let staticAssert: StaticAssert
+    let staticCast: StaticCast
+    let stdDeserializer: StdDeserializer
+    let stdSerializer: StdSerializer
+    let strictfp: Strictfp
+    let string: StringClass
+    let symbol: Symbol
+    let synchronized: Synchronized
+    let system: System
+    let template: Template
+    let textNode: TextNode
+    let then: Then
+    let this: This
+    let threadLocal: ThreadLocal
+    let timeOnly: TimeOnly
+    let timeOnlyConverter: TimeOnlyConverter
+    let timeZone: TimeZoneClass
+    let toDict: ToDict
+    let toJSON: ToJSON
+    let toString: ToString
+    let topLevel: TopLevelClass
+    let transient: Transient
 
     enum CodingKeys: String, CodingKey {
+        case dummy = "dummy"
+        case kSerializer = "KSerializer"
+        case obj5Repeat = "repeat"
+        case obj5Required = "required"
+        case obj5Retain = "retain"
+        case obj5Rethrows = "rethrows"
+        case obj5Return = "return"
+        case obj5Right = "right"
+        case obj5Self = "Self"
+        case obj5Set = "set"
+        case obj5Static = "static"
+        case obj5Struct = "struct"
+        case obj5Subscript = "subscript"
+        case obj5Super = "super"
+        case obj5Switch = "switch"
+        case obj5Throw = "throw"
+        case obj5Throws = "throws"
+        case obj5True = "True"
+        case primitiveKind = "PrimitiveKind"
+        case purpleSelf = "self"
+        case purpleTrue = "true"
         case require = "require"
-    }
-
-    init(require: Int) {
-        self.require = require
-    }
-}
-
-// MARK: Require convenience initializers and mutators
-
-extension Require {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Require.self, from: data)
-        self.init(require: me.require)
-    }
-
-    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        require: Int? = nil
-    ) -> Require {
-        return Require(
-            require: require ?? self.require
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-// MARK: - Requires
-@objcMembers class Requires: NSObject, Codable {
-    let requires: Int
-
-    enum CodingKeys: String, CodingKey {
         case requires = "requires"
-    }
-
-    init(requires: Int) {
-        self.requires = requires
-    }
-}
-
-// MARK: Requires convenience initializers and mutators
-
-extension Requires {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Requires.self, from: data)
-        self.init(requires: me.requires)
-    }
-
-    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        requires: Int? = nil
-    ) -> Requires {
-        return Requires(
-            requires: requires ?? self.requires
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-// MARK: - Obj5
-@objcMembers class Obj5: NSObject, Codable {
-    let dummy: Int
-    let kSerializer: KSerializer
-    let obj5Retain: Retain
-    let obj5Rethrows: Rethrows
-    let obj5Return: Return
-    let obj5Right: Right
-    let obj5Self: SelfClass
-    let obj5Set: Set
-    let obj5Static: Static
-    let obj5Struct: Struct
-    let obj5Subscript: Subscript
-    let obj5Super: Super
-    let obj5Switch: Switch
-    let obj5Throw: Throw
-    let obj5Throws: Throws
-    let obj5True: True
-    let obj5Try: Try
-    let obj5Type: Obj5Type
-    let obj5Typealias: Typealias
-    let primitiveKind: PrimitiveKind
-    let purpleSelf: Obj5Self
-    let purpleTrue: TrueClass
-    let restrict: Restrict
-    let runtimeType: RuntimeType
-    let s: S
-    let sbyte: Sbyte
-    let sealed: Sealed
-    let sel: Sel
-    let select: Select
-    let sendable: Sendable
-    let serialDescriptor: SerialDescriptor
-    let serialName: SerialName
-    let serializable: Serializable
-    let serializationFeature: SerializationFeature
-    let serialize: Serialize
-    let serializerProvider: SerializerProvider
-    let short: Short
-    let signed: Signed
-    let simpleModule: SimpleModule
-    let sizeof: Sizeof
-    let stackalloc: Stackalloc
-    let standards: Standards
-    let staticAssert: StaticAssert
-    let staticCast: StaticCast
-    let stdDeserializer: StdDeserializer
-    let stdSerializer: StdSerializer
-    let strictfp: Strictfp
-    let string: StringClass
-    let symbol: Symbol
-    let synchronized: Synchronized
-    let system: System
-    let template: Template
-    let textNode: TextNode
-    let then: Then
-    let this: This
-    let threadLocal: ThreadLocal
-    let timeOnly: TimeOnly
-    let timeOnlyConverter: TimeOnlyConverter
-    let timeZone: TimeZoneClass
-    let toDict: ToDict
-    let toJSON: ToJSON
-    let toString: ToString
-    let topLevel: TopLevelClass
-    let transient: Transient
-    let type: TypeClass
-
-    enum CodingKeys: String, CodingKey {
-        case dummy = "dummy"
-        case kSerializer = "KSerializer"
-        case obj5Retain = "retain"
-        case obj5Rethrows = "rethrows"
-        case obj5Return = "return"
-        case obj5Right = "right"
-        case obj5Self = "Self"
-        case obj5Set = "set"
-        case obj5Static = "static"
-        case obj5Struct = "struct"
-        case obj5Subscript = "subscript"
-        case obj5Super = "super"
-        case obj5Switch = "switch"
-        case obj5Throw = "throw"
-        case obj5Throws = "throws"
-        case obj5True = "True"
-        case obj5Try = "try"
-        case obj5Type = "type"
-        case obj5Typealias = "typealias"
-        case primitiveKind = "PrimitiveKind"
-        case purpleSelf = "self"
-        case purpleTrue = "true"
         case restrict = "restrict"
         case runtimeType = "runtimeType"
         case s = "s"
@@ -14296,12 +14243,13 @@ extension Requires {
         case toString = "toString"
         case topLevel = "top_level"
         case transient = "transient"
-        case type = "Type"
     }
 
-    init(dummy: Int, kSerializer: KSerializer, obj5Retain: Retain, obj5Rethrows: Rethrows, obj5Return: Return, obj5Right: Right, obj5Self: SelfClass, obj5Set: Set, obj5Static: Static, obj5Struct: Struct, obj5Subscript: Subscript, obj5Super: Super, obj5Switch: Switch, obj5Throw: Throw, obj5Throws: Throws, obj5True: True, obj5Try: Try, obj5Type: Obj5Type, obj5Typealias: Typealias, primitiveKind: PrimitiveKind, purpleSelf: Obj5Self, purpleTrue: TrueClass, restrict: Restrict, runtimeType: RuntimeType, s: S, sbyte: Sbyte, sealed: Sealed, sel: Sel, select: Select, sendable: Sendable, serialDescriptor: SerialDescriptor, serialName: SerialName, serializable: Serializable, serializationFeature: SerializationFeature, serialize: Serialize, serializerProvider: SerializerProvider, short: Short, signed: Signed, simpleModule: SimpleModule, sizeof: Sizeof, stackalloc: Stackalloc, standards: Standards, staticAssert: StaticAssert, staticCast: StaticCast, stdDeserializer: StdDeserializer, stdSerializer: StdSerializer, strictfp: Strictfp, string: StringClass, symbol: Symbol, synchronized: Synchronized, system: System, template: Template, textNode: TextNode, then: Then, this: This, threadLocal: ThreadLocal, timeOnly: TimeOnly, timeOnlyConverter: TimeOnlyConverter, timeZone: TimeZoneClass, toDict: ToDict, toJSON: ToJSON, toString: ToString, topLevel: TopLevelClass, transient: Transient, type: TypeClass) {
+    init(dummy: Int, kSerializer: KSerializer, obj5Repeat: Repeat, obj5Required: Required, obj5Retain: Retain, obj5Rethrows: Rethrows, obj5Return: Return, obj5Right: Right, obj5Self: SelfClass, obj5Set: Set, obj5Static: Static, obj5Struct: Struct, obj5Subscript: Subscript, obj5Super: Super, obj5Switch: Switch, obj5Throw: Throw, obj5Throws: Throws, obj5True: True, primitiveKind: PrimitiveKind, purpleSelf: Obj5Self, purpleTrue: TrueClass, require: Require, requires: Requires, restrict: Restrict, runtimeType: RuntimeType, s: S, sbyte: Sbyte, sealed: Sealed, sel: Sel, select: Select, sendable: Sendable, serialDescriptor: SerialDescriptor, serialName: SerialName, serializable: Serializable, serializationFeature: SerializationFeature, serialize: Serialize, serializerProvider: SerializerProvider, short: Short, signed: Signed, simpleModule: SimpleModule, sizeof: Sizeof, stackalloc: Stackalloc, standards: Standards, staticAssert: StaticAssert, staticCast: StaticCast, stdDeserializer: StdDeserializer, stdSerializer: StdSerializer, strictfp: Strictfp, string: StringClass, symbol: Symbol, synchronized: Synchronized, system: System, template: Template, textNode: TextNode, then: Then, this: This, threadLocal: ThreadLocal, timeOnly: TimeOnly, timeOnlyConverter: TimeOnlyConverter, timeZone: TimeZoneClass, toDict: ToDict, toJSON: ToJSON, toString: ToString, topLevel: TopLevelClass, transient: Transient) {
         self.dummy = dummy
         self.kSerializer = kSerializer
+        self.obj5Repeat = obj5Repeat
+        self.obj5Required = obj5Required
         self.obj5Retain = obj5Retain
         self.obj5Rethrows = obj5Rethrows
         self.obj5Return = obj5Return
@@ -14316,12 +14264,11 @@ extension Requires {
         self.obj5Throw = obj5Throw
         self.obj5Throws = obj5Throws
         self.obj5True = obj5True
-        self.obj5Try = obj5Try
-        self.obj5Type = obj5Type
-        self.obj5Typealias = obj5Typealias
         self.primitiveKind = primitiveKind
         self.purpleSelf = purpleSelf
         self.purpleTrue = purpleTrue
+        self.require = require
+        self.requires = requires
         self.restrict = restrict
         self.runtimeType = runtimeType
         self.s = s
@@ -14364,7 +14311,6 @@ extension Requires {
         self.toString = toString
         self.topLevel = topLevel
         self.transient = transient
-        self.type = type
     }
 }
 
@@ -14373,7 +14319,7 @@ extension Requires {
 extension Obj5 {
     convenience init(data: Data) throws {
         let me = try newJSONDecoder().decode(Obj5.self, from: data)
-        self.init(dummy: me.dummy, kSerializer: me.kSerializer, obj5Retain: me.obj5Retain, obj5Rethrows: me.obj5Rethrows, obj5Return: me.obj5Return, obj5Right: me.obj5Right, obj5Self: me.obj5Self, obj5Set: me.obj5Set, obj5Static: me.obj5Static, obj5Struct: me.obj5Struct, obj5Subscript: me.obj5Subscript, obj5Super: me.obj5Super, obj5Switch: me.obj5Switch, obj5Throw: me.obj5Throw, obj5Throws: me.obj5Throws, obj5True: me.obj5True, obj5Try: me.obj5Try, obj5Type: me.obj5Type, obj5Typealias: me.obj5Typealias, primitiveKind: me.primitiveKind, purpleSelf: me.purpleSelf, purpleTrue: me.purpleTrue, restrict: me.restrict, runtimeType: me.runtimeType, s: me.s, sbyte: me.sbyte, sealed: me.sealed, sel: me.sel, select: me.select, sendable: me.sendable, serialDescriptor: me.serialDescriptor, serialName: me.serialName, serializable: me.serializable, serializationFeature: me.serializationFeature, serialize: me.serialize, serializerProvider: me.serializerProvider, short: me.short, signed: me.signed, simpleModule: me.simpleModule, sizeof: me.sizeof, stackalloc: me.stackalloc, standards: me.standards, staticAssert: me.staticAssert, staticCast: me.staticCast, stdDeserializer: me.stdDeserializer, stdSerializer: me.stdSerializer, strictfp: me.strictfp, string: me.string, symbol: me.symbol, synchronized: me.synchronized, system: me.system, template: me.template, textNode: me.textNode, then: me.then, this: me.this, threadLocal: me.threadLocal, timeOnly: me.timeOnly, timeOnlyConverter: me.timeOnlyConverter, timeZone: me.timeZone, toDict: me.toDict, toJSON: me.toJSON, toString: me.toString, topLevel: me.topLevel, transient: me.transient, type: me.type)
+        self.init(dummy: me.dummy, kSerializer: me.kSerializer, obj5Repeat: me.obj5Repeat, obj5Required: me.obj5Required, obj5Retain: me.obj5Retain, obj5Rethrows: me.obj5Rethrows, obj5Return: me.obj5Return, obj5Right: me.obj5Right, obj5Self: me.obj5Self, obj5Set: me.obj5Set, obj5Static: me.obj5Static, obj5Struct: me.obj5Struct, obj5Subscript: me.obj5Subscript, obj5Super: me.obj5Super, obj5Switch: me.obj5Switch, obj5Throw: me.obj5Throw, obj5Throws: me.obj5Throws, obj5True: me.obj5True, primitiveKind: me.primitiveKind, purpleSelf: me.purpleSelf, purpleTrue: me.purpleTrue, require: me.require, requires: me.requires, restrict: me.restrict, runtimeType: me.runtimeType, s: me.s, sbyte: me.sbyte, sealed: me.sealed, sel: me.sel, select: me.select, sendable: me.sendable, serialDescriptor: me.serialDescriptor, serialName: me.serialName, serializable: me.serializable, serializationFeature: me.serializationFeature, serialize: me.serialize, serializerProvider: me.serializerProvider, short: me.short, signed: me.signed, simpleModule: me.simpleModule, sizeof: me.sizeof, stackalloc: me.stackalloc, standards: me.standards, staticAssert: me.staticAssert, staticCast: me.staticCast, stdDeserializer: me.stdDeserializer, stdSerializer: me.stdSerializer, strictfp: me.strictfp, string: me.string, symbol: me.symbol, synchronized: me.synchronized, system: me.system, template: me.template, textNode: me.textNode, then: me.then, this: me.this, threadLocal: me.threadLocal, timeOnly: me.timeOnly, timeOnlyConverter: me.timeOnlyConverter, timeZone: me.timeZone, toDict: me.toDict, toJSON: me.toJSON, toString: me.toString, topLevel: me.topLevel, transient: me.transient)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -14390,6 +14336,8 @@ extension Obj5 {
     func with(
         dummy: Int? = nil,
         kSerializer: KSerializer? = nil,
+        obj5Repeat: Repeat? = nil,
+        obj5Required: Required? = nil,
         obj5Retain: Retain? = nil,
         obj5Rethrows: Rethrows? = nil,
         obj5Return: Return? = nil,
@@ -14404,12 +14352,11 @@ extension Obj5 {
         obj5Throw: Throw? = nil,
         obj5Throws: Throws? = nil,
         obj5True: True? = nil,
-        obj5Try: Try? = nil,
-        obj5Type: Obj5Type? = nil,
-        obj5Typealias: Typealias? = nil,
         primitiveKind: PrimitiveKind? = nil,
         purpleSelf: Obj5Self? = nil,
         purpleTrue: TrueClass? = nil,
+        require: Require? = nil,
+        requires: Requires? = nil,
         restrict: Restrict? = nil,
         runtimeType: RuntimeType? = nil,
         s: S? = nil,
@@ -14451,12 +14398,13 @@ extension Obj5 {
         toJSON: ToJSON? = nil,
         toString: ToString? = nil,
         topLevel: TopLevelClass? = nil,
-        transient: Transient? = nil,
-        type: TypeClass? = nil
+        transient: Transient? = nil
     ) -> Obj5 {
         return Obj5(
             dummy: dummy ?? self.dummy,
             kSerializer: kSerializer ?? self.kSerializer,
+            obj5Repeat: obj5Repeat ?? self.obj5Repeat,
+            obj5Required: obj5Required ?? self.obj5Required,
             obj5Retain: obj5Retain ?? self.obj5Retain,
             obj5Rethrows: obj5Rethrows ?? self.obj5Rethrows,
             obj5Return: obj5Return ?? self.obj5Return,
@@ -14471,12 +14419,11 @@ extension Obj5 {
             obj5Throw: obj5Throw ?? self.obj5Throw,
             obj5Throws: obj5Throws ?? self.obj5Throws,
             obj5True: obj5True ?? self.obj5True,
-            obj5Try: obj5Try ?? self.obj5Try,
-            obj5Type: obj5Type ?? self.obj5Type,
-            obj5Typealias: obj5Typealias ?? self.obj5Typealias,
             primitiveKind: primitiveKind ?? self.primitiveKind,
             purpleSelf: purpleSelf ?? self.purpleSelf,
             purpleTrue: purpleTrue ?? self.purpleTrue,
+            require: require ?? self.require,
+            requires: requires ?? self.requires,
             restrict: restrict ?? self.restrict,
             runtimeType: runtimeType ?? self.runtimeType,
             s: s ?? self.s,
@@ -14518,8 +14465,7 @@ extension Obj5 {
             toJSON: toJSON ?? self.toJSON,
             toString: toString ?? self.toString,
             topLevel: topLevel ?? self.topLevel,
-            transient: transient ?? self.transient,
-            type: type ?? self.type
+            transient: transient ?? self.transient
         )
     }
 
@@ -14581,6 +14527,104 @@ extension KSerializer {
     }
 }
 
+// MARK: - Repeat
+@objcMembers class Repeat: NSObject, Codable {
+    let repeatRepeat: Int
+
+    enum CodingKeys: String, CodingKey {
+        case repeatRepeat = "repeat"
+    }
+
+    init(repeatRepeat: Int) {
+        self.repeatRepeat = repeatRepeat
+    }
+}
+
+// MARK: Repeat convenience initializers and mutators
+
+extension Repeat {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Repeat.self, from: data)
+        self.init(repeatRepeat: me.repeatRepeat)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        repeatRepeat: Int? = nil
+    ) -> Repeat {
+        return Repeat(
+            repeatRepeat: repeatRepeat ?? self.repeatRepeat
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Required
+@objcMembers class Required: NSObject, Codable {
+    let requiredRequired: Int
+
+    enum CodingKeys: String, CodingKey {
+        case requiredRequired = "required"
+    }
+
+    init(requiredRequired: Int) {
+        self.requiredRequired = requiredRequired
+    }
+}
+
+// MARK: Required convenience initializers and mutators
+
+extension Required {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Required.self, from: data)
+        self.init(requiredRequired: me.requiredRequired)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        requiredRequired: Int? = nil
+    ) -> Required {
+        return Required(
+            requiredRequired: requiredRequired ?? self.requiredRequired
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Retain
 @objcMembers class Retain: NSObject, Codable {
     let retainRetain: Int
@@ -15267,74 +15311,25 @@ extension True {
     }
 }
 
-// MARK: - Try
-@objcMembers class Try: NSObject, Codable {
-    let tryTry: Int
-
-    enum CodingKeys: String, CodingKey {
-        case tryTry = "try"
-    }
-
-    init(tryTry: Int) {
-        self.tryTry = tryTry
-    }
-}
-
-// MARK: Try convenience initializers and mutators
-
-extension Try {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Try.self, from: data)
-        self.init(tryTry: me.tryTry)
-    }
-
-    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        tryTry: Int? = nil
-    ) -> Try {
-        return Try(
-            tryTry: tryTry ?? self.tryTry
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-// MARK: - Obj5Type
-@objcMembers class Obj5Type: NSObject, Codable {
-    let type: Int
+// MARK: - PrimitiveKind
+@objcMembers class PrimitiveKind: NSObject, Codable {
+    let primitiveKind: Int
 
     enum CodingKeys: String, CodingKey {
-        case type = "type"
+        case primitiveKind = "PrimitiveKind"
     }
 
-    init(type: Int) {
-        self.type = type
+    init(primitiveKind: Int) {
+        self.primitiveKind = primitiveKind
     }
 }
 
-// MARK: Obj5Type convenience initializers and mutators
+// MARK: PrimitiveKind convenience initializers and mutators
 
-extension Obj5Type {
+extension PrimitiveKind {
     convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Obj5Type.self, from: data)
-        self.init(type: me.type)
+        let me = try newJSONDecoder().decode(PrimitiveKind.self, from: data)
+        self.init(primitiveKind: me.primitiveKind)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15349,10 +15344,10 @@ extension Obj5Type {
     }
 
     func with(
-        type: Int? = nil
-    ) -> Obj5Type {
-        return Obj5Type(
-            type: type ?? self.type
+        primitiveKind: Int? = nil
+    ) -> PrimitiveKind {
+        return PrimitiveKind(
+            primitiveKind: primitiveKind ?? self.primitiveKind
         )
     }
 
@@ -15365,25 +15360,25 @@ extension Obj5Type {
     }
 }
 
-// MARK: - Typealias
-@objcMembers class Typealias: NSObject, Codable {
-    let typealiasTypealias: Int
+// MARK: - Obj5Self
+@objcMembers class Obj5Self: NSObject, Codable {
+    let selfSelf: Int
 
     enum CodingKeys: String, CodingKey {
-        case typealiasTypealias = "typealias"
+        case selfSelf = "self"
     }
 
-    init(typealiasTypealias: Int) {
-        self.typealiasTypealias = typealiasTypealias
+    init(selfSelf: Int) {
+        self.selfSelf = selfSelf
     }
 }
 
-// MARK: Typealias convenience initializers and mutators
+// MARK: Obj5Self convenience initializers and mutators
 
-extension Typealias {
+extension Obj5Self {
     convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Typealias.self, from: data)
-        self.init(typealiasTypealias: me.typealiasTypealias)
+        let me = try newJSONDecoder().decode(Obj5Self.self, from: data)
+        self.init(selfSelf: me.selfSelf)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15398,10 +15393,10 @@ extension Typealias {
     }
 
     func with(
-        typealiasTypealias: Int? = nil
-    ) -> Typealias {
-        return Typealias(
-            typealiasTypealias: typealiasTypealias ?? self.typealiasTypealias
+        selfSelf: Int? = nil
+    ) -> Obj5Self {
+        return Obj5Self(
+            selfSelf: selfSelf ?? self.selfSelf
         )
     }
 
@@ -15414,25 +15409,25 @@ extension Typealias {
     }
 }
 
-// MARK: - PrimitiveKind
-@objcMembers class PrimitiveKind: NSObject, Codable {
-    let primitiveKind: Int
+// MARK: - TrueClass
+@objcMembers class TrueClass: NSObject, Codable {
+    let trueTrue: Int
 
     enum CodingKeys: String, CodingKey {
-        case primitiveKind = "PrimitiveKind"
+        case trueTrue = "true"
     }
 
-    init(primitiveKind: Int) {
-        self.primitiveKind = primitiveKind
+    init(trueTrue: Int) {
+        self.trueTrue = trueTrue
     }
 }
 
-// MARK: PrimitiveKind convenience initializers and mutators
+// MARK: TrueClass convenience initializers and mutators
 
-extension PrimitiveKind {
+extension TrueClass {
     convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(PrimitiveKind.self, from: data)
-        self.init(primitiveKind: me.primitiveKind)
+        let me = try newJSONDecoder().decode(TrueClass.self, from: data)
+        self.init(trueTrue: me.trueTrue)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15447,10 +15442,10 @@ extension PrimitiveKind {
     }
 
     func with(
-        primitiveKind: Int? = nil
-    ) -> PrimitiveKind {
-        return PrimitiveKind(
-            primitiveKind: primitiveKind ?? self.primitiveKind
+        trueTrue: Int? = nil
+    ) -> TrueClass {
+        return TrueClass(
+            trueTrue: trueTrue ?? self.trueTrue
         )
     }
 
@@ -15463,25 +15458,25 @@ extension PrimitiveKind {
     }
 }
 
-// MARK: - Obj5Self
-@objcMembers class Obj5Self: NSObject, Codable {
-    let selfSelf: Int
+// MARK: - Require
+@objcMembers class Require: NSObject, Codable {
+    let require: Int
 
     enum CodingKeys: String, CodingKey {
-        case selfSelf = "self"
+        case require = "require"
     }
 
-    init(selfSelf: Int) {
-        self.selfSelf = selfSelf
+    init(require: Int) {
+        self.require = require
     }
 }
 
-// MARK: Obj5Self convenience initializers and mutators
+// MARK: Require convenience initializers and mutators
 
-extension Obj5Self {
+extension Require {
     convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Obj5Self.self, from: data)
-        self.init(selfSelf: me.selfSelf)
+        let me = try newJSONDecoder().decode(Require.self, from: data)
+        self.init(require: me.require)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15496,10 +15491,10 @@ extension Obj5Self {
     }
 
     func with(
-        selfSelf: Int? = nil
-    ) -> Obj5Self {
-        return Obj5Self(
-            selfSelf: selfSelf ?? self.selfSelf
+        require: Int? = nil
+    ) -> Require {
+        return Require(
+            require: require ?? self.require
         )
     }
 
@@ -15512,25 +15507,25 @@ extension Obj5Self {
     }
 }
 
-// MARK: - TrueClass
-@objcMembers class TrueClass: NSObject, Codable {
-    let trueTrue: Int
+// MARK: - Requires
+@objcMembers class Requires: NSObject, Codable {
+    let requires: Int
 
     enum CodingKeys: String, CodingKey {
-        case trueTrue = "true"
+        case requires = "requires"
     }
 
-    init(trueTrue: Int) {
-        self.trueTrue = trueTrue
+    init(requires: Int) {
+        self.requires = requires
     }
 }
 
-// MARK: TrueClass convenience initializers and mutators
+// MARK: Requires convenience initializers and mutators
 
-extension TrueClass {
+extension Requires {
     convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(TrueClass.self, from: data)
-        self.init(trueTrue: me.trueTrue)
+        let me = try newJSONDecoder().decode(Requires.self, from: data)
+        self.init(requires: me.requires)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15545,10 +15540,10 @@ extension TrueClass {
     }
 
     func with(
-        trueTrue: Int? = nil
-    ) -> TrueClass {
-        return TrueClass(
-            trueTrue: trueTrue ?? self.trueTrue
+        requires: Int? = nil
+    ) -> Requires {
+        return Requires(
+            requires: requires ?? self.requires
         )
     }
 
@@ -17619,64 +17614,19 @@ extension Transient {
     }
 }
 
-// MARK: - TypeClass
-@objcMembers class TypeClass: NSObject, Codable {
-    let type: Int
-
-    enum CodingKeys: String, CodingKey {
-        case type = "Type"
-    }
-
-    init(type: Int) {
-        self.type = type
-    }
-}
-
-// MARK: TypeClass convenience initializers and mutators
-
-extension TypeClass {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(TypeClass.self, from: data)
-        self.init(type: me.type)
-    }
-
-    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        type: Int? = nil
-    ) -> TypeClass {
-        return TypeClass(
-            type: type ?? self.type
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Obj6
 @objcMembers class Obj6: NSObject, Codable {
     let dummy: Int
+    let obj6Try: Try
+    let obj6Type: Obj6Type
+    let obj6Typealias: Typealias
     let obj6Unowned: Unowned
     let obj6Var: Var
     let obj6Weak: Weak
     let obj6Where: Where
     let obj6While: While
     let obj6WillSet: WillSet
+    let type: TypeClass
     let typedef: Typedef
     let typeid: Typeid
     let typename: Typename
@@ -17707,12 +17657,16 @@ extension TypeClass {
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case obj6Try = "try"
+        case obj6Type = "type"
+        case obj6Typealias = "typealias"
         case obj6Unowned = "unowned"
         case obj6Var = "var"
         case obj6Weak = "weak"
         case obj6Where = "where"
         case obj6While = "while"
         case obj6WillSet = "willSet"
+        case type = "Type"
         case typedef = "typedef"
         case typeid = "typeid"
         case typename = "typename"
@@ -17742,14 +17696,18 @@ extension TypeClass {
         case yield = "yield"
     }
 
-    init(dummy: Int, obj6Unowned: Unowned, obj6Var: Var, obj6Weak: Weak, obj6Where: Where, obj6While: While, obj6WillSet: WillSet, typedef: Typedef, typeid: Typeid, typename: Typename, typeof: Typeof, uint: Uint, ulong: Ulong, unchecked: Unchecked, undefined: Undefined, union: Union, unmarshalJSON: UnmarshalJSON, unsafe: Unsafe, unsigned: Unsigned, useSerializers: UseSerializers, ushort: Ushort, using: Using, utf8JSONReader: Utf8JSONReader, utf8JSONWriter: Utf8JSONWriter, uuid: UUIDClass, virtual: Virtual, void: Void, volatile: Volatile, wcharT: WcharT, with: With, xor: Xor, xorEq: XorEq, yes: Yes, yield: Yield) {
+    init(dummy: Int, obj6Try: Try, obj6Type: Obj6Type, obj6Typealias: Typealias, obj6Unowned: Unowned, obj6Var: Var, obj6Weak: Weak, obj6Where: Where, obj6While: While, obj6WillSet: WillSet, type: TypeClass, typedef: Typedef, typeid: Typeid, typename: Typename, typeof: Typeof, uint: Uint, ulong: Ulong, unchecked: Unchecked, undefined: Undefined, union: Union, unmarshalJSON: UnmarshalJSON, unsafe: Unsafe, unsigned: Unsigned, useSerializers: UseSerializers, ushort: Ushort, using: Using, utf8JSONReader: Utf8JSONReader, utf8JSONWriter: Utf8JSONWriter, uuid: UUIDClass, virtual: Virtual, void: Void, volatile: Volatile, wcharT: WcharT, with: With, xor: Xor, xorEq: XorEq, yes: Yes, yield: Yield) {
         self.dummy = dummy
+        self.obj6Try = obj6Try
+        self.obj6Type = obj6Type
+        self.obj6Typealias = obj6Typealias
         self.obj6Unowned = obj6Unowned
         self.obj6Var = obj6Var
         self.obj6Weak = obj6Weak
         self.obj6Where = obj6Where
         self.obj6While = obj6While
         self.obj6WillSet = obj6WillSet
+        self.type = type
         self.typedef = typedef
         self.typeid = typeid
         self.typename = typename
@@ -17785,7 +17743,7 @@ extension TypeClass {
 extension Obj6 {
     convenience init(data: Data) throws {
         let me = try newJSONDecoder().decode(Obj6.self, from: data)
-        self.init(dummy: me.dummy, obj6Unowned: me.obj6Unowned, obj6Var: me.obj6Var, obj6Weak: me.obj6Weak, obj6Where: me.obj6Where, obj6While: me.obj6While, obj6WillSet: me.obj6WillSet, typedef: me.typedef, typeid: me.typeid, typename: me.typename, typeof: me.typeof, uint: me.uint, ulong: me.ulong, unchecked: me.unchecked, undefined: me.undefined, union: me.union, unmarshalJSON: me.unmarshalJSON, unsafe: me.unsafe, unsigned: me.unsigned, useSerializers: me.useSerializers, ushort: me.ushort, using: me.using, utf8JSONReader: me.utf8JSONReader, utf8JSONWriter: me.utf8JSONWriter, uuid: me.uuid, virtual: me.virtual, void: me.void, volatile: me.volatile, wcharT: me.wcharT, with: me.with, xor: me.xor, xorEq: me.xorEq, yes: me.yes, yield: me.yield)
+        self.init(dummy: me.dummy, obj6Try: me.obj6Try, obj6Type: me.obj6Type, obj6Typealias: me.obj6Typealias, obj6Unowned: me.obj6Unowned, obj6Var: me.obj6Var, obj6Weak: me.obj6Weak, obj6Where: me.obj6Where, obj6While: me.obj6While, obj6WillSet: me.obj6WillSet, type: me.type, typedef: me.typedef, typeid: me.typeid, typename: me.typename, typeof: me.typeof, uint: me.uint, ulong: me.ulong, unchecked: me.unchecked, undefined: me.undefined, union: me.union, unmarshalJSON: me.unmarshalJSON, unsafe: me.unsafe, unsigned: me.unsigned, useSerializers: me.useSerializers, ushort: me.ushort, using: me.using, utf8JSONReader: me.utf8JSONReader, utf8JSONWriter: me.utf8JSONWriter, uuid: me.uuid, virtual: me.virtual, void: me.void, volatile: me.volatile, wcharT: me.wcharT, with: me.with, xor: me.xor, xorEq: me.xorEq, yes: me.yes, yield: me.yield)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -17801,12 +17759,16 @@ extension Obj6 {
 
     func with(
         dummy: Int? = nil,
+        obj6Try: Try? = nil,
+        obj6Type: Obj6Type? = nil,
+        obj6Typealias: Typealias? = nil,
         obj6Unowned: Unowned? = nil,
         obj6Var: Var? = nil,
         obj6Weak: Weak? = nil,
         obj6Where: Where? = nil,
         obj6While: While? = nil,
         obj6WillSet: WillSet? = nil,
+        type: TypeClass? = nil,
         typedef: Typedef? = nil,
         typeid: Typeid? = nil,
         typename: Typename? = nil,
@@ -17837,12 +17799,16 @@ extension Obj6 {
     ) -> Obj6 {
         return Obj6(
             dummy: dummy ?? self.dummy,
+            obj6Try: obj6Try ?? self.obj6Try,
+            obj6Type: obj6Type ?? self.obj6Type,
+            obj6Typealias: obj6Typealias ?? self.obj6Typealias,
             obj6Unowned: obj6Unowned ?? self.obj6Unowned,
             obj6Var: obj6Var ?? self.obj6Var,
             obj6Weak: obj6Weak ?? self.obj6Weak,
             obj6Where: obj6Where ?? self.obj6Where,
             obj6While: obj6While ?? self.obj6While,
             obj6WillSet: obj6WillSet ?? self.obj6WillSet,
+            type: type ?? self.type,
             typedef: typedef ?? self.typedef,
             typeid: typeid ?? self.typeid,
             typename: typename ?? self.typename,
@@ -17882,6 +17848,153 @@ extension Obj6 {
     }
 }
 
+// MARK: - Try
+@objcMembers class Try: NSObject, Codable {
+    let tryTry: Int
+
+    enum CodingKeys: String, CodingKey {
+        case tryTry = "try"
+    }
+
+    init(tryTry: Int) {
+        self.tryTry = tryTry
+    }
+}
+
+// MARK: Try convenience initializers and mutators
+
+extension Try {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Try.self, from: data)
+        self.init(tryTry: me.tryTry)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        tryTry: Int? = nil
+    ) -> Try {
+        return Try(
+            tryTry: tryTry ?? self.tryTry
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Obj6Type
+@objcMembers class Obj6Type: NSObject, Codable {
+    let type: Int
+
+    enum CodingKeys: String, CodingKey {
+        case type = "type"
+    }
+
+    init(type: Int) {
+        self.type = type
+    }
+}
+
+// MARK: Obj6Type convenience initializers and mutators
+
+extension Obj6Type {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Obj6Type.self, from: data)
+        self.init(type: me.type)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        type: Int? = nil
+    ) -> Obj6Type {
+        return Obj6Type(
+            type: type ?? self.type
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Typealias
+@objcMembers class Typealias: NSObject, Codable {
+    let typealiasTypealias: Int
+
+    enum CodingKeys: String, CodingKey {
+        case typealiasTypealias = "typealias"
+    }
+
+    init(typealiasTypealias: Int) {
+        self.typealiasTypealias = typealiasTypealias
+    }
+}
+
+// MARK: Typealias convenience initializers and mutators
+
+extension Typealias {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Typealias.self, from: data)
+        self.init(typealiasTypealias: me.typealiasTypealias)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        typealiasTypealias: Int? = nil
+    ) -> Typealias {
+        return Typealias(
+            typealiasTypealias: typealiasTypealias ?? self.typealiasTypealias
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Unowned
 @objcMembers class Unowned: NSObject, Codable {
     let unownedUnowned: Int
@@ -18176,6 +18289,55 @@ extension WillSet {
     }
 }
 
+// MARK: - TypeClass
+@objcMembers class TypeClass: NSObject, Codable {
+    let type: Int
+
+    enum CodingKeys: String, CodingKey {
+        case type = "Type"
+    }
+
+    init(type: Int) {
+        self.type = type
+    }
+}
+
+// MARK: TypeClass convenience initializers and mutators
+
+extension TypeClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TypeClass.self, from: data)
+        self.init(type: me.type)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        type: Int? = nil
+    ) -> TypeClass {
+        return TypeClass(
+            type: type ?? self.type
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Typedef
 @objcMembers class Typedef: NSObject, Codable {
     let typedef: Int
diff --git a/base/swift/test/inputs/json/priority/keywords.json/protocol-equatable--bd9068f466c1/quicktype.swift b/head/swift/test/inputs/json/priority/keywords.json/protocol-equatable--bd9068f466c1/quicktype.swift
index 8f3e620..8cf07fc 100644
--- a/base/swift/test/inputs/json/priority/keywords.json/protocol-equatable--bd9068f466c1/quicktype.swift
+++ b/head/swift/test/inputs/json/priority/keywords.json/protocol-equatable--bd9068f466c1/quicktype.swift
@@ -7144,6 +7144,7 @@ struct Obj3: Codable, Equatable {
     let jsonWriter: JSONWriter
     let lambda: Lambda
     let list: List
+    let localDate: LocalDate
     let locale: LocaleClass
     let lock: Lock
     let long: Long
@@ -7153,7 +7154,6 @@ struct Obj3: Codable, Equatable {
     let marshalJSON: MarshalJSON
     let metadataPropertyHandling: MetadataPropertyHandling
     let module: Module
-    let mutable: Mutable
     let obj3Get: Get
     let obj3Guard: Guard
     let obj3If: If
@@ -7169,7 +7169,6 @@ struct Obj3: Codable, Equatable {
     let obj3Lazy: Lazy
     let obj3Left: Left
     let obj3Let: Let
-    let obj3Mutating: Mutating
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
@@ -7212,6 +7211,7 @@ struct Obj3: Codable, Equatable {
         case jsonWriter = "json_writer"
         case lambda = "lambda"
         case list = "list"
+        case localDate = "LocalDate"
         case locale = "Locale"
         case lock = "lock"
         case long = "long"
@@ -7221,7 +7221,6 @@ struct Obj3: Codable, Equatable {
         case marshalJSON = "MarshalJSON"
         case metadataPropertyHandling = "metadata_property_handling"
         case module = "module"
-        case mutable = "mutable"
         case obj3Get = "get"
         case obj3Guard = "guard"
         case obj3If = "if"
@@ -7237,7 +7236,6 @@ struct Obj3: Codable, Equatable {
         case obj3Lazy = "lazy"
         case obj3Left = "left"
         case obj3Let = "let"
-        case obj3Mutating = "mutating"
     }
 }
 
@@ -7300,6 +7298,7 @@ extension Obj3 {
         jsonWriter: JSONWriter? = nil,
         lambda: Lambda? = nil,
         list: List? = nil,
+        localDate: LocalDate? = nil,
         locale: LocaleClass? = nil,
         lock: Lock? = nil,
         long: Long? = nil,
@@ -7309,7 +7308,6 @@ extension Obj3 {
         marshalJSON: MarshalJSON? = nil,
         metadataPropertyHandling: MetadataPropertyHandling? = nil,
         module: Module? = nil,
-        mutable: Mutable? = nil,
         obj3Get: Get? = nil,
         obj3Guard: Guard? = nil,
         obj3If: If? = nil,
@@ -7324,8 +7322,7 @@ extension Obj3 {
         obj3JSON: JSON? = nil,
         obj3Lazy: Lazy? = nil,
         obj3Left: Left? = nil,
-        obj3Let: Let? = nil,
-        obj3Mutating: Mutating? = nil
+        obj3Let: Let? = nil
     ) -> Obj3 {
         return Obj3(
             dummy: dummy ?? self.dummy,
@@ -7368,6 +7365,7 @@ extension Obj3 {
             jsonWriter: jsonWriter ?? self.jsonWriter,
             lambda: lambda ?? self.lambda,
             list: list ?? self.list,
+            localDate: localDate ?? self.localDate,
             locale: locale ?? self.locale,
             lock: lock ?? self.lock,
             long: long ?? self.long,
@@ -7377,7 +7375,6 @@ extension Obj3 {
             marshalJSON: marshalJSON ?? self.marshalJSON,
             metadataPropertyHandling: metadataPropertyHandling ?? self.metadataPropertyHandling,
             module: module ?? self.module,
-            mutable: mutable ?? self.mutable,
             obj3Get: obj3Get ?? self.obj3Get,
             obj3Guard: obj3Guard ?? self.obj3Guard,
             obj3If: obj3If ?? self.obj3If,
@@ -7392,8 +7389,7 @@ extension Obj3 {
             obj3JSON: obj3JSON ?? self.obj3JSON,
             obj3Lazy: obj3Lazy ?? self.obj3Lazy,
             obj3Left: obj3Left ?? self.obj3Left,
-            obj3Let: obj3Let ?? self.obj3Let,
-            obj3Mutating: obj3Mutating ?? self.obj3Mutating
+            obj3Let: obj3Let ?? self.obj3Let
         )
     }
 
@@ -9362,6 +9358,56 @@ extension List {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - LocalDate
+struct LocalDate: Codable, Equatable {
+    let localDate: Int
+
+    enum CodingKeys: String, CodingKey {
+        case localDate = "LocalDate"
+    }
+}
+
+// MARK: LocalDate convenience initializers and mutators
+
+extension LocalDate {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LocalDate.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        localDate: Int? = nil
+    ) -> LocalDate {
+        return LocalDate(
+            localDate: localDate ?? self.localDate
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - LocaleClass
 struct LocaleClass: Codable, Equatable {
     let locale: Int
@@ -9812,56 +9858,6 @@ extension Module {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Mutable
-struct Mutable: Codable, Equatable {
-    let mutable: Int
-
-    enum CodingKeys: String, CodingKey {
-        case mutable = "mutable"
-    }
-}
-
-// MARK: Mutable convenience initializers and mutators
-
-extension Mutable {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Mutable.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        mutable: Int? = nil
-    ) -> Mutable {
-        return Mutable(
-            mutable: mutable ?? self.mutable
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
 // MARK: - Get
 struct Get: Codable, Equatable {
     let getGet: Int
@@ -10612,59 +10608,10 @@ extension Let {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Mutating
-struct Mutating: Codable, Equatable {
-    let mutatingMutating: Int
-
-    enum CodingKeys: String, CodingKey {
-        case mutatingMutating = "mutating"
-    }
-}
-
-// MARK: Mutating convenience initializers and mutators
-
-extension Mutating {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Mutating.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        mutatingMutating: Int? = nil
-    ) -> Mutating {
-        return Mutating(
-            mutatingMutating: mutatingMutating ?? self.mutatingMutating
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
 // MARK: - Obj4
 struct Obj4: Codable, Equatable {
     let dummy: Int
+    let mutable: Mutable
     let namespace: Namespace
     let native: Native
     let new: New
@@ -10684,6 +10631,7 @@ struct Obj4: Codable, Equatable {
     let nullNode: NullNode
     let nullptr: Nullptr
     let number: Number
+    let obj4Mutating: Mutating
     let obj4Nil: Nil
     let obj4None: NoneClass
     let obj4Nonmutating: Nonmutating
@@ -10698,14 +10646,14 @@ struct Obj4: Codable, Equatable {
     let obj4Private: Private
     let obj4Protocol: ProtocolClass
     let obj4Public: Public
-    let obj4Repeat: Repeat
-    let obj4Required: Required
     let object: Object
     let objectMapper: ObjectMapper
     let objectNode: ObjectNode
     let objectReader: ObjectReader
     let objectWriter: ObjectWriter
     let of: Of
+    let offsetDateTime: OffsetDateTime
+    let offsetTime: OffsetTime
     let oneway: Oneway
     let or: Or
     let orEq: OrEq
@@ -10727,11 +10675,10 @@ struct Obj4: Codable, Equatable {
     let regExp: RegExp
     let register: Register
     let reinterpretCast: ReinterpretCast
-    let require: Require
-    let requires: Requires
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case mutable = "mutable"
         case namespace = "namespace"
         case native = "native"
         case new = "new"
@@ -10751,6 +10698,7 @@ struct Obj4: Codable, Equatable {
         case nullNode = "NullNode"
         case nullptr = "nullptr"
         case number = "number"
+        case obj4Mutating = "mutating"
         case obj4Nil = "nil"
         case obj4None = "none"
         case obj4Nonmutating = "nonmutating"
@@ -10765,14 +10713,14 @@ struct Obj4: Codable, Equatable {
         case obj4Private = "private"
         case obj4Protocol = "Protocol"
         case obj4Public = "public"
-        case obj4Repeat = "repeat"
-        case obj4Required = "required"
         case object = "object"
         case objectMapper = "ObjectMapper"
         case objectNode = "ObjectNode"
         case objectReader = "ObjectReader"
         case objectWriter = "ObjectWriter"
         case of = "of"
+        case offsetDateTime = "OffsetDateTime"
+        case offsetTime = "OffsetTime"
         case oneway = "oneway"
         case or = "or"
         case orEq = "or_eq"
@@ -10794,8 +10742,6 @@ struct Obj4: Codable, Equatable {
         case regExp = "RegExp"
         case register = "register"
         case reinterpretCast = "reinterpret_cast"
-        case require = "require"
-        case requires = "requires"
     }
 }
 
@@ -10819,6 +10765,7 @@ extension Obj4 {
 
     func with(
         dummy: Int? = nil,
+        mutable: Mutable? = nil,
         namespace: Namespace? = nil,
         native: Native? = nil,
         new: New? = nil,
@@ -10838,6 +10785,7 @@ extension Obj4 {
         nullNode: NullNode? = nil,
         nullptr: Nullptr? = nil,
         number: Number? = nil,
+        obj4Mutating: Mutating? = nil,
         obj4Nil: Nil? = nil,
         obj4None: NoneClass? = nil,
         obj4Nonmutating: Nonmutating? = nil,
@@ -10852,14 +10800,14 @@ extension Obj4 {
         obj4Private: Private? = nil,
         obj4Protocol: ProtocolClass? = nil,
         obj4Public: Public? = nil,
-        obj4Repeat: Repeat? = nil,
-        obj4Required: Required? = nil,
         object: Object? = nil,
         objectMapper: ObjectMapper? = nil,
         objectNode: ObjectNode? = nil,
         objectReader: ObjectReader? = nil,
         objectWriter: ObjectWriter? = nil,
         of: Of? = nil,
+        offsetDateTime: OffsetDateTime? = nil,
+        offsetTime: OffsetTime? = nil,
         oneway: Oneway? = nil,
         or: Or? = nil,
         orEq: OrEq? = nil,
@@ -10880,12 +10828,11 @@ extension Obj4 {
         ref: Ref? = nil,
         regExp: RegExp? = nil,
         register: Register? = nil,
-        reinterpretCast: ReinterpretCast? = nil,
-        require: Require? = nil,
-        requires: Requires? = nil
+        reinterpretCast: ReinterpretCast? = nil
     ) -> Obj4 {
         return Obj4(
             dummy: dummy ?? self.dummy,
+            mutable: mutable ?? self.mutable,
             namespace: namespace ?? self.namespace,
             native: native ?? self.native,
             new: new ?? self.new,
@@ -10905,6 +10852,7 @@ extension Obj4 {
             nullNode: nullNode ?? self.nullNode,
             nullptr: nullptr ?? self.nullptr,
             number: number ?? self.number,
+            obj4Mutating: obj4Mutating ?? self.obj4Mutating,
             obj4Nil: obj4Nil ?? self.obj4Nil,
             obj4None: obj4None ?? self.obj4None,
             obj4Nonmutating: obj4Nonmutating ?? self.obj4Nonmutating,
@@ -10919,14 +10867,14 @@ extension Obj4 {
             obj4Private: obj4Private ?? self.obj4Private,
             obj4Protocol: obj4Protocol ?? self.obj4Protocol,
             obj4Public: obj4Public ?? self.obj4Public,
-            obj4Repeat: obj4Repeat ?? self.obj4Repeat,
-            obj4Required: obj4Required ?? self.obj4Required,
             object: object ?? self.object,
             objectMapper: objectMapper ?? self.objectMapper,
             objectNode: objectNode ?? self.objectNode,
             objectReader: objectReader ?? self.objectReader,
             objectWriter: objectWriter ?? self.objectWriter,
             of: of ?? self.of,
+            offsetDateTime: offsetDateTime ?? self.offsetDateTime,
+            offsetTime: offsetTime ?? self.offsetTime,
             oneway: oneway ?? self.oneway,
             or: or ?? self.or,
             orEq: orEq ?? self.orEq,
@@ -10947,9 +10895,57 @@ extension Obj4 {
             ref: ref ?? self.ref,
             regExp: regExp ?? self.regExp,
             register: register ?? self.register,
-            reinterpretCast: reinterpretCast ?? self.reinterpretCast,
-            require: require ?? self.require,
-            requires: requires ?? self.requires
+            reinterpretCast: reinterpretCast ?? self.reinterpretCast
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Mutable
+struct Mutable: Codable, Equatable {
+    let mutable: Int
+
+    enum CodingKeys: String, CodingKey {
+        case mutable = "mutable"
+    }
+}
+
+// MARK: Mutable convenience initializers and mutators
+
+extension Mutable {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Mutable.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        mutable: Int? = nil
+    ) -> Mutable {
+        return Mutable(
+            mutable: mutable ?? self.mutable
         )
     }
 
@@ -11918,6 +11914,56 @@ extension Number {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - Mutating
+struct Mutating: Codable, Equatable {
+    let mutatingMutating: Int
+
+    enum CodingKeys: String, CodingKey {
+        case mutatingMutating = "mutating"
+    }
+}
+
+// MARK: Mutating convenience initializers and mutators
+
+extension Mutating {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Mutating.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        mutatingMutating: Int? = nil
+    ) -> Mutating {
+        return Mutating(
+            mutatingMutating: mutatingMutating ?? self.mutatingMutating
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - Nil
 struct Nil: Codable, Equatable {
     let nilNil: Int
@@ -12618,20 +12664,20 @@ extension Public {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Repeat
-struct Repeat: Codable, Equatable {
-    let repeatRepeat: Int
+// MARK: - Object
+struct Object: Codable, Equatable {
+    let object: Int
 
     enum CodingKeys: String, CodingKey {
-        case repeatRepeat = "repeat"
+        case object = "object"
     }
 }
 
-// MARK: Repeat convenience initializers and mutators
+// MARK: Object convenience initializers and mutators
 
-extension Repeat {
+extension Object {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Repeat.self, from: data)
+        self = try newJSONDecoder().decode(Object.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -12646,10 +12692,10 @@ extension Repeat {
     }
 
     func with(
-        repeatRepeat: Int? = nil
-    ) -> Repeat {
-        return Repeat(
-            repeatRepeat: repeatRepeat ?? self.repeatRepeat
+        object: Int? = nil
+    ) -> Object {
+        return Object(
+            object: object ?? self.object
         )
     }
 
@@ -12668,20 +12714,20 @@ extension Repeat {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Required
-struct Required: Codable, Equatable {
-    let requiredRequired: Int
+// MARK: - ObjectMapper
+struct ObjectMapper: Codable, Equatable {
+    let objectMapper: Int
 
     enum CodingKeys: String, CodingKey {
-        case requiredRequired = "required"
+        case objectMapper = "ObjectMapper"
     }
 }
 
-// MARK: Required convenience initializers and mutators
+// MARK: ObjectMapper convenience initializers and mutators
 
-extension Required {
+extension ObjectMapper {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Required.self, from: data)
+        self = try newJSONDecoder().decode(ObjectMapper.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -12696,10 +12742,10 @@ extension Required {
     }
 
     func with(
-        requiredRequired: Int? = nil
-    ) -> Required {
-        return Required(
-            requiredRequired: requiredRequired ?? self.requiredRequired
+        objectMapper: Int? = nil
+    ) -> ObjectMapper {
+        return ObjectMapper(
+            objectMapper: objectMapper ?? self.objectMapper
         )
     }
 
@@ -12718,20 +12764,20 @@ extension Required {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Object
-struct Object: Codable, Equatable {
-    let object: Int
+// MARK: - ObjectNode
+struct ObjectNode: Codable, Equatable {
+    let objectNode: Int
 
     enum CodingKeys: String, CodingKey {
-        case object = "object"
+        case objectNode = "ObjectNode"
     }
 }
 
-// MARK: Object convenience initializers and mutators
+// MARK: ObjectNode convenience initializers and mutators
 
-extension Object {
+extension ObjectNode {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Object.self, from: data)
+        self = try newJSONDecoder().decode(ObjectNode.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -12746,10 +12792,10 @@ extension Object {
     }
 
     func with(
-        object: Int? = nil
-    ) -> Object {
-        return Object(
-            object: object ?? self.object
+        objectNode: Int? = nil
+    ) -> ObjectNode {
+        return ObjectNode(
+            objectNode: objectNode ?? self.objectNode
         )
     }
 
@@ -12768,20 +12814,20 @@ extension Object {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - ObjectMapper
-struct ObjectMapper: Codable, Equatable {
-    let objectMapper: Int
+// MARK: - ObjectReader
+struct ObjectReader: Codable, Equatable {
+    let objectReader: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectMapper = "ObjectMapper"
+        case objectReader = "ObjectReader"
     }
 }
 
-// MARK: ObjectMapper convenience initializers and mutators
+// MARK: ObjectReader convenience initializers and mutators
 
-extension ObjectMapper {
+extension ObjectReader {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectMapper.self, from: data)
+        self = try newJSONDecoder().decode(ObjectReader.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -12796,10 +12842,10 @@ extension ObjectMapper {
     }
 
     func with(
-        objectMapper: Int? = nil
-    ) -> ObjectMapper {
-        return ObjectMapper(
-            objectMapper: objectMapper ?? self.objectMapper
+        objectReader: Int? = nil
+    ) -> ObjectReader {
+        return ObjectReader(
+            objectReader: objectReader ?? self.objectReader
         )
     }
 
@@ -12818,20 +12864,20 @@ extension ObjectMapper {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - ObjectNode
-struct ObjectNode: Codable, Equatable {
-    let objectNode: Int
+// MARK: - ObjectWriter
+struct ObjectWriter: Codable, Equatable {
+    let objectWriter: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectNode = "ObjectNode"
+        case objectWriter = "ObjectWriter"
     }
 }
 
-// MARK: ObjectNode convenience initializers and mutators
+// MARK: ObjectWriter convenience initializers and mutators
 
-extension ObjectNode {
+extension ObjectWriter {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectNode.self, from: data)
+        self = try newJSONDecoder().decode(ObjectWriter.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -12846,10 +12892,10 @@ extension ObjectNode {
     }
 
     func with(
-        objectNode: Int? = nil
-    ) -> ObjectNode {
-        return ObjectNode(
-            objectNode: objectNode ?? self.objectNode
+        objectWriter: Int? = nil
+    ) -> ObjectWriter {
+        return ObjectWriter(
+            objectWriter: objectWriter ?? self.objectWriter
         )
     }
 
@@ -12868,20 +12914,20 @@ extension ObjectNode {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - ObjectReader
-struct ObjectReader: Codable, Equatable {
-    let objectReader: Int
+// MARK: - Of
+struct Of: Codable, Equatable {
+    let of: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectReader = "ObjectReader"
+        case of = "of"
     }
 }
 
-// MARK: ObjectReader convenience initializers and mutators
+// MARK: Of convenience initializers and mutators
 
-extension ObjectReader {
+extension Of {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectReader.self, from: data)
+        self = try newJSONDecoder().decode(Of.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -12896,10 +12942,10 @@ extension ObjectReader {
     }
 
     func with(
-        objectReader: Int? = nil
-    ) -> ObjectReader {
-        return ObjectReader(
-            objectReader: objectReader ?? self.objectReader
+        of: Int? = nil
+    ) -> Of {
+        return Of(
+            of: of ?? self.of
         )
     }
 
@@ -12918,20 +12964,20 @@ extension ObjectReader {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - ObjectWriter
-struct ObjectWriter: Codable, Equatable {
-    let objectWriter: Int
+// MARK: - OffsetDateTime
+struct OffsetDateTime: Codable, Equatable {
+    let offsetDateTime: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectWriter = "ObjectWriter"
+        case offsetDateTime = "OffsetDateTime"
     }
 }
 
-// MARK: ObjectWriter convenience initializers and mutators
+// MARK: OffsetDateTime convenience initializers and mutators
 
-extension ObjectWriter {
+extension OffsetDateTime {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectWriter.self, from: data)
+        self = try newJSONDecoder().decode(OffsetDateTime.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -12946,10 +12992,10 @@ extension ObjectWriter {
     }
 
     func with(
-        objectWriter: Int? = nil
-    ) -> ObjectWriter {
-        return ObjectWriter(
-            objectWriter: objectWriter ?? self.objectWriter
+        offsetDateTime: Int? = nil
+    ) -> OffsetDateTime {
+        return OffsetDateTime(
+            offsetDateTime: offsetDateTime ?? self.offsetDateTime
         )
     }
 
@@ -12968,20 +13014,20 @@ extension ObjectWriter {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Of
-struct Of: Codable, Equatable {
-    let of: Int
+// MARK: - OffsetTime
+struct OffsetTime: Codable, Equatable {
+    let offsetTime: Int
 
     enum CodingKeys: String, CodingKey {
-        case of = "of"
+        case offsetTime = "OffsetTime"
     }
 }
 
-// MARK: Of convenience initializers and mutators
+// MARK: OffsetTime convenience initializers and mutators
 
-extension Of {
+extension OffsetTime {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Of.self, from: data)
+        self = try newJSONDecoder().decode(OffsetTime.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -12996,10 +13042,10 @@ extension Of {
     }
 
     func with(
-        of: Int? = nil
-    ) -> Of {
-        return Of(
-            of: of ?? self.of
+        offsetTime: Int? = nil
+    ) -> OffsetTime {
+        return OffsetTime(
+            offsetTime: offsetTime ?? self.offsetTime
         )
     }
 
@@ -14068,110 +14114,12 @@ extension ReinterpretCast {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Require
-struct Require: Codable, Equatable {
-    let require: Int
-
-    enum CodingKeys: String, CodingKey {
-        case require = "require"
-    }
-}
-
-// MARK: Require convenience initializers and mutators
-
-extension Require {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Require.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        require: Int? = nil
-    ) -> Require {
-        return Require(
-            require: require ?? self.require
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
-// MARK: - Requires
-struct Requires: Codable, Equatable {
-    let requires: Int
-
-    enum CodingKeys: String, CodingKey {
-        case requires = "requires"
-    }
-}
-
-// MARK: Requires convenience initializers and mutators
-
-extension Requires {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Requires.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        requires: Int? = nil
-    ) -> Requires {
-        return Requires(
-            requires: requires ?? self.requires
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
 // MARK: - Obj5
 struct Obj5: Codable, Equatable {
     let dummy: Int
     let kSerializer: KSerializer
+    let obj5Repeat: Repeat
+    let obj5Required: Required
     let obj5Rethrows: Rethrows
     let obj5Return: Return
     let obj5Right: Right
@@ -14185,12 +14133,11 @@ struct Obj5: Codable, Equatable {
     let obj5Throw: Throw
     let obj5Throws: Throws
     let obj5True: True
-    let obj5Try: Try
-    let obj5Type: Obj5Type
-    let obj5Typealias: Typealias
     let primitiveKind: PrimitiveKind
     let purpleSelf: Obj5Self
     let purpleTrue: TrueClass
+    let require: Require
+    let requires: Requires
     let restrict: Restrict
     let retain: Retain
     let runtimeType: RuntimeType
@@ -14234,11 +14181,12 @@ struct Obj5: Codable, Equatable {
     let toString: ToString
     let topLevel: TopLevelClass
     let transient: Transient
-    let type: TypeClass
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
         case kSerializer = "KSerializer"
+        case obj5Repeat = "repeat"
+        case obj5Required = "required"
         case obj5Rethrows = "rethrows"
         case obj5Return = "return"
         case obj5Right = "right"
@@ -14252,12 +14200,11 @@ struct Obj5: Codable, Equatable {
         case obj5Throw = "throw"
         case obj5Throws = "throws"
         case obj5True = "True"
-        case obj5Try = "try"
-        case obj5Type = "type"
-        case obj5Typealias = "typealias"
         case primitiveKind = "PrimitiveKind"
         case purpleSelf = "self"
         case purpleTrue = "true"
+        case require = "require"
+        case requires = "requires"
         case restrict = "restrict"
         case retain = "retain"
         case runtimeType = "runtimeType"
@@ -14301,7 +14248,6 @@ struct Obj5: Codable, Equatable {
         case toString = "toString"
         case topLevel = "top_level"
         case transient = "transient"
-        case type = "Type"
     }
 }
 
@@ -14326,6 +14272,8 @@ extension Obj5 {
     func with(
         dummy: Int? = nil,
         kSerializer: KSerializer? = nil,
+        obj5Repeat: Repeat? = nil,
+        obj5Required: Required? = nil,
         obj5Rethrows: Rethrows? = nil,
         obj5Return: Return? = nil,
         obj5Right: Right? = nil,
@@ -14339,12 +14287,11 @@ extension Obj5 {
         obj5Throw: Throw? = nil,
         obj5Throws: Throws? = nil,
         obj5True: True? = nil,
-        obj5Try: Try? = nil,
-        obj5Type: Obj5Type? = nil,
-        obj5Typealias: Typealias? = nil,
         primitiveKind: PrimitiveKind? = nil,
         purpleSelf: Obj5Self? = nil,
         purpleTrue: TrueClass? = nil,
+        require: Require? = nil,
+        requires: Requires? = nil,
         restrict: Restrict? = nil,
         retain: Retain? = nil,
         runtimeType: RuntimeType? = nil,
@@ -14387,12 +14334,13 @@ extension Obj5 {
         toJSON: ToJSON? = nil,
         toString: ToString? = nil,
         topLevel: TopLevelClass? = nil,
-        transient: Transient? = nil,
-        type: TypeClass? = nil
+        transient: Transient? = nil
     ) -> Obj5 {
         return Obj5(
             dummy: dummy ?? self.dummy,
             kSerializer: kSerializer ?? self.kSerializer,
+            obj5Repeat: obj5Repeat ?? self.obj5Repeat,
+            obj5Required: obj5Required ?? self.obj5Required,
             obj5Rethrows: obj5Rethrows ?? self.obj5Rethrows,
             obj5Return: obj5Return ?? self.obj5Return,
             obj5Right: obj5Right ?? self.obj5Right,
@@ -14406,12 +14354,11 @@ extension Obj5 {
             obj5Throw: obj5Throw ?? self.obj5Throw,
             obj5Throws: obj5Throws ?? self.obj5Throws,
             obj5True: obj5True ?? self.obj5True,
-            obj5Try: obj5Try ?? self.obj5Try,
-            obj5Type: obj5Type ?? self.obj5Type,
-            obj5Typealias: obj5Typealias ?? self.obj5Typealias,
             primitiveKind: primitiveKind ?? self.primitiveKind,
             purpleSelf: purpleSelf ?? self.purpleSelf,
             purpleTrue: purpleTrue ?? self.purpleTrue,
+            require: require ?? self.require,
+            requires: requires ?? self.requires,
             restrict: restrict ?? self.restrict,
             retain: retain ?? self.retain,
             runtimeType: runtimeType ?? self.runtimeType,
@@ -14454,8 +14401,7 @@ extension Obj5 {
             toJSON: toJSON ?? self.toJSON,
             toString: toString ?? self.toString,
             topLevel: topLevel ?? self.topLevel,
-            transient: transient ?? self.transient,
-            type: type ?? self.type
+            transient: transient ?? self.transient
         )
     }
 
@@ -14524,6 +14470,106 @@ extension KSerializer {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - Repeat
+struct Repeat: Codable, Equatable {
+    let repeatRepeat: Int
+
+    enum CodingKeys: String, CodingKey {
+        case repeatRepeat = "repeat"
+    }
+}
+
+// MARK: Repeat convenience initializers and mutators
+
+extension Repeat {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Repeat.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        repeatRepeat: Int? = nil
+    ) -> Repeat {
+        return Repeat(
+            repeatRepeat: repeatRepeat ?? self.repeatRepeat
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Required
+struct Required: Codable, Equatable {
+    let requiredRequired: Int
+
+    enum CodingKeys: String, CodingKey {
+        case requiredRequired = "required"
+    }
+}
+
+// MARK: Required convenience initializers and mutators
+
+extension Required {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Required.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        requiredRequired: Int? = nil
+    ) -> Required {
+        return Required(
+            requiredRequired: requiredRequired ?? self.requiredRequired
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - Rethrows
 struct Rethrows: Codable, Equatable {
     let rethrowsRethrows: Int
@@ -15174,70 +15220,20 @@ extension True {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Try
-struct Try: Codable, Equatable {
-    let tryTry: Int
-
-    enum CodingKeys: String, CodingKey {
-        case tryTry = "try"
-    }
-}
-
-// MARK: Try convenience initializers and mutators
-
-extension Try {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Try.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        tryTry: Int? = nil
-    ) -> Try {
-        return Try(
-            tryTry: tryTry ?? self.tryTry
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
-// MARK: - Obj5Type
-struct Obj5Type: Codable, Equatable {
-    let type: Int
+// MARK: - PrimitiveKind
+struct PrimitiveKind: Codable, Equatable {
+    let primitiveKind: Int
 
     enum CodingKeys: String, CodingKey {
-        case type = "type"
+        case primitiveKind = "PrimitiveKind"
     }
 }
 
-// MARK: Obj5Type convenience initializers and mutators
+// MARK: PrimitiveKind convenience initializers and mutators
 
-extension Obj5Type {
+extension PrimitiveKind {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Obj5Type.self, from: data)
+        self = try newJSONDecoder().decode(PrimitiveKind.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15252,10 +15248,10 @@ extension Obj5Type {
     }
 
     func with(
-        type: Int? = nil
-    ) -> Obj5Type {
-        return Obj5Type(
-            type: type ?? self.type
+        primitiveKind: Int? = nil
+    ) -> PrimitiveKind {
+        return PrimitiveKind(
+            primitiveKind: primitiveKind ?? self.primitiveKind
         )
     }
 
@@ -15274,20 +15270,20 @@ extension Obj5Type {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Typealias
-struct Typealias: Codable, Equatable {
-    let typealiasTypealias: Int
+// MARK: - Obj5Self
+struct Obj5Self: Codable, Equatable {
+    let selfSelf: Int
 
     enum CodingKeys: String, CodingKey {
-        case typealiasTypealias = "typealias"
+        case selfSelf = "self"
     }
 }
 
-// MARK: Typealias convenience initializers and mutators
+// MARK: Obj5Self convenience initializers and mutators
 
-extension Typealias {
+extension Obj5Self {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Typealias.self, from: data)
+        self = try newJSONDecoder().decode(Obj5Self.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15302,10 +15298,10 @@ extension Typealias {
     }
 
     func with(
-        typealiasTypealias: Int? = nil
-    ) -> Typealias {
-        return Typealias(
-            typealiasTypealias: typealiasTypealias ?? self.typealiasTypealias
+        selfSelf: Int? = nil
+    ) -> Obj5Self {
+        return Obj5Self(
+            selfSelf: selfSelf ?? self.selfSelf
         )
     }
 
@@ -15324,20 +15320,20 @@ extension Typealias {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - PrimitiveKind
-struct PrimitiveKind: Codable, Equatable {
-    let primitiveKind: Int
+// MARK: - TrueClass
+struct TrueClass: Codable, Equatable {
+    let trueTrue: Int
 
     enum CodingKeys: String, CodingKey {
-        case primitiveKind = "PrimitiveKind"
+        case trueTrue = "true"
     }
 }
 
-// MARK: PrimitiveKind convenience initializers and mutators
+// MARK: TrueClass convenience initializers and mutators
 
-extension PrimitiveKind {
+extension TrueClass {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(PrimitiveKind.self, from: data)
+        self = try newJSONDecoder().decode(TrueClass.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15352,10 +15348,10 @@ extension PrimitiveKind {
     }
 
     func with(
-        primitiveKind: Int? = nil
-    ) -> PrimitiveKind {
-        return PrimitiveKind(
-            primitiveKind: primitiveKind ?? self.primitiveKind
+        trueTrue: Int? = nil
+    ) -> TrueClass {
+        return TrueClass(
+            trueTrue: trueTrue ?? self.trueTrue
         )
     }
 
@@ -15374,20 +15370,20 @@ extension PrimitiveKind {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Obj5Self
-struct Obj5Self: Codable, Equatable {
-    let selfSelf: Int
+// MARK: - Require
+struct Require: Codable, Equatable {
+    let require: Int
 
     enum CodingKeys: String, CodingKey {
-        case selfSelf = "self"
+        case require = "require"
     }
 }
 
-// MARK: Obj5Self convenience initializers and mutators
+// MARK: Require convenience initializers and mutators
 
-extension Obj5Self {
+extension Require {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Obj5Self.self, from: data)
+        self = try newJSONDecoder().decode(Require.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15402,10 +15398,10 @@ extension Obj5Self {
     }
 
     func with(
-        selfSelf: Int? = nil
-    ) -> Obj5Self {
-        return Obj5Self(
-            selfSelf: selfSelf ?? self.selfSelf
+        require: Int? = nil
+    ) -> Require {
+        return Require(
+            require: require ?? self.require
         )
     }
 
@@ -15424,20 +15420,20 @@ extension Obj5Self {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - TrueClass
-struct TrueClass: Codable, Equatable {
-    let trueTrue: Int
+// MARK: - Requires
+struct Requires: Codable, Equatable {
+    let requires: Int
 
     enum CodingKeys: String, CodingKey {
-        case trueTrue = "true"
+        case requires = "requires"
     }
 }
 
-// MARK: TrueClass convenience initializers and mutators
+// MARK: Requires convenience initializers and mutators
 
-extension TrueClass {
+extension Requires {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(TrueClass.self, from: data)
+        self = try newJSONDecoder().decode(Requires.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15452,10 +15448,10 @@ extension TrueClass {
     }
 
     func with(
-        trueTrue: Int? = nil
-    ) -> TrueClass {
-        return TrueClass(
-            trueTrue: trueTrue ?? self.trueTrue
+        requires: Int? = nil
+    ) -> Requires {
+        return Requires(
+            requires: requires ?? self.requires
         )
     }
 
@@ -17624,65 +17620,19 @@ extension Transient {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - TypeClass
-struct TypeClass: Codable, Equatable {
-    let type: Int
-
-    enum CodingKeys: String, CodingKey {
-        case type = "Type"
-    }
-}
-
-// MARK: TypeClass convenience initializers and mutators
-
-extension TypeClass {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(TypeClass.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        type: Int? = nil
-    ) -> TypeClass {
-        return TypeClass(
-            type: type ?? self.type
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
 // MARK: - Obj6
 struct Obj6: Codable, Equatable {
     let dummy: Int
+    let obj6Try: Try
+    let obj6Type: Obj6Type
+    let obj6Typealias: Typealias
     let obj6Unowned: Unowned
     let obj6Var: Var
     let obj6Weak: Weak
     let obj6Where: Where
     let obj6While: While
     let obj6WillSet: WillSet
+    let type: TypeClass
     let typedef: Typedef
     let typeid: Typeid
     let typename: Typename
@@ -17713,12 +17663,16 @@ struct Obj6: Codable, Equatable {
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case obj6Try = "try"
+        case obj6Type = "type"
+        case obj6Typealias = "typealias"
         case obj6Unowned = "unowned"
         case obj6Var = "var"
         case obj6Weak = "weak"
         case obj6Where = "where"
         case obj6While = "while"
         case obj6WillSet = "willSet"
+        case type = "Type"
         case typedef = "typedef"
         case typeid = "typeid"
         case typename = "typename"
@@ -17769,12 +17723,16 @@ extension Obj6 {
 
     func with(
         dummy: Int? = nil,
+        obj6Try: Try? = nil,
+        obj6Type: Obj6Type? = nil,
+        obj6Typealias: Typealias? = nil,
         obj6Unowned: Unowned? = nil,
         obj6Var: Var? = nil,
         obj6Weak: Weak? = nil,
         obj6Where: Where? = nil,
         obj6While: While? = nil,
         obj6WillSet: WillSet? = nil,
+        type: TypeClass? = nil,
         typedef: Typedef? = nil,
         typeid: Typeid? = nil,
         typename: Typename? = nil,
@@ -17805,12 +17763,16 @@ extension Obj6 {
     ) -> Obj6 {
         return Obj6(
             dummy: dummy ?? self.dummy,
+            obj6Try: obj6Try ?? self.obj6Try,
+            obj6Type: obj6Type ?? self.obj6Type,
+            obj6Typealias: obj6Typealias ?? self.obj6Typealias,
             obj6Unowned: obj6Unowned ?? self.obj6Unowned,
             obj6Var: obj6Var ?? self.obj6Var,
             obj6Weak: obj6Weak ?? self.obj6Weak,
             obj6Where: obj6Where ?? self.obj6Where,
             obj6While: obj6While ?? self.obj6While,
             obj6WillSet: obj6WillSet ?? self.obj6WillSet,
+            type: type ?? self.type,
             typedef: typedef ?? self.typedef,
             typeid: typeid ?? self.typeid,
             typename: typename ?? self.typename,
@@ -17856,6 +17818,156 @@ extension Obj6 {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - Try
+struct Try: Codable, Equatable {
+    let tryTry: Int
+
+    enum CodingKeys: String, CodingKey {
+        case tryTry = "try"
+    }
+}
+
+// MARK: Try convenience initializers and mutators
+
+extension Try {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Try.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        tryTry: Int? = nil
+    ) -> Try {
+        return Try(
+            tryTry: tryTry ?? self.tryTry
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Obj6Type
+struct Obj6Type: Codable, Equatable {
+    let type: Int
+
+    enum CodingKeys: String, CodingKey {
+        case type = "type"
+    }
+}
+
+// MARK: Obj6Type convenience initializers and mutators
+
+extension Obj6Type {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Obj6Type.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        type: Int? = nil
+    ) -> Obj6Type {
+        return Obj6Type(
+            type: type ?? self.type
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Typealias
+struct Typealias: Codable, Equatable {
+    let typealiasTypealias: Int
+
+    enum CodingKeys: String, CodingKey {
+        case typealiasTypealias = "typealias"
+    }
+}
+
+// MARK: Typealias convenience initializers and mutators
+
+extension Typealias {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Typealias.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        typealiasTypealias: Int? = nil
+    ) -> Typealias {
+        return Typealias(
+            typealiasTypealias: typealiasTypealias ?? self.typealiasTypealias
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - Unowned
 struct Unowned: Codable, Equatable {
     let unownedUnowned: Int
@@ -18156,6 +18268,56 @@ extension WillSet {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - TypeClass
+struct TypeClass: Codable, Equatable {
+    let type: Int
+
+    enum CodingKeys: String, CodingKey {
+        case type = "Type"
+    }
+}
+
+// MARK: TypeClass convenience initializers and mutators
+
+extension TypeClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TypeClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        type: Int? = nil
+    ) -> TypeClass {
+        return TypeClass(
+            type: type ?? self.type
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - Typedef
 struct Typedef: Codable, Equatable {
     let typedef: Int
diff --git a/base/swift/test/inputs/json/priority/keywords.json/sendable-true--1c3982c78639/quicktype.swift b/head/swift/test/inputs/json/priority/keywords.json/sendable-true--1c3982c78639/quicktype.swift
index 088c334..e1c0665 100644
--- a/base/swift/test/inputs/json/priority/keywords.json/sendable-true--1c3982c78639/quicktype.swift
+++ b/head/swift/test/inputs/json/priority/keywords.json/sendable-true--1c3982c78639/quicktype.swift
@@ -6352,6 +6352,7 @@ struct Obj3: Codable, Sendable {
     let jsonWriter: JSONWriter
     let lambda: Lambda
     let list: List
+    let localDate: LocalDate
     let locale: LocaleClass
     let lock: Lock
     let long: Long
@@ -6361,7 +6362,6 @@ struct Obj3: Codable, Sendable {
     let marshalJSON: MarshalJSON
     let metadataPropertyHandling: MetadataPropertyHandling
     let module: Module
-    let mutable: Mutable
     let obj3Get: Get
     let obj3Guard: Guard
     let obj3If: If
@@ -6377,7 +6377,6 @@ struct Obj3: Codable, Sendable {
     let obj3Lazy: Lazy
     let obj3Left: Left
     let obj3Let: Let
-    let obj3Mutating: Mutating
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
@@ -6420,6 +6419,7 @@ struct Obj3: Codable, Sendable {
         case jsonWriter = "json_writer"
         case lambda = "lambda"
         case list = "list"
+        case localDate = "LocalDate"
         case locale = "Locale"
         case lock = "lock"
         case long = "long"
@@ -6429,7 +6429,6 @@ struct Obj3: Codable, Sendable {
         case marshalJSON = "MarshalJSON"
         case metadataPropertyHandling = "metadata_property_handling"
         case module = "module"
-        case mutable = "mutable"
         case obj3Get = "get"
         case obj3Guard = "guard"
         case obj3If = "if"
@@ -6445,7 +6444,6 @@ struct Obj3: Codable, Sendable {
         case obj3Lazy = "lazy"
         case obj3Left = "left"
         case obj3Let = "let"
-        case obj3Mutating = "mutating"
     }
 }
 
@@ -6508,6 +6506,7 @@ extension Obj3 {
         jsonWriter: JSONWriter? = nil,
         lambda: Lambda? = nil,
         list: List? = nil,
+        localDate: LocalDate? = nil,
         locale: LocaleClass? = nil,
         lock: Lock? = nil,
         long: Long? = nil,
@@ -6517,7 +6516,6 @@ extension Obj3 {
         marshalJSON: MarshalJSON? = nil,
         metadataPropertyHandling: MetadataPropertyHandling? = nil,
         module: Module? = nil,
-        mutable: Mutable? = nil,
         obj3Get: Get? = nil,
         obj3Guard: Guard? = nil,
         obj3If: If? = nil,
@@ -6532,8 +6530,7 @@ extension Obj3 {
         obj3JSON: JSON? = nil,
         obj3Lazy: Lazy? = nil,
         obj3Left: Left? = nil,
-        obj3Let: Let? = nil,
-        obj3Mutating: Mutating? = nil
+        obj3Let: Let? = nil
     ) -> Obj3 {
         return Obj3(
             dummy: dummy ?? self.dummy,
@@ -6576,6 +6573,7 @@ extension Obj3 {
             jsonWriter: jsonWriter ?? self.jsonWriter,
             lambda: lambda ?? self.lambda,
             list: list ?? self.list,
+            localDate: localDate ?? self.localDate,
             locale: locale ?? self.locale,
             lock: lock ?? self.lock,
             long: long ?? self.long,
@@ -6585,7 +6583,6 @@ extension Obj3 {
             marshalJSON: marshalJSON ?? self.marshalJSON,
             metadataPropertyHandling: metadataPropertyHandling ?? self.metadataPropertyHandling,
             module: module ?? self.module,
-            mutable: mutable ?? self.mutable,
             obj3Get: obj3Get ?? self.obj3Get,
             obj3Guard: obj3Guard ?? self.obj3Guard,
             obj3If: obj3If ?? self.obj3If,
@@ -6600,8 +6597,7 @@ extension Obj3 {
             obj3JSON: obj3JSON ?? self.obj3JSON,
             obj3Lazy: obj3Lazy ?? self.obj3Lazy,
             obj3Left: obj3Left ?? self.obj3Left,
-            obj3Let: obj3Let ?? self.obj3Let,
-            obj3Mutating: obj3Mutating ?? self.obj3Mutating
+            obj3Let: obj3Let ?? self.obj3Let
         )
     }
 
@@ -8330,6 +8326,50 @@ extension List {
     }
 }
 
+// MARK: - LocalDate
+struct LocalDate: Codable, Sendable {
+    let localDate: Int
+
+    enum CodingKeys: String, CodingKey {
+        case localDate = "LocalDate"
+    }
+}
+
+// MARK: LocalDate convenience initializers and mutators
+
+extension LocalDate {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LocalDate.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        localDate: Int? = nil
+    ) -> LocalDate {
+        return LocalDate(
+            localDate: localDate ?? self.localDate
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - LocaleClass
 struct LocaleClass: Codable, Sendable {
     let locale: Int
@@ -8726,50 +8766,6 @@ extension Module {
     }
 }
 
-// MARK: - Mutable
-struct Mutable: Codable, Sendable {
-    let mutable: Int
-
-    enum CodingKeys: String, CodingKey {
-        case mutable = "mutable"
-    }
-}
-
-// MARK: Mutable convenience initializers and mutators
-
-extension Mutable {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Mutable.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        mutable: Int? = nil
-    ) -> Mutable {
-        return Mutable(
-            mutable: mutable ?? self.mutable
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Get
 struct Get: Codable, Sendable {
     let getGet: Int
@@ -9430,53 +9426,10 @@ extension Let {
     }
 }
 
-// MARK: - Mutating
-struct Mutating: Codable, Sendable {
-    let mutatingMutating: Int
-
-    enum CodingKeys: String, CodingKey {
-        case mutatingMutating = "mutating"
-    }
-}
-
-// MARK: Mutating convenience initializers and mutators
-
-extension Mutating {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Mutating.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        mutatingMutating: Int? = nil
-    ) -> Mutating {
-        return Mutating(
-            mutatingMutating: mutatingMutating ?? self.mutatingMutating
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Obj4
 struct Obj4: Codable, Sendable {
     let dummy: Int
+    let mutable: Mutable
     let namespace: Namespace
     let native: Native
     let new: New
@@ -9496,6 +9449,7 @@ struct Obj4: Codable, Sendable {
     let nullNode: NullNode
     let nullptr: Nullptr
     let number: Number
+    let obj4Mutating: Mutating
     let obj4Nil: Nil
     let obj4None: NoneClass
     let obj4Nonmutating: Nonmutating
@@ -9510,14 +9464,14 @@ struct Obj4: Codable, Sendable {
     let obj4Private: Private
     let obj4Protocol: ProtocolClass
     let obj4Public: Public
-    let obj4Repeat: Repeat
-    let obj4Required: Required
     let object: Object
     let objectMapper: ObjectMapper
     let objectNode: ObjectNode
     let objectReader: ObjectReader
     let objectWriter: ObjectWriter
     let of: Of
+    let offsetDateTime: OffsetDateTime
+    let offsetTime: OffsetTime
     let oneway: Oneway
     let or: Or
     let orEq: OrEq
@@ -9539,11 +9493,10 @@ struct Obj4: Codable, Sendable {
     let regExp: RegExp
     let register: Register
     let reinterpretCast: ReinterpretCast
-    let require: Require
-    let requires: Requires
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case mutable = "mutable"
         case namespace = "namespace"
         case native = "native"
         case new = "new"
@@ -9563,6 +9516,7 @@ struct Obj4: Codable, Sendable {
         case nullNode = "NullNode"
         case nullptr = "nullptr"
         case number = "number"
+        case obj4Mutating = "mutating"
         case obj4Nil = "nil"
         case obj4None = "none"
         case obj4Nonmutating = "nonmutating"
@@ -9577,14 +9531,14 @@ struct Obj4: Codable, Sendable {
         case obj4Private = "private"
         case obj4Protocol = "Protocol"
         case obj4Public = "public"
-        case obj4Repeat = "repeat"
-        case obj4Required = "required"
         case object = "object"
         case objectMapper = "ObjectMapper"
         case objectNode = "ObjectNode"
         case objectReader = "ObjectReader"
         case objectWriter = "ObjectWriter"
         case of = "of"
+        case offsetDateTime = "OffsetDateTime"
+        case offsetTime = "OffsetTime"
         case oneway = "oneway"
         case or = "or"
         case orEq = "or_eq"
@@ -9606,8 +9560,6 @@ struct Obj4: Codable, Sendable {
         case regExp = "RegExp"
         case register = "register"
         case reinterpretCast = "reinterpret_cast"
-        case require = "require"
-        case requires = "requires"
     }
 }
 
@@ -9631,6 +9583,7 @@ extension Obj4 {
 
     func with(
         dummy: Int? = nil,
+        mutable: Mutable? = nil,
         namespace: Namespace? = nil,
         native: Native? = nil,
         new: New? = nil,
@@ -9650,6 +9603,7 @@ extension Obj4 {
         nullNode: NullNode? = nil,
         nullptr: Nullptr? = nil,
         number: Number? = nil,
+        obj4Mutating: Mutating? = nil,
         obj4Nil: Nil? = nil,
         obj4None: NoneClass? = nil,
         obj4Nonmutating: Nonmutating? = nil,
@@ -9664,14 +9618,14 @@ extension Obj4 {
         obj4Private: Private? = nil,
         obj4Protocol: ProtocolClass? = nil,
         obj4Public: Public? = nil,
-        obj4Repeat: Repeat? = nil,
-        obj4Required: Required? = nil,
         object: Object? = nil,
         objectMapper: ObjectMapper? = nil,
         objectNode: ObjectNode? = nil,
         objectReader: ObjectReader? = nil,
         objectWriter: ObjectWriter? = nil,
         of: Of? = nil,
+        offsetDateTime: OffsetDateTime? = nil,
+        offsetTime: OffsetTime? = nil,
         oneway: Oneway? = nil,
         or: Or? = nil,
         orEq: OrEq? = nil,
@@ -9692,12 +9646,11 @@ extension Obj4 {
         ref: Ref? = nil,
         regExp: RegExp? = nil,
         register: Register? = nil,
-        reinterpretCast: ReinterpretCast? = nil,
-        require: Require? = nil,
-        requires: Requires? = nil
+        reinterpretCast: ReinterpretCast? = nil
     ) -> Obj4 {
         return Obj4(
             dummy: dummy ?? self.dummy,
+            mutable: mutable ?? self.mutable,
             namespace: namespace ?? self.namespace,
             native: native ?? self.native,
             new: new ?? self.new,
@@ -9717,6 +9670,7 @@ extension Obj4 {
             nullNode: nullNode ?? self.nullNode,
             nullptr: nullptr ?? self.nullptr,
             number: number ?? self.number,
+            obj4Mutating: obj4Mutating ?? self.obj4Mutating,
             obj4Nil: obj4Nil ?? self.obj4Nil,
             obj4None: obj4None ?? self.obj4None,
             obj4Nonmutating: obj4Nonmutating ?? self.obj4Nonmutating,
@@ -9731,14 +9685,14 @@ extension Obj4 {
             obj4Private: obj4Private ?? self.obj4Private,
             obj4Protocol: obj4Protocol ?? self.obj4Protocol,
             obj4Public: obj4Public ?? self.obj4Public,
-            obj4Repeat: obj4Repeat ?? self.obj4Repeat,
-            obj4Required: obj4Required ?? self.obj4Required,
             object: object ?? self.object,
             objectMapper: objectMapper ?? self.objectMapper,
             objectNode: objectNode ?? self.objectNode,
             objectReader: objectReader ?? self.objectReader,
             objectWriter: objectWriter ?? self.objectWriter,
             of: of ?? self.of,
+            offsetDateTime: offsetDateTime ?? self.offsetDateTime,
+            offsetTime: offsetTime ?? self.offsetTime,
             oneway: oneway ?? self.oneway,
             or: or ?? self.or,
             orEq: orEq ?? self.orEq,
@@ -9759,9 +9713,51 @@ extension Obj4 {
             ref: ref ?? self.ref,
             regExp: regExp ?? self.regExp,
             register: register ?? self.register,
-            reinterpretCast: reinterpretCast ?? self.reinterpretCast,
-            require: require ?? self.require,
-            requires: requires ?? self.requires
+            reinterpretCast: reinterpretCast ?? self.reinterpretCast
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Mutable
+struct Mutable: Codable, Sendable {
+    let mutable: Int
+
+    enum CodingKeys: String, CodingKey {
+        case mutable = "mutable"
+    }
+}
+
+// MARK: Mutable convenience initializers and mutators
+
+extension Mutable {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Mutable.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        mutable: Int? = nil
+    ) -> Mutable {
+        return Mutable(
+            mutable: mutable ?? self.mutable
         )
     }
 
@@ -10610,6 +10606,50 @@ extension Number {
     }
 }
 
+// MARK: - Mutating
+struct Mutating: Codable, Sendable {
+    let mutatingMutating: Int
+
+    enum CodingKeys: String, CodingKey {
+        case mutatingMutating = "mutating"
+    }
+}
+
+// MARK: Mutating convenience initializers and mutators
+
+extension Mutating {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Mutating.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        mutatingMutating: Int? = nil
+    ) -> Mutating {
+        return Mutating(
+            mutatingMutating: mutatingMutating ?? self.mutatingMutating
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Nil
 struct Nil: Codable, Sendable {
     let nilNil: Int
@@ -11226,20 +11266,20 @@ extension Public {
     }
 }
 
-// MARK: - Repeat
-struct Repeat: Codable, Sendable {
-    let repeatRepeat: Int
+// MARK: - Object
+struct Object: Codable, Sendable {
+    let object: Int
 
     enum CodingKeys: String, CodingKey {
-        case repeatRepeat = "repeat"
+        case object = "object"
     }
 }
 
-// MARK: Repeat convenience initializers and mutators
+// MARK: Object convenience initializers and mutators
 
-extension Repeat {
+extension Object {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Repeat.self, from: data)
+        self = try newJSONDecoder().decode(Object.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11254,10 +11294,10 @@ extension Repeat {
     }
 
     func with(
-        repeatRepeat: Int? = nil
-    ) -> Repeat {
-        return Repeat(
-            repeatRepeat: repeatRepeat ?? self.repeatRepeat
+        object: Int? = nil
+    ) -> Object {
+        return Object(
+            object: object ?? self.object
         )
     }
 
@@ -11270,20 +11310,20 @@ extension Repeat {
     }
 }
 
-// MARK: - Required
-struct Required: Codable, Sendable {
-    let requiredRequired: Int
+// MARK: - ObjectMapper
+struct ObjectMapper: Codable, Sendable {
+    let objectMapper: Int
 
     enum CodingKeys: String, CodingKey {
-        case requiredRequired = "required"
+        case objectMapper = "ObjectMapper"
     }
 }
 
-// MARK: Required convenience initializers and mutators
+// MARK: ObjectMapper convenience initializers and mutators
 
-extension Required {
+extension ObjectMapper {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Required.self, from: data)
+        self = try newJSONDecoder().decode(ObjectMapper.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11298,10 +11338,10 @@ extension Required {
     }
 
     func with(
-        requiredRequired: Int? = nil
-    ) -> Required {
-        return Required(
-            requiredRequired: requiredRequired ?? self.requiredRequired
+        objectMapper: Int? = nil
+    ) -> ObjectMapper {
+        return ObjectMapper(
+            objectMapper: objectMapper ?? self.objectMapper
         )
     }
 
@@ -11314,20 +11354,20 @@ extension Required {
     }
 }
 
-// MARK: - Object
-struct Object: Codable, Sendable {
-    let object: Int
+// MARK: - ObjectNode
+struct ObjectNode: Codable, Sendable {
+    let objectNode: Int
 
     enum CodingKeys: String, CodingKey {
-        case object = "object"
+        case objectNode = "ObjectNode"
     }
 }
 
-// MARK: Object convenience initializers and mutators
+// MARK: ObjectNode convenience initializers and mutators
 
-extension Object {
+extension ObjectNode {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Object.self, from: data)
+        self = try newJSONDecoder().decode(ObjectNode.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11342,10 +11382,10 @@ extension Object {
     }
 
     func with(
-        object: Int? = nil
-    ) -> Object {
-        return Object(
-            object: object ?? self.object
+        objectNode: Int? = nil
+    ) -> ObjectNode {
+        return ObjectNode(
+            objectNode: objectNode ?? self.objectNode
         )
     }
 
@@ -11358,20 +11398,20 @@ extension Object {
     }
 }
 
-// MARK: - ObjectMapper
-struct ObjectMapper: Codable, Sendable {
-    let objectMapper: Int
+// MARK: - ObjectReader
+struct ObjectReader: Codable, Sendable {
+    let objectReader: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectMapper = "ObjectMapper"
+        case objectReader = "ObjectReader"
     }
 }
 
-// MARK: ObjectMapper convenience initializers and mutators
+// MARK: ObjectReader convenience initializers and mutators
 
-extension ObjectMapper {
+extension ObjectReader {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectMapper.self, from: data)
+        self = try newJSONDecoder().decode(ObjectReader.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11386,10 +11426,10 @@ extension ObjectMapper {
     }
 
     func with(
-        objectMapper: Int? = nil
-    ) -> ObjectMapper {
-        return ObjectMapper(
-            objectMapper: objectMapper ?? self.objectMapper
+        objectReader: Int? = nil
+    ) -> ObjectReader {
+        return ObjectReader(
+            objectReader: objectReader ?? self.objectReader
         )
     }
 
@@ -11402,20 +11442,20 @@ extension ObjectMapper {
     }
 }
 
-// MARK: - ObjectNode
-struct ObjectNode: Codable, Sendable {
-    let objectNode: Int
+// MARK: - ObjectWriter
+struct ObjectWriter: Codable, Sendable {
+    let objectWriter: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectNode = "ObjectNode"
+        case objectWriter = "ObjectWriter"
     }
 }
 
-// MARK: ObjectNode convenience initializers and mutators
+// MARK: ObjectWriter convenience initializers and mutators
 
-extension ObjectNode {
+extension ObjectWriter {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectNode.self, from: data)
+        self = try newJSONDecoder().decode(ObjectWriter.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11430,10 +11470,10 @@ extension ObjectNode {
     }
 
     func with(
-        objectNode: Int? = nil
-    ) -> ObjectNode {
-        return ObjectNode(
-            objectNode: objectNode ?? self.objectNode
+        objectWriter: Int? = nil
+    ) -> ObjectWriter {
+        return ObjectWriter(
+            objectWriter: objectWriter ?? self.objectWriter
         )
     }
 
@@ -11446,20 +11486,20 @@ extension ObjectNode {
     }
 }
 
-// MARK: - ObjectReader
-struct ObjectReader: Codable, Sendable {
-    let objectReader: Int
+// MARK: - Of
+struct Of: Codable, Sendable {
+    let of: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectReader = "ObjectReader"
+        case of = "of"
     }
 }
 
-// MARK: ObjectReader convenience initializers and mutators
+// MARK: Of convenience initializers and mutators
 
-extension ObjectReader {
+extension Of {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectReader.self, from: data)
+        self = try newJSONDecoder().decode(Of.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11474,10 +11514,10 @@ extension ObjectReader {
     }
 
     func with(
-        objectReader: Int? = nil
-    ) -> ObjectReader {
-        return ObjectReader(
-            objectReader: objectReader ?? self.objectReader
+        of: Int? = nil
+    ) -> Of {
+        return Of(
+            of: of ?? self.of
         )
     }
 
@@ -11490,20 +11530,20 @@ extension ObjectReader {
     }
 }
 
-// MARK: - ObjectWriter
-struct ObjectWriter: Codable, Sendable {
-    let objectWriter: Int
+// MARK: - OffsetDateTime
+struct OffsetDateTime: Codable, Sendable {
+    let offsetDateTime: Int
 
     enum CodingKeys: String, CodingKey {
-        case objectWriter = "ObjectWriter"
+        case offsetDateTime = "OffsetDateTime"
     }
 }
 
-// MARK: ObjectWriter convenience initializers and mutators
+// MARK: OffsetDateTime convenience initializers and mutators
 
-extension ObjectWriter {
+extension OffsetDateTime {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(ObjectWriter.self, from: data)
+        self = try newJSONDecoder().decode(OffsetDateTime.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11518,10 +11558,10 @@ extension ObjectWriter {
     }
 
     func with(
-        objectWriter: Int? = nil
-    ) -> ObjectWriter {
-        return ObjectWriter(
-            objectWriter: objectWriter ?? self.objectWriter
+        offsetDateTime: Int? = nil
+    ) -> OffsetDateTime {
+        return OffsetDateTime(
+            offsetDateTime: offsetDateTime ?? self.offsetDateTime
         )
     }
 
@@ -11534,20 +11574,20 @@ extension ObjectWriter {
     }
 }
 
-// MARK: - Of
-struct Of: Codable, Sendable {
-    let of: Int
+// MARK: - OffsetTime
+struct OffsetTime: Codable, Sendable {
+    let offsetTime: Int
 
     enum CodingKeys: String, CodingKey {
-        case of = "of"
+        case offsetTime = "OffsetTime"
     }
 }
 
-// MARK: Of convenience initializers and mutators
+// MARK: OffsetTime convenience initializers and mutators
 
-extension Of {
+extension OffsetTime {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Of.self, from: data)
+        self = try newJSONDecoder().decode(OffsetTime.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -11562,10 +11602,10 @@ extension Of {
     }
 
     func with(
-        of: Int? = nil
-    ) -> Of {
-        return Of(
-            of: of ?? self.of
+        offsetTime: Int? = nil
+    ) -> OffsetTime {
+        return OffsetTime(
+            offsetTime: offsetTime ?? self.offsetTime
         )
     }
 
@@ -12502,98 +12542,12 @@ extension ReinterpretCast {
     }
 }
 
-// MARK: - Require
-struct Require: Codable, Sendable {
-    let require: Int
-
-    enum CodingKeys: String, CodingKey {
-        case require = "require"
-    }
-}
-
-// MARK: Require convenience initializers and mutators
-
-extension Require {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Require.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        require: Int? = nil
-    ) -> Require {
-        return Require(
-            require: require ?? self.require
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-// MARK: - Requires
-struct Requires: Codable, Sendable {
-    let requires: Int
-
-    enum CodingKeys: String, CodingKey {
-        case requires = "requires"
-    }
-}
-
-// MARK: Requires convenience initializers and mutators
-
-extension Requires {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Requires.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        requires: Int? = nil
-    ) -> Requires {
-        return Requires(
-            requires: requires ?? self.requires
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Obj5
 struct Obj5: Codable, Sendable {
     let dummy: Int
     let kSerializer: KSerializer
+    let obj5Repeat: Repeat
+    let obj5Required: Required
     let obj5Rethrows: Rethrows
     let obj5Return: Return
     let obj5Right: Right
@@ -12607,12 +12561,11 @@ struct Obj5: Codable, Sendable {
     let obj5Throw: Throw
     let obj5Throws: Throws
     let obj5True: True
-    let obj5Try: Try
-    let obj5Type: Obj5Type
-    let obj5Typealias: Typealias
     let primitiveKind: PrimitiveKind
     let purpleSelf: Obj5Self
     let purpleTrue: TrueClass
+    let require: Require
+    let requires: Requires
     let restrict: Restrict
     let retain: Retain
     let runtimeType: RuntimeType
@@ -12656,11 +12609,12 @@ struct Obj5: Codable, Sendable {
     let toString: ToString
     let topLevel: TopLevelClass
     let transient: Transient
-    let type: TypeClass
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
         case kSerializer = "KSerializer"
+        case obj5Repeat = "repeat"
+        case obj5Required = "required"
         case obj5Rethrows = "rethrows"
         case obj5Return = "return"
         case obj5Right = "right"
@@ -12674,12 +12628,11 @@ struct Obj5: Codable, Sendable {
         case obj5Throw = "throw"
         case obj5Throws = "throws"
         case obj5True = "True"
-        case obj5Try = "try"
-        case obj5Type = "type"
-        case obj5Typealias = "typealias"
         case primitiveKind = "PrimitiveKind"
         case purpleSelf = "self"
         case purpleTrue = "true"
+        case require = "require"
+        case requires = "requires"
         case restrict = "restrict"
         case retain = "retain"
         case runtimeType = "runtimeType"
@@ -12723,7 +12676,6 @@ struct Obj5: Codable, Sendable {
         case toString = "toString"
         case topLevel = "top_level"
         case transient = "transient"
-        case type = "Type"
     }
 }
 
@@ -12748,6 +12700,8 @@ extension Obj5 {
     func with(
         dummy: Int? = nil,
         kSerializer: KSerializer? = nil,
+        obj5Repeat: Repeat? = nil,
+        obj5Required: Required? = nil,
         obj5Rethrows: Rethrows? = nil,
         obj5Return: Return? = nil,
         obj5Right: Right? = nil,
@@ -12761,12 +12715,11 @@ extension Obj5 {
         obj5Throw: Throw? = nil,
         obj5Throws: Throws? = nil,
         obj5True: True? = nil,
-        obj5Try: Try? = nil,
-        obj5Type: Obj5Type? = nil,
-        obj5Typealias: Typealias? = nil,
         primitiveKind: PrimitiveKind? = nil,
         purpleSelf: Obj5Self? = nil,
         purpleTrue: TrueClass? = nil,
+        require: Require? = nil,
+        requires: Requires? = nil,
         restrict: Restrict? = nil,
         retain: Retain? = nil,
         runtimeType: RuntimeType? = nil,
@@ -12809,12 +12762,13 @@ extension Obj5 {
         toJSON: ToJSON? = nil,
         toString: ToString? = nil,
         topLevel: TopLevelClass? = nil,
-        transient: Transient? = nil,
-        type: TypeClass? = nil
+        transient: Transient? = nil
     ) -> Obj5 {
         return Obj5(
             dummy: dummy ?? self.dummy,
             kSerializer: kSerializer ?? self.kSerializer,
+            obj5Repeat: obj5Repeat ?? self.obj5Repeat,
+            obj5Required: obj5Required ?? self.obj5Required,
             obj5Rethrows: obj5Rethrows ?? self.obj5Rethrows,
             obj5Return: obj5Return ?? self.obj5Return,
             obj5Right: obj5Right ?? self.obj5Right,
@@ -12828,12 +12782,11 @@ extension Obj5 {
             obj5Throw: obj5Throw ?? self.obj5Throw,
             obj5Throws: obj5Throws ?? self.obj5Throws,
             obj5True: obj5True ?? self.obj5True,
-            obj5Try: obj5Try ?? self.obj5Try,
-            obj5Type: obj5Type ?? self.obj5Type,
-            obj5Typealias: obj5Typealias ?? self.obj5Typealias,
             primitiveKind: primitiveKind ?? self.primitiveKind,
             purpleSelf: purpleSelf ?? self.purpleSelf,
             purpleTrue: purpleTrue ?? self.purpleTrue,
+            require: require ?? self.require,
+            requires: requires ?? self.requires,
             restrict: restrict ?? self.restrict,
             retain: retain ?? self.retain,
             runtimeType: runtimeType ?? self.runtimeType,
@@ -12876,8 +12829,7 @@ extension Obj5 {
             toJSON: toJSON ?? self.toJSON,
             toString: toString ?? self.toString,
             topLevel: topLevel ?? self.topLevel,
-            transient: transient ?? self.transient,
-            type: type ?? self.type
+            transient: transient ?? self.transient
         )
     }
 
@@ -12934,6 +12886,94 @@ extension KSerializer {
     }
 }
 
+// MARK: - Repeat
+struct Repeat: Codable, Sendable {
+    let repeatRepeat: Int
+
+    enum CodingKeys: String, CodingKey {
+        case repeatRepeat = "repeat"
+    }
+}
+
+// MARK: Repeat convenience initializers and mutators
+
+extension Repeat {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Repeat.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        repeatRepeat: Int? = nil
+    ) -> Repeat {
+        return Repeat(
+            repeatRepeat: repeatRepeat ?? self.repeatRepeat
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Required
+struct Required: Codable, Sendable {
+    let requiredRequired: Int
+
+    enum CodingKeys: String, CodingKey {
+        case requiredRequired = "required"
+    }
+}
+
+// MARK: Required convenience initializers and mutators
+
+extension Required {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Required.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        requiredRequired: Int? = nil
+    ) -> Required {
+        return Required(
+            requiredRequired: requiredRequired ?? self.requiredRequired
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Rethrows
 struct Rethrows: Codable, Sendable {
     let rethrowsRethrows: Int
@@ -13506,64 +13546,20 @@ extension True {
     }
 }
 
-// MARK: - Try
-struct Try: Codable, Sendable {
-    let tryTry: Int
-
-    enum CodingKeys: String, CodingKey {
-        case tryTry = "try"
-    }
-}
-
-// MARK: Try convenience initializers and mutators
-
-extension Try {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Try.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        tryTry: Int? = nil
-    ) -> Try {
-        return Try(
-            tryTry: tryTry ?? self.tryTry
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
-// MARK: - Obj5Type
-struct Obj5Type: Codable, Sendable {
-    let type: Int
+// MARK: - PrimitiveKind
+struct PrimitiveKind: Codable, Sendable {
+    let primitiveKind: Int
 
     enum CodingKeys: String, CodingKey {
-        case type = "type"
+        case primitiveKind = "PrimitiveKind"
     }
 }
 
-// MARK: Obj5Type convenience initializers and mutators
+// MARK: PrimitiveKind convenience initializers and mutators
 
-extension Obj5Type {
+extension PrimitiveKind {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Obj5Type.self, from: data)
+        self = try newJSONDecoder().decode(PrimitiveKind.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13578,10 +13574,10 @@ extension Obj5Type {
     }
 
     func with(
-        type: Int? = nil
-    ) -> Obj5Type {
-        return Obj5Type(
-            type: type ?? self.type
+        primitiveKind: Int? = nil
+    ) -> PrimitiveKind {
+        return PrimitiveKind(
+            primitiveKind: primitiveKind ?? self.primitiveKind
         )
     }
 
@@ -13594,20 +13590,20 @@ extension Obj5Type {
     }
 }
 
-// MARK: - Typealias
-struct Typealias: Codable, Sendable {
-    let typealiasTypealias: Int
+// MARK: - Obj5Self
+struct Obj5Self: Codable, Sendable {
+    let selfSelf: Int
 
     enum CodingKeys: String, CodingKey {
-        case typealiasTypealias = "typealias"
+        case selfSelf = "self"
     }
 }
 
-// MARK: Typealias convenience initializers and mutators
+// MARK: Obj5Self convenience initializers and mutators
 
-extension Typealias {
+extension Obj5Self {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Typealias.self, from: data)
+        self = try newJSONDecoder().decode(Obj5Self.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13622,10 +13618,10 @@ extension Typealias {
     }
 
     func with(
-        typealiasTypealias: Int? = nil
-    ) -> Typealias {
-        return Typealias(
-            typealiasTypealias: typealiasTypealias ?? self.typealiasTypealias
+        selfSelf: Int? = nil
+    ) -> Obj5Self {
+        return Obj5Self(
+            selfSelf: selfSelf ?? self.selfSelf
         )
     }
 
@@ -13638,20 +13634,20 @@ extension Typealias {
     }
 }
 
-// MARK: - PrimitiveKind
-struct PrimitiveKind: Codable, Sendable {
-    let primitiveKind: Int
+// MARK: - TrueClass
+struct TrueClass: Codable, Sendable {
+    let trueTrue: Int
 
     enum CodingKeys: String, CodingKey {
-        case primitiveKind = "PrimitiveKind"
+        case trueTrue = "true"
     }
 }
 
-// MARK: PrimitiveKind convenience initializers and mutators
+// MARK: TrueClass convenience initializers and mutators
 
-extension PrimitiveKind {
+extension TrueClass {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(PrimitiveKind.self, from: data)
+        self = try newJSONDecoder().decode(TrueClass.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13666,10 +13662,10 @@ extension PrimitiveKind {
     }
 
     func with(
-        primitiveKind: Int? = nil
-    ) -> PrimitiveKind {
-        return PrimitiveKind(
-            primitiveKind: primitiveKind ?? self.primitiveKind
+        trueTrue: Int? = nil
+    ) -> TrueClass {
+        return TrueClass(
+            trueTrue: trueTrue ?? self.trueTrue
         )
     }
 
@@ -13682,20 +13678,20 @@ extension PrimitiveKind {
     }
 }
 
-// MARK: - Obj5Self
-struct Obj5Self: Codable, Sendable {
-    let selfSelf: Int
+// MARK: - Require
+struct Require: Codable, Sendable {
+    let require: Int
 
     enum CodingKeys: String, CodingKey {
-        case selfSelf = "self"
+        case require = "require"
     }
 }
 
-// MARK: Obj5Self convenience initializers and mutators
+// MARK: Require convenience initializers and mutators
 
-extension Obj5Self {
+extension Require {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Obj5Self.self, from: data)
+        self = try newJSONDecoder().decode(Require.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13710,10 +13706,10 @@ extension Obj5Self {
     }
 
     func with(
-        selfSelf: Int? = nil
-    ) -> Obj5Self {
-        return Obj5Self(
-            selfSelf: selfSelf ?? self.selfSelf
+        require: Int? = nil
+    ) -> Require {
+        return Require(
+            require: require ?? self.require
         )
     }
 
@@ -13726,20 +13722,20 @@ extension Obj5Self {
     }
 }
 
-// MARK: - TrueClass
-struct TrueClass: Codable, Sendable {
-    let trueTrue: Int
+// MARK: - Requires
+struct Requires: Codable, Sendable {
+    let requires: Int
 
     enum CodingKeys: String, CodingKey {
-        case trueTrue = "true"
+        case requires = "requires"
     }
 }
 
-// MARK: TrueClass convenience initializers and mutators
+// MARK: Requires convenience initializers and mutators
 
-extension TrueClass {
+extension Requires {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(TrueClass.self, from: data)
+        self = try newJSONDecoder().decode(Requires.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -13754,10 +13750,10 @@ extension TrueClass {
     }
 
     func with(
-        trueTrue: Int? = nil
-    ) -> TrueClass {
-        return TrueClass(
-            trueTrue: trueTrue ?? self.trueTrue
+        requires: Int? = nil
+    ) -> Requires {
+        return Requires(
+            requires: requires ?? self.requires
         )
     }
 
@@ -15662,59 +15658,19 @@ extension Transient {
     }
 }
 
-// MARK: - TypeClass
-struct TypeClass: Codable, Sendable {
-    let type: Int
-
-    enum CodingKeys: String, CodingKey {
-        case type = "Type"
-    }
-}
-
-// MARK: TypeClass convenience initializers and mutators
-
-extension TypeClass {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(TypeClass.self, from: data)
-    }
-
-    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
-        guard let data = json.data(using: encoding) else {
-            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
-        }
-        try self.init(data: data)
-    }
-
-    init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        type: Int? = nil
-    ) -> TypeClass {
-        return TypeClass(
-            type: type ?? self.type
-        )
-    }
-
-    func jsonData() throws -> Data {
-        return try newJSONEncoder().encode(self)
-    }
-
-    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
-        return String(data: try self.jsonData(), encoding: encoding)
-    }
-}
-
 // MARK: - Obj6
 struct Obj6: Codable, Sendable {
     let dummy: Int
+    let obj6Try: Try
+    let obj6Type: Obj6Type
+    let obj6Typealias: Typealias
     let obj6Unowned: Unowned
     let obj6Var: Var
     let obj6Weak: Weak
     let obj6Where: Where
     let obj6While: While
     let obj6WillSet: WillSet
+    let type: TypeClass
     let typedef: Typedef
     let typeid: Typeid
     let typename: Typename
@@ -15745,12 +15701,16 @@ struct Obj6: Codable, Sendable {
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case obj6Try = "try"
+        case obj6Type = "type"
+        case obj6Typealias = "typealias"
         case obj6Unowned = "unowned"
         case obj6Var = "var"
         case obj6Weak = "weak"
         case obj6Where = "where"
         case obj6While = "while"
         case obj6WillSet = "willSet"
+        case type = "Type"
         case typedef = "typedef"
         case typeid = "typeid"
         case typename = "typename"
@@ -15801,12 +15761,16 @@ extension Obj6 {
 
     func with(
         dummy: Int? = nil,
+        obj6Try: Try? = nil,
+        obj6Type: Obj6Type? = nil,
+        obj6Typealias: Typealias? = nil,
         obj6Unowned: Unowned? = nil,
         obj6Var: Var? = nil,
         obj6Weak: Weak? = nil,
         obj6Where: Where? = nil,
         obj6While: While? = nil,
         obj6WillSet: WillSet? = nil,
+        type: TypeClass? = nil,
         typedef: Typedef? = nil,
         typeid: Typeid? = nil,
         typename: Typename? = nil,
@@ -15837,12 +15801,16 @@ extension Obj6 {
     ) -> Obj6 {
         return Obj6(
             dummy: dummy ?? self.dummy,
+            obj6Try: obj6Try ?? self.obj6Try,
+            obj6Type: obj6Type ?? self.obj6Type,
+            obj6Typealias: obj6Typealias ?? self.obj6Typealias,
             obj6Unowned: obj6Unowned ?? self.obj6Unowned,
             obj6Var: obj6Var ?? self.obj6Var,
             obj6Weak: obj6Weak ?? self.obj6Weak,
             obj6Where: obj6Where ?? self.obj6Where,
             obj6While: obj6While ?? self.obj6While,
             obj6WillSet: obj6WillSet ?? self.obj6WillSet,
+            type: type ?? self.type,
             typedef: typedef ?? self.typedef,
             typeid: typeid ?? self.typeid,
             typename: typename ?? self.typename,
@@ -15882,6 +15850,138 @@ extension Obj6 {
     }
 }
 
+// MARK: - Try
+struct Try: Codable, Sendable {
+    let tryTry: Int
+
+    enum CodingKeys: String, CodingKey {
+        case tryTry = "try"
+    }
+}
+
+// MARK: Try convenience initializers and mutators
+
+extension Try {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Try.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        tryTry: Int? = nil
+    ) -> Try {
+        return Try(
+            tryTry: tryTry ?? self.tryTry
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Obj6Type
+struct Obj6Type: Codable, Sendable {
+    let type: Int
+
+    enum CodingKeys: String, CodingKey {
+        case type = "type"
+    }
+}
+
+// MARK: Obj6Type convenience initializers and mutators
+
+extension Obj6Type {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Obj6Type.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        type: Int? = nil
+    ) -> Obj6Type {
+        return Obj6Type(
+            type: type ?? self.type
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Typealias
+struct Typealias: Codable, Sendable {
+    let typealiasTypealias: Int
+
+    enum CodingKeys: String, CodingKey {
+        case typealiasTypealias = "typealias"
+    }
+}
+
+// MARK: Typealias convenience initializers and mutators
+
+extension Typealias {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Typealias.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        typealiasTypealias: Int? = nil
+    ) -> Typealias {
+        return Typealias(
+            typealiasTypealias: typealiasTypealias ?? self.typealiasTypealias
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Unowned
 struct Unowned: Codable, Sendable {
     let unownedUnowned: Int
@@ -16146,6 +16246,50 @@ extension WillSet {
     }
 }
 
+// MARK: - TypeClass
+struct TypeClass: Codable, Sendable {
+    let type: Int
+
+    enum CodingKeys: String, CodingKey {
+        case type = "Type"
+    }
+}
+
+// MARK: TypeClass convenience initializers and mutators
+
+extension TypeClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TypeClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        type: Int? = nil
+    ) -> TypeClass {
+        return TypeClass(
+            type: type ?? self.type
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Typedef
 struct Typedef: Codable, Sendable {
     let typedef: Int
diff --git a/base/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index 803668a..33704f7 100644
--- a/base/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -684,6 +684,7 @@ export interface Obj3 {
     JsonParser:                 JSONParser;
     JsonReader:                 JSONReader;
     JsonTokenType:              JSONTokenType;
+    LocalDate:                  LocalDate;
     Locale:                     Locale;
     LongNode:                   LongNode;
     MapEntry:                   MapEntry;
@@ -732,8 +733,6 @@ export interface Obj3 {
     map:                        Map;
     metadata_property_handling: MetadataPropertyHandling;
     module:                     Module;
-    mutable:                    Mutable;
-    mutating:                   Mutating;
 }
 
 export interface Hashable {
@@ -800,6 +799,10 @@ export interface JSONTokenType {
     JsonTokenType: number;
 }
 
+export interface LocalDate {
+    LocalDate: number;
+}
+
 export interface Locale {
     Locale: number;
 }
@@ -988,14 +991,6 @@ export interface Module {
     module: number;
 }
 
-export interface Mutable {
-    mutable: number;
-}
-
-export interface Mutating {
-    mutating: number;
-}
-
 export interface Obj4 {
     NO:               No;
     NSError:          NSError;
@@ -1008,9 +1003,13 @@ export interface Obj4 {
     ObjectNode:       ObjectNode;
     ObjectReader:     ObjectReader;
     ObjectWriter:     ObjectWriter;
+    OffsetDateTime:   OffsetDateTime;
+    OffsetTime:       OffsetTime;
     Protocol:         Protocol;
     RegExp:           RegExp;
     dummy:            number;
+    mutable:          Mutable;
+    mutating:         Mutating;
     namespace:        Namespace;
     native:           Native;
     new:              New;
@@ -1058,10 +1057,6 @@ export interface Obj4 {
     ref:              Ref;
     register:         Register;
     reinterpret_cast: ReinterpretCast;
-    repeat:           Repeat;
-    require:          Require;
-    required:         Required;
-    requires:         Requires;
 }
 
 export interface No {
@@ -1108,6 +1103,14 @@ export interface ObjectWriter {
     ObjectWriter: number;
 }
 
+export interface OffsetDateTime {
+    OffsetDateTime: number;
+}
+
+export interface OffsetTime {
+    OffsetTime: number;
+}
+
 export interface Protocol {
     Protocol: number;
 }
@@ -1116,6 +1119,14 @@ export interface RegExp {
     RegExp: string;
 }
 
+export interface Mutable {
+    mutable: number;
+}
+
+export interface Mutating {
+    mutating: number;
+}
+
 export interface Namespace {
     namespace: number;
 }
@@ -1304,22 +1315,6 @@ export interface ReinterpretCast {
     reinterpret_cast: number;
 }
 
-export interface Repeat {
-    repeat: number;
-}
-
-export interface Require {
-    require: number;
-}
-
-export interface Required {
-    required: number;
-}
-
-export interface Requires {
-    requires: number;
-}
-
 export interface Obj5 {
     KSerializer:          KSerializer;
     PrimitiveKind:        PrimitiveKind;
@@ -1340,8 +1335,11 @@ export interface Obj5 {
     TimeOnlyConverter:    TimeOnlyConverter;
     TimeZone:             TimeZone;
     True:                 True;
-    Type:                 Type;
     dummy:                number;
+    repeat:               Repeat;
+    require:              Require;
+    required:             Required;
+    requires:             Requires;
     restrict:             Restrict;
     retain:               Retain;
     rethrows:             Rethrows;
@@ -1383,9 +1381,6 @@ export interface Obj5 {
     top_level:            TopLevelClass;
     transient:            Transient;
     true:                 TrueClass;
-    try:                  Try;
-    type:                 TypeClass;
-    typealias:            Typealias;
 }
 
 export interface KSerializer {
@@ -1464,8 +1459,20 @@ export interface True {
     True: number;
 }
 
-export interface Type {
-    Type: number;
+export interface Repeat {
+    repeat: number;
+}
+
+export interface Require {
+    require: number;
+}
+
+export interface Required {
+    required: number;
+}
+
+export interface Requires {
+    requires: number;
 }
 
 export interface Restrict {
@@ -1632,19 +1639,8 @@ export interface TrueClass {
     true: number;
 }
 
-export interface Try {
-    try: number;
-}
-
-export interface TypeClass {
-    type: number;
-}
-
-export interface Typealias {
-    typealias: number;
-}
-
 export interface Obj6 {
+    Type:           Type;
     UUID:           UUID;
     UnmarshalJSON:  UnmarshalJSON;
     UseSerializers: UseSerializers;
@@ -1652,6 +1648,9 @@ export interface Obj6 {
     Utf8JsonWriter: Utf8JSONWriter;
     YES:            Yes;
     dummy:          number;
+    try:            Try;
+    type:           TypeClass;
+    typealias:      Typealias;
     typedef:        Typedef;
     typeid:         Typeid;
     typename:       Typename;
@@ -1681,6 +1680,10 @@ export interface Obj6 {
     yield:          Yield;
 }
 
+export interface Type {
+    Type: number;
+}
+
 export interface UUID {
     UUID: number;
 }
@@ -1705,6 +1708,18 @@ export interface Yes {
     YES: number;
 }
 
+export interface Try {
+    try: number;
+}
+
+export interface TypeClass {
+    type: number;
+}
+
+export interface Typealias {
+    typealias: number;
+}
+
 export interface Typedef {
     typedef: number;
 }
@@ -2545,6 +2560,7 @@ const typeMap: any = {
         { json: "JsonParser", js: "JsonParser", typ: r("JSONParser") },
         { json: "JsonReader", js: "JsonReader", typ: r("JSONReader") },
         { json: "JsonTokenType", js: "JsonTokenType", typ: r("JSONTokenType") },
+        { json: "LocalDate", js: "LocalDate", typ: r("LocalDate") },
         { json: "Locale", js: "Locale", typ: r("Locale") },
         { json: "LongNode", js: "LongNode", typ: r("LongNode") },
         { json: "MapEntry", js: "MapEntry", typ: r("MapEntry") },
@@ -2593,8 +2609,6 @@ const typeMap: any = {
         { json: "map", js: "map", typ: r("Map") },
         { json: "metadata_property_handling", js: "metadata_property_handling", typ: r("MetadataPropertyHandling") },
         { json: "module", js: "module", typ: r("Module") },
-        { json: "mutable", js: "mutable", typ: r("Mutable") },
-        { json: "mutating", js: "mutating", typ: r("Mutating") },
     ], false),
     "Hashable": o([
         { json: "Hashable", js: "Hashable", typ: i(0) },
@@ -2644,6 +2658,9 @@ const typeMap: any = {
     "JSONTokenType": o([
         { json: "JsonTokenType", js: "JsonTokenType", typ: i(0) },
     ], false),
+    "LocalDate": o([
+        { json: "LocalDate", js: "LocalDate", typ: i(0) },
+    ], false),
     "Locale": o([
         { json: "Locale", js: "Locale", typ: i(0) },
     ], false),
@@ -2785,12 +2802,6 @@ const typeMap: any = {
     "Module": o([
         { json: "module", js: "module", typ: i(0) },
     ], false),
-    "Mutable": o([
-        { json: "mutable", js: "mutable", typ: i(0) },
-    ], false),
-    "Mutating": o([
-        { json: "mutating", js: "mutating", typ: i(0) },
-    ], false),
     "Obj4": o([
         { json: "NO", js: "NO", typ: r("No") },
         { json: "NSError", js: "NSError", typ: r("NSError") },
@@ -2803,9 +2814,13 @@ const typeMap: any = {
         { json: "ObjectNode", js: "ObjectNode", typ: r("ObjectNode") },
         { json: "ObjectReader", js: "ObjectReader", typ: r("ObjectReader") },
         { json: "ObjectWriter", js: "ObjectWriter", typ: r("ObjectWriter") },
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: r("OffsetDateTime") },
+        { json: "OffsetTime", js: "OffsetTime", typ: r("OffsetTime") },
         { json: "Protocol", js: "Protocol", typ: r("Protocol") },
         { json: "RegExp", js: "RegExp", typ: r("RegExp") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "mutable", js: "mutable", typ: r("Mutable") },
+        { json: "mutating", js: "mutating", typ: r("Mutating") },
         { json: "namespace", js: "namespace", typ: r("Namespace") },
         { json: "native", js: "native", typ: r("Native") },
         { json: "new", js: "new", typ: r("New") },
@@ -2853,10 +2868,6 @@ const typeMap: any = {
         { json: "ref", js: "ref", typ: r("Ref") },
         { json: "register", js: "register", typ: r("Register") },
         { json: "reinterpret_cast", js: "reinterpret_cast", typ: r("ReinterpretCast") },
-        { json: "repeat", js: "repeat", typ: r("Repeat") },
-        { json: "require", js: "require", typ: r("Require") },
-        { json: "required", js: "required", typ: r("Required") },
-        { json: "requires", js: "requires", typ: r("Requires") },
     ], false),
     "No": o([
         { json: "NO", js: "NO", typ: i(0) },
@@ -2891,12 +2902,24 @@ const typeMap: any = {
     "ObjectWriter": o([
         { json: "ObjectWriter", js: "ObjectWriter", typ: i(0) },
     ], false),
+    "OffsetDateTime": o([
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: i(0) },
+    ], false),
+    "OffsetTime": o([
+        { json: "OffsetTime", js: "OffsetTime", typ: i(0) },
+    ], false),
     "Protocol": o([
         { json: "Protocol", js: "Protocol", typ: i(0) },
     ], false),
     "RegExp": o([
         { json: "RegExp", js: "RegExp", typ: { uuid: "" } },
     ], false),
+    "Mutable": o([
+        { json: "mutable", js: "mutable", typ: i(0) },
+    ], false),
+    "Mutating": o([
+        { json: "mutating", js: "mutating", typ: i(0) },
+    ], false),
     "Namespace": o([
         { json: "namespace", js: "namespace", typ: i(0) },
     ], false),
@@ -3038,18 +3061,6 @@ const typeMap: any = {
     "ReinterpretCast": o([
         { json: "reinterpret_cast", js: "reinterpret_cast", typ: i(0) },
     ], false),
-    "Repeat": o([
-        { json: "repeat", js: "repeat", typ: i(0) },
-    ], false),
-    "Require": o([
-        { json: "require", js: "require", typ: i(0) },
-    ], false),
-    "Required": o([
-        { json: "required", js: "required", typ: i(0) },
-    ], false),
-    "Requires": o([
-        { json: "requires", js: "requires", typ: i(0) },
-    ], false),
     "Obj5": o([
         { json: "KSerializer", js: "KSerializer", typ: r("KSerializer") },
         { json: "PrimitiveKind", js: "PrimitiveKind", typ: r("PrimitiveKind") },
@@ -3070,8 +3081,11 @@ const typeMap: any = {
         { json: "TimeOnlyConverter", js: "TimeOnlyConverter", typ: r("TimeOnlyConverter") },
         { json: "TimeZone", js: "TimeZone", typ: r("TimeZone") },
         { json: "True", js: "True", typ: r("True") },
-        { json: "Type", js: "Type", typ: r("Type") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "repeat", js: "repeat", typ: r("Repeat") },
+        { json: "require", js: "require", typ: r("Require") },
+        { json: "required", js: "required", typ: r("Required") },
+        { json: "requires", js: "requires", typ: r("Requires") },
         { json: "restrict", js: "restrict", typ: r("Restrict") },
         { json: "retain", js: "retain", typ: r("Retain") },
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
@@ -3113,9 +3127,6 @@ const typeMap: any = {
         { json: "top_level", js: "top_level", typ: r("TopLevelClass") },
         { json: "transient", js: "transient", typ: r("Transient") },
         { json: "true", js: "true", typ: r("TrueClass") },
-        { json: "try", js: "try", typ: r("Try") },
-        { json: "type", js: "type", typ: r("TypeClass") },
-        { json: "typealias", js: "typealias", typ: r("Typealias") },
     ], false),
     "KSerializer": o([
         { json: "KSerializer", js: "KSerializer", typ: i(0) },
@@ -3174,8 +3185,17 @@ const typeMap: any = {
     "True": o([
         { json: "True", js: "True", typ: i(0) },
     ], false),
-    "Type": o([
-        { json: "Type", js: "Type", typ: i(0) },
+    "Repeat": o([
+        { json: "repeat", js: "repeat", typ: i(0) },
+    ], false),
+    "Require": o([
+        { json: "require", js: "require", typ: i(0) },
+    ], false),
+    "Required": o([
+        { json: "required", js: "required", typ: i(0) },
+    ], false),
+    "Requires": o([
+        { json: "requires", js: "requires", typ: i(0) },
     ], false),
     "Restrict": o([
         { json: "restrict", js: "restrict", typ: i(0) },
@@ -3300,16 +3320,8 @@ const typeMap: any = {
     "TrueClass": o([
         { json: "true", js: "true", typ: i(0) },
     ], false),
-    "Try": o([
-        { json: "try", js: "try", typ: i(0) },
-    ], false),
-    "TypeClass": o([
-        { json: "type", js: "type", typ: i(0) },
-    ], false),
-    "Typealias": o([
-        { json: "typealias", js: "typealias", typ: i(0) },
-    ], false),
     "Obj6": o([
+        { json: "Type", js: "Type", typ: r("Type") },
         { json: "UUID", js: "UUID", typ: r("UUID") },
         { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: r("UnmarshalJSON") },
         { json: "UseSerializers", js: "UseSerializers", typ: r("UseSerializers") },
@@ -3317,6 +3329,9 @@ const typeMap: any = {
         { json: "Utf8JsonWriter", js: "Utf8JsonWriter", typ: r("Utf8JSONWriter") },
         { json: "YES", js: "YES", typ: r("Yes") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "try", js: "try", typ: r("Try") },
+        { json: "type", js: "type", typ: r("TypeClass") },
+        { json: "typealias", js: "typealias", typ: r("Typealias") },
         { json: "typedef", js: "typedef", typ: r("Typedef") },
         { json: "typeid", js: "typeid", typ: r("Typeid") },
         { json: "typename", js: "typename", typ: r("Typename") },
@@ -3345,6 +3360,9 @@ const typeMap: any = {
         { json: "xor_eq", js: "xor_eq", typ: r("XorEq") },
         { json: "yield", js: "yield", typ: r("Yield") },
     ], false),
+    "Type": o([
+        { json: "Type", js: "Type", typ: i(0) },
+    ], false),
     "UUID": o([
         { json: "UUID", js: "UUID", typ: i(0) },
     ], false),
@@ -3363,6 +3381,15 @@ const typeMap: any = {
     "Yes": o([
         { json: "YES", js: "YES", typ: i(0) },
     ], false),
+    "Try": o([
+        { json: "try", js: "try", typ: i(0) },
+    ], false),
+    "TypeClass": o([
+        { json: "type", js: "type", typ: i(0) },
+    ], false),
+    "Typealias": o([
+        { json: "typealias", js: "typealias", typ: i(0) },
+    ], false),
     "Typedef": o([
         { json: "typedef", js: "typedef", typ: i(0) },
     ], false),
diff --git a/base/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts
index ffd1d0c..ab512f7 100644
--- a/base/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -684,6 +684,7 @@ export type Obj3 = {
     JsonParser:                 JSONParser;
     JsonReader:                 JSONReader;
     JsonTokenType:              JSONTokenType;
+    LocalDate:                  LocalDate;
     Locale:                     Locale;
     LongNode:                   LongNode;
     MapEntry:                   MapEntry;
@@ -732,8 +733,6 @@ export type Obj3 = {
     map:                        Map;
     metadata_property_handling: MetadataPropertyHandling;
     module:                     Module;
-    mutable:                    Mutable;
-    mutating:                   Mutating;
 }
 
 export type Hashable = {
@@ -800,6 +799,10 @@ export type JSONTokenType = {
     JsonTokenType: number;
 }
 
+export type LocalDate = {
+    LocalDate: number;
+}
+
 export type Locale = {
     Locale: number;
 }
@@ -988,14 +991,6 @@ export type Module = {
     module: number;
 }
 
-export type Mutable = {
-    mutable: number;
-}
-
-export type Mutating = {
-    mutating: number;
-}
-
 export type Obj4 = {
     NO:               No;
     NSError:          NSError;
@@ -1008,9 +1003,13 @@ export type Obj4 = {
     ObjectNode:       ObjectNode;
     ObjectReader:     ObjectReader;
     ObjectWriter:     ObjectWriter;
+    OffsetDateTime:   OffsetDateTime;
+    OffsetTime:       OffsetTime;
     Protocol:         Protocol;
     RegExp:           RegExp;
     dummy:            number;
+    mutable:          Mutable;
+    mutating:         Mutating;
     namespace:        Namespace;
     native:           Native;
     new:              New;
@@ -1058,10 +1057,6 @@ export type Obj4 = {
     ref:              Ref;
     register:         Register;
     reinterpret_cast: ReinterpretCast;
-    repeat:           Repeat;
-    require:          Require;
-    required:         Required;
-    requires:         Requires;
 }
 
 export type No = {
@@ -1108,6 +1103,14 @@ export type ObjectWriter = {
     ObjectWriter: number;
 }
 
+export type OffsetDateTime = {
+    OffsetDateTime: number;
+}
+
+export type OffsetTime = {
+    OffsetTime: number;
+}
+
 export type Protocol = {
     Protocol: number;
 }
@@ -1116,6 +1119,14 @@ export type RegExp = {
     RegExp: string;
 }
 
+export type Mutable = {
+    mutable: number;
+}
+
+export type Mutating = {
+    mutating: number;
+}
+
 export type Namespace = {
     namespace: number;
 }
@@ -1304,22 +1315,6 @@ export type ReinterpretCast = {
     reinterpret_cast: number;
 }
 
-export type Repeat = {
-    repeat: number;
-}
-
-export type Require = {
-    require: number;
-}
-
-export type Required = {
-    required: number;
-}
-
-export type Requires = {
-    requires: number;
-}
-
 export type Obj5 = {
     KSerializer:          KSerializer;
     PrimitiveKind:        PrimitiveKind;
@@ -1340,8 +1335,11 @@ export type Obj5 = {
     TimeOnlyConverter:    TimeOnlyConverter;
     TimeZone:             TimeZone;
     True:                 True;
-    Type:                 Type;
     dummy:                number;
+    repeat:               Repeat;
+    require:              Require;
+    required:             Required;
+    requires:             Requires;
     restrict:             Restrict;
     retain:               Retain;
     rethrows:             Rethrows;
@@ -1383,9 +1381,6 @@ export type Obj5 = {
     top_level:            TopLevelClass;
     transient:            Transient;
     true:                 TrueClass;
-    try:                  Try;
-    type:                 TypeClass;
-    typealias:            Typealias;
 }
 
 export type KSerializer = {
@@ -1464,8 +1459,20 @@ export type True = {
     True: number;
 }
 
-export type Type = {
-    Type: number;
+export type Repeat = {
+    repeat: number;
+}
+
+export type Require = {
+    require: number;
+}
+
+export type Required = {
+    required: number;
+}
+
+export type Requires = {
+    requires: number;
 }
 
 export type Restrict = {
@@ -1632,19 +1639,8 @@ export type TrueClass = {
     true: number;
 }
 
-export type Try = {
-    try: number;
-}
-
-export type TypeClass = {
-    type: number;
-}
-
-export type Typealias = {
-    typealias: number;
-}
-
 export type Obj6 = {
+    Type:           Type;
     UUID:           UUID;
     UnmarshalJSON:  UnmarshalJSON;
     UseSerializers: UseSerializers;
@@ -1652,6 +1648,9 @@ export type Obj6 = {
     Utf8JsonWriter: Utf8JSONWriter;
     YES:            Yes;
     dummy:          number;
+    try:            Try;
+    type:           TypeClass;
+    typealias:      Typealias;
     typedef:        Typedef;
     typeid:         Typeid;
     typename:       Typename;
@@ -1681,6 +1680,10 @@ export type Obj6 = {
     yield:          Yield;
 }
 
+export type Type = {
+    Type: number;
+}
+
 export type UUID = {
     UUID: number;
 }
@@ -1705,6 +1708,18 @@ export type Yes = {
     YES: number;
 }
 
+export type Try = {
+    try: number;
+}
+
+export type TypeClass = {
+    type: number;
+}
+
+export type Typealias = {
+    typealias: number;
+}
+
 export type Typedef = {
     typedef: number;
 }
@@ -2545,6 +2560,7 @@ const typeMap: any = {
         { json: "JsonParser", js: "JsonParser", typ: r("JSONParser") },
         { json: "JsonReader", js: "JsonReader", typ: r("JSONReader") },
         { json: "JsonTokenType", js: "JsonTokenType", typ: r("JSONTokenType") },
+        { json: "LocalDate", js: "LocalDate", typ: r("LocalDate") },
         { json: "Locale", js: "Locale", typ: r("Locale") },
         { json: "LongNode", js: "LongNode", typ: r("LongNode") },
         { json: "MapEntry", js: "MapEntry", typ: r("MapEntry") },
@@ -2593,8 +2609,6 @@ const typeMap: any = {
         { json: "map", js: "map", typ: r("Map") },
         { json: "metadata_property_handling", js: "metadata_property_handling", typ: r("MetadataPropertyHandling") },
         { json: "module", js: "module", typ: r("Module") },
-        { json: "mutable", js: "mutable", typ: r("Mutable") },
-        { json: "mutating", js: "mutating", typ: r("Mutating") },
     ], false),
     "Hashable": o([
         { json: "Hashable", js: "Hashable", typ: i(0) },
@@ -2644,6 +2658,9 @@ const typeMap: any = {
     "JSONTokenType": o([
         { json: "JsonTokenType", js: "JsonTokenType", typ: i(0) },
     ], false),
+    "LocalDate": o([
+        { json: "LocalDate", js: "LocalDate", typ: i(0) },
+    ], false),
     "Locale": o([
         { json: "Locale", js: "Locale", typ: i(0) },
     ], false),
@@ -2785,12 +2802,6 @@ const typeMap: any = {
     "Module": o([
         { json: "module", js: "module", typ: i(0) },
     ], false),
-    "Mutable": o([
-        { json: "mutable", js: "mutable", typ: i(0) },
-    ], false),
-    "Mutating": o([
-        { json: "mutating", js: "mutating", typ: i(0) },
-    ], false),
     "Obj4": o([
         { json: "NO", js: "NO", typ: r("No") },
         { json: "NSError", js: "NSError", typ: r("NSError") },
@@ -2803,9 +2814,13 @@ const typeMap: any = {
         { json: "ObjectNode", js: "ObjectNode", typ: r("ObjectNode") },
         { json: "ObjectReader", js: "ObjectReader", typ: r("ObjectReader") },
         { json: "ObjectWriter", js: "ObjectWriter", typ: r("ObjectWriter") },
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: r("OffsetDateTime") },
+        { json: "OffsetTime", js: "OffsetTime", typ: r("OffsetTime") },
         { json: "Protocol", js: "Protocol", typ: r("Protocol") },
         { json: "RegExp", js: "RegExp", typ: r("RegExp") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "mutable", js: "mutable", typ: r("Mutable") },
+        { json: "mutating", js: "mutating", typ: r("Mutating") },
         { json: "namespace", js: "namespace", typ: r("Namespace") },
         { json: "native", js: "native", typ: r("Native") },
         { json: "new", js: "new", typ: r("New") },
@@ -2853,10 +2868,6 @@ const typeMap: any = {
         { json: "ref", js: "ref", typ: r("Ref") },
         { json: "register", js: "register", typ: r("Register") },
         { json: "reinterpret_cast", js: "reinterpret_cast", typ: r("ReinterpretCast") },
-        { json: "repeat", js: "repeat", typ: r("Repeat") },
-        { json: "require", js: "require", typ: r("Require") },
-        { json: "required", js: "required", typ: r("Required") },
-        { json: "requires", js: "requires", typ: r("Requires") },
     ], false),
     "No": o([
         { json: "NO", js: "NO", typ: i(0) },
@@ -2891,12 +2902,24 @@ const typeMap: any = {
     "ObjectWriter": o([
         { json: "ObjectWriter", js: "ObjectWriter", typ: i(0) },
     ], false),
+    "OffsetDateTime": o([
+        { json: "OffsetDateTime", js: "OffsetDateTime", typ: i(0) },
+    ], false),
+    "OffsetTime": o([
+        { json: "OffsetTime", js: "OffsetTime", typ: i(0) },
+    ], false),
     "Protocol": o([
         { json: "Protocol", js: "Protocol", typ: i(0) },
     ], false),
     "RegExp": o([
         { json: "RegExp", js: "RegExp", typ: { uuid: "" } },
     ], false),
+    "Mutable": o([
+        { json: "mutable", js: "mutable", typ: i(0) },
+    ], false),
+    "Mutating": o([
+        { json: "mutating", js: "mutating", typ: i(0) },
+    ], false),
     "Namespace": o([
         { json: "namespace", js: "namespace", typ: i(0) },
     ], false),
@@ -3038,18 +3061,6 @@ const typeMap: any = {
     "ReinterpretCast": o([
         { json: "reinterpret_cast", js: "reinterpret_cast", typ: i(0) },
     ], false),
-    "Repeat": o([
-        { json: "repeat", js: "repeat", typ: i(0) },
-    ], false),
-    "Require": o([
-        { json: "require", js: "require", typ: i(0) },
-    ], false),
-    "Required": o([
-        { json: "required", js: "required", typ: i(0) },
-    ], false),
-    "Requires": o([
-        { json: "requires", js: "requires", typ: i(0) },
-    ], false),
     "Obj5": o([
         { json: "KSerializer", js: "KSerializer", typ: r("KSerializer") },
         { json: "PrimitiveKind", js: "PrimitiveKind", typ: r("PrimitiveKind") },
@@ -3070,8 +3081,11 @@ const typeMap: any = {
         { json: "TimeOnlyConverter", js: "TimeOnlyConverter", typ: r("TimeOnlyConverter") },
         { json: "TimeZone", js: "TimeZone", typ: r("TimeZone") },
         { json: "True", js: "True", typ: r("True") },
-        { json: "Type", js: "Type", typ: r("Type") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "repeat", js: "repeat", typ: r("Repeat") },
+        { json: "require", js: "require", typ: r("Require") },
+        { json: "required", js: "required", typ: r("Required") },
+        { json: "requires", js: "requires", typ: r("Requires") },
         { json: "restrict", js: "restrict", typ: r("Restrict") },
         { json: "retain", js: "retain", typ: r("Retain") },
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
@@ -3113,9 +3127,6 @@ const typeMap: any = {
         { json: "top_level", js: "top_level", typ: r("TopLevelClass") },
         { json: "transient", js: "transient", typ: r("Transient") },
         { json: "true", js: "true", typ: r("TrueClass") },
-        { json: "try", js: "try", typ: r("Try") },
-        { json: "type", js: "type", typ: r("TypeClass") },
-        { json: "typealias", js: "typealias", typ: r("Typealias") },
     ], false),
     "KSerializer": o([
         { json: "KSerializer", js: "KSerializer", typ: i(0) },
@@ -3174,8 +3185,17 @@ const typeMap: any = {
     "True": o([
         { json: "True", js: "True", typ: i(0) },
     ], false),
-    "Type": o([
-        { json: "Type", js: "Type", typ: i(0) },
+    "Repeat": o([
+        { json: "repeat", js: "repeat", typ: i(0) },
+    ], false),
+    "Require": o([
+        { json: "require", js: "require", typ: i(0) },
+    ], false),
+    "Required": o([
+        { json: "required", js: "required", typ: i(0) },
+    ], false),
+    "Requires": o([
+        { json: "requires", js: "requires", typ: i(0) },
     ], false),
     "Restrict": o([
         { json: "restrict", js: "restrict", typ: i(0) },
@@ -3300,16 +3320,8 @@ const typeMap: any = {
     "TrueClass": o([
         { json: "true", js: "true", typ: i(0) },
     ], false),
-    "Try": o([
-        { json: "try", js: "try", typ: i(0) },
-    ], false),
-    "TypeClass": o([
-        { json: "type", js: "type", typ: i(0) },
-    ], false),
-    "Typealias": o([
-        { json: "typealias", js: "typealias", typ: i(0) },
-    ], false),
     "Obj6": o([
+        { json: "Type", js: "Type", typ: r("Type") },
         { json: "UUID", js: "UUID", typ: r("UUID") },
         { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: r("UnmarshalJSON") },
         { json: "UseSerializers", js: "UseSerializers", typ: r("UseSerializers") },
@@ -3317,6 +3329,9 @@ const typeMap: any = {
         { json: "Utf8JsonWriter", js: "Utf8JsonWriter", typ: r("Utf8JSONWriter") },
         { json: "YES", js: "YES", typ: r("Yes") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "try", js: "try", typ: r("Try") },
+        { json: "type", js: "type", typ: r("TypeClass") },
+        { json: "typealias", js: "typealias", typ: r("Typealias") },
         { json: "typedef", js: "typedef", typ: r("Typedef") },
         { json: "typeid", js: "typeid", typ: r("Typeid") },
         { json: "typename", js: "typename", typ: r("Typename") },
@@ -3345,6 +3360,9 @@ const typeMap: any = {
         { json: "xor_eq", js: "xor_eq", typ: r("XorEq") },
         { json: "yield", js: "yield", typ: r("Yield") },
     ], false),
+    "Type": o([
+        { json: "Type", js: "Type", typ: i(0) },
+    ], false),
     "UUID": o([
         { json: "UUID", js: "UUID", typ: i(0) },
     ], false),
@@ -3363,6 +3381,15 @@ const typeMap: any = {
     "Yes": o([
         { json: "YES", js: "YES", typ: i(0) },
     ], false),
+    "Try": o([
+        { json: "try", js: "try", typ: i(0) },
+    ], false),
+    "TypeClass": o([
+        { json: "type", js: "type", typ: i(0) },
+    ], false),
+    "Typealias": o([
+        { json: "typealias", js: "typealias", typ: i(0) },
+    ], false),
     "Typedef": o([
         { json: "typedef", js: "typedef", typ: i(0) },
     ], false),
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index 828fbe3..ceef23d 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -139,8 +139,28 @@ export class Typedef extends S.Class<Typedef>("Typedef")({
     "typedef": S.Int,
 }) {}
 
+export class Typealias extends S.Class<Typealias>("Typealias")({
+    "typealias": S.Int,
+}) {}
+
+export class Type extends S.Class<Type>("Type")({
+    "Type": S.Int,
+}) {}
+
+export class Try extends S.Class<Try>("Try")({
+    "try": S.Int,
+}) {}
+
+export class TypeClass extends S.Class<TypeClass>("TypeClass")({
+    "type": S.Int,
+}) {}
+
 export class Obj6 extends S.Class<Obj6>("Obj6")({
     "dummy": S.Int,
+    "type": TypeClass,
+    "try": Try,
+    "Type": Type,
+    "typealias": Typealias,
     "typedef": Typedef,
     "typeid": Typeid,
     "typename": Typename,
@@ -176,18 +196,6 @@ export class Obj6 extends S.Class<Obj6>("Obj6")({
     "yield": Yield,
 }) {}
 
-export class Typealias extends S.Class<Typealias>("Typealias")({
-    "typealias": S.Int,
-}) {}
-
-export class Type extends S.Class<Type>("Type")({
-    "Type": S.Int,
-}) {}
-
-export class Try extends S.Class<Try>("Try")({
-    "try": S.Int,
-}) {}
-
 export class True extends S.Class<True>("True")({
     "True": S.Int,
 }) {}
@@ -413,12 +421,24 @@ export class Restrict extends S.Class<Restrict>("Restrict")({
     "restrict": S.Int,
 }) {}
 
-export class PrimitiveKind extends S.Class<PrimitiveKind>("PrimitiveKind")({
-    "PrimitiveKind": S.Int,
+export class Requires extends S.Class<Requires>("Requires")({
+    "requires": S.Int,
 }) {}
 
-export class TypeClass extends S.Class<TypeClass>("TypeClass")({
-    "type": S.Int,
+export class Required extends S.Class<Required>("Required")({
+    "required": S.Int,
+}) {}
+
+export class Require extends S.Class<Require>("Require")({
+    "require": S.Int,
+}) {}
+
+export class Repeat extends S.Class<Repeat>("Repeat")({
+    "repeat": S.Int,
+}) {}
+
+export class PrimitiveKind extends S.Class<PrimitiveKind>("PrimitiveKind")({
+    "PrimitiveKind": S.Int,
 }) {}
 
 export class TrueClass extends S.Class<TrueClass>("TrueClass")({
@@ -438,8 +458,11 @@ export class Obj5 extends S.Class<Obj5>("Obj5")({
     "KSerializer": KSerializer,
     "self": SelfClass,
     "true": TrueClass,
-    "type": TypeClass,
     "PrimitiveKind": PrimitiveKind,
+    "repeat": Repeat,
+    "require": Require,
+    "required": Required,
+    "requires": Requires,
     "restrict": Restrict,
     "retain": Retain,
     "rethrows": Rethrows,
@@ -496,28 +519,9 @@ export class Obj5 extends S.Class<Obj5>("Obj5")({
     "top_level": TopLevelClass,
     "transient": Transient,
     "True": True,
-    "try": Try,
-    "Type": Type,
-    "typealias": Typealias,
 }) {}
 Object.defineProperty(Obj5.prototype, "toString", { writable: true });
 
-export class Requires extends S.Class<Requires>("Requires")({
-    "requires": S.Int,
-}) {}
-
-export class Required extends S.Class<Required>("Required")({
-    "required": S.Int,
-}) {}
-
-export class Require extends S.Class<Require>("Require")({
-    "require": S.Int,
-}) {}
-
-export class Repeat extends S.Class<Repeat>("Repeat")({
-    "repeat": S.Int,
-}) {}
-
 export class ReinterpretCast extends S.Class<ReinterpretCast>("ReinterpretCast")({
     "reinterpret_cast": S.Int,
 }) {}
@@ -638,6 +642,14 @@ export class Oneway extends S.Class<Oneway>("Oneway")({
     "oneway": S.Int,
 }) {}
 
+export class OffsetTime extends S.Class<OffsetTime>("OffsetTime")({
+    "OffsetTime": S.Int,
+}) {}
+
+export class OffsetDateTime extends S.Class<OffsetDateTime>("OffsetDateTime")({
+    "OffsetDateTime": S.Int,
+}) {}
+
 export class Of extends S.Class<Of>("Of")({
     "of": S.Int,
 }) {}
@@ -758,8 +770,18 @@ export class Namespace extends S.Class<Namespace>("Namespace")({
     "namespace": S.Int,
 }) {}
 
+export class Mutating extends S.Class<Mutating>("Mutating")({
+    "mutating": S.Int,
+}) {}
+
+export class Mutable extends S.Class<Mutable>("Mutable")({
+    "mutable": S.Int,
+}) {}
+
 export class Obj4 extends S.Class<Obj4>("Obj4")({
     "dummy": S.Int,
+    "mutable": Mutable,
+    "mutating": Mutating,
     "namespace": Namespace,
     "native": Native,
     "new": New,
@@ -790,6 +812,8 @@ export class Obj4 extends S.Class<Obj4>("Obj4")({
     "ObjectReader": ObjectReader,
     "ObjectWriter": ObjectWriter,
     "of": Of,
+    "OffsetDateTime": OffsetDateTime,
+    "OffsetTime": OffsetTime,
     "oneway": Oneway,
     "open": Open,
     "operator": Operator,
@@ -820,18 +844,6 @@ export class Obj4 extends S.Class<Obj4>("Obj4")({
     "RegExp": RegExpClass,
     "register": Register,
     "reinterpret_cast": ReinterpretCast,
-    "repeat": Repeat,
-    "require": Require,
-    "required": Required,
-    "requires": Requires,
-}) {}
-
-export class Mutating extends S.Class<Mutating>("Mutating")({
-    "mutating": S.Int,
-}) {}
-
-export class Mutable extends S.Class<Mutable>("Mutable")({
-    "mutable": S.Int,
 }) {}
 
 export class Module extends S.Class<Module>("Module")({
@@ -870,6 +882,10 @@ export class Locale extends S.Class<Locale>("Locale")({
     "Locale": S.Int,
 }) {}
 
+export class LocalDate extends S.Class<LocalDate>("LocalDate")({
+    "LocalDate": S.Int,
+}) {}
+
 export class List extends S.Class<List>("List")({
     "list": S.Int,
 }) {}
@@ -1142,6 +1158,7 @@ export class Obj3 extends S.Class<Obj3>("Obj3")({
     "left": Left,
     "let": Let,
     "list": List,
+    "LocalDate": LocalDate,
     "Locale": Locale,
     "lock": Lock,
     "long": Long,
@@ -1151,8 +1168,6 @@ export class Obj3 extends S.Class<Obj3>("Obj3")({
     "MarshalJSON": MarshalJson,
     "metadata_property_handling": MetadataPropertyHandling,
     "module": Module,
-    "mutable": Mutable,
-    "mutating": Mutating,
 }) {}
 
 export class FalseClass extends S.Class<FalseClass>("FalseClass")({
diff --git a/base/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index 89ab7c9..4b58238 100644
--- a/base/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -917,6 +917,11 @@ export const ListSchema = z.object({
 });
 export type List = z.infer<typeof ListSchema>;
 
+export const LocalDateSchema = z.object({
+    "LocalDate": z.number().int(),
+});
+export type LocalDate = z.infer<typeof LocalDateSchema>;
+
 export const LocaleSchema = z.object({
     "Locale": z.number().int(),
 });
@@ -1122,6 +1127,16 @@ export const OfSchema = z.object({
 });
 export type Of = z.infer<typeof OfSchema>;
 
+export const OffsetDateTimeSchema = z.object({
+    "OffsetDateTime": z.number().int(),
+});
+export type OffsetDateTime = z.infer<typeof OffsetDateTimeSchema>;
+
+export const OffsetTimeSchema = z.object({
+    "OffsetTime": z.number().int(),
+});
+export type OffsetTime = z.infer<typeof OffsetTimeSchema>;
+
 export const OnewaySchema = z.object({
     "oneway": z.number().int(),
 });
@@ -1272,26 +1287,6 @@ export const ReinterpretCastSchema = z.object({
 });
 export type ReinterpretCast = z.infer<typeof ReinterpretCastSchema>;
 
-export const RepeatSchema = z.object({
-    "repeat": z.number().int(),
-});
-export type Repeat = z.infer<typeof RepeatSchema>;
-
-export const RequireSchema = z.object({
-    "require": z.number().int(),
-});
-export type Require = z.infer<typeof RequireSchema>;
-
-export const RequiredSchema = z.object({
-    "required": z.number().int(),
-});
-export type Required = z.infer<typeof RequiredSchema>;
-
-export const RequiresSchema = z.object({
-    "requires": z.number().int(),
-});
-export type Requires = z.infer<typeof RequiresSchema>;
-
 export const KSerializerSchema = z.object({
     "KSerializer": z.number().int(),
 });
@@ -1307,16 +1302,31 @@ export const TrueClassSchema = z.object({
 });
 export type TrueClass = z.infer<typeof TrueClassSchema>;
 
-export const TypeClassSchema = z.object({
-    "type": z.number().int(),
-});
-export type TypeClass = z.infer<typeof TypeClassSchema>;
-
 export const PrimitiveKindSchema = z.object({
     "PrimitiveKind": z.number().int(),
 });
 export type PrimitiveKind = z.infer<typeof PrimitiveKindSchema>;
 
+export const RepeatSchema = z.object({
+    "repeat": z.number().int(),
+});
+export type Repeat = z.infer<typeof RepeatSchema>;
+
+export const RequireSchema = z.object({
+    "require": z.number().int(),
+});
+export type Require = z.infer<typeof RequireSchema>;
+
+export const RequiredSchema = z.object({
+    "required": z.number().int(),
+});
+export type Required = z.infer<typeof RequiredSchema>;
+
+export const RequiresSchema = z.object({
+    "requires": z.number().int(),
+});
+export type Requires = z.infer<typeof RequiresSchema>;
+
 export const RestrictSchema = z.object({
     "restrict": z.number().int(),
 });
@@ -1597,6 +1607,11 @@ export const TrueSchema = z.object({
 });
 export type True = z.infer<typeof TrueSchema>;
 
+export const TypeClassSchema = z.object({
+    "type": z.number().int(),
+});
+export type TypeClass = z.infer<typeof TypeClassSchema>;
+
 export const TrySchema = z.object({
     "try": z.number().int(),
 });
@@ -1971,6 +1986,7 @@ export const Obj3Schema = z.object({
     "left": LeftSchema,
     "let": LetSchema,
     "list": ListSchema,
+    "LocalDate": LocalDateSchema,
     "Locale": LocaleSchema,
     "lock": LockSchema,
     "long": LongSchema,
@@ -1980,13 +1996,13 @@ export const Obj3Schema = z.object({
     "MarshalJSON": MarshalJsonSchema,
     "metadata_property_handling": MetadataPropertyHandlingSchema,
     "module": ModuleSchema,
-    "mutable": MutableSchema,
-    "mutating": MutatingSchema,
 });
 export type Obj3 = z.infer<typeof Obj3Schema>;
 
 export const Obj4Schema = z.object({
     "dummy": z.number().int(),
+    "mutable": MutableSchema,
+    "mutating": MutatingSchema,
     "namespace": NamespaceSchema,
     "native": NativeSchema,
     "new": NewSchema,
@@ -2017,6 +2033,8 @@ export const Obj4Schema = z.object({
     "ObjectReader": ObjectReaderSchema,
     "ObjectWriter": ObjectWriterSchema,
     "of": OfSchema,
+    "OffsetDateTime": OffsetDateTimeSchema,
+    "OffsetTime": OffsetTimeSchema,
     "oneway": OnewaySchema,
     "open": OpenSchema,
     "operator": OperatorSchema,
@@ -2047,10 +2065,6 @@ export const Obj4Schema = z.object({
     "RegExp": RegExpSchema,
     "register": RegisterSchema,
     "reinterpret_cast": ReinterpretCastSchema,
-    "repeat": RepeatSchema,
-    "require": RequireSchema,
-    "required": RequiredSchema,
-    "requires": RequiresSchema,
 });
 export type Obj4 = z.infer<typeof Obj4Schema>;
 
@@ -2059,8 +2073,11 @@ export const Obj5Schema = z.object({
     "KSerializer": KSerializerSchema,
     "self": SelfClassSchema,
     "true": TrueClassSchema,
-    "type": TypeClassSchema,
     "PrimitiveKind": PrimitiveKindSchema,
+    "repeat": RepeatSchema,
+    "require": RequireSchema,
+    "required": RequiredSchema,
+    "requires": RequiresSchema,
     "restrict": RestrictSchema,
     "retain": RetainSchema,
     "rethrows": RethrowsSchema,
@@ -2117,14 +2134,15 @@ export const Obj5Schema = z.object({
     "top_level": TopLevelClassSchema,
     "transient": TransientSchema,
     "True": TrueSchema,
-    "try": TrySchema,
-    "Type": TypeSchema,
-    "typealias": TypealiasSchema,
 });
 export type Obj5 = z.infer<typeof Obj5Schema>;
 
 export const Obj6Schema = z.object({
     "dummy": z.number().int(),
+    "type": TypeClassSchema,
+    "try": TrySchema,
+    "Type": TypeSchema,
+    "typealias": TypealiasSchema,
     "typedef": TypedefSchema,
     "typeid": TypeidSchema,
     "typename": TypenameSchema,
