[
  {
    "path": ".github/FUNDING.yml",
    "content": "github: [oscartbeaumont]\ncustom: [\"https://paypal.me/oscartbeaumont\"]"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\n\nmulti-ecosystem-groups:\n  specta-deps:\n    schedule:\n      interval: \"weekly\"\n\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    multi-ecosystem-group: \"specta-deps\"\n    patterns: [\"*\"]\n\n  - package-ecosystem: \"cargo\"\n    directory: \"/\"\n    multi-ecosystem-group: \"specta-deps\"\n    patterns: [\"*\"]\n"
  },
  {
    "path": ".github/features.js",
    "content": "// This script generates the documentation for the Cargo features from the comments in the `Cargo.toml` file.\n// It dumps the result into the `src/docs.md` file. This means the docs are readable in the published version of the crate and also allows the docs to be broken into a separate file (unlike `document-features`)\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\n\nconst START_MARKER = \"[//]: # (FEATURE_FLAGS_START)\";\nconst END_MARKER = \"[//]: # (FEATURE_FLAGS_END)\";\n\nconst docsPath = path.join(__dirname, \"..\", \"src\", \"docs.md\");\n\nconst cargoToml = fs.readFileSync(\n  path.join(__dirname, \"..\", \"Cargo.toml\"),\n  \"utf8\"\n);\nconst docs = fs.readFileSync(docsPath, \"utf8\");\n\nif (!docs.includes(START_MARKER) || !docs.includes(END_MARKER))\n  throw new Error(\"Missing markers in 'docs.md'\");\n\nconst lines = cargoToml.split(\"\\n\").map((line) => line.trim());\n\nconst featuresIndex = lines.indexOf(\"[features]\");\nif (featuresIndex === -1)\n  throw new Error(\"Missing '[features]' in 'Cargo.toml'\");\n\nconst featuresPart = lines.slice(featuresIndex + 1);\n\nconst endIndex = featuresPart.findIndex(\n  (line) => line.startsWith(\"[\") && line.endsWith(\"]\")\n);\n\nconst featuresLine = featuresPart.slice(0, endIndex);\n\nlet comments = \"\";\nlet group = null;\nlet result = {};\nfor (const line of featuresLine) {\n  if (line == \"\") {\n    continue;\n  }\n\n  if (line.startsWith(\"##!\")) {\n    group = \"\";\n    result[group] = {};\n  } else if (line.startsWith(\"##\")) {\n    comments += line.slice(2).trim() + \"\\n\";\n  } else if (line.startsWith(\"#!\")) {\n    group = line.substring(2).trim();\n    result[group] = {};\n  } else if (line.startsWith(\"#\")) {\n    continue;\n  } else {\n    const parts = line.split(\"=\");\n    if (parts.length !== 2) throw new Error(`Invalid feature line: '${line}'`);\n\n    if (group !== null) {\n      result[group][parts[0].trim()] = comments;\n      comments = \"\";\n    }\n  }\n}\n\nlet markdown_result = Object.entries(result)\n  .map(\n    ([name, deps]) =>\n      `${name}\\n\\n${Object.entries(deps)\n        .map(\n          ([name, comment]) =>\n            `- \\`${name}\\` - ${comment.replace(\"\\n\", \" \").trim()}`\n        )\n        .join(\"\\n\")}`\n  )\n  .join(\"\\n\\n\");\n\nconst resultDocs = docs.replace(\n  docs.substring(\n    docs.indexOf(START_MARKER),\n    docs.lastIndexOf(END_MARKER) + END_MARKER.length\n  ),\n  START_MARKER + \"\\n\" + markdown_result + \"\\n\\n\" + END_MARKER\n);\n\nfs.writeFileSync(docsPath, resultDocs);\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - main\n  pull_request:\n\nenv:\n  CARGO_TERM_COLOR: always\n\njobs:\n  build:\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest, windows-latest]\n    runs-on: ${{ matrix.os }}\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup\n        if: matrix.os == 'ubuntu-latest'\n        run: sudo apt-get update && sudo apt-get install libgtk-3-dev webkit2gtk-4.1 libayatana-appindicator3-dev\n      - name: Install Rust toolchain\n        run: rustup toolchain install stable --profile minimal\n      - name: Rust cache\n        uses: Swatinem/rust-cache@v2\n      - name: Build\n        run: cargo build --all-features\n      - name: Run tests\n        run: cargo test --all-features\n\n  clippy:\n    runs-on: ubuntu-latest\n\n    permissions:\n      contents: read\n      checks: write\n      pull-requests: write\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup\n        run: sudo apt-get update && sudo apt-get install libgtk-3-dev webkit2gtk-4.1 libayatana-appindicator3-dev\n      - name: Install Rust toolchain\n        run: rustup toolchain install stable --profile minimal --component clippy\n      - name: Rust cache\n        uses: Swatinem/rust-cache@v2\n      - uses: actions-rs/clippy-check@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          args: --all-features\n"
  },
  {
    "path": ".gitignore",
    "content": "# Generated by Cargo\n# will have compiled files and executables\ntarget/\ntest-target/\n\n# These are backup files generated by rustfmt\n**/*.rs.bk\n\n# System Files\n.DS_Store\n\n# Node\nnode_modules\n.pnpm-debug.log*\n*.tsbuildinfo\n/packages/*/dist\n\n/bindings.ts\n/bindings2.ts\n\n/tests/.temp\n\n# Used by examples as a place to export files.\n/specta-typescript/out\n"
  },
  {
    "path": ".rustfmt.toml",
    "content": "# https://github.com/specta-rs/specta/pull/222\n"
  },
  {
    "path": ".taplo.toml",
    "content": "[formatting]\ncolumn_width = 150\n"
  },
  {
    "path": "AGENTS.md",
    "content": "Specta is a Rust library for easily exporting Rust types to other languages (TypeScript, Swift, Rust, OpenAPI, etc.). It's a workspace with multiple crates:\n\n```\nspecta/\n├── specta/              # Core library\n├── specta-macros/       # Macros for the core library\n├── specta-typescript/   # TypeScript exporter (stable)\n├── specta-swift/        # Swift exporter  (stable)\n├── specta-openapi/      # OpenAPI (partial)\n├── specta-serde/        # Serde utilities\n├── specta-util/         # Utilities for end-users. Less semver guarantees.\n├── tests/               # Integration tests\n├── Cargo.toml           # Workspace manifest\n```\n\nSpecta is format agnostic so the `specta` and `specta-macros` crate should avoid hardcoding serde-specific behaviors.\nWe use `insta` for snapshot testing\nUse Rust 2024 edition\nDocument feature gates with `#[cfg_attr(docsrs, doc(cfg(feature = \"...\")))]`\nPrefer to put tests in the dedicated crate\nDon't run `cargo doc --open` as it opens a browser you can't read. Maybe prefer a web fetch to https://docs.rs/{crate_name}\nPrefer Rust module guidelines including using `module.rs` instead of `module/mod.rs`\nWhen testing bugs create a unit test to ensure it's fixed. If I give you a GitHub link can you include it in comments.\nDon't use `/tmp` for temporary projects in should stay within the workspace.\n\nYou are a senior engineer. You should follow Clippy and Rust best practices. Write code that is concise and readable. Make use of Rust's method chaining where it would result in cleaner code.\n"
  },
  {
    "path": "Cargo.toml",
    "content": "[workspace]\nmembers = [\"specta\", \"specta-*\", \"tests\", \"examples/*\"]\nresolver = \"2\"\n\n[workspace.lints.rust]\nunsafe_code = { level = \"warn\", priority = -1 } # ctor requires unsafe but is an optional feature\nmissing_docs = { level = \"warn\", priority = -1 }\n\nunexpected_cfgs = { level = \"warn\", check-cfg = ['cfg(is_nightly)'] }\n\n[workspace.lints.clippy]\nall = { level = \"warn\", priority = -1 }\ncargo = { level = \"warn\", priority = -1 }\nunwrap_used = { level = \"warn\", priority = -1 }\npanic = { level = \"warn\", priority = -1 }\ntodo = { level = \"warn\", priority = -1 }\npanic_in_result_fn = { level = \"warn\", priority = -1 }\nmultiple_crate_versions = { level = \"allow\", priority = 0 }\n\n# I hate these. For internal code I don't care.\ntoo_many_arguments = { level = \"allow\", priority = 0 }\ntype_complexity = { level = \"allow\", priority = 0 }\n\n[profile.dev.package]\ninsta.opt-level = 3\nsimilar.opt-level = 3\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2022 Oscar Beaumont\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n    <img height=\"150\" src=\".github/logo.png\" alt=\"Specta Logo\"></img>\n    <h1>Specta</h1>\n    <p><b>Easily export your Rust types to other languages</b></p>\n    <a href=\"https://discord.com/invite/5M6fpszrry\"><img src=\"https://img.shields.io/discord/1011665225809924136?style=flat-square\" alt=\"Discord\"></a>\n    <a href=\"https://crates.io/crates/specta\"><img src=\"https://img.shields.io/crates/d/specta?style=flat-square\" alt=\"Crates.io\"></a>\n    <a href=\"https://crates.io/crates/specta\"><img src=\"https://img.shields.io/crates/v/specta.svg?style=flat-square\"\n    alt=\"crates.io\" /></a>\n    <a href=\"https://docs.rs/specta\"><img src=\"https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square\" alt=\"docs.rs\" /></a>\n    <a href=\"/LICENSE.md\"><img src=\"https://img.shields.io/crates/l/specta?style=flat-square\" alt=\"License\"></a>\n</div>\n\n<br>\n\n## Features\n\n- Export structs and enums to multiple languages\n- Get function types to use in libraries like [tauri-specta](https://github.com/specta-rs/tauri-specta)\n- Supports wide range of common crates in Rust ecosystem\n- Supports type inference - can determine type of `fn demo() -> impl Type`\n\n## Language Support\n\n| Language        | Status         | Exporter                                                          | Features                                          |\n| --------------- | -------------- | ----------------------------------------------------------------- | ------------------------------------------------- |\n| **TypeScript**  | ✅ **Stable**  | [`specta-typescript`](https://crates.io/crates/specta-typescript) | Full type support, generics, unions               |\n| **Swift**       | ✅ **Stable**  | [`specta-swift`](https://crates.io/crates/specta-swift)           | Idiomatic Swift, custom Codable, Duration support |\n| **Rust**        | 🚧 **Partial** | [`specta-rust`](https://crates.io/crates/specta-rust)             | Basic types work, structs/enums in progress       |\n| **OpenAPI**     | 🚧 **Partial** | [`specta-openapi`](https://crates.io/crates/specta-openapi)       | Primitives work, complex types in progress        |\n| **Go**          | 🚧 **Planned** | [`specta-go`](https://crates.io/crates/specta-go)                 | Go structs and interfaces                         |\n| **Kotlin**      | 🚧 **Planned** | [`specta-kotlin`](https://crates.io/crates/specta-kotlin)         | Kotlin data classes and sealed classes            |\n| **JSON Schema** | 🚧 **Planned** | [`specta-jsonschema`](https://crates.io/crates/specta-jsonschema) | JSON Schema generation                            |\n| **Zod**         | 🚧 **Planned** | [`specta-zod`](https://crates.io/crates/specta-zod)               | Zod schema validation                             |\n| **Python**      | 🚧 **Planned** | `specta-python`                                                   | Python dataclasses and type hints                 |\n| **C#**          | 🚧 **Planned** | `specta-csharp`                                                   | C# classes and enums                              |\n| **Java**        | 🚧 **Planned** | `specta-java`                                                     | Java POJOs and enums                              |\n\n### Legend\n\n- ✅ **Stable**: Production-ready with comprehensive test coverage\n- 🚧 **Partial**: Basic functionality implemented, complex types in progress\n- 🚧 **Planned**: In development or planned for future release\n\n## Implementation Status\n\nThe Specta ecosystem is actively developed with varying levels of completeness:\n\n- **Production Ready (2)**: TypeScript and Swift exporters are fully functional with comprehensive test coverage\n- **Partially Implemented (2)**: Rust and OpenAPI exporters have basic functionality working, with complex types in progress\n- **Planned (7)**: Go, Kotlin, JSON Schema, Zod, Python, C#, and Java exporters are in development\n\nFor the most up-to-date status of each exporter, check the individual crate documentation and issue trackers.\n\n## Ecosystem\n\nSpecta can be used in your application either directly or through a library which simplifies the process of using it.\n\n- [rspc](https://github.com/specta-rs/rspc) - Easily building end-to-end typesafe APIs\n- [tauri-specta](https://github.com/specta-rs/tauri-specta) - Typesafe Tauri commands and events\n- [TauRPC](https://github.com/MatsDK/TauRPC) - Tauri extension to give you a fully-typed IPC layer.\n\n## Usage\n\nAdd the [`specta`](https://docs.rs/specta) crate along with any Specta language exporter crate:\n\n```bash\n# Core Specta library\ncargo add specta\n\n# Language exporters (choose one or more)\ncargo add specta_typescript  # TypeScript (stable)\ncargo add specta_swift       # Swift (stable)\ncargo add specta_rust        # Rust (partial - basic types)\ncargo add specta_openapi     # OpenAPI/Swagger (partial - primitives)\n# cargo add specta_go          # Go (planned)\n# cargo add specta_kotlin      # Kotlin (planned)\n# cargo add specta_jsonschema  # JSON Schema (planned)\n# cargo add specta_zod         # Zod schemas (planned)\n```\n\nThen you can use Specta like following:\n\n### TypeScript Example\n\n```rust\nuse specta::{Type, Types};\nuse specta_typescript::Typescript;\n\n#[derive(Type)]\npub struct TypeOne {\n    pub a: String,\n    pub b: GenericType<i32>,\n    #[serde(rename = \"cccccc\")]\n    pub c: MyEnum,\n}\n\n#[derive(Type)]\npub struct GenericType<A> {\n    pub my_field: String,\n    pub generic: A,\n}\n\n#[derive(Type)]\npub enum MyEnum {\n    A,\n    B,\n    C,\n}\n\nfn main() {\n    let types = Types::default()\n        // You don't need to specify `GenericType` or `MyEnum` because they are referenced by `TypeOne`\n        .register::<TypeOne>();\n\n    Typescript::default()\n        .export_to(\"./bindings.ts\", &types)\n        .unwrap();\n\n    // if you need more control over file saving\n    assert_eq!(\n        Typescript::default().export(&types).unwrap(),\n        r#\"// This file has been generated by Specta. DO NOT EDIT.\n\nexport type GenericType<A> = { my_field: string; generic: A };\n\nexport type MyEnum = \"A\" | \"B\" | \"C\";\n\nexport type TypeOne = { a: string; b: GenericType<number>; cccccc: MyEnum };\n\n\"#\n    );\n}\n\n```\n\n### Multi-Language Export Example\n\nYou can export the same types to multiple languages:\n\n```rust\nuse specta::{Type, Types};\nuse specta_typescript::Typescript;\nuse specta_swift::Swift;\n\n#[derive(Type)]\npub struct User {\n    pub id: u32,\n    pub name: String,\n    pub email: Option<String>,\n}\n\nfn main() {\n    let types = Types::default()\n        .register::<User>();\n\n    // Export to TypeScript (stable)\n    Typescript::default()\n        .export_to(\"./types.ts\", &types)\n        .unwrap();\n\n    // Export to Swift (stable)\n    Swift::default()\n        .export_to(\"./Types.swift\", &types)\n        .unwrap();\n\n    // Note: Other exporters are in development\n}\n```\n\nA common use case is to export all types for which `specta::Type` is derived into a single file:\n\n```rust\n//! NOTE: This example requires the `export` feature on the `specta` crate\nuse specta::Type;\nuse specta_typescript::Typescript;\n\n#[derive(Type)]\npub enum MyEither<L, R> {\n    Left(L),\n    Right(R),\n}\n\n#[derive(Type)]\npub struct GenericType<A> {\n    pub my_field: String,\n    pub generic: A,\n}\n\n#[derive(Type)]\npub enum MyEnum {\n    A,\n    B,\n    C,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\npub struct DontExportMe {\n    field: String,\n}\n\nfn main() {\n    Typescript::default()\n        .export_to(\"./bindings.ts\", &specta::export())\n        .unwrap();\n}\n```\n\nCheck out the [docs](https://docs.rs/specta) for more information.\n\n## Motivation\n\nThis library was originally created to power the type exporting functionality of [rspc](https://rspc.dev),\nbut after building it we realized that it could be useful for other projects as well so we decided to move it into a dedicated library.\n\nA huge thanks to [Brendonovich](https://github.com/brendonovich) for doing a heap of early development on this library.\n"
  },
  {
    "path": "examples/basic-ts/Cargo.toml",
    "content": "[package]\nname = \"example-basic-ts\"\nversion = \"0.0.0\"\nedition = \"2024\"\npublish = false\n\n[dependencies]\nspecta = { path = \"../../specta\", features = [\"derive\"] }\nspecta-typescript = { path = \"../../specta-typescript\" }\nspecta-serde = { path = \"../../specta-serde\" }\nserde = { version = \"1\", features = [\"derive\"] }\nserde_with = { version = \"3\", features = [\"macros\"] }\nserde_repr = \"0.1.20\"\n"
  },
  {
    "path": "examples/basic-ts/src/main.rs",
    "content": "use serde::{Deserialize, Serialize};\nuse specta::{Type, Types};\nuse specta_typescript::Typescript;\n\n// Specta works by deriving `Type` for the Rust types you want to export.\n//\n// `Serialize` and `Deserialize` are not required by Specta itself, but they are\n// common in real applications and allow Specta to understand serde attributes\n// when exporting through `specta_serde::Format` below.\n#[derive(Serialize, Deserialize, Type)]\npub struct User {\n    id: u32,\n    name: String,\n\n    // Serde attributes are respected when using `specta_serde::Format`.\n    // This field will be exported to TypeScript as `emailAddress`.\n    #[serde(rename = \"emailAddress\")]\n    email_address: String,\n\n    // Optional Rust values become `T | null` in TypeScript.\n    avatar_url: Option<String>,\n}\n\n#[derive(Serialize, Deserialize, Type)]\npub struct Post {\n    id: u32,\n    title: String,\n    author: User,\n    tags: Vec<String>,\n    status: PostStatus,\n}\n\n#[derive(Serialize, Deserialize, Type)]\n#[serde(rename_all = \"camelCase\")]\npub enum PostStatus {\n    Draft,\n    InReview,\n    Published,\n}\n\nfn main() {\n    // Register every root type you want to export. Specta automatically follows\n    // references, so registering `Post` is enough to include `User` and\n    // `PostStatus`, but registering roots explicitly is often clearer in apps.\n    let types = Types::default()\n        .register::<User>()\n        .register::<Post>()\n        .register::<PostStatus>();\n\n    // Export the registered Rust types as TypeScript definitions.\n    //\n    // `specta_serde::Format` tells Specta to apply serde's wire-format rules,\n    // such as `rename`, `rename_all`, `tag`, `untagged`, and `flatten`.\n    //\n    // You can also use `specta_serde::FormatPhases` to allow types to be\n    // narrowed based on if your serializing or deserializing.\n    let output = Typescript::default()\n        .export(&types, specta_serde::Format)\n        .expect(\"failed to export TypeScript types\");\n\n    println!(\"{output}\");\n}\n"
  },
  {
    "path": "examples/collect/Cargo.toml",
    "content": "[package]\nname = \"example-collect\"\nversion = \"0.0.0\"\nedition = \"2024\"\npublish = false\n\n[dependencies]\nspecta = { path = \"../../specta\", features = [\"derive\", \"collect\"] }\nspecta-typescript = { path = \"../../specta-typescript\" }\nspecta-serde = { path = \"../../specta-serde\" }\n"
  },
  {
    "path": "examples/collect/src/main.rs",
    "content": "#![allow(unused)]\n\nuse specta::Type;\nuse specta_typescript::Typescript;\n\n#[derive(Type)]\npub struct User {\n    id: String,\n    name: String,\n}\n\n#[derive(Type)]\npub struct Post {\n    id: String,\n    author: User,\n    comments: Vec<Comment>,\n}\n\n#[derive(Type)]\npub struct Comment {\n    body: String,\n}\n\n// This type can still derive `Type`, but it is left out of `specta::collect()`.\n#[derive(Type)]\n#[specta(collect = false)]\npub struct InternalMetrics {\n    latency_ms: u64,\n}\n\nfn main() -> Result<(), Box<dyn std::error::Error>> {\n    let output = Typescript::default().export(&specta::collect(), specta_serde::Format)?;\n\n    println!(\"{output}\");\n\n    Ok(())\n}\n"
  },
  {
    "path": "examples/scratchpad/Cargo.toml",
    "content": "[package]\nname = \"example-scratchpad\"\nversion = \"0.0.0\"\nedition = \"2024\"\npublish = false\n\n[dependencies]\nspecta = { path = \"../../specta\", features = [\"derive\"] }\nspecta-typescript = { path = \"../../specta-typescript\" }\nspecta-serde = { path = \"../../specta-serde\" }\nserde = { version = \"1\", features = [\"derive\"] }\n"
  },
  {
    "path": "examples/scratchpad/src/main.rs",
    "content": "//! A playground for quickly reproducing issue.\n#![allow(warnings)]\n\nuse specta::Types;\n\nfn main() {\n    let mut types = Types::default();\n\n    let out = specta_typescript::Typescript::new()\n        .export(&types, specta_serde::PhasesFormat)\n        .unwrap();\n\n    println!(\"{}\", out);\n}\n"
  },
  {
    "path": "specta/Cargo.toml",
    "content": "[package]\nname = \"specta\"\ndescription = \"Easily export your Rust types to other languages\"\nversion = \"2.0.0-rc.24\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\ninclude = [\"/src\", \"/examples\", \"/build.rs\", \"/LICENCE\", \"/README.md\"]\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta/latest/specta\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"typescript\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\nreadme = \"../README.md\"\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n# Run `node ./.github/features.js` to update the docs\n[features]\ndefault = [\"std\"]\n\n#! Core Features\n## Enable support for the Rust standard library. Enabled by default.\nstd = []\n\n## Derive macros\nderive = [\"dep:specta-macros\"]\n\n## Support for collecting up a global type map\ncollect = [\"dep:small_ctor\", \"specta-macros/DO_NOT_USE_collect\"]\n\n#! Features\n## Support for exporting the types of Rust functions.\nfunction = [\"specta-macros?/DO_NOT_USE_function\", \"dep:paste\"]\n\n#! Compatibility\n## Support for [serde-json](https://github.com/serde-rs/json)\nserde_json = [\"dep:serde_json\"]\n## Support for [serde_yaml](https://github.com/dtolnay/serde-yaml)\nserde_yaml = [\"dep:serde_yaml\"]\n## Support for [toml](https://github.com/toml-rs/toml)\ntoml = [\"dep:toml\", \"std\"]\n\n#! External types\n## [uuid](https://docs.rs/uuid) crate\nuuid = [\"dep:uuid\"]\n## [uuid](https://docs.rs/ulid) crate\nulid = [\"dep:ulid\"]\n## [chrono](https://docs.rs/chrono) crate\nchrono = [\"dep:chrono\"]\n## [time](https://docs.rs/time) crate\ntime = [\"dep:time\"]\n# [jiff](https://docs.rs/jiff) crate\njiff = [\"dep:jiff\"]\n## [bigdecimal](https://docs.rs/bigdecimal) crate\nbigdecimal = [\"dep:bigdecimal\"]\n## [rust_decimal](https://docs.rs/rust_decimal) crate\nrust_decimal = [\"dep:rust_decimal\"]\n## [indexmap](https://docs.rs/indexmap) crate\nindexmap = [\"dep:indexmap\"]\n## [ordered-float](https://docs.rs/ordered-float) crate\nordered-float = [\"dep:ordered-float\"]\n## [heapless](https://docs.rs/heapless) crate\nheapless = [\"dep:heapless\"]\n## [semver](https://docs.rs/semver) crate\nsemver = [\"dep:semver\"]\n## [smol_str](https://docs.rs/smol_str) crate\nsmol_str = [\"dep:smol_str\"]\n## [arrayvec](https://docs.rs/arrayvec) crate\narrayvec = [\"dep:arrayvec\"]\n## [smallvec](https://docs.rs/smallvec) crate\nsmallvec = [\"dep:smallvec\"]\n## [ipnetwork](https://docs.rs/ipnetwork) crate\nipnetwork = [\"dep:ipnetwork\"]\n## [mac_address](https://docs.rs/mac_address) crate\nmac_address = [\"dep:mac_address\"]\n## [bit-vec](https://docs.rs/bit-vec) crate\nbit-vec = [\"dep:bit-vec\"]\n## [bson](https://docs.rs/bson) crate\nbson = [\"dep:bson\"]\n## [bytes](https://docs.rs/bytes) crate\nbytes = [\"dep:bytes\"]\n## [uhlc](https://docs.rs/uhlc) crate\nuhlc = [\"dep:uhlc\"]\n## [bytesize](https://docs.rs/bytesize) crate\nbytesize = [\"dep:bytesize\"]\n## [glam](https://docs.rs/glam) crate\nglam = [\"dep:glam\"]\n## [tokio](https://docs.rs/tokio) crate\ntokio = [\"dep:tokio\"]\n## [url](https://docs.rs/url) crate\nurl = [\"dep:url\"]\n## [either](https://docs.rs/either) crate\neither = [\"dep:either\"]\n## [error-stack](https://docs.rs/error-stack) crate\nerror-stack = [\"dep:error-stack\"]\n# [bevy_ecs](https://docs.rs/bevy_ecs) crate\nbevy_ecs = [\"dep:bevy_ecs\"]\n# [bevy_input](https://docs.rs/bevy_input) crate\nbevy_input = [\"dep:bevy_input\", \"dep:bevy_ecs\", \"dep:glam\", \"smol_str\"]\n# [camino](https://docs.rs/camino) crate\ncamino = [\"dep:camino\"]\n## [geojson](https://docs.rs/geojson) crate\ngeojson = [\"dep:geojson\", \"serde_json\"]\n\n[lints]\nworkspace = true\n\n[dependencies]\nspecta-macros = { version = \"=2.0.0-rc.24\", optional = true, path = \"../specta-macros\" }\npaste = { version = \"1\", optional = true }\n\nsmall_ctor = { version = \"0.1.2\", optional = true }\n\n# TODO: To be deprecated\nserde_json = { version = \"1\", optional = true, default-features = false, features = [\"std\"] }\nserde_yaml = { version = \"0.9\", optional = true, default-features = false, features = [] }\ntoml = { version = \"1.1\", optional = true, default-features = false, features = [\"serde\"] }\nulid = { version = \"1\", optional = true, default-features = false, features = [] }\nuuid = { version = \"1\", optional = true, default-features = false, features = [\n] } # TODO: Downgraded for Bevy (argh)\nchrono = { version = \"0.4\", optional = true, default-features = false, features = [\"clock\"] }\ntime = { version = \"0.3\", optional = true, default-features = false, features = [] }\nbigdecimal = { version = \"0.4\", optional = true, default-features = false, features = [] }\nrust_decimal = { version = \"1\", optional = true, default-features = false, features = [] }\nindexmap = { version = \"2\", optional = true, default-features = false, features = [\n  \"std\",\n] } # TODO: Don't require `std`\nordered-float = { version = \">=3, <6\", optional = true, default-features = false }\nheapless = { version = \">=0.7, <0.10\", optional = true, default-features = false, features = [] }\nsemver = { version = \"1\", optional = true, default-features = false, features = [] }\nsmol_str = { version = \"0.3\", optional = true, default-features = false, features = [] }\narrayvec = { version = \">=0.6, <0.8\", optional = true, default-features = false, features = [] }\nsmallvec = { version = \"1\", optional = true, default-features = false, features = [] }\nipnetwork = { version = \"0.21\", optional = true, default-features = false, features = [] }\nmac_address = { version = \"1\", optional = true, default-features = false, features = [] }\nbit-vec = { version = \"0.9\", optional = true, default-features = false, features = [] }\nbson = { version = \"3\", optional = true, default-features = false, features = [\"compat-3-0-0\"] }\nbytes = { version = \"1\", optional = true, default-features = false, features = [] }\nuhlc = { version = \"0.9\", optional = true, default-features = false, features = [] }\nbytesize = { version = \"2\", optional = true, default-features = false, features = [] }\nglam = { version = \"0.32\", optional = true, default-features = false, features = [\"std\"] }\ntokio = { version = \"1\", optional = true, default-features = false, features = [\"sync\"] }\nurl = { version = \"2\", optional = true, default-features = false }\neither = { version = \"1\", optional = true, default-features = false }\nerror-stack = { version = \"0.7\", optional = true, default-features = false }\nbevy_ecs = { version = \"0.18\", optional = true, default-features = false, features = [\"std\"] }\nbevy_input = { version = \"0.18\", optional = true, default-features = false, features = [\n  \"std\",\n  \"bevy_reflect\",\n  \"keyboard\",\n  \"mouse\",\n  \"touch\",\n  \"gestures\",\n  \"gamepad\",\n] }\njiff = { version = \"0.2\", optional = true, default-features = false }\ncamino = { version = \"1\", optional = true, default-features = false }\ngeojson = { version = \"1.0\", optional = true, default-features = false }\n\n[build-dependencies]\nrustc_version = \"0.4.1\"\n\n[dev-dependencies]\nspecta-serde = { path = \"../specta-serde\" }\nspecta-typescript = { path = \"../specta-typescript\" }\n"
  },
  {
    "path": "specta/build.rs",
    "content": "//! Build script for configuring nightly-only cfg flags.\n//!\n//! This build script enables the `is_nightly` cfg when running on a nightly\n//! compiler (or when `RUSTC_BOOTSTRAP` is set) so crate code can conditionally\n//! compile nightly-specific behavior.\n//!\n//! It would be nice if this was built into Cargo 😅\n\nfn main() {\n    let is_nightly = std::env::var(\"RUSTC_BOOTSTRAP\").is_ok()\n        || rustc_version::version_meta()\n            .map(|m| m.channel == rustc_version::Channel::Nightly)\n            .unwrap_or(false);\n\n    if is_nightly {\n        println!(\"cargo:rustc-cfg=is_nightly\");\n    }\n}\n"
  },
  {
    "path": "specta/src/collect.rs",
    "content": "use std::sync::{Mutex, OnceLock, PoisonError};\n\nuse crate::{Type, Types};\n\n// Global type store for collecting custom types to export.\n//\n// We intentionally store functions over a `Types` directly to ensure any internal panics aren't done in CTOR.\n#[allow(clippy::type_complexity)]\nstatic TYPES: OnceLock<Mutex<Vec<fn(&mut Types)>>> = OnceLock::new();\n\n/// Get the global type store containing all automatically collected types.\n///\n/// All types with the [`Type`](macro@crate::Type) macro will automatically be registered here unless they have been explicitly disabled with `#[specta(collect = false)]`.\n///\n/// Note that when enabling the `export` feature, you will not be able to enable the `unsafe_code` lint as [`small_ctor`] (which is used internally) is marked unsafe.\n///\n/// # Example\n///\n/// ```no_run\n/// use specta::Type;\n/// use specta_typescript::Typescript;\n///\n/// #[derive(Type)]\n/// pub struct User {\n///     id: String,\n///     name: String,\n/// }\n///\n/// #[derive(Type)]\n/// pub struct Post {\n///     id: String,\n///     author: User,\n///     comments: Vec<Comment>,\n/// }\n///\n/// #[derive(Type)]\n/// pub struct Comment {\n///     body: String,\n/// }\n///\n/// // This type can still derive `Type`, but it is left out of `specta::collect()`.\n/// #[derive(Type)]\n/// #[specta(collect = false)]\n/// pub struct InternalMetrics {\n///     latency_ms: u64,\n/// }\n///\n/// fn main() -> Result<(), Box<dyn std::error::Error>> {\n///     let output = Typescript::default().export(&specta::collect(), specta_serde::Format)?;\n///\n///     println!(\"{output}\");\n///\n///     Ok(())\n/// }\n/// ```\npub fn collect() -> Types {\n    let types = TYPES\n        .get_or_init(Default::default)\n        .lock()\n        .unwrap_or_else(PoisonError::into_inner);\n\n    let mut map = Types::default();\n    for export in types.iter() {\n        export(&mut map);\n    }\n    map\n}\n\n#[doc(hidden)]\npub mod internal {\n    use super::*;\n\n    // Called within ctor functions to register a type.\n    pub fn register<T: Type>() {\n        TYPES\n            .get_or_init(Default::default)\n            .lock()\n            .unwrap_or_else(PoisonError::into_inner)\n            .push(|types| {\n                // The side-effect of this is registering the type.\n                T::definition(types);\n            });\n    }\n\n    // We expose this for the macros\n    #[cfg(feature = \"collect\")]\n    pub use small_ctor;\n}\n"
  },
  {
    "path": "specta/src/datatype/attributes.rs",
    "content": "use std::{\n    any::Any,\n    borrow::Cow,\n    collections::{HashMap, hash_map::DefaultHasher},\n    fmt,\n    hash::{Hash, Hasher},\n    sync::Arc,\n};\n\ntrait DynAttributeValue: Send + Sync {\n    fn value_any(&self) -> &dyn Any;\n    fn eq_dyn(&self, other: &dyn DynAttributeValue) -> bool;\n    fn hash_dyn(&self, state: &mut dyn Hasher);\n    fn fmt_dyn(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result;\n}\n\nstruct NamedAttributeValue<T>(T);\n\nimpl<T> DynAttributeValue for NamedAttributeValue<T>\nwhere\n    T: Any + Clone + Eq + Hash + fmt::Debug + Send + Sync + 'static,\n{\n    fn value_any(&self) -> &dyn Any {\n        &self.0\n    }\n\n    fn eq_dyn(&self, other: &dyn DynAttributeValue) -> bool {\n        other\n            .value_any()\n            .downcast_ref::<T>()\n            .is_some_and(|other| self.0 == *other)\n    }\n\n    fn hash_dyn(&self, state: &mut dyn Hasher) {\n        let mut hasher = DefaultHasher::new();\n        self.0.hash(&mut hasher);\n        state.write_u64(hasher.finish());\n    }\n\n    fn fmt_dyn(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        self.0.fmt(f)\n    }\n}\n\n/// A named map of type-erased metadata attached to datatype nodes.\n///\n/// `Attributes` is primarily used by advanced consumers that need to inspect\n/// metadata recorded on [`DataType`](super::DataType) nodes at runtime. Each\n/// entry is stored under a string key and can later be retrieved either as a\n/// raw [`Any`] value or by downcasting to the original type.\n///\n/// Stored values must be owned and implement [`Clone`], [`Eq`], [`Hash`], and\n/// [`fmt::Debug`] so attributes remain comparable, hashable, and printable as\n/// part of the surrounding datatype graph.\n///\n#[derive(Default)]\npub struct Attributes(HashMap<Cow<'static, str>, Arc<dyn DynAttributeValue>>);\n\nimpl Clone for Attributes {\n    fn clone(&self) -> Self {\n        Self(\n            self.0\n                .iter()\n                .map(|(key, value)| (key.clone(), value.clone()))\n                .collect(),\n        )\n    }\n}\n\nimpl Attributes {\n    /// Returns the number of stored attribute entries.\n    pub fn len(&self) -> usize {\n        self.0.len()\n    }\n\n    /// Returns `true` when the collection has no entries.\n    pub fn is_empty(&self) -> bool {\n        self.0.is_empty()\n    }\n\n    /// Inserts or replaces an attribute value.\n    ///\n    /// Values are stored in a type-erased form, but they must still implement\n    /// [`Clone`], [`Eq`], [`Hash`], and [`fmt::Debug`] so the containing\n    /// [`Attributes`] remains cloneable, comparable, hashable, and printable.\n    ///\n    pub fn insert<T>(&mut self, key: impl Into<Cow<'static, str>>, value: T)\n    where\n        T: Any + Clone + Eq + Hash + fmt::Debug + Send + Sync + 'static,\n    {\n        self.0\n            .insert(key.into(), Arc::new(NamedAttributeValue(value)));\n    }\n\n    /// Extends `self` with entries from `other`.\n    ///\n    /// If both collections contain the same key, the value from `other`\n    /// replaces the existing entry in `self`.\n    ///\n    pub fn extend(&mut self, other: Self) {\n        self.0.extend(other.0);\n    }\n\n    /// Removes the entry under `key`, returning `true` when an entry was\n    /// present.\n    ///\n    pub fn remove(&mut self, key: &str) -> bool {\n        self.0.remove(key).is_some()\n    }\n\n    /// Returns `true` if an attribute entry is present for `key`.\n    pub fn contains_key(&self, key: &str) -> bool {\n        self.0.contains_key(key)\n    }\n\n    /// Returns the raw type-erased value for a named attribute.\n    ///\n    /// This is useful when the expected type is not known until runtime.\n    /// Prefer [`Attributes::get_named_as`] when you know the concrete type.\n    ///\n    pub fn get_named(&self, key: &str) -> Option<&dyn Any> {\n        self.0.get(key).map(|value| value.value_any())\n    }\n\n    /// Returns a typed reference to the named attribute value.\n    ///\n    /// Returns `None` when the key is missing or when the stored value has a\n    /// different type than `T`.\n    ///\n    pub fn get_named_as<T: Any + 'static>(&self, key: &str) -> Option<&T> {\n        self.0\n            .get(key)\n            .and_then(|value| value.value_any().downcast_ref::<T>())\n    }\n}\n\nimpl PartialEq for Attributes {\n    fn eq(&self, other: &Self) -> bool {\n        self.0.len() == other.0.len()\n            && self.0.iter().all(|(key, value)| {\n                other\n                    .0\n                    .get(key)\n                    .is_some_and(|other| value.eq_dyn(other.as_ref()))\n            })\n    }\n}\n\nimpl Eq for Attributes {}\n\nimpl Hash for Attributes {\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        let mut entries = self\n            .0\n            .iter()\n            .map(|(key, value)| {\n                let mut hasher = DefaultHasher::new();\n                key.hash(&mut hasher);\n                value.hash_dyn(&mut hasher);\n                hasher.finish()\n            })\n            .collect::<Vec<_>>();\n\n        entries.sort_unstable();\n\n        self.0.len().hash(state);\n        entries.hash(state);\n    }\n}\n\nimpl fmt::Debug for Attributes {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        let mut entries = self.0.iter().collect::<Vec<_>>();\n        entries.sort_by(|(left, _), (right, _)| left.cmp(right));\n\n        let mut map = f.debug_map();\n        for (key, value) in entries {\n            map.entry(key, &fmt::from_fn(|f| value.fmt_dyn(f)));\n        }\n        map.finish()\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/enum.rs",
    "content": "use std::borrow::Cow;\n\nuse crate::datatype::Field;\n\nuse super::{Attributes, DataType, Deprecated, Fields, NamedFields, UnnamedFields};\n\n/// Runtime representation of a Rust [`enum`](https://doc.rust-lang.org/std/keyword.enum.html).\n///\n/// Enums are configured with a set of variants, each with a name and a type.\n/// The variants can be either unit variants (no fields), tuple variants (fields in a tuple), or struct variants (fields in a struct).\n///\n/// Each variant has a name and one of the layouts described by [`Fields`].\n/// Format integrations may use [`Enum::attributes`] to record representation\n/// metadata, such as Serde's enum representation attributes.\n#[derive(Default, Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct Enum {\n    /// Named variants in source order.\n    pub variants: Vec<(Cow<'static, str>, Variant)>,\n    /// Macro attributes applied to the enum container.\n    pub attributes: Attributes,\n}\n\nimpl From<Enum> for DataType {\n    fn from(t: Enum) -> Self {\n        Self::Enum(t)\n    }\n}\n\n/// Runtime representation of a single enum variant.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct Variant {\n    /// Whether the variant was skipped with an attribute such as\n    /// `#[serde(skip)]` or `#[specta(skip)]`.\n    ///\n    /// You might think, well why not apply this in the macro and just not emit the variant?\n    /// Well in Serde `A(String)` and `A(#[serde(skip)] (), String)` export as different Typescript types so the exporter needs runtime knowledge of this.\n    pub skip: bool,\n    /// Documentation comments for the variant.\n    pub docs: Cow<'static, str>,\n    /// Deprecated metadata for the variant.\n    pub deprecated: Option<Deprecated>,\n    /// The type of the variant.\n    pub fields: Fields,\n    /// Runtime attributes for this variant.\n    pub attributes: Attributes,\n}\n\nimpl Variant {\n    /// Constructs a unit enum variant.\n    pub fn unit() -> Self {\n        Self {\n            skip: false,\n            docs: \"\".into(),\n            deprecated: None,\n            fields: Fields::Unit,\n            attributes: Attributes::default(),\n        }\n    }\n\n    /// Starts building a struct enum variant with named fields.\n    pub fn named() -> VariantBuilder<NamedFields> {\n        VariantBuilder {\n            v: Self {\n                skip: false,\n                docs: \"\".into(),\n                deprecated: None,\n                fields: Fields::Named(NamedFields {\n                    fields: Default::default(),\n                }),\n                attributes: Attributes::default(),\n            },\n            variant: NamedFields { fields: vec![] },\n        }\n    }\n\n    /// Starts building a tuple enum variant with unnamed fields.\n    pub fn unnamed() -> VariantBuilder<UnnamedFields> {\n        VariantBuilder {\n            v: Self {\n                skip: false,\n                docs: \"\".into(),\n                deprecated: None,\n                fields: Fields::Unnamed(UnnamedFields {\n                    fields: Default::default(),\n                }),\n                attributes: Attributes::default(),\n            },\n            variant: UnnamedFields {\n                fields: Default::default(),\n            },\n        }\n    }\n}\n\n/// Builder for constructing [`Variant`] values.\n#[derive(Debug, Clone)]\npub struct VariantBuilder<V = ()> {\n    pub(crate) v: Variant,\n    pub(crate) variant: V,\n}\n\nimpl<T> VariantBuilder<T> {\n    /// Marks the variant as skipped.\n    pub fn skip(mut self) -> Self {\n        self.v.skip = true;\n        self\n    }\n\n    /// Sets documentation for the variant.\n    pub fn docs(mut self, docs: Cow<'static, str>) -> Self {\n        self.v.docs = docs;\n        self\n    }\n\n    /// Sets deprecation metadata for the variant.\n    pub fn deprecated(mut self, reason: Deprecated) -> Self {\n        self.v.deprecated = Some(reason);\n        self\n    }\n\n    /// Sets runtime attributes on the variant.\n    pub fn attributes(mut self, attributes: Attributes) -> Self {\n        self.v.attributes = attributes;\n        self\n    }\n\n    /// Sets runtime attributes on the variant in-place.\n    pub fn attributes_mut(&mut self, attributes: Attributes) {\n        self.v.attributes = attributes;\n    }\n}\n\nimpl VariantBuilder<UnnamedFields> {\n    /// Adds an unnamed field to the variant.\n    pub fn field(mut self, field: Field) -> Self {\n        self.variant.fields.push(field);\n        self\n    }\n\n    /// Adds an unnamed field to the variant and returns the updated builder.\n    pub fn field_mut(mut self, field: Field) -> Self {\n        self.variant.fields.push(field);\n        self\n    }\n\n    /// Finalizes the unnamed variant builder into a [`Variant`].\n    pub fn build(mut self) -> Variant {\n        self.v.fields = Fields::Unnamed(self.variant);\n        self.v\n    }\n}\n\nimpl VariantBuilder<NamedFields> {\n    /// Adds a named field to the variant.\n    pub fn field(mut self, name: impl Into<Cow<'static, str>>, field: Field) -> Self {\n        self.variant.fields.push((name.into(), field));\n        self\n    }\n\n    /// Adds a named field to the variant and returns the updated builder.\n    pub fn field_mut(mut self, name: impl Into<Cow<'static, str>>, field: Field) -> Self {\n        self.variant.fields.push((name.into(), field));\n        self\n    }\n\n    /// Finalizes the named variant builder into a [`Variant`].\n    pub fn build(mut self) -> Variant {\n        self.v.fields = Fields::Named(self.variant);\n        self.v\n    }\n}\n\nimpl From<VariantBuilder<NamedFields>> for Variant {\n    fn from(val: VariantBuilder<NamedFields>) -> Self {\n        val.build()\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/fields.rs",
    "content": "//! Field types are used by both enums and structs.\n\nuse crate::datatype::Struct;\n\nuse super::{Attributes, DataType, Deprecated};\nuse std::borrow::Cow;\n\n/// Field layout for a struct or enum variant.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub enum Fields {\n    /// Unit struct.\n    ///\n    /// Represented in Rust as `pub struct Unit;` and in TypeScript as `null`.\n    Unit,\n    /// Struct with unnamed fields.\n    ///\n    /// Represented in Rust as `pub struct Unit();` and in TypeScript as `[]`.\n    Unnamed(UnnamedFields),\n    /// Struct with named fields.\n    ///\n    /// Represented in Rust as `pub struct Unit {}` and in TypeScript as `{}`.\n    Named(NamedFields),\n}\n\n/// Metadata for a struct field or enum variant field.\n#[derive(Default, Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct Field {\n    /// Whether the field was marked optional, for example with\n    /// `#[specta(optional)]`.\n    pub optional: bool,\n    /// Deprecated attribute for the field.\n    pub deprecated: Option<Deprecated>,\n    /// Documentation comments for the field.\n    pub docs: Cow<'static, str>,\n    /// Runtime attributes for this field.\n    pub attributes: Attributes,\n    /// Type for the field.\n    ///\n    /// This is `None` when the field was skipped with an attribute such as\n    /// `#[serde(skip)]` or `#[specta(skip)]`. Exporters should preserve enough\n    /// information to distinguish skipped fields from absent fields because some\n    /// serialization formats still let skipped fields affect layout.\n    ///\n    /// You might think, well why not apply this in the macro and just not emit the variant?\n    /// Well in Serde `A(String)` and `A(#[serde(skip)] (), String)` export as different Typescript types so the exporter needs runtime knowledge of this.\n    pub ty: Option<DataType>,\n}\n\nimpl Field {\n    /// Constructs a new non-optional field with the given type.\n    ///\n    /// Use [`Field::default`] to construct skipped-field metadata where `ty` is\n    /// initially `None`.\n    pub fn new(ty: DataType) -> Self {\n        Field {\n            optional: false,\n            deprecated: None,\n            docs: \"\".into(),\n            ty: Some(ty),\n            attributes: Attributes::default(),\n        }\n    }\n}\n\n/// Fields for an unnamed tuple struct or tuple enum variant.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct UnnamedFields {\n    /// Field metadata in source order.\n    pub fields: Vec<Field>,\n}\n\n/// Fields for a named struct or struct enum variant.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct NamedFields {\n    /// Field names and metadata in source order.\n    pub fields: Vec<(Cow<'static, str>, Field)>,\n}\n\n#[derive(Debug, Clone)]\n/// Builder for constructing [`DataType::Struct`] values.\n///\n/// The type parameter tracks whether the builder is currently collecting named\n/// or unnamed fields.\npub struct StructBuilder<F = ()> {\n    pub(crate) fields: F,\n}\n\nimpl StructBuilder<NamedFields> {\n    /// Adds a named field and returns the updated builder.\n    pub fn field(mut self, name: impl Into<Cow<'static, str>>, field: Field) -> Self {\n        self.fields.fields.push((name.into(), field));\n        self\n    }\n\n    /// Adds a named field in-place.\n    pub fn field_mut(&mut self, name: impl Into<Cow<'static, str>>, field: Field) {\n        self.fields.fields.push((name.into(), field));\n    }\n\n    /// Finalizes this builder into a [`DataType::Struct`] with named fields.\n    pub fn build(self) -> DataType {\n        DataType::Struct(Struct {\n            fields: Fields::Named(self.fields),\n            attributes: Default::default(),\n        })\n    }\n}\n\nimpl StructBuilder<UnnamedFields> {\n    /// Adds an unnamed field and returns the updated builder.\n    pub fn field(mut self, field: Field) -> Self {\n        self.fields.fields.push(field);\n        self\n    }\n\n    /// Adds an unnamed field in-place.\n    pub fn field_mut(&mut self, field: Field) {\n        self.fields.fields.push(field);\n    }\n\n    /// Finalizes this builder into a [`DataType::Struct`] with unnamed fields.\n    pub fn build(self) -> DataType {\n        DataType::Struct(Struct {\n            fields: Fields::Unnamed(self.fields),\n            attributes: Default::default(),\n        })\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/function.rs",
    "content": "use std::borrow::Cow;\n\nuse super::{DataType, Deprecated};\n\n/// Runtime type information for a function annotated with `#[specta]`.\n///\n/// Values are produced by [`fn_datatype!`](crate::function::fn_datatype) and\n/// [`collect_functions!`](crate::function::collect_functions). Function metadata\n/// is intentionally separate from [`Types`](crate::Types): the function's\n/// argument and result datatypes reference entries collected into the `Types`\n/// value passed to those macros.\n#[derive(Debug, Clone)]\n#[non_exhaustive]\npub struct Function {\n    /// Whether the function is async.\n    pub asyncness: bool,\n    /// The function's name.\n    pub name: Cow<'static, str>,\n    /// The name and type of each of the function's arguments.\n    pub args: Vec<(Cow<'static, str>, DataType)>,\n    /// The return type of the function.\n    pub result: Option<DataType>,\n    /// The function's documentation. Detects both `///` and `#[doc = ...]` style documentation.\n    pub docs: Cow<'static, str>,\n    /// The deprecated status of the function.\n    pub deprecated: Option<Deprecated>,\n}\n\nimpl Function {\n    /// Whether the function is async.\n    pub fn asyncness(&self) -> bool {\n        self.asyncness\n    }\n\n    /// The function's name.\n    pub fn name(&self) -> &str {\n        &self.name\n    }\n\n    /// The name and type of each of the function's arguments.\n    pub fn args(&self) -> &[(Cow<'static, str>, DataType)] {\n        &self.args\n    }\n\n    /// The return type of the function.\n    pub fn result(&self) -> Option<&DataType> {\n        self.result.as_ref()\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/generic.rs",
    "content": "use std::borrow::Cow;\n\nuse crate::datatype::DataType;\n\n/// Reference to a named generic parameter.\n///\n/// Exporters usually render this as the generic name, such as `T`.\n///\n/// # Invariants\n///\n/// A `Generic` should only appear inside the canonical `ty` field of the\n/// [`NamedDataType`](crate::datatype::NamedDataType) that declares it. Ordinary\n/// [`Type::definition`](crate::Type::definition) results should use concrete\n/// datatypes or references with instantiated generics.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub struct Generic(Cow<'static, str>);\n\nimpl Generic {\n    /// Builds a new generic parameter reference with the given source-level name.\n    ///\n    /// The same name must appear in the parent [`GenericDefinition`] list.\n    pub const fn new(name: Cow<'static, str>) -> Self {\n        Self(name)\n    }\n\n    /// The source-level name of this generic parameter.\n    pub fn name(&self) -> &Cow<'static, str> {\n        &self.0\n    }\n\n    /// Get a stable reference identifier for this generic parameter.\n    pub fn reference(&self) -> Self {\n        self.clone()\n    }\n}\n\nimpl From<Generic> for DataType {\n    fn from(v: Generic) -> Self {\n        DataType::Generic(v)\n    }\n}\n\n/// Metadata describing a generic parameter declared by a\n/// [`NamedDataType`](crate::datatype::NamedDataType).\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct GenericDefinition {\n    /// The source-level name of the generic parameter.\n    pub name: Cow<'static, str>,\n    /// An optional default type for the generic parameter.\n    pub default: Option<DataType>,\n}\n\nimpl GenericDefinition {\n    /// Constructs metadata for a generic parameter.\n    pub const fn new(name: Cow<'static, str>, default: Option<DataType>) -> Self {\n        Self { name, default }\n    }\n\n    /// Get a stable reference identifier for this generic parameter.\n    pub fn reference(&self) -> Generic {\n        Generic::new(self.name.clone())\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/list.rs",
    "content": "use super::DataType;\n\n/// Sequential collection type, such as [`Vec`](std::vec::Vec), arrays, slices,\n/// or set-like collections.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct List {\n    /// Type of each element in the list.\n    pub ty: Box<DataType>,\n    /// Fixed number of elements when known.\n    ///\n    /// `None` represents a variable-length collection.\n    pub length: Option<usize>,\n    /// Whether elements are expected to be unique, as with set-like types.\n    pub unique: bool,\n}\n\nimpl List {\n    /// Create a new list of a given type.\n    pub fn new(ty: DataType) -> Self {\n        Self {\n            ty: Box::new(ty),\n            length: None,\n            unique: false,\n        }\n    }\n}\n\nimpl From<List> for DataType {\n    fn from(t: List) -> Self {\n        Self::List(t)\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/literal.rs",
    "content": "//! This works but isn't being shipped for now as we don't need it for const generics anymore.\n//! Also it suffers from the following concerns:\n//!  - For a floating point number if it's a `NaN` or `Infinity` or `-Infinity` we should yield an error in the Typescript exporter as we can't export it to a Typescript type.\n//!  - What do we do about bigint primitives. Mainly Tauri Specta/TauRPC need to be able to deal with this somehow?\n//!\n\nuse std::{\n    any::Any,\n    borrow::Cow,\n    fmt,\n    hash::{self, Hash},\n    sync::Arc,\n};\n\nuse crate::{\n    Type, Types,\n    datatype::{DataType, Reference},\n};\n\n/// A type-erased literal value stored inside an opaque [`Reference`].\n#[derive(Clone)]\npub struct Literal(Arc<dyn LiteralType>);\n\nimpl Literal {\n    /// Construct a literal [`DataType`] from a concrete value.\n    ///\n    /// T can be any of [`i8`], [`i16`], [`i32`], [`i64`], [`i128`], [`isize`], [`u8`], [`u16`], [`u32`], [`u64`], [`u128`], [`usize`], [`f32`], [`f64`], [`bool`], [`char`], [`&'static str`], [`String`], [`Cow<'static, str>`].\n    ///\n    /// On nightly, [`f16`] and [`f128`] are also supported.\n    pub fn new<T: LiteralType>(value: T) -> DataType {\n        DataType::Reference(Reference::opaque(Literal::from(value)))\n    }\n\n    /// Returns the underlying datatype represented by this literal value.\n    pub fn definition(&self, types: &mut Types) -> DataType {\n        self.0.definition(types)\n    }\n\n    /// Attempt to downcast the stored literal to a concrete type.\n    pub fn downcast_ref<T: 'static>(&self) -> Option<&T> {\n        self.0.as_any().downcast_ref::<T>()\n    }\n}\n\n/// Trait used by type-erased literal values.\n///\n/// Sealed so we can add implementations in minor releases\npub trait LiteralType: Any + Send + Sync + 'static {\n    /// Returns the underlying datatype represented by this literal value.\n    fn definition(&self, types: &mut Types) -> DataType;\n\n    fn eq_dyn(&self, other: &dyn LiteralType) -> bool;\n\n    fn hash_dyn(&self, state: &mut dyn hash::Hasher);\n\n    fn fmt_dyn(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result;\n\n    fn as_any(&self) -> &dyn Any;\n}\n\nimpl<T: LiteralType> From<T> for Literal {\n    fn from(value: T) -> Self {\n        Self(Arc::new(value))\n    }\n}\n\nimpl fmt::Debug for Literal {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        self.0.fmt_dyn(f)\n    }\n}\n\nimpl PartialEq for Literal {\n    fn eq(&self, other: &Self) -> bool {\n        self.0.eq_dyn(other.0.as_ref())\n    }\n}\n\nimpl Eq for Literal {}\n\nimpl hash::Hash for Literal {\n    fn hash<H: hash::Hasher>(&self, state: &mut H) {\n        self.0.hash_dyn(state)\n    }\n}\n\nmacro_rules! impl_literal_type {\n    ($($ty:ty),+ $(,)?) => {\n        $(\n            impl LiteralType for $ty {\n                fn definition(&self, types: &mut Types) -> DataType {\n                    <$ty as Type>::definition(types)\n                }\n\n                fn eq_dyn(&self, other: &dyn LiteralType) -> bool {\n                    other.as_any().downcast_ref::<Self>() == Some(self)\n                }\n\n                fn hash_dyn(&self, mut state: &mut dyn hash::Hasher) {\n                    Hash::hash(self, &mut state);\n                }\n\n                fn fmt_dyn(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n                    fmt::Debug::fmt(self, f)\n                }\n\n                fn as_any(&self) -> &dyn Any {\n                    self\n                }\n            }\n        )+\n    };\n}\n\nimpl_literal_type!(\n    i8,\n    i16,\n    i32,\n    i64,\n    i128,\n    isize,\n    u8,\n    u16,\n    u32,\n    u64,\n    u128,\n    usize,\n    bool,\n    char,\n    &'static str,\n    String,\n    Cow<'static, str>,\n);\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\nenum FloatKey<Bits> {\n    NegInfinity,\n    NegZero,\n    Finite(Bits),\n    Infinity,\n    NaN,\n}\n\ntrait FloatLiteral: Copy + PartialEq + Type + fmt::Debug + Send + Sync + 'static {\n    type Bits: Copy + Eq + Hash;\n\n    const INFINITY: Self;\n    const NEG_INFINITY: Self;\n    const NEG_ZERO_BITS: Self::Bits;\n\n    fn is_nan(self) -> bool;\n    fn is_negative_zero(self) -> bool;\n    fn to_bits(self) -> Self::Bits;\n}\n\nimpl<T: FloatLiteral> From<T> for FloatKey<T::Bits> {\n    fn from(value: T) -> Self {\n        if value.is_nan() {\n            Self::NaN\n        } else if value == T::INFINITY {\n            Self::Infinity\n        } else if value == T::NEG_INFINITY {\n            Self::NegInfinity\n        } else if value.is_negative_zero() {\n            Self::NegZero\n        } else {\n            Self::Finite(value.to_bits())\n        }\n    }\n}\n\nmacro_rules! impl_float_literal {\n    ($ty:ty, $bits:ty) => {\n        impl FloatLiteral for $ty {\n            type Bits = $bits;\n\n            const INFINITY: Self = <$ty>::INFINITY;\n            const NEG_INFINITY: Self = <$ty>::NEG_INFINITY;\n            const NEG_ZERO_BITS: Self::Bits = (-0.0 as $ty).to_bits();\n\n            fn is_nan(self) -> bool {\n                self.is_nan()\n            }\n\n            fn is_negative_zero(self) -> bool {\n                self.to_bits() == Self::NEG_ZERO_BITS\n            }\n\n            fn to_bits(self) -> Self::Bits {\n                self.to_bits()\n            }\n        }\n\n        impl LiteralType for $ty {\n            fn definition(&self, types: &mut Types) -> DataType {\n                <$ty as Type>::definition(types)\n            }\n\n            fn eq_dyn(&self, other: &dyn LiteralType) -> bool {\n                other\n                    .as_any()\n                    .downcast_ref::<Self>()\n                    .is_some_and(|other| FloatKey::from(*self) == FloatKey::from(*other))\n            }\n\n            fn hash_dyn(&self, mut state: &mut dyn hash::Hasher) {\n                FloatKey::from(*self).hash(&mut state);\n            }\n\n            fn fmt_dyn(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n                fmt::Debug::fmt(self, f)\n            }\n\n            fn as_any(&self) -> &dyn Any {\n                self\n            }\n        }\n    };\n}\n\nimpl_float_literal!(f32, u32);\nimpl_float_literal!(f64, u64);\n\n#[cfg(is_nightly)]\nimpl_float_literal!(f16, u16);\n\n#[cfg(is_nightly)]\nimpl_float_literal!(f128, u128);\n"
  },
  {
    "path": "specta/src/datatype/map.rs",
    "content": "use super::DataType;\n\n/// Key-value collection type, such as [`HashMap`](std::collections::HashMap) or\n/// another map-like container.\n///\n/// The first datatype is the key type and the second datatype is the value type.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub struct Map(Box<(DataType, DataType)>);\n\nimpl Map {\n    /// Create a new map with the given key and value types.\n    pub fn new(key_ty: DataType, value_ty: DataType) -> Self {\n        Self(Box::new((key_ty, value_ty)))\n    }\n\n    /// The type of the map keys.\n    pub fn key_ty(&self) -> &DataType {\n        &self.0.0\n    }\n\n    /// Get a mutable reference to the type of the map keys.\n    pub fn key_ty_mut(&mut self) -> &mut DataType {\n        &mut self.0.0\n    }\n\n    /// Set the type of the map keys.\n    pub fn set_key_ty(&mut self, key_ty: DataType) {\n        self.0.0 = key_ty;\n    }\n\n    /// The type of the map values.\n    pub fn value_ty(&self) -> &DataType {\n        &self.0.1\n    }\n\n    /// Get a mutable reference to the type of the map values.\n    pub fn value_ty_mut(&mut self) -> &mut DataType {\n        &mut self.0.1\n    }\n\n    /// Set the type of the map values.\n    pub fn set_value_ty(&mut self, value_ty: DataType) {\n        self.0.1 = value_ty;\n    }\n}\n\nimpl From<Map> for DataType {\n    fn from(t: Map) -> Self {\n        Self::Map(t)\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/named.rs",
    "content": "use std::{\n    borrow::Cow,\n    hash::{DefaultHasher, Hash, Hasher},\n    mem,\n    panic::{self, AssertUnwindSafe, Location},\n    ptr,\n    sync::Arc,\n};\n\nuse crate::{\n    Types,\n    datatype::{\n        DataType, Generic, NamedReference, NamedReferenceType, Reference,\n        generic::GenericDefinition, reference::NamedId,\n    },\n};\n\n/// Resolves any named types created by `func` as inline references.\n/// This is emitted when `#[specta(inline)]` is used on a field so the inner fields `Type` implementation knows to inline.\npub fn inline<R>(types: &mut Types, func: impl FnOnce(&mut Types) -> R) -> R {\n    let prev = mem::replace(&mut types.should_inline, true);\n    let result = panic::catch_unwind(AssertUnwindSafe(|| func(types)));\n    types.should_inline = prev;\n    match result {\n        Ok(result) => result,\n        Err(payload) => panic::resume_unwind(payload),\n    }\n}\n\n/// Named datatype with its own export identity.\n///\n/// Exporters commonly render these as top-level declarations, such as\n/// `export type MyType = ...` in TypeScript. Other datatypes refer back to a\n/// named datatype through [`Reference::Named`].\n///\n/// # Invariants\n///\n/// The `id` is the stable identity used by [`Types`] and [`NamedReference`]. The\n/// human-readable `name` alone is not guaranteed to be globally unique.\n#[derive(Debug, Clone, PartialEq, Eq)]\n#[non_exhaustive]\npub struct NamedDataType {\n    /// Stable identity for resolving references to this datatype.\n    pub(crate) id: NamedId,\n    /// Exported type name.\n    pub name: Cow<'static, str>,\n    /// Documentation comments attached to the source type.\n    pub docs: Cow<'static, str>,\n    /// Deprecation metadata attached to the source type.\n    pub deprecated: Option<Deprecated>,\n    /// Rust module path where the source type was defined.\n    pub module_path: Cow<'static, str>,\n    /// Source location where this named datatype was created.\n    pub location: Location<'static>,\n    /// Generic parameters declared by this named datatype.\n    pub generics: Cow<'static, [GenericDefinition]>,\n    /// The generalised datatype of this specific named data type.\n    /// This is what will be used for creating `export Type = ...;` statements.\n    ///\n    /// This will be `None` for types which are container inlined as they aren't exported.\n    pub ty: Option<DataType>,\n}\n\nimpl NamedDataType {\n    /// Constructs a new named datatype and register it into the [`Types`] collection.\n    #[track_caller]\n    pub fn new(\n        name: impl Into<Cow<'static, str>>,\n        types: &mut Types,\n        build: impl FnOnce(&mut Types, &mut NamedDataType),\n    ) -> Self {\n        let location = Location::caller();\n        let mut ndt = Self {\n            id: NamedId::Dynamic(Arc::new(())),\n            name: name.into(),\n            docs: Cow::Borrowed(\"\"),\n            deprecated: None,\n            module_path: file_path_to_module_path(location.file())\n                .map(Into::into)\n                .unwrap_or(Cow::Borrowed(\"virtual\")),\n            location: location.to_owned(),\n            generics: Cow::Borrowed(&[]),\n            ty: None,\n        };\n        build(types, &mut ndt);\n        types.types.insert(ndt.id.clone(), Some(ndt.clone()));\n        types.len += 1;\n        ndt\n    }\n\n    /// Initializes a named type using a static sentinel as its identity.\n    ///\n    /// This is used by `#[derive(Type)]` and the built-in `Type` implementation macros and must be used carefully.\n    ///\n    /// <div class=\"warning\">\n    ///\n    /// **WARNING:** Do not call this outside of `specta` as its signature and behavior may change in minor releases!!!!\n    ///\n    /// </div>\n    ///\n    /// This registers the canonical [`NamedDataType`] for `sentinel` at most once, then returns a\n    /// use-site [`Reference`]. During first registration, `None` is inserted into [`Types`] before\n    /// `build_ndt` runs so recursive named lookups can observe that the type is already being\n    /// resolved instead of re-entering `build_ndt` (which would stack overflow).\n    ///\n    /// The returned reference depends on the current inline context:\n    ///\n    /// - When not inlining, this returns [`NamedReferenceType::Reference`] with\n    ///   `instantiation_generics` as the concrete generic arguments for this use site.\n    /// - When inlining, this calls `build_ty` and returns [`NamedReferenceType::Inline`] containing\n    ///   the resulting datatype.\n    /// - If inline expansion recursively reaches the same sentinel and generic arguments, this\n    ///   returns [`NamedReferenceType::Recursive`] so exporters can avoid infinite expansion.\n    ///\n    /// `has_const_param` only affects the temporary resolution context used while `build_ndt`\n    /// builds the canonical named type. That context controls implementations such as fixed-size\n    /// arrays, so they intentionally don't become part of the global type identity\n    /// (We don't want one call-sites const generic in the shared datatype on the `NamedDataType`).\n    ///\n    /// `passthrough` is for wrapper/container types whose own definition is inline but whose inner\n    /// type should only see the caller's inline context. When passthrough expansion recursively\n    /// reaches the same wrapper, it clears `Types::should_inline` before calling `build_ty` so the\n    /// inner named type can break the cycle with a reference.\n    ///\n    /// `build_ndt` fills metadata and, for exported named types, `NamedDataType::ty`. `build_ty`\n    /// builds the datatype used by inline references. If `build_ndt` panics, this removes the\n    /// placeholder entry and restores the previous resolution context before resuming the panic.\n    #[doc(hidden)]\n    #[track_caller]\n    pub fn init_with_sentinel(\n        sentinel: &'static str,\n        instantiation_generics: &[(Generic, DataType)],\n        has_const_param: bool,\n        passthrough: bool,\n        types: &mut Types,\n        build_ndt: fn(&mut Types, &mut NamedDataType),\n        mut build_ty: fn(&mut Types) -> DataType,\n    ) -> Reference {\n        let id = NamedId::Static(sentinel);\n        let location = Location::caller().to_owned();\n        let caller_inline = types.should_inline;\n        let mut inline = caller_inline || passthrough;\n\n        // If we have never encountered this type, register it to type map\n        if !types.types.contains_key(&id) {\n            let mut ndt = NamedDataType {\n                id: id.clone(),\n                location,\n                // `build_ndt` will just override all of this.\n                generics: Cow::Borrowed(&[]),\n                ty: None,\n                name: Cow::Borrowed(\"\"),\n                docs: Cow::Borrowed(\"\"),\n                deprecated: None,\n                module_path: Cow::Borrowed(\"\"),\n            };\n\n            types.types.insert(id.clone(), None);\n\n            let prev_inline = mem::replace(&mut types.should_inline, false);\n            let prev_has_const_params = mem::replace(&mut types.has_const_params, has_const_param);\n\n            let result = panic::catch_unwind(AssertUnwindSafe(|| build_ndt(types, &mut ndt)));\n            types.should_inline = prev_inline;\n            types.has_const_params = prev_has_const_params;\n            if let Err(payload) = result {\n                if types.types.contains_key(&id) {\n                    types.types.remove(&id);\n                }\n                panic::resume_unwind(payload);\n            };\n\n            // We patch the Tauri `Type` implementation.\n            let is_tauri_type =\n                ndt.name == \"TAURI_CHANNEL\" && ndt.module_path.starts_with(\"tauri::\");\n            if is_tauri_type {\n                ndt.ty = None;\n                inline = true;\n                build_ty = |_| {\n                    unreachable!(\"Specta `build_ty` shouldn't be callable with `tauri::Channel`\")\n                }\n            }\n\n            types.types.insert(id.clone(), Some(ndt));\n            types.len += 1;\n\n            // We patch the Tauri `Type` implementation.\n            if is_tauri_type {\n                return Reference::Named(NamedReference {\n                    id,\n                    inner: NamedReferenceType::Reference {\n                        generics: instantiation_generics.to_owned(),\n                    },\n                });\n            }\n        }\n\n        if inline {\n            let hash = {\n                let mut h = DefaultHasher::new();\n                sentinel.hash(&mut h);\n                ptr::hash(sentinel, &mut h);\n                for (generic_r, generic) in instantiation_generics {\n                    generic_r.hash(&mut h);\n                    generic.hash(&mut h);\n                }\n                h.finish()\n            };\n\n            if types.stack.contains(&hash) {\n                // For container inline types we wanna passthrough instead of rejecting on the container.\n                if passthrough {\n                    let prev_inline = mem::replace(&mut types.should_inline, false);\n                    let result = panic::catch_unwind(AssertUnwindSafe(|| build_ty(types)));\n                    types.should_inline = prev_inline;\n\n                    match result {\n                        Ok(DataType::Reference(reference)) => return reference,\n                        Ok(_) => {}\n                        Err(payload) => panic::resume_unwind(payload),\n                    }\n                }\n\n                return Reference::Named(NamedReference {\n                    id,\n                    inner: NamedReferenceType::Recursive,\n                });\n            }\n\n            // Say for `Box<T>` if we put `#[specta(inline)]` on it we will,\n            // naively inline the `Box` instead of `T`.\n            //\n            // \"wrapper\" types enable this to properly to passthrough inline to the inner type's resolution.\n            let child_inline = passthrough && caller_inline;\n            let prev_inline = (types.should_inline != child_inline)\n                .then(|| mem::replace(&mut types.should_inline, child_inline));\n            types.stack.push(hash);\n            let result = panic::catch_unwind(AssertUnwindSafe(|| build_ty(types)));\n            if let Some(prev_inline) = prev_inline {\n                types.should_inline = prev_inline;\n            };\n            types.stack.pop();\n            let dt = match result {\n                Ok(DataType::Reference(reference)) if passthrough && !caller_inline => {\n                    return reference;\n                }\n                Ok(dt) => Box::new(dt),\n                Err(payload) => panic::resume_unwind(payload),\n            };\n\n            Reference::Named(NamedReference {\n                id,\n                inner: NamedReferenceType::Inline { dt },\n            })\n        } else {\n            Reference::Named(NamedReference {\n                id,\n                inner: NamedReferenceType::Reference {\n                    generics: instantiation_generics.to_owned(),\n                },\n            })\n        }\n    }\n\n    /// Constructs a [`Reference`] to this named datatype.\n    /// The reference returned by this will error in the language exporter if `Self.ty` is `None` as the type can't generate a named export.\n    pub fn reference(&self, generics: Vec<(Generic, DataType)>) -> Reference {\n        Reference::Named(NamedReference {\n            id: self.id.clone(),\n            inner: NamedReferenceType::Reference { generics },\n        })\n    }\n}\n\n/// Runtime representation of Rust's `#[deprecated]` metadata.\n#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct Deprecated {\n    /// Optional deprecation note or replacement guidance.\n    pub note: Option<Cow<'static, str>>,\n    /// Optional version where the item became deprecated.\n    pub since: Option<Cow<'static, str>>,\n}\n\nimpl Deprecated {\n    /// Constructs deprecation metadata without details.\n    ///\n    /// Corresponds to `#[deprecated]`.\n    pub const fn new() -> Self {\n        Self {\n            note: None,\n            since: None,\n        }\n    }\n\n    /// Constructs deprecation metadata with a note.\n    ///\n    /// Corresponds to `#[deprecated = \"Use something else\"]`.\n    pub fn with_note(note: Cow<'static, str>) -> Self {\n        Self {\n            note: Some(note),\n            since: None,\n        }\n    }\n\n    /// Constructs deprecation metadata with a note and optional `since` version.\n    ///\n    /// Corresponds to `#[deprecated(since = \"1.0.0\", note = \"Use something else\")]`.\n    pub fn with_since_note(since: Option<Cow<'static, str>>, note: Cow<'static, str>) -> Self {\n        Self {\n            note: Some(note),\n            since,\n        }\n    }\n}\n\nfn file_path_to_module_path(file_path: &str) -> Option<String> {\n    let normalized = file_path.replace('\\\\', \"/\");\n\n    // Try different prefixes\n    let (prefix, path) = if let Some(p) = normalized.strip_prefix(\"src/\") {\n        (\"crate\", p)\n    } else if let Some(p) = normalized.strip_prefix(\"tests/\") {\n        (\"tests\", p)\n    } else {\n        return None;\n    };\n\n    let path = path.strip_suffix(\".rs\")?;\n    let path = path.strip_suffix(\"/mod\").unwrap_or(path);\n    let module_path = path.replace('/', \"::\");\n\n    if module_path.is_empty() {\n        Some(prefix.to_string())\n    } else {\n        Some(format!(\"{}::{}\", prefix, module_path))\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::file_path_to_module_path;\n\n    #[test]\n    fn file_path_to_module_path_supports_unix_and_windows_separators() {\n        assert_eq!(\n            file_path_to_module_path(\"src/datatype/named.rs\"),\n            Some(\"crate::datatype::named\".to_string())\n        );\n        assert_eq!(\n            file_path_to_module_path(\"src\\\\datatype\\\\named.rs\"),\n            Some(\"crate::datatype::named\".to_string())\n        );\n        assert_eq!(\n            file_path_to_module_path(\"tests/tests/types.rs\"),\n            Some(\"tests::tests::types\".to_string())\n        );\n        assert_eq!(\n            file_path_to_module_path(\"tests\\\\tests\\\\types.rs\"),\n            Some(\"tests::tests::types\".to_string())\n        );\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/primitive.rs",
    "content": "use super::DataType;\n\n/// Rust built-in primitive type.\n#[allow(non_camel_case_types)]\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub enum Primitive {\n    /// [`i8`] primitive.\n    i8,\n    /// [`i16`] primitive.\n    i16,\n    /// [`i32`] primitive.\n    i32,\n    /// [`i64`] primitive.\n    i64,\n    /// [`i128`] primitive.\n    i128,\n    /// [`isize`] primitive.\n    isize,\n    /// [`u8`] primitive.\n    u8,\n    /// [`u16`] primitive.\n    u16,\n    /// [`u32`] primitive.\n    u32,\n    /// [`u64`] primitive.\n    u64,\n    /// [`u128`] primitive.\n    u128,\n    /// [`usize`] primitive.\n    usize,\n    /// [`f16`] primitive (nightly-only).\n    f16,\n    /// [`f32`] primitive.\n    f32,\n    /// [`f64`] primitive.\n    f64,\n    /// [`f128`] primitive (nightly-only).\n    f128,\n    /// [`bool`] primitive.\n    bool,\n    /// [`char`] primitive.\n    char,\n    /// [`str`] primitive.\n    str,\n}\n\nimpl From<Primitive> for DataType {\n    fn from(t: Primitive) -> Self {\n        Self::Primitive(t)\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/reference.rs",
    "content": "use std::{\n    any::{Any, TypeId},\n    fmt, hash,\n    sync::Arc,\n};\n\nuse crate::datatype::Generic;\n\nuse super::DataType;\n\n/// Reference to another datatype.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub enum Reference {\n    /// Reference to a named type collected in a [`Types`](crate::Types).\n    ///\n    /// This can either render as a named reference, such as `TypeName<T>`, or as\n    /// an inlined datatype depending on [`NamedReference::inner`].\n    Named(NamedReference),\n    /// Reference to an opaque exporter-specific type.\n    Opaque(OpaqueReference),\n}\n\n/// Reference to a [`NamedDataType`](crate::datatype::NamedDataType).\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct NamedReference {\n    pub(crate) id: NamedId,\n    /// How this named type should be referenced at the use site.\n    pub inner: NamedReferenceType,\n}\n\n/// Use-site representation for a [`NamedReference`].\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub enum NamedReferenceType {\n    /// Recursive reference encountered while resolving an inline type.\n    ///\n    /// Exporters can use this marker to avoid infinitely expanding recursive\n    /// inline definitions that they would stack overflow resolving.\n    Recursive,\n    /// Inline the contained datatype at the reference site.\n    /// These are emitted when `#[specta(inline)]` is used on a field or container.\n    #[non_exhaustive]\n    Inline {\n        /// Datatype to render in place of the named reference.\n        dt: Box<DataType>,\n    },\n    /// Render a reference to the named datatype.\n    #[non_exhaustive]\n    Reference {\n        /// Concrete generic arguments for this use site.\n        generics: Vec<(Generic, DataType)>,\n    },\n}\n\n/// Reference to a type not understood by Specta's core datatype model.\n///\n/// These are implemented by the language exporter to implement cool features like\n/// [`specta_typescript::branded!`](https://docs.rs/specta-typescript/latest/specta_typescript/macro.branded.html),\n/// [`specta_typescript::define`](https://docs.rs/specta-typescript/latest/specta_typescript/fn.define.html), and more.\n///\n/// # Invariants\n///\n/// Equality and hashing are delegated to the stored opaque state. If two opaque\n/// references should be distinct, their state values must compare and hash\n/// distinctly.\n///\n/// This is an advanced feature designed for language exporters and framework\n/// integrations. Most end users should prefer ordinary [`DataType`] variants.\n#[derive(Clone)]\npub struct OpaqueReference(Arc<dyn DynOpaqueReference>);\n\ntrait DynOpaqueReference: Any + Send + Sync {\n    fn type_name(&self) -> &'static str;\n    fn hash(&self, hasher: &mut dyn hash::Hasher);\n    fn eq(&self, other: &dyn Any) -> bool;\n    fn as_any(&self) -> &dyn Any;\n}\n\n#[derive(Debug)]\nstruct OpaqueReferenceInner<T>(T);\nimpl<T: hash::Hash + Eq + Send + Sync + 'static> DynOpaqueReference for OpaqueReferenceInner<T> {\n    fn type_name(&self) -> &'static str {\n        std::any::type_name::<T>()\n    }\n    fn hash(&self, mut hasher: &mut dyn hash::Hasher) {\n        self.0.hash(&mut hasher)\n    }\n    fn eq(&self, other: &dyn Any) -> bool {\n        other\n            .downcast_ref::<T>()\n            .map(|other| self.0 == *other)\n            .unwrap_or_default()\n    }\n    fn as_any(&self) -> &dyn Any {\n        &self.0\n    }\n}\n\nimpl fmt::Debug for OpaqueReference {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"OpaqueReference\")\n            .field(&self.0.type_name())\n            .finish()\n    }\n}\n\nimpl PartialEq for OpaqueReference {\n    fn eq(&self, other: &Self) -> bool {\n        self.0.eq(other.0.as_any())\n    }\n}\n\nimpl Eq for OpaqueReference {}\n\nimpl hash::Hash for OpaqueReference {\n    fn hash<H: hash::Hasher>(&self, state: &mut H) {\n        self.0.hash(state)\n    }\n}\n\nimpl OpaqueReference {\n    /// Returns the Rust type name of the stored opaque state.\n    pub fn type_name(&self) -> &'static str {\n        self.0.type_name()\n    }\n\n    /// Returns the [`TypeId`] of the stored opaque state.\n    pub fn type_id(&self) -> TypeId {\n        self.0.as_any().type_id()\n    }\n\n    /// Attempts to downcast the opaque state to `T`.\n    pub fn downcast_ref<T: 'static>(&self) -> Option<&T> {\n        self.0.as_any().downcast_ref::<T>()\n    }\n}\n\nimpl Reference {\n    /// Constructs a new reference to an opaque type.\n    ///\n    /// An opaque type cannot be represented with the core [`DataType`] model and\n    /// requires specific exporter integration.\n    ///\n    /// Opaque [`Reference`]s are compared using the state's [`PartialEq`]\n    /// implementation. For example, `Reference::opaque(()) ==\n    /// Reference::opaque(())`, so unique references need unique state.\n    pub fn opaque<T: hash::Hash + Eq + Send + Sync + 'static>(state: T) -> Self {\n        Self::Opaque(OpaqueReference(Arc::new(OpaqueReferenceInner(state))))\n    }\n\n    /// Returns whether two references point to the same underlying type.\n    ///\n    /// This differs from [`Eq`], [`PartialEq`], and [`Hash`] because those compare\n    /// the full [`Reference`] which includes generic arguments and inline state.\n    pub fn ty_eq(&self, other: &Reference) -> bool {\n        match (self, other) {\n            (Reference::Named(a), Reference::Named(b)) => a.id == b.id,\n            (Reference::Opaque(a), Reference::Opaque(b)) => *a == *b,\n            _ => false,\n        }\n    }\n}\n\nimpl From<Reference> for DataType {\n    fn from(r: Reference) -> Self {\n        Self::Reference(r)\n    }\n}\n\n/// Unique identifier for a [NamedDataType].\n///\n/// For static types (from derive macros), we use a unique string based on the\n/// type's module path and name. For dynamic types, we use an Arc pointer.\n#[derive(Clone)]\npub(crate) enum NamedId {\n    // A unique string identifying the type (module_path::TypeName).\n    Static(&'static str),\n    Dynamic(Arc<()>),\n}\n\nimpl PartialEq for NamedId {\n    fn eq(&self, other: &Self) -> bool {\n        match (self, other) {\n            (NamedId::Static(a), NamedId::Static(b)) => a == b,\n            (NamedId::Dynamic(a), NamedId::Dynamic(b)) => Arc::ptr_eq(a, b),\n            _ => false,\n        }\n    }\n}\nimpl Eq for NamedId {}\n\nimpl hash::Hash for NamedId {\n    fn hash<H: hash::Hasher>(&self, state: &mut H) {\n        match self {\n            NamedId::Static(s) => s.hash(state),\n            NamedId::Dynamic(p) => std::ptr::hash(Arc::as_ptr(p), state),\n        }\n    }\n}\n\nimpl fmt::Debug for NamedId {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        match self {\n            NamedId::Static(s) => write!(f, \"s:{}\", s),\n            NamedId::Dynamic(p) => write!(f, \"d{:p}\", Arc::as_ptr(p)),\n        }\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/struct.rs",
    "content": "use crate::datatype::{Attributes, DataType, Fields};\n\nuse super::StructBuilder;\n\nuse super::{NamedFields, UnnamedFields};\n\n/// Runtime representation of a Rust [`struct`](https://doc.rust-lang.org/std/keyword.struct.html).\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct Struct {\n    /// Field layout for the struct.\n    pub fields: Fields,\n    /// Runtime attributes attached to the struct container.\n    pub attributes: Attributes,\n}\n\n// Do not implement `Default` for `Struct` as it's unclear what that would be. `Unit`, yes but still.\n\nimpl Struct {\n    /// Construct a new unit struct.\n    pub fn unit() -> Self {\n        Self {\n            fields: Fields::Unit,\n            attributes: Default::default(),\n        }\n    }\n\n    /// Starts building a struct with named fields.\n    pub fn named() -> StructBuilder<NamedFields> {\n        StructBuilder {\n            fields: NamedFields {\n                fields: Default::default(),\n            },\n        }\n    }\n\n    /// Starts building a tuple struct with unnamed fields.\n    pub fn unnamed() -> StructBuilder<UnnamedFields> {\n        StructBuilder {\n            fields: UnnamedFields {\n                fields: Default::default(),\n            },\n        }\n    }\n}\n\nimpl From<Struct> for DataType {\n    fn from(t: Struct) -> Self {\n        Self::Struct(t)\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype/tuple.rs",
    "content": "use super::DataType;\n\n/// Represents a Rust [tuple](https://doc.rust-lang.org/std/primitive.tuple.html) type.\n///\n/// The empty tuple `()` is represented as a tuple with no elements. Exporters may\n/// render that specially, such as `null` in the TypeScript exporter.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\n#[non_exhaustive]\npub struct Tuple {\n    /// Datatypes for each tuple element, in source order.\n    pub elements: Vec<DataType>,\n}\n\nimpl Tuple {\n    /// Create a new tuple with the given elements.\n    pub fn new(elements: Vec<DataType>) -> Self {\n        Self { elements }\n    }\n}\n\nimpl From<Tuple> for DataType {\n    fn from(t: Tuple) -> Self {\n        Self::Tuple(t)\n    }\n}\n"
  },
  {
    "path": "specta/src/datatype.rs",
    "content": "//! Types related to working with [`DataType`]. Exposed for advanced users.\n\nmod attributes;\nmod r#enum;\nmod fields;\nmod function;\nmod generic;\nmod list;\nmod map;\nmod named;\nmod primitive;\nmod reference;\nmod r#struct;\nmod tuple;\n\npub use attributes::Attributes;\npub use r#enum::{Enum, Variant, VariantBuilder};\npub use fields::{Field, Fields, NamedFields, StructBuilder, UnnamedFields};\npub use function::Function;\npub use generic::{Generic, Generic as GenericReference, GenericDefinition};\npub use list::List;\n// pub use literal::Literal;\npub use map::Map;\npub use named::{Deprecated, NamedDataType, inline};\npub use primitive::Primitive;\npub use reference::{NamedReference, NamedReferenceType, OpaqueReference, Reference};\npub use r#struct::Struct;\npub use tuple::Tuple;\n\npub(crate) use reference::NamedId;\n\n/// Runtime type-erased representation of a Rust type.\n///\n/// A language exporter takes this general format and converts it into a language specific syntax.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub enum DataType {\n    /// A primitive scalar type like integers, floats, booleans, chars, or strings.\n    Primitive(Primitive),\n    /// A sequential collection type.\n    List(List),\n    /// A map/dictionary type.\n    Map(Map),\n    /// A struct type with named, unnamed, or unit fields.\n    Struct(Struct),\n    /// An enum type.\n    Enum(Enum),\n    /// A tuple type.\n    Tuple(Tuple),\n    /// A nullable wrapper around another type.\n    Nullable(Box<DataType>),\n    /// A structural intersection of multiple object-like types.\n    Intersection(Vec<DataType>),\n    /// A placeholder for a generic type defined on the parent [`NamedDataType`].\n    /// Rendered as `T`. These should never be returned from [`Type::definition`](crate::Type::definition), they should only appear in [`NamedDataType`]'s `ty` field.\n    Generic(Generic),\n    /// A reference to another named or opaque type.\n    Reference(Reference),\n}\n"
  },
  {
    "path": "specta/src/docs.md",
    "content": "Easily export your Rust types to other languages.\n\nSpecta provides a system for type introspection and a set of language exporters which allow you to export your Rust types to other languages!\n\n**Get started** by checking out the language exporter's, start with [Typescript](https://docs.rs/specta-typescript).\n\n## Features\n\n- Export structs and enums to [Typescript](https://www.typescriptlang.org)\n- Get function types to use in libraries like [tauri-specta](https://github.com/specta-rs/tauri-specta)\n- Supports wide range of common crates in Rust ecosystem\n- Supports type inference - can determine type of `fn demo() -> impl Type`.\n \n## Ecosystem\n\nSpecta can be used in your application either directly or through a library which simplifies the process of using it.\n\n- [rspc](https://github.com/specta-rs/rspc) - A framework for building typesafe web backends in Rust\n- [tauri-specta](https://github.com/specta-rs/tauri-specta) - Completely typesafe Tauri commands\n- [TauRPC](https://github.com/MatsDK/TauRPC) - Typesafe IPC layer for Tauri applications\n- [orpc-rs](https://github.com/ahonn/orpc-rs) - Rust implementation of [oRPC](https://orpc.dev) — type-safe RPC with first-class Tauri support.\n\n## Languages\n\nSpecta is designed to be able to export from Rust to any other language.\n\n| Language                                               | Status        |\n| ------------------------------------------------------ | ------------- |\n| [specta-typescript](https://docs.rs/specta-typescript) | **stable**    |\n| [specta-go](https://docs.rs/specta-go)                 | alpha         |\n| [specta-swift](https://docs.rs/specta-swift)           | alpha         |\n| [specta-openapi](https://docs.rs/specta-openapi)       | wip           |\n| [specta-jsonschema](https://docs.rs/specta-jsonschema) | wip           |\n| [specta-zod](https://docs.rs/specta-zod)               | wip           |\n| [specta-kotlin](https://docs.rs/specta-kotlin)         | _coming soon_ |\n| specta-jsdoc                                           | _coming soon_ |\n| specta-rust                                            | _coming soon_ |\n| specta-valibot                                         | _coming soon_ |\n\n## Formats\n\nSpecta is format agnostic. Format-specific behavior is handled by companion\ncrates before handing transformed types to language exporters.\n\n| Format | Status        |\n| ------ | ------------- |\n| [specta-serde](https://docs.rs/specta-serde) |  **stable**    |\n\n## Feature flags\n\n[//]: # (FEATURE_FLAGS_START)\n\n- `function` - Support for exporting the types of Rust functions.\n- `collect` - Support for collecting up a global type map\n\nLanguages\n\n- `typescript` - Support for [TypeScript](https://www.typescriptlang.org) language exporting\n- `js_doc` - Support for [JSDoc](https://jsdoc.app) exporting helpers. Also requires `typescript` feature to be enabled.\n\nCompatibility\n\n- `serde` - Support for [serde](https://serde.rs)\n- `serde_json` - Support for [serde-json](https://github.com/serde-rs/json)\n- `serde_yaml` - Support for [serde_yaml](https://github.com/dtolnay/serde-yaml)\n- `toml` - Support for [toml](https://github.com/toml-rs/toml)\n- `tauri` - Support for [Tauri](https://tauri.app). This is required when using the `#[specta]` attribute with Tauri Commands.\n\nExternal types\n\n- `ulid` - [ulid](https://docs.rs/ulid) crate\n- `uuid` - [uuid](https://docs.rs/uuid) crate\n- `chrono` - [chrono](https://docs.rs/chrono) crate\n- `time` - [time](https://docs.rs/time) crate\n- `jiff` - [jiff](https://docs.rs/jiff) crate\n- `bigdecimal` - [bigdecimal](https://docs.rs/bigdecimal) crate\n- `rust_decimal` - [rust_decimal](https://docs.rs/rust_decimal) crate\n- `indexmap` - [indexmap](https://docs.rs/indexmap) crate\n- `ordered-float` - [ordered-float](https://docs.rs/ordered-float) crate\n- `heapless` - [heapless](https://docs.rs/heapless) crate\n- `semver` - [semver](https://docs.rs/semver) crate\n- `smol_str` - [smol_str](https://docs.rs/smol_str) crate\n- `arrayvec` - [arrayvec](https://docs.rs/arrayvec) crate\n- `smallvec` - [smallvec](https://docs.rs/smallvec) crate\n- `ipnetwork` - [ipnetwork](https://docs.rs/ipnetwork) crate\n- `mac_address` - [mac_address](https://docs.rs/mac_address) crate\n- `bit-vec` - [bit-vec](https://docs.rs/bit-vec) crate\n- `bson` - [bson](https://docs.rs/bson) crate\n- `uhlc` - [uhlc](https://docs.rs/uhlc) crate\n- `bytesize` - [bytesize](https://docs.rs/bytesize) crate\n- `glam` - [glam](https://docs.rs/glam) crate\n- `tokio` - [tokio](https://docs.rs/tokio) crate\n- `url` - [url](https://docs.rs/url) crate\n- `either` - [either](https://docs.rs/either) crate\n- `bevy_ecs` - [bevy_ecs](https://docs.rs/bevy_ecs) crate\n\n[//]: # (FEATURE_FLAGS_END)\n## Alternatives\n\n#### Why not ts-rs?\n\n[ts-rs](https://github.com/Aleph-Alpha/ts-rs) is a great library,\nbut it has a few limitations which became a problem when I was building [rspc](https://github.com/specta-rs/rspc).\nNamely it deals with types individually which means it is not possible to export a type and all of the other types it depends on.\n\n#### Why not Typeshare?\n\n[Typeshare](https://github.com/1Password/typeshare) is also great, but its approach is fundamentally different.\nWhile Specta uses traits and runtime information, Typeshare statically analyzes your Rust\nfiles.\nThis results in a loss of information and lack of compatibility with types from other crates.\n"
  },
  {
    "path": "specta/src/format.rs",
    "content": "use std::{borrow::Cow, error};\n\nuse crate::{Types, datatype::DataType};\n\n/// Error type returned by [`Format`] callbacks.\npub type FormatError = Box<dyn error::Error + Send + Sync + 'static>;\n\n/// The format is used to inform Specta how the Serialize/Deserialization layer handles types.\n///\n/// This allows them to rewrite the collected types and encountered datatypes to apply format-specific macro attributes or behaviour.\n///\n/// Currently we have support for:\n///  - [serde](https://docs.rs/specta) via [`specta-serde`](https://docs.rs/specta-serde)\n///\npub trait Format {\n    /// Apply a map function to the full [`Types`] collection.\n    ///\n    /// Returns [`Cow::Borrowed`] when no changes are needed, or\n    /// [`Cow::Owned`] when the formatter produces a transformed collection.\n    fn map_types(&'_ self, types: &Types) -> std::result::Result<Cow<'_, Types>, FormatError>;\n\n    /// Map an individual [`DataType`] with access to the surrounding [`Types`].\n    ///\n    /// Returns [`Cow::Borrowed`] when no changes are needed, or\n    /// [`Cow::Owned`] when the formatter produces a transformed datatype.\n    fn map_type(\n        &'_ self,\n        types: &Types,\n        dt: &DataType,\n    ) -> std::result::Result<Cow<'_, DataType>, FormatError>;\n}\n\nimpl<T: Format + ?Sized> Format for &T {\n    fn map_types(&'_ self, types: &Types) -> std::result::Result<Cow<'_, Types>, FormatError> {\n        (**self).map_types(types)\n    }\n\n    fn map_type(\n        &'_ self,\n        types: &Types,\n        dt: &DataType,\n    ) -> std::result::Result<Cow<'_, DataType>, FormatError> {\n        (**self).map_type(types, dt)\n    }\n}\n\nimpl<T: Format + ?Sized> Format for Box<T> {\n    fn map_types(&'_ self, types: &Types) -> std::result::Result<Cow<'_, Types>, FormatError> {\n        (**self).map_types(types)\n    }\n\n    fn map_type(\n        &'_ self,\n        types: &Types,\n        dt: &DataType,\n    ) -> std::result::Result<Cow<'_, DataType>, FormatError> {\n        (**self).map_type(types, dt)\n    }\n}\n\n// Assert dyn-safety\nconst _: Option<&dyn Format> = None;\n"
  },
  {
    "path": "specta/src/function/arg.rs",
    "content": "use crate::{Type, Types, datatype::DataType};\n\n/// Implemented by types that can be used as an argument in a function annotated with\n/// [`specta`](crate::specta).\npub trait FunctionArg {\n    /// Gets the type of an argument as a [`DataType`].\n    ///\n    /// Some argument types should be ignored (eg. when doing dependency injection),\n    /// so the value is optional.\n    fn to_datatype(types: &mut Types) -> Option<DataType>;\n}\n\nimpl<T: Type> FunctionArg for T {\n    fn to_datatype(types: &mut Types) -> Option<DataType> {\n        Some(T::definition(types))\n    }\n}\n"
  },
  {
    "path": "specta/src/function/result.rs",
    "content": "use std::future::Future;\n\nuse crate::{Type, Types, datatype::DataType};\n\n/// Implemented by types that can be returned from a function annotated with\n/// [`specta`](crate::specta).\npub trait FunctionResult<TMarker> {\n    /// Gets the function return type as a [`DataType`].\n    fn to_datatype(types: &mut Types) -> DataType;\n}\n\n#[doc(hidden)]\npub enum FunctionValueMarker {}\nimpl<T: Type> FunctionResult<FunctionValueMarker> for T {\n    fn to_datatype(types: &mut Types) -> DataType {\n        T::definition(types)\n    }\n}\n\n#[doc(hidden)]\npub enum FunctionFutureMarker {}\nimpl<F> FunctionResult<FunctionFutureMarker> for F\nwhere\n    F: Future,\n    F::Output: Type,\n{\n    fn to_datatype(types: &mut Types) -> DataType {\n        F::Output::definition(types)\n    }\n}\n"
  },
  {
    "path": "specta/src/function/specta_fn.rs",
    "content": "use std::borrow::Cow;\n\nuse crate::{\n    Types,\n    datatype::{Deprecated, Function},\n};\n\nuse super::{FunctionArg, FunctionResult};\n\n/// Implemented by functions that can be annotated with [`specta`](crate::specta).\n///\n/// This trait is sealed as it won't need to be used externally.\npub trait SpectaFn<TMarker> {\n    /// Gets the type of a function as a [`Function`](crate::datatype::Function).\n    fn to_datatype(\n        asyncness: bool,\n        name: Cow<'static, str>,\n        types: &mut Types,\n        fields: &[Cow<'static, str>],\n        docs: Cow<'static, str>,\n        deprecated: Option<Deprecated>,\n        no_return_type: bool,\n    ) -> Function;\n}\n\nimpl<TResult, TResultMarker> SpectaFn<TResultMarker> for fn() -> TResult\nwhere\n    TResult: FunctionResult<TResultMarker>,\n{\n    fn to_datatype(\n        asyncness: bool,\n        name: Cow<'static, str>,\n        types: &mut Types,\n        _fields: &[Cow<'static, str>],\n        docs: Cow<'static, str>,\n        deprecated: Option<Deprecated>,\n        no_return_type: bool,\n    ) -> Function {\n        Function {\n            asyncness,\n            name,\n            args: vec![],\n            result: (!no_return_type).then(|| TResult::to_datatype(types)),\n            docs,\n            deprecated,\n        }\n    }\n}\n\nmacro_rules! impl_typed_command {\n    ( impl $($i:ident),* ) => {\n       paste::paste! {\n            impl<\n                TResult,\n                TResultMarker,\n                $($i: FunctionArg),*\n            > SpectaFn<TResultMarker> for fn($($i),*) -> TResult\n            where\n                TResult: FunctionResult<TResultMarker>,\n            {\n                fn to_datatype(\n                    asyncness: bool,\n                    name: Cow<'static, str>,\n                    types: &mut Types,\n                    fields: &[Cow<'static, str>],\n                    docs: Cow<'static, str>,\n                    deprecated: Option<Deprecated>,\n                    no_return_type: bool,\n                ) -> Function {\n                    let mut fields = fields.into_iter();\n\n                    Function {\n                        asyncness,\n                        name,\n                        docs,\n                        deprecated,\n                        args: [$(\n                            fields\n                                .next()\n                                .map_or_else(\n                                    || None,\n                                    |field| $i::to_datatype(types).map(|ty| (field.clone(), ty))\n                                )\n                        ),*,]\n                            .into_iter()\n                            .filter_map(|v| v)\n                            .collect::<Vec<_>>(),\n                        result: (!no_return_type).then(|| TResult::to_datatype(types)),\n                    }\n                }\n            }\n        }\n    };\n    ( $i2:ident $(, $i:ident)* ) => {\n        impl_typed_command!(impl $i2 $(, $i)* );\n        impl_typed_command!($($i),*);\n    };\n    () => {};\n}\n\nimpl_typed_command!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);\n"
  },
  {
    "path": "specta/src/function.rs",
    "content": "//! Support for collecting Rust function signatures.\n//!\n//! Specta does not export callable functions by itself. Instead, it records the\n//! names, arguments, return types, docs, and deprecation metadata needed by\n//! framework crates to generate bindings for their own function or command\n//! systems.\n\nmod arg;\nmod result;\nmod specta_fn;\n\npub use arg::FunctionArg;\npub use result::FunctionResult;\n#[doc(hidden)]\npub use result::{FunctionFutureMarker, FunctionValueMarker};\npub(crate) use specta_fn::SpectaFn;\n\n/// Returns a [`Function`](crate::datatype::Function) for a given function that has been annotated with\n/// the `#[specta]` attribute.\n///\n/// # Examples\n///\n/// ```rust\n/// use specta::{*, datatype::*, function::fn_datatype};\n///\n/// #[specta]\n/// fn some_function(name: String, age: i32) -> bool {\n///     true\n/// }\n///\n/// fn main() {\n///     let typ = fn_datatype!(some_function)(&mut Types::default());\n///\n///     assert_eq!(typ.name(), \"some_function\");\n///     assert_eq!(typ.args().len(), 2);\n///     assert_eq!(typ.result(), Some(&DataType::Primitive(Primitive::bool)));\n/// }\n/// ```\n///\n/// # Recursion limit reached while expanding the macro `fn_datatype`\n///\n/// This macro requires recursion internally to correctly function so you may run into the recursion limit. From my testing you can have 31 path segments before you hit the recursion limit. The size of the segment or the amount of generics in the segment should not affect this limit.\n///\n/// If your having issues with this limit you can increase your [`recursion_limit`](https://doc.rust-lang.org/reference/attributes/limits.html#the-recursion_limit-attribute) by adding `#![recursion_limit = \"1024\"]` to your `main.rs`. If your able to hit this limit in other scenarios please [let us know](https://github.com/specta-rs/tauri-specta/issues/114) and we can apply some potential optimizations.\n///\n#[doc(hidden)]\n#[macro_export]\nmacro_rules! _fn_datatype {\n    // Hide distracting implementation details from the generated rustdoc.\n    ($($json:tt)*) => {\n        $crate::function::_fn_datatype_internal!($($json)*)\n    };\n}\n\n#[doc(hidden)]\n#[macro_export]\nmacro_rules! _fn_datatype_internal {\n    ([$($path:tt)*] [$($full:tt)*] [$last:tt]) => {\n        $crate::internal::paste! {\n            $($path)* [<__specta__fn__ $last>]!(@export_fn; $($full)*)\n        }\n    };\n    ([$($path:tt)*] [$($full:tt)*] [$($last:tt)?] $t:tt :: <$($g:path),*> $($rest:tt)*) => {\n        $crate::function::fn_datatype!([$($path)* $($last)*] [$($full)* $t::<$($g),*>] [$t] $($rest)*)\n    };\n    ([$($path:tt)*] [$($full:tt)*] [$($last:tt)?] $t:tt $($rest:tt)*) => {\n        $crate::function::fn_datatype!([$($path)* $($last)*] [$($full)* $t] [$t] $($rest)*)\n    };\n    () => {{\n            compile_error!(\"fn_datatype must be provided a function path as an argument\");\n    }};\n    ($($rest:tt)*) => {\n        $crate::function::fn_datatype!([] [] [] $($rest)*)\n    };\n}\n\n/// Collects function types into a [`Vec`],\n/// and all downstream types into a [`Types`](crate::Types) instance.\n///\n/// Specifying a `types` argument allows a custom [`Types`](crate::Types) to be used.\n///\n/// # Examples\n///\n/// ```rust\n/// use specta::*;\n///\n/// #[specta]\n/// fn some_function(name: String, age: i32) -> bool {\n///     true\n/// }\n///\n/// fn main() {\n///     let functions = function::collect_functions![some_function](&mut Types::default());\n/// }\n/// ````\n#[doc(hidden)]\n#[macro_export]\nmacro_rules! _collect_functions {\n    ($(,)?) => {{\n        fn export(_: &mut $crate::Types) -> Vec<$crate::datatype::Function> {\n            vec![]\n        }\n\n        export\n    }};\n    ($($b:tt $(:: $($p:ident)? $(<$($g:path),*>)? )* ),* $(,)?) => {{\n        fn export(types: &mut $crate::Types) -> Vec<$crate::datatype::Function> {\n            vec![\n                $($crate::function::fn_datatype!($b $($(::$p)? $(::<$($g),*>)? )* )(types)),*\n            ]\n        }\n\n        export\n    }};\n}\n\n#[doc(inline)]\npub use _collect_functions as collect_functions;\n#[doc(inline)]\npub use _fn_datatype as fn_datatype;\n#[doc(hidden)]\npub use _fn_datatype_internal;\n"
  },
  {
    "path": "specta/src/internal.rs",
    "content": "//! This module contains functions that are public for the sole reason of the macros.\n//!\n//! They will not be documented and may go through breaking changes without a major version bump!\n//!\n//! DO NOT USE THEM! You have been warned!\n\n#[cfg(feature = \"function\")]\npub use paste::paste;\n\n#[cfg(feature = \"function\")]\nmod functions {\n    use std::borrow::Cow;\n\n    use crate::{Types, datatype::Deprecated, datatype::Function, function::SpectaFn};\n\n    #[doc(hidden)]\n    /// A helper for exporting a command to a [`CommandDataType`].\n    /// You shouldn't use this directly and instead should use [`fn_datatype!`](crate::fn_datatype).\n    pub fn get_fn_datatype<TMarker, T: SpectaFn<TMarker>>(\n        _: T,\n        asyncness: bool,\n        name: Cow<'static, str>,\n        types: &mut Types,\n        fields: &[Cow<'static, str>],\n        docs: Cow<'static, str>,\n        deprecated: Option<Deprecated>,\n        no_return_type: bool,\n    ) -> Function {\n        T::to_datatype(\n            asyncness,\n            name,\n            types,\n            fields,\n            docs,\n            deprecated,\n            no_return_type,\n        )\n    }\n}\n#[cfg(feature = \"function\")]\npub use functions::*;\n"
  },
  {
    "path": "specta/src/lib.rs",
    "content": "#![doc = include_str!(\"./docs.md\")]\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n#![cfg_attr(is_nightly, feature(f16))]\n#![cfg_attr(is_nightly, feature(f128))]\n\n#[cfg(feature = \"collect\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"collect\")))]\n#[doc(hidden)]\npub mod collect;\npub mod datatype;\nmod format;\n#[cfg(feature = \"function\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"function\")))]\npub mod function;\n#[doc(hidden)]\npub mod internal;\nmod r#type;\nmod types;\n\n#[doc(inline)]\npub use format::{Format, FormatError};\n#[doc(inline)]\npub use r#type::Type;\n#[doc(inline)]\npub use types::Types;\n\n#[doc(inline)]\n#[cfg(feature = \"collect\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"collect\")))]\npub use collect::collect;\n\n#[doc(inline)]\n#[cfg(feature = \"derive\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"derive\")))]\npub use specta_macros::Type;\n\n#[doc(hidden)]\n#[cfg(feature = \"derive\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"derive\")))]\npub use specta_macros::parse_type_from_lit;\n\n#[doc(inline)]\n#[cfg(all(feature = \"derive\", feature = \"function\"))]\n#[cfg_attr(docsrs, doc(cfg(all(feature = \"derive\", feature = \"function\"))))]\npub use specta_macros::specta;\n\n// TODO(v3): Remove this. This must be kept for Specta v1 as Tauri v2 depends on it.\n#[doc(hidden)]\n#[deprecated(note = \"Migrate from `TypeMap` to `Types`\")]\npub type TypeMap = Types;\n"
  },
  {
    "path": "specta/src/type/impls.rs",
    "content": "use std::marker::PhantomData;\n\nuse crate::{\n    Type, Types,\n    datatype::{self, DataType, List},\n    r#type::macros::*,\n};\n\nimpl_primitives!(\n    i8 i16 i32 i64 i128 isize\n    u8 u16 u32 u64 u128 usize\n    f32 f64\n    bool char\n    str\n);\n\n#[cfg(is_nightly)]\n#[cfg_attr(docsrs, doc(cfg(is_nightly)))]\nimpl Type for f16 {\n    fn definition(_: &mut Types) -> DataType {\n        DataType::Primitive(datatype::Primitive::f16)\n    }\n}\n\n#[cfg(is_nightly)]\n#[cfg_attr(docsrs, doc(cfg(is_nightly)))]\nimpl Type for f128 {\n    fn definition(_: &mut Types) -> DataType {\n        DataType::Primitive(datatype::Primitive::f128)\n    }\n}\n\n// Technically we only support 12-tuples but the `T13` is required due to how the macro works\nimpl_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13);\n\n#[allow(dead_code)]\npub(crate) struct PrimitiveSet<T>(PhantomData<T>);\nimpl<T: Type> Type for PrimitiveSet<T> {\n    fn definition(types: &mut Types) -> DataType {\n        let mut l = List::new(<T as Type>::definition(types));\n        l.unique = true;\n        DataType::List(l)\n    }\n}\n\n#[allow(dead_code)]\npub(crate) struct PrimitiveMap<K, V>(PhantomData<K>, PhantomData<V>);\nimpl<K: Type, V: Type> Type for PrimitiveMap<K, V> {\n    fn definition(types: &mut Types) -> DataType {\n        DataType::Map(crate::datatype::Map::new(\n            K::definition(types),\n            V::definition(types),\n        ))\n    }\n}\n\n#[cfg(feature = \"std\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"std\")))]\nconst _: () = {\n    use crate::datatype::{Enum, Field};\n\n    impl_ndt!(\n        std::string::String as str = inline;\n\n        // Non-unique sets\n        std::vec::Vec<T> as [T] = passthrough;\n        std::collections::VecDeque<T> as [T] = passthrough;\n        std::collections::BinaryHeap<T> as [T] = passthrough;\n        std::collections::LinkedList<T> as [T] = passthrough;\n\n        // Unique sets\n        std::collections::HashSet<T> as PrimitiveSet<T> = passthrough;\n        std::collections::BTreeSet<T> as PrimitiveSet<T> = passthrough;\n\n        // Maps\n        std::collections::HashMap<K, V> as PrimitiveMap<K, V> = passthrough;\n        std::collections::BTreeMap<K, V> as PrimitiveMap<K, V> = passthrough;\n\n        // Containers\n        std::boxed::Box<T> where { T: Type + ?Sized } as T = passthrough;\n        std::rc::Rc<T> where { T: Type + ?Sized } as T = passthrough;\n        std::sync::Arc<T> where { T: Type + ?Sized } as T = passthrough;\n        std::cell::Cell<T> where { T: Type + ?Sized } as T = passthrough;\n        std::cell::RefCell<T> where { T: Type + ?Sized } as T = passthrough;\n\n        std::sync::Mutex<T> where { T: Type + ?Sized } as T = passthrough;\n        std::sync::RwLock<T> where { T: Type + ?Sized } as T = passthrough;\n\n        std::ffi::CString as str = inline;\n        std::ffi::CStr as str = inline;\n        std::ffi::OsString as str = inline;\n        std::ffi::OsStr as str = inline;\n\n        std::path::Path as str = inline;\n        std::path::PathBuf as str = inline;\n\n        std::net::IpAddr as str = inline;\n        std::net::Ipv4Addr as str = inline;\n        std::net::Ipv6Addr as str = inline;\n\n        std::net::SocketAddr as str = inline;\n        std::net::SocketAddrV4 as str = inline;\n        std::net::SocketAddrV6 as str = inline;\n\n        std::sync::atomic::AtomicBool as bool = inline;\n        std::sync::atomic::AtomicI8 as i8 = inline;\n        std::sync::atomic::AtomicI16 as i16 = inline;\n        std::sync::atomic::AtomicI32 as i32 = inline;\n        std::sync::atomic::AtomicIsize as isize = inline;\n        std::sync::atomic::AtomicU8 as u8 = inline;\n        std::sync::atomic::AtomicU16 as u16 = inline;\n        std::sync::atomic::AtomicU32 as u32 = inline;\n        std::sync::atomic::AtomicUsize as usize = inline;\n        std::sync::atomic::AtomicI64 as i64 = inline;\n        std::sync::atomic::AtomicU64 as u64 = inline;\n\n        std::num::NonZeroU8 as u8 = inline;\n        std::num::NonZeroU16 as u16 = inline;\n        std::num::NonZeroU32 as u32 = inline;\n        std::num::NonZeroU64 as u64 = inline;\n        std::num::NonZeroUsize as usize = inline;\n        std::num::NonZeroI8 as i8 = inline;\n        std::num::NonZeroI16 as i16 = inline;\n        std::num::NonZeroI32 as i32 = inline;\n        std::num::NonZeroI64 as i64 = inline;\n        std::num::NonZeroIsize as isize = inline;\n        std::num::NonZeroU128 as u128 = inline;\n        std::num::NonZeroI128 as i128 = inline;\n\n        // Serde are cringe so this is how it is :(\n        std::ops::Range<T> as BaseRange<T> = named;\n        std::ops::RangeInclusive<T> as BaseRange<T> = named;\n\n        std::time::SystemTime as BaseSystemTime = named;\n        std::time::Duration as BaseDuration = named;\n\n        std::convert::Infallible as BaseInfallible = inline;\n        std::marker::PhantomData<T> as () = inline;\n        std::borrow::Cow<'a, T> where { T: Type + ?Sized + ToOwned + 'a } as T = inline;\n\n        std::result::Result<T, E> as BaseResult<T, E> = named;\n    );\n\n    struct BaseInfallible;\n    impl Type for BaseInfallible {\n        fn definition(_: &mut Types) -> DataType {\n            // Serde does no support `Infallible` as it can't be constructed as a `&self` method is uncallable on it.\n            DataType::Enum(Enum::default())\n        }\n    }\n\n    struct BaseSystemTime;\n    impl Type for BaseSystemTime {\n        fn definition(types: &mut Types) -> DataType {\n            datatype::Struct::named()\n                .field(\n                    \"duration_since_epoch\",\n                    Field::new(<i64 as crate::Type>::definition(types)),\n                )\n                .field(\n                    \"duration_since_unix_epoch\",\n                    Field::new(<u32 as crate::Type>::definition(types)),\n                )\n                .build()\n        }\n    }\n\n    struct BaseDuration;\n    impl Type for BaseDuration {\n        fn definition(types: &mut Types) -> DataType {\n            datatype::Struct::named()\n                .field(\"secs\", Field::new(<u64 as crate::Type>::definition(types)))\n                .field(\"nanos\", Field::new(<u32 as crate::Type>::definition(types)))\n                .build()\n        }\n    }\n\n    struct BaseRange<T>(PhantomData<T>);\n    impl<T: Type> Type for BaseRange<T> {\n        fn definition(types: &mut Types) -> DataType {\n            let ty = T::definition(types);\n            datatype::Struct::named()\n                .field(\"start\", Field::new(ty.clone()))\n                .field(\"end\", Field::new(ty))\n                .build()\n        }\n    }\n\n    struct BaseResult<T, E>(PhantomData<T>, PhantomData<E>);\n    impl<T: Type, E: Type> Type for BaseResult<T, E> {\n        fn definition(types: &mut Types) -> DataType {\n            datatype::Struct::named()\n                .field(\"ok\", Field::new(<T as Type>::definition(types)))\n                .field(\"err\", Field::new(<E as Type>::definition(types)))\n                .build()\n        }\n    }\n};\n\n#[cfg(feature = \"tokio\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"tokio\")))]\nimpl_ndt!(\n    tokio::sync::Mutex<T> where { T: Type + ?Sized } as T = passthrough;\n    tokio::sync::RwLock<T> where { T: Type + ?Sized } as T = passthrough;\n);\n\nimpl<T: Type + ?Sized> Type for &T {\n    fn definition(types: &mut Types) -> DataType {\n        T::definition(types)\n    }\n}\n\nimpl<T: Type> Type for [T] {\n    fn definition(types: &mut Types) -> DataType {\n        let mut l = List::new(<T as Type>::definition(types));\n        l.unique = false;\n        DataType::List(l)\n    }\n}\n\nimpl<const N: usize, T: Type> Type for [T; N] {\n    fn definition(types: &mut Types) -> DataType {\n        let mut l = List::new(T::definition(types));\n\n        // Refer to the documentation for `Types::has_const_params` to understand this.\n        // If you wanna force this use `specta_utils::FixedArray<N, T>` instead.\n        if !types.has_const_params {\n            l.length = Some(N);\n        }\n\n        DataType::List(l)\n    }\n}\n\nimpl<T: Type> Type for Option<T> {\n    fn definition(types: &mut Types) -> DataType {\n        DataType::Nullable(Box::new(T::definition(types)))\n    }\n}\n"
  },
  {
    "path": "specta/src/type/legacy_impls.rs",
    "content": "use crate::{Type, Types};\n#[allow(unused_imports)]\nuse crate::{datatype::*, r#type::impls::*, r#type::macros::impl_ndt};\n\n// `String` requires `std` feature, while `str` does not.\n// We can't use `str` in a lot of places because it's not `Sized`, so this bridges that.\n#[allow(unused)]\npub struct String;\nimpl Type for String {\n    fn definition(types: &mut Types) -> DataType {\n        str::definition(types)\n    }\n}\n\n#[cfg(feature = \"indexmap\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"indexmap\")))]\nconst _: () = {\n    impl_ndt!(\n        indexmap::IndexSet<T> as PrimitiveSet<T> = passthrough;\n        indexmap::IndexMap<K, V> as PrimitiveMap<K, V> = passthrough;\n    );\n};\n\n#[cfg(feature = \"ordered-float\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"ordered-float\")))]\nimpl_ndt!(\n    ordered_float::OrderedFloat<T> where { T: Type + ordered_float::FloatCore } as T = inline;\n    ordered_float::NotNan<T> where { T: Type + ordered_float::FloatCore } as T = inline;\n);\n\n#[cfg(feature = \"heapless\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"heapless\")))]\nconst _: () = {\n    impl_ndt!(\n        // Sequential containers\n        heapless::Vec<T> <T, const N: usize, LenT> where { T: Type, LenT: heapless::LenType } as [T; N] = passthrough;\n        heapless::Deque<T> <T, const N: usize> where { T: Type } as [T; N] = passthrough;\n        heapless::HistoryBuf<T> <T, const N: usize> where { T: Type } as [T; N] = passthrough;\n        heapless::BinaryHeap<T, K> <T, K, const N: usize> where { T: Type + Ord, K: heapless::binary_heap::Kind } as [T; N] = passthrough;\n\n        // Sets\n        heapless::IndexSet<T, S> <T, S, const N: usize> where { T: Type + Eq + core::hash::Hash, S: core::hash::BuildHasher } as PrimitiveSet<T> = passthrough;\n\n        // Maps\n        heapless::IndexMap<K, V, S> <K, V, S, const N: usize> where { K: Type + Eq + core::hash::Hash, V: Type, S: core::hash::BuildHasher } as PrimitiveMap<K, V> = passthrough;\n        heapless::LinearMap<K, V> <K, V, const N: usize> where { K: Type + Eq, V: Type } as PrimitiveMap<K, V> = passthrough;\n\n        // String container\n        heapless::String <const N: usize, LenT> where { LenT: heapless::LenType } as str = inline;\n    );\n};\n\n#[cfg(feature = \"semver\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"semver\")))]\nimpl_ndt!(\n     semver::Version as str = inline;\n     semver::VersionReq  as str = inline;\n     semver::Comparator  as str = inline;\n);\n\n#[cfg(feature = \"smol_str\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"smol_str\")))]\nimpl_ndt!(smol_str::SmolStr as str = inline);\n\n#[cfg(feature = \"arrayvec\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"arrayvec\")))]\nimpl_ndt!(\n    arrayvec::ArrayString <const N: usize> as str = inline;\n    arrayvec::ArrayVec<T> <T, const N: usize> as [T; N] = passthrough;\n);\n\n#[cfg(feature = \"smallvec\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"smallvec\")))]\nimpl_ndt!(smallvec::SmallVec<T> where { T: smallvec::Array + Type } as [T] = passthrough);\n\n#[cfg(feature = \"bytes\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"bytes\")))]\nimpl_ndt!(\n    bytes::Bytes as [u8] = inline;\n    bytes::BytesMut as [u8] = inline;\n);\n\n#[cfg(feature = \"serde_json\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde_json\")))]\nconst _: () = {\n    use serde_json::{Map, Number, Value};\n\n    impl_ndt!(\n        serde_json::Map<K, V> as PrimitiveMap<K, V> = passthrough;\n        serde_json::Value as SerdeValue = inline;\n        serde_json::Number as SerdeNumber = inline;\n    );\n\n    struct SerdeValue;\n    impl Type for SerdeValue {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\"Null\".into(), Variant::unit()),\n                    (\n                        \"Bool\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bool::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Number\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(Number::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"String\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(str::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Array\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(Vec::<Value>::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Object\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(Map::<String, Value>::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes: Default::default(),\n            })\n        }\n    }\n\n    struct SerdeNumber;\n    impl Type for SerdeNumber {\n        fn definition(_: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"f64\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(DataType::Primitive(Primitive::f64)))\n                            .build(),\n                    ),\n                    (\n                        \"i64\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(DataType::Primitive(Primitive::i64)))\n                            .build(),\n                    ),\n                    (\n                        \"u64\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(DataType::Primitive(Primitive::u64)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n};\n\n#[cfg(feature = \"serde_yaml\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde_yaml\")))]\nconst _: () = {\n    use serde_yaml::{Mapping, Number, Value, value::TaggedValue};\n\n    impl_ndt!(\n        serde_yaml::Mapping as PrimitiveMap<Value, Value> = passthrough;\n        serde_yaml::Value as SerdeYamlValue = inline;\n        serde_yaml::Number as SerdeYamlNumber = inline;\n        serde_yaml::value::TaggedValue as SerdeYamlTaggedValue = inline;\n    );\n\n    struct SerdeYamlValue;\n    impl Type for SerdeYamlValue {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\"Null\".into(), Variant::unit()),\n                    (\n                        \"Bool\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bool::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Number\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(Number::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"String\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(str::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Sequence\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(Vec::<Value>::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Mapping\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(Mapping::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Tagged\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(Box::<TaggedValue>::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct SerdeYamlNumber;\n    impl Type for SerdeYamlNumber {\n        fn definition(_: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"f64\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(DataType::Primitive(Primitive::f64)))\n                            .build(),\n                    ),\n                    (\n                        \"i64\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(DataType::Primitive(Primitive::i64)))\n                            .build(),\n                    ),\n                    (\n                        \"u64\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(DataType::Primitive(Primitive::u64)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct SerdeYamlTaggedValue;\n    impl Type for SerdeYamlTaggedValue {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"tag\", Field::new(str::definition(types)))\n                .field(\"value\", Field::new(Value::definition(types)))\n                .build()\n        }\n    }\n};\n#[cfg(feature = \"toml\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"toml\")))]\nconst _: () = {\n    use toml::{Value, value};\n\n    impl_ndt!(\n        toml::map::Map<K, V> as PrimitiveMap<K, V> = passthrough;\n        toml::value::Datetime as TomlDatetime = inline;\n        toml::Value as TomlValue = inline;\n    );\n\n    struct TomlDatetime;\n    impl Type for TomlDatetime {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"v\", Field::new(str::definition(types)))\n                .build()\n        }\n    }\n\n    struct TomlValue;\n    impl Type for TomlValue {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"String\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(str::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Integer\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(i64::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Float\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(f64::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Boolean\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bool::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Datetime\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(value::Datetime::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Array\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(Vec::<Value>::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Table\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(toml::map::Map::<String, Value>::definition(\n                                types,\n                            )))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n};\n\n#[cfg(feature = \"ulid\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"ulid\")))]\nimpl_ndt!(ulid::Ulid as str = inline);\n\n#[cfg(feature = \"uuid\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"uuid\")))]\nimpl_ndt!(\n    uuid::Uuid as str = inline;\n    uuid::fmt::Braced as str = inline;\n    uuid::fmt::Hyphenated as str = inline;\n    uuid::fmt::Simple as str = inline;\n    uuid::fmt::Urn as str = inline;\n);\n\n#[cfg(feature = \"chrono\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"chrono\")))]\n#[allow(deprecated)]\nconst _: () = {\n    impl_ndt!(\n        chrono::NaiveDateTime as str = inline;\n        chrono::NaiveDate as str = inline;\n        chrono::NaiveTime as str = inline;\n        chrono::Duration as str = inline;\n        chrono::FixedOffset as str = inline;\n        chrono::Utc as str = inline;\n        chrono::Local as str = inline;\n        chrono::Weekday as str = inline;\n        chrono::Month as str = inline;\n        chrono::Date<T> where { T: Type + chrono::TimeZone } as str = inline;\n        chrono::DateTime<T> where { T: Type + chrono::TimeZone } as str = inline;\n    );\n};\n\n#[cfg(feature = \"time\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"time\")))]\nimpl_ndt!(\n    time::PrimitiveDateTime as str = inline;\n    time::OffsetDateTime as str = inline;\n    time::Date as str = inline;\n    time::UtcDateTime as str = inline;\n    time::Time as str = inline;\n    time::Duration as str = inline;\n    time::UtcOffset as str = inline;\n    time::Weekday as str = inline;\n    time::Month as str = inline;\n);\n\n#[cfg(feature = \"jiff\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"jiff\")))]\nimpl_ndt!(\n    jiff::Timestamp as str = inline;\n    jiff::Zoned as str = inline;\n    jiff::SignedDuration as str = inline;\n    jiff::civil::Date as str = inline;\n    jiff::civil::Time as str = inline;\n    jiff::civil::DateTime as str = inline;\n    jiff::civil::ISOWeekDate as str = inline;\n    jiff::tz::TimeZone as str = inline;\n);\n\n#[cfg(feature = \"bigdecimal\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"bigdecimal\")))]\nimpl_ndt!(bigdecimal::BigDecimal as str = inline);\n\n// This assumes the `serde-with-str` feature is enabled. Check #26 for more info.\n#[cfg(feature = \"rust_decimal\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"rust_decimal\")))]\nimpl_ndt!(rust_decimal::Decimal as str = inline);\n\n#[cfg(feature = \"ipnetwork\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"ipnetwork\")))]\nimpl_ndt!(\n    ipnetwork::IpNetwork as str = inline;\n    ipnetwork::Ipv4Network as str = inline;\n    ipnetwork::Ipv6Network as str = inline;\n);\n\n#[cfg(feature = \"mac_address\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"mac_address\")))]\nimpl_ndt!(mac_address::MacAddress as str = inline);\n\n#[cfg(feature = \"bson\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"bson\")))]\nconst _: () = {\n    impl_ndt!(\n        bson::oid::ObjectId as BsonObjectId = inline;\n        bson::Decimal128 as BsonDecimal128 = inline;\n        bson::DateTime as BsonDateTime = inline;\n        bson::Uuid as str = inline;\n        bson::Timestamp as BsonTimestamp = inline;\n        bson::Binary as BsonBinary = inline;\n        bson::Regex as BsonRegex = inline;\n        bson::JavaScriptCodeWithScope as BsonJavaScriptCodeWithScope = inline;\n        bson::DbPointer as BsonDbPointer = inline;\n        bson::Document as PrimitiveMap<String, bson::Bson> = inline;\n        bson::Bson as Bson = inline;\n        bson::Utf8Lossy<T> as T = passthrough;\n        bson::RawBsonRef<'a,> as Bson = inline;\n    );\n\n    struct BsonObjectId;\n    impl Type for BsonObjectId {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"$oid\", Field::new(str::definition(types)))\n                .build()\n        }\n    }\n\n    struct BsonDecimal128;\n    impl Type for BsonDecimal128 {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"$numberDecimal\", Field::new(str::definition(types)))\n                .build()\n        }\n    }\n\n    struct BsonDateTime;\n    impl Type for BsonDateTime {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"$date\", Field::new(str::definition(types)))\n                .build()\n        }\n    }\n\n    struct BsonTimestamp;\n    impl Type for BsonTimestamp {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"$timestamp\",\n                    Field::new(\n                        Struct::named()\n                            .field(\"t\", Field::new(u32::definition(types)))\n                            .field(\"i\", Field::new(u32::definition(types)))\n                            .build(),\n                    ),\n                )\n                .build()\n        }\n    }\n\n    struct BsonBinary;\n    impl Type for BsonBinary {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"$binary\",\n                    Field::new(\n                        Struct::named()\n                            .field(\"base64\", Field::new(str::definition(types)))\n                            .field(\"subType\", Field::new(str::definition(types)))\n                            .build(),\n                    ),\n                )\n                .build()\n        }\n    }\n\n    struct BsonRegex;\n    impl Type for BsonRegex {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"$regex\", Field::new(str::definition(types)))\n                .field(\"$options\", Field::new(str::definition(types)))\n                .build()\n        }\n    }\n\n    struct BsonJavaScriptCode;\n    impl Type for BsonJavaScriptCode {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"$code\", Field::new(str::definition(types)))\n                .build()\n        }\n    }\n\n    struct BsonJavaScriptCodeWithScope;\n    impl Type for BsonJavaScriptCodeWithScope {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"$code\", Field::new(str::definition(types)))\n                .field(\"$scope\", Field::new(bson::Document::definition(types)))\n                .build()\n        }\n    }\n\n    struct BsonDbPointer;\n    impl Type for BsonDbPointer {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"$dbPointer\",\n                    Field::new(\n                        Struct::named()\n                            .field(\"$ref\", Field::new(str::definition(types)))\n                            .field(\"$id\", Field::new(bson::oid::ObjectId::definition(types)))\n                            .build(),\n                    ),\n                )\n                .build()\n        }\n    }\n\n    struct Bson;\n    impl Type for Bson {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"Double\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(f64::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"String\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(str::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Array\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(Vec::<bson::Bson>::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Document\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bson::Document::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Boolean\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bool::definition(types)))\n                            .build(),\n                    ),\n                    (\"Null\".into(), Variant::unit()),\n                    (\n                        \"RegularExpression\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bson::Regex::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"JavaScriptCode\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(BsonJavaScriptCode::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"JavaScriptCodeWithScope\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bson::JavaScriptCodeWithScope::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Int32\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(i32::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Int64\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(i64::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Timestamp\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bson::Timestamp::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Binary\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bson::Binary::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"ObjectId\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bson::oid::ObjectId::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"DateTime\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bson::DateTime::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Symbol\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                Struct::named()\n                                    .field(\"$symbol\", Field::new(str::definition(types)))\n                                    .build(),\n                            ))\n                            .build(),\n                    ),\n                    (\n                        \"Decimal128\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bson::Decimal128::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Undefined\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                Struct::named()\n                                    .field(\"$undefined\", Field::new(bool::definition(types)))\n                                    .build(),\n                            ))\n                            .build(),\n                    ),\n                    (\n                        \"MaxKey\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                Struct::named()\n                                    .field(\"$maxKey\", Field::new(u8::definition(types)))\n                                    .build(),\n                            ))\n                            .build(),\n                    ),\n                    (\n                        \"MinKey\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                Struct::named()\n                                    .field(\"$minKey\", Field::new(u8::definition(types)))\n                                    .build(),\n                            ))\n                            .build(),\n                    ),\n                    (\n                        \"DbPointer\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(bson::DbPointer::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n};\n\n// Technically this can be u64 for formats not marked as human readable in Serde.\n// but we have no way of inspecting that as it's runtime. This is the most common output.\n#[cfg(feature = \"bytesize\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"bytesize\")))]\nimpl_ndt!(bytesize::ByteSize as String = inline);\n\n#[cfg(feature = \"uhlc\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"uhlc\")))]\nconst _: () = {\n    impl_ndt!(\n        uhlc::NTP64 as u64 = inline;\n        uhlc::ID as std::num::NonZeroU128 = inline;\n        uhlc::Timestamp as UhlcTimestamp = inline;\n    );\n\n    struct UhlcTimestamp;\n    impl Type for UhlcTimestamp {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Struct(Struct {\n                fields: Fields::Named(NamedFields {\n                    fields: vec![\n                        (\n                            \"time\".into(),\n                            Field {\n                                optional: false,\n                                deprecated: None,\n                                docs: Default::default(),\n                                ty: Some(uhlc::NTP64::definition(types)),\n                                attributes: Attributes::default(),\n                            },\n                        ),\n                        (\n                            \"id\".into(),\n                            Field {\n                                optional: false,\n                                deprecated: None,\n                                docs: Default::default(),\n                                ty: Some(uhlc::ID::definition(types)),\n                                attributes: Attributes::default(),\n                            },\n                        ),\n                    ],\n                }),\n                attributes: Attributes::default(),\n            })\n        }\n    }\n};\n\n#[cfg(feature = \"glam\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"glam\")))]\nimpl_ndt!(\n    // Affines\n    glam::Affine2 as [f32; 6] = inline;\n    glam::Affine3A as [f32; 12] = inline;\n\n    glam::DAffine2 as [f64; 6] = inline;\n    glam::DAffine3 as [f64; 12] = inline;\n\n    // Matrices\n    glam::Mat2 as [f32; 4] = inline;\n    glam::Mat3 as [f32; 9] = inline;\n    glam::Mat3A as [f32; 9] = inline;\n    glam::Mat4 as [f32; 16] = inline;\n\n    glam::DMat2 as [f64; 4] = inline;\n    glam::DMat3 as [f64; 9] = inline;\n    glam::DMat4 as [f64; 16] = inline;\n\n    // Quaternions\n    glam::Quat as [f32; 4] = inline;\n\n    glam::DQuat as [f64; 4] = inline;\n\n    // Vectors\n    glam::Vec2 as [f32; 2] = inline;\n    glam::Vec3 as [f32; 3] = inline;\n    glam::Vec3A as [f32; 3] = inline;\n    glam::Vec4 as [f32; 4] = inline;\n\n    glam::DVec2 as [f64; 2] = inline;\n    glam::DVec3 as [f64; 3] = inline;\n    glam::DVec4 as [f64; 4] = inline;\n\n    // Implementation for https://docs.rs/glam/latest/glam/bool/index.html\n    glam::BVec2 as [bool; 2] = inline;\n    glam::BVec3 as [bool; 3] = inline;\n    glam::BVec3A as [bool; 3] = inline;\n    glam::BVec4 as [bool; 4] = inline;\n    glam::BVec4A as [bool; 4] = inline;\n\n    // Implementations for https://docs.rs/glam/latest/glam/i8/index.html\n    glam::I8Vec2 as [i8; 2] = inline;\n    glam::I8Vec3 as [i8; 3] = inline;\n    glam::I8Vec4 as [i8; 4] = inline;\n\n    // Implementations for https://docs.rs/glam/latest/glam/u8/index.html\n    glam::U8Vec2 as [u8; 2] = inline;\n    glam::U8Vec3 as [u8; 3] = inline;\n    glam::U8Vec4 as [u8; 4] = inline;\n\n    // Implementations for https://docs.rs/glam/latest/glam/i16/index.html\n    glam::I16Vec2 as [i16; 2] = inline;\n    glam::I16Vec3 as [i16; 3] = inline;\n    glam::I16Vec4 as [i16; 4] = inline;\n\n    // Implementations for https://docs.rs/glam/latest/glam/u16/index.html\n    glam::U16Vec2 as [u16; 2] = inline;\n    glam::U16Vec3 as [u16; 3] = inline;\n    glam::U16Vec4 as [u16; 4] = inline;\n\n    // Implementations for https://docs.rs/glam/latest/glam/u32/index.html\n    glam::UVec2 as [u32; 2] = inline;\n    glam::UVec3 as [u32; 3] = inline;\n    glam::UVec4 as [u32; 4] = inline;\n\n    // Implementations for https://docs.rs/glam/latest/glam/i32/index.html\n    glam::IVec2 as [i32; 2] = inline;\n    glam::IVec3 as [i32; 3] = inline;\n    glam::IVec4 as [i32; 4] = inline;\n\n    // Implementation for https://docs.rs/glam/latest/glam/i64/index.html\n    glam::I64Vec2 as [i64; 2] = inline;\n    glam::I64Vec3 as [i64; 3] = inline;\n    glam::I64Vec4 as [i64; 4] = inline;\n\n    // Implementation for https://docs.rs/glam/latest/glam/u64/index.html\n    glam::U64Vec2 as [u64; 2] = inline;\n    glam::U64Vec3 as [u64; 3] = inline;\n    glam::U64Vec4 as [u64; 4] = inline;\n\n    // implementation for https://docs.rs/glam/latest/glam/usize/index.html\n    glam::USizeVec2 as [usize; 2] = inline;\n    glam::USizeVec3 as [usize; 3] = inline;\n    glam::USizeVec4 as [usize; 4] = inline;\n\n    // implementation for https://docs.rs/glam/latest/glam/isize/index.html\n    glam::ISizeVec2 as [isize; 2] = inline;\n    glam::ISizeVec3 as [isize; 3] = inline;\n    glam::ISizeVec4 as [isize; 4] = inline;\n);\n\n#[cfg(feature = \"url\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"url\")))]\nconst _: () = {\n    impl_ndt!(\n        url::Url as str = inline;\n        url::Host as UrlHost = inline;\n    );\n\n    struct UrlHost;\n    impl Type for UrlHost {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"Domain\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(String::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Ipv4\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(std::net::Ipv4Addr::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Ipv6\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(std::net::Ipv6Addr::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n};\n\n#[cfg(feature = \"either\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"either\")))]\nconst _: () = {\n    impl_ndt!(either::Either<L, R> as Either<L, R> = inline);\n\n    struct Either<L, R>(std::marker::PhantomData<(L, R)>);\n    impl<L: Type, R: Type> Type for Either<L, R> {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"Left\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(L::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Right\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(R::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n};\n\n#[cfg(feature = \"error-stack\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"error-stack\")))]\nconst _: () = {\n    impl_ndt!(\n        \"error_stack\" ErrorStackContext as ErrorStackContextInner = named;\n        error_stack::Report<> <C> where { C: std::error::Error + Send + Sync + 'static } as ReportInner = named;\n    );\n\n    impl<C: std::error::Error + Send + Sync + 'static> Type for error_stack::Report<[C]> {\n        fn definition(types: &mut Types) -> DataType {\n            error_stack::Report::<C>::definition(types)\n        }\n    }\n\n    struct ErrorStackContext;\n\n    struct ErrorStackContextInner;\n    impl Type for ErrorStackContextInner {\n        fn definition(types: &mut Types) -> DataType {\n            let attachments = DataType::List(List::new(String::definition(types)));\n            let sources = DataType::List(List::new(ErrorStackContext::definition(types)));\n\n            Struct::named()\n                .field(\"context\", Field::new(String::definition(types)))\n                .field(\"attachments\", Field::new(attachments))\n                .field(\"sources\", Field::new(sources))\n                .build()\n        }\n    }\n\n    struct ReportInner;\n    impl Type for ReportInner {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::List(List::new(ErrorStackContext::definition(types)))\n        }\n    }\n};\n\n#[cfg(feature = \"bevy_ecs\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"bevy_ecs\")))]\nimpl_ndt!(\n    bevy_ecs::entity::Entity as u64 = named;\n    bevy_ecs::name::Name as str = named;\n    bevy_ecs::hierarchy::ChildOf as bevy_ecs::entity::Entity = named;\n    bevy_ecs::entity::EntityHashMap<V> where { V: Type } as PrimitiveMap<bevy_ecs::entity::Entity, V> = named;\n    bevy_ecs::entity::EntityHashSet as PrimitiveSet<bevy_ecs::entity::Entity> = named;\n    bevy_ecs::entity::EntityIndexMap<V> where { V: Type } as PrimitiveMap<bevy_ecs::entity::Entity, V> = named;\n    bevy_ecs::entity::EntityIndexSet as PrimitiveSet<bevy_ecs::entity::Entity> = named;\n);\n\n#[cfg(feature = \"bevy_input\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"bevy_input\")))]\nconst _: () = {\n    impl_ndt!(\n        bevy_input::ButtonState as BevyButtonState = named;\n        bevy_input::keyboard::KeyboardInput as BevyKeyboardInput = named;\n        bevy_input::keyboard::KeyboardFocusLost as BevyKeyboardFocusLost = named;\n        bevy_input::keyboard::NativeKeyCode as str = named;\n        bevy_input::keyboard::KeyCode as str = named;\n        bevy_input::keyboard::NativeKey as str = named;\n        bevy_input::keyboard::Key as str = named;\n        bevy_input::mouse::MouseButtonInput as BevyMouseButtonInput = named;\n        bevy_input::mouse::MouseButton as BevyMouseButton = named;\n        bevy_input::mouse::MouseMotion as BevyMouseMotion = named;\n        bevy_input::mouse::MouseScrollUnit as BevyMouseScrollUnit = named;\n        bevy_input::mouse::MouseWheel as BevyMouseWheel = named;\n        bevy_input::mouse::AccumulatedMouseMotion as BevyAccumulatedMouseMotion = named;\n        bevy_input::mouse::AccumulatedMouseScroll as BevyAccumulatedMouseScroll = named;\n        bevy_input::touch::TouchInput as BevyTouchInput = named;\n        bevy_input::touch::ForceTouch as BevyForceTouch = named;\n        bevy_input::touch::TouchPhase as BevyTouchPhase = named;\n        bevy_input::gestures::PinchGesture as f32 = named;\n        bevy_input::gestures::RotationGesture as f32 = named;\n        bevy_input::gestures::DoubleTapGesture as BevyDoubleTapGesture = named;\n        bevy_input::gestures::PanGesture as [f32; 2] = named;\n        bevy_input::gamepad::GamepadEvent as BevyGamepadEvent = named;\n        bevy_input::gamepad::RawGamepadEvent as BevyRawGamepadEvent = named;\n        bevy_input::gamepad::RawGamepadButtonChangedEvent as BevyRawGamepadButtonChangedEvent = named;\n        bevy_input::gamepad::RawGamepadAxisChangedEvent as BevyRawGamepadAxisChangedEvent = named;\n        bevy_input::gamepad::GamepadConnectionEvent as BevyGamepadConnectionEvent = named;\n        bevy_input::gamepad::GamepadButtonStateChangedEvent as BevyGamepadButtonStateChangedEvent = named;\n        bevy_input::gamepad::GamepadButtonChangedEvent as BevyGamepadButtonChangedEvent = named;\n        bevy_input::gamepad::GamepadAxisChangedEvent as BevyGamepadAxisChangedEvent = named;\n        bevy_input::gamepad::GamepadButton as BevyGamepadButton = named;\n        bevy_input::gamepad::GamepadAxis as BevyGamepadAxis = named;\n        bevy_input::gamepad::GamepadConnection as BevyGamepadConnection = named;\n    );\n\n    struct BevyButtonState;\n    impl Type for BevyButtonState {\n        fn definition(_: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\"Pressed\".into(), Variant::unit()),\n                    (\"Released\".into(), Variant::unit()),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyKeyboardFocusLost;\n    impl Type for BevyKeyboardFocusLost {\n        fn definition(_: &mut Types) -> DataType {\n            DataType::Struct(Struct {\n                fields: Fields::Unit,\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyKeyboardInput;\n    impl Type for BevyKeyboardInput {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"key_code\",\n                    Field::new(bevy_input::keyboard::KeyCode::definition(types)),\n                )\n                .field(\n                    \"logical_key\",\n                    Field::new(bevy_input::keyboard::Key::definition(types)),\n                )\n                .field(\n                    \"state\",\n                    Field::new(bevy_input::ButtonState::definition(types)),\n                )\n                .field(\n                    \"text\",\n                    Field::new(Option::<smol_str::SmolStr>::definition(types)),\n                )\n                .field(\"repeat\", Field::new(bool::definition(types)))\n                .field(\n                    \"window\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .build()\n        }\n    }\n\n    struct BevyMouseButtonInput;\n    impl Type for BevyMouseButtonInput {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"button\",\n                    Field::new(bevy_input::mouse::MouseButton::definition(types)),\n                )\n                .field(\n                    \"state\",\n                    Field::new(bevy_input::ButtonState::definition(types)),\n                )\n                .field(\n                    \"window\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .build()\n        }\n    }\n\n    struct BevyMouseButton;\n    impl Type for BevyMouseButton {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\"Left\".into(), Variant::unit()),\n                    (\"Right\".into(), Variant::unit()),\n                    (\"Middle\".into(), Variant::unit()),\n                    (\"Back\".into(), Variant::unit()),\n                    (\"Forward\".into(), Variant::unit()),\n                    (\n                        \"Other\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(u16::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyMouseMotion;\n    impl Type for BevyMouseMotion {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"delta\", Field::new(<[f32; 2]>::definition(types)))\n                .build()\n        }\n    }\n\n    struct BevyMouseScrollUnit;\n    impl Type for BevyMouseScrollUnit {\n        fn definition(_: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\"Line\".into(), Variant::unit()),\n                    (\"Pixel\".into(), Variant::unit()),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyMouseWheel;\n    impl Type for BevyMouseWheel {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"unit\",\n                    Field::new(bevy_input::mouse::MouseScrollUnit::definition(types)),\n                )\n                .field(\"x\", Field::new(f32::definition(types)))\n                .field(\"y\", Field::new(f32::definition(types)))\n                .field(\n                    \"window\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .field(\n                    \"phase\",\n                    Field::new(bevy_input::touch::TouchPhase::definition(types)),\n                )\n                .build()\n        }\n    }\n\n    struct BevyAccumulatedMouseMotion;\n    impl Type for BevyAccumulatedMouseMotion {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\"delta\", Field::new(<[f32; 2]>::definition(types)))\n                .build()\n        }\n    }\n\n    struct BevyAccumulatedMouseScroll;\n    impl Type for BevyAccumulatedMouseScroll {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"unit\",\n                    Field::new(bevy_input::mouse::MouseScrollUnit::definition(types)),\n                )\n                .field(\"delta\", Field::new(<[f32; 2]>::definition(types)))\n                .build()\n        }\n    }\n\n    struct BevyTouchInput;\n    impl Type for BevyTouchInput {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"phase\",\n                    Field::new(bevy_input::touch::TouchPhase::definition(types)),\n                )\n                .field(\"position\", Field::new(<[f32; 2]>::definition(types)))\n                .field(\n                    \"window\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .field(\n                    \"force\",\n                    Field::new(Option::<bevy_input::touch::ForceTouch>::definition(types)),\n                )\n                .field(\"id\", Field::new(u64::definition(types)))\n                .build()\n        }\n    }\n\n    struct BevyForceTouch;\n    impl Type for BevyForceTouch {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"Calibrated\".into(),\n                        Variant::named()\n                            .field(\"force\", Field::new(f64::definition(types)))\n                            .field(\"max_possible_force\", Field::new(f64::definition(types)))\n                            .field(\n                                \"altitude_angle\",\n                                Field::new(Option::<f64>::definition(types)),\n                            )\n                            .build(),\n                    ),\n                    (\n                        \"Normalized\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(f64::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyTouchPhase;\n    impl Type for BevyTouchPhase {\n        fn definition(_: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\"Started\".into(), Variant::unit()),\n                    (\"Moved\".into(), Variant::unit()),\n                    (\"Ended\".into(), Variant::unit()),\n                    (\"Canceled\".into(), Variant::unit()),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyDoubleTapGesture;\n    impl Type for BevyDoubleTapGesture {\n        fn definition(_: &mut Types) -> DataType {\n            DataType::Struct(Struct {\n                fields: Fields::Unit,\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyGamepadEvent;\n    impl Type for BevyGamepadEvent {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"Connection\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                bevy_input::gamepad::GamepadConnectionEvent::definition(types),\n                            ))\n                            .build(),\n                    ),\n                    (\n                        \"Button\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                bevy_input::gamepad::GamepadButtonChangedEvent::definition(types),\n                            ))\n                            .build(),\n                    ),\n                    (\n                        \"Axis\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                bevy_input::gamepad::GamepadAxisChangedEvent::definition(types),\n                            ))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyRawGamepadEvent;\n    impl Type for BevyRawGamepadEvent {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"Connection\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                bevy_input::gamepad::GamepadConnectionEvent::definition(types),\n                            ))\n                            .build(),\n                    ),\n                    (\n                        \"Button\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                bevy_input::gamepad::RawGamepadButtonChangedEvent::definition(\n                                    types,\n                                ),\n                            ))\n                            .build(),\n                    ),\n                    (\n                        \"Axis\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(\n                                bevy_input::gamepad::RawGamepadAxisChangedEvent::definition(types),\n                            ))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyRawGamepadButtonChangedEvent;\n    impl Type for BevyRawGamepadButtonChangedEvent {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"gamepad\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .field(\n                    \"button\",\n                    Field::new(bevy_input::gamepad::GamepadButton::definition(types)),\n                )\n                .field(\"value\", Field::new(f32::definition(types)))\n                .build()\n        }\n    }\n\n    struct BevyRawGamepadAxisChangedEvent;\n    impl Type for BevyRawGamepadAxisChangedEvent {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"gamepad\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .field(\n                    \"axis\",\n                    Field::new(bevy_input::gamepad::GamepadAxis::definition(types)),\n                )\n                .field(\"value\", Field::new(f32::definition(types)))\n                .build()\n        }\n    }\n\n    struct BevyGamepadConnectionEvent;\n    impl Type for BevyGamepadConnectionEvent {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"gamepad\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .field(\n                    \"connection\",\n                    Field::new(bevy_input::gamepad::GamepadConnection::definition(types)),\n                )\n                .build()\n        }\n    }\n\n    struct BevyGamepadButtonStateChangedEvent;\n    impl Type for BevyGamepadButtonStateChangedEvent {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"entity\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .field(\n                    \"button\",\n                    Field::new(bevy_input::gamepad::GamepadButton::definition(types)),\n                )\n                .field(\n                    \"state\",\n                    Field::new(bevy_input::ButtonState::definition(types)),\n                )\n                .build()\n        }\n    }\n\n    struct BevyGamepadButtonChangedEvent;\n    impl Type for BevyGamepadButtonChangedEvent {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"entity\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .field(\n                    \"button\",\n                    Field::new(bevy_input::gamepad::GamepadButton::definition(types)),\n                )\n                .field(\n                    \"state\",\n                    Field::new(bevy_input::ButtonState::definition(types)),\n                )\n                .field(\"value\", Field::new(f32::definition(types)))\n                .build()\n        }\n    }\n\n    struct BevyGamepadAxisChangedEvent;\n    impl Type for BevyGamepadAxisChangedEvent {\n        fn definition(types: &mut Types) -> DataType {\n            Struct::named()\n                .field(\n                    \"entity\",\n                    Field::new(bevy_ecs::entity::Entity::definition(types)),\n                )\n                .field(\n                    \"axis\",\n                    Field::new(bevy_input::gamepad::GamepadAxis::definition(types)),\n                )\n                .field(\"value\", Field::new(f32::definition(types)))\n                .build()\n        }\n    }\n\n    struct BevyGamepadButton;\n    impl Type for BevyGamepadButton {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\"South\".into(), Variant::unit()),\n                    (\"East\".into(), Variant::unit()),\n                    (\"North\".into(), Variant::unit()),\n                    (\"West\".into(), Variant::unit()),\n                    (\"C\".into(), Variant::unit()),\n                    (\"Z\".into(), Variant::unit()),\n                    (\"LeftTrigger\".into(), Variant::unit()),\n                    (\"LeftTrigger2\".into(), Variant::unit()),\n                    (\"RightTrigger\".into(), Variant::unit()),\n                    (\"RightTrigger2\".into(), Variant::unit()),\n                    (\"Select\".into(), Variant::unit()),\n                    (\"Start\".into(), Variant::unit()),\n                    (\"Mode\".into(), Variant::unit()),\n                    (\"LeftThumb\".into(), Variant::unit()),\n                    (\"RightThumb\".into(), Variant::unit()),\n                    (\"DPadUp\".into(), Variant::unit()),\n                    (\"DPadDown\".into(), Variant::unit()),\n                    (\"DPadLeft\".into(), Variant::unit()),\n                    (\"DPadRight\".into(), Variant::unit()),\n                    (\n                        \"Other\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(u8::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyGamepadAxis;\n    impl Type for BevyGamepadAxis {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\"LeftStickX\".into(), Variant::unit()),\n                    (\"LeftStickY\".into(), Variant::unit()),\n                    (\"LeftZ\".into(), Variant::unit()),\n                    (\"RightStickX\".into(), Variant::unit()),\n                    (\"RightStickY\".into(), Variant::unit()),\n                    (\"RightZ\".into(), Variant::unit()),\n                    (\n                        \"Other\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(u8::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n\n    struct BevyGamepadConnection;\n    impl Type for BevyGamepadConnection {\n        fn definition(types: &mut Types) -> DataType {\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"Connected\".into(),\n                        Variant::named()\n                            .field(\"name\", Field::new(String::definition(types)))\n                            .field(\"vendor_id\", Field::new(Option::<u16>::definition(types)))\n                            .field(\"product_id\", Field::new(Option::<u16>::definition(types)))\n                            .build(),\n                    ),\n                    (\"Disconnected\".into(), Variant::unit()),\n                ],\n                attributes: Attributes::default(),\n            })\n        }\n    }\n};\n\n#[cfg(feature = \"camino\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"camino\")))]\nimpl_ndt!(\n    camino::Utf8Path as str = inline;\n    camino::Utf8PathBuf as str = inline;\n);\n\n#[cfg(feature = \"geojson\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"geojson\")))]\nconst _: () = {\n    impl_ndt!(\n        geojson::Position as [f64] = inline;\n        geojson::GeoJson as GeoJson = inline;\n        geojson::GeometryValue as GeoJsonGeometryValue = inline;\n        geojson::Geometry as GeoJsonGeometry = inline;\n        geojson::Feature as GeoJsonFeature = inline;\n        geojson::FeatureCollection as GeoJsonFeatureCollection = inline;\n        geojson::feature::Id as GeoJsonFeatureId = inline;\n    );\n\n    struct GeoJson;\n    impl Type for GeoJson {\n        fn definition(types: &mut Types) -> DataType {\n            let mut attributes = Attributes::default();\n            attributes.insert(\"serde:container:untagged\", true);\n\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"Geometry\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(geojson::Geometry::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Feature\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(geojson::Feature::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"FeatureCollection\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(geojson::FeatureCollection::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes,\n            })\n        }\n    }\n\n    struct GeoJsonGeometryValue;\n    impl Type for GeoJsonGeometryValue {\n        fn definition(types: &mut Types) -> DataType {\n            let mut attributes = Attributes::default();\n            attributes.insert(\"serde:container:tag\", std::string::String::from(\"type\"));\n\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"Point\".into(),\n                        Variant::named()\n                            .field(\n                                \"coordinates\",\n                                Field::new(geojson::PointType::definition(types)),\n                            )\n                            .build(),\n                    ),\n                    (\n                        \"MultiPoint\".into(),\n                        Variant::named()\n                            .field(\n                                \"coordinates\",\n                                Field::new(Vec::<geojson::PointType>::definition(types)),\n                            )\n                            .build(),\n                    ),\n                    (\n                        \"LineString\".into(),\n                        Variant::named()\n                            .field(\n                                \"coordinates\",\n                                Field::new(geojson::LineStringType::definition(types)),\n                            )\n                            .build(),\n                    ),\n                    (\n                        \"MultiLineString\".into(),\n                        Variant::named()\n                            .field(\n                                \"coordinates\",\n                                Field::new(Vec::<geojson::LineStringType>::definition(types)),\n                            )\n                            .build(),\n                    ),\n                    (\n                        \"Polygon\".into(),\n                        Variant::named()\n                            .field(\n                                \"coordinates\",\n                                Field::new(geojson::PolygonType::definition(types)),\n                            )\n                            .build(),\n                    ),\n                    (\n                        \"MultiPolygon\".into(),\n                        Variant::named()\n                            .field(\n                                \"coordinates\",\n                                Field::new(Vec::<geojson::PolygonType>::definition(types)),\n                            )\n                            .build(),\n                    ),\n                    (\n                        \"GeometryCollection\".into(),\n                        Variant::named()\n                            .field(\n                                \"geometries\",\n                                Field::new(Vec::<geojson::Geometry>::definition(types)),\n                            )\n                            .build(),\n                    ),\n                ],\n                attributes,\n            })\n        }\n    }\n\n    struct GeoJsonGeometry;\n    impl Type for GeoJsonGeometry {\n        fn definition(types: &mut Types) -> DataType {\n            let mut value = Field::new(geojson::GeometryValue::definition(types));\n            value.attributes.insert(\"serde:field:flatten\", true);\n\n            let mut foreign_members = Field::new(Option::<geojson::JsonObject>::definition(types));\n            foreign_members\n                .attributes\n                .insert(\"serde:field:flatten\", true);\n\n            Struct::named()\n                .field(\n                    \"bbox\",\n                    Field::new(Option::<geojson::Bbox>::definition(types)),\n                )\n                .field(\"value\", value)\n                .field(\"foreign_members\", foreign_members)\n                .build()\n        }\n    }\n\n    struct GeoJsonFeature;\n    impl Type for GeoJsonFeature {\n        fn definition(types: &mut Types) -> DataType {\n            let mut attributes = Attributes::default();\n            attributes.insert(\"serde:container:tag\", std::string::String::from(\"type\"));\n\n            let mut foreign_members = Field::new(Option::<geojson::JsonObject>::definition(types));\n            foreign_members\n                .attributes\n                .insert(\"serde:field:flatten\", true);\n\n            DataType::Struct(Struct {\n                fields: Fields::Named(NamedFields {\n                    fields: vec![\n                        (\n                            \"bbox\".into(),\n                            Field::new(Option::<geojson::Bbox>::definition(types)),\n                        ),\n                        (\n                            \"geometry\".into(),\n                            Field::new(Option::<geojson::Geometry>::definition(types)),\n                        ),\n                        (\n                            \"id\".into(),\n                            Field::new(Option::<geojson::feature::Id>::definition(types)),\n                        ),\n                        (\n                            \"properties\".into(),\n                            Field::new(Option::<geojson::JsonObject>::definition(types)),\n                        ),\n                        (\"foreign_members\".into(), foreign_members),\n                    ],\n                }),\n                attributes,\n            })\n        }\n    }\n\n    struct GeoJsonFeatureCollection;\n    impl Type for GeoJsonFeatureCollection {\n        fn definition(types: &mut Types) -> DataType {\n            let mut attributes = Attributes::default();\n            attributes.insert(\"serde:container:tag\", std::string::String::from(\"type\"));\n\n            let mut foreign_members = Field::new(Option::<geojson::JsonObject>::definition(types));\n            foreign_members\n                .attributes\n                .insert(\"serde:field:flatten\", true);\n\n            DataType::Struct(Struct {\n                fields: Fields::Named(NamedFields {\n                    fields: vec![\n                        (\n                            \"bbox\".into(),\n                            Field::new(Option::<geojson::Bbox>::definition(types)),\n                        ),\n                        (\n                            \"features\".into(),\n                            Field::new(Vec::<geojson::Feature>::definition(types)),\n                        ),\n                        (\"foreign_members\".into(), foreign_members),\n                    ],\n                }),\n                attributes,\n            })\n        }\n    }\n\n    struct GeoJsonFeatureId;\n    impl Type for GeoJsonFeatureId {\n        fn definition(types: &mut Types) -> DataType {\n            let mut attributes = Attributes::default();\n            attributes.insert(\"serde:container:untagged\", true);\n\n            DataType::Enum(Enum {\n                variants: vec![\n                    (\n                        \"String\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(str::definition(types)))\n                            .build(),\n                    ),\n                    (\n                        \"Number\".into(),\n                        Variant::unnamed()\n                            .field(Field::new(serde_json::Number::definition(types)))\n                            .build(),\n                    ),\n                ],\n                attributes,\n            })\n        }\n    }\n};\n"
  },
  {
    "path": "specta/src/type/macros.rs",
    "content": "macro_rules! _impl_primitives {\n    ($($i:ident)+) => {$(\n        impl Type for $i {\n            fn definition(_: &mut Types) -> DataType {\n                DataType::Primitive(datatype::Primitive::$i)\n            }\n        }\n    )+};\n}\n\nmacro_rules! _impl_tuple {\n    ( impl $($i:ident),* ) => {\n        #[allow(non_snake_case)]\n        impl<$($i: Type),*> Type for ($($i,)*) {\n            fn definition(_types: &mut Types) -> DataType {\n                DataType::Tuple(datatype::Tuple {\n                    elements: vec![$(<$i as Type>::definition(_types)),*],\n                })\n            }\n        }\n    };\n    ( $i2:ident $(, $i:ident)* ) => {\n        impl_tuple!(impl $($i),* );\n        impl_tuple!($($i),*);\n    };\n    () => {};\n}\n\nmacro_rules! _impl_ndt {\n    () => {};\n\n    // Multiple types\n    (\n        $module_path:literal $ty:ident\n        $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)?\n        $( where { $($bounds:tt)* } )?\n        as $as_ty:ty = $kind:ident;\n        $($rest:tt)*\n    ) => {\n        impl_ndt!(@single\n            $module_path $ty\n            $(< $( $lifetime, )* $( $generic ),* >)?\n            $( where { $($bounds)* } )?\n            as $as_ty = $kind\n        );\n        impl_ndt!($($rest)*);\n    };\n    (\n        $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? >\n        < $( $impl_generic:ident ),+ $(,)? >\n        $( where { $($bounds:tt)* } )?\n        as $as_ty:ty = $kind:ident;\n        $($rest:tt)*\n    ) => {\n        impl_ndt!(@single\n            $head :: $( $tail )::+ < $( $specta_generic ),* >\n            < $( $impl_generic ),* >\n            $( where { $($bounds)* } )?\n            as $as_ty = $kind\n        );\n        impl_ndt!($($rest)*);\n    };\n    (\n        $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? >\n        < $first_impl_generic:ident, $second_impl_generic:ident, $third_impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? >\n        $( where { $($bounds:tt)* } )?\n        as $as_ty:ty = $kind:ident;\n        $($rest:tt)*\n    ) => {\n        impl_ndt!(@single\n            $head :: $( $tail )::+ < $( $specta_generic ),* >\n            < $first_impl_generic, $second_impl_generic, $third_impl_generic, $( const $const_generic : $const_ty ),* >\n            $( where { $($bounds)* } )?\n            as $as_ty = $kind\n        );\n        impl_ndt!($($rest)*);\n    };\n    (\n        $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? >\n        < $first_impl_generic:ident, $second_impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? >\n        $( where { $($bounds:tt)* } )?\n        as $as_ty:ty = $kind:ident;\n        $($rest:tt)*\n    ) => {\n        impl_ndt!(@single\n            $head :: $( $tail )::+ < $( $specta_generic ),* >\n            < $first_impl_generic, $second_impl_generic, $( const $const_generic : $const_ty ),* >\n            $( where { $($bounds)* } )?\n            as $as_ty = $kind\n        );\n        impl_ndt!($($rest)*);\n    };\n    (\n        $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? >\n        < $first_impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+, $( $rest_impl_generic:ident ),+ $(,)? >\n        $( where { $($bounds:tt)* } )?\n        as $as_ty:ty = $kind:ident;\n        $($rest:tt)*\n    ) => {\n        impl_ndt!(@single\n            $head :: $( $tail )::+ < $( $specta_generic ),* >\n            < $first_impl_generic, $( const $const_generic : $const_ty, )* $( $rest_impl_generic ),* >\n            $( where { $($bounds)* } )?\n            as $as_ty = $kind\n        );\n        impl_ndt!($($rest)*);\n    };\n    (\n        $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? >\n        < $impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? >\n        $( where { $($bounds:tt)* } )?\n        as $as_ty:ty = $kind:ident;\n        $($rest:tt)*\n    ) => {\n        impl_ndt!(@single\n            $head :: $( $tail )::+ < $( $specta_generic ),* >\n            < $impl_generic, $( const $const_generic : $const_ty ),* >\n            $( where { $($bounds)* } )?\n            as $as_ty = $kind\n        );\n        impl_ndt!($($rest)*);\n    };\n    (\n        $head:ident :: $( $tail:ident )::+ < $( const $const_generic:ident : $const_ty:ty ),+ $(,)? >\n        $( where { $($bounds:tt)* } )?\n        as $as_ty:ty = $kind:ident;\n        $($rest:tt)*\n    ) => {\n        impl_ndt!(@single\n            $head :: $( $tail )::+ < $( const $const_generic : $const_ty ),* >\n            $( where { $($bounds)* } )?\n            as $as_ty = $kind\n        );\n        impl_ndt!($($rest)*);\n    };\n    (\n        $head:ident :: $( $tail:ident )::+ < $( const $const_generic:ident : $const_ty:ty ),+, $( $rest_impl_generic:ident ),+ $(,)? >\n        $( where { $($bounds:tt)* } )?\n        as $as_ty:ty = $kind:ident;\n        $($rest:tt)*\n    ) => {\n        impl_ndt!(@single\n            $head :: $( $tail )::+ < $( const $const_generic : $const_ty, )* $( $rest_impl_generic ),* >\n            $( where { $($bounds)* } )?\n            as $as_ty = $kind\n        );\n        impl_ndt!($($rest)*);\n    };\n    (\n        $head:ident :: $( $tail:ident )::+ < $impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? >\n        $( where { $($bounds:tt)* } )?\n        as $as_ty:ty = $kind:ident;\n        $($rest:tt)*\n    ) => {\n        impl_ndt!(@single\n            $head :: $( $tail )::+ < $impl_generic, $( const $const_generic : $const_ty ),* >\n            $( where { $($bounds)* } )?\n            as $as_ty = $kind\n        );\n        impl_ndt!($($rest)*);\n    };\n    (\n        $(\n            $head:ident :: $( $tail:ident )::+\n            $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)?\n            $( where { $($bounds:tt)* } )?\n            as $as_ty:ty = $kind:ident\n        );+ $(;)?\n    ) => {\n        $(\n            impl_ndt!(@single\n                $head :: $( $tail )::+\n                $(< $( $lifetime, )* $( $generic ),* >)?\n                $( where { $($bounds)* } )?\n                as $as_ty = $kind\n            );\n        )+\n    };\n\n    // Single type\n    (@single $module_path:literal $ty:ident $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(@kind inline $module_path $ty $(< $( $lifetime, )* $( $generic ),* >)? $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $module_path:literal $ty:ident $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(@kind passthrough $module_path $ty $(< $( $lifetime, )* $( $generic ),* >)? $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $module_path:literal $ty:ident $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? $( where { $($bounds:tt)* } )? as $as_ty:ty = named) => {\n        impl_ndt!(@kind named $module_path $ty $(< $( $lifetime, )* $( $generic ),* >)? $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $( $impl_generic:ident ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(true, false [$( $specta_generic ),*] [$( $impl_generic, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $( $impl_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $( $impl_generic:ident ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(false, true [$( $specta_generic ),*] [$( $impl_generic, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $( $impl_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $( $impl_generic:ident ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = named) => {\n        impl_ndt!(false, false [$( $specta_generic ),*] [$( $impl_generic, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $( $impl_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $first_impl_generic:ident, $second_impl_generic:ident, $third_impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(true, false [$( $specta_generic ),*] [$first_impl_generic, $second_impl_generic, $third_impl_generic, $( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $first_impl_generic, $second_impl_generic, $third_impl_generic, $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $first_impl_generic:ident, $second_impl_generic:ident, $third_impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(false, true [$( $specta_generic ),*] [$first_impl_generic, $second_impl_generic, $third_impl_generic, $( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $first_impl_generic, $second_impl_generic, $third_impl_generic, $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $first_impl_generic:ident, $second_impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(true, false [$( $specta_generic ),*] [$first_impl_generic, $second_impl_generic, $( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $first_impl_generic, $second_impl_generic, $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $first_impl_generic:ident, $second_impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(false, true [$( $specta_generic ),*] [$first_impl_generic, $second_impl_generic, $( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $first_impl_generic, $second_impl_generic, $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $first_impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+, $( $rest_impl_generic:ident ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(true, false [$( $specta_generic ),*] [$first_impl_generic, $( const $const_generic : $const_ty, )* $( $rest_impl_generic, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $first_impl_generic, $( $const_generic, )* $( $rest_impl_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $first_impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+, $( $rest_impl_generic:ident ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(false, true [$( $specta_generic ),*] [$first_impl_generic, $( const $const_generic : $const_ty, )* $( $rest_impl_generic, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $first_impl_generic, $( $const_generic, )* $( $rest_impl_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(true, false [$( $specta_generic ),*] [$impl_generic, $( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $impl_generic, $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( $specta_generic:ident ),* $(,)? > < $impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(false, true [$( $specta_generic ),*] [$impl_generic, $( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [< $( $specta_generic ),* >] [< $impl_generic, $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(true, false [] [$( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [] [< $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(false, true [] [$( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [] [< $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( const $const_generic:ident : $const_ty:ty ),+, $( $rest_impl_generic:ident ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(true, false [] [$( const $const_generic : $const_ty, )* $( $rest_impl_generic, )*] [$head :: $( $tail )::+] [] [< $( $const_generic, )* $( $rest_impl_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $( const $const_generic:ident : $const_ty:ty ),+, $( $rest_impl_generic:ident ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(false, true [] [$( const $const_generic : $const_ty, )* $( $rest_impl_generic, )*] [$head :: $( $tail )::+] [] [< $( $const_generic, )* $( $rest_impl_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(true, false [$impl_generic] [$impl_generic, $( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [< $impl_generic >] [< $impl_generic, $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ < $impl_generic:ident, $( const $const_generic:ident : $const_ty:ty ),+ $(,)? > $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(false, true [$impl_generic] [$impl_generic, $( const $const_generic : $const_ty, )*] [$head :: $( $tail )::+] [< $impl_generic >] [< $impl_generic, $( $const_generic ),* >] $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? $( where { $($bounds:tt)* } )? as $as_ty:ty = inline) => {\n        impl_ndt!(@kind inline $head :: $( $tail )::+ $(< $( $lifetime, )* $( $generic ),* >)? $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? $( where { $($bounds:tt)* } )? as $as_ty:ty = passthrough) => {\n        impl_ndt!(@kind passthrough $head :: $( $tail )::+ $(< $( $lifetime, )* $( $generic ),* >)? $( where { $($bounds)* } )? as $as_ty);\n    };\n    (@single $head:ident :: $( $tail:ident )::+ $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? $( where { $($bounds:tt)* } )? as $as_ty:ty = named) => {\n        impl_ndt!(@kind named $head :: $( $tail )::+ $(< $( $lifetime, )* $( $generic ),* >)? $( where { $($bounds)* } )? as $as_ty);\n    };\n\n    (@kind inline $($tokens:tt)*) => {\n        impl_ndt!(true, false $($tokens)*);\n    };\n    (@kind passthrough $($tokens:tt)*) => {\n        impl_ndt!(false, true $($tokens)*);\n    };\n    (@kind named $($tokens:tt)*) => {\n        impl_ndt!(false, false $($tokens)*);\n    };\n\n    // Base implementation. Providing a where clause opts out of automatic Type bounds so\n    // callers can use non-Specta impl generics.\n    ($inline:literal, $container:literal $module_path:literal $ty:ident $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? where { $($bounds:tt)* } as $as_ty:ty) => {\n        impl<$( $( $lifetime, )* $( $generic ),* )?> Type for $ty $(< $( $lifetime, )* $( $generic ),* >)?\n        where\n            $($bounds)*\n        {\n            fn definition(types: &mut Types) -> DataType {\n                use $crate::datatype;\n\n                impl_ndt!(@definition_body false stringify!($ty $(< $( $generic ),* >)?), [$( $( $generic ),* )?], [$ty $(< $( $generic ),* >)?], $module_path, $inline, $container, $as_ty, types)\n            }\n        }\n    };\n    ($inline:literal, $container:literal $module_path:literal $ty:ident $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? as $as_ty:ty) => {\n        impl<$( $( $lifetime, )* $( $generic ),* )?> Type for $ty $(< $( $lifetime, )* $( $generic ),* >)?\n        where\n            $(\n                $( $generic: Type, )*\n            )?\n        {\n            fn definition(types: &mut Types) -> DataType {\n                use $crate::datatype;\n\n                impl_ndt!(@definition_body true stringify!($ty $(< $( $generic ),* >)?), [$( $( $generic ),* )?], [$ty $(< $( $generic ),* >)?], $module_path, $inline, $container, $as_ty, types)\n            }\n        }\n    };\n    ($inline:literal, $container:literal $head:ident :: $( $tail:ident )::+ $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? where { $($bounds:tt)* } as $as_ty:ty) => {\n        impl<$( $( $lifetime, )* $( $generic ),* )?> Type for $head :: $( $tail )::+ $(< $( $lifetime, )* $( $generic ),* >)?\n        where\n            $($bounds)*\n        {\n            fn definition(types: &mut Types) -> DataType {\n                use $crate::datatype;\n\n                impl_ndt!(@definition_body false stringify!($head::$( $tail )::+ $(< $( $generic ),* >)?), [$( $( $generic ),* )?], [$head :: $( $tail )::+ $(< $( $generic ),* >)?], impl_ndt!(@module_path $head :: $( $tail )::+), $inline, $container, $as_ty, types)\n            }\n        }\n    };\n    ($inline:literal, $container:literal $head:ident :: $( $tail:ident )::+ $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)? as $as_ty:ty) => {\n        impl<$( $( $lifetime, )* $( $generic ),* )?> Type for $head :: $( $tail )::+ $(< $( $lifetime, )* $( $generic ),* >)?\n        where\n            $(\n                $( $generic: Type, )*\n            )?\n        {\n            fn definition(types: &mut Types) -> DataType {\n                use $crate::datatype;\n\n                impl_ndt!(@definition_body true stringify!($head::$( $tail )::+ $(< $( $generic ),* >)?), [$( $( $generic ),* )?], [$head :: $( $tail )::+ $(< $( $generic ),* >)?], impl_ndt!(@module_path $head :: $( $tail )::+), $inline, $container, $as_ty, types)\n            }\n        }\n    };\n\n    // Base implementation for types with const generics. Const generics are part of the Rust\n    // implementation but not Specta generic definitions.\n    ($inline:literal, $container:literal [$($generic:ident),*] [$($impl_generics:tt)*] [$($ty:tt)*] [$($specta_generics:tt)*] [$($ty_generics:tt)*] where { $($bounds:tt)* } as $as_ty:ty) => {\n        impl<$($impl_generics)*> Type for $($ty)* $($ty_generics)*\n        where\n            $($bounds)*\n        {\n            fn definition(types: &mut Types) -> DataType {\n                use $crate::datatype;\n\n                impl_ndt!(@definition_body_const false stringify!($($ty)* $($ty_generics)*), [$($generic),*], [$($ty)* $($specta_generics)*], impl_ndt!(@module_path $($ty)*), $inline, $container, $as_ty, types)\n            }\n        }\n    };\n    ($inline:literal, $container:literal [$($generic:ident),*] [$($impl_generics:tt)*] [$($ty:tt)*] [$($specta_generics:tt)*] [$($ty_generics:tt)*] as $as_ty:ty) => {\n        impl<$($impl_generics)*> Type for $($ty)* $($ty_generics)*\n        where\n            $($generic: Type,)*\n        {\n            fn definition(types: &mut Types) -> DataType {\n                use $crate::datatype;\n\n                impl_ndt!(@definition_body_const true stringify!($($ty)* $($ty_generics)*), [$($generic),*], [$($ty)* $($specta_generics)*], impl_ndt!(@module_path $($ty)*), $inline, $container, $as_ty, types)\n            }\n        }\n    };\n\n    (@definition_body $typed_generics:tt $sentinel:expr, [$($generic:ident),*], [$($type_name:tt)*], $module_path:expr, $inline:literal, $container:literal, $as_ty:ty, $types:ident) => {{\n        impl_ndt!(@definition_body_inner false, $typed_generics $sentinel, [$($generic),*], [$($type_name)*], $module_path, $inline, $container, $as_ty, $types)\n    }};\n    (@definition_body_const $typed_generics:tt $sentinel:expr, [$($generic:ident),*], [$($type_name:tt)*], $module_path:expr, $inline:literal, $container:literal, $as_ty:ty, $types:ident) => {{\n        impl_ndt!(@definition_body_inner true, $typed_generics $sentinel, [$($generic),*], [$($type_name)*], $module_path, $inline, $container, $as_ty, $types)\n    }};\n\n    // Helpers for determining NDT name\n    (@definition_body_inner $has_const_param:literal, $typed_generics:tt $sentinel:expr, [$($generic:ident),*], [$($type_name:tt)*], $module_path:expr, $inline:literal, $container:literal, $as_ty:ty, $types:ident) => {{\n        static SENTINEL: &str = $sentinel;\n        static GENERICS: &[datatype::GenericDefinition] = &[\n            $(\n                datatype::GenericDefinition::new(\n                    ::std::borrow::Cow::Borrowed(stringify!($generic)),\n                    None,\n                ),\n            )*\n        ];\n\n        let definition = |types: &mut Types| {\n            DataType::Reference(datatype::NamedDataType::init_with_sentinel(\n                SENTINEL,\n                &[\n                    $(\n                        (\n                            datatype::Generic::new(::std::borrow::Cow::Borrowed(stringify!($generic))),\n                            impl_ndt!(@generic_dt $typed_generics $generic types),\n                        ),\n                    )*\n                ],\n                $has_const_param,\n                $container,\n                types,\n                |types, ndt| {\n                    ndt.name = ::std::borrow::Cow::Borrowed(impl_ndt!(@type_name $($type_name)*));\n                    ndt.module_path = ::std::borrow::Cow::Borrowed($module_path);\n                    ndt.generics = ::std::borrow::Cow::Borrowed(GENERICS);\n                    if !$inline && !$container {\n                        $(\n                            #[allow(dead_code)]\n                            pub(crate) struct $generic;\n                            impl Type for $generic {\n                                fn definition(_: &mut Types) -> DataType {\n                                    datatype::Generic::new(\n                                        ::std::borrow::Cow::Borrowed(stringify!($generic))\n                                    ).into()\n                                }\n                            }\n                        )*\n                        ndt.ty = Some(<$as_ty as Type>::definition(types));\n                    }\n                },\n                |types| <$as_ty as Type>::definition(types),\n            ))\n        };\n\n        if $inline {\n            datatype::inline($types, definition)\n        } else {\n            definition($types)\n        }\n    }};\n    (@generic_dt true $generic:ident $types:ident) => {\n        <$generic as Type>::definition($types)\n    };\n    (@generic_dt false $generic:ident $types:ident) => {\n        datatype::Generic::new(::std::borrow::Cow::Borrowed(stringify!($generic))).into()\n    };\n\n    // Helpers for determining NDT name\n    (@type_name $head:ident :: $( $tail:ident )::+ $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)?) => {\n        impl_ndt!(@type_name $( $tail )::+ $(< $( $lifetime, )* $( $generic ),* >)?)\n    };\n    (@type_name $name:ident $(< $( $lifetime:lifetime, )* $( $generic:ident ),* $(,)? >)?) => {\n        stringify!($name)\n    };\n\n    // Helpers for determining NDT module path\n    (@module_path $head:ident :: $name:ident) => {\n        stringify!($head)\n    };\n    (@module_path $head:ident :: $next:ident :: $( $tail:ident )::+) => {\n        concat!(\n            stringify!($head),\n            \"::\",\n            impl_ndt!(@module_path $next :: $( $tail )::+)\n        )\n    };\n}\n\n#[allow(unused_imports)]\npub(crate) use _impl_ndt as impl_ndt;\npub(crate) use _impl_primitives as impl_primitives;\npub(crate) use _impl_tuple as impl_tuple;\n"
  },
  {
    "path": "specta/src/type.rs",
    "content": "use crate::{Types, datatype::DataType};\n\nmod impls;\nmod legacy_impls;\nmod macros;\n\n/// Provides runtime type information for a Rust type.\n///\n/// Exporters call this trait to build a [`DataType`] graph and collect any\n/// referenced named types into [`Types`]. Prefer deriving this trait with\n/// [`#[derive(Type)]`](derive@crate::Type); hand-written implementations must\n/// preserve the same invariants as the derive macro.\n///\n/// # Invariants\n///\n/// Implementations should register every named dependency they reference in the\n/// provided [`Types`] collection. Generic placeholders should only be emitted\n/// inside the canonical [`NamedDataType`](crate::datatype::NamedDataType)\n/// definition for the declaring type, not as arbitrary top-level results.\n///\n#[diagnostic::on_unimplemented(\n    message = \"the trait `specta::Type` is not implemented for `{Self}`\",\n    label = \"`{Self}` must implement `Type`\",\n    note = \"Depending on your use case, this can be fixed in multiple ways:\n - If your using an type defined in one of your own crates, ensure you have `#[derive(specta::Type)]` on it.\n - If your using a crate with official Specta support, enable the matching feature flag on the `specta` crate.\n - If your using an external crate without Specta support, you may need to wrap your type in a new-type wrapper.\n\"\n)]\npub trait Type {\n    /// Returns a [`DataType`] that represents `Self`.\n    ///\n    /// This may mutate `types` by registering `Self` and any named datatypes\n    /// needed by the returned definition.\n    fn definition(types: &mut Types) -> DataType;\n}\n"
  },
  {
    "path": "specta/src/types.rs",
    "content": "use std::{\n    collections::{HashMap, hash_map},\n    fmt,\n};\n\nuse crate::{\n    Type,\n    datatype::{NamedDataType, NamedId, NamedReference},\n};\n\n/// Collection of named datatypes that can be exported together.\n///\n/// Resolving a [`Type`] adds every named type it depends on to this collection.\n/// Exporters usually receive a completed `Types` value and iterate over the\n/// collected [`NamedDataType`] entries.\n///\n/// # Invariants\n///\n/// Internally, entries may temporarily be placeholders while recursive types are\n/// resolving. Public iterators and [`Types::len`] expose only completed\n/// [`NamedDataType`] values.\n#[derive(Default, Clone)]\npub struct Types {\n    /// Registered named datatypes keyed by their stable identity.\n    ///\n    /// A `None` value is a placeholder for a datatype whose definition is\n    /// currently being resolved. This lets recursive definitions refer to the\n    /// in-progress type without re-entering resolution indefinitely.\n    pub(crate) types: HashMap<NamedId, Option<NamedDataType>>,\n\n    /// Cached count of completed entries in [`Self::types`].\n    ///\n    /// Placeholders are excluded. Keeping this count avoids repeatedly walking\n    /// the full map when exporters ask for iterator lengths which we need for `ExactSizeIterator`.\n    pub(crate) len: usize,\n\n    /// Stack of inline named-type expansions currently being resolved.\n    ///\n    /// Each entry is a hash of the named type sentinel and concrete generic\n    /// arguments for that inline use site. Seeing the same entry twice means an\n    /// inline definition has recursively reached itself, so resolution can emit\n    /// a recursive reference instead of expanding forever.\n    pub(crate) stack: Vec<u64>,\n\n    /// Whether named types discovered in the current context should be inlined.\n    ///\n    /// This is set while resolving fields annotated with `#[specta(inline)]` and\n    /// similar container/wrapper contexts. It is temporarily cleared when\n    /// building canonical named definitions so top-level registrations are not\n    /// accidentally affected by a use-site inline request.\n    pub(crate) should_inline: bool,\n\n    /// Whether the current named-type definition is being built with const parameters.\n    ///\n    /// This remains `false` unless Specta is exporting the canonical definition\n    /// for a `#[derive(Type)]` type that declares one or more const-generic\n    /// parameters.\n    ///\n    /// Consider a type like this:\n    ///\n    /// ```rs\n    /// #[derive(Type)]\n    /// struct Demo<const N: usize> {\n    ///     data: [u32; N],\n    /// }\n    /// ```\n    ///\n    /// If `impl Type for [T; N]` always exported the concrete array length, the\n    /// first encountered value of `N` would be baked into the shared global\n    /// definition for `Demo`, which is wrong. For example:\n    ///\n    /// ```rs\n    /// pub struct A {\n    ///     a: Demo<1>,\n    ///     b: Demo<2>,\n    /// }\n    /// // becomes:\n    /// // export type A = { a: Demo, b: Demo }\n    /// // export type Demo = { [number] }; // This is invalid for the `b` field.\n    ///\n    /// // and if we encounter the fields in the opposite order it changes:\n    ///\n    /// pub struct B {\n    ///     // we flipped field definition\n    ///     b: Demo<2>,\n    ///     a: Demo<1>,\n    /// }\n    /// // becomes:\n    /// // export type A = { a: Demo, b: Demo }\n    /// // export type Demo = { [number, number] }; // This is invalid for the `a` field.\n    /// ```\n    ///\n    /// For a length to differ across two instantiations of the same type, the\n    /// type must either have a const parameter or have a generic parameter whose\n    /// type uses a trait associated constant.\n    ///\n    /// Specta does not support the trait-associated-constant case here because\n    /// generic `T` parameters are shadowed by virtual structs that return generic\n    /// references instead of flat datatypes.\n    ///\n    /// Therefore, including the fixed array length is safe as long as the\n    /// current resolving context has no const parameters. This is tracked at\n    /// runtime, avoiding brittle scans of the user's `TokenStream` in the derive\n    /// macro.\n    ///\n    /// `specta_util::FixedArray<N, T>` can be used to force Specta to export a\n    /// fixed-length array instead of a generic `number[]` when the user knows\n    /// the length is safe to include. This does not fix the core issue, but it\n    /// gives the user a way to assert the specific use site is correct.\n    pub(crate) has_const_params: bool,\n}\n\nimpl fmt::Debug for Types {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Types\").field(&self.types).finish()\n    }\n}\n\nimpl Types {\n    /// Registers `T` and its named dependencies with the collection.\n    ///\n    /// This consumes and returns `self`, making it convenient to chain multiple\n    /// registrations.\n    pub fn register<T: Type>(mut self) -> Self {\n        T::definition(&mut self);\n        self\n    }\n\n    /// Registers `T` and its named dependencies with the collection in-place.\n    pub fn register_mut<T: Type>(&mut self) -> &mut Self {\n        T::definition(self);\n        self\n    }\n\n    /// Gets the named datatype targeted by a [`NamedReference`].\n    ///\n    /// Returns `None` if the reference is unknown or currently only has an\n    /// internal placeholder entry.\n    pub fn get(&self, r: &NamedReference) -> Option<&NamedDataType> {\n        self.types.get(&r.id)?.as_ref()\n    }\n\n    /// Returns the number of completed named datatypes in the collection.\n    pub fn len(&self) -> usize {\n        debug_assert_eq!(\n            self.len,\n            self.types\n                .iter()\n                .filter_map(|(_, ndt)| ndt.as_ref())\n                .count(),\n            \"Types count logic mismatch\"\n        );\n\n        self.len\n    }\n\n    /// Returns `true` when the typemap has no entries at all.\n    pub fn is_empty(&self) -> bool {\n        debug_assert_eq!(\n            self.len,\n            self.types\n                .iter()\n                .filter_map(|(_, ndt)| ndt.as_ref())\n                .count(),\n            \"Types count logic mismatch\"\n        );\n\n        self.len == 0\n    }\n\n    /// Merges types from another collection into this one.\n    ///\n    /// Existing completed entries in `self` are kept. A placeholder in `self` is\n    /// replaced by a completed entry from `other` when available.\n    pub fn extend(&mut self, other: &Self) {\n        for (id, other) in &other.types {\n            match self.types.get(id) {\n                // Key doesn't exist - insert from other\n                None => {\n                    if other.is_some() {\n                        self.len += 1;\n                    }\n                    self.types.insert(id.clone(), other.clone());\n                }\n                // Key exists with Some - keep self (prefer self over other)\n                Some(Some(_)) => {}\n                // Key exists with None, but other has Some - use other (prefer Some over None)\n                Some(None) if other.is_some() => {\n                    self.len += 1;\n                    self.types.insert(id.clone(), other.clone());\n                }\n                // Key exists with None, other also None - do nothing\n                Some(None) => {}\n            }\n        }\n    }\n\n    /// Sorts completed named datatypes into a consistent order and returns an iterator.\n    ///\n    /// The sort order is not guaranteed to remain identical between releases but is designed to stay stable,\n    /// so that between multiple runs of the exporter you get the same type in the same order in the file.\n    ///\n    /// This method allocates a temporary vector to sort the collection. Prefer\n    /// [`Types::into_unsorted_iter`] if the order does not matter.\n    pub fn into_sorted_iter(&self) -> impl ExactSizeIterator<Item = &'_ NamedDataType> {\n        let mut v = self\n            .types\n            .iter()\n            .filter_map(|(_, ndt)| ndt.as_ref())\n            .collect::<Vec<_>>();\n        assert_eq!(v.len(), self.len, \"Types count logic mismatch\");\n        v.sort_by(|a, b| {\n            a.name\n                .cmp(&b.name)\n                .then(a.module_path.cmp(&b.module_path))\n                .then(a.location.cmp(&b.location))\n        });\n        v.into_iter()\n    }\n\n    /// Returns an unsorted iterator over completed named datatypes.\n    pub fn into_unsorted_iter(&self) -> impl ExactSizeIterator<Item = &NamedDataType> {\n        UnsortedIter {\n            iter: self.types.iter(),\n            count: self.len,\n        }\n    }\n\n    /// Mutably modifies each [`NamedDataType`] in the collection.\n    pub fn iter_mut<F>(&mut self, mut f: F)\n    where\n        F: FnMut(&mut NamedDataType),\n    {\n        for (_, ndt) in self.types.iter_mut() {\n            if let Some(ndt) = ndt {\n                f(ndt);\n            }\n        }\n    }\n\n    /// Transforms each [`NamedDataType`] in the collection.\n    pub fn map<F>(mut self, mut f: F) -> Self\n    where\n        F: FnMut(NamedDataType) -> NamedDataType,\n    {\n        for (_, slot) in self.types.iter_mut() {\n            if let Some(ndt) = slot.take() {\n                *slot = Some(f(ndt));\n            }\n        }\n        self\n    }\n}\n\nstruct UnsortedIter<'a> {\n    iter: hash_map::Iter<'a, NamedId, Option<NamedDataType>>,\n    count: usize,\n}\n\nimpl<'a> Iterator for UnsortedIter<'a> {\n    type Item = &'a NamedDataType;\n\n    fn next(&mut self) -> Option<Self::Item> {\n        self.iter.find_map(|(_, ndt)| ndt.as_ref())\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (self.count, Some(self.count))\n    }\n}\n\nimpl ExactSizeIterator for UnsortedIter<'_> {}\n"
  },
  {
    "path": "specta-go/Cargo.toml",
    "content": "[package]\nname = \"specta-go\"\ndescription = \"Export your Rust types to Go\"\nversion = \"0.0.2\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-go/latest/specta-go\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"go\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\nreadme = \"../README.md\"\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[lints]\nworkspace = true\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\" }\n\n[dev-dependencies]\nspecta_serde = { package = \"specta-serde\", version = \"=0.0.11\", path = \"../specta-serde\" }\n"
  },
  {
    "path": "specta-go/bindings.go",
    "content": "package bindings\n\ntype MyType struct {\n\tField String `json:\"field\"`\n}\n\n\n"
  },
  {
    "path": "specta-go/src/error.rs",
    "content": "use std::{error, fmt, io};\n\nuse crate::Layout;\n\n#[derive(Debug)]\n/// Errors that can occur during Go code generation.\npub enum Error {\n    /// IO error during file operations.\n    Io(io::Error),\n    /// Formatting error while writing generated code.\n    Fmt(fmt::Error),\n    /// Custom format callback failed.\n    Format {\n        /// Context describing which format callback failed.\n        message: &'static str,\n        /// The underlying format error.\n        source: specta::FormatError,\n    },\n    /// A generated Go identifier used a forbidden name.\n    ForbiddenName {\n        /// Path to the type or field containing the forbidden name.\n        path: String,\n        /// The forbidden Go identifier.\n        name: String,\n    },\n    /// A BigInt value was encountered but cannot be represented in Go.\n    BigIntForbidden {\n        /// Path to the unsupported BigInt value.\n        path: String,\n    },\n    /// The configured layout cannot be exported by this operation.\n    UnableToExport(Layout),\n}\n\nimpl fmt::Display for Error {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        match self {\n            Error::Io(e) => write!(f, \"IO error: {e}\"),\n            Error::Fmt(e) => write!(f, \"Fmt error: {e}\"),\n            Error::Format { message, source } => write!(f, \"Format error: {message}: {source}\"),\n            Error::ForbiddenName { path, name } => {\n                write!(f, \"Forbidden name: {name} in {path}\")\n            }\n            Error::BigIntForbidden { path } => {\n                write!(f, \"BigInt forbidden in {path}\")\n            }\n            Error::UnableToExport(layout) => {\n                write!(f, \"Unable to export layout: {layout:?}\")\n            }\n        }\n    }\n}\n\nimpl error::Error for Error {}\n\nimpl From<io::Error> for Error {\n    fn from(e: io::Error) -> Self {\n        Self::Io(e)\n    }\n}\n\nimpl From<fmt::Error> for Error {\n    fn from(e: fmt::Error) -> Self {\n        Self::Fmt(e)\n    }\n}\n\nimpl Error {\n    pub(crate) fn format(message: &'static str, source: specta::FormatError) -> Self {\n        Self::Format { message, source }\n    }\n}\n"
  },
  {
    "path": "specta-go/src/go.rs",
    "content": "use std::{borrow::Cow, path::Path};\n\nuse specta::{\n    Format, Types,\n    datatype::{DataType, Fields, Reference},\n};\n\nuse crate::{\n    Error,\n    primitives::{self, GoContext},\n};\n\n/// Allows configuring the format of the final file.\n#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]\npub enum Layout {\n    /// Flatten all types into a single file. (Idiomatic for Go packages)\n    #[default]\n    FlatFile,\n    /// Produce a dedicated file for each type (Not recommended for Go)\n    Files,\n}\n\n/// Go language exporter.\n#[derive(Debug, Clone)]\n#[non_exhaustive]\npub struct Go {\n    /// Content written before the generated Go package declaration.\n    pub header: Cow<'static, str>,\n    /// The output file layout.\n    pub layout: Layout,\n    package_name: String,\n}\n\nimpl Default for Go {\n    fn default() -> Self {\n        Self {\n            header: Cow::Borrowed(\"\"),\n            layout: Layout::FlatFile,\n            package_name: \"bindings\".into(),\n        }\n    }\n}\n\nimpl Go {\n    /// Creates a Go exporter using the default configuration.\n    pub fn new() -> Self {\n        Default::default()\n    }\n\n    /// Sets the generated Go package name.\n    pub fn package_name(mut self, name: impl Into<String>) -> Self {\n        self.package_name = name.into();\n        self\n    }\n\n    /// Sets content written before the generated Go package declaration.\n    pub fn header(mut self, header: impl Into<Cow<'static, str>>) -> Self {\n        self.header = header.into();\n        self\n    }\n\n    /// Exports the provided types into a Go source file string.\n    pub fn export(&self, types: &Types, format: impl Format) -> Result<String, Error> {\n        let mut ctx = GoContext::default();\n        let mut body = String::new();\n\n        let exporter = self.clone();\n        let formatted_types = format_types(&exporter, types, &format)?;\n        let types = formatted_types.as_ref();\n\n        for ndt in types.into_sorted_iter() {\n            let type_def = primitives::export(&exporter, types, ndt, &mut ctx)?;\n            body.push_str(&type_def);\n            body.push('\\n');\n        }\n\n        let mut out = String::new();\n        if !exporter.header.is_empty() {\n            out.push_str(&exporter.header);\n            out.push('\\n');\n        }\n\n        out.push_str(\"package \");\n        out.push_str(&exporter.package_name);\n        out.push_str(\"\\n\\n\");\n\n        if !ctx.imports.is_empty() {\n            out.push_str(\"import (\\n\");\n            let mut sorted: Vec<_> = ctx.imports.iter().collect();\n            sorted.sort();\n            for imp in sorted {\n                out.push_str(&format!(\"\\t\\\"{}\\\"\\n\", imp));\n            }\n            out.push_str(\")\\n\\n\");\n        }\n\n        out.push_str(&body);\n        Ok(out)\n    }\n\n    /// Exports the provided types to a Go source file at the given path.\n    pub fn export_to(\n        &self,\n        path: impl AsRef<Path>,\n        types: &Types,\n        format: impl Format,\n    ) -> Result<(), Error> {\n        if self.layout == Layout::Files {\n            return Err(Error::UnableToExport(Layout::Files));\n        }\n\n        let content = self.export(types, format)?;\n        if let Some(parent) = path.as_ref().parent() {\n            std::fs::create_dir_all(parent)?;\n        }\n        std::fs::write(path, content)?;\n        Ok(())\n    }\n}\n\nfn format_types<'a>(\n    exporter: &Go,\n    types: &'a Types,\n    format: &dyn Format,\n) -> Result<Cow<'a, Types>, Error> {\n    let mapped_types = format\n        .map_types(types)\n        .map_err(|err| Error::format(\"type graph formatter failed\", err))?;\n    Ok(Cow::Owned(\n        map_types_for_datatype_format(exporter, mapped_types.as_ref(), Some(format))?.into_owned(),\n    ))\n}\n\nfn map_datatype_format(\n    exporter: &Go,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n) -> Result<DataType, Error> {\n    let Some(format) = format else {\n        return Ok(dt.clone());\n    };\n\n    let mapped = format\n        .map_type(types, dt)\n        .map_err(|err| Error::format(\"datatype formatter failed\", err))?;\n\n    match mapped {\n        Cow::Borrowed(dt) => {\n            map_datatype_format_children(exporter, Some(format), types, dt.clone())\n        }\n        Cow::Owned(dt) => map_datatype_format_children(exporter, Some(format), types, dt),\n    }\n}\n\nfn map_datatype_format_children(\n    exporter: &Go,\n    format: Option<&dyn Format>,\n    types: &Types,\n    mut dt: DataType,\n) -> Result<DataType, Error> {\n    match &mut dt {\n        DataType::Primitive(_) => {}\n        DataType::List(list) => {\n            *list.ty = map_datatype_format(exporter, format, types, &list.ty)?;\n        }\n        DataType::Map(map) => {\n            let key = map_datatype_format(exporter, format, types, map.key_ty())?;\n            let value = map_datatype_format(exporter, format, types, map.value_ty())?;\n            map.set_key_ty(key);\n            map.set_value_ty(value);\n        }\n        DataType::Nullable(inner) => {\n            **inner = map_datatype_format(exporter, format, types, inner)?;\n        }\n        DataType::Struct(strct) => map_datatype_fields(exporter, format, types, &mut strct.fields)?,\n        DataType::Enum(enm) => {\n            for (_, variant) in &mut enm.variants {\n                map_datatype_fields(exporter, format, types, &mut variant.fields)?;\n            }\n        }\n        DataType::Tuple(tuple) => {\n            for element in &mut tuple.elements {\n                *element = map_datatype_format(exporter, format, types, element)?;\n            }\n        }\n        DataType::Intersection(intersection) => {\n            for element in intersection {\n                *element = map_datatype_format(exporter, format, types, element)?;\n            }\n        }\n        DataType::Reference(Reference::Named(reference)) => {\n            if let specta::datatype::NamedReferenceType::Reference { generics, .. } =\n                &mut reference.inner\n            {\n                for (_, generic) in generics {\n                    *generic = map_datatype_format(exporter, format, types, generic)?;\n                }\n            }\n        }\n        DataType::Reference(Reference::Opaque(_)) | DataType::Generic(_) => {}\n    }\n\n    Ok(dt)\n}\n\nfn map_datatype_fields(\n    exporter: &Go,\n    format: Option<&dyn Format>,\n    types: &Types,\n    fields: &mut Fields,\n) -> Result<(), Error> {\n    match fields {\n        Fields::Unit => {}\n        Fields::Unnamed(unnamed) => {\n            for field in &mut unnamed.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    *ty = map_datatype_format(exporter, format, types, ty)?;\n                }\n            }\n        }\n        Fields::Named(named) => {\n            for (_, field) in &mut named.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    *ty = map_datatype_format(exporter, format, types, ty)?;\n                }\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn map_types_for_datatype_format<'a>(\n    exporter: &Go,\n    types: &'a Types,\n    format: Option<&dyn Format>,\n) -> Result<Cow<'a, Types>, Error> {\n    if format.is_none() {\n        return Ok(Cow::Borrowed(types));\n    }\n\n    let mut mapped_types = types.clone();\n    let mut map_err = None;\n    mapped_types.iter_mut(|ndt| {\n        if map_err.is_some() {\n            return;\n        }\n\n        let Some(ty) = &ndt.ty else {\n            return;\n        };\n\n        match map_datatype_format(exporter, format, types, ty) {\n            Ok(mapped) => ndt.ty = Some(mapped),\n            Err(err) => map_err = Some(err),\n        }\n    });\n\n    if let Some(err) = map_err {\n        return Err(err);\n    }\n\n    Ok(Cow::Owned(mapped_types))\n}\n"
  },
  {
    "path": "specta-go/src/lib.rs",
    "content": "//! [Go](https://go.dev) language exporter for [Specta](specta).\n//!\n//! <div class=\"warning\">\n//! This crate is still in active development and is not yet ready for general purpose use!\n//! </div>\n//!\n//! # Usage\n//!\n//! ```rust\n//! use specta::Types;\n//! use specta_go::Go;\n//!\n//! #[derive(specta::Type)]\n//! pub struct MyType {\n//!     pub field: String,\n//! }\n//!\n//! let types = Types::default().register::<MyType>();\n//!\n//! Go::default()\n//!     .export_to(\"./bindings.go\", &types, specta_serde::Format)\n//!     .unwrap();\n//! ```\n\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n\nmod error;\nmod go;\nmod primitives;\nmod reserved_names;\n\npub use error::Error;\npub use go::{Go, Layout};\n"
  },
  {
    "path": "specta-go/src/primitives.rs",
    "content": "use std::collections::HashSet;\n\nuse specta::{\n    Types,\n    datatype::{\n        DataType, Enum, Fields, Generic, NamedDataType, NamedReferenceType, Primitive, Reference,\n        Struct,\n    },\n};\n\nuse crate::{Error, Go, reserved_names::RESERVED_GO_NAMES};\n\n/// Tracks necessary Go imports (e.g. \"time\", \"encoding/json\")\n#[derive(Default)]\npub struct GoContext {\n    pub imports: HashSet<String>,\n}\n\nimpl GoContext {\n    pub fn add_import(&mut self, import: &str) {\n        self.imports.insert(import.to_string());\n    }\n}\n\npub fn export(\n    exporter: &Go,\n    types: &Types,\n    ndt: &NamedDataType,\n    ctx: &mut GoContext,\n) -> Result<String, Error> {\n    let mut s = String::new();\n\n    let docs = &ndt.docs;\n    if !docs.is_empty() {\n        for line in docs.lines() {\n            s.push_str(\"// \");\n            s.push_str(line);\n            s.push('\\n');\n        }\n    }\n\n    let name = to_pascal_case(&ndt.name);\n    if RESERVED_GO_NAMES.contains(&name.as_str()) {\n        return Err(Error::ForbiddenName {\n            path: ndt.name.to_string(),\n            name: ndt.name.to_string(),\n        });\n    }\n\n    s.push_str(\"type \");\n    s.push_str(&name);\n\n    if !ndt.generics.is_empty() {\n        s.push('[');\n        for (i, g) in ndt.generics.iter().enumerate() {\n            if i != 0 {\n                s.push_str(\", \");\n            }\n            s.push_str(g.name.as_ref());\n            s.push_str(\" any\");\n        }\n        s.push(']');\n    }\n    s.push(' ');\n\n    let generic_names = ndt\n        .generics\n        .iter()\n        .map(|generic| generic.reference())\n        .collect::<Vec<_>>();\n\n    let Some(ty) = &ndt.ty else {\n        return Ok(String::new());\n    };\n\n    match ty {\n        DataType::Struct(st) => {\n            s.push_str(\"struct {\\n\");\n            struct_fields(\n                &mut s,\n                exporter,\n                types,\n                &generic_names,\n                st,\n                vec![ndt.name.to_string()],\n                ctx,\n            )?;\n            s.push('}');\n        }\n        DataType::Enum(e) => {\n            s.push_str(\"struct {\\n\");\n            enum_variants(\n                &mut s,\n                exporter,\n                types,\n                &generic_names,\n                e,\n                vec![ndt.name.to_string()],\n                ctx,\n            )?;\n            s.push('}');\n        }\n        DataType::Tuple(t) => {\n            if t.elements.len() == 1 {\n                datatype(\n                    &mut s,\n                    exporter,\n                    types,\n                    &generic_names,\n                    &t.elements[0],\n                    vec![ndt.name.to_string(), \"0\".into()],\n                    ctx,\n                )?;\n            } else {\n                s.push_str(\"[]any\");\n            }\n        }\n        _ => {\n            datatype(\n                &mut s,\n                exporter,\n                types,\n                &generic_names,\n                ty,\n                vec![ndt.name.to_string()],\n                ctx,\n            )?;\n        }\n    }\n    s.push('\\n');\n\n    Ok(s)\n}\n\nfn struct_fields(\n    s: &mut String,\n    exporter: &Go,\n    types: &Types,\n    generic_names: &[Generic],\n    st: &Struct,\n    location: Vec<String>,\n    ctx: &mut GoContext,\n) -> Result<(), Error> {\n    match &st.fields {\n        Fields::Unit => {}\n        Fields::Unnamed(fields) => {\n            for (i, field) in fields.fields.iter().enumerate() {\n                s.push('\\t');\n                s.push_str(&format!(\"Field{}\", i));\n                s.push(' ');\n\n                if field.optional {\n                    s.push('*');\n                }\n\n                if let Some(ty) = field.ty.as_ref() {\n                    let mut location = location.clone();\n                    location.push(i.to_string());\n                    datatype(s, exporter, types, generic_names, ty, location, ctx)?;\n                } else {\n                    s.push_str(\"any\");\n                }\n                s.push('\\n');\n            }\n        }\n        Fields::Named(fields) => {\n            for (name, field) in &fields.fields {\n                let docs = &field.docs;\n                if !docs.is_empty() {\n                    s.push_str(\"\\t// \");\n                    s.push_str(docs.replace('\\n', \"\\n\\t// \").trim());\n                    s.push('\\n');\n                }\n\n                s.push('\\t');\n                s.push_str(&to_pascal_case(name));\n                s.push(' ');\n\n                if field.optional {\n                    s.push('*');\n                }\n\n                if let Some(ty) = field.ty.as_ref() {\n                    let mut location = location.clone();\n                    location.push(name.to_string());\n                    datatype(s, exporter, types, generic_names, ty, location, ctx)?;\n                } else {\n                    s.push_str(\"any\");\n                }\n\n                if field.optional {\n                    s.push_str(&format!(\" `json:\\\"{},omitempty\\\"`\\n\", name));\n                } else {\n                    s.push_str(&format!(\" `json:\\\"{}\\\"`\\n\", name));\n                }\n            }\n        }\n    }\n    Ok(())\n}\n\nfn enum_variants(\n    s: &mut String,\n    exporter: &Go,\n    types: &Types,\n    generic_names: &[Generic],\n    e: &Enum,\n    location: Vec<String>,\n    ctx: &mut GoContext,\n) -> Result<(), Error> {\n    for (name, variant) in &e.variants {\n        let docs = &variant.docs;\n        if !docs.is_empty() {\n            s.push_str(\"\\t// \");\n            s.push_str(docs);\n            s.push('\\n');\n        }\n\n        s.push('\\t');\n        s.push_str(&to_pascal_case(name));\n        s.push(' ');\n        s.push('*');\n\n        match &variant.fields {\n            Fields::Unit => s.push_str(\"bool\"),\n            Fields::Unnamed(f) => {\n                s.push_str(\"struct {\\n\");\n                for (i, field) in f.fields.iter().enumerate() {\n                    s.push_str(\"\\t\\tValue\");\n                    s.push_str(&i.to_string());\n                    s.push(' ');\n                    if let Some(ty) = field.ty.as_ref() {\n                        let mut location = location.clone();\n                        location.push(name.to_string());\n                        location.push(i.to_string());\n                        datatype(s, exporter, types, generic_names, ty, location, ctx)?;\n                    } else {\n                        s.push_str(\"any\");\n                    }\n                    s.push_str(&format!(\" `json:\\\"{}\\\"`\\n\", i));\n                }\n                s.push('\\t');\n                s.push('}');\n            }\n            Fields::Named(f) => {\n                s.push_str(\"struct {\\n\\t\");\n                let mut fill_in = Struct::unit();\n                fill_in.fields = Fields::Named(f.clone());\n\n                let mut location = location.clone();\n                location.push(name.to_string());\n                struct_fields(s, exporter, types, generic_names, &fill_in, location, ctx)?;\n                s.push('\\t');\n                s.push('}');\n            }\n        }\n        s.push_str(&format!(\" `json:\\\"{},omitempty\\\"`\\n\", name));\n    }\n    Ok(())\n}\n\nfn datatype(\n    s: &mut String,\n    exporter: &Go,\n    types: &Types,\n    generic_names: &[Generic],\n    dt: &DataType,\n    location: Vec<String>,\n    ctx: &mut GoContext,\n) -> Result<(), Error> {\n    match dt {\n        DataType::Primitive(p) => match p {\n            Primitive::i8 => s.push_str(\"int8\"),\n            Primitive::i16 => s.push_str(\"int16\"),\n            Primitive::i32 => s.push_str(\"int32\"),\n            Primitive::i64 | Primitive::isize => s.push_str(\"int64\"),\n            Primitive::u8 => s.push_str(\"uint8\"),\n            Primitive::u16 => s.push_str(\"uint16\"),\n            Primitive::u32 => s.push_str(\"uint32\"),\n            Primitive::u64 | Primitive::usize => s.push_str(\"uint64\"),\n            Primitive::f16 | Primitive::f32 => s.push_str(\"float32\"),\n            Primitive::f64 | Primitive::f128 => s.push_str(\"float64\"),\n            Primitive::bool => s.push_str(\"bool\"),\n            Primitive::str | Primitive::char => s.push_str(\"string\"),\n            Primitive::i128 | Primitive::u128 => {\n                return Err(Error::BigIntForbidden {\n                    path: location.join(\".\"),\n                });\n            }\n        },\n        DataType::Nullable(t) => {\n            s.push('*');\n            datatype(s, exporter, types, generic_names, t, location, ctx)?;\n        }\n        DataType::Map(m) => {\n            s.push_str(\"map[\");\n            datatype(\n                s,\n                exporter,\n                types,\n                generic_names,\n                m.key_ty(),\n                location.clone(),\n                ctx,\n            )?;\n            s.push(']');\n            datatype(\n                s,\n                exporter,\n                types,\n                generic_names,\n                m.value_ty(),\n                location,\n                ctx,\n            )?;\n        }\n        DataType::List(l) => {\n            s.push_str(\"[]\");\n            datatype(s, exporter, types, generic_names, &l.ty, location, ctx)?;\n        }\n        DataType::Tuple(t) => {\n            if t.elements.is_empty() {\n                s.push_str(\"struct{}\");\n            } else {\n                s.push_str(\"[]any\");\n            }\n        }\n        DataType::Struct(st) => {\n            s.push_str(\"struct {\\n\");\n            struct_fields(s, exporter, types, generic_names, st, location, ctx)?;\n            s.push('}');\n        }\n        DataType::Enum(e) => {\n            s.push_str(\"struct {\\n\");\n            enum_variants(s, exporter, types, generic_names, e, location, ctx)?;\n            s.push('}');\n        }\n        DataType::Reference(r) => match r {\n            Reference::Named(r) => {\n                let ndt = types.get(r).ok_or_else(|| Error::ForbiddenName {\n                    path: \"lookup\".into(),\n                    name: \"missing_reference_in_collection\".into(),\n                })?;\n\n                s.push_str(&to_pascal_case(&ndt.name));\n\n                let generics = match &r.inner {\n                    NamedReferenceType::Reference { generics, .. } => generics.as_slice(),\n                    NamedReferenceType::Inline { .. } | NamedReferenceType::Recursive => &[],\n                };\n                if !generics.is_empty() {\n                    s.push('[');\n                    for (i, (_, g)) in generics.iter().enumerate() {\n                        if i != 0 {\n                            s.push_str(\", \");\n                        }\n                        let mut location = location.clone();\n                        location.push(format!(\"generic{}\", i));\n                        datatype(s, exporter, types, generic_names, g, location, ctx)?;\n                    }\n                    s.push(']');\n                }\n            }\n            Reference::Opaque(o) => match o.type_name() {\n                \"String\" | \"char\" => s.push_str(\"string\"),\n                \"bool\" => s.push_str(\"bool\"),\n                \"i8\" | \"i16\" | \"i32\" | \"isize\" => s.push_str(\"int\"),\n                \"u8\" | \"u16\" | \"u32\" | \"usize\" => s.push_str(\"uint\"),\n                \"i64\" => s.push_str(\"int64\"),\n                \"u64\" => s.push_str(\"uint64\"),\n                \"f32\" => s.push_str(\"float32\"),\n                \"f64\" => s.push_str(\"float64\"),\n                \"SystemTime\" | \"DateTime\" => {\n                    ctx.add_import(\"time\");\n                    s.push_str(\"time.Time\");\n                }\n                \"Duration\" => {\n                    ctx.add_import(\"time\");\n                    s.push_str(\"time.Duration\");\n                }\n                _ => s.push_str(\"any\"),\n            },\n        },\n        DataType::Generic(g) => {\n            let name = generic_names\n                .iter()\n                .find(|candidate| candidate.reference() == *g)\n                .map(|generic| generic.name().as_ref())\n                .unwrap_or(\"any\");\n            s.push_str(name);\n        }\n        DataType::Intersection(_) => s.push_str(\"any\"),\n    }\n    Ok(())\n}\n\nfn to_pascal_case(s: &str) -> String {\n    let mut result = String::with_capacity(s.len());\n    let mut next_upper = true;\n    for c in s.chars() {\n        if c == '_' {\n            next_upper = true;\n        } else if next_upper {\n            result.push(c.to_ascii_uppercase());\n            next_upper = false;\n        } else {\n            result.push(c);\n        }\n    }\n    result\n}\n"
  },
  {
    "path": "specta-go/src/reserved_names.rs",
    "content": "/// Reserved keywords and common types in the Go programming language.\npub(crate) const RESERVED_GO_NAMES: &[&str] = &[\n    // Keywords\n    \"break\",\n    \"default\",\n    \"func\",\n    \"interface\",\n    \"select\",\n    \"case\",\n    \"defer\",\n    \"go\",\n    \"map\",\n    \"struct\",\n    \"chan\",\n    \"else\",\n    \"goto\",\n    \"package\",\n    \"switch\",\n    \"const\",\n    \"fallthrough\",\n    \"if\",\n    \"range\",\n    \"type\",\n    \"continue\",\n    \"for\",\n    \"import\",\n    \"return\",\n    \"var\",\n    // Built-in Types\n    \"bool\",\n    \"byte\",\n    \"complex64\",\n    \"complex128\",\n    \"error\",\n    \"float32\",\n    \"float64\",\n    \"int\",\n    \"int8\",\n    \"int16\",\n    \"int32\",\n    \"int64\",\n    \"rune\",\n    \"string\",\n    \"uint\",\n    \"uint8\",\n    \"uint16\",\n    \"uint32\",\n    \"uint64\",\n    \"uintptr\",\n    \"any\",\n    \"comparable\",\n    // Built-in Constants\n    \"true\",\n    \"false\",\n    \"iota\",\n    \"nil\",\n    // Built-in Functions\n    \"append\",\n    \"cap\",\n    \"close\",\n    \"complex\",\n    \"copy\",\n    \"delete\",\n    \"imag\",\n    \"len\",\n    \"make\",\n    \"new\",\n    \"panic\",\n    \"print\",\n    \"println\",\n    \"real\",\n    \"recover\",\n];\n"
  },
  {
    "path": "specta-jsonschema/Cargo.toml",
    "content": "[package]\nname = \"specta-jsonschema\"\ndescription = \"Export your Rust types to a JSON Schema\"\nversion = \"0.0.2\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-jsonschema/latest/specta-jsonschema\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"jsonschema\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\nreadme = \"../README.md\"\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[lints]\nworkspace = true\n\n[features]\ndefault = []\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\" }\nschemars = { version = \"1.2\", default-features = false }\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\nthiserror = \"2\"\n\n[dev-dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\", features = [\"derive\", \"collect\"] }\nspecta-serde = { path = \"../specta-serde\" }\nspecta-util = { path = \"../specta-util\", features = [\"serde\"] }\ninsta = { version = \"1\", features = [\"json\"] }\n"
  },
  {
    "path": "specta-jsonschema/examples/jsonschema.rs",
    "content": "#![allow(missing_docs)]\n\nuse serde::{Deserialize, Serialize};\nuse specta::{Type, Types};\nuse specta_jsonschema::{JsonSchema, SchemaVersion};\n\n#[derive(Serialize, Deserialize, Type)]\n#[serde(rename_all = \"camelCase\")]\npub struct User {\n    pub id: u32,\n    pub name: String,\n    pub email: Option<String>,\n    pub role: Role,\n}\n\n#[derive(Serialize, Deserialize, Type)]\npub enum Role {\n    Admin,\n    User,\n    Guest,\n}\n\n#[derive(Serialize, Deserialize, Type)]\n#[serde(rename_all = \"camelCase\")]\npub struct Post {\n    pub id: u32,\n    pub title: String,\n    pub content: String,\n    pub author_id: u32,\n    pub tags: Vec<String>,\n}\n\nfn main() {\n    // Create a type collection with all the types we want to export\n    let types = Types::default()\n        .register::<User>()\n        .register::<Role>()\n        .register::<Post>();\n\n    // Export to JSON Schema (Draft 7)\n    let schema = JsonSchema::default()\n        .schema_version(SchemaVersion::Draft7)\n        .title(\"My API Types\")\n        .description(\"JSON Schema for my API types\")\n        .export(&types, specta_serde::Format)\n        .unwrap();\n\n    println!(\"{}\", schema);\n}\n"
  },
  {
    "path": "specta-jsonschema/src/error.rs",
    "content": "use std::io;\n\n#[derive(Debug, thiserror::Error)]\npub enum Error {\n    #[error(\"IO error: {0}\")]\n    Io(#[from] io::Error),\n\n    #[error(\"JSON serialization error: {0}\")]\n    Json(#[from] serde_json::Error),\n\n    #[error(\"Invalid schema version: {0}\")]\n    InvalidSchemaVersion(String),\n\n    #[error(\"Duplicate type name '{name}' at {location1} and {location2}\")]\n    DuplicateTypeName {\n        name: String,\n        location1: String,\n        location2: String,\n    },\n\n    #[error(\"Invalid type name '{name}' at {path}\")]\n    InvalidTypeName { name: String, path: String },\n\n    #[error(\"Unable to convert schema: {0}\")]\n    ConversionError(String),\n\n    #[error(\"Format error: {message}: {source}\")]\n    Format {\n        message: &'static str,\n        source: specta::FormatError,\n    },\n\n    #[error(\"Unsupported DataType: {0}\")]\n    UnsupportedDataType(String),\n\n    #[error(\"Invalid reference: {0}\")]\n    InvalidReference(String),\n}\n\nimpl Error {\n    pub(crate) fn format(message: &'static str, source: specta::FormatError) -> Self {\n        Self::Format { message, source }\n    }\n}\n"
  },
  {
    "path": "specta-jsonschema/src/import.rs",
    "content": "use crate::Error;\nuse schemars::Schema;\nuse serde_json::{Map as JsonMap, Value};\nuse specta::datatype::*;\nuse std::borrow::Cow;\n\n/// Convert a schemars Schema to a Specta DataType\npub fn from_schema(schema: &Schema) -> Result<DataType, Error> {\n    match schema.as_bool() {\n        Some(true) => {\n            // True schema = any\n            // We use an empty struct as a placeholder for \"any\"\n            Ok(Struct::named().build())\n        }\n        Some(false) => {\n            // False schema = never type (nothing validates)\n            Err(Error::ConversionError(\n                \"false schema (never type) not supported\".into(),\n            ))\n        }\n        None => schema\n            .as_object()\n            .ok_or_else(|| Error::ConversionError(\"schema must be object or bool\".into()))\n            .and_then(schema_object_to_datatype),\n    }\n}\n\nfn value_to_datatype(value: &Value) -> Result<DataType, Error> {\n    let schema: &Schema = value.try_into()?;\n    from_schema(schema)\n}\n\nfn schema_object_to_datatype(obj: &JsonMap<String, Value>) -> Result<DataType, Error> {\n    // Handle $ref\n    if let Some(reference) = obj.get(\"$ref\").and_then(Value::as_str) {\n        // We use an opaque reference since we do not have a Types context here.\n        return Ok(DataType::Reference(Reference::opaque(reference.to_owned())));\n    }\n\n    // Handle const values (literals)\n    if obj.get(\"const\").is_some() {\n        // Specta does not currently expose a direct literal DataType variant.\n        return Ok(DataType::Primitive(Primitive::str));\n    }\n\n    // Handle enum values (for string enums)\n    if let Some(enum_values) = obj.get(\"enum\").and_then(Value::as_array)\n        && enum_values.iter().all(|v| v.is_string())\n    {\n        let mut e = Enum::default();\n        for value in enum_values {\n            if let Some(s) = value.as_str() {\n                let variant = Variant::unit();\n                e.variants.push((Cow::Owned(s.to_string()), variant));\n            }\n        }\n        return Ok(DataType::Enum(e));\n    }\n\n    // Handle anyOf / oneOf (union types)\n    if let Some(any_of) = obj.get(\"anyOf\").and_then(Value::as_array) {\n        return handle_any_of(any_of);\n    }\n\n    if let Some(one_of) = obj.get(\"oneOf\").and_then(Value::as_array) {\n        return handle_any_of(one_of);\n    }\n\n    // Handle type-based schemas\n    if let Some(instance_type) = obj.get(\"type\") {\n        return instance_type_to_datatype(instance_type, obj);\n    }\n\n    // No type specified - return empty struct (acts like \"any\")\n    Ok(Struct::named().build())\n}\n\nfn instance_type_to_datatype(\n    instance_type: &Value,\n    obj: &JsonMap<String, Value>,\n) -> Result<DataType, Error> {\n    match instance_type {\n        Value::String(t) => instance_type_name_to_datatype(t, obj),\n        Value::Array(types) => {\n            // Multiple types - create a union (enum with unnamed variants)\n            let mut e = Enum::default();\n\n            for (i, item) in types.iter().enumerate() {\n                if let Value::String(t) = item {\n                    let dt = instance_type_name_to_datatype(t, obj)?;\n                    let variant = Variant::unnamed().field(Field::new(dt)).build();\n                    e.variants\n                        .push((Cow::Owned(format!(\"Variant{}\", i)), variant));\n                }\n            }\n\n            Ok(DataType::Enum(e))\n        }\n        _ => Err(Error::ConversionError(\n            \"schema `type` must be a string or array\".into(),\n        )),\n    }\n}\n\nfn instance_type_name_to_datatype(\n    instance_type: &str,\n    obj: &JsonMap<String, Value>,\n) -> Result<DataType, Error> {\n    match instance_type {\n        \"null\" => {\n            // Null type - use empty tuple\n            Ok(DataType::Tuple(Tuple::new(vec![])))\n        }\n        \"boolean\" => Ok(DataType::Primitive(Primitive::bool)),\n        \"string\" => Ok(DataType::Primitive(Primitive::str)),\n        \"number\" => {\n            if let Some(format) = obj.get(\"format\").and_then(Value::as_str) {\n                match format {\n                    \"float\" => Ok(DataType::Primitive(Primitive::f32)),\n                    \"double\" => Ok(DataType::Primitive(Primitive::f64)),\n                    _ => Ok(DataType::Primitive(Primitive::f64)),\n                }\n            } else {\n                Ok(DataType::Primitive(Primitive::f64))\n            }\n        }\n        \"integer\" => {\n            if let Some(format) = obj.get(\"format\").and_then(Value::as_str) {\n                match format {\n                    \"int32\" => Ok(DataType::Primitive(Primitive::i32)),\n                    \"int64\" => Ok(DataType::Primitive(Primitive::i64)),\n                    \"uint32\" => Ok(DataType::Primitive(Primitive::u32)),\n                    \"uint64\" => Ok(DataType::Primitive(Primitive::u64)),\n                    _ => Ok(DataType::Primitive(Primitive::i32)),\n                }\n            } else {\n                Ok(DataType::Primitive(Primitive::i32))\n            }\n        }\n        \"array\" => {\n            if let Some(items) = obj.get(\"items\") {\n                match items {\n                    Value::Object(_) | Value::Bool(_) => {\n                        let item_dt = value_to_datatype(items)?;\n                        Ok(DataType::List(List::new(item_dt)))\n                    }\n                    Value::Array(schemas) => {\n                        // Tuple with specific items\n                        let elements: Result<Vec<_>, _> =\n                            schemas.iter().map(value_to_datatype).collect();\n                        Ok(DataType::Tuple(Tuple::new(elements?)))\n                    }\n                    _ => Err(Error::ConversionError(\n                        \"array `items` must be a schema or list of schemas\".into(),\n                    )),\n                }\n            } else {\n                // Array without items = array of empty struct (any)\n                Ok(DataType::List(List::new(Struct::named().build())))\n            }\n        }\n        \"object\" => {\n            if let Some(properties) = obj.get(\"properties\").and_then(Value::as_object)\n                && !properties.is_empty()\n            {\n                // Build struct from properties\n                let mut builder = Struct::named();\n\n                let required: Vec<&str> = obj\n                    .get(\"required\")\n                    .and_then(Value::as_array)\n                    .map(|values| values.iter().filter_map(Value::as_str).collect())\n                    .unwrap_or_default();\n\n                for (name, schema) in properties {\n                    let dt = value_to_datatype(schema)?;\n                    let is_optional = !required.contains(&name.as_str());\n\n                    let mut field = Field::new(dt);\n                    field.optional = is_optional;\n\n                    builder.field_mut(Cow::Owned(name.clone()), field);\n                }\n\n                return Ok(builder.build());\n            }\n\n            if let Some(additional) = obj.get(\"additionalProperties\") {\n                match additional {\n                    Value::Object(_) => {\n                        let value_dt = value_to_datatype(additional)?;\n                        return Ok(DataType::Map(Map::new(\n                            DataType::Primitive(Primitive::str),\n                            value_dt,\n                        )));\n                    }\n                    Value::Bool(true) => {\n                        return Ok(DataType::Map(Map::new(\n                            DataType::Primitive(Primitive::str),\n                            Struct::named().build(),\n                        )));\n                    }\n                    Value::Bool(false) => {}\n                    _ => {\n                        return Err(Error::ConversionError(\n                            \"`additionalProperties` must be a boolean or schema\".into(),\n                        ));\n                    }\n                }\n            }\n\n            Ok(Struct::named().build())\n        }\n        _ => Ok(Struct::named().build()),\n    }\n}\n\nfn handle_any_of(schemas: &[Value]) -> Result<DataType, Error> {\n    // Check if it's a nullable pattern (type | null)\n    if schemas.len() == 2 {\n        let is_null = |s: &Value| {\n            s.as_object()\n                .and_then(|obj| obj.get(\"type\"))\n                .is_some_and(|ty| matches!(ty, Value::String(t) if t == \"null\"))\n        };\n\n        if is_null(&schemas[0]) {\n            return Ok(DataType::Nullable(Box::new(value_to_datatype(\n                &schemas[1],\n            )?)));\n        }\n\n        if is_null(&schemas[1]) {\n            return Ok(DataType::Nullable(Box::new(value_to_datatype(\n                &schemas[0],\n            )?)));\n        }\n    }\n\n    // General anyOf - create enum with unnamed variants\n    let mut e = Enum::default();\n    for (i, schema) in schemas.iter().enumerate() {\n        let dt = value_to_datatype(schema)?;\n        let variant = Variant::unnamed().field(Field::new(dt)).build();\n        e.variants\n            .push((Cow::Owned(format!(\"Variant{}\", i)), variant));\n    }\n\n    Ok(DataType::Enum(e))\n}\n"
  },
  {
    "path": "specta-jsonschema/src/json_schema.rs",
    "content": "use crate::{Error, Layout, SchemaVersion, primitives};\nuse serde_json::Value;\nuse specta::{Format, Types, datatype::NamedDataType};\nuse std::{borrow::Cow, collections::BTreeMap, path::Path};\n\n/// JSON Schema exporter configuration\n#[derive(Debug, Clone)]\npub struct JsonSchema {\n    /// JSON Schema version to use\n    pub schema_version: SchemaVersion,\n    /// Layout for output organization\n    pub layout: Layout,\n    /// Optional title for the root schema\n    pub title: Option<String>,\n    /// Optional description for the root schema\n    pub description: Option<String>,\n}\n\nimpl Default for JsonSchema {\n    fn default() -> Self {\n        Self {\n            schema_version: SchemaVersion::default(),\n            layout: Layout::default(),\n            title: None,\n            description: None,\n        }\n    }\n}\n\nimpl JsonSchema {\n    /// Create a new JsonSchema exporter with default settings\n    pub fn new() -> Self {\n        Self::default()\n    }\n\n    /// Set JSON Schema version\n    pub fn schema_version(mut self, version: SchemaVersion) -> Self {\n        self.schema_version = version;\n        self\n    }\n\n    /// Set output layout\n    pub fn layout(mut self, layout: Layout) -> Self {\n        self.layout = layout;\n        self\n    }\n\n    /// Set root schema title\n    pub fn title(mut self, title: impl Into<String>) -> Self {\n        self.title = Some(title.into());\n        self\n    }\n\n    /// Set root schema description\n    pub fn description(mut self, description: impl Into<String>) -> Self {\n        self.description = Some(description.into());\n        self\n    }\n\n    /// Export types to JSON Schema as a JSON string\n    pub fn export(&self, types: &Types, format: impl Format) -> Result<String, Error> {\n        let value = self.export_as_value(types, format)?;\n        Ok(serde_json::to_string_pretty(&value)?)\n    }\n\n    /// Export types to JSON Schema as serde_json::Value\n    pub fn export_as_value(&self, types: &Types, format: impl Format) -> Result<Value, Error> {\n        let exporter = self.clone();\n        let formatted_types = format_types(&exporter, types, &format)?;\n        let types = formatted_types.as_ref();\n\n        match exporter.layout {\n            Layout::SingleFile => exporter.export_single_file(types),\n            Layout::Files => Err(Error::ConversionError(\n                \"Use export_to() for Files layout\".to_string(),\n            )),\n        }\n    }\n\n    /// Export to file or directory\n    pub fn export_to(\n        &self,\n        path: impl AsRef<Path>,\n        types: &Types,\n        format: impl Format,\n    ) -> Result<(), Error> {\n        let exporter = self.clone();\n        let formatted_types = format_types(&exporter, types, &format)?;\n        let types = formatted_types.as_ref();\n        let path = path.as_ref();\n\n        match exporter.layout {\n            Layout::SingleFile => {\n                let json = exporter.export_single_file(types)?;\n                if let Some(parent) = path.parent() {\n                    std::fs::create_dir_all(parent)?;\n                }\n                std::fs::write(path, serde_json::to_string_pretty(&json)?)?;\n                Ok(())\n            }\n            Layout::Files => exporter.export_files(path, types),\n        }\n    }\n\n    fn export_single_file(&self, types: &Types) -> Result<Value, Error> {\n        let mut definitions = BTreeMap::new();\n\n        // Convert each type to a schema\n        for ndt in types.into_sorted_iter() {\n            let schema = primitives::export(self, types, &ndt)?;\n            let name = ndt.name.to_string();\n            definitions.insert(name, schema);\n        }\n\n        // Build root schema\n        let defs_key = self.schema_version.definitions_key();\n        let mut root = serde_json::json!({\n            \"$schema\": self.schema_version.uri(),\n            defs_key: definitions,\n        });\n\n        if let Some(title) = &self.title {\n            root.as_object_mut()\n                .unwrap()\n                .insert(\"title\".to_string(), Value::String(title.clone()));\n        }\n\n        if let Some(description) = &self.description {\n            root.as_object_mut().unwrap().insert(\n                \"description\".to_string(),\n                Value::String(description.clone()),\n            );\n        }\n\n        Ok(root)\n    }\n\n    fn export_files(&self, base_path: &Path, types: &Types) -> Result<(), Error> {\n        // Create base directory\n        std::fs::create_dir_all(base_path)?;\n\n        // Group types by module path\n        let mut by_module: BTreeMap<String, Vec<NamedDataType>> = BTreeMap::new();\n\n        for ndt in types.into_sorted_iter() {\n            // module_path returns &Cow<'static, str> which is like &String\n            // We need to convert path segments to a string\n            let module = ndt.module_path.to_string().replace(\"::\", \"/\");\n            by_module.entry(module).or_default().push(ndt.clone());\n        }\n\n        // Write each type to its own file\n        for (module, ndts) in by_module {\n            let module_dir = if module.is_empty() {\n                base_path.to_path_buf()\n            } else {\n                base_path.join(&module)\n            };\n\n            std::fs::create_dir_all(&module_dir)?;\n\n            for ndt in &ndts {\n                let schema = primitives::export(self, types, ndt)?;\n                let filename = format!(\"{}.schema.json\", ndt.name);\n                let file_path = module_dir.join(filename);\n\n                // Create a root schema for this type\n                let mut root = serde_json::json!({\n                    \"$schema\": self.schema_version.uri(),\n                });\n\n                // Merge in the type's schema properties\n                if let Some(obj) = schema.as_object() {\n                    for (k, v) in obj {\n                        root.as_object_mut().unwrap().insert(k.clone(), v.clone());\n                    }\n                }\n\n                std::fs::write(file_path, serde_json::to_string_pretty(&root)?)?;\n            }\n        }\n\n        Ok(())\n    }\n}\n\nfn format_types<'a>(\n    exporter: &JsonSchema,\n    types: &'a Types,\n    format: &dyn Format,\n) -> Result<Cow<'a, Types>, Error> {\n    let mapped_types = format\n        .map_types(types)\n        .map_err(|err| Error::format(\"type graph formatter failed\", err))?;\n    Ok(Cow::Owned(mapped_types.into_owned()))\n}\n"
  },
  {
    "path": "specta-jsonschema/src/layout.rs",
    "content": "/// Controls how JSON schemas are organized in output\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum Layout {\n    /// Single file with all types in $defs section (default)\n    /// All type definitions are placed in a single JSON file under the\n    /// definitions/$defs key.\n    SingleFile,\n\n    /// Separate .json file per type, organized by module path\n    /// Each type gets its own file like: `my_module/MyType.schema.json`\n    Files,\n}\n\nimpl Default for Layout {\n    fn default() -> Self {\n        Self::SingleFile\n    }\n}\n"
  },
  {
    "path": "specta-jsonschema/src/lib.rs",
    "content": "//! [JSON Schema](https://json-schema.org) exporter and importer for [Specta](specta).\n//!\n//! This crate provides bidirectional conversion between Specta types and JSON Schema:\n//! - Export Specta types to JSON Schema (Draft 7, 2019-09, or 2020-12)\n//! - Import JSON Schema definitions as Specta DataTypes\n//!\n//! # Features\n//!\n//! - **Bidirectional conversion**: Export to JSON Schema and import from JSON Schema\n//! - **Multiple schema versions**: Support for Draft 7 (default), Draft 2019-09, and Draft 2020-12\n//! - **Serde integration**: Use `specta-serde` in userspace before export\n//! - **Flexible layouts**: Single file with `$defs` or separate files per type\n//! - **schemars ecosystem**: Compatible with the schemars crate for interoperability\n//!\n//! # Usage\n//!\n//! ## Exporting to JSON Schema\n//!\n//! ```ignore\n//! use serde::{Deserialize, Serialize};\n//! use specta::{Type, Types};\n//! use specta_jsonschema::{JsonSchema, SchemaVersion};\n//!\n//! #[derive(Serialize, Deserialize, Type)]\n//! #[serde(rename_all = \"camelCase\")]\n//! pub struct User {\n//!     pub id: u32,\n//!     pub name: String,\n//!     pub email: Option<String>,\n//! }\n//!\n//! fn main() {\n//!     let types = Types::default()\n//!         .register::<User>();\n//!\n//!     // Export to JSON Schema\n//!     let schema = JsonSchema::default()\n//!         .schema_version(SchemaVersion::Draft7)\n//!         .export(&types, specta_serde::Format)\n//!         .unwrap();\n//!\n//!     println!(\"{}\", schema);\n//! }\n//! ```\n//!\n//! ## With Serde Integration\n//!\n//! ```ignore\n//! use serde::{Deserialize, Serialize};\n//! use specta::{Type, Types};\n//! use specta_jsonschema::JsonSchema;\n//!\n//! #[derive(Serialize, Deserialize, Type)]\n//! #[serde(rename_all = \"camelCase\")]\n//! pub struct User {\n//!     pub user_id: u32,\n//!     #[serde(rename = \"fullName\")]\n//!     pub name: String,\n//! }\n//!\n//! fn main() {\n//!     let types = Types::default().register::<User>();\n//!\n//!     JsonSchema::default()\n//!         .export_to(\"./schema.json\", &types, specta_serde::Format)\n//!         .unwrap();\n//! }\n//! ```\n//!\n//! ## Importing from JSON Schema\n//!\n//! ```ignore\n//! use schemars::Schema;\n//! use specta_jsonschema::import::from_schema;\n//!\n//! let schema: Schema = serde_json::from_str(r#\"{\n//!     \"type\": \"object\",\n//!     \"properties\": {\n//!         \"name\": { \"type\": \"string\" },\n//!         \"age\": { \"type\": \"integer\" }\n//!     },\n//!     \"required\": [\"name\"]\n//! }\"#).unwrap();\n//!\n//! let datatype = from_schema(&schema).unwrap();\n//! ```\n//!\n//! ## Multiple Output Layouts\n//!\n//! ```ignore\n//! use specta_jsonschema::{JsonSchema, Layout};\n//!\n//! // Single file with all types in $defs\n//! JsonSchema::default()\n//!     .layout(Layout::SingleFile)\n//!     .export_to(\n//!         \"./schema.json\",\n//!         &types,\n//!         specta_serde::Format,\n//!     )\n//!     .unwrap();\n//!\n//! // Separate file per type, organized by module\n//! JsonSchema::default()\n//!     .layout(Layout::Files)\n//!     .export_to(\n//!         \"./schemas/\",\n//!         &types,\n//!         specta_serde::Format,\n//!     )\n//!     .unwrap();\n//! ```\n\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n#![allow(warnings)] // TODO: leaving this until it's implemented to avoid unnecessary warnings.\n\nmod error;\npub mod import;\nmod json_schema;\nmod layout;\nmod primitives;\nmod schema_version;\n\npub use error::Error;\npub use json_schema::JsonSchema;\npub use layout::Layout;\npub use schema_version::SchemaVersion;\n\n// Legacy function - kept for backward compatibility\n#[deprecated(note = \"Use import::from_schema instead\")]\npub fn to_ast(schema: &schemars::Schema) -> Result<specta::datatype::DataType, Error> {\n    import::from_schema(schema)\n}\n"
  },
  {
    "path": "specta-jsonschema/src/primitives.rs",
    "content": "use crate::{Error, JsonSchema};\nuse serde_json::{Map, Value, json};\nuse specta::{\n    Types,\n    datatype::{NamedDataType, *},\n};\n\n/// Convert a NamedDataType to a JSON Schema definition\npub fn export(js: &JsonSchema, types: &Types, ndt: &NamedDataType) -> Result<Value, Error> {\n    let Some(ty) = &ndt.ty else {\n        return Ok(json!({}));\n    };\n\n    datatype_to_schema(js, types, ty, true)\n}\n\n/// Convert a DataType to a JSON Schema, optionally as a reference\npub fn datatype_to_schema(\n    js: &JsonSchema,\n    types: &Types,\n    dt: &DataType,\n    is_definition: bool,\n) -> Result<Value, Error> {\n    match dt {\n        // Primitives\n        DataType::Primitive(p) => Ok(primitive_to_schema(p)),\n\n        // Nullable\n        DataType::Nullable(inner) => {\n            let inner_schema = datatype_to_schema(js, types, inner, false)?;\n            Ok(json!({\n                \"anyOf\": [\n                    inner_schema,\n                    {\"type\": \"null\"}\n                ]\n            }))\n        }\n\n        // List/Array\n        DataType::List(list) => {\n            let items = datatype_to_schema(js, types, &list.ty, false)?;\n\n            if let Some(len) = list.length {\n                // Fixed-length array (tuple-like)\n                Ok(json!({\n                    \"type\": \"array\",\n                    \"items\": items,\n                    \"minItems\": len,\n                    \"maxItems\": len\n                }))\n            } else {\n                // Variable-length array\n                Ok(json!({\n                    \"type\": \"array\",\n                    \"items\": items\n                }))\n            }\n        }\n\n        // Map\n        DataType::Map(map) => {\n            let value_schema = datatype_to_schema(js, types, map.value_ty(), false)?;\n\n            // JSON Schema uses additionalProperties for maps\n            Ok(json!({\n                \"type\": \"object\",\n                \"additionalProperties\": value_schema\n            }))\n        }\n\n        // Struct\n        DataType::Struct(s) => struct_to_schema(js, types, s),\n\n        // Enum\n        DataType::Enum(e) => enum_to_schema(js, types, e),\n\n        // Tuple\n        DataType::Tuple(t) => tuple_to_schema(js, types, t),\n\n        // Reference\n        DataType::Reference(r) => {\n            match r {\n                Reference::Named(r) => {\n                    if is_definition {\n                        // When exporting a definition, inline it\n                        if let Some(referenced_ndt) = types.get(r) {\n                            let Some(ty) = &referenced_ndt.ty else {\n                                return Ok(json!({}));\n                            };\n\n                            datatype_to_schema(js, types, ty, true)\n                        } else {\n                            Err(Error::InvalidReference(\n                                \"Reference not found in Types\".to_string(),\n                            ))\n                        }\n                    } else {\n                        // Use $ref for references\n                        let defs_key = js.schema_version.definitions_key();\n                        if let Some(referenced_ndt) = types.get(r) {\n                            Ok(json!({\n                                \"$ref\": format!(\"#/{}/{}\", defs_key, referenced_ndt.name)\n                            }))\n                        } else {\n                            Err(Error::InvalidReference(\n                                \"Reference not found in Types\".to_string(),\n                            ))\n                        }\n                    }\n                }\n                Reference::Opaque(_) => Err(Error::UnsupportedDataType(\n                    \"Opaque references are not supported by JSON Schema exporter\".to_string(),\n                )),\n            }\n        }\n        DataType::Generic(_) => Ok(json!({})), // Empty schema accepts anything\n        DataType::Intersection(intersection) => Ok(json!({\n            \"allOf\": intersection\n                .iter()\n                .map(|ty| datatype_to_schema(js, types, ty, false))\n                .collect::<Result<Vec<_>, _>>()?\n        })),\n    }\n}\n\nfn primitive_to_schema(p: &Primitive) -> Value {\n    match p {\n        Primitive::bool => json!({\"type\": \"boolean\"}),\n        Primitive::str => json!({\"type\": \"string\"}),\n        Primitive::char => json!({\"type\": \"string\", \"minLength\": 1, \"maxLength\": 1}),\n\n        // Integers\n        Primitive::i8 => json!({\"type\": \"integer\", \"minimum\": i8::MIN, \"maximum\": i8::MAX}),\n        Primitive::i16 => json!({\"type\": \"integer\", \"minimum\": i16::MIN, \"maximum\": i16::MAX}),\n        Primitive::i32 => json!({\"type\": \"integer\", \"format\": \"int32\"}),\n        Primitive::i64 => json!({\"type\": \"integer\", \"format\": \"int64\"}),\n        Primitive::i128 => json!({\"type\": \"integer\"}),\n        Primitive::isize => json!({\"type\": \"integer\"}),\n\n        Primitive::u8 => json!({\"type\": \"integer\", \"minimum\": 0, \"maximum\": u8::MAX}),\n        Primitive::u16 => json!({\"type\": \"integer\", \"minimum\": 0, \"maximum\": u16::MAX}),\n        Primitive::u32 => json!({\"type\": \"integer\", \"minimum\": 0, \"format\": \"uint32\"}),\n        Primitive::u64 => json!({\"type\": \"integer\", \"minimum\": 0, \"format\": \"uint64\"}),\n        Primitive::u128 => json!({\"type\": \"integer\", \"minimum\": 0}),\n        Primitive::usize => json!({\"type\": \"integer\", \"minimum\": 0}),\n\n        // Floats\n        Primitive::f16 => json!({\"type\": \"number\", \"format\": \"float16\"}),\n        Primitive::f32 => json!({\"type\": \"number\", \"format\": \"float\"}),\n        Primitive::f64 => json!({\"type\": \"number\", \"format\": \"double\"}),\n        Primitive::f128 => json!({\"type\": \"number\", \"format\": \"float128\"}),\n    }\n}\n\nfn struct_to_schema(js: &JsonSchema, types: &Types, s: &Struct) -> Result<Value, Error> {\n    match &s.fields {\n        Fields::Unit => {\n            // Unit struct = null\n            Ok(json!({\"type\": \"null\"}))\n        }\n        Fields::Unnamed(fields) => {\n            // Tuple struct - represent as array\n            let items: Result<Vec<_>, _> = fields\n                .fields\n                .iter()\n                .filter_map(|field| field.ty.as_ref().map(|ty| (field, ty)))\n                .map(|(_, ty)| datatype_to_schema(js, types, ty, false))\n                .collect();\n\n            let items = items?;\n            Ok(json!({\n                \"type\": \"array\",\n                \"prefixItems\": items,\n                \"items\": false,\n                \"minItems\": items.len(),\n                \"maxItems\": items.len()\n            }))\n        }\n        Fields::Named(fields) => {\n            // Named fields = object\n            let mut properties = Map::new();\n            let mut required = Vec::new();\n\n            for (name, (field, ty)) in fields\n                .fields\n                .iter()\n                .filter_map(|(name, field)| field.ty.as_ref().map(|ty| (name, (field, ty))))\n            {\n                let schema = datatype_to_schema(js, types, ty, false)?;\n                properties.insert(name.clone().into_owned(), schema);\n\n                if !field.optional {\n                    required.push(Value::String(name.clone().into_owned()));\n                }\n            }\n\n            let mut obj = json!({\n                \"type\": \"object\",\n                \"properties\": properties\n            });\n\n            if !required.is_empty() {\n                obj.as_object_mut()\n                    .unwrap()\n                    .insert(\"required\".to_string(), Value::Array(required));\n            }\n\n            Ok(obj)\n        }\n    }\n}\n\nfn enum_to_schema(js: &JsonSchema, types: &Types, e: &Enum) -> Result<Value, Error> {\n    let variants: Result<Vec<_>, _> = e\n        .variants\n        .iter()\n        .filter(|(_, variant)| !variant.skip)\n        .map(|(name, variant)| variant_to_schema(js, types, name, variant))\n        .collect();\n\n    let variants = variants?;\n\n    if variants.is_empty() {\n        return Err(Error::ConversionError(\n            \"Enum has no non-skipped variants\".to_string(),\n        ));\n    }\n\n    if variants.len() == 1 {\n        Ok(variants.into_iter().next().unwrap())\n    } else {\n        Ok(json!({\n            \"anyOf\": variants\n        }))\n    }\n}\n\nfn variant_to_schema(\n    js: &JsonSchema,\n    types: &Types,\n    name: &str,\n    variant: &Variant,\n) -> Result<Value, Error> {\n    // Get enum representation from attributes\n    // For now, default to external tagging\n\n    match &variant.fields {\n        Fields::Unit => {\n            // Unit variant = string literal\n            Ok(json!({\"const\": name}))\n        }\n        Fields::Unnamed(fields) => {\n            // Tuple variant with external tagging: { \"VariantName\": [...] }\n            let items: Result<Vec<_>, _> = fields\n                .fields\n                .iter()\n                .filter_map(|field| field.ty.as_ref().map(|ty| (field, ty)))\n                .map(|(_, ty)| datatype_to_schema(js, types, ty, false))\n                .collect();\n\n            let items = items?;\n\n            if items.len() == 1 {\n                // Single item - unwrap the array\n                Ok(json!({\n                    \"type\": \"object\",\n                    \"required\": [name],\n                    \"properties\": {\n                        name: items[0].clone()\n                    },\n                    \"additionalProperties\": false\n                }))\n            } else {\n                Ok(json!({\n                    \"type\": \"object\",\n                    \"required\": [name],\n                    \"properties\": {\n                        name: {\n                            \"type\": \"array\",\n                            \"prefixItems\": items.clone(),\n                            \"items\": false,\n                            \"minItems\": items.len(),\n                            \"maxItems\": items.len()\n                        }\n                    },\n                    \"additionalProperties\": false\n                }))\n            }\n        }\n        Fields::Named(fields) => {\n            // Named variant with external tagging: { \"VariantName\": {...} }\n            let mut properties = Map::new();\n            let mut required = Vec::new();\n\n            for (field_name, (field, ty)) in fields\n                .fields\n                .iter()\n                .filter_map(|(name, field)| field.ty.as_ref().map(|ty| (name, (field, ty))))\n            {\n                let schema = datatype_to_schema(js, types, ty, false)?;\n                properties.insert(field_name.clone().into_owned(), schema);\n\n                if !field.optional {\n                    required.push(Value::String(field_name.clone().into_owned()));\n                }\n            }\n\n            let mut inner_obj = json!({\n                \"type\": \"object\",\n                \"properties\": properties\n            });\n\n            if !required.is_empty() {\n                inner_obj\n                    .as_object_mut()\n                    .unwrap()\n                    .insert(\"required\".to_string(), Value::Array(required));\n            }\n\n            Ok(json!({\n                \"type\": \"object\",\n                \"required\": [name],\n                \"properties\": {\n                    name: inner_obj\n                },\n                \"additionalProperties\": false\n            }))\n        }\n    }\n}\n\nfn tuple_to_schema(js: &JsonSchema, types: &Types, t: &Tuple) -> Result<Value, Error> {\n    if t.elements.is_empty() {\n        // Empty tuple = null\n        return Ok(json!({\"type\": \"null\"}));\n    }\n\n    let items: Result<Vec<_>, _> = t\n        .elements\n        .iter()\n        .map(|ty| datatype_to_schema(js, types, ty, false))\n        .collect();\n\n    let items = items?;\n    Ok(json!({\n        \"type\": \"array\",\n        \"prefixItems\": items.clone(),\n        \"items\": false,\n        \"minItems\": items.len(),\n        \"maxItems\": items.len()\n    }))\n}\n"
  },
  {
    "path": "specta-jsonschema/src/schema_version.rs",
    "content": "use serde::{Deserialize, Serialize};\n\n/// JSON Schema version specification\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\npub enum SchemaVersion {\n    /// JSON Schema Draft 7 (2018) - Most widely supported\n    Draft7,\n    /// JSON Schema Draft 2019-09\n    Draft2019_09,\n    /// JSON Schema Draft 2020-12 (latest)\n    Draft2020_12,\n}\n\nimpl SchemaVersion {\n    /// Returns the $schema URI for this version\n    pub fn uri(&self) -> &'static str {\n        match self {\n            Self::Draft7 => \"http://json-schema.org/draft-07/schema#\",\n            Self::Draft2019_09 => \"https://json-schema.org/draft/2019-09/schema\",\n            Self::Draft2020_12 => \"https://json-schema.org/draft/2020-12/schema\",\n        }\n    }\n\n    /// Returns the key used for definitions in this version\n    /// Draft 7 uses \"definitions\", newer versions use \"$defs\"\n    pub fn definitions_key(&self) -> &'static str {\n        match self {\n            Self::Draft7 => \"definitions\",\n            Self::Draft2019_09 | Self::Draft2020_12 => \"$defs\",\n        }\n    }\n}\n\nimpl Default for SchemaVersion {\n    fn default() -> Self {\n        Self::Draft7\n    }\n}\n"
  },
  {
    "path": "specta-jsonschema/tests/basic.rs",
    "content": "#![allow(missing_docs)]\n\nuse std::fs;\n\nuse serde::{Deserialize, Serialize};\nuse specta::{Type, Types};\nuse specta_jsonschema::{JsonSchema, SchemaVersion};\n\n#[derive(Serialize, Deserialize, Type)]\nstruct User {\n    id: u32,\n    name: String,\n    email: Option<String>,\n}\n\n#[derive(Serialize, Deserialize, Type)]\nenum Status {\n    Active,\n    Inactive,\n    Pending,\n}\n\n#[test]\nfn test_basic_export() {\n    let types = Types::default().register::<User>().register::<Status>();\n\n    let result = JsonSchema::default().export(&types, specta_serde::Format);\n    assert!(result.is_ok(), \"Export should succeed: {:?}\", result.err());\n\n    let schema_str = result.unwrap();\n    assert!(schema_str.contains(\"\\\"$schema\\\"\"));\n    assert!(schema_str.contains(\"\\\"User\\\"\"));\n    assert!(schema_str.contains(\"\\\"Status\\\"\"));\n}\n\n#[test]\nfn test_schema_version() {\n    let types = Types::default().register::<User>();\n\n    let result = JsonSchema::default()\n        .schema_version(SchemaVersion::Draft7)\n        .export(&types, specta_serde::Format);\n\n    assert!(result.is_ok());\n    let schema = result.unwrap();\n    assert!(schema.contains(\"http://json-schema.org/draft-07/schema#\"));\n}\n\n#[test]\nfn test_primitives() {\n    #[derive(Serialize, Deserialize, Type)]\n    struct Primitives {\n        string_field: String,\n        int_field: i32,\n        float_field: f64,\n        bool_field: bool,\n    }\n\n    let types = Types::default().register::<Primitives>();\n    let result = JsonSchema::default().export(&types, specta_serde::Format);\n\n    assert!(result.is_ok());\n    let schema = result.unwrap();\n    assert!(schema.contains(\"Primitives\"));\n}\n\n#[test]\nfn test_nullable() {\n    let types = Types::default().register::<User>();\n    let result = JsonSchema::default().export(&types, specta_serde::Format);\n\n    assert!(result.is_ok());\n    let schema = result.unwrap();\n    // email is Option<String> so should have anyOf with null\n    assert!(schema.contains(\"anyOf\") || schema.contains(\"null\"));\n}\n\n#[test]\nfn test_enum() {\n    let types = Types::default().register::<Status>();\n    let result = JsonSchema::default().export(&types, specta_serde::Format);\n\n    assert!(result.is_ok());\n    let schema = result.unwrap();\n    assert!(schema.contains(\"\\\"Active\\\"\"));\n    assert!(schema.contains(\"\\\"Inactive\\\"\"));\n    assert!(schema.contains(\"\\\"Pending\\\"\"));\n}\n\n#[test]\nfn test_export_uses_format() {\n    #[derive(Type, serde::Serialize)]\n    #[serde(rename_all = \"camelCase\")]\n    struct SerdeUser {\n        user_id: u32,\n    }\n\n    let types = Types::default().register::<SerdeUser>();\n    let schema = JsonSchema::default()\n        .export(&types, specta_serde::Format)\n        .unwrap();\n\n    assert!(schema.contains(\"userId\"));\n    assert!(!schema.contains(\"user_id\"));\n}\n\n#[test]\nfn test_export_to_uses_format() {\n    #[derive(Type, serde::Serialize)]\n    #[serde(rename_all = \"camelCase\")]\n    struct SerdeUser {\n        user_id: u32,\n    }\n\n    let types = Types::default().register::<SerdeUser>();\n    let path = std::path::Path::new(env!(\"CARGO_MANIFEST_DIR\"))\n        .join(\"target\")\n        .join(format!(\"jsonschema-test-{}.json\", std::process::id()));\n\n    JsonSchema::default()\n        .export_to(&path, &types, specta_serde::Format)\n        .unwrap();\n\n    let schema = fs::read_to_string(&path).unwrap();\n    fs::remove_file(&path).unwrap();\n\n    assert!(schema.contains(\"userId\"));\n    assert!(!schema.contains(\"user_id\"));\n}\n"
  },
  {
    "path": "specta-kotlin/Cargo.toml",
    "content": "[package]\nname = \"specta-kotlin\"\ndescription = \"Export your Rust types to Kotlin\"\nversion = \"0.0.2\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-kotlin/latest/specta-kotlin\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"kotlin\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\nreadme = \"../README.md\"\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[lints]\nworkspace = true\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\" }\n"
  },
  {
    "path": "specta-kotlin/src/lib.rs",
    "content": "//! [Kotlin](https://kotlinlang.org) language exporter for [Specta](specta).\n//!\n//! <div class=\"warning\">\n//! This crate is still in active development and is not yet ready for general purpose use!\n//! </div>\n//!\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n\n// use specta::{\n//     datatype::{DataType, Primitive},\n//     Type, Types,\n// };\n\n// /// TODO\n// pub fn export<T: Type>() -> Result<String, String> {\n//     datatype(&T::definition(\n//         &mut Types::default(),\n//         Generics::Definition,\n//     ))\n// }\n\n// fn datatype(t: &DataType) -> Result<String, String> {\n//     Ok(match t {\n//         DataType::Primitive(p) => match p {\n//             Primitive::str => \"String\",\n//             Primitive::char => \"Char\",\n//             Primitive::i8 => \"Byte\",\n//             Primitive::i16 => \"Short\",\n//             Primitive::isize | Primitive::i32 => \"Int\",\n//             Primitive::i64 => \"Long\",\n//             Primitive::u8 => \"UByte\",\n//             Primitive::u16 => \"UShort\",\n//             Primitive::usize | Primitive::u32 => \"UInt\",\n//             Primitive::u64 => \"ULong\",\n//             Primitive::bool => \"Boolean\",\n//             Primitive::f32 => \"Float\",\n//             Primitive::f64 => \"Double\",\n//             Primitive::i128 | Primitive::u128 => {\n//                 return Err(\"Swift does not support 128 numbers!\".to_owned())\n//             }\n//         }\n//         .to_string(),\n//         DataType::List(t) => format!(\"List<{}>\", datatype(t.ty())?),\n//         DataType::Tuple(_) => return Err(\"Kotlin does not support tuple types\".to_owned()),\n//         DataType::Map(t) => format!(\n//             \"HashMap<{}, {}>\",\n//             datatype(&t.key_ty())?,\n//             datatype(&t.value_ty())?\n//         ),\n//         DataType::Generic(t) => t.to_string(),\n//         DataType::Reference(reference) => {\n//             // let name = reference.name();\n//             let generics = reference.generics();\n\n//             // match &generics[..] {\n//             //     [] => name.to_string(),\n//             //     generics => {\n//             //         let generics = generics\n//             //             .iter()\n//             //             .map(|(_, t)| datatype(t))\n//             //             .collect::<Result<Vec<_>, _>>()?\n//             //             .join(\", \");\n\n//             //         format!(\"{name}<{generics}>\")\n//             //     }\n//             // }\n//             todo!();\n//         }\n//         DataType::Nullable(t) => format!(\"{}?\", datatype(&t)?),\n//         DataType::Struct(s) => {\n//             let name = s.name();\n//             let generics = s.generics();\n//             let fields = s.fields();\n//             let tag = s.tag();\n\n//             // let decl = match &fields[..] {\n//             //     [] => \"class {name}\".to_string(),\n//             //     fields => {\n//             //         let generics = (!generics.is_empty())\n//             //             .then(|| format!(\"<{}>\", generics.join(\", \")))\n//             //             .unwrap_or_default();\n\n//             //         let fields = fields\n//             //             .iter()\n//             //             .map(|f| {\n//             //                 let name = &f.name;\n//             //                 let typ = datatype(&f.ty)?;\n//             //                 let optional = matches!(f.ty, DataType::Nullable(_))\n//             //                     .then(|| \"= null\")\n//             //                     .unwrap_or_default();\n\n//             //                 Ok(format!(\"\\tvar {name}: {typ}{optional}\"))\n//             //             })\n//             //             .collect::<Result<Vec<_>, String>>()?\n//             //             .join(\", \");\n\n//             //         let tag = tag\n//             //             .clone()\n//             //             .map(|t| format!(\"var {t}: String\"))\n//             //             .unwrap_or_default();\n\n//             //         format!(\"data class {name}{generics} ({fields}{tag})\")\n//             //     }\n//             // };\n//             // format!(\"@Serializable\\n{decl}\\n\")\n//             todo!();\n//         }\n//         DataType::Literal(_) => return Err(\"Kotlin does not support literal types!\".to_owned()),\n//         _ => todo!(),\n//     })\n// }\n"
  },
  {
    "path": "specta-macros/Cargo.toml",
    "content": "[package]\nname = \"specta-macros\"\ndescription = \"Macros for specta. Don't use directly!\"\nversion = \"2.0.0-rc.24\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta/latest/specta\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"typescript\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\n\n[lib]\nproc-macro = true\n\n[features]\ndefault = []\nserde = []\n# These will be enabled by `specta` or `specta-util` automatically as required. They depend on certain exports of it so enabling them manually is not useful.\nDO_NOT_USE_collect = []\nDO_NOT_USE_function = [\"syn/full\"]\n\n[lints]\nworkspace = true\n\n[dependencies]\nproc-macro2 = \"1\"\nquote = \"1\"\nsyn = { version = \"2\", default-features = false, features = [\n  \"clone-impls\",\n  \"derive\",\n  \"parsing\",\n  \"printing\",\n  \"proc-macro\",\n  \"visit\",\n  \"visit-mut\",\n] }\nInflector = { version = \"0.11\", default-features = false }\n"
  },
  {
    "path": "specta-macros/README.md",
    "content": "# Specta Macros\n\nThe macros for [Specta](https://crates.io/crates/specta). Do not use this crate directly! It is reexported by the Specta crate."
  },
  {
    "path": "specta-macros/src/lib.rs",
    "content": "//! Easily export your Rust types to other languages\n//!\n//! This crate contains the macro which are reexported by the `specta` crate.\n//! You shouldn't need to use this crate directly.\n//! Checkout [Specta](https://docs.rs/specta).\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n\n#[cfg(feature = \"DO_NOT_USE_function\")]\nmod specta;\nmod r#type;\nmod utils;\n\nuse quote::quote;\nuse syn::{Error, LitStr, Type, parse_macro_input};\n\n/// Implements `specta::Type` for a given struct or enum.\n///\n/// # Attributes\n///\n/// `Type` supports `#[specta(...)]` attributes on containers, variants, and fields.\n/// It also understands selected Rust and Serde attributes.\n///\n/// ## `#[specta(...)]` container attributes\n///\n/// These can be used on the struct or enum deriving `Type`.\n///\n/// - `#[specta(type = T)]` overrides the generated type definition with `T`.\n///   `T` may be a path or Rust type, such as `String`, `Vec<T>`, or `(String, i32)`.\n/// - `#[specta(crate = path::to::specta)]` uses a custom path to the `specta` crate.\n/// - `#[specta(inline)]` or `#[specta(inline = true)]` inlines this type where it is referenced.\n///   Use `#[specta(inline = false)]` to disable it.\n/// - `#[specta(remote = path::ToType)]` implements `Type` for a remote type instead of the\n///   local derive input name.\n/// - `#[specta(collect)]` or `#[specta(collect = true)]` enables collection for this type when\n///   the `collect` feature is used. Use `#[specta(collect = false)]` to prevent collection.\n/// - `#[specta(skip_attr = \"attr_name\")]` ignores attributes named `attr_name` while parsing and\n///   while collecting runtime attributes. This may be repeated.\n/// - `#[specta(transparent)]` or `#[specta(transparent = true)]` treats a struct as its single\n///   non-skipped field. Use `#[specta(transparent = false)]` to disable it.\n/// - `#[specta(bound = \"T: Type\")]` replaces the automatically inferred `Type` bounds.\n///   Use `#[specta(bound = \"\")]` to emit no inferred bounds.\n///\n/// `#[specta(type = ...)]` cannot be combined with `#[specta(transparent)]`.\n/// `#[specta(transparent)]` is only valid on structs with exactly one non-skipped field.\n///\n/// ## `#[specta(...)]` variant attributes\n///\n/// These can be used on enum variants.\n///\n/// - `#[specta(type = T)]` or `#[specta(r#type = T)]` overrides the generated variant payload\n///   type with `T`.\n/// - `#[specta(skip)]` or `#[specta(skip = true)]` marks the variant as skipped.\n///   Use `#[specta(skip = false)]` to disable it.\n/// - `#[specta(inline)]` or `#[specta(inline = true)]` inlines the first unnamed field of the\n///   variant. Use `#[specta(inline = false)]` to disable it.\n///\n/// ## `#[specta(...)]` field attributes\n///\n/// These can be used on struct fields and enum variant fields.\n///\n/// - `#[specta(type = T)]` overrides the generated field type with `T`.\n/// - `#[specta(inline)]` or `#[specta(inline = true)]` inlines the field type.\n///   Use `#[specta(inline = false)]` to disable it.\n/// - `#[specta(skip)]` or `#[specta(skip = true)]` skips generating the field type.\n///   Use `#[specta(skip = false)]` to disable it.\n/// - `#[specta(optional)]` or `#[specta(optional = true)]` marks the field as optional.\n///   This is commonly used with `Option<T>` to export `{ a?: T | null }` instead of\n///   `{ a: T | null }`.\n/// - `#[specta(default)]` or `#[specta(default = true)]` is an alias for `optional`.\n///\n/// ## Rust attributes\n///\n/// These are read on containers, variants, and fields.\n///\n/// - `#[doc = \"...\"]` is exported as documentation.\n/// - `#[deprecated]` marks the item as deprecated.\n/// - `#[deprecated = \"...\"]` marks the item as deprecated with a note.\n/// - `#[deprecated(note = \"...\")]` marks the item as deprecated with a note.\n/// - `#[deprecated(since = \"...\", note = \"...\")]` marks the item as deprecated with a version\n///   and note.\n///\n/// `#[repr(transparent)]` is also accepted on containers as an alias for\n/// `#[specta(transparent)]`.\n///\n/// ## Serde attributes\n///\n/// Specta can read selected `#[serde(...)]` attributes. Prefer Serde attributes when the same\n/// behavior should apply to Serde and Specta.\n///\n/// These are always understood by the derive macro:\n///\n/// - Container: `#[serde(transparent)]` acts like `#[specta(transparent)]`.\n/// - Field: `#[serde(skip)]` acts like `#[specta(skip)]`.\n/// - Variant: `#[serde(skip)]` acts like `#[specta(skip)]`.\n///\n/// With the `serde` feature enabled, the following Serde attributes are also preserved as\n/// runtime attributes.\n/// To apply these attributes during export, use\n/// [`specta_serde::Format`](https://docs.rs/specta-serde/latest/specta_serde/struct.Format.html)\n/// or\n/// [`specta_serde::FormatPhases`](https://docs.rs/specta-serde/latest/specta_serde/struct.FormatPhases.html).\n/// See the [`specta-serde` docs](https://docs.rs/specta-serde) for details.\n///\n/// Container attributes:\n///\n/// - `#[serde(rename = \"...\")]`\n/// - `#[serde(rename(serialize = \"...\"))]`\n/// - `#[serde(rename(deserialize = \"...\"))]`\n/// - `#[serde(rename_all = \"...\")]`\n/// - `#[serde(rename_all(serialize = \"...\"))]`\n/// - `#[serde(rename_all(deserialize = \"...\"))]`\n/// - `#[serde(rename_all_fields = \"...\")]`\n/// - `#[serde(rename_all_fields(serialize = \"...\"))]`\n/// - `#[serde(rename_all_fields(deserialize = \"...\"))]`\n/// - `#[serde(tag = \"...\")]`\n/// - `#[serde(content = \"...\")]`\n/// - `#[serde(untagged)]`\n/// - `#[serde(default)]` or `#[serde(default = \"...\")]`\n/// - `#[serde(transparent)]`\n/// - `#[serde(from = \"T\")]`\n/// - `#[serde(try_from = \"T\")]`\n/// - `#[serde(into = \"T\")]`\n/// - `#[serde(variant_identifier)]`\n/// - `#[serde(field_identifier)]`\n///\n/// Variant attributes:\n///\n/// - `#[serde(rename = \"...\")]`\n/// - `#[serde(rename(serialize = \"...\"))]`\n/// - `#[serde(rename(deserialize = \"...\"))]`\n/// - `#[serde(alias = \"...\")]`\n/// - `#[serde(rename_all = \"...\")]`\n/// - `#[serde(rename_all(serialize = \"...\"))]`\n/// - `#[serde(rename_all(deserialize = \"...\"))]`\n/// - `#[serde(skip)]`\n/// - `#[serde(skip_serializing)]`\n/// - `#[serde(skip_deserializing)]`\n/// - `#[serde(serialize_with = \"...\")]`\n/// - `#[serde(deserialize_with = \"...\")]`\n/// - `#[serde(with = \"...\")]`\n/// - `#[serde(other)]`\n/// - `#[serde(untagged)]`\n///\n/// Field attributes:\n///\n/// - `#[serde(rename = \"...\")]`\n/// - `#[serde(rename(serialize = \"...\"))]`\n/// - `#[serde(rename(deserialize = \"...\"))]`\n/// - `#[serde(alias = \"...\")]`\n/// - `#[serde(default)]` or `#[serde(default = \"...\")]`\n/// - `#[serde(flatten)]`\n/// - `#[serde(skip)]`\n/// - `#[serde(skip_serializing)]`\n/// - `#[serde(skip_deserializing)]`\n/// - `#[serde(skip_serializing_if = \"...\")]`\n/// - `#[serde(serialize_with = \"...\")]`\n/// - `#[serde(deserialize_with = \"...\")]`\n/// - `#[serde(with = \"...\")]`\n///\n/// Supported rename casing values are:\n///\n/// - `\"lowercase\"`\n/// - `\"UPPERCASE\"`\n/// - `\"PascalCase\"`\n/// - `\"camelCase\"`\n/// - `\"snake_case\"`\n/// - `\"SCREAMING_SNAKE_CASE\"`\n/// - `\"kebab-case\"`\n/// - `\"SCREAMING-KEBAB-CASE\"`\n///\n/// ## Example\n///\n/// ```ignore\n/// use specta::Type;\n///\n/// // Use it on structs\n/// #[derive(Type)]\n/// pub struct MyCustomStruct {\n///     pub name: String,\n/// }\n///\n/// #[derive(Type)]\n/// pub struct MyCustomStruct2(String, i32, bool);\n///\n/// // Use it on enums\n/// #[derive(Type)]\n/// pub enum MyCustomType {\n///     VariantOne,\n///     VariantTwo(String, i32),\n///     VariantThree { name: String, age: i32 },\n/// }\n/// ```\n///\n/// ## Known limitations\n///\n///  - Const generics will not be exported within user-defined types which define const generics\n///  - Associated constants or types can't be used\n///\n#[proc_macro_derive(Type, attributes(specta))]\npub fn derive_type(input: proc_macro::TokenStream) -> proc_macro::TokenStream {\n    r#type::derive(input).unwrap_or_else(|err| err.into_compile_error().into())\n}\n\n/// Parses a string literal into a Rust type token stream.\n///\n/// This is an internal helper proc macro used by Specta macros to turn a\n/// literal like `\"Option<String>\"` into a Rust type at compile time.\n#[proc_macro]\npub fn parse_type_from_lit(input: proc_macro::TokenStream) -> proc_macro::TokenStream {\n    let lit = parse_macro_input!(input as LitStr);\n\n    match syn::parse_str::<Type>(&lit.value()) {\n        Ok(ty) => quote!(#ty).into(),\n        Err(err) => Error::new_spanned(lit, format!(\"invalid type literal: {err}\"))\n            .to_compile_error()\n            .into(),\n    }\n}\n\n/// Prepares a function to have its types extracted using `specta::function::fn_datatype!`\n///\n/// ## Example\n///\n/// ```ignore\n/// #[specta::specta]\n/// fn my_function(arg1: i32, arg2: bool) -> &'static str {\n///     \"Hello World\"\n/// }\n/// ```\n#[proc_macro_attribute]\n#[cfg(feature = \"DO_NOT_USE_function\")]\npub fn specta(\n    attr: proc_macro::TokenStream,\n    item: proc_macro::TokenStream,\n) -> proc_macro::TokenStream {\n    specta::attribute(attr, item).unwrap_or_else(|err| err.into_compile_error().into())\n}\n"
  },
  {
    "path": "specta-macros/src/specta.rs",
    "content": "// inspired by https://github.com/tauri-apps/tauri/blob/2901145c497299f033ba7120af5f2e7ead16c75a/core/tauri-macros/src/command/handler.rs\n\nuse std::str::FromStr;\n\nuse inflector::Inflector;\nuse proc_macro2::TokenStream;\nuse quote::{ToTokens, quote};\nuse syn::{FnArg, ItemFn, Pat, Visibility, parse};\n\nuse crate::{\n    r#type::attr::deprecated_as_tokens,\n    utils::{AttrExtract, format_fn_wrapper, parse_attrs},\n};\n\nfn unraw(s: &str) -> &str {\n    if s.starts_with(\"r#\") {\n        s.split_at(2).1\n    } else {\n        s\n    }\n}\n\n#[derive(Clone, Copy)]\nenum RenameAllRule {\n    Lowercase,\n    Uppercase,\n    PascalCase,\n    CamelCase,\n    SnakeCase,\n    ScreamingSnakeCase,\n    KebabCase,\n    ScreamingKebabCase,\n}\n\nimpl RenameAllRule {\n    fn parse(value: &str, span: proc_macro2::Span) -> syn::Result<Self> {\n        match value {\n            \"lowercase\" => Ok(Self::Lowercase),\n            \"UPPERCASE\" => Ok(Self::Uppercase),\n            \"PascalCase\" => Ok(Self::PascalCase),\n            \"camelCase\" => Ok(Self::CamelCase),\n            \"snake_case\" => Ok(Self::SnakeCase),\n            \"SCREAMING_SNAKE_CASE\" => Ok(Self::ScreamingSnakeCase),\n            \"kebab-case\" => Ok(Self::KebabCase),\n            \"SCREAMING-KEBAB-CASE\" => Ok(Self::ScreamingKebabCase),\n            _ => Err(syn::Error::new(\n                span,\n                \"specta: unsupported rename rule. Expected one of lowercase, UPPERCASE, PascalCase, camelCase, snake_case, SCREAMING_SNAKE_CASE, kebab-case, SCREAMING-KEBAB-CASE\",\n            )),\n        }\n    }\n\n    fn apply(self, input: &str) -> String {\n        match self {\n            Self::Lowercase => input.to_lowercase(),\n            Self::Uppercase => input.to_uppercase(),\n            Self::PascalCase => input.to_pascal_case(),\n            Self::CamelCase => input.to_camel_case(),\n            Self::SnakeCase => input.to_snake_case(),\n            Self::ScreamingSnakeCase => input.to_screaming_snake_case(),\n            Self::KebabCase => input.to_kebab_case(),\n            Self::ScreamingKebabCase => input.to_kebab_case().to_uppercase(),\n        }\n    }\n}\n\nstruct FunctionNameAttrs {\n    rename: Option<String>,\n    rename_all: Option<RenameAllRule>,\n}\n\nfn parse_name_attrs(\n    attr: proc_macro::TokenStream,\n    function: &ItemFn,\n) -> syn::Result<FunctionNameAttrs> {\n    let mut attrs = function.attrs.clone();\n    let attr = proc_macro2::TokenStream::from(attr);\n    if !attr.is_empty() {\n        let specta_attr: syn::Attribute = syn::parse_quote!(#[specta(#attr)]);\n        attrs.push(specta_attr);\n    }\n\n    let mut attrs = parse_attrs(&attrs)?;\n\n    let rename = attrs\n        .extract(\"specta\", \"rename\")\n        .map(|attr| attr.parse_string())\n        .transpose()?;\n\n    let rename_all = attrs\n        .extract(\"specta\", \"rename_all\")\n        .or_else(|| attrs.extract(\"command\", \"rename_all\"))\n        .map(|attr| RenameAllRule::parse(&attr.parse_string()?, attr.value_span()))\n        .transpose()?;\n\n    Ok(FunctionNameAttrs { rename, rename_all })\n}\n\npub fn attribute(\n    attr: proc_macro::TokenStream,\n    item: proc_macro::TokenStream,\n) -> syn::Result<proc_macro::TokenStream> {\n    let crate_ref = quote!(specta);\n    let function = parse::<ItemFn>(item)?;\n    let name_attrs = parse_name_attrs(attr, &function)?;\n    let wrapper = format_fn_wrapper(&function.sig.ident);\n\n    // While using wasm_bindgen and Specta is rare, this should make the DX nicer.\n    if function.sig.unsafety.is_some()\n        && function\n            .sig\n            .ident\n            .to_string()\n            .starts_with(\"__wasm_bindgen_generated\")\n    {\n        return Err(syn::Error::new_spanned(\n            function.sig.ident,\n            \"specta: You must apply the #[specta] macro before the #[wasm_bindgen] macro\",\n        ));\n    }\n\n    let visibility = &function.vis;\n    let maybe_macro_export = match &visibility {\n        Visibility::Public(_) => {\n            quote!(#[macro_export])\n        }\n        _ => Default::default(),\n    };\n\n    let function_name = &function.sig.ident;\n    let mut function_name_str = unraw(&function_name.to_string()).to_string();\n    if let Some(rule) = name_attrs.rename_all {\n        function_name_str = rule.apply(&function_name_str);\n    }\n    if let Some(rename) = name_attrs.rename {\n        function_name_str = rename;\n    }\n    let function_asyncness = function.sig.asyncness.is_some();\n\n    let mut arg_names = Vec::new();\n    for input in function.sig.inputs.iter() {\n        let arg = match input {\n            FnArg::Receiver(_) => {\n                return Err(syn::Error::new_spanned(\n                    input,\n                    \"functions with `#[specta]` cannot take 'self'\",\n                ));\n            }\n            FnArg::Typed(arg) => match &*arg.pat {\n                Pat::Ident(ident) => ident.ident.to_token_stream(),\n                Pat::Macro(m) => m.mac.tokens.to_token_stream(),\n                Pat::Struct(s) => s.path.to_token_stream(),\n                Pat::Slice(s) => s.attrs[0].to_token_stream(),\n                Pat::Tuple(s) => s.elems[0].to_token_stream(),\n                _ => {\n                    return Err(syn::Error::new_spanned(\n                        input,\n                        \"functions with `#[specta]` must take named arguments\",\n                    ));\n                }\n            },\n        };\n\n        let mut s = arg.to_string();\n\n        let s = if s.starts_with(\"r#\") {\n            s.split_off(2)\n        } else {\n            s\n        };\n\n        let arg_name = TokenStream::from_str(&s).map_err(|err| {\n            syn::Error::new_spanned(input, format!(\"invalid token stream for argument: {err}\"))\n        })?;\n\n        let mut arg_name_str = arg_name.to_string();\n        if let Some(rule) = name_attrs.rename_all {\n            arg_name_str = rule.apply(&arg_name_str);\n        }\n\n        arg_names.push(arg_name_str);\n    }\n\n    let arg_signatures = function.sig.inputs.iter().map(|_| quote!(_));\n\n    let mut attrs = parse_attrs(&function.attrs)?;\n    let common = crate::r#type::attr::RustCAttr::from_attrs(&mut attrs)?;\n\n    let deprecated = if let Some(deprecated) = common.deprecated {\n        let tokens = deprecated_as_tokens(deprecated);\n        quote!(#tokens)\n    } else {\n        quote!(None)\n    };\n    let docs = common.doc;\n\n    let no_return_type = match function.sig.output {\n        syn::ReturnType::Default => true,\n        syn::ReturnType::Type(_, _) => false,\n    };\n\n    Ok(quote! {\n        #function\n\n        #maybe_macro_export\n        #[doc(hidden)]\n        macro_rules! #wrapper {\n            // We take in `$function` from the invocation so we have `fn_name::<concrete_generics_types>`\n            (@export_fn; $function:path) => {{\n                use #crate_ref::datatype;\n                fn export(types: &mut #crate_ref::Types) -> datatype::Function {\n                    #crate_ref::internal::get_fn_datatype(\n                        $function as fn(#(#arg_signatures),*) -> _,\n                        #function_asyncness,\n                        #function_name_str.into(),\n                        types,\n                        &[#(#arg_names.into()),* ],\n                        std::borrow::Cow::Borrowed(#docs),\n                        #deprecated,\n                        #no_return_type,\n                    )\n                }\n\n                export\n            }}\n        }\n\n        // allow the macro to be resolved with the same path as the function\n        #[allow(unused_imports)]\n        #visibility use #wrapper;\n    }\n    .into())\n}\n"
  },
  {
    "path": "specta-macros/src/type/attr/container.rs",
    "content": "use proc_macro2::TokenStream;\nuse quote::ToTokens;\nuse syn::Result;\nuse syn::Type;\n\nuse crate::utils::{AttrExtract, Attribute};\n\nuse super::RustCAttr;\n\n#[derive(Default)]\npub struct ContainerAttr {\n    pub r#type: Option<Type>,\n    pub crate_name: Option<TokenStream>,\n    pub inline: bool,\n    pub remote: Option<TokenStream>,\n    pub collect: Option<bool>,\n    pub skip_attrs: Vec<String>,\n    pub common: RustCAttr,\n\n    // Struct only (we pass it anyway so enums get nice errors)\n    pub transparent: bool,\n\n    // Custom where clause bounds (None = automatic, Some(vec) = custom)\n    pub bound: Option<Vec<syn::WherePredicate>>,\n}\n\nimpl ContainerAttr {\n    pub fn from_attrs(attrs: &mut Vec<Attribute>) -> Result<Self> {\n        let mut result = Self {\n            common: RustCAttr::from_attrs(attrs)?,\n            ..Default::default()\n        };\n\n        if let Some(attr) = attrs.extract(\"specta\", \"crate\") {\n            result.crate_name = result\n                .crate_name\n                .take()\n                .or(Some(attr.parse_path()?.to_token_stream()));\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"type\") {\n            result.r#type = result.r#type.take().or(Some(attr.parse_type()?));\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"inline\") {\n            result.inline = attr.parse_bool().unwrap_or(true);\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"remote\") {\n            result.remote = result\n                .remote\n                .take()\n                .or(Some(attr.parse_path()?.to_token_stream()));\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"collect\") {\n            result.collect = result\n                .collect\n                .take()\n                .or(Some(attr.parse_bool().unwrap_or(true)));\n        }\n\n        for attr in attrs.extract_all(\"specta\", \"skip_attr\") {\n            result.skip_attrs.push(attr.parse_string()?);\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"transparent\") {\n            result.transparent = attr.parse_bool().unwrap_or(true);\n        } else if let Some(attr) = attrs.extract(\"repr\", \"transparent\") {\n            result.transparent = attr.parse_bool().unwrap_or(true);\n        } else if let Some(attr) = attrs.extract(\"serde\", \"transparent\") {\n            // We generally want `#[serde(...)]` attributes to only be handled by the runtime but,\n            // we make an exception for `#[serde(transparent)]`.\n            result.transparent = attr.parse_bool().unwrap_or(true);\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"bound\") {\n            let bound_str = attr.parse_string()?;\n            if bound_str.is_empty() {\n                // Empty string means explicitly no automatic bounds\n                result.bound = Some(Vec::new());\n            } else {\n                // Parse where predicates from string\n                let where_clause_str = format!(\"where {}\", bound_str);\n                match syn::parse_str::<syn::WhereClause>(&where_clause_str) {\n                    Ok(where_clause) => {\n                        result.bound = Some(where_clause.predicates.into_iter().collect());\n                    }\n                    Err(e) => {\n                        return Err(syn::Error::new(\n                            attr.value_span(),\n                            format!(\"Failed to parse bound attribute: {}\", e),\n                        ));\n                    }\n                }\n            }\n        }\n\n        Ok(result)\n    }\n}\n"
  },
  {
    "path": "specta-macros/src/type/attr/field.rs",
    "content": "use syn::{Result, Type};\n\nuse crate::utils::{AttrExtract, Attribute};\n\nuse super::RustCAttr;\n\n#[derive(Default)]\npub struct FieldAttr {\n    pub r#type: Option<Type>,\n    pub inline: bool,\n    pub skip: bool,\n    pub optional: bool,\n    pub common: RustCAttr,\n}\n\nimpl FieldAttr {\n    pub fn from_attrs(attrs: &mut Vec<Attribute>) -> Result<Self> {\n        let mut result = Self {\n            common: RustCAttr::from_attrs(attrs)?,\n            ..Default::default()\n        };\n\n        if let Some(attr) = attrs.extract(\"specta\", \"type\") {\n            result.r#type = result.r#type.take().or(Some(attr.parse_type()?));\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"inline\") {\n            result.inline = attr.parse_bool().unwrap_or(true);\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"skip\") {\n            result.skip = attr.parse_bool().unwrap_or(true);\n        } else if let Some(attr) = attrs.extract(\"serde\", \"skip\") {\n            // We generally want `#[serde(...)]` attributes to only be handled by the runtime but,\n            // we make an exception for `#[serde(skip)]` because it's usually used on fields\n            // that would fail a `T: Type` so handling it at runtime would prevent your code from compiling.\n            result.skip = attr.parse_bool().unwrap_or(true);\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"optional\") {\n            result.optional = attr.parse_bool().unwrap_or(true);\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"default\") {\n            result.optional = attr.parse_bool().unwrap_or(true);\n        }\n\n        Ok(result)\n    }\n}\n"
  },
  {
    "path": "specta-macros/src/type/attr/legacy.rs",
    "content": "#[derive(Clone, Copy)]\npub enum Scope {\n    Container,\n    Field,\n    Variant,\n}\n\nimpl Scope {\n    fn as_str(self) -> &'static str {\n        match self {\n            Scope::Container => \"container\",\n            Scope::Field => \"field\",\n            Scope::Variant => \"variant\",\n        }\n    }\n}\n\npub fn migration_hint(scope: Scope, key: &str) -> Option<String> {\n    let replacement = match (scope, key) {\n        (Scope::Container, \"rename\") | (Scope::Field, \"rename\") | (Scope::Variant, \"rename\") => {\n            Some(\"#[serde(rename = \\\"...\\\")]\")\n        }\n        (Scope::Container, \"rename_all\") | (Scope::Variant, \"rename_all\") => {\n            Some(\"#[serde(rename_all = \\\"...\\\")]\")\n        }\n        (Scope::Container, \"tag\") => Some(\"#[serde(tag = \\\"...\\\")]\"),\n        (Scope::Container, \"content\") => Some(\"#[serde(content = \\\"...\\\")]\"),\n        (Scope::Container, \"untagged\") => Some(\"#[serde(untagged)]\"),\n        (Scope::Field, \"flatten\") => Some(\"#[serde(flatten)]\"),\n        (Scope::Field, \"skip_serializing\") | (Scope::Variant, \"skip_serializing\") => {\n            Some(\"#[serde(skip_serializing)]\")\n        }\n        (Scope::Field, \"skip_deserializing\") | (Scope::Variant, \"skip_deserializing\") => {\n            Some(\"#[serde(skip_deserializing)]\")\n        }\n        (Scope::Field, \"skip_serializing_if\") => Some(\"#[serde(skip_serializing_if = \\\"...\\\")]\"),\n        _ => None,\n    }?;\n\n    Some(format!(\n        \"specta: `#[specta({key} ...)]` is no longer supported on {scope}s. Use `{replacement}` instead.\",\n        scope = scope.as_str()\n    ))\n}\n"
  },
  {
    "path": "specta-macros/src/type/attr/mod.rs",
    "content": "pub use container::*;\npub use field::*;\npub use legacy::*;\npub use rustc::*;\npub use variant::*;\n\nmod container;\nmod field;\nmod legacy;\nmod rustc;\nmod variant;\n"
  },
  {
    "path": "specta-macros/src/type/attr/rustc.rs",
    "content": "use std::borrow::Cow;\n\nuse proc_macro2::TokenStream;\nuse quote::quote;\nuse syn::{Lit, Result};\n\nuse crate::utils::{Attribute, AttributeValue};\n\n// Copy of `specta/src/datatype/named.rs`\npub struct Deprecated {\n    note: Option<Cow<'static, str>>,\n    since: Option<Cow<'static, str>>,\n}\n\nimpl Deprecated {\n    pub const fn new() -> Self {\n        Self {\n            note: None,\n            since: None,\n        }\n    }\n\n    pub fn with_note(note: Cow<'static, str>) -> Self {\n        Self {\n            note: Some(note),\n            since: None,\n        }\n    }\n\n    pub fn with_since_note(since: Option<Cow<'static, str>>, note: Cow<'static, str>) -> Self {\n        Self {\n            note: Some(note),\n            since,\n        }\n    }\n}\n\n#[derive(Default)]\npub struct RustCAttr {\n    pub doc: String,\n    pub deprecated: Option<Deprecated>,\n}\n\nimpl RustCAttr {\n    pub fn from_attrs(attrs: &mut Vec<Attribute>) -> Result<Self> {\n        let doc = attrs.extract_if(.., |attr| attr.key == \"doc\").try_fold(\n            String::new(),\n            |mut s, doc| {\n                let doc = doc.parse_string()?;\n                if !s.is_empty() {\n                    s.push('\\n');\n                }\n                s.push_str(&doc);\n                Ok(s) as syn::Result<_>\n            },\n        )?;\n\n        let mut deprecated = None;\n        if let Some(pos) = attrs.iter().position(|attr| attr.key == \"deprecated\") {\n            let attr_value = attrs[pos].clone();\n\n            match &attr_value.value {\n                Some(AttributeValue::Lit(lit)) => {\n                    deprecated = Some(Deprecated::with_note(match lit {\n                        Lit::Str(s) => s.value().into(),\n                        _ => return Err(syn::Error::new_spanned(lit, \"expected string\")),\n                    }));\n                }\n                Some(AttributeValue::Path(_)) => {\n                    unreachable!(\"deprecated attribute can't be a path!\")\n                }\n                Some(AttributeValue::Expr(_)) => {\n                    unreachable!(\"deprecated attribute can't be an expression!\")\n                }\n                Some(AttributeValue::Attribute { attr, .. }) => {\n                    let since = attr\n                        .iter()\n                        .find(|attr| attr.key == \"since\")\n                        .and_then(|v| v.value.as_ref())\n                        .and_then(|v| match v {\n                            AttributeValue::Lit(lit) => Some(lit),\n                            _ => None, // TODO: This should probs be an error\n                        })\n                        .and_then(|lit| match lit {\n                            syn::Lit::Str(s) => Some(s.value()),\n                            _ => None, // TODO: This should probs be an error\n                        });\n\n                    let note = attr\n                        .iter()\n                        .find(|attr| attr.key == \"note\")\n                        .and_then(|v| match v.value.as_ref() {\n                            Some(AttributeValue::Lit(lit)) => Some(lit),\n                            _ => None, // TODO: This should probs be an error\n                        })\n                        .and_then(|lit| match lit {\n                            syn::Lit::Str(s) => Some(s.value()),\n                            _ => None, // TODO: This should probs be an error\n                        })\n                        .unwrap_or_default();\n\n                    deprecated = Some(Deprecated::with_since_note(\n                        // TODO: Use Cow's earlier rather than later\n                        since.map(Into::into),\n                        note.into(),\n                    ));\n                }\n                None => deprecated = Some(Deprecated::new()),\n            }\n\n            attrs.swap_remove(pos);\n        };\n\n        Ok(RustCAttr { doc, deprecated })\n    }\n}\n\npub(crate) fn deprecated_as_tokens(Deprecated { note, since }: Deprecated) -> TokenStream {\n    let since = since.map(|v| quote!(#v.into())).unwrap_or(quote!(None));\n\n    let note = match note {\n        Some(note) => quote!(Some(#note.into())),\n        None => quote!(None),\n    };\n\n    quote!(Some(datatype::Deprecated::with_since_note(#since, #note.unwrap_or_default())))\n}\n"
  },
  {
    "path": "specta-macros/src/type/attr/variant.rs",
    "content": "use syn::{Result, Type};\n\nuse crate::utils::{AttrExtract, Attribute};\n\nuse super::RustCAttr;\n\n#[derive(Default)]\npub struct VariantAttr {\n    pub r#type: Option<Type>,\n    pub skip: bool,\n    pub inline: bool,\n    pub common: RustCAttr,\n}\n\nimpl VariantAttr {\n    pub fn from_attrs(attrs: &mut Vec<Attribute>) -> Result<Self> {\n        let mut result = Self {\n            common: RustCAttr::from_attrs(attrs)?,\n            ..Default::default()\n        };\n\n        if let Some(attr) = attrs.extract(\"specta\", \"skip\") {\n            result.skip = attr.parse_bool().unwrap_or(true);\n        } else if let Some(attr) = attrs.extract(\"serde\", \"skip\") {\n            // We generally want `#[serde(...)]` attributes to only be handled by the runtime but,\n            // we make an exception for `#[serde(skip)]` because it's usually used on fields\n            // that would fail a `T: Type` so handling it at runtime would prevent your code from compiling.\n            result.skip = attr.parse_bool().unwrap_or(true);\n        }\n\n        if let Some(attr) = attrs.extract(\"specta\", \"inline\") {\n            result.inline = attr.parse_bool().unwrap_or(true);\n        }\n\n        if let Some(attr) = attrs\n            .extract(\"specta\", \"type\")\n            .or_else(|| attrs.extract(\"specta\", \"r#type\"))\n        {\n            result.r#type = result.r#type.take().or(Some(attr.parse_type()?));\n        }\n\n        Ok(result)\n    }\n}\n"
  },
  {
    "path": "specta-macros/src/type/enum.rs",
    "content": "use super::{\n    AttributeScope, attr::*, build_runtime_attributes, generics::type_with_inferred_lifetimes,\n    r#struct::decode_field_attrs,\n};\nuse crate::{r#type::field::construct_field_with_variant_skip, utils::*};\nuse proc_macro2::TokenStream;\nuse quote::{ToTokens, quote};\nuse syn::{DataEnum, Fields, Type, spanned::Spanned};\n\npub fn parse_enum(\n    crate_ref: &TokenStream,\n    container_attrs: &ContainerAttr,\n    data: &DataEnum,\n) -> syn::Result<TokenStream> {\n    if container_attrs.transparent {\n        return Err(syn::Error::new(\n            data.enum_token.span(),\n            \"#[specta(transparent)] is not allowed on an enum\",\n        ));\n    }\n\n    let variant_types = data\n        .variants\n        .iter()\n        .map(|v| {\n            // We pass all the attributes at the start and when decoding them pop them off the list.\n            // This means at the end we can check for any that weren't consumed and throw an error.\n            let mut attrs = parse_attrs_with_filter(&v.attrs, &container_attrs.skip_attrs)?;\n            let mut variant_attrs = VariantAttr::from_attrs(&mut attrs)?;\n            if variant_attrs.r#type.is_none() {\n                variant_attrs.r#type = parse_variant_type_override(&v.attrs)?;\n                let _ = attrs.extract(\"specta\", \"type\");\n                let _ = attrs.extract(\"specta\", \"r#type\");\n            }\n\n            // The expectation is that when an attribute is processed it will be removed so if any are left over we know they are invalid\n            // but we only throw errors for Specta-specific attributes so we don't continually break other attributes.\n            if let Some(attr) = attrs.iter().find(|attr| attr.source == \"specta\") {\n                match &attr.value {\n                    None\n                    | Some(AttributeValue::Lit(_))\n                    | Some(AttributeValue::Path(_))\n                    | Some(AttributeValue::Expr(_)) => {\n                        return Err(syn::Error::new(\n                            attr.key.span(),\n                            \"specta: invalid formatted attribute\",\n                        ));\n                    }\n                    Some(AttributeValue::Attribute {\n                        attr: inner_attrs, ..\n                    }) => {\n                        if let Some(inner_attr) = inner_attrs.first() {\n                            if let Some(message) =\n                                migration_hint(Scope::Variant, &inner_attr.key.to_string())\n                            {\n                                return Err(syn::Error::new(inner_attr.key.span(), message));\n                            }\n\n                            return Err(syn::Error::new(\n                                inner_attr.key.span(),\n                                format!(\n                                    \"specta: Found unsupported variant attribute '{}'\",\n                                    inner_attr.key\n                                ),\n                            ));\n                        }\n                        return Err(syn::Error::new(\n                            attr.key.span(),\n                            \"specta: invalid formatted attribute\",\n                        ));\n                    }\n                }\n            }\n\n            let runtime_attrs = build_runtime_attributes(\n                crate_ref,\n                AttributeScope::Variant,\n                quote!(v.attributes),\n                &v.attrs,\n                &container_attrs.skip_attrs,\n            )?;\n\n            Ok((v, variant_attrs, runtime_attrs))\n        })\n        .collect::<syn::Result<Vec<_>>>()?\n        .into_iter()\n        .map(|(variant, attrs, runtime_attrs)| {\n            let variant_ident_str = unraw_raw_ident(&variant.ident);\n            let variant_name_str = variant_ident_str.to_token_stream();\n\n            let variant_value = if let Some(ref variant_ty) = attrs.r#type {\n                let variant_ty = type_with_inferred_lifetimes(variant_ty);\n                quote!(datatype::Variant::unnamed().field({\n                    datatype::Field::new(<#variant_ty as #crate_ref::Type>::definition(types))\n                }).build())\n            } else {\n                match &variant.fields {\n                    Fields::Unit => quote!(datatype::Variant::unit()),\n                    Fields::Unnamed(fields) => {\n                        let fields = fields\n                            .unnamed\n                            .iter()\n                            .enumerate()\n                            .map(|(idx, field)| {\n                                let (mut field_attrs, raw_attrs) =\n                                    decode_field_attrs(field, &container_attrs.skip_attrs)?;\n\n                                if attrs.inline && idx == 0 {\n                                    field_attrs.inline = true;\n                                }\n\n                                construct_field_with_variant_skip(\n                                    crate_ref,\n                                    container_attrs,\n                                    field_attrs,\n                                    &field.ty,\n                                    raw_attrs,\n                                    attrs.skip,\n                                )\n                            })\n                            .collect::<syn::Result<Vec<TokenStream>>>()?;\n\n                        quote!(datatype::Variant::unnamed() #(.field(#fields))* .build())\n                    }\n                    Fields::Named(fields) => {\n                        let field_calls = fields\n                            .named\n                            .iter()\n                            .map(|field| {\n                                let (field_attrs, raw_attrs) =\n                                    decode_field_attrs(field, &container_attrs.skip_attrs)?;\n\n                                let field_ident_str =\n                                    unraw_raw_ident(field.ident.as_ref().ok_or_else(|| {\n                                        syn::Error::new(\n                                            field.span(),\n                                            \"specta: named field must have an identifier\",\n                                        )\n                                    })?);\n\n                                let field_name = field_ident_str;\n\n                                let inner = construct_field_with_variant_skip(\n                                    crate_ref,\n                                    container_attrs,\n                                    field_attrs,\n                                    &field.ty,\n                                    raw_attrs,\n                                    attrs.skip,\n                                )?;\n                                Ok(quote!(.field(#field_name, #inner)))\n                            })\n                            .collect::<syn::Result<Vec<TokenStream>>>()?;\n\n                        quote!(datatype::Variant::named() #(#field_calls)* .build())\n                    }\n                }\n            };\n\n            let variant_skip = attrs.skip.then(|| quote!( v.skip = true;));\n\n            let variant_docs = (!attrs.common.doc.is_empty()).then(|| {\n                let docs = &container_attrs.common.doc;\n                quote! {\n                    v.docs = Cow::Borrowed(#docs);\n                }\n            });\n            let field_deprecated = attrs.common.deprecated.map(|deprecated| {\n                let tokens = deprecated_as_tokens(deprecated);\n                quote!(v.deprecated = #tokens;)\n            });\n\n            let type_overridden_attribute = attrs\n                .r#type\n                .as_ref()\n                .map(|_| quote!(v.attributes.insert(\"specta:type_override\", true);));\n\n            Ok(quote!((#variant_name_str.into(), {\n                let mut v = #variant_value;\n                #variant_skip\n                #field_deprecated\n                #variant_docs\n                #runtime_attrs\n                #type_overridden_attribute\n                v\n            })))\n        })\n        .collect::<syn::Result<Vec<_>>>()?;\n\n    Ok(quote!({\n        let mut e = datatype::Enum::default();\n        e.variants = vec![#(#variant_types),*];\n        e.into()\n    }))\n}\n\nfn parse_variant_type_override(attrs: &[syn::Attribute]) -> syn::Result<Option<Type>> {\n    let mut result = None;\n    for attr in attrs {\n        if !attr.path().is_ident(\"specta\") {\n            continue;\n        }\n\n        let syn::Meta::List(list) = &attr.meta else {\n            continue;\n        };\n\n        list.parse_nested_meta(|meta| {\n            if meta.path.is_ident(\"type\") || meta.path.is_ident(\"r#type\") {\n                let value = meta.value()?;\n                result = Some(value.parse()?);\n            }\n\n            Ok(())\n        })?;\n    }\n\n    Ok(result)\n}\n"
  },
  {
    "path": "specta-macros/src/type/field.rs",
    "content": "use proc_macro2::TokenStream;\nuse quote::quote;\nuse syn::Type;\n\nuse crate::r#type::attr::deprecated_as_tokens;\n\nuse super::{\n    AttributeScope, ContainerAttr, FieldAttr, build_runtime_attributes,\n    generics::type_with_inferred_lifetimes,\n};\n\npub fn construct_field(\n    crate_ref: &TokenStream,\n    container_attrs: &ContainerAttr,\n    attrs: FieldAttr,\n    field_ty: &Type,\n    raw_attrs: &[syn::Attribute],\n) -> syn::Result<TokenStream> {\n    construct_field_with_variant_skip(\n        crate_ref,\n        container_attrs,\n        attrs,\n        field_ty,\n        raw_attrs,\n        false,\n    )\n}\n\npub fn construct_field_with_variant_skip(\n    crate_ref: &TokenStream,\n    container_attrs: &ContainerAttr,\n    attrs: FieldAttr,\n    field_ty: &Type,\n    raw_attrs: &[syn::Attribute],\n    variant_skip: bool,\n) -> syn::Result<TokenStream> {\n    let field_ty = type_with_inferred_lifetimes(attrs.r#type.as_ref().unwrap_or(field_ty));\n\n    let runtime_attrs = build_runtime_attributes(\n        crate_ref,\n        AttributeScope::Field,\n        quote!(field.attributes),\n        raw_attrs,\n        &container_attrs.skip_attrs,\n    )?;\n\n    let field_optional = attrs.optional.then(|| quote!(field.optional = true;));\n\n    let field_deprecated = attrs.common.deprecated.map(|deprecated| {\n        let tokens = deprecated_as_tokens(deprecated);\n        quote!(field.deprecated = #tokens;)\n    });\n\n    let field_docs = (!attrs.common.doc.is_empty()).then(|| {\n        let docs = &container_attrs.common.doc;\n        quote! {\n            field.docs = Cow::Borrowed(#docs);\n        }\n    });\n\n    let type_overridden_attribute = attrs\n        .r#type\n        .as_ref()\n        .map(|_| quote!(field.attributes.insert(\"specta:type_override\", true);));\n\n    let field_ty = if attrs.skip || variant_skip {\n        quote!()\n    } else if attrs.inline {\n        quote!(field.ty = Some(datatype::inline(types, |types| <#field_ty as #crate_ref::Type>::definition(types)));)\n    } else {\n        quote!(field.ty = Some(<#field_ty as #crate_ref::Type>::definition(types));)\n    };\n\n    Ok(quote!({\n        let mut field = datatype::Field::default();\n        #field_optional\n        #field_deprecated\n        #field_docs\n        #runtime_attrs\n        #type_overridden_attribute\n        #field_ty\n        field\n    }))\n}\n"
  },
  {
    "path": "specta-macros/src/type/generics.rs",
    "content": "use proc_macro2::TokenStream;\nuse quote::quote;\nuse std::collections::{HashSet, hash_map::Entry};\nuse syn::{\n    ConstParam, Data, GenericParam, Generics, LifetimeParam, Type, TypeParam, TypePath,\n    WhereClause, parse_quote,\n    visit::{self, Visit},\n    visit_mut::VisitMut,\n};\n\nuse crate::utils::parse_attrs;\n\nuse super::{FieldAttr, VariantAttr};\n\n#[derive(Default)]\npub struct UsedTypeParams {\n    pub direct: Vec<syn::Ident>,\n    pub associated: Vec<TypePath>,\n    pub conservative: bool,\n}\n\npub fn generics_with_ident_and_bounds_only(generics: &Generics) -> Option<TokenStream> {\n    (!generics.params.is_empty())\n        .then(|| {\n            use GenericParam::*;\n            generics.params.iter().map(|param| match param {\n                Type(TypeParam {\n                    ident,\n                    colon_token,\n                    bounds,\n                    ..\n                }) => quote!(#ident #colon_token #bounds),\n                Lifetime(LifetimeParam {\n                    lifetime,\n                    colon_token,\n                    bounds,\n                    ..\n                }) => quote!(#lifetime #colon_token #bounds),\n                Const(ConstParam {\n                    const_token,\n                    ident,\n                    colon_token,\n                    ty,\n                    ..\n                }) => quote!(#const_token #ident #colon_token #ty),\n            })\n        })\n        .map(|gs| quote!(<#(#gs),*>))\n}\n\npub fn generics_with_ident_only_and_const_ty(\n    generics: &Generics,\n    include_type_bounds: bool,\n) -> Option<TokenStream> {\n    generics\n        .params\n        .iter()\n        .any(|param| matches!(param, GenericParam::Type(_) | GenericParam::Const(_)))\n        .then(|| {\n            use GenericParam::*;\n\n            generics.params.iter().filter_map(|param| match param {\n                Type(TypeParam {\n                    ident,\n                    colon_token,\n                    bounds,\n                    ..\n                }) if include_type_bounds => Some(quote!(#ident #colon_token #bounds)),\n                Type(TypeParam { ident, .. }) => Some(quote!(#ident)),\n                Lifetime(_) => None,\n                Const(ConstParam {\n                    const_token,\n                    ident,\n                    colon_token,\n                    ty,\n                    ..\n                }) => Some(quote!(#const_token #ident #colon_token #ty)),\n            })\n        })\n        .map(|gs| quote!(<#(#gs),*>))\n}\n\npub fn type_where_clause(\n    ty: &TokenStream,\n    used_generic_types: &[syn::Ident],\n    associated_type_usage: &[TypePath],\n) -> Option<WhereClause> {\n    if used_generic_types.is_empty() && associated_type_usage.is_empty() {\n        return None;\n    }\n\n    let generic_preds = used_generic_types\n        .iter()\n        .map(|ident| parse_quote!(#ident : #ty));\n    let associated_preds = associated_type_usage\n        .iter()\n        .map(|path| parse_quote!(#path : #ty));\n    let preds = generic_preds\n        .chain(associated_preds)\n        .collect::<Vec<syn::WherePredicate>>();\n\n    Some(parse_quote! { where #(#preds),* })\n}\n\npub fn generics_with_ident_only(generics: &Generics) -> Option<TokenStream> {\n    (!generics.params.is_empty())\n        .then(|| {\n            use GenericParam::*;\n\n            generics.params.iter().map(|param| match param {\n                Type(TypeParam { ident, .. }) | Const(ConstParam { ident, .. }) => quote!(#ident),\n                Lifetime(LifetimeParam { lifetime, .. }) => quote!(#lifetime),\n            })\n        })\n        .map(|gs| quote!(<#(#gs),*>))\n}\n\npub fn type_with_inferred_lifetimes(ty: &Type) -> Type {\n    let mut ty = ty.clone();\n    InferredLifetimeVisitor.visit_type_mut(&mut ty);\n    ty\n}\n\nstruct InferredLifetimeVisitor;\n\nimpl VisitMut for InferredLifetimeVisitor {\n    fn visit_lifetime_mut(&mut self, lifetime: &mut syn::Lifetime) {\n        *lifetime = syn::Lifetime::new(\"'_\", lifetime.apostrophe);\n    }\n}\n\npub fn all_type_param_idents(generics: &Generics) -> Vec<syn::Ident> {\n    generics\n        .params\n        .iter()\n        .filter_map(|gp| match gp {\n            GenericParam::Type(ty) => Some(ty.ident.clone()),\n            _ => None,\n        })\n        .collect()\n}\n\n// Code adopted from ts-rs. Thanks to it's original author!\n// Additional associated-type handling inspired by Serde's derive bound collection.\npub fn used_type_params(\n    generics: &Generics,\n    data: &Data,\n    container_type: Option<&Type>,\n) -> syn::Result<UsedTypeParams> {\n    let all_generic_type_idents = all_type_param_idents(generics);\n\n    if all_generic_type_idents.is_empty() {\n        return Ok(UsedTypeParams::default());\n    }\n\n    let known_generics = all_generic_type_idents\n        .iter()\n        .map(ToString::to_string)\n        .collect::<HashSet<_>>();\n\n    let mut visitor = GenericTypeUseVisitor {\n        known_generics: &known_generics,\n        used_generics: HashSet::new(),\n        associated_type_usage: Vec::new(),\n        conservative: false,\n    };\n\n    if let Some(container_type) = container_type {\n        visitor.visit_type(container_type);\n    } else {\n        match data {\n            Data::Struct(data) => {\n                for field in &data.fields {\n                    if field_is_skipped(field)? {\n                        continue;\n                    }\n\n                    visitor.visit_type(&field.ty);\n                }\n            }\n            Data::Enum(data) => {\n                for variant in &data.variants {\n                    if variant_is_skipped(variant)? {\n                        continue;\n                    }\n\n                    for field in &variant.fields {\n                        if field_is_skipped(field)? {\n                            continue;\n                        }\n\n                        visitor.visit_type(&field.ty);\n                    }\n                }\n            }\n            Data::Union(_) => {}\n        }\n    }\n\n    if visitor.conservative {\n        return Ok(UsedTypeParams {\n            direct: all_generic_type_idents,\n            associated: Vec::new(),\n            conservative: true,\n        });\n    }\n\n    let direct = all_generic_type_idents\n        .iter()\n        .filter(|ident| visitor.used_generics.contains(&ident.to_string()))\n        .cloned()\n        .collect();\n\n    let mut associated = Vec::new();\n    let mut seen = std::collections::HashMap::<String, ()>::new();\n    for path in visitor.associated_type_usage {\n        let key = quote!(#path).to_string();\n        match seen.entry(key) {\n            Entry::Vacant(v) => {\n                v.insert(());\n                associated.push(path);\n            }\n            Entry::Occupied(_) => {}\n        }\n    }\n\n    Ok(UsedTypeParams {\n        direct,\n        associated,\n        conservative: false,\n    })\n}\n\nfn field_is_skipped(field: &syn::Field) -> syn::Result<bool> {\n    let mut attrs = parse_attrs(&field.attrs)?;\n    Ok(FieldAttr::from_attrs(&mut attrs)?.skip)\n}\n\nfn variant_is_skipped(variant: &syn::Variant) -> syn::Result<bool> {\n    let mut attrs = parse_attrs(&variant.attrs)?;\n    Ok(VariantAttr::from_attrs(&mut attrs)?.skip)\n}\n\npub fn has_associated_type_usage(used_generic_types: &UsedTypeParams) -> bool {\n    !used_generic_types.associated.is_empty()\n}\n\npub fn used_direct_type_params<'a>(\n    used_generic_types: &'a UsedTypeParams,\n    all_generic_type_idents: &'a [syn::Ident],\n) -> &'a [syn::Ident] {\n    if used_generic_types.conservative {\n        all_generic_type_idents\n    } else {\n        &used_generic_types.direct\n    }\n}\n\npub fn used_associated_type_paths(used_generic_types: &UsedTypeParams) -> &[TypePath] {\n    if used_generic_types.conservative {\n        &[]\n    } else {\n        &used_generic_types.associated\n    }\n}\n\npub fn add_type_to_where_clause(\n    ty: &TokenStream,\n    generics: &Generics,\n    custom_bounds: Option<&[syn::WherePredicate]>,\n    used_generic_types: &[syn::Ident],\n    associated_type_usage: &[TypePath],\n) -> Option<WhereClause> {\n    if let Some(where_clause) = merge_custom_bounds(generics, custom_bounds) {\n        return Some(where_clause);\n    }\n\n    if used_generic_types.is_empty() && associated_type_usage.is_empty() {\n        return generics.where_clause.clone();\n    }\n\n    let generic_preds = used_generic_types\n        .iter()\n        .map(|ident| parse_quote!(#ident : #ty));\n    let associated_preds = associated_type_usage\n        .iter()\n        .map(|path| parse_quote!(#path : #ty));\n    let preds = generic_preds\n        .chain(associated_preds)\n        .collect::<Vec<syn::WherePredicate>>();\n\n    match &generics.where_clause {\n        None => Some(parse_quote! { where #(#preds),* }),\n        Some(w) => {\n            let bounds = w.predicates.iter();\n            Some(parse_quote! { where #(#bounds,)* #(#preds),* })\n        }\n    }\n}\n\nfn merge_custom_bounds(\n    generics: &Generics,\n    custom_bounds: Option<&[syn::WherePredicate]>,\n) -> Option<WhereClause> {\n    if let Some(predicates) = custom_bounds {\n        if predicates.is_empty() {\n            return generics.where_clause.clone();\n        }\n\n        return match &generics.where_clause {\n            None => Some(parse_quote! { where #(#predicates),* }),\n            Some(w) => {\n                let existing = w.predicates.iter();\n                Some(parse_quote! { where #(#existing,)* #(#predicates),* })\n            }\n        };\n    }\n\n    None\n}\n\nstruct GenericTypeUseVisitor<'a> {\n    known_generics: &'a HashSet<String>,\n    used_generics: HashSet<String>,\n    associated_type_usage: Vec<TypePath>,\n    conservative: bool,\n}\n\nimpl Visit<'_> for GenericTypeUseVisitor<'_> {\n    fn visit_type_path(&mut self, node: &syn::TypePath) {\n        if let Some(first) = node.path.segments.first()\n            && self.known_generics.contains(&first.ident.to_string())\n            && node.path.segments.len() > 1\n        {\n            self.associated_type_usage.push(node.clone());\n        }\n\n        if let Some(qself) = &node.qself\n            && let syn::Type::Path(syn::TypePath { qself: None, path }) = qself.ty.as_ref()\n            && let Some(first) = path.segments.first()\n            && self.known_generics.contains(&first.ident.to_string())\n        {\n            self.associated_type_usage.push(node.clone());\n        }\n\n        if node.qself.is_none()\n            && node.path.leading_colon.is_none()\n            && node.path.segments.len() == 1\n            && let Some(segment) = node.path.segments.first()\n        {\n            let segment_name = segment.ident.to_string();\n            if self.known_generics.contains(&segment_name) {\n                self.used_generics.insert(segment_name);\n            }\n        }\n\n        visit::visit_type_path(self, node);\n    }\n\n    fn visit_type(&mut self, node: &syn::Type) {\n        match node {\n            syn::Type::Macro(_) | syn::Type::Verbatim(_) => {\n                self.conservative = true;\n            }\n            _ => visit::visit_type(self, node),\n        }\n    }\n}\n"
  },
  {
    "path": "specta-macros/src/type/mod.rs",
    "content": "use attr::*;\nuse r#enum::parse_enum;\nuse proc_macro2::TokenStream;\nuse quote::{ToTokens, format_ident, quote};\nuse r#struct::parse_struct;\nuse syn::{Data, DeriveInput, GenericParam, parse};\n\nuse crate::utils::{AttrExtract, parse_attrs, unraw_raw_ident};\n\nuse self::generics::{\n    add_type_to_where_clause, all_type_param_idents, generics_with_ident_and_bounds_only,\n    generics_with_ident_only, generics_with_ident_only_and_const_ty, has_associated_type_usage,\n    type_where_clause, type_with_inferred_lifetimes, used_associated_type_paths,\n    used_direct_type_params, used_type_params,\n};\n\npub(crate) mod attr;\nmod r#enum;\nmod field;\nmod generics;\n#[cfg(feature = \"serde\")]\nmod serde;\nmod r#struct;\n\n#[derive(Copy, Clone)]\npub(super) enum AttributeScope {\n    Container,\n    Variant,\n    Field,\n}\n\npub(super) fn build_runtime_attributes(\n    crate_ref: &TokenStream,\n    scope: AttributeScope,\n    attrs: TokenStream,\n    raw_attrs: &[syn::Attribute],\n    skip_attrs: &[String],\n) -> syn::Result<Option<TokenStream>> {\n    let metas = raw_attrs\n        .iter()\n        .filter(|attr| {\n            let path = attr.path().to_token_stream().to_string();\n            !skip_attrs.contains(&path) && path != \"specta\"\n        })\n        .map(|attr| attr.meta.to_token_stream())\n        .collect::<Vec<_>>();\n\n    #[cfg(feature = \"serde\")]\n    let serde_insert = serde::lower_runtime_attributes(crate_ref, scope, raw_attrs)?;\n    #[cfg(not(feature = \"serde\"))]\n    let serde_insert: Option<TokenStream> = {\n        let _ = crate_ref;\n        let _ = scope;\n        None\n    };\n\n    if metas.is_empty() && serde_insert.is_none() {\n        return Ok(None);\n    }\n\n    Ok(Some(quote!({\n        let attrs = &mut #attrs;\n        #serde_insert\n    })))\n}\n\npub fn derive(input: proc_macro::TokenStream) -> syn::Result<proc_macro::TokenStream> {\n    let DeriveInput {\n        ident: raw_ident,\n        generics,\n        data,\n        attrs,\n        ..\n    } = &parse::<DeriveInput>(input)?;\n\n    // We pass all the attributes at the start and when decoding them pop them off the list.\n    // This means at the end we can check for any that weren't consumed and throw an error.\n    let raw_attrs = attrs; // Preserve raw attrs before parse_attrs shadows the variable\n    let mut attrs = parse_attrs(attrs)?;\n\n    let container_attrs = ContainerAttr::from_attrs(&mut attrs)?;\n    let crate_ref = container_attrs.crate_name.clone().unwrap_or(quote!(specta));\n\n    if container_attrs.r#type.is_some() && container_attrs.transparent {\n        return Err(syn::Error::new(\n            raw_ident.span(),\n            \"specta: `#[specta(type = ...)]` cannot be combined with `#[specta(transparent)]`\",\n        ));\n    }\n\n    let ident = container_attrs\n        .remote\n        .clone()\n        .unwrap_or_else(|| raw_ident.to_token_stream());\n\n    let name = unraw_raw_ident(&format_ident!(\"{}\", raw_ident.to_string())).to_token_stream();\n\n    // Check for unknown specta attributes after all parsing is done\n    // Since extract() removes consumed attributes, any remaining ones are unknown\n    if let Some(attr) = attrs.iter().find(|attr| attr.source == \"specta\") {\n        // Check if it's an invalid formatted attribute (like #[specta] or #[specta = \"...\"])\n        match &attr.value {\n            None\n            | Some(crate::utils::AttributeValue::Lit(_))\n            | Some(crate::utils::AttributeValue::Path(_)) => {\n                return Err(syn::Error::new(\n                    attr.key.span(),\n                    \"specta: invalid formatted attribute\",\n                ));\n            }\n            Some(crate::utils::AttributeValue::Expr(_)) => {\n                return Err(syn::Error::new(\n                    attr.key.span(),\n                    \"specta: invalid formatted attribute\",\n                ));\n            }\n            Some(crate::utils::AttributeValue::Attribute {\n                attr: inner_attrs, ..\n            }) => {\n                // If there are nested attributes remaining, report the first one\n                if let Some(inner_attr) = inner_attrs.first() {\n                    if let Some(message) =\n                        migration_hint(Scope::Container, &inner_attr.key.to_string())\n                    {\n                        return Err(syn::Error::new(inner_attr.key.span(), message));\n                    }\n\n                    return Err(syn::Error::new(\n                        inner_attr.key.span(),\n                        format!(\n                            \"specta: Found unsupported container attribute '{}'\",\n                            inner_attr.key\n                        ),\n                    ));\n                }\n                // If the nested list is empty, it's an invalid format\n                return Err(syn::Error::new(\n                    attr.key.span(),\n                    \"specta: invalid formatted attribute\",\n                ));\n            }\n        }\n    }\n\n    let container_runtime_attrs = build_runtime_attributes(\n        &crate_ref,\n        AttributeScope::Container,\n        quote!(s.attributes),\n        raw_attrs,\n        &container_attrs.skip_attrs,\n    )?;\n    let enum_runtime_attrs = build_runtime_attributes(\n        &crate_ref,\n        AttributeScope::Container,\n        quote!(en.attributes),\n        raw_attrs,\n        &container_attrs.skip_attrs,\n    )?;\n    let container_runtime_attrs =\n        if container_runtime_attrs.is_some() || enum_runtime_attrs.is_some() {\n            quote! {\n                match &mut e {\n                    datatype::DataType::Struct(s) => { #container_runtime_attrs }\n                    datatype::DataType::Enum(en) => { #enum_runtime_attrs }\n                    _ => unreachable!(\"specta derive generated non-container datatype\"),\n                }\n            }\n        } else {\n            quote!()\n        };\n\n    let dt_expr = if let Some(container_ty) = &container_attrs.r#type {\n        let container_ty = type_with_inferred_lifetimes(container_ty);\n        quote!(datatype::inline(types, |types| <#container_ty as #crate_ref::Type>::definition(types)))\n    } else {\n        let dt_expr = match data {\n            Data::Struct(data) => parse_struct(&crate_ref, &container_attrs, data),\n            Data::Enum(data) => parse_enum(&crate_ref, &container_attrs, data),\n            Data::Union(data) => Err(syn::Error::new_spanned(\n                data.union_token,\n                \"specta: Union types are not supported by Specta yet!\",\n            )),\n        }?;\n\n        quote! {\n                let mut e = #dt_expr;\n                #container_runtime_attrs\n                e\n        }\n    };\n\n    let bounds = generics_with_ident_and_bounds_only(generics);\n    let type_args = generics_with_ident_only(generics);\n    let has_const_param = generics\n        .params\n        .iter()\n        .any(|param| matches!(param, GenericParam::Const(_)));\n    let used_generic_types = used_type_params(generics, data, container_attrs.r#type.as_ref())?;\n    let all_generic_type_idents = all_type_param_idents(generics);\n    let used_direct_generics =\n        used_direct_type_params(&used_generic_types, &all_generic_type_idents);\n    let used_associated_paths = used_associated_type_paths(&used_generic_types);\n    let where_bound = add_type_to_where_clause(\n        &quote!(#crate_ref::Type),\n        generics,\n        container_attrs.bound.as_deref(),\n        used_direct_generics,\n        used_associated_paths,\n    );\n    let build_ty_where_bound = type_where_clause(\n        &quote!(#crate_ref::Type),\n        used_direct_generics,\n        used_associated_paths,\n    );\n    let build_ty_bounds = generics_with_ident_only_and_const_ty(\n        generics,\n        has_associated_type_usage(&used_generic_types),\n    );\n\n    let build_ty_placeholder_args = generics\n        .params\n        .iter()\n        .any(|param| matches!(param, GenericParam::Type(_) | GenericParam::Const(_)))\n        .then(|| {\n            let args = generics.params.iter().filter_map(|param| match param {\n                GenericParam::Lifetime(_) => None,\n                GenericParam::Const(t) => Some(t.ident.to_token_stream()),\n                GenericParam::Type(t) => {\n                    Some(format_ident!(\"PLACEHOLDER_{}\", t.ident).to_token_stream())\n                }\n            });\n\n            quote!(::<#(#args),*>)\n        });\n    let build_ty_passthrough_args = generics\n        .params\n        .iter()\n        .any(|param| matches!(param, GenericParam::Type(_) | GenericParam::Const(_)))\n        .then(|| {\n            let args = generics.params.iter().filter_map(|param| match param {\n                GenericParam::Lifetime(_) => None,\n                GenericParam::Const(t) => Some(t.ident.to_token_stream()),\n                GenericParam::Type(t) => Some(t.ident.to_token_stream()),\n            });\n\n            quote!(::<#(#args),*>)\n        });\n\n    let (generic_placeholders, shadow_generics): (Vec<_>, Vec<_>) = generics\n        .params\n        .iter()\n        .filter_map(|param| match param {\n            GenericParam::Lifetime(_) | GenericParam::Const(_) => None,\n            GenericParam::Type(t) => {\n                let ident = &t.ident;\n                let ident_str = ident.to_string();\n                let placeholder_ident = format_ident!(\"PLACEHOLDER_{ident}\");\n                Some((\n                    quote!(\n                        pub struct #placeholder_ident;\n                        impl #crate_ref::Type for #placeholder_ident {\n                            fn definition(_: &mut #crate_ref::Types) -> datatype::DataType {\n                                datatype::Generic::new(Cow::Borrowed(#ident_str)).into()\n                            }\n                        }\n                    ),\n                    quote!(type #ident = #placeholder_ident;),\n                ))\n            }\n        })\n        .unzip();\n\n    let (generics_for_ndt, instantiation_generics) = generics\n        .params\n        .iter()\n        .map(|param| match param {\n            GenericParam::Lifetime(_) | GenericParam::Const(_) => Ok(None),\n            GenericParam::Type(t) => {\n                let i = &t.ident;\n\n                let skip_default = parse_attrs(&t.attrs)?\n                    .extract(\"specta\", \"skip_default_generic\")\n                    .map(|attr| attr.parse_bool().unwrap_or(true))\n                    .unwrap_or(false);\n\n                if !used_direct_generics.iter().any(|used| used == i) && !skip_default {\n                    return Ok(None);\n                }\n\n                let i_str = i.to_string();\n                let default = match (&t.default, skip_default) {\n                    (_, true) | (None, false) => quote!(None),\n                    (Some(default), false) => {\n                        quote!(Some(<#default as #crate_ref::Type>::definition(types)))\n                    }\n                };\n                let reference = used_direct_generics.iter().any(|used| used == i).then(|| {\n                    quote!((\n                        #crate_ref::datatype::Generic::new(Cow::Borrowed(#i_str)),\n                        <#i as #crate_ref::Type>::definition(types),\n                    ))\n                });\n                Ok(Some((\n                    quote!(#crate_ref::datatype::GenericDefinition::new(\n                        Cow::Borrowed(#i_str),\n                        #default,\n                    )),\n                    reference,\n                )))\n            }\n        })\n        .collect::<syn::Result<Vec<_>>>()?\n        .into_iter()\n        .flatten()\n        .collect::<(Vec<_>, Vec<_>)>();\n\n    let collect = (cfg!(feature = \"DO_NOT_USE_collect\")\n        && !container_attrs.inline\n        && container_attrs.collect.unwrap_or(true))\n    .then(|| {\n        let export_fn_name = format_ident!(\"__push_specta_type_{}\", raw_ident);\n\n        let generic_params = generics\n            .params\n            .iter()\n            .filter(|param| matches!(param, syn::GenericParam::Type(_)))\n            .map(|_| quote! { () });\n\n        quote! {\n            #[doc(hidden)]\n            #[allow(unsafe_code, non_snake_case)]\n            #[#crate_ref::collect::internal::small_ctor::ctor]\n            unsafe fn #export_fn_name() {\n                #crate_ref::collect::internal::register::<#ident<#(#generic_params),*>>();\n            }\n        }\n    });\n\n    let shadow_generic_aliases = if has_associated_type_usage(&used_generic_types) {\n        quote!()\n    } else {\n        quote!(#(#shadow_generics)*)\n    };\n    let ndt_build_ty_args = if has_associated_type_usage(&used_generic_types) {\n        &build_ty_passthrough_args\n    } else {\n        &build_ty_placeholder_args\n    };\n\n    let has_generic_default = generics\n        .params\n        .iter()\n        .any(|param| matches!(param, GenericParam::Type(ty) if ty.default.is_some()));\n    let generics = (!generics_for_ndt.is_empty()).then(|| {\n        if has_generic_default {\n            quote! {\n                ndt.generics = Cow::Owned(vec![#(#generics_for_ndt),*]);\n            }\n        } else {\n            quote! {\n                static GENERICS: &[datatype::GenericDefinition] = &[#(#generics_for_ndt),*];\n                ndt.generics = Cow::Borrowed(GENERICS);\n            }\n        }\n    });\n    let docs = (!container_attrs.common.doc.is_empty()).then(|| {\n        let docs = &container_attrs.common.doc;\n        quote! {\n            ndt.docs = Cow::Borrowed(#docs);\n        }\n    });\n    let deprecated = container_attrs.common.deprecated.map(|deprecated| {\n        let tokens = deprecated_as_tokens(deprecated);\n        quote!(ndt.deprecated = #tokens;)\n    });\n\n    let ndt_ty = (!container_attrs.inline).then(|| {\n        quote! {\n            #(#generic_placeholders)*\n            #shadow_generic_aliases\n\n            ndt.ty = Some(build #ndt_build_ty_args (types));\n        }\n    });\n    let definition = quote! {\n        datatype::DataType::Reference(\n            datatype::NamedDataType::init_with_sentinel(\n                SENTINEL,\n                &[#(#instantiation_generics),*],\n                #has_const_param,\n                false,\n                types,\n                |types, ndt| {\n                    ndt.name = Cow::Borrowed(#name);\n                    ndt.module_path = Cow::Borrowed(module_path!());\n                    #generics\n                    #docs\n                    #deprecated;\n\n                    #ndt_ty\n                },\n                build #build_ty_passthrough_args\n            )\n        )\n    };\n\n    let definition = if container_attrs.inline {\n        quote!(datatype::inline(types, |types| #definition))\n    } else {\n        definition\n    };\n\n    Ok(quote! {\n        #[automatically_derived]\n        impl #bounds #crate_ref::Type for #ident #type_args #where_bound {\n            fn definition(types: &mut #crate_ref::Types) -> #crate_ref::datatype::DataType {\n                use std::borrow::Cow;\n                use #crate_ref::datatype;\n\n                static SENTINEL: &str = concat!(module_path!(), \"::\", stringify!(#raw_ident));\n\n                fn build #build_ty_bounds (types: &mut #crate_ref::Types) -> datatype::DataType #build_ty_where_bound {\n                    #dt_expr\n                }\n\n                #definition\n            }\n        }\n\n        #collect\n\n    }\n    .into())\n}\n"
  },
  {
    "path": "specta-macros/src/type/serde.rs",
    "content": "use proc_macro2::TokenStream;\nuse quote::quote;\nuse syn::{Attribute, LitStr, Meta, Result, Type, meta::ParseNestedMeta};\n\nuse super::AttributeScope;\n\n#[derive(Clone)]\nstruct ConversionType {\n    type_src: String,\n    ty: Type,\n}\n\n#[derive(Copy, Clone)]\nenum RenameRule {\n    Lower,\n    Upper,\n    Pascal,\n    Camel,\n    Snake,\n    ScreamingSnake,\n    Kebab,\n    ScreamingKebab,\n}\n\nimpl RenameRule {\n    fn parse(lit: &LitStr) -> Result<Self> {\n        Ok(match lit.value().as_str() {\n            \"lowercase\" => Self::Lower,\n            \"UPPERCASE\" => Self::Upper,\n            \"PascalCase\" => Self::Pascal,\n            \"camelCase\" => Self::Camel,\n            \"snake_case\" => Self::Snake,\n            \"SCREAMING_SNAKE_CASE\" => Self::ScreamingSnake,\n            \"kebab-case\" => Self::Kebab,\n            \"SCREAMING-KEBAB-CASE\" => Self::ScreamingKebab,\n            _ => {\n                return Err(syn::Error::new(\n                    lit.span(),\n                    format!(\"unsupported serde casing: `{}`\", lit.value()),\n                ));\n            }\n        })\n    }\n\n    fn as_str(self) -> &'static str {\n        match self {\n            Self::Lower => \"lowercase\",\n            Self::Upper => \"UPPERCASE\",\n            Self::Pascal => \"PascalCase\",\n            Self::Camel => \"camelCase\",\n            Self::Snake => \"snake_case\",\n            Self::ScreamingSnake => \"SCREAMING_SNAKE_CASE\",\n            Self::Kebab => \"kebab-case\",\n            Self::ScreamingKebab => \"SCREAMING-KEBAB-CASE\",\n        }\n    }\n}\n\n#[derive(Default)]\nstruct ContainerAttrs {\n    rename_serialize: Option<String>,\n    rename_deserialize: Option<String>,\n    rename_all_serialize: Option<RenameRule>,\n    rename_all_deserialize: Option<RenameRule>,\n    rename_all_fields_serialize: Option<RenameRule>,\n    rename_all_fields_deserialize: Option<RenameRule>,\n    tag: Option<String>,\n    content: Option<String>,\n    untagged: bool,\n    default: bool,\n    transparent: bool,\n    from: Option<ConversionType>,\n    try_from: Option<ConversionType>,\n    into: Option<ConversionType>,\n    variant_identifier: bool,\n    field_identifier: bool,\n}\n\n#[derive(Default)]\nstruct VariantAttrs {\n    rename_serialize: Option<String>,\n    rename_deserialize: Option<String>,\n    aliases: Vec<String>,\n    rename_all_serialize: Option<RenameRule>,\n    rename_all_deserialize: Option<RenameRule>,\n    skip_serializing: bool,\n    skip_deserializing: bool,\n    has_serialize_with: bool,\n    has_deserialize_with: bool,\n    has_with: bool,\n    other: bool,\n    untagged: bool,\n}\n\n#[derive(Default)]\nstruct FieldAttrs {\n    rename_serialize: Option<String>,\n    rename_deserialize: Option<String>,\n    aliases: Vec<String>,\n    default: bool,\n    flatten: bool,\n    skip_serializing: bool,\n    skip_deserializing: bool,\n    skip_serializing_if: Option<String>,\n    has_serialize_with: bool,\n    has_deserialize_with: bool,\n    has_with: bool,\n}\n\npub(super) fn lower_runtime_attributes(\n    crate_ref: &TokenStream,\n    scope: AttributeScope,\n    raw_attrs: &[Attribute],\n) -> Result<Option<TokenStream>> {\n    match scope {\n        AttributeScope::Container => parse_container_attrs(raw_attrs)\n            .map(|attrs| attrs.map(|attrs| lower_container_attrs(crate_ref, attrs))),\n        AttributeScope::Variant => parse_variant_attrs(raw_attrs)\n            .map(|attrs| attrs.map(|attrs| lower_variant_attrs(crate_ref, attrs))),\n        AttributeScope::Field => parse_field_attrs(raw_attrs)\n            .map(|attrs| attrs.map(|attrs| lower_field_attrs(crate_ref, attrs))),\n    }\n}\n\nfn parse_container_attrs(attrs: &[Attribute]) -> Result<Option<ContainerAttrs>> {\n    let mut parsed = ContainerAttrs::default();\n    let mut found = false;\n\n    for attr in attrs.iter().filter(|attr| attr.path().is_ident(\"serde\")) {\n        let Meta::List(list) = &attr.meta else {\n            continue;\n        };\n\n        found = true;\n        list.parse_nested_meta(|meta| parse_container_meta(&mut parsed, meta))?;\n    }\n\n    Ok(found.then_some(parsed))\n}\n\nfn parse_variant_attrs(attrs: &[Attribute]) -> Result<Option<VariantAttrs>> {\n    let mut parsed = VariantAttrs::default();\n    let mut found = false;\n\n    for attr in attrs.iter().filter(|attr| attr.path().is_ident(\"serde\")) {\n        let Meta::List(list) = &attr.meta else {\n            continue;\n        };\n\n        found = true;\n        list.parse_nested_meta(|meta| parse_variant_meta(&mut parsed, meta))?;\n    }\n\n    Ok(found.then_some(parsed))\n}\n\nfn parse_field_attrs(attrs: &[Attribute]) -> Result<Option<FieldAttrs>> {\n    let mut parsed = FieldAttrs::default();\n    let mut found = false;\n\n    for attr in attrs.iter().filter(|attr| attr.path().is_ident(\"serde\")) {\n        let Meta::List(list) = &attr.meta else {\n            continue;\n        };\n\n        found = true;\n        list.parse_nested_meta(|meta| parse_field_meta(&mut parsed, meta))?;\n    }\n\n    Ok(found.then_some(parsed))\n}\n\nfn parse_container_meta(target: &mut ContainerAttrs, meta: ParseNestedMeta<'_>) -> Result<()> {\n    if meta.path.is_ident(\"rename\") {\n        parse_rename(\n            &meta,\n            &mut target.rename_serialize,\n            &mut target.rename_deserialize,\n        )?;\n    } else if meta.path.is_ident(\"rename_all\") {\n        parse_rename_all(\n            &meta,\n            &mut target.rename_all_serialize,\n            &mut target.rename_all_deserialize,\n        )?;\n    } else if meta.path.is_ident(\"rename_all_fields\") {\n        parse_rename_all(\n            &meta,\n            &mut target.rename_all_fields_serialize,\n            &mut target.rename_all_fields_deserialize,\n        )?;\n    } else if meta.path.is_ident(\"tag\") {\n        target.tag = Some(parse_string_assignment(&meta)?);\n    } else if meta.path.is_ident(\"content\") {\n        target.content = Some(parse_string_assignment(&meta)?);\n    } else if meta.path.is_ident(\"untagged\") {\n        target.untagged = true;\n    } else if meta.path.is_ident(\"default\") {\n        parse_default_assignment(&meta)?;\n        target.default = true;\n    } else if meta.path.is_ident(\"transparent\") {\n        target.transparent = true;\n    } else if meta.path.is_ident(\"from\") {\n        target.from = Some(parse_conversion_assignment(&meta)?);\n    } else if meta.path.is_ident(\"try_from\") {\n        target.try_from = Some(parse_conversion_assignment(&meta)?);\n    } else if meta.path.is_ident(\"into\") {\n        target.into = Some(parse_conversion_assignment(&meta)?);\n    } else if meta.path.is_ident(\"variant_identifier\") {\n        target.variant_identifier = true;\n    } else if meta.path.is_ident(\"field_identifier\") {\n        target.field_identifier = true;\n    }\n\n    Ok(())\n}\n\nfn parse_variant_meta(target: &mut VariantAttrs, meta: ParseNestedMeta<'_>) -> Result<()> {\n    if meta.path.is_ident(\"rename\") {\n        parse_rename(\n            &meta,\n            &mut target.rename_serialize,\n            &mut target.rename_deserialize,\n        )?;\n    } else if meta.path.is_ident(\"alias\") {\n        target.aliases.push(parse_string_assignment(&meta)?);\n    } else if meta.path.is_ident(\"rename_all\") {\n        parse_rename_all(\n            &meta,\n            &mut target.rename_all_serialize,\n            &mut target.rename_all_deserialize,\n        )?;\n    } else if meta.path.is_ident(\"skip\") {\n        target.skip_serializing = true;\n        target.skip_deserializing = true;\n    } else if meta.path.is_ident(\"skip_serializing\") {\n        target.skip_serializing = true;\n    } else if meta.path.is_ident(\"skip_deserializing\") {\n        target.skip_deserializing = true;\n    } else if meta.path.is_ident(\"serialize_with\") {\n        target.has_serialize_with = true;\n        parse_string_assignment(&meta)?;\n    } else if meta.path.is_ident(\"deserialize_with\") {\n        target.has_deserialize_with = true;\n        parse_string_assignment(&meta)?;\n    } else if meta.path.is_ident(\"with\") {\n        target.has_with = true;\n        parse_string_assignment(&meta)?;\n    } else if meta.path.is_ident(\"other\") {\n        target.other = true;\n    } else if meta.path.is_ident(\"untagged\") {\n        target.untagged = true;\n    }\n\n    Ok(())\n}\n\nfn parse_field_meta(target: &mut FieldAttrs, meta: ParseNestedMeta<'_>) -> Result<()> {\n    if meta.path.is_ident(\"rename\") {\n        parse_rename(\n            &meta,\n            &mut target.rename_serialize,\n            &mut target.rename_deserialize,\n        )?;\n    } else if meta.path.is_ident(\"alias\") {\n        target.aliases.push(parse_string_assignment(&meta)?);\n    } else if meta.path.is_ident(\"default\") {\n        parse_default_assignment(&meta)?;\n        target.default = true;\n    } else if meta.path.is_ident(\"flatten\") {\n        target.flatten = true;\n    } else if meta.path.is_ident(\"skip\") {\n        target.skip_serializing = true;\n        target.skip_deserializing = true;\n    } else if meta.path.is_ident(\"skip_serializing\") {\n        target.skip_serializing = true;\n    } else if meta.path.is_ident(\"skip_deserializing\") {\n        target.skip_deserializing = true;\n    } else if meta.path.is_ident(\"skip_serializing_if\") {\n        target.skip_serializing_if = Some(parse_string_assignment(&meta)?);\n    } else if meta.path.is_ident(\"serialize_with\") {\n        target.has_serialize_with = true;\n        parse_string_assignment(&meta)?;\n    } else if meta.path.is_ident(\"deserialize_with\") {\n        target.has_deserialize_with = true;\n        parse_string_assignment(&meta)?;\n    } else if meta.path.is_ident(\"with\") {\n        target.has_with = true;\n        parse_string_assignment(&meta)?;\n    }\n\n    Ok(())\n}\n\nfn parse_rename(\n    meta: &ParseNestedMeta<'_>,\n    rename_serialize: &mut Option<String>,\n    rename_deserialize: &mut Option<String>,\n) -> Result<()> {\n    if meta.input.peek(syn::Token![=]) {\n        let value = parse_string_assignment(meta)?;\n        *rename_serialize = Some(value.clone());\n        *rename_deserialize = Some(value);\n        return Ok(());\n    }\n\n    meta.parse_nested_meta(|meta| {\n        if meta.path.is_ident(\"serialize\") {\n            *rename_serialize = Some(parse_string_assignment(&meta)?);\n        } else if meta.path.is_ident(\"deserialize\") {\n            *rename_deserialize = Some(parse_string_assignment(&meta)?);\n        }\n\n        Ok(())\n    })\n}\n\nfn parse_rename_all(\n    meta: &ParseNestedMeta<'_>,\n    rename_serialize: &mut Option<RenameRule>,\n    rename_deserialize: &mut Option<RenameRule>,\n) -> Result<()> {\n    if meta.input.peek(syn::Token![=]) {\n        let lit = parse_lit_str(meta)?;\n        let rule = RenameRule::parse(&lit)?;\n        *rename_serialize = Some(rule);\n        *rename_deserialize = Some(rule);\n        return Ok(());\n    }\n\n    meta.parse_nested_meta(|meta| {\n        if meta.path.is_ident(\"serialize\") {\n            *rename_serialize = Some(RenameRule::parse(&parse_lit_str(&meta)?)?);\n        } else if meta.path.is_ident(\"deserialize\") {\n            *rename_deserialize = Some(RenameRule::parse(&parse_lit_str(&meta)?)?);\n        }\n\n        Ok(())\n    })\n}\n\nfn parse_default_assignment(meta: &ParseNestedMeta<'_>) -> Result<String> {\n    if meta.input.peek(syn::Token![=]) {\n        parse_string_assignment(meta)\n    } else {\n        Ok(\"__default__\".to_owned())\n    }\n}\n\nfn parse_conversion_assignment(meta: &ParseNestedMeta<'_>) -> Result<ConversionType> {\n    let lit = parse_lit_str(meta)?;\n    let type_src = lit.value();\n    let ty = syn::parse_str::<Type>(&type_src)\n        .map_err(|err| syn::Error::new(lit.span(), format!(\"invalid type literal: {err}\")))?;\n\n    Ok(ConversionType { type_src, ty })\n}\n\nfn parse_string_assignment(meta: &ParseNestedMeta<'_>) -> Result<String> {\n    parse_lit_str(meta).map(|lit| lit.value())\n}\n\nfn parse_lit_str(meta: &ParseNestedMeta<'_>) -> Result<LitStr> {\n    meta.value()?.parse()\n}\n\nfn lower_container_attrs(crate_ref: &TokenStream, attrs: ContainerAttrs) -> TokenStream {\n    let mut inserts = Vec::new();\n    push_opt_string(\n        &mut inserts,\n        \"serde:container:rename_serialize\",\n        &attrs.rename_serialize,\n    );\n    push_opt_string(\n        &mut inserts,\n        \"serde:container:rename_deserialize\",\n        &attrs.rename_deserialize,\n    );\n    push_opt_rename_rule(\n        &mut inserts,\n        \"serde:container:rename_all_serialize\",\n        attrs.rename_all_serialize,\n    );\n    push_opt_rename_rule(\n        &mut inserts,\n        \"serde:container:rename_all_deserialize\",\n        attrs.rename_all_deserialize,\n    );\n    push_opt_rename_rule(\n        &mut inserts,\n        \"serde:container:rename_all_fields_serialize\",\n        attrs.rename_all_fields_serialize,\n    );\n    push_opt_rename_rule(\n        &mut inserts,\n        \"serde:container:rename_all_fields_deserialize\",\n        attrs.rename_all_fields_deserialize,\n    );\n    push_opt_string(&mut inserts, \"serde:container:tag\", &attrs.tag);\n    push_opt_string(&mut inserts, \"serde:container:content\", &attrs.content);\n    push_bool(&mut inserts, \"serde:container:untagged\", attrs.untagged);\n    push_bool(&mut inserts, \"serde:container:default\", attrs.default);\n    push_bool(\n        &mut inserts,\n        \"serde:container:transparent\",\n        attrs.transparent,\n    );\n    push_opt_conversion(&mut inserts, crate_ref, \"from\", &attrs.from);\n    push_opt_conversion(&mut inserts, crate_ref, \"try_from\", &attrs.try_from);\n    push_opt_conversion(&mut inserts, crate_ref, \"into\", &attrs.into);\n    push_bool(\n        &mut inserts,\n        \"serde:container:variant_identifier\",\n        attrs.variant_identifier,\n    );\n    push_bool(\n        &mut inserts,\n        \"serde:container:field_identifier\",\n        attrs.field_identifier,\n    );\n\n    quote!(#(#inserts)*)\n}\n\nfn lower_variant_attrs(_crate_ref: &TokenStream, attrs: VariantAttrs) -> TokenStream {\n    let mut inserts = Vec::new();\n    push_opt_string(\n        &mut inserts,\n        \"serde:variant:rename_serialize\",\n        &attrs.rename_serialize,\n    );\n    push_opt_string(\n        &mut inserts,\n        \"serde:variant:rename_deserialize\",\n        &attrs.rename_deserialize,\n    );\n    push_vec_string(&mut inserts, \"serde:variant:aliases\", &attrs.aliases);\n    push_opt_rename_rule(\n        &mut inserts,\n        \"serde:variant:rename_all_serialize\",\n        attrs.rename_all_serialize,\n    );\n    push_opt_rename_rule(\n        &mut inserts,\n        \"serde:variant:rename_all_deserialize\",\n        attrs.rename_all_deserialize,\n    );\n    push_bool(\n        &mut inserts,\n        \"serde:variant:skip_serializing\",\n        attrs.skip_serializing,\n    );\n    push_bool(\n        &mut inserts,\n        \"serde:variant:skip_deserializing\",\n        attrs.skip_deserializing,\n    );\n    push_bool(\n        &mut inserts,\n        \"serde:variant:has_serialize_with\",\n        attrs.has_serialize_with,\n    );\n    push_bool(\n        &mut inserts,\n        \"serde:variant:has_deserialize_with\",\n        attrs.has_deserialize_with,\n    );\n    push_bool(&mut inserts, \"serde:variant:has_with\", attrs.has_with);\n    push_bool(&mut inserts, \"serde:variant:other\", attrs.other);\n    push_bool(&mut inserts, \"serde:variant:untagged\", attrs.untagged);\n\n    quote!(#(#inserts)*)\n}\n\nfn lower_field_attrs(_crate_ref: &TokenStream, attrs: FieldAttrs) -> TokenStream {\n    let mut inserts = Vec::new();\n    push_opt_string(\n        &mut inserts,\n        \"serde:field:rename_serialize\",\n        &attrs.rename_serialize,\n    );\n    push_opt_string(\n        &mut inserts,\n        \"serde:field:rename_deserialize\",\n        &attrs.rename_deserialize,\n    );\n    push_vec_string(&mut inserts, \"serde:field:aliases\", &attrs.aliases);\n    push_bool(&mut inserts, \"serde:field:default\", attrs.default);\n    push_bool(&mut inserts, \"serde:field:flatten\", attrs.flatten);\n    push_bool(\n        &mut inserts,\n        \"serde:field:skip_serializing\",\n        attrs.skip_serializing,\n    );\n    push_bool(\n        &mut inserts,\n        \"serde:field:skip_deserializing\",\n        attrs.skip_deserializing,\n    );\n    push_opt_string(\n        &mut inserts,\n        \"serde:field:skip_serializing_if\",\n        &attrs.skip_serializing_if,\n    );\n    push_bool(\n        &mut inserts,\n        \"serde:field:has_serialize_with\",\n        attrs.has_serialize_with,\n    );\n    push_bool(\n        &mut inserts,\n        \"serde:field:has_deserialize_with\",\n        attrs.has_deserialize_with,\n    );\n    push_bool(&mut inserts, \"serde:field:has_with\", attrs.has_with);\n\n    quote!(#(#inserts)*)\n}\n\nfn push_opt_string(inserts: &mut Vec<TokenStream>, key: &str, value: &Option<String>) {\n    if let Some(value) = value {\n        inserts.push(quote!(attrs.insert(#key, ::std::string::String::from(#value));));\n    }\n}\n\nfn push_vec_string(inserts: &mut Vec<TokenStream>, key: &str, value: &[String]) {\n    if value.is_empty() {\n        return;\n    }\n\n    let value = value\n        .iter()\n        .map(|value| quote!(::std::string::String::from(#value)));\n    inserts.push(quote!(attrs.insert(#key, vec![#(#value),*]);));\n}\n\nfn push_bool(inserts: &mut Vec<TokenStream>, key: &str, value: bool) {\n    if value {\n        inserts.push(quote!(attrs.insert(#key, true);));\n    }\n}\n\nfn push_opt_rename_rule(inserts: &mut Vec<TokenStream>, key: &str, value: Option<RenameRule>) {\n    if let Some(value) = value {\n        let value = value.as_str();\n        inserts.push(quote!(attrs.insert(#key, ::std::string::String::from(#value));));\n    }\n}\n\nfn push_opt_conversion(\n    inserts: &mut Vec<TokenStream>,\n    crate_ref: &TokenStream,\n    key: &str,\n    value: &Option<ConversionType>,\n) {\n    if let Some(value) = value {\n        let type_src = &value.type_src;\n        let ty = &value.ty;\n        let src_key = format!(\"serde:container:{key}_type_src\");\n        let resolved_key = format!(\"serde:container:{key}_resolved\");\n        inserts.push(quote!(attrs.insert(#src_key, ::std::string::String::from(#type_src));));\n        inserts.push(\n            quote!(attrs.insert(#resolved_key, <#ty as #crate_ref::Type>::definition(types));),\n        );\n    }\n}\n"
  },
  {
    "path": "specta-macros/src/type/struct.rs",
    "content": "use crate::{\n    r#type::field::construct_field,\n    utils::{parse_attrs_with_filter, unraw_raw_ident},\n};\nuse proc_macro2::TokenStream;\nuse quote::{ToTokens, quote};\nuse syn::{DataStruct, Field, Fields, Type, spanned::Spanned};\n\nuse super::attr::*;\n\npub fn decode_field_attrs<'a>(\n    field: &'a Field,\n    skip_attrs: &[String],\n) -> syn::Result<(FieldAttr, &'a [syn::Attribute])> {\n    // We pass all the attributes at the start and when decoding them pop them off the list.\n    // This means at the end we can check for any that weren't consumed and throw an error.\n    let raw_attrs = parse_attrs_with_filter(&field.attrs, skip_attrs)?;\n    let mut attrs = raw_attrs.clone();\n    let field_attrs = FieldAttr::from_attrs(&mut attrs)?;\n\n    // The expectation is that when an attribute is processed it will be removed so if any are left over we know they are invalid\n    // but we only throw errors for Specta-specific attributes so we don't continually break other attributes.\n    if let Some(attr) = attrs.iter().find(|attr| attr.source == \"specta\") {\n        match &attr.value {\n            None\n            | Some(crate::utils::AttributeValue::Lit(_))\n            | Some(crate::utils::AttributeValue::Path(_)) => {\n                return Err(syn::Error::new(\n                    attr.key.span(),\n                    \"specta: invalid formatted attribute\",\n                ));\n            }\n            Some(crate::utils::AttributeValue::Expr(_)) => {\n                return Err(syn::Error::new(\n                    attr.key.span(),\n                    \"specta: invalid formatted attribute\",\n                ));\n            }\n            Some(crate::utils::AttributeValue::Attribute {\n                attr: inner_attrs, ..\n            }) => {\n                if let Some(inner_attr) = inner_attrs.first() {\n                    if let Some(message) = migration_hint(Scope::Field, &inner_attr.key.to_string())\n                    {\n                        return Err(syn::Error::new(inner_attr.key.span(), message));\n                    }\n\n                    return Err(syn::Error::new(\n                        inner_attr.key.span(),\n                        format!(\n                            \"specta: Found unsupported field attribute '{}'\",\n                            inner_attr.key\n                        ),\n                    ));\n                }\n                return Err(syn::Error::new(\n                    attr.key.span(),\n                    \"specta: invalid formatted attribute\",\n                ));\n            }\n        }\n    }\n\n    Ok((field_attrs, &field.attrs))\n}\n\npub fn parse_struct(\n    crate_ref: &TokenStream,\n    container_attrs: &ContainerAttr,\n    data: &DataStruct,\n) -> syn::Result<TokenStream> {\n    if container_attrs.transparent {\n        if let Fields::Unit = data.fields {\n            return Err(syn::Error::new(\n                data.fields.span(),\n                \"specta: unit structs cannot be transparent\",\n            ));\n        }\n\n        let fields = data\n            .fields\n            .iter()\n            .map(|field| {\n                decode_field_attrs(field, &container_attrs.skip_attrs)\n                    .map(|(attrs, raw)| (field.ty.clone(), attrs, raw))\n            })\n            .collect::<syn::Result<Vec<(Type, FieldAttr, &[syn::Attribute])>>>()?\n            .into_iter()\n            .filter(|(_, attrs, _)| !attrs.skip)\n            .collect::<Vec<_>>();\n\n        if fields.len() != 1 {\n            return Err(syn::Error::new(\n                data.fields.span(),\n                \"specta: transparent structs must have exactly one field\",\n            ));\n        }\n\n        let (field_ty, field_attrs, raw_attrs) =\n            fields.into_iter().next().expect(\"fields.len() != 1\");\n\n        let field = construct_field(\n            crate_ref,\n            container_attrs,\n            field_attrs,\n            &field_ty,\n            raw_attrs,\n        )?;\n\n        return Ok(quote!(datatype::Struct::unnamed().field(#field).build()));\n    }\n\n    let fields = match &data.fields {\n        Fields::Named(_) => {\n            let fields = data\n                .fields\n                .iter()\n                .map(|field| {\n                    let (field_attrs, raw_attrs) =\n                        decode_field_attrs(field, &container_attrs.skip_attrs)?;\n\n                    let field_ident_str =\n                        unraw_raw_ident(field.ident.as_ref().ok_or_else(|| {\n                            syn::Error::new(\n                                field.span(),\n                                \"specta: named field must have an identifier\",\n                            )\n                        })?);\n                    let field_name = field_ident_str.to_token_stream();\n\n                    let inner = construct_field(\n                        crate_ref,\n                        container_attrs,\n                        field_attrs,\n                        &field.ty,\n                        raw_attrs,\n                    )?;\n                    Ok(quote!(builder.field_mut(#field_name, #inner);))\n                })\n                .collect::<syn::Result<Vec<TokenStream>>>()?;\n\n            quote!({\n                let mut builder = datatype::Struct::named();\n                #(#fields)*\n                builder.build()\n            })\n        }\n        Fields::Unnamed(_) => {\n            let fields = data\n                .fields\n                .iter()\n                .map(|field| {\n                    let (field_attrs, raw_attrs) =\n                        decode_field_attrs(field, &container_attrs.skip_attrs)?;\n                    construct_field(\n                        crate_ref,\n                        container_attrs,\n                        field_attrs,\n                        &field.ty,\n                        raw_attrs,\n                    )\n                    .map(|inner| quote!(builder.field_mut(#inner);))\n                })\n                .collect::<syn::Result<Vec<TokenStream>>>()?;\n\n            quote!({\n                let mut builder = datatype::Struct::unnamed();\n                #(#fields)*\n                builder.build()\n            })\n        }\n        Fields::Unit => quote!(datatype::Struct::unit().into()),\n    };\n\n    Ok(fields)\n}\n"
  },
  {
    "path": "specta-macros/src/utils.rs",
    "content": "use proc_macro2::Span;\nuse quote::ToTokens;\nuse syn::{\n    Expr, Ident, Lit, Meta, Path, Result, Token, Type, TypePath,\n    ext::IdentExt,\n    parse::{Parse, ParseStream},\n    spanned::Spanned,\n    token::Paren,\n};\n\n#[derive(Clone)]\npub enum AttributeValue {\n    /// Literal value. Eg. `#[specta(name = \"hello\")]` or `#[specta(name = u32)]`\n    Lit(Lit),\n    /// Path value. Eg. `#[specta(type = String)]` or `#[specta(type = ::std::string::String)]`\n    /// Path doesn't follow the Rust spec hence the need for this custom parser. We are doing this anyway for backwards compatibility.\n    Path(Path),\n    /// Expression value for values that are not valid paths.\n    /// This allows us to later parse richer forms such as tuple/array/reference types.\n    Expr(Expr),\n    /// A nested attribute. Eg. the `deprecated(note = \"some note\") in `#[specta(deprecated(note = \"some note\"))]`\n    Attribute { span: Span, attr: Vec<Attribute> },\n}\n\nimpl AttributeValue {\n    fn span(&self) -> Span {\n        match self {\n            Self::Lit(lit) => lit.span(),\n            Self::Path(path) => path.span(),\n            Self::Expr(expr) => expr.span(),\n            Self::Attribute { span, .. } => *span,\n        }\n    }\n}\n\nimpl Parse for AttributeValue {\n    fn parse(input: ParseStream) -> Result<Self> {\n        Ok(match input.peek(Lit) {\n            true => Self::Lit(input.parse()?),\n            false => {\n                if input.fork().parse::<Path>().is_ok() {\n                    Self::Path(input.parse()?)\n                } else {\n                    Self::Expr(input.parse()?)\n                }\n            }\n        })\n    }\n}\n\n#[derive(Clone)]\npub struct Attribute {\n    /// Source of the attribute. Eg. `specta`, `serde`, `repr`, `deprecated`, etc.\n    pub source: String,\n    /// Key of the current item. Eg. `specta` or `type`in `#[specta(type = String)]`\n    pub key: Ident,\n    /// Value of the item. Eg. `String` in `#[specta(type = String)]`\n    pub value: Option<AttributeValue>,\n}\n\nimpl Attribute {\n    /// Span of they value. Eg. `String` in `#[specta(type = String)]`\n    /// Will fallback to the key span if no value is present.\n    pub fn value_span(&self) -> Span {\n        match &self.value {\n            Some(v) => v.span(),\n            None => self.key.span(),\n        }\n    }\n\n    pub fn parse_string(&self) -> Result<String> {\n        match &self.value {\n            Some(AttributeValue::Lit(Lit::Str(string))) => Ok(string.value()),\n            _ => Err(syn::Error::new(\n                self.value_span(),\n                \"specta: expected string literal. Eg. `\\\"somestring\\\"`\",\n            )),\n        }\n    }\n\n    pub fn parse_bool(&self) -> Result<bool> {\n        match &self.value {\n            Some(AttributeValue::Lit(Lit::Bool(b))) => Ok(b.value()),\n            _ => Err(syn::Error::new(\n                self.value_span(),\n                \"specta: expected boolean literal. Eg. `true` or `false`\",\n            )),\n        }\n    }\n\n    pub fn parse_path(&self) -> Result<Path> {\n        match &self.value {\n            Some(AttributeValue::Path(path)) => Ok(path.clone()),\n            Some(AttributeValue::Expr(Expr::Path(path))) => Ok(path.path.clone()),\n            _ => Err(syn::Error::new(\n                self.value_span(),\n                \"specta: expected path. Eg. `String` or `std::string::String`\",\n            )),\n        }\n    }\n\n    pub fn parse_type(&self) -> Result<Type> {\n        match &self.value {\n            Some(AttributeValue::Path(path)) => Ok(Type::Path(TypePath {\n                qself: None,\n                path: path.clone(),\n            })),\n            Some(AttributeValue::Expr(expr)) => syn::parse2(expr.to_token_stream()).map_err(|_| {\n                syn::Error::new(\n                    self.value_span(),\n                    \"specta: expected type. Eg. `String`, `(String, i32)` or `Vec<T>`\",\n                )\n            }),\n            _ => Err(syn::Error::new(\n                self.value_span(),\n                \"specta: expected type. Eg. `String`, `(String, i32)` or `Vec<T>`\",\n            )),\n        }\n    }\n}\n\npub trait AttrExtract {\n    fn extract(&mut self, source: &str, key: &str) -> Option<Attribute>;\n    fn extract_all(&mut self, source: &str, key: &str) -> Vec<Attribute>;\n}\n\nimpl AttrExtract for Vec<Attribute> {\n    fn extract(&mut self, source: &str, key: &str) -> Option<Attribute> {\n        // 1. Check for top-level match (e.g., #[deprecated])\n        if let Some(pos) = self\n            .iter()\n            .position(|attr| attr.source == source && attr.key == key)\n        {\n            return Some(self.swap_remove(pos));\n        }\n\n        // 2. Check nested attributes within parent matching source\n        //    e.g., extract(\"specta\", \"inline\") from #[specta(inline)]\n        //    Structure: Attribute { source: \"specta\", key: \"specta\", value: Attribute { key: \"inline\" } }\n        for i in 0..self.len() {\n            if self[i].source == source\n                && self[i].key == source\n                && let Some(AttributeValue::Attribute {\n                    attr: nested_attrs, ..\n                }) = &mut self[i].value\n                && let Some(nested_pos) = nested_attrs.iter().position(|a| a.key == key)\n            {\n                let result = nested_attrs.swap_remove(nested_pos);\n\n                // If parent attribute is now empty, remove it too\n                if nested_attrs.is_empty() {\n                    self.swap_remove(i);\n                }\n\n                return Some(result);\n            }\n        }\n\n        None\n    }\n\n    fn extract_all(&mut self, source: &str, key: &str) -> Vec<Attribute> {\n        let mut result = Vec::new();\n\n        // 1. Extract all top-level matches\n        let mut i = 0;\n        while i < self.len() {\n            if self[i].source == source && self[i].key == key {\n                result.push(self.swap_remove(i));\n                // Don't increment i, as swap_remove moved a new element to position i\n            } else {\n                i += 1;\n            }\n        }\n\n        // 2. Extract all nested matches\n        let mut i = 0;\n        while i < self.len() {\n            let mut should_remove_parent = false;\n\n            if self[i].source == source\n                && self[i].key == source\n                && let Some(AttributeValue::Attribute {\n                    attr: nested_attrs, ..\n                }) = &mut self[i].value\n            {\n                let mut j = 0;\n                while j < nested_attrs.len() {\n                    if nested_attrs[j].key == key {\n                        result.push(nested_attrs.swap_remove(j));\n                    } else {\n                        j += 1;\n                    }\n                }\n\n                should_remove_parent = nested_attrs.is_empty();\n            }\n\n            if should_remove_parent {\n                self.swap_remove(i);\n            } else {\n                i += 1;\n            }\n        }\n\n        result\n    }\n}\n\nstruct NestedAttributeList {\n    attrs: Vec<Attribute>,\n}\n\nimpl Parse for NestedAttributeList {\n    fn parse(input: ParseStream) -> Result<Self> {\n        let mut attrs = Vec::new();\n        while !input.is_empty() {\n            if input.peek(Ident::peek_any) {\n                let fork = input.fork();\n                let _ = fork.call(Ident::parse_any)?;\n\n                if fork.peek(Token![::]) {\n                    let _ignored: syn::Expr = input.parse()?;\n                } else {\n                    let key = input.call(Ident::parse_any)?;\n                    let key_span = key.span();\n\n                    attrs.push(Attribute {\n                        source: String::new(),\n                        key,\n                        value: match false {\n                            _ if input.peek(Paren) => {\n                                let content;\n                                syn::parenthesized!(content in input);\n                                Some(AttributeValue::Attribute {\n                                    span: key_span,\n                                    attr: content.parse::<NestedAttributeList>()?.attrs,\n                                })\n                            }\n                            _ if input.peek(Token![=]) => {\n                                input.parse::<Token![=]>()?;\n                                Some(input.parse()?)\n                            }\n                            _ => None,\n                        },\n                    });\n                }\n            } else {\n                let _ignored: syn::Expr = input.parse()?;\n            }\n\n            if input.peek(Token![,]) {\n                input.parse::<Token![,]>()?;\n            }\n        }\n        Ok(NestedAttributeList { attrs })\n    }\n}\n\n/// pass all of the attributes into a single structure.\n/// We can then remove them from the struct while passing an any left over must be invalid and an error can be thrown.\npub fn parse_attrs(attrs: &[syn::Attribute]) -> syn::Result<Vec<Attribute>> {\n    parse_attrs_with_filter(attrs, &[])\n}\n\n/// Same as `parse_attrs` but allows skipping attributes by name.\n/// This is useful for skipping attributes that may have non-standard syntax that we can't parse.\npub fn parse_attrs_with_filter(\n    attrs: &[syn::Attribute],\n    skip_attrs: &[String],\n) -> syn::Result<Vec<Attribute>> {\n    let mut result = Vec::new();\n\n    for attr in attrs {\n        let ident = attr\n            .path()\n            .segments\n            .last()\n            .expect(\"Attribute path must have at least one segment\")\n            .clone()\n            .ident;\n\n        // Skip attributes that are in the skip list\n        let attr_name = ident.to_string();\n        if skip_attrs.contains(&attr_name) {\n            continue;\n        }\n\n        result.append(&mut match &attr.meta {\n            Meta::Path(_) => vec![Attribute {\n                source: attr_name.clone(),\n                key: ident.clone(),\n                value: None,\n            }],\n            Meta::List(meta) => {\n                let source = attr_name.clone();\n                let mut parsed: Vec<Attribute> =\n                    syn::parse2::<NestedAttributeList>(meta.tokens.clone())?.attrs;\n                for a in &mut parsed {\n                    a.source = source.clone();\n                }\n                vec![Attribute {\n                    source,\n                    key: ident.clone(),\n                    value: Some(AttributeValue::Attribute {\n                        span: ident.span(),\n                        attr: parsed,\n                    }),\n                }]\n            }\n            Meta::NameValue(meta) => {\n                let source = attr_name.clone();\n                let mut parsed: Vec<Attribute> =\n                    syn::parse2::<NestedAttributeList>(meta.to_token_stream().clone())?.attrs;\n                for a in &mut parsed {\n                    a.source = source.clone();\n                }\n                parsed\n            }\n        });\n    }\n\n    Ok(result)\n}\n\npub fn unraw_raw_ident(ident: &Ident) -> String {\n    let ident = ident.to_string();\n    if ident.starts_with(\"r#\") {\n        ident.trim_start_matches(\"r#\").to_owned()\n    } else {\n        ident\n    }\n}\n\n#[cfg(feature = \"DO_NOT_USE_function\")]\npub fn format_fn_wrapper(function: &Ident) -> Ident {\n    quote::format_ident!(\"__specta__fn__{}\", function)\n}\n"
  },
  {
    "path": "specta-openapi/Cargo.toml",
    "content": "[package]\nname = \"specta-openapi\"\ndescription = \"Export your Rust types to OpenAPI\"\nversion = \"0.0.2\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-openapi/latest/specta-openapi\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"openapi\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\nreadme = \"../README.md\"\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[lints]\nworkspace = true\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\" }\nopenapiv3 = { version = \"2\", default-features = false, features = [] }\n"
  },
  {
    "path": "specta-openapi/src/lib.rs",
    "content": "//! [OpenAPI](https://www.openapis.org) language exporter for [Specta](specta).\n//!\n//! <div class=\"warning\">\n//! This crate is still in active development and is not yet ready for general purpose use!\n//! </div>\n//!\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n#![allow(warnings)] // TODO: This crate is still in development\n\nuse openapiv3::{\n    ArrayType, BooleanType, NumberType, ReferenceOr, Schema, SchemaData, SchemaKind, StringType,\n    Type,\n};\nuse specta::datatype::{DataType, Primitive};\n\n// pub fn to_openapi_export(def: &DataType) -> Result<openapiv3::Schema, String> {\n//     Ok(match &def {\n//         // Named struct\n//         // DataType::Struct(StructType {\n//         //     name,\n//         //     generics,\n//         //     fields,\n//         //     ..\n//         // }) => match fields.len() {\n//         //     0 => format!(\"export type {name} = {inline_ts}\"),\n//         //     _ => {\n//         //         let generics = match generics.len() {\n//         //             0 => \"\".into(),\n//         //             _ => format!(\"<{}>\", generics.to_vec().join(\", \")),\n//         //         };\n\n//         //         format!(\"export interface {name}{generics} {inline_ts}\")\n//         //     }\n//         // },\n//         // // Enum\n//         // DataType::Enum(EnumType { name, generics, .. }) => {\n//         //     let generics = match generics.len() {\n//         //         0 => \"\".into(),\n//         //         _ => format!(\"<{}>\", generics.to_vec().join(\", \")),\n//         //     };\n\n//         //     format!(\"export type {name}{generics} = {inline_ts}\")\n//         // }\n//         // // Unnamed struct\n//         // DataType::Tuple(TupleType { name, .. }) => {\n//         //     format!(\"export type {name} = {inline_ts}\")\n//         // }\n//         _ => todo!(), // return Err(format!(\"Type cannot be exported: {:?}\", def)),\n//     })\n// }\n\nmacro_rules! primitive_def {\n    ($($t:ident)+) => {\n        $(DataType::Primitive(Primitive::$t))|+\n    }\n}\n\npub fn to_openapi(typ: &DataType) -> ReferenceOr<Schema> {\n    let mut schema_data = SchemaData {\n        nullable: false,\n        deprecated: false, // TODO\n        example: None,     // TODO\n        title: None,       // TODO\n        description: None, // TODO\n        default: None,     // TODO\n        ..Default::default()\n    };\n\n    match &typ {\n        // DataType::Any => ReferenceOr::Item(Schema {\n        //     schema_data,\n        //     schema_kind: SchemaKind::Type(Type::Object(openapiv3::ObjectType::default())), // TODO: Use official \"Any Type\"\n        // }),\n        primitive_def!(i8 i16 i32 isize u8 u16 u32 usize f16 f32 f64 f128) => {\n            ReferenceOr::Item(Schema {\n                schema_data,\n                schema_kind: SchemaKind::Type(Type::Number(NumberType::default())), // TODO: Configure number type. Ts: `number`\n            })\n        }\n        primitive_def!(i64 u64 i128 u128) => ReferenceOr::Item(Schema {\n            schema_data,\n            schema_kind: SchemaKind::Type(Type::Number(NumberType::default())), // TODO: Configure number type. Ts: `bigint`\n        }),\n        primitive_def!(str char) => ReferenceOr::Item(Schema {\n            schema_data,\n            schema_kind: SchemaKind::Type(Type::String(StringType::default())), // TODO: Configure string type. Ts: `string`\n        }),\n        primitive_def!(bool) => ReferenceOr::Item(Schema {\n            schema_data,\n            schema_kind: SchemaKind::Type(Type::Boolean(BooleanType::default())),\n        }),\n        // primitive_def!(Never) => \"never\".into(),\n        DataType::Nullable(def) => {\n            to_openapi(def)\n            // schema.schema_data.nullable = true; // TODO\n        }\n        // DataType::Map(def) => {\n        //     format!(\"Record<{}, {}>\", to_openapi(&def.0), to_openapi(&def.1))\n        // }\n        DataType::List(def) => ReferenceOr::Item(Schema {\n            schema_data,\n            schema_kind: SchemaKind::Type(Type::Array(ArrayType {\n                items: Some(match to_openapi(&def.ty) {\n                    ReferenceOr::Item(schema) => ReferenceOr::Item(Box::new(schema)),\n                    ReferenceOr::Reference { reference } => ReferenceOr::Reference { reference },\n                }),\n                // TODO: This type is missing `Default`\n                min_items: None,\n                max_items: None,\n                unique_items: false,\n            })),\n        }),\n        DataType::Tuple(tuple) => match tuple.elements.as_slice() {\n            [] => {\n                schema_data.nullable = true;\n                ReferenceOr::Item(Schema {\n                    schema_data,\n                    schema_kind: SchemaKind::Type(Type::Object(openapiv3::ObjectType::default())), // TODO: This should be `null` type\n                })\n            }\n            [ty] => to_openapi(ty),\n            _tys => todo!(),\n        },\n        DataType::Struct(s) => {\n            let _fields = &s.fields;\n\n            // match &fields[..] {\n            //     [] => todo!(), // \"null\".to_string(),\n            //     fields => {\n            //         // let mut out = match tag {\n            //         //     Some(tag) => vec![format!(\"{tag}: \\\"{name}\\\"\")],\n            //         //     None => vec![],\n            //         // };\n\n            //         // let field_defs = object_fields(fields);\n\n            //         // out.extend(field_defs);\n\n            //         // format!(\"{{ {} }}\", out.join(\", \"))\n\n            //         ReferenceOr::Item(Schema {\n            //             schema_data,\n            //             schema_kind: SchemaKind::Type(Type::Object(openapiv3::ObjectType {\n            //                 properties: fields\n            //                     .iter()\n            //                     .map(\n            //                         |ObjectField {\n            //                              name, ty, optional, ..\n            //                          }| {\n            //                             (\n            //                                 name.clone(),\n            //                                 match to_openapi(ty) {\n            //                                     ReferenceOr::Item(v) => {\n            //                                         ReferenceOr::Item(Box::new(v))\n            //                                     }\n            //                                     ReferenceOr::Reference { reference } => {\n            //                                         ReferenceOr::Reference { reference }\n            //                                     }\n            //                                 },\n            //                             )\n            //                         },\n            //                     )\n            //                     .collect(),\n            //                 ..Default::default()\n            //             })),\n            //         })\n            //     }\n            // }\n            todo!();\n        }\n        DataType::Enum(_e) => {\n            // let variants = e.variants();\n\n            // match &variants[..] {\n            //     [] => todo!(), // \"never\".to_string(),\n            //     variants => {\n            //         // variants\n            //         // .iter()\n            //         // .map(|variant| {\n            //         //     let sanitised_name = sanitise_name(variant.name());\n\n            //         //     match (repr, variant) {\n            //         //         (EnumRepr::Internal { tag }, Variant::Unit(_)) => {\n            //         //             format!(\"{{ {tag}: \\\"{sanitised_name}\\\" }}\")\n            //         //         }\n            //         //         (EnumRepr::Internal { tag }, Variant::Unnamed(tuple)) => {\n            //         //             let typ = to_openapi(&DataType::Tuple(tuple.clone()));\n\n            //         //             format!(\"{{ {tag}: \\\"{sanitised_name}\\\" }} & {typ}\")\n            //         //         }\n            //         //         (EnumRepr::Internal { tag }, Variant::Named(obj)) => {\n            //         //             let mut fields = vec![format!(\"{tag}: \\\"{sanitised_name}\\\"\")];\n\n            //         //             fields.extend(object_fields(&obj.fields));\n\n            //         //             format!(\"{{ {} }}\", fields.join(\", \"))\n            //         //         }\n            //         //         (EnumRepr::External, Variant::Unit(_)) => {\n            //         //             format!(\"\\\"{sanitised_name}\\\"\")\n            //         //         }\n            //         //         (EnumRepr::External, v) => {\n            //         //             let ts_values = to_openapi(&v.data_type());\n\n            //         //             format!(\"{{ {sanitised_name}: {ts_values} }}\")\n            //         //         }\n            //         //         (EnumRepr::Untagged, Variant::Unit(_)) => \"null\".to_string(),\n            //         //         (EnumRepr::Untagged, v) => to_openapi(&v.data_type()),\n            //         //         (EnumRepr::Adjacent { tag, .. }, Variant::Unit(_)) => {\n            //         //             format!(\"{{ {tag}: \\\"{sanitised_name}\\\" }}\")\n            //         //         }\n            //         //         (EnumRepr::Adjacent { tag, content }, v) => {\n            //         //             let ts_values = to_openapi(&v.data_type());\n\n            //         //             format!(\"{{ {tag}: \\\"{sanitised_name}\\\", {content}: {ts_values} }}\")\n            //         //         }\n            //         //     }\n            //         // })\n            //         // .collect::<Vec<_>>()\n            //         // .join(\" | \");\n\n            //         ReferenceOr::Item(Schema {\n            //             schema_data,\n            //             schema_kind: SchemaKind::AnyOf {\n            //                 any_of: variants\n            //                     .iter()\n            //                     .map(|variant| match variant {\n            //                         EnumVariants::Unit(_) => ReferenceOr::Item(Schema {\n            //                             schema_data: Default::default(),\n            //                             schema_kind: SchemaKind::Type(Type::Object(\n            //                                 openapiv3::ObjectType::default(), // TODO: Is this correct?\n            //                             )),\n            //                         }),\n            //                         EnumVariants::Unnamed(tuple) => {\n            //                             to_openapi(&DataType::Tuple(tuple.clone()))\n            //                         }\n            //                         Variant::Named(obj) => {\n            //                             to_openapi(&DataType::Struct(obj.clone()))\n            //                         }\n            //                     })\n            //                     .collect(),\n            //             },\n            //         })\n            //     }\n            // }\n\n            todo!();\n        }\n        DataType::Reference(_reference) => {\n            todo!();\n            // match &reference.generics()[..] {\n            //     [] => {\n            //         todo!();\n            //         // ReferenceOr::Item(Schema {\n            //         //     schema_data,\n            //         //     schema_kind: SchemaKind::OneOf {\n            //         //         one_of: vec![ReferenceOr::Reference {\n            //         //             reference: format!(\"#/components/schemas/{}\", reference.name()),\n            //         //         }],\n            //         //     },\n            //         // })\n            //     }\n            //     generics => {\n            //         // let generics = generics\n            //         //     .iter()\n            //         //     .map(to_openapi)\n            //         //     .collect::<Vec<_>>()\n            //         //     .join(\", \");\n\n            //         // format!(\"{name}<{generics}>\")\n            //         todo!();\n            //     }\n            // }\n        }\n        // DataType::Generic(ident) => ident.to_string(),\n        x => {\n            println!(\"{:?} {:?}\", x, typ);\n            todo!();\n        }\n    }\n}\n"
  },
  {
    "path": "specta-serde/Cargo.toml",
    "content": "[package]\nname = \"specta-serde\"\ndescription = \"Serde support for Specta\"\nversion = \"0.0.11\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-zod/latest/specta-zod\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"typescript\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[lints]\nworkspace = true\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\" }\nspecta-macros = { version = \"=2.0.0-rc.24\", path = \"../specta-macros\", features = [\"serde\"] }\n\n[dev-dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\", features = [\"derive\"] }\nserde = { version = \"1\", features = [\"derive\"] }\n"
  },
  {
    "path": "specta-serde/README.md",
    "content": "# Specta Serde\n\n[Serde](https://serde.rs) support for [Specta](https://github.com/specta-rs/specta).\n\nThis allows for apply Serde macro attributes on your types to the Specta generated types!\n\n## Using with Specta TypeScript\n\n`specta-serde` exposes two format implementation for usage with any of the exporter crates (like  `specta-typescript`):\n\n- `specta_serde::format`: unified shape for both serialize and deserialize.\n- `specta_serde::format_phases`: split serialize/deserialize shapes.\n\n## `format` (unified shape)\n\nUse `format` when serde behavior is symmetric and only a single TypeScript type is produced.\n\nNote: This will error with certain Serde attributes like `#[serde(rename(serialize = \"a\", deserialize = \"b\"))]` as it's unclear what is correct.\n\n```rust\nuse specta::Types;\nuse specta_typescript::Typescript;\n\n#[derive(specta::Type, serde::Serialize, serde::Deserialize)]\n#[serde(rename_all = \"camelCase\")]\nstruct User {\n    user_id: u32,\n}\n\nlet types = Types::default().register::<User>();\n\nlet output = Typescript::default()\n    .export(&types, specta_serde::format)\n    .unwrap();\n\nassert!(output.contains(\"export type User\"));\nassert!(output.contains(\"userId: number\"));\n```\n\nYou should always prefer `format_phases` where possible as it will generate a more accurate type.\n\n## `format_phases` (split by direction)\n\nUse `format_phases` when the wire format could between serialization and deserialization. This may product two different types `TypeName_Serialize` and `TypeName_Deserialize` to accurately represent both phases. It will produce `TypeName` which is `TypeName_Serialize | TypeName_Deserialize` so the type can be used in a general format when needed.\n\nThis is common with directional serde metadata (`serialize_with`,\n`deserialize_with`, `from`, `into`, `try_from`) or explicit\n`#[specta(type = specta_serde::Phased<SerializeTy, DeserializeTy>)]` overrides.\n\n```rust\nuse serde::{Deserialize, Serialize};\nuse serde_with::{OneOrMany, serde_as};\nuse specta::{Type, Types};\nuse specta_typescript::Typescript;\n\n#[derive(Type, Serialize, Deserialize)]\n#[serde(untagged)]\nenum OneOrManyString {\n    One(String),\n    Many(Vec<String>),\n}\n\n#[serde_as]\n#[derive(Type, Serialize, Deserialize)]\nstruct Filters {\n    #[serde_as(as = \"OneOrMany<_>\")]\n    #[specta(type = specta_serde::Phased<Vec<String>, OneOrManyString>)]\n    tags: Vec<String>,\n}\n\nlet types = Types::default().register::<Filters>();\n\nlet output = Typescript::default()\n    .export(&types, specta_serde::format_phases)\n    .unwrap();\n\nassert!(output.contains(\"Filters_Serialize\"));\nassert!(output.contains(\"Filters_Deserialize\"));\nassert!(output.contains(\"OneOrManyString\"));\n```\n"
  },
  {
    "path": "specta-serde/src/error.rs",
    "content": "use std::{borrow::Cow, error, fmt};\n\n/// Error type for serde transformation and validation failures.\n#[non_exhaustive]\npub struct Error {\n    kind: ErrorKind,\n}\n\n#[derive(Debug)]\nenum ErrorKind {\n    InvalidUsageOfSkip {\n        path: String,\n        reason: Cow<'static, str>,\n    },\n    InvalidInternallyTaggedEnum {\n        path: String,\n        variant: String,\n        reason: Cow<'static, str>,\n    },\n    InvalidEnumRepresentation {\n        reason: Cow<'static, str>,\n    },\n    InvalidExternalTaggedVariant {\n        variant: String,\n    },\n    InvalidAdjacentTaggedVariant {\n        variant: String,\n    },\n    InvalidInternallyTaggedVariant {\n        variant: String,\n        reason: Cow<'static, str>,\n    },\n    IncompatibleRename {\n        context: Cow<'static, str>,\n        name: String,\n        serialize: Option<String>,\n        deserialize: Option<String>,\n    },\n    IncompatibleConversion {\n        context: Cow<'static, str>,\n        name: String,\n        serialize: Option<String>,\n        deserialize: Option<String>,\n    },\n    InvalidConversionUsage {\n        path: String,\n        reason: Cow<'static, str>,\n    },\n    UnsupportedSerdeCustomCodec {\n        path: String,\n        attribute: Cow<'static, str>,\n    },\n    InvalidPhasedTypeUsage {\n        path: String,\n        reason: Cow<'static, str>,\n    },\n    InvalidRenameRule {\n        attribute: Cow<'static, str>,\n        value: String,\n    },\n}\n\nimpl Error {\n    pub(crate) fn invalid_usage_of_skip(\n        path: impl Into<String>,\n        reason: impl Into<Cow<'static, str>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::InvalidUsageOfSkip {\n                path: path.into(),\n                reason: reason.into(),\n            },\n        }\n    }\n\n    pub(crate) fn invalid_internally_tagged_enum(\n        path: impl Into<String>,\n        variant: impl Into<String>,\n        reason: impl Into<Cow<'static, str>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::InvalidInternallyTaggedEnum {\n                path: path.into(),\n                variant: variant.into(),\n                reason: reason.into(),\n            },\n        }\n    }\n\n    pub(crate) fn invalid_enum_representation(reason: impl Into<Cow<'static, str>>) -> Self {\n        Self {\n            kind: ErrorKind::InvalidEnumRepresentation {\n                reason: reason.into(),\n            },\n        }\n    }\n\n    pub(crate) fn invalid_external_tagged_variant(variant: impl Into<String>) -> Self {\n        Self {\n            kind: ErrorKind::InvalidExternalTaggedVariant {\n                variant: variant.into(),\n            },\n        }\n    }\n\n    pub(crate) fn invalid_adjacent_tagged_variant(variant: impl Into<String>) -> Self {\n        Self {\n            kind: ErrorKind::InvalidAdjacentTaggedVariant {\n                variant: variant.into(),\n            },\n        }\n    }\n\n    pub(crate) fn invalid_internally_tagged_variant(\n        variant: impl Into<String>,\n        reason: impl Into<Cow<'static, str>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::InvalidInternallyTaggedVariant {\n                variant: variant.into(),\n                reason: reason.into(),\n            },\n        }\n    }\n\n    pub(crate) fn incompatible_rename(\n        context: impl Into<Cow<'static, str>>,\n        name: impl Into<String>,\n        serialize: Option<String>,\n        deserialize: Option<String>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::IncompatibleRename {\n                context: context.into(),\n                name: name.into(),\n                serialize,\n                deserialize,\n            },\n        }\n    }\n\n    pub(crate) fn incompatible_conversion(\n        context: impl Into<Cow<'static, str>>,\n        name: impl Into<String>,\n        serialize: Option<String>,\n        deserialize: Option<String>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::IncompatibleConversion {\n                context: context.into(),\n                name: name.into(),\n                serialize,\n                deserialize,\n            },\n        }\n    }\n\n    pub(crate) fn invalid_conversion_usage(\n        path: impl Into<String>,\n        reason: impl Into<Cow<'static, str>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::InvalidConversionUsage {\n                path: path.into(),\n                reason: reason.into(),\n            },\n        }\n    }\n\n    pub(crate) fn unsupported_serde_custom_codec(\n        path: impl Into<String>,\n        attribute: impl Into<Cow<'static, str>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::UnsupportedSerdeCustomCodec {\n                path: path.into(),\n                attribute: attribute.into(),\n            },\n        }\n    }\n\n    pub(crate) fn invalid_phased_type_usage(\n        path: impl Into<String>,\n        reason: impl Into<Cow<'static, str>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::InvalidPhasedTypeUsage {\n                path: path.into(),\n                reason: reason.into(),\n            },\n        }\n    }\n\n    pub(crate) fn invalid_rename_rule(\n        attribute: impl Into<Cow<'static, str>>,\n        value: impl Into<String>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::InvalidRenameRule {\n                attribute: attribute.into(),\n                value: value.into(),\n            },\n        }\n    }\n}\n\nimpl fmt::Display for Error {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        match &self.kind {\n            ErrorKind::InvalidUsageOfSkip { path, reason } => {\n                write!(f, \"Invalid usage of #[serde(skip)] at '{path}': {reason}\")\n            }\n            ErrorKind::InvalidInternallyTaggedEnum {\n                path,\n                variant,\n                reason,\n            } => write!(\n                f,\n                \"Invalid internally tagged enum at '{path}', variant '{variant}': {reason}\"\n            ),\n            ErrorKind::InvalidEnumRepresentation { reason } => {\n                write!(f, \"Invalid serde enum representation: {reason}\")\n            }\n            ErrorKind::InvalidExternalTaggedVariant { variant } => write!(\n                f,\n                \"Invalid externally tagged enum variant '{variant}': variant payload is fully skipped\"\n            ),\n            ErrorKind::InvalidAdjacentTaggedVariant { variant } => write!(\n                f,\n                \"Invalid adjacently tagged enum variant '{variant}': variant payload is fully skipped\"\n            ),\n            ErrorKind::InvalidInternallyTaggedVariant { variant, reason } => write!(\n                f,\n                \"Invalid internally tagged enum variant '{variant}': {reason}\"\n            ),\n            ErrorKind::IncompatibleRename {\n                context,\n                name,\n                serialize,\n                deserialize,\n            } => write!(\n                f,\n                \"Incompatible {context} for '{name}' in unified mode: serialize={serialize:?}, deserialize={deserialize:?}\"\n            ),\n            ErrorKind::IncompatibleConversion {\n                context,\n                name,\n                serialize,\n                deserialize,\n            } => write!(\n                f,\n                \"Incompatible {context} for '{name}' in unified mode: serialize={serialize:?}, deserialize={deserialize:?}. Use PhasesFormat for asymmetric serde conversions\"\n            ),\n            ErrorKind::InvalidConversionUsage { path, reason } => {\n                write!(\n                    f,\n                    \"Invalid usage of serde conversion attributes at '{path}': {reason}\"\n                )\n            }\n            ErrorKind::UnsupportedSerdeCustomCodec { path, attribute } => write!(\n                f,\n                \"Unsupported serde attribute at '{path}': #[serde({attribute})] changes the wire type. Add #[specta(type = ...)] (or #[specta(type = specta_serde::Phased<Serialize, Deserialize>)])\"\n            ),\n            ErrorKind::InvalidPhasedTypeUsage { path, reason } => {\n                write!(f, \"Invalid phased type usage at '{path}': {reason}\")\n            }\n            ErrorKind::InvalidRenameRule { attribute, value } => {\n                write!(f, \"Invalid serde rename rule for '{attribute}': {value:?}\")\n            }\n        }\n    }\n}\n\nimpl fmt::Debug for Error {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Display::fmt(self, f)\n    }\n}\n\nimpl error::Error for Error {}\n"
  },
  {
    "path": "specta-serde/src/inflection.rs",
    "content": "//! This file has been directed copied from Serde (<https://github.com/serde-rs/serde/blob/master/serde_derive/src/internals/case.rs>).\n//! All code is licensed under the MIT & Apache license by it's original authors.\n//!\n//! We use this to ensure we maintain the exact same result as Serde in regards to renames.\n\nuse self::RenameRule::*;\nuse std::fmt::{self, Debug, Display};\n\n/// The different possible ways to change case of fields in a struct, or variants in an enum.\n#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]\npub enum RenameRule {\n    /// Don't apply a default rename rule.\n    #[allow(dead_code)]\n    None,\n    /// Rename direct children to \"lowercase\" style.\n    LowerCase,\n    /// Rename direct children to \"UPPERCASE\" style.\n    UpperCase,\n    /// Rename direct children to \"PascalCase\" style, as typically used for\n    /// enum variants.\n    PascalCase,\n    /// Rename direct children to \"camelCase\" style.\n    CamelCase,\n    /// Rename direct children to \"snake_case\" style, as commonly used for\n    /// fields.\n    SnakeCase,\n    /// Rename direct children to \"SCREAMING_SNAKE_CASE\" style, as commonly\n    /// used for constants.\n    ScreamingSnakeCase,\n    /// Rename direct children to \"kebab-case\" style.\n    KebabCase,\n    /// Rename direct children to \"SCREAMING-KEBAB-CASE\" style.\n    ScreamingKebabCase,\n}\n\nstatic RENAME_RULES: &[(&str, RenameRule)] = &[\n    (\"lowercase\", LowerCase),\n    (\"UPPERCASE\", UpperCase),\n    (\"PascalCase\", PascalCase),\n    (\"camelCase\", CamelCase),\n    (\"snake_case\", SnakeCase),\n    (\"SCREAMING_SNAKE_CASE\", ScreamingSnakeCase),\n    (\"kebab-case\", KebabCase),\n    (\"SCREAMING-KEBAB-CASE\", ScreamingKebabCase),\n];\n\nimpl RenameRule {\n    /// Parse serde's `rename_all` / `rename_all_fields` rule string.\n    #[allow(clippy::should_implement_trait)]\n    pub fn from_str(rename_all_str: &str) -> Result<Self, ParseError<'_>> {\n        for (name, rule) in RENAME_RULES {\n            if rename_all_str == *name {\n                return Ok(*rule);\n            }\n        }\n        Err(ParseError {\n            unknown: rename_all_str,\n        })\n    }\n\n    /// Apply a renaming rule to an enum variant, returning the version expected in the source.\n    pub fn apply_to_variant(self, variant: &str) -> String {\n        match self {\n            None | PascalCase => variant.to_owned(),\n            LowerCase => variant.to_ascii_lowercase(),\n            UpperCase => variant.to_ascii_uppercase(),\n            CamelCase => variant[..1].to_ascii_lowercase() + &variant[1..],\n            SnakeCase => {\n                let mut snake = String::new();\n                for (i, ch) in variant.char_indices() {\n                    if i > 0 && ch.is_uppercase() {\n                        snake.push('_');\n                    }\n                    snake.push(ch.to_ascii_lowercase());\n                }\n                snake\n            }\n            ScreamingSnakeCase => SnakeCase.apply_to_variant(variant).to_ascii_uppercase(),\n            KebabCase => SnakeCase.apply_to_variant(variant).replace('_', \"-\"),\n            ScreamingKebabCase => ScreamingSnakeCase\n                .apply_to_variant(variant)\n                .replace('_', \"-\"),\n        }\n    }\n\n    /// Apply a renaming rule to a struct field, returning the version expected in the source.\n    pub fn apply_to_field(self, field: &str) -> String {\n        match self {\n            None | LowerCase | SnakeCase => field.to_owned(),\n            UpperCase => field.to_ascii_uppercase(),\n            PascalCase => {\n                let mut pascal = String::new();\n                let mut capitalize = true;\n                for ch in field.chars() {\n                    if ch == '_' {\n                        capitalize = true;\n                    } else if capitalize {\n                        pascal.push(ch.to_ascii_uppercase());\n                        capitalize = false;\n                    } else {\n                        pascal.push(ch);\n                    }\n                }\n                pascal\n            }\n            CamelCase => {\n                let pascal = PascalCase.apply_to_field(field);\n                pascal[..1].to_ascii_lowercase() + &pascal[1..]\n            }\n            ScreamingSnakeCase => field.to_ascii_uppercase(),\n            KebabCase => field.replace('_', \"-\"),\n            ScreamingKebabCase => ScreamingSnakeCase.apply_to_field(field).replace('_', \"-\"),\n        }\n    }\n\n    /// Returns the `RenameRule` if it is not `None`, `rule_b` otherwise.\n    #[allow(dead_code)]\n    pub fn or(self, rule_b: Self) -> Self {\n        match self {\n            None => rule_b,\n            _ => self,\n        }\n    }\n}\n\npub struct ParseError<'a> {\n    unknown: &'a str,\n}\n\nimpl Display for ParseError<'_> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.write_str(\"unknown rename rule `rename_all = \")?;\n        Debug::fmt(self.unknown, f)?;\n        f.write_str(\"`, expected one of \")?;\n        for (i, (name, _rule)) in RENAME_RULES.iter().enumerate() {\n            if i > 0 {\n                f.write_str(\", \")?;\n            }\n            Debug::fmt(name, f)?;\n        }\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "specta-serde/src/lib.rs",
    "content": "//! [Serde](https://serde.rs) support for Specta.\n//!\n//! # Choosing a mode\n//!\n//! - Use [`Format`] when serde behavior is symmetric and a single exported shape\n//!   should work for both serialization and deserialization.\n//! - Use [`PhasesFormat`] when serde behavior differs by direction (for example\n//!   deserialize-widening enums, asymmetric conversion attributes, or explicit\n//!   [`Phased`] overrides).\n//!\n//! # `serde_with` and `#[serde(with = ...)]`\n//!\n//! `serde_with` is supported through the same mechanism as raw serde codec\n//! attributes because it expands to serde metadata (`with`, `serialize_with`,\n//! `deserialize_with`).\n//!\n//! When codecs change the wire type, add an explicit Specta override:\n//!\n//! ```rust,ignore\n//! use serde::{Deserialize, Serialize};\n//! use specta::Type;\n//!\n//! #[derive(Type, Serialize, Deserialize)]\n//! struct Digest {\n//!     #[serde(with = \"hex_bytes\")]\n//!     #[specta(type = String)]\n//!     value: Vec<u8>,\n//! }\n//! ```\n//!\n//! If serialize and deserialize shapes are different, use [`Phased`] and\n//! [`PhasesFormat`].\n//!\n//! This is required because a single unified type graph cannot represent two\n//! different directional wire shapes at once.\n//!\n//! ```rust,ignore\n//! use serde::{Deserialize, Serialize};\n//! use serde_with::{OneOrMany, serde_as};\n//! use specta::{Type, Types};\n//!\n//! #[derive(Type, Serialize, Deserialize)]\n//! #[serde(untagged)]\n//! enum OneOrManyString {\n//!     One(String),\n//!     Many(Vec<String>),\n//! }\n//!\n//! #[serde_as]\n//! #[derive(Type, Serialize, Deserialize)]\n//! struct Filters {\n//!     #[serde_as(as = \"OneOrMany<_>\")]\n//!     #[specta(type = specta_serde::Phased<Vec<String>, OneOrManyString>)]\n//!     tags: Vec<String>,\n//! }\n//!\n//! let types = Types::default().register::<Filters>();\n//! let phased_types = specta_typescript::Typescript::default()\n//!     .export(&types, specta_serde::PhasesFormat)?;\n//! ```\n//!\n//! As an alternative to codec attributes, `#[serde(into = ...)]`,\n//! `#[serde(from = ...)]`, and `#[serde(try_from = ...)]` often produce better\n//! type inference because the wire type is modeled as an explicit Rust type:\n//!\n//! ```rust,ignore\n//! use serde::{Deserialize, Serialize};\n//! use specta::Type;\n//!\n//! #[derive(Type, Serialize, Deserialize)]\n//! struct UserWire {\n//!     id: String,\n//! }\n//!\n//! #[derive(Type, Clone, Serialize, Deserialize)]\n//! #[serde(into = \"UserWire\")]\n//! struct UserInto {\n//!     id: String,\n//! }\n//!\n//! #[derive(Type, Clone, Serialize, Deserialize)]\n//! #[serde(from = \"UserWire\")]\n//! struct UserFrom {\n//!     id: String,\n//! }\n//!\n//! #[derive(Type, Clone, Serialize, Deserialize)]\n//! #[serde(try_from = \"UserWire\")]\n//! struct UserTryFrom {\n//!     id: String,\n//! }\n//! ```\n//!\n//! See `examples/basic-ts/src/main.rs` for a complete exporter example using\n//! [`Format`] and [`PhasesFormat`].\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n\nuse std::{\n    borrow::Cow,\n    collections::{HashMap, HashSet, VecDeque},\n};\n\nuse specta::{\n    FormatError, Types,\n    datatype::{\n        DataType, Enum, Field, Fields, NamedDataType, NamedReference, NamedReferenceType,\n        Primitive, Reference, Struct, Tuple, UnnamedFields, Variant,\n    },\n};\n\nmod error;\nmod inflection;\nmod parser;\nmod phased;\nmod repr;\nmod validate;\n\nuse inflection::RenameRule;\nuse parser::{SerdeContainerAttrs, SerdeFieldAttrs, SerdeVariantAttrs};\nuse phased::PhasedTy;\nuse repr::EnumRepr;\n\npub use error::Error;\npub use phased::{Phased, phased};\n\n/// Selects which directional type shape to use with [`PhasesFormat`].\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum Phase {\n    /// The shape used when Rust serializes data to the wire.\n    Serialize,\n    /// The shape used when Rust deserializes data from the wire.\n    Deserialize,\n}\n\n/// Applies serde-aware rewrites to a single shared type graph.\n///\n/// Use this when the serialized and deserialized wire shape can be represented\n/// by the same exported schema. Exporters should pass this formatter to Specta's\n/// formatting hook, for example\n/// `specta_typescript::Typescript::default().export(&types, specta_serde::Format)`.\n///\n/// This formatter validates the graph for unified export and applies serde\n/// container, variant, and field behavior that affects the exported shape, such\n/// as renames, tagging, defaults, flattening, and compatible conversion attrs.\n///\n/// If serde metadata produces different serialize and deserialize shapes, this\n/// formatter returns an error instead of guessing. In that case, use\n/// [`PhasesFormat`].\npub struct Format;\n\nimpl specta::Format for Format {\n    fn map_types(&'_ self, types: &Types) -> Result<Cow<'_, Types>, FormatError> {\n        validate::validate_for_mode(types, validate::ApplyMode::Unified)?;\n\n        let mut out = types.clone();\n        let generated = HashMap::<TypeIdentity, SplitGeneratedTypes>::new();\n        let split_types = HashSet::<TypeIdentity>::new();\n        let mut rewrite_err = None;\n\n        out.iter_mut(|ndt| {\n            if rewrite_err.is_some() {\n                return;\n            }\n\n            let ndt_name = ndt.name.to_string();\n\n            if let Some(ty) = ndt.ty.as_mut() {\n                if rewrite_err.is_some() {\n                    return;\n                }\n\n                if let Err(err) = rewrite_datatype_for_phase(\n                    ty,\n                    PhaseRewrite::Unified,\n                    types,\n                    &generated,\n                    &split_types,\n                    Some(ndt_name.as_str()),\n                ) {\n                    rewrite_err = Some(err);\n                }\n            }\n\n            if rewrite_err.is_some() {\n                return;\n            }\n\n            if let Err(err) = rewrite_named_type_for_phase(ndt, PhaseRewrite::Unified) {\n                rewrite_err = Some(err);\n            }\n        });\n\n        if let Some(err) = rewrite_err {\n            return Err(Box::new(err));\n        }\n\n        Ok(Cow::Owned(out))\n    }\n\n    fn map_type(&'_ self, types: &Types, dt: &DataType) -> Result<Cow<'_, DataType>, FormatError> {\n        if datatype_is_registered_definition(types, dt) {\n            return Ok(Cow::Owned(dt.clone()));\n        }\n\n        validate::validate_datatype_for_mode(dt, types, validate::ApplyMode::Unified)?;\n\n        let mut dt = dt.clone();\n        rewrite_datatype_for_phase(\n            &mut dt,\n            PhaseRewrite::Unified,\n            types,\n            &HashMap::new(),\n            &HashSet::new(),\n            None,\n        )?;\n\n        Ok(Cow::Owned(dt))\n    }\n}\n\n/// Applies serde-aware rewrites while preserving separate serialize and\n/// deserialize shapes.\n///\n/// Use this when serde metadata makes the wire format directional, such as\n/// asymmetric renames, directional skips, `#[serde(with = ...)]`-style codecs,\n/// `#[serde(into = ...)]`/`#[serde(from = ...)]`, or explicit [`Phased`]\n/// overrides.\n///\n/// Exporters should pass this formatter to Specta's formatting hook, for\n/// example\n/// `specta_typescript::Typescript::default().export(&types, specta_serde::PhasesFormat)`.\n///\n/// The transformed type graph includes `*_Serialize` and `*_Deserialize` named\n/// types for definitions that need to diverge, while unchanged definitions stay\n/// shared. Inline datatype rendering uses the serialize-facing shape; use\n/// [`select_phase_datatype`] to inspect either direction explicitly.\npub struct PhasesFormat;\n\nimpl specta::Format for PhasesFormat {\n    fn map_types(&'_ self, types: &Types) -> Result<Cow<'_, Types>, FormatError> {\n        validate::validate_for_mode(types, validate::ApplyMode::Phases)?;\n\n        let originals = types.into_unsorted_iter().collect::<Vec<_>>();\n        let mut dependencies = HashMap::<TypeIdentity, HashSet<TypeIdentity>>::new();\n        let mut reverse_dependencies = HashMap::<TypeIdentity, HashSet<TypeIdentity>>::new();\n\n        for original in &originals {\n            let key = TypeIdentity::from_ndt(original);\n            let mut deps = HashSet::new();\n            if let Some(ty) = &original.ty {\n                collect_dependencies(ty, types, &mut deps)?;\n            }\n            for dep in &deps {\n                reverse_dependencies\n                    .entry(dep.clone())\n                    .or_default()\n                    .insert(key.clone());\n            }\n            dependencies.insert(key, deps);\n        }\n\n        let mut split_types = HashSet::new();\n        for ndt in &originals {\n            if ndt\n                .ty\n                .as_ref()\n                .is_some_and(|ty| has_local_phase_difference(ty).unwrap_or(false))\n            {\n                split_types.insert(TypeIdentity::from_ndt(ndt));\n            }\n        }\n\n        let mut queue = VecDeque::from_iter(split_types.iter().cloned());\n        while let Some(key) = queue.pop_front() {\n            if let Some(dependents) = reverse_dependencies.get(&key) {\n                for dependent in dependents {\n                    if split_types.insert(dependent.clone()) {\n                        queue.push_back(dependent.clone());\n                    }\n                }\n            }\n        }\n\n        let mut out = types.clone();\n        let mut generated = HashMap::<TypeIdentity, SplitGeneratedTypes>::new();\n        let mut generated_types = HashSet::<TypeIdentity>::new();\n\n        for original in &originals {\n            let key = TypeIdentity::from_ndt(original);\n\n            if split_types.contains(&key) {\n                let serialize_ndt = build_from_original(original, PhaseRewrite::Serialize)?;\n\n                let deserialize_ndt = build_from_original(original, PhaseRewrite::Deserialize)?;\n\n                generated.insert(\n                    key,\n                    SplitGeneratedTypes {\n                        serialize: serialize_ndt,\n                        deserialize: Box::new(deserialize_ndt),\n                    },\n                );\n            }\n        }\n\n        for original in &originals {\n            let key = TypeIdentity::from_ndt(original);\n\n            if !split_types.contains(&key) {\n                continue;\n            }\n\n            let Some(mut generated_types_for_phase) = generated.get(&key).cloned() else {\n                continue;\n            };\n\n            let mut rewrite_err = None;\n            if let Some(ty) = generated_types_for_phase.serialize.ty.as_mut()\n                && let Err(err) = rewrite_datatype_for_phase(\n                    ty,\n                    PhaseRewrite::Serialize,\n                    types,\n                    &generated,\n                    &split_types,\n                    Some(original.name.as_ref()),\n                )\n            {\n                rewrite_err = Some(err);\n            }\n            if let Some(err) = rewrite_err.take() {\n                return Err(Box::new(err));\n            }\n\n            rewrite_named_type_for_phase(\n                &mut generated_types_for_phase.serialize,\n                PhaseRewrite::Serialize,\n            )?;\n\n            if let Some(ty) = generated_types_for_phase.deserialize.ty.as_mut()\n                && let Err(err) = rewrite_datatype_for_phase(\n                    ty,\n                    PhaseRewrite::Deserialize,\n                    types,\n                    &generated,\n                    &split_types,\n                    Some(original.name.as_ref()),\n                )\n            {\n                rewrite_err = Some(err);\n            }\n            if let Some(err) = rewrite_err {\n                return Err(Box::new(err));\n            }\n\n            rewrite_named_type_for_phase(\n                &mut generated_types_for_phase.deserialize,\n                PhaseRewrite::Deserialize,\n            )?;\n\n            generated.insert(key, generated_types_for_phase);\n        }\n\n        for generated_types_for_phase in generated.values_mut() {\n            let serialize =\n                register_generated_type(&mut out, generated_types_for_phase.serialize.clone());\n            let deserialize = Box::new(register_generated_type(\n                &mut out,\n                (*generated_types_for_phase.deserialize).clone(),\n            ));\n\n            generated_types.insert(TypeIdentity::from_ndt(&serialize));\n            generated_types.insert(TypeIdentity::from_ndt(&deserialize));\n\n            generated_types_for_phase.serialize = serialize;\n            generated_types_for_phase.deserialize = deserialize;\n        }\n\n        let registered_generated = generated.clone();\n        for generated_types_for_phase in generated.values_mut() {\n            if let Some(ty) = generated_types_for_phase.serialize.ty.as_mut() {\n                rewrite_datatype_for_phase(\n                    ty,\n                    PhaseRewrite::Serialize,\n                    types,\n                    &registered_generated,\n                    &split_types,\n                    Some(generated_types_for_phase.serialize.name.as_ref()),\n                )?;\n            }\n\n            if let Some(ty) = generated_types_for_phase.deserialize.ty.as_mut() {\n                rewrite_datatype_for_phase(\n                    ty,\n                    PhaseRewrite::Deserialize,\n                    types,\n                    &registered_generated,\n                    &split_types,\n                    Some(generated_types_for_phase.deserialize.name.as_ref()),\n                )?;\n            }\n        }\n\n        out.iter_mut(|ndt| {\n            for generated_types_for_phase in generated.values() {\n                if ndt.name == generated_types_for_phase.serialize.name {\n                    ndt.ty = generated_types_for_phase.serialize.ty.clone();\n                    return;\n                }\n\n                if ndt.name == generated_types_for_phase.deserialize.name {\n                    ndt.ty = generated_types_for_phase.deserialize.ty.clone();\n                    return;\n                }\n            }\n        });\n\n        let mut rewrite_err = None;\n        out.iter_mut(|ndt| {\n            if rewrite_err.is_some() {\n                return;\n            }\n\n            let ndt_name = ndt.name.to_string();\n            let key = TypeIdentity::from_ndt(ndt);\n\n            if split_types.contains(&key) || generated_types.contains(&key) {\n                return;\n            }\n\n            if let Some(ty) = ndt.ty.as_mut()\n                && let Err(err) = rewrite_datatype_for_phase(\n                    ty,\n                    PhaseRewrite::Unified,\n                    types,\n                    &generated,\n                    &split_types,\n                    Some(ndt_name.as_str()),\n                )\n            {\n                rewrite_err = Some(err);\n                return;\n            }\n\n            if let Err(err) = rewrite_named_type_for_phase(ndt, PhaseRewrite::Unified) {\n                rewrite_err = Some(err);\n            }\n        });\n\n        if let Some(err) = rewrite_err {\n            return Err(Box::new(err));\n        }\n\n        out.iter_mut(|ndt| {\n            let key = TypeIdentity::from_ndt(ndt);\n            if !split_types.contains(&key) {\n                return;\n            }\n\n            let Some(SplitGeneratedTypes {\n                serialize,\n                deserialize,\n            }) = generated.get(&key)\n            else {\n                return;\n            };\n\n            let generic_args = ndt\n                .generics\n                .iter()\n                .map(|generic| {\n                    let generic = specta::datatype::Generic::new(generic.name.clone());\n                    (generic.clone(), generic.into())\n                })\n                .collect::<Vec<_>>();\n\n            let mut serialize_variant = Variant::unnamed().build();\n            if let Fields::Unnamed(fields) = &mut serialize_variant.fields {\n                fields\n                    .fields\n                    .push(Field::new(serialize.reference(generic_args.clone()).into()));\n            }\n\n            let mut deserialize_variant = Variant::unnamed().build();\n            if let Fields::Unnamed(fields) = &mut deserialize_variant.fields {\n                fields\n                    .fields\n                    .push(Field::new(deserialize.reference(generic_args).into()));\n            }\n\n            let mut wrapper = Enum::default();\n            wrapper\n                .variants\n                .push((Cow::Borrowed(\"Serialize\"), serialize_variant));\n            wrapper\n                .variants\n                .push((Cow::Borrowed(\"Deserialize\"), deserialize_variant));\n\n            ndt.ty = Some(DataType::Enum(wrapper));\n        });\n        Ok(Cow::Owned(out))\n    }\n\n    fn map_type(&'_ self, types: &Types, dt: &DataType) -> Result<Cow<'_, DataType>, FormatError> {\n        if datatype_is_registered_definition(types, dt) {\n            return Ok(Cow::Owned(dt.clone()));\n        }\n\n        let mut selected = select_phase_datatype(dt, types, Phase::Serialize);\n\n        validate::validate_datatype_for_mode_shallow(\n            &selected,\n            types,\n            validate::ApplyMode::Phases,\n        )?;\n\n        rewrite_datatype_for_phase(\n            &mut selected,\n            PhaseRewrite::Serialize,\n            types,\n            &HashMap::new(),\n            &HashSet::new(),\n            None,\n        )?;\n\n        Ok(Cow::Owned(selected))\n    }\n}\n\nfn datatype_is_registered_definition(types: &Types, dt: &DataType) -> bool {\n    types\n        .into_unsorted_iter()\n        .any(|ndt| ndt.ty.as_ref() == Some(dt))\n}\n\n/// Rewrites a [`DataType`] to the requested directional shape for [`PhasesFormat`].\n///\n/// This is useful for exporter integrations that need deserialize-specific input\n/// types and serialize-specific output types while still exporting against the\n/// resolved type graph produced by the `map_types` callback from\n/// [`PhasesFormat`].\n///\n/// # Examples\n///\n/// ```rust\n/// use serde::{Deserialize, Serialize};\n/// use specta::{Format as _, Type, Types, datatype::{DataType, Reference}};\n/// use specta_serde::{Phase, Phased, PhasesFormat, select_phase_datatype};\n///\n/// #[derive(Type, Serialize, Deserialize)]\n/// #[serde(untagged)]\n/// enum OneOrManyString {\n///     One(String),\n///     Many(Vec<String>),\n/// }\n///\n/// #[derive(Type, Serialize, Deserialize)]\n/// struct Filters {\n///     #[specta(type = Phased<Vec<String>, OneOrManyString>)]\n///     tags: Vec<String>,\n/// }\n///\n/// let mut types = Types::default();\n/// let dt = Filters::definition(&mut types);\n/// let format = PhasesFormat;\n/// let resolved = format.map_types(&types)\n///     .expect(\"PhasesFormat should succeed\")\n///     .into_owned();\n///\n/// let serialize = select_phase_datatype(&dt, &resolved, Phase::Serialize);\n/// let deserialize = select_phase_datatype(&dt, &resolved, Phase::Deserialize);\n///\n/// let DataType::Reference(Reference::Named(serialize_reference)) = &serialize else {\n///     panic!(\"expected named serialize reference\");\n/// };\n/// let DataType::Reference(Reference::Named(deserialize_reference)) = &deserialize else {\n///     panic!(\"expected named deserialize reference\");\n/// };\n///\n/// assert_eq!(\n///     resolved.get(serialize_reference).unwrap().name,\n///     \"Filters_Serialize\"\n/// );\n/// assert_eq!(\n///     resolved.get(deserialize_reference).unwrap().name,\n///     \"Filters_Deserialize\"\n/// );\n/// # Ok::<(), specta_serde::Error>(())\n/// ```\npub fn select_phase_datatype(dt: &DataType, types: &Types, phase: Phase) -> DataType {\n    let mut dt = dt.clone();\n    select_phase_datatype_inner(&mut dt, types, phase);\n    dt\n}\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\nenum PhaseRewrite {\n    Unified,\n    Serialize,\n    Deserialize,\n}\n\nfn select_phase_datatype_inner(ty: &mut DataType, types: &Types, phase: Phase) {\n    if let Some(resolved) = select_split_wrapper_variant(ty, phase) {\n        *ty = resolved;\n        select_phase_datatype_inner(ty, types, phase);\n        return;\n    }\n\n    if let Some(resolved) = select_explicit_phased_type(ty, phase) {\n        *ty = resolved;\n        select_phase_datatype_inner(ty, types, phase);\n        return;\n    }\n\n    match ty {\n        DataType::Struct(s) => select_phase_fields(&mut s.fields, types, phase),\n        DataType::Enum(e) => {\n            for (_, variant) in &mut e.variants {\n                select_phase_fields(&mut variant.fields, types, phase);\n            }\n        }\n        DataType::Tuple(tuple) => {\n            for ty in &mut tuple.elements {\n                select_phase_datatype_inner(ty, types, phase);\n            }\n        }\n        DataType::List(list) => select_phase_datatype_inner(&mut list.ty, types, phase),\n        DataType::Map(map) => {\n            select_phase_datatype_inner(map.key_ty_mut(), types, phase);\n            select_phase_datatype_inner(map.value_ty_mut(), types, phase);\n        }\n        DataType::Intersection(types_) => {\n            for ty in types_ {\n                select_phase_datatype_inner(ty, types, phase);\n            }\n        }\n        DataType::Nullable(inner) => select_phase_datatype_inner(inner, types, phase),\n        DataType::Reference(Reference::Named(reference)) => {\n            if let NamedReferenceType::Inline { dt, .. } = &mut reference.inner {\n                select_phase_datatype_inner(dt, types, phase);\n                return;\n            }\n\n            let Some(referenced_ndt) = types.get(reference) else {\n                return;\n            };\n            for (_, dt) in named_reference_generics_mut(reference) {\n                select_phase_datatype_inner(dt, types, phase);\n            }\n\n            if let Some(mut selected) = referenced_ndt\n                .ty\n                .as_ref()\n                .and_then(|ty| select_split_wrapper_variant(ty, phase))\n            {\n                select_phase_datatype_inner(&mut selected, types, phase);\n                *ty = selected;\n                return;\n            }\n\n            let target_ndt =\n                select_split_type_variant(referenced_ndt, types, phase).unwrap_or(referenced_ndt);\n            let Reference::Named(new_reference) =\n                target_ndt.reference(named_reference_generics(reference).to_vec())\n            else {\n                unreachable!(\"named types always produce named references\")\n            };\n            *reference = new_reference;\n        }\n        DataType::Reference(Reference::Opaque(_))\n        | DataType::Generic(_)\n        | DataType::Primitive(_) => {}\n    }\n}\n\nfn select_phase_fields(fields: &mut Fields, types: &Types, phase: Phase) {\n    match fields {\n        Fields::Unit => {}\n        Fields::Unnamed(fields) => {\n            for field in &mut fields.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    select_phase_datatype_inner(ty, types, phase);\n                }\n            }\n        }\n        Fields::Named(fields) => {\n            for (_, field) in &mut fields.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    select_phase_datatype_inner(ty, types, phase);\n                }\n            }\n        }\n    }\n}\n\nfn select_explicit_phased_type(ty: &DataType, phase: Phase) -> Option<DataType> {\n    let DataType::Reference(Reference::Opaque(reference)) = ty else {\n        return None;\n    };\n    let phased = reference.downcast_ref::<PhasedTy>()?;\n\n    Some(match phase {\n        Phase::Serialize => phased.serialize.clone(),\n        Phase::Deserialize => phased.deserialize.clone(),\n    })\n}\n\nfn select_split_wrapper_variant(ty: &DataType, phase: Phase) -> Option<DataType> {\n    let DataType::Enum(wrapper) = ty else {\n        return None;\n    };\n\n    if wrapper.variants.len() != 2 {\n        return None;\n    }\n\n    let variant_name = match phase {\n        Phase::Serialize => \"Serialize\",\n        Phase::Deserialize => \"Deserialize\",\n    };\n\n    let (_, variant) = wrapper\n        .variants\n        .iter()\n        .find(|(name, _)| name == variant_name)?;\n    let Fields::Unnamed(fields) = &variant.fields else {\n        return None;\n    };\n\n    let [field] = &fields.fields[..] else {\n        return None;\n    };\n\n    field.ty.clone()\n}\n\nfn select_split_type_variant<'a>(\n    ndt: &'a NamedDataType,\n    types: &'a Types,\n    phase: Phase,\n) -> Option<&'a NamedDataType> {\n    let Some(DataType::Enum(wrapper)) = &ndt.ty else {\n        return None;\n    };\n\n    if wrapper.variants.len() != 2 {\n        return None;\n    }\n\n    let variant_name = match phase {\n        Phase::Serialize => \"Serialize\",\n        Phase::Deserialize => \"Deserialize\",\n    };\n\n    let (_, variant) = wrapper\n        .variants\n        .iter()\n        .find(|(name, _)| name == variant_name)?;\n    let Fields::Unnamed(fields) = &variant.fields else {\n        return None;\n    };\n    let [field] = &fields.fields[..] else {\n        return None;\n    };\n    let Some(DataType::Reference(Reference::Named(reference))) = field.ty.as_ref() else {\n        return None;\n    };\n\n    types.get(reference)\n}\n\nfn named_reference_generics(\n    reference: &NamedReference,\n) -> &[(specta::datatype::Generic, DataType)] {\n    match &reference.inner {\n        NamedReferenceType::Reference { generics, .. } => generics,\n        NamedReferenceType::Inline { .. } | NamedReferenceType::Recursive => &[],\n    }\n}\n\nfn named_reference_generics_mut(\n    reference: &mut NamedReference,\n) -> &mut [(specta::datatype::Generic, DataType)] {\n    match &mut reference.inner {\n        NamedReferenceType::Reference { generics, .. } => generics,\n        NamedReferenceType::Inline { .. } | NamedReferenceType::Recursive => &mut [],\n    }\n}\n\n#[derive(Debug, Clone)]\nstruct SplitGeneratedTypes {\n    serialize: NamedDataType,\n    deserialize: Box<NamedDataType>,\n}\n\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\nstruct TypeIdentity {\n    name: String,\n    module_path: String,\n    file: &'static str,\n    line: u32,\n    column: u32,\n}\n\nimpl TypeIdentity {\n    fn from_ndt(ty: &specta::datatype::NamedDataType) -> Self {\n        let location = ty.location;\n        Self {\n            name: ty.name.to_string(),\n            module_path: ty.module_path.to_string(),\n            file: location.file(),\n            line: location.line(),\n            column: location.column(),\n        }\n    }\n}\n\nfn rewrite_datatype_for_phase(\n    ty: &mut DataType,\n    mode: PhaseRewrite,\n    original_types: &Types,\n    generated: &HashMap<TypeIdentity, SplitGeneratedTypes>,\n    split_types: &HashSet<TypeIdentity>,\n    container_name: Option<&str>,\n) -> Result<(), Error> {\n    if let Some(resolved) = resolve_phased_type(ty, mode, \"type\")? {\n        *ty = resolved;\n    }\n\n    if let Some(converted) = conversion_datatype_for_mode(ty, mode)?\n        && converted != *ty\n    {\n        *ty = converted;\n        return rewrite_datatype_for_phase(\n            ty,\n            mode,\n            original_types,\n            generated,\n            split_types,\n            container_name,\n        );\n    }\n\n    match ty {\n        DataType::Struct(s) => {\n            let container_default = SerdeContainerAttrs::from_attributes(&s.attributes)?\n                .is_some_and(|attrs| attrs.default);\n            let container_rename_all = container_rename_all_rule(\n                &s.attributes,\n                mode,\n                \"struct rename_all\",\n                container_name.unwrap_or(\"<anonymous struct>\"),\n            )?;\n\n            rewrite_fields_for_phase(\n                &mut s.fields,\n                mode,\n                original_types,\n                generated,\n                split_types,\n                container_rename_all,\n                container_default,\n                false,\n            )?;\n            rewrite_struct_repr_for_phase(s, mode, container_name)?;\n            if let Some(intersection) = lower_flattened_struct(s)? {\n                *ty = intersection;\n            }\n        }\n        DataType::Enum(e) => {\n            filter_enum_variants_for_phase(e, mode)?;\n            let container_attrs = SerdeContainerAttrs::from_attributes(&e.attributes)?;\n\n            for (variant_name, variant) in &mut e.variants {\n                let rename_rule =\n                    enum_variant_field_rename_rule(&container_attrs, variant, mode, variant_name)?;\n\n                rewrite_fields_for_phase(\n                    &mut variant.fields,\n                    mode,\n                    original_types,\n                    generated,\n                    split_types,\n                    rename_rule,\n                    false,\n                    true,\n                )?;\n            }\n\n            if rewrite_identifier_enum_for_phase(e, mode, original_types, generated, split_types)? {\n                return Ok(());\n            }\n\n            rewrite_enum_repr_for_phase(e, mode, original_types)?;\n        }\n        DataType::Tuple(tuple) => {\n            for ty in &mut tuple.elements {\n                rewrite_datatype_for_phase(ty, mode, original_types, generated, split_types, None)?;\n            }\n        }\n        DataType::List(list) => rewrite_datatype_for_phase(\n            &mut list.ty,\n            mode,\n            original_types,\n            generated,\n            split_types,\n            None,\n        )?,\n        DataType::Map(map) => {\n            rewrite_datatype_for_phase(\n                map.key_ty_mut(),\n                mode,\n                original_types,\n                generated,\n                split_types,\n                None,\n            )?;\n            rewrite_datatype_for_phase(\n                map.value_ty_mut(),\n                mode,\n                original_types,\n                generated,\n                split_types,\n                None,\n            )?;\n        }\n        DataType::Intersection(types_) => {\n            for ty in types_ {\n                rewrite_datatype_for_phase(ty, mode, original_types, generated, split_types, None)?;\n            }\n        }\n        DataType::Nullable(inner) => {\n            rewrite_datatype_for_phase(inner, mode, original_types, generated, split_types, None)?\n        }\n        DataType::Reference(Reference::Named(reference)) => {\n            if let NamedReferenceType::Inline { dt, .. } = &mut reference.inner {\n                rewrite_datatype_for_phase(dt, mode, original_types, generated, split_types, None)?;\n            }\n\n            let Some(referenced_ndt) = original_types.get(reference) else {\n                return Ok(());\n            };\n            let key = TypeIdentity::from_ndt(referenced_ndt);\n            for (_, dt) in named_reference_generics_mut(reference) {\n                rewrite_datatype_for_phase(dt, mode, original_types, generated, split_types, None)?;\n            }\n\n            if !split_types.contains(&key) {\n                return Ok(());\n            }\n\n            let Some(target) = generated.get(&key) else {\n                return Ok(());\n            };\n\n            let Reference::Named(reference_from_target) = (match mode {\n                PhaseRewrite::Unified => {\n                    unreachable!(\"unified mode should not reference split types\")\n                }\n                PhaseRewrite::Serialize => target\n                    .serialize\n                    .reference(named_reference_generics(reference).to_vec()),\n                PhaseRewrite::Deserialize => target\n                    .deserialize\n                    .reference(named_reference_generics(reference).to_vec()),\n            }) else {\n                unreachable!(\"named types always produce named references\")\n            };\n            *reference = reference_from_target;\n        }\n        DataType::Reference(Reference::Opaque(_))\n        | DataType::Generic(_)\n        | DataType::Primitive(_) => {}\n    }\n\n    Ok(())\n}\n\nfn lower_flattened_struct(strct: &mut Struct) -> Result<Option<DataType>, Error> {\n    let Fields::Named(named) = &mut strct.fields else {\n        return Ok(None);\n    };\n\n    let has_flattened = named\n        .fields\n        .iter()\n        .any(|(_, field)| field_is_flattened(field));\n    if !has_flattened {\n        return Ok(None);\n    }\n\n    let fields = std::mem::take(&mut named.fields);\n    let mut base = Struct::named();\n    let mut parts = Vec::new();\n\n    for (name, field) in fields {\n        if field_is_flattened(&field) {\n            if let Some(ty) = field.ty {\n                parts.push(ty);\n            }\n        } else {\n            base.field_mut(name, field);\n        }\n    }\n\n    let mut base = match base.build() {\n        DataType::Struct(base) => base,\n        _ => unreachable!(\"Struct::named always builds a struct\"),\n    };\n    if matches!(&base.fields, Fields::Named(named) if !named.fields.is_empty()) {\n        base.attributes = strct.attributes.clone();\n        parts.insert(0, DataType::Struct(base));\n    }\n\n    Ok(Some(DataType::Intersection(parts)))\n}\n\nfn field_is_flattened(field: &Field) -> bool {\n    SerdeFieldAttrs::from_attributes(&field.attributes)\n        .ok()\n        .flatten()\n        .is_some_and(|attrs| attrs.flatten)\n}\n\nfn rewrite_fields_for_phase(\n    fields: &mut Fields,\n    mode: PhaseRewrite,\n    original_types: &Types,\n    generated: &HashMap<TypeIdentity, SplitGeneratedTypes>,\n    split_types: &HashSet<TypeIdentity>,\n    rename_all_rule: Option<RenameRule>,\n    container_default: bool,\n    preserve_skipped_unnamed_fields: bool,\n) -> Result<(), Error> {\n    match fields {\n        Fields::Unit => {}\n        Fields::Unnamed(unnamed) => {\n            for field in &mut unnamed.fields {\n                if should_skip_field_for_mode(field, mode)? {\n                    if preserve_skipped_unnamed_fields {\n                        *field = skipped_field_marker(field);\n                    }\n\n                    continue;\n                }\n\n                apply_field_attrs(field, mode, container_default)?;\n                rewrite_field_for_phase(field, mode, original_types, generated, split_types)?;\n            }\n\n            if !preserve_skipped_unnamed_fields {\n                unnamed.fields.retain(|field| field.ty.as_ref().is_some());\n            }\n        }\n        Fields::Named(named) => {\n            let mut skip_err = None;\n            named\n                .fields\n                .retain(|(_, field)| match should_skip_field_for_mode(field, mode) {\n                    Ok(skip) => !skip,\n                    Err(err) => {\n                        skip_err = Some(err);\n                        true\n                    }\n                });\n            if let Some(err) = skip_err {\n                return Err(err);\n            }\n\n            for (name, field) in &mut named.fields {\n                apply_field_attrs(field, mode, container_default)?;\n\n                if let Some(serde_attrs) = SerdeFieldAttrs::from_attributes(&field.attributes)? {\n                    let rename = select_phase_string(\n                        mode,\n                        serde_attrs.rename_serialize.as_deref(),\n                        serde_attrs.rename_deserialize.as_deref(),\n                        \"field rename\",\n                        name.as_ref(),\n                    )?;\n\n                    if let Some(rename) = rename {\n                        *name = Cow::Owned(rename.to_string());\n                    } else if let Some(rule) = rename_all_rule {\n                        *name = Cow::Owned(rule.apply_to_field(name.as_ref()));\n                    }\n                } else if let Some(rule) = rename_all_rule {\n                    *name = Cow::Owned(rule.apply_to_field(name.as_ref()));\n                }\n\n                rewrite_field_for_phase(field, mode, original_types, generated, split_types)?;\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn rewrite_field_for_phase(\n    field: &mut Field,\n    mode: PhaseRewrite,\n    original_types: &Types,\n    generated: &HashMap<TypeIdentity, SplitGeneratedTypes>,\n    split_types: &HashSet<TypeIdentity>,\n) -> Result<(), Error> {\n    if let Some(attrs) = SerdeFieldAttrs::from_attributes(&field.attributes)?\n        && attrs.skip_serializing_if.is_some()\n    {\n        if let PhaseRewrite::Serialize = mode {\n            field.optional = true;\n        }\n        // The attribute is meaningless on phase-split fields: the _Serialize\n        // variant already has `optional = true`, and the _Deserialize variant\n        // treats the field as present-or-default. Leaving it attached makes\n        // `validate_datatype_for_mode(_, _, ApplyMode::Unified)` reject the\n        // already-split variant — a footgun for downstream callers (e.g.\n        // tauri-specta's `validate_exported_command`) that run unified\n        // validation on the post-`apply_phases` graph.\n        field.attributes.remove(parser::FIELD_SKIP_SERIALIZING_IF);\n    }\n\n    if let Some(ty) = field.ty.clone()\n        && let Some(resolved) = resolve_phased_type(&ty, mode, \"field\")?\n    {\n        field.ty = Some(resolved);\n    }\n\n    if let Some(ty) = field.ty.as_mut() {\n        rewrite_datatype_for_phase(ty, mode, original_types, generated, split_types, None)?;\n    }\n\n    Ok(())\n}\n\nfn rewrite_struct_repr_for_phase(\n    strct: &mut Struct,\n    mode: PhaseRewrite,\n    container_name: Option<&str>,\n) -> Result<(), Error> {\n    let Some((tag, rename_serialize, rename_deserialize)) =\n        SerdeContainerAttrs::from_attributes(&strct.attributes)?.map(|attrs| {\n            (\n                attrs.tag.clone(),\n                attrs.rename_serialize.clone(),\n                attrs.rename_deserialize.clone(),\n            )\n        })\n    else {\n        return Ok(());\n    };\n\n    let Some(tag) = tag.as_deref() else {\n        return Ok(());\n    };\n\n    let Fields::Named(named) = &mut strct.fields else {\n        return Ok(());\n    };\n\n    if named.fields.iter().any(|(name, field)| {\n        name.as_ref() == tag\n            && field\n                .ty\n                .as_ref()\n                .is_some_and(is_generated_string_literal_datatype)\n    }) {\n        return Ok(());\n    }\n\n    let serialized_name = match select_phase_string(\n        mode,\n        rename_serialize.as_deref(),\n        rename_deserialize.as_deref(),\n        \"struct rename\",\n        container_name.unwrap_or(\"<anonymous struct>\"),\n    )? {\n        Some(rename) => rename.to_string(),\n        None => container_name\n            .map(str::to_owned)\n            .ok_or_else(|| {\n                Error::invalid_phased_type_usage(\n                    \"<anonymous struct>\",\n                    \"`#[serde(tag = ...)]` on structs requires either a named type or `#[serde(rename = ...)]`\",\n                )\n            })?,\n    };\n\n    named.fields.insert(\n        0,\n        (\n            Cow::Owned(tag.to_string()),\n            Field::new(string_literal_datatype(serialized_name)),\n        ),\n    );\n\n    Ok(())\n}\n\nfn should_skip_field_for_mode(field: &Field, mode: PhaseRewrite) -> Result<bool, Error> {\n    let Some(attrs) = SerdeFieldAttrs::from_attributes(&field.attributes)? else {\n        return Ok(false);\n    };\n\n    Ok(match mode {\n        PhaseRewrite::Serialize => attrs.skip_serializing,\n        PhaseRewrite::Deserialize => attrs.skip_deserializing,\n        PhaseRewrite::Unified => attrs.skip_serializing || attrs.skip_deserializing,\n    })\n}\n\nfn skipped_field_marker(field: &Field) -> Field {\n    let mut skipped = Field::default();\n    skipped.optional = field.optional;\n    skipped.deprecated = field.deprecated.clone();\n    skipped.docs = field.docs.clone();\n    skipped.attributes = field.attributes.clone();\n    skipped\n}\n\nfn unnamed_live_fields(unnamed: &UnnamedFields) -> impl Iterator<Item = &Field> {\n    unnamed.fields.iter().filter(|field| field.ty.is_some())\n}\n\nfn unnamed_live_field_count(unnamed: &UnnamedFields) -> usize {\n    unnamed_live_fields(unnamed).count()\n}\n\nfn unnamed_has_effective_payload(unnamed: &UnnamedFields) -> bool {\n    unnamed_live_field_count(unnamed) != 0\n}\n\nfn unnamed_fields_all_skipped(unnamed: &UnnamedFields) -> bool {\n    !unnamed.fields.is_empty() && !unnamed_has_effective_payload(unnamed)\n}\n\nfn rewrite_enum_repr_for_phase(\n    e: &mut Enum,\n    mode: PhaseRewrite,\n    original_types: &Types,\n) -> Result<(), Error> {\n    if enum_repr_already_rewritten(e) {\n        return Ok(());\n    }\n\n    let repr = EnumRepr::from_attrs(&e.attributes)?;\n    if matches!(repr, EnumRepr::Untagged) {\n        return Ok(());\n    }\n\n    let container_attrs = SerdeContainerAttrs::from_attributes(&e.attributes)?;\n    let variants = std::mem::take(&mut e.variants);\n    let mut transformed = Vec::with_capacity(variants.len());\n    for (variant_name, variant) in variants {\n        if variant.skip {\n            continue;\n        }\n\n        let variant_attrs = SerdeVariantAttrs::from_attributes(&variant.attributes)?;\n        if variant_attrs\n            .as_ref()\n            .is_some_and(|attrs| variant_is_skipped_for_mode(attrs, mode))\n        {\n            continue;\n        }\n\n        if variant_attrs.as_ref().is_some_and(|attrs| attrs.untagged) {\n            transformed.push((\n                Cow::Owned(variant_name.into_owned()),\n                transform_untagged_variant(&variant)?,\n            ));\n            continue;\n        }\n\n        let serialized_name =\n            serialized_variant_name(&variant_name, &variant, &container_attrs, mode)?;\n        let widen_tag =\n            mode == PhaseRewrite::Deserialize && variant_attrs.is_some_and(|attrs| attrs.other);\n        let mut transformed_variant = match &repr {\n            EnumRepr::External => transform_external_variant(serialized_name.clone(), &variant)?,\n            EnumRepr::Internal { tag } => transform_internal_variant(\n                serialized_name.clone(),\n                tag.as_ref(),\n                &variant,\n                original_types,\n                widen_tag,\n            )?,\n            EnumRepr::Adjacent { tag, content } => {\n                if tag == content {\n                    return Err(Error::invalid_enum_representation(\n                        \"serde adjacent tagging requires distinct `tag` and `content` field names\",\n                    ));\n                }\n\n                transform_adjacent_variant(\n                    serialized_name.clone(),\n                    tag.as_ref(),\n                    content.as_ref(),\n                    &variant,\n                    widen_tag,\n                )?\n            }\n            EnumRepr::Untagged => unreachable!(),\n        };\n\n        transformed_variant.attributes = Default::default();\n        transformed.push((Cow::Owned(serialized_name), transformed_variant));\n    }\n\n    e.variants = transformed;\n    e.attributes = Default::default();\n\n    Ok(())\n}\n\nfn enum_repr_already_rewritten(e: &Enum) -> bool {\n    e.attributes.is_empty()\n        && !e.variants.is_empty()\n        && e.variants.iter().all(|(name, variant)| {\n            variant.attributes.is_empty() && variant_repr_already_rewritten(name, variant)\n        })\n}\n\nfn variant_repr_already_rewritten(name: &str, variant: &Variant) -> bool {\n    match &variant.fields {\n        Fields::Unit => false,\n        Fields::Unnamed(fields) if name.is_empty() => unnamed_live_field_count(fields) == 1,\n        Fields::Unnamed(fields) if fields.fields.len() == 1 => fields\n            .fields\n            .first()\n            .and_then(|field| field.ty.as_ref())\n            .is_some_and(is_generated_string_literal_datatype),\n        Fields::Named(fields) => fields.fields.iter().any(|(field_name, field)| {\n            field_name == name\n                || field\n                    .ty\n                    .as_ref()\n                    .is_some_and(is_generated_string_literal_datatype)\n        }),\n        _ => false,\n    }\n}\n\nfn rewrite_identifier_enum_for_phase(\n    e: &mut Enum,\n    mode: PhaseRewrite,\n    original_types: &Types,\n    generated: &HashMap<TypeIdentity, SplitGeneratedTypes>,\n    split_types: &HashSet<TypeIdentity>,\n) -> Result<bool, Error> {\n    let Some(attrs) = SerdeContainerAttrs::from_attributes(&e.attributes)? else {\n        return Ok(false);\n    };\n\n    if !attrs.variant_identifier && !attrs.field_identifier {\n        return Ok(false);\n    }\n\n    if mode != PhaseRewrite::Deserialize {\n        return Ok(false);\n    }\n\n    let container_attrs = SerdeContainerAttrs::from_attributes(&e.attributes)?;\n    let mut variants = Vec::new();\n    let mut seen = HashSet::new();\n\n    for (variant_name, variant) in e.variants.iter() {\n        let serialized_name = serialized_variant_name(\n            variant_name,\n            variant,\n            &container_attrs,\n            PhaseRewrite::Deserialize,\n        )?;\n\n        if seen.insert(serialized_name.clone()) {\n            variants.push((\n                Cow::Owned(serialized_name.clone()),\n                identifier_union_variant(string_literal_datatype(serialized_name)),\n            ));\n        }\n\n        if let Some(variant_attrs) = SerdeVariantAttrs::from_attributes(&variant.attributes)? {\n            for alias in &variant_attrs.aliases {\n                if seen.insert(alias.clone()) {\n                    variants.push((\n                        Cow::Owned(alias.clone()),\n                        identifier_union_variant(string_literal_datatype(alias.clone())),\n                    ));\n                }\n            }\n        }\n    }\n\n    variants.push((\n        Cow::Borrowed(\"\"),\n        identifier_union_variant(DataType::Primitive(specta::datatype::Primitive::u32)),\n    ));\n\n    if attrs.field_identifier\n        && let Some((_, fallback)) = &e.variants.last()\n        && let Fields::Unnamed(unnamed) = &fallback.fields\n        && let Some(field) = unnamed.fields.first()\n        && let Some(ty) = field.ty.as_ref()\n    {\n        let mut fallback_ty = ty.clone();\n        rewrite_datatype_for_phase(\n            &mut fallback_ty,\n            mode,\n            original_types,\n            generated,\n            split_types,\n            None,\n        )?;\n        variants.push((Cow::Borrowed(\"\"), identifier_union_variant(fallback_ty)));\n    }\n\n    e.attributes = Default::default();\n    e.variants = variants;\n    Ok(true)\n}\n\nfn container_rename_all_rule(\n    attrs: &specta::datatype::Attributes,\n    mode: PhaseRewrite,\n    context: &str,\n    container_name: &str,\n) -> Result<Option<RenameRule>, Error> {\n    let attrs = SerdeContainerAttrs::from_attributes(attrs)?;\n\n    select_phase_rule(\n        mode,\n        attrs.as_ref().and_then(|attrs| attrs.rename_all_serialize),\n        attrs\n            .as_ref()\n            .and_then(|attrs| attrs.rename_all_deserialize),\n        context,\n        container_name,\n    )\n}\n\nfn enum_variant_field_rename_rule(\n    container_attrs: &Option<SerdeContainerAttrs>,\n    variant: &Variant,\n    mode: PhaseRewrite,\n    variant_name: &str,\n) -> Result<Option<RenameRule>, Error> {\n    let variant_attrs = SerdeVariantAttrs::from_attributes(&variant.attributes)?;\n\n    let variant_rule = select_phase_rule(\n        mode,\n        variant_attrs\n            .as_ref()\n            .and_then(|attrs| attrs.rename_all_serialize),\n        variant_attrs\n            .as_ref()\n            .and_then(|attrs| attrs.rename_all_deserialize),\n        \"enum variant rename_all\",\n        variant_name,\n    )?;\n\n    if variant_rule.is_some() {\n        return Ok(variant_rule);\n    }\n\n    select_phase_rule(\n        mode,\n        container_attrs\n            .as_ref()\n            .and_then(|attrs| attrs.rename_all_fields_serialize),\n        container_attrs\n            .as_ref()\n            .and_then(|attrs| attrs.rename_all_fields_deserialize),\n        \"enum rename_all_fields\",\n        variant_name,\n    )\n}\n\nfn identifier_union_variant(ty: DataType) -> Variant {\n    let mut variant = Variant::unnamed().build();\n    if let Fields::Unnamed(fields) = &mut variant.fields {\n        fields.fields.push(Field::new(ty));\n    }\n    variant\n}\n\nfn transform_untagged_variant(variant: &Variant) -> Result<Variant, Error> {\n    let payload = variant_payload_field(variant)\n        .ok_or_else(|| Error::invalid_external_tagged_variant(\"<untagged variant>\"))?;\n    Ok(clone_variant_with_unnamed_fields(variant, vec![payload]))\n}\n\nfn filter_enum_variants_for_phase(e: &mut Enum, mode: PhaseRewrite) -> Result<(), Error> {\n    let mut filter_err = None;\n    e.variants.retain(|(_, variant)| {\n        if variant.skip {\n            return false;\n        }\n\n        match SerdeVariantAttrs::from_attributes(&variant.attributes) {\n            Ok(Some(attrs)) => !variant_is_skipped_for_mode(&attrs, mode),\n            Ok(None) => true,\n            Err(err) => {\n                filter_err = Some(err);\n                true\n            }\n        }\n    });\n\n    if let Some(err) = filter_err {\n        return Err(err);\n    }\n\n    Ok(())\n}\n\nfn variant_is_skipped_for_mode(attrs: &SerdeVariantAttrs, mode: PhaseRewrite) -> bool {\n    match mode {\n        PhaseRewrite::Serialize => attrs.skip_serializing,\n        PhaseRewrite::Deserialize => attrs.skip_deserializing,\n        PhaseRewrite::Unified => attrs.skip_serializing || attrs.skip_deserializing,\n    }\n}\n\nfn serialized_variant_name(\n    variant_name: &str,\n    variant: &Variant,\n    container_attrs: &Option<SerdeContainerAttrs>,\n    mode: PhaseRewrite,\n) -> Result<String, Error> {\n    let variant_attrs = SerdeVariantAttrs::from_attributes(&variant.attributes)?;\n\n    if let Some(rename) = select_phase_string(\n        mode,\n        variant_attrs\n            .as_ref()\n            .and_then(|attrs| attrs.rename_serialize.as_deref()),\n        variant_attrs\n            .as_ref()\n            .and_then(|attrs| attrs.rename_deserialize.as_deref()),\n        \"enum variant rename\",\n        variant_name,\n    )? {\n        return Ok(rename.to_string());\n    }\n\n    Ok(select_phase_rule(\n        mode,\n        container_attrs\n            .as_ref()\n            .and_then(|attrs| attrs.rename_all_serialize),\n        container_attrs\n            .as_ref()\n            .and_then(|attrs| attrs.rename_all_deserialize),\n        \"enum rename_all\",\n        variant_name,\n    )?\n    .map_or_else(\n        || variant_name.to_string(),\n        |rule| rule.apply_to_variant(variant_name),\n    ))\n}\n\nfn select_phase_string<'a>(\n    mode: PhaseRewrite,\n    serialize: Option<&'a str>,\n    deserialize: Option<&'a str>,\n    context: &str,\n    name: &str,\n) -> Result<Option<&'a str>, Error> {\n    Ok(match mode {\n        PhaseRewrite::Serialize => serialize,\n        PhaseRewrite::Deserialize => deserialize,\n        PhaseRewrite::Unified => match (serialize, deserialize) {\n            (Some(serialize), Some(deserialize)) if serialize != deserialize => {\n                return Err(Error::incompatible_rename(\n                    context.to_string(),\n                    name,\n                    Some(serialize.to_string()),\n                    Some(deserialize.to_string()),\n                ));\n            }\n            (serialize, deserialize) => serialize.or(deserialize),\n        },\n    })\n}\n\nfn select_phase_rule(\n    mode: PhaseRewrite,\n    serialize: Option<RenameRule>,\n    deserialize: Option<RenameRule>,\n    context: &str,\n    name: &str,\n) -> Result<Option<RenameRule>, Error> {\n    Ok(match mode {\n        PhaseRewrite::Serialize => serialize,\n        PhaseRewrite::Deserialize => deserialize,\n        PhaseRewrite::Unified => match (serialize, deserialize) {\n            (Some(serialize), Some(deserialize)) if serialize != deserialize => {\n                return Err(Error::incompatible_rename(\n                    context.to_string(),\n                    name,\n                    Some(format!(\"{serialize:?}\")),\n                    Some(format!(\"{deserialize:?}\")),\n                ));\n            }\n            (serialize, deserialize) => serialize.or(deserialize),\n        },\n    })\n}\n\nfn resolve_phased_type(\n    ty: &DataType,\n    mode: PhaseRewrite,\n    path: &str,\n) -> Result<Option<DataType>, Error> {\n    let DataType::Reference(Reference::Opaque(reference)) = ty else {\n        return Ok(None);\n    };\n    let Some(phased) = reference.downcast_ref::<PhasedTy>() else {\n        return Ok(None);\n    };\n\n    Ok(match mode {\n        // Note that we won't hit this if `TSerialize == TDeserialize` because it will just return `T` directly in the `impl Type for Phased<...>`\n        PhaseRewrite::Unified => {\n            return Err(Error::invalid_phased_type_usage(\n                path,\n                \"`specta_serde::Phased<Serialize, Deserialize>` requires `PhasesFormat`\",\n            ));\n        }\n        PhaseRewrite::Serialize => Some(phased.serialize.clone()),\n        PhaseRewrite::Deserialize => Some(phased.deserialize.clone()),\n    })\n}\n\nfn conversion_datatype_for_mode(\n    ty: &DataType,\n    mode: PhaseRewrite,\n) -> Result<Option<DataType>, Error> {\n    let attrs = match ty {\n        DataType::Struct(s) => &s.attributes,\n        DataType::Enum(e) => &e.attributes,\n        _ => return Ok(None),\n    };\n\n    select_conversion_target(attrs, mode)\n}\n\nfn select_conversion_target(\n    attrs: &specta::datatype::Attributes,\n    mode: PhaseRewrite,\n) -> Result<Option<DataType>, Error> {\n    let parsed = SerdeContainerAttrs::from_attributes(attrs)?;\n    let resolved = parsed.as_ref();\n\n    let serialize_target = resolved.and_then(|v| v.resolved_into.as_ref());\n    let deserialize_target =\n        resolved.and_then(|v| v.resolved_from.as_ref().or(v.resolved_try_from.as_ref()));\n\n    match mode {\n        PhaseRewrite::Serialize => Ok(serialize_target.cloned()),\n        PhaseRewrite::Deserialize => Ok(deserialize_target.cloned()),\n        PhaseRewrite::Unified => match (serialize_target, deserialize_target) {\n            (None, None) => Ok(None),\n            (Some(serialize), Some(deserialize)) if serialize == deserialize => {\n                Ok(Some(serialize.clone()))\n            }\n            _ => Err(Error::incompatible_conversion(\n                \"container conversion\",\n                resolved\n                    .and_then(|attrs| {\n                        attrs\n                            .into\n                            .as_ref()\n                            .map(|v| format!(\"into({})\", v.type_src))\n                            .or_else(|| {\n                                attrs.from.as_ref().map(|v| format!(\"from({})\", v.type_src))\n                            })\n                            .or_else(|| {\n                                attrs\n                                    .try_from\n                                    .as_ref()\n                                    .map(|v| format!(\"try_from({})\", v.type_src))\n                            })\n                    })\n                    .unwrap_or_else(|| \"<container>\".to_string()),\n                resolved.and_then(|attrs| attrs.into.as_ref().map(|v| v.type_src.clone())),\n                resolved.and_then(|attrs| {\n                    attrs.from.as_ref().map(|v| v.type_src.clone()).or_else(|| {\n                        attrs\n                            .try_from\n                            .as_ref()\n                            .map(|v| format!(\"try_from({})\", v.type_src))\n                    })\n                }),\n            )),\n        },\n    }\n}\n\nfn transform_external_variant(\n    serialized_name: String,\n    variant: &Variant,\n) -> Result<Variant, Error> {\n    let skipped_only_unnamed = match &variant.fields {\n        Fields::Unnamed(unnamed) => unnamed_fields_all_skipped(unnamed),\n        Fields::Unit | Fields::Named(_) => false,\n    };\n\n    Ok(match &variant.fields {\n        Fields::Unit => clone_variant_with_unnamed_fields(\n            variant,\n            vec![Field::new(string_literal_datatype(serialized_name))],\n        ),\n        _ if skipped_only_unnamed => clone_variant_with_unnamed_fields(\n            variant,\n            vec![Field::new(string_literal_datatype(serialized_name))],\n        ),\n        _ => {\n            let payload = variant_payload_field(variant)\n                .ok_or_else(|| Error::invalid_external_tagged_variant(serialized_name.clone()))?;\n\n            clone_variant_with_named_fields(variant, vec![(Cow::Owned(serialized_name), payload)])\n        }\n    })\n}\n\nfn transform_adjacent_variant(\n    serialized_name: String,\n    tag: &str,\n    content: &str,\n    variant: &Variant,\n    widen_tag: bool,\n) -> Result<Variant, Error> {\n    let mut fields = vec![(\n        Cow::Owned(tag.to_string()),\n        Field::new(if widen_tag {\n            DataType::Primitive(Primitive::str)\n        } else {\n            string_literal_datatype(serialized_name.clone())\n        }),\n    )];\n\n    if variant_has_effective_payload(variant) {\n        let payload = variant_payload_field(variant)\n            .ok_or_else(|| Error::invalid_adjacent_tagged_variant(serialized_name.clone()))?;\n        fields.push((Cow::Owned(content.to_string()), payload));\n    }\n\n    Ok(clone_variant_with_named_fields(variant, fields))\n}\n\nfn transform_internal_variant(\n    serialized_name: String,\n    tag: &str,\n    variant: &Variant,\n    original_types: &Types,\n    widen_tag: bool,\n) -> Result<Variant, Error> {\n    let mut fields = vec![(\n        Cow::Owned(tag.to_string()),\n        Field::new(if widen_tag {\n            DataType::Primitive(Primitive::str)\n        } else {\n            string_literal_datatype(serialized_name.clone())\n        }),\n    )];\n\n    match &variant.fields {\n        Fields::Unit => {}\n        Fields::Named(named) => {\n            fields.extend(named.fields.iter().cloned());\n        }\n        Fields::Unnamed(unnamed) => {\n            let live_field_count = unnamed_live_field_count(unnamed);\n\n            if live_field_count == 0 {\n                return Ok(clone_variant_with_named_fields(variant, fields));\n            }\n\n            let non_skipped = unnamed_live_fields(unnamed).collect::<Vec<_>>();\n\n            if live_field_count != 1 {\n                return Err(Error::invalid_internally_tagged_variant(\n                    serialized_name,\n                    \"tuple variant must have exactly one non-skipped field\",\n                ));\n            }\n\n            let payload_field = non_skipped\n                .into_iter()\n                .next()\n                .expect(\"checked above\")\n                .clone();\n            let payload_ty = payload_field.ty.clone().expect(\"checked above\");\n            let Some(payload_is_effectively_empty) = internal_tag_payload_compatibility(\n                &payload_ty,\n                original_types,\n                &mut HashSet::new(),\n            )?\n            else {\n                return Err(Error::invalid_internally_tagged_variant(\n                    serialized_name,\n                    \"payload cannot be merged with a tag\",\n                ));\n            };\n\n            if !payload_is_effectively_empty {\n                return Ok(clone_variant_with_unnamed_fields(\n                    variant,\n                    vec![Field::new(DataType::Intersection(vec![\n                        named_fields_datatype(fields),\n                        payload_ty,\n                    ]))],\n                ));\n            }\n        }\n    }\n\n    Ok(clone_variant_with_named_fields(variant, fields))\n}\n\nfn named_fields_datatype(fields: Vec<(Cow<'static, str>, Field)>) -> DataType {\n    let mut builder = Struct::named();\n    for (name, field) in fields {\n        builder = builder.field(name, field);\n    }\n\n    builder.build()\n}\n\nfn string_literal_datatype(value: String) -> DataType {\n    let mut value_enum = Enum::default();\n    value_enum\n        .variants\n        .push((Cow::Owned(value), Variant::unit()));\n    DataType::Enum(value_enum)\n}\n\nfn is_generated_string_literal_datatype(ty: &DataType) -> bool {\n    let DataType::Enum(e) = ty else {\n        return false;\n    };\n\n    let Some((_, variant)) = e.variants.first() else {\n        return false;\n    };\n\n    if e.variants.len() != 1 {\n        return false;\n    }\n\n    match &variant.fields {\n        Fields::Unit => true,\n        Fields::Unnamed(fields) if fields.fields.len() == 1 => fields\n            .fields\n            .first()\n            .and_then(|field| field.ty.as_ref())\n            .is_some_and(is_generated_string_literal_datatype),\n        _ => false,\n    }\n}\n\nfn variant_has_effective_payload(variant: &Variant) -> bool {\n    match &variant.fields {\n        Fields::Unit => false,\n        Fields::Named(named) => !&named.fields.is_empty(),\n        Fields::Unnamed(unnamed) => unnamed_has_effective_payload(unnamed),\n    }\n}\n\nfn variant_payload_field(variant: &Variant) -> Option<Field> {\n    match &variant.fields {\n        Fields::Unit => Some(Field::new(DataType::Tuple(Tuple::new(vec![])))),\n        Fields::Named(named) => {\n            let mut out = Struct::named();\n            for (name, field) in named.fields.iter().cloned() {\n                out.field_mut(name, field);\n            }\n            Some(Field::new(out.build()))\n        }\n        Fields::Unnamed(unnamed) => {\n            let original_unnamed_len = unnamed.fields.len();\n\n            let non_skipped = unnamed_live_fields(unnamed).collect::<Vec<_>>();\n\n            match non_skipped.as_slice() {\n                [] => Some(Field::new(DataType::Tuple(Tuple::new(vec![])))),\n                [single] if original_unnamed_len == 1 => Some((*single).clone()),\n                _ => Some(Field::new(DataType::Tuple(Tuple::new(\n                    non_skipped\n                        .iter()\n                        .filter_map(|field| field.ty.clone())\n                        .collect(),\n                )))),\n            }\n        }\n    }\n}\n\nfn clone_variant_with_named_fields(\n    original: &Variant,\n    fields: Vec<(Cow<'static, str>, Field)>,\n) -> Variant {\n    let mut builder = Variant::named();\n    for (name, field) in fields {\n        builder = builder.field(name, field);\n    }\n\n    let mut transformed = builder.build();\n    transformed.skip = original.skip;\n    transformed.docs = original.docs.clone();\n    transformed.deprecated = original.deprecated.clone();\n    transformed.attributes = original.attributes.clone();\n    transformed\n}\n\nfn clone_variant_with_unnamed_fields(original: &Variant, fields: Vec<Field>) -> Variant {\n    let mut builder = Variant::unnamed();\n    for field in fields {\n        builder = builder.field(field);\n    }\n\n    let mut transformed = builder.build();\n    transformed.skip = original.skip;\n    transformed.docs = original.docs.clone();\n    transformed.deprecated = original.deprecated.clone();\n    transformed.attributes = original.attributes.clone();\n    transformed\n}\n\nfn internal_tag_payload_compatibility(\n    ty: &DataType,\n    original_types: &Types,\n    seen: &mut HashSet<TypeIdentity>,\n) -> Result<Option<bool>, Error> {\n    match ty {\n        DataType::Map(_) => Ok(Some(false)),\n        DataType::Struct(strct) => {\n            if SerdeContainerAttrs::from_attributes(&strct.attributes)?\n                .is_some_and(|attrs| attrs.transparent)\n            {\n                let payload_fields = match &strct.fields {\n                    Fields::Unit => return Ok(Some(true)),\n                    Fields::Unnamed(unnamed) => unnamed\n                        .fields\n                        .iter()\n                        .filter_map(|field| field.ty.as_ref())\n                        .collect::<Vec<_>>(),\n                    Fields::Named(named) => named\n                        .fields\n                        .iter()\n                        .filter_map(|(_, field)| field.ty.as_ref())\n                        .collect::<Vec<_>>(),\n                };\n\n                let [inner_ty] = payload_fields.as_slice() else {\n                    if payload_fields.is_empty() {\n                        return Ok(Some(true));\n                    }\n\n                    return Ok(None);\n                };\n\n                return internal_tag_payload_compatibility(inner_ty, original_types, seen);\n            }\n\n            Ok(match &strct.fields {\n                Fields::Named(named) => Some(\n                    named\n                        .fields\n                        .iter()\n                        .all(|(_, field)| field.ty.as_ref().is_none()),\n                ),\n                Fields::Unit | Fields::Unnamed(_) => None,\n            })\n        }\n        DataType::Tuple(tuple) => Ok(tuple.elements.is_empty().then_some(true)),\n        DataType::Intersection(types) => {\n            let mut is_effectively_empty = true;\n\n            for ty in types {\n                let Some(part_empty) =\n                    internal_tag_payload_compatibility(ty, original_types, seen)?\n                else {\n                    return Ok(None);\n                };\n\n                is_effectively_empty &= part_empty;\n            }\n\n            Ok(Some(is_effectively_empty))\n        }\n        DataType::Reference(Reference::Named(reference)) => {\n            if let NamedReferenceType::Inline { dt, .. } = &reference.inner {\n                return internal_tag_payload_compatibility(dt, original_types, seen);\n            }\n\n            let Some(referenced) = original_types.get(reference) else {\n                return Ok(None);\n            };\n            let Some(referenced_ty) = referenced.ty.as_ref() else {\n                return Ok(None);\n            };\n\n            let key = TypeIdentity::from_ndt(referenced);\n            if !seen.insert(key.clone()) {\n                return Ok(Some(false));\n            }\n\n            let compatible =\n                internal_tag_payload_compatibility(referenced_ty, original_types, seen);\n            seen.remove(&key);\n            compatible\n        }\n        DataType::Enum(enm) => match EnumRepr::from_attrs(&enm.attributes) {\n            Ok(EnumRepr::Untagged) => {\n                let mut is_effectively_empty = true;\n                for (_, variant) in &enm.variants {\n                    let Some(variant_empty) =\n                        internal_tag_variant_payload_compatibility(variant, original_types, seen)?\n                    else {\n                        return Ok(None);\n                    };\n\n                    is_effectively_empty &= variant_empty;\n                }\n\n                Ok(Some(is_effectively_empty))\n            }\n            Ok(EnumRepr::External | EnumRepr::Internal { .. } | EnumRepr::Adjacent { .. }) => {\n                Ok(Some(false))\n            }\n            Err(_) => Ok(None),\n        },\n        DataType::Primitive(_)\n        | DataType::List(_)\n        | DataType::Nullable(_)\n        | DataType::Reference(Reference::Opaque(_))\n        | DataType::Generic(_) => Ok(None),\n    }\n}\n\nfn internal_tag_variant_payload_compatibility(\n    variant: &Variant,\n    original_types: &Types,\n    seen: &mut HashSet<TypeIdentity>,\n) -> Result<Option<bool>, Error> {\n    match &variant.fields {\n        Fields::Unit => Ok(Some(true)),\n        Fields::Named(named) => Ok(Some(\n            named\n                .fields\n                .iter()\n                .all(|(_, field)| field.ty.as_ref().is_none()),\n        )),\n        Fields::Unnamed(unnamed) => {\n            if unnamed.fields.len() != 1 {\n                return Ok(None);\n            }\n\n            unnamed\n                .fields\n                .iter()\n                .find_map(|field| field.ty.as_ref())\n                .map_or(Ok(None), |ty| {\n                    internal_tag_payload_compatibility(ty, original_types, seen)\n                })\n        }\n    }\n}\n\nfn has_local_phase_difference(dt: &DataType) -> Result<bool, Error> {\n    match dt {\n        DataType::Struct(s) => Ok(container_has_local_difference(&s.attributes)?\n            || fields_have_local_difference(&s.fields)?),\n        DataType::Enum(e) => Ok(container_has_local_difference(&e.attributes)?\n            || e.variants\n                .iter()\n                .try_fold(false, |has_difference, (_, variant)| {\n                    if has_difference {\n                        return Ok(true);\n                    }\n\n                    Ok(variant_has_local_difference(variant)?\n                        || fields_have_local_difference(&variant.fields)?)\n                })?),\n        DataType::Tuple(tuple) => tuple.elements.iter().try_fold(false, |has_difference, ty| {\n            if has_difference {\n                return Ok(true);\n            }\n\n            has_local_phase_difference(ty)\n        }),\n        DataType::List(list) => has_local_phase_difference(&list.ty),\n        DataType::Map(map) => Ok(has_local_phase_difference(map.key_ty())?\n            || has_local_phase_difference(map.value_ty())?),\n        DataType::Intersection(types_) => types_.iter().try_fold(false, |has_difference, ty| {\n            if has_difference {\n                return Ok(true);\n            }\n\n            has_local_phase_difference(ty)\n        }),\n        DataType::Nullable(inner) => has_local_phase_difference(inner),\n        DataType::Reference(Reference::Opaque(reference)) => {\n            Ok(reference.downcast_ref::<PhasedTy>().is_some())\n        }\n        DataType::Primitive(_)\n        | DataType::Reference(Reference::Named(_))\n        | DataType::Generic(_) => Ok(false),\n    }\n}\n\nfn container_has_local_difference(attrs: &specta::datatype::Attributes) -> Result<bool, Error> {\n    let Some(conversions) = SerdeContainerAttrs::from_attributes(attrs)? else {\n        return Ok(false);\n    };\n\n    Ok(conversions.resolved_into.as_ref()\n        != conversions\n            .resolved_from\n            .as_ref()\n            .or(conversions.resolved_try_from.as_ref())\n        || conversions.rename_serialize != conversions.rename_deserialize\n        || conversions.rename_all_serialize != conversions.rename_all_deserialize\n        || conversions.rename_all_fields_serialize != conversions.rename_all_fields_deserialize\n        || conversions.variant_identifier\n        || conversions.field_identifier)\n}\n\nfn fields_have_local_difference(fields: &Fields) -> Result<bool, Error> {\n    match fields {\n        Fields::Unit => Ok(false),\n        Fields::Unnamed(unnamed) => {\n            unnamed\n                .fields\n                .iter()\n                .try_fold(false, |has_difference, field| {\n                    if has_difference {\n                        return Ok(true);\n                    }\n\n                    field\n                        .ty\n                        .as_ref()\n                        .map_or(Ok(false), has_local_phase_difference)\n                })\n        }\n        Fields::Named(named) => {\n            named\n                .fields\n                .iter()\n                .try_fold(false, |has_difference, (_, field)| {\n                    if has_difference {\n                        return Ok(true);\n                    }\n\n                    Ok(field_has_local_difference(field)?\n                        || field\n                            .ty\n                            .as_ref()\n                            .map_or(Ok(false), has_local_phase_difference)?)\n                })\n        }\n    }\n}\n\nfn field_has_local_difference(field: &Field) -> Result<bool, Error> {\n    Ok(SerdeFieldAttrs::from_attributes(&field.attributes)?\n        .map(|attrs| {\n            attrs.rename_serialize.as_deref() != attrs.rename_deserialize.as_deref()\n                || attrs.skip_serializing != attrs.skip_deserializing\n                || attrs.skip_serializing_if.is_some()\n                || attrs.has_serialize_with\n                || attrs.has_deserialize_with\n                || attrs.has_with\n        })\n        .unwrap_or_default())\n}\n\nfn variant_has_local_difference(variant: &Variant) -> Result<bool, Error> {\n    Ok(SerdeVariantAttrs::from_attributes(&variant.attributes)?\n        .map(|attrs| {\n            attrs.rename_serialize.as_deref() != attrs.rename_deserialize.as_deref()\n                || attrs.rename_all_serialize != attrs.rename_all_deserialize\n                || attrs.skip_serializing != attrs.skip_deserializing\n                || attrs.has_serialize_with\n                || attrs.has_deserialize_with\n                || attrs.has_with\n                || attrs.other\n        })\n        .unwrap_or_default())\n}\n\nfn collect_dependencies(\n    dt: &DataType,\n    types: &Types,\n    deps: &mut HashSet<TypeIdentity>,\n) -> Result<(), Error> {\n    match dt {\n        DataType::Struct(s) => {\n            collect_conversion_dependencies(&s.attributes, types, deps)?;\n            collect_fields_dependencies(&s.fields, types, deps)?;\n        }\n        DataType::Enum(e) => {\n            collect_conversion_dependencies(&e.attributes, types, deps)?;\n            for (_, variant) in &e.variants {\n                collect_fields_dependencies(&variant.fields, types, deps)?;\n            }\n        }\n        DataType::Tuple(tuple) => {\n            for ty in &tuple.elements {\n                collect_dependencies(ty, types, deps)?;\n            }\n        }\n        DataType::List(list) => collect_dependencies(&list.ty, types, deps)?,\n        DataType::Map(map) => {\n            collect_dependencies(map.key_ty(), types, deps)?;\n            collect_dependencies(map.value_ty(), types, deps)?;\n        }\n        DataType::Intersection(types_) => {\n            for ty in types_ {\n                collect_dependencies(ty, types, deps)?;\n            }\n        }\n        DataType::Nullable(inner) => collect_dependencies(inner, types, deps)?,\n        DataType::Reference(Reference::Named(reference)) => {\n            if let NamedReferenceType::Inline { dt, .. } = &reference.inner {\n                collect_dependencies(dt, types, deps)?;\n            }\n\n            if let Some(referenced) = types.get(reference) {\n                deps.insert(TypeIdentity::from_ndt(referenced));\n            }\n\n            for (_, generic) in named_reference_generics(reference) {\n                collect_dependencies(generic, types, deps)?;\n            }\n        }\n        DataType::Reference(Reference::Opaque(_)) => {\n            if let DataType::Reference(Reference::Opaque(reference)) = dt\n                && let Some(phased) = reference.downcast_ref::<PhasedTy>()\n            {\n                collect_dependencies(&phased.serialize, types, deps)?;\n                collect_dependencies(&phased.deserialize, types, deps)?;\n            }\n        }\n        DataType::Primitive(_) | DataType::Generic(_) => {}\n    }\n\n    Ok(())\n}\n\nfn collect_conversion_dependencies(\n    attrs: &specta::datatype::Attributes,\n    types: &Types,\n    deps: &mut HashSet<TypeIdentity>,\n) -> Result<(), Error> {\n    let Some(conversions) = SerdeContainerAttrs::from_attributes(attrs)? else {\n        return Ok(());\n    };\n\n    for conversion in [\n        conversions.resolved_into.as_ref(),\n        conversions.resolved_from.as_ref(),\n        conversions.resolved_try_from.as_ref(),\n    ]\n    .into_iter()\n    .flatten()\n    {\n        collect_dependencies(conversion, types, deps)?;\n    }\n\n    Ok(())\n}\n\nfn collect_fields_dependencies(\n    fields: &Fields,\n    types: &Types,\n    deps: &mut HashSet<TypeIdentity>,\n) -> Result<(), Error> {\n    match fields {\n        Fields::Unit => {}\n        Fields::Unnamed(unnamed) => {\n            for field in &unnamed.fields {\n                if let Some(ty) = field.ty.as_ref() {\n                    collect_dependencies(ty, types, deps)?;\n                }\n            }\n        }\n        Fields::Named(named) => {\n            for (_, field) in &named.fields {\n                if let Some(ty) = field.ty.as_ref() {\n                    collect_dependencies(ty, types, deps)?;\n                }\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn build_from_original(\n    original: &NamedDataType,\n    mode: PhaseRewrite,\n) -> Result<NamedDataType, Error> {\n    let mut ndt = original.clone();\n    ndt.name = Cow::Owned(split_type_name(original, mode)?);\n\n    Ok(ndt)\n}\n\nfn register_generated_type(types: &mut Types, generated: NamedDataType) -> NamedDataType {\n    NamedDataType::new(generated.name.clone(), types, move |_, ndt| {\n        ndt.docs = generated.docs;\n        ndt.deprecated = generated.deprecated;\n        ndt.module_path = generated.module_path;\n        ndt.location = generated.location;\n        ndt.generics = generated.generics;\n        ndt.ty = generated.ty;\n    })\n}\n\nfn rewrite_named_type_for_phase(ndt: &mut NamedDataType, mode: PhaseRewrite) -> Result<(), Error> {\n    if let Some(ty) = &ndt.ty\n        && let Some(rename) = renamed_type_name_for_phase(ty, mode, ndt.name.as_ref())?\n    {\n        ndt.name = Cow::Owned(rename);\n    }\n\n    Ok(())\n}\n\nfn split_type_name(original: &NamedDataType, mode: PhaseRewrite) -> Result<String, Error> {\n    let suffix = match mode {\n        PhaseRewrite::Serialize => \"Serialize\",\n        PhaseRewrite::Deserialize => \"Deserialize\",\n        PhaseRewrite::Unified => return Ok(original.name.to_string()),\n    };\n\n    let base_name = original\n        .ty\n        .as_ref()\n        .map(|ty| renamed_type_name_for_phase(ty, mode, original.name.as_ref()))\n        .transpose()?\n        .flatten()\n        .unwrap_or_else(|| original.name.to_string());\n\n    Ok(format!(\"{base_name}_{suffix}\"))\n}\n\nfn renamed_type_name_for_phase(\n    ty: &DataType,\n    mode: PhaseRewrite,\n    current_name: &str,\n) -> Result<Option<String>, Error> {\n    let DataType::Struct(strct) = ty else {\n        return Ok(None);\n    };\n    let Some(attrs) = SerdeContainerAttrs::from_attributes(&strct.attributes)? else {\n        return Ok(None);\n    };\n\n    Ok(select_phase_string(\n        mode,\n        attrs.rename_serialize.as_deref(),\n        attrs.rename_deserialize.as_deref(),\n        \"container rename\",\n        current_name,\n    )?\n    .map(str::to_string))\n}\n\nfn apply_field_attrs(\n    field: &mut Field,\n    mode: PhaseRewrite,\n    container_default: bool,\n) -> Result<(), Error> {\n    let mut optional = field.optional;\n    if let Some(attrs) = SerdeFieldAttrs::from_attributes(&field.attributes)? {\n        if field_is_optional_for_mode(Some(&attrs), container_default, mode) {\n            optional = true;\n        }\n    } else if field_is_optional_for_mode(None, container_default, mode) {\n        optional = true;\n    }\n    field.optional = optional;\n\n    Ok(())\n}\n\nfn field_is_optional_for_mode(\n    attrs: Option<&SerdeFieldAttrs>,\n    container_default: bool,\n    mode: PhaseRewrite,\n) -> bool {\n    match mode {\n        PhaseRewrite::Serialize => false,\n        PhaseRewrite::Deserialize | PhaseRewrite::Unified => {\n            container_default\n                || attrs.is_some_and(|attrs| attrs.default || attrs.skip_deserializing)\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use serde::{Deserialize, Serialize};\n    use specta::{Format as _, Type, Types, datatype::DataType};\n\n    use super::{\n        Phase, Phased, PhasesFormat, parser, select_phase_datatype,\n        validate::{ApplyMode, validate_datatype_for_mode},\n    };\n\n    #[derive(Type, Serialize, Deserialize)]\n    #[serde(untagged)]\n    enum OneOrManyString {\n        One(String),\n        Many(Vec<String>),\n    }\n\n    #[derive(Type, Serialize, Deserialize)]\n    struct Filters {\n        #[specta(type = Phased<Vec<String>, OneOrManyString>)]\n        tags: Vec<String>,\n    }\n\n    #[derive(Type, Serialize, Deserialize)]\n    struct FilterList {\n        items: Vec<Filters>,\n    }\n\n    #[derive(Type, Serialize, Deserialize)]\n    struct Plain {\n        name: String,\n    }\n\n    #[derive(Type, Serialize, Deserialize)]\n    struct WithSkipIf {\n        #[serde(default, skip_serializing_if = \"Option::is_none\")]\n        nickname: Option<String>,\n    }\n\n    #[test]\n    fn selects_split_named_reference_for_each_phase() {\n        let mut types = specta::Types::default();\n        let dt = Filters::definition(&mut types);\n        let resolved = formatted_phases(types);\n\n        let serialize = select_phase_datatype(&dt, &resolved, Phase::Serialize);\n        let deserialize = select_phase_datatype(&dt, &resolved, Phase::Deserialize);\n\n        assert_named_reference(&serialize, &resolved, \"Filters_Serialize\");\n        assert_named_reference(&deserialize, &resolved, \"Filters_Deserialize\");\n    }\n\n    #[test]\n    fn rewrites_nested_generics_for_each_phase() {\n        let mut types = specta::Types::default();\n        let dt = FilterList::definition(&mut types);\n        let resolved = formatted_phases(types);\n\n        let serialize = select_phase_datatype(&dt, &resolved, Phase::Serialize);\n        let deserialize = select_phase_datatype(&dt, &resolved, Phase::Deserialize);\n\n        assert_named_reference(&serialize, &resolved, \"FilterList_Serialize\");\n        assert_named_reference(&deserialize, &resolved, \"FilterList_Deserialize\");\n\n        let serialize_inner = named_field_type(&serialize, &resolved, \"items\");\n        let deserialize_inner = named_field_type(&deserialize, &resolved, \"items\");\n\n        assert_named_reference(\n            list_item_type(serialize_inner),\n            &resolved,\n            \"Filters_Serialize\",\n        );\n        assert_named_reference(\n            list_item_type(deserialize_inner),\n            &resolved,\n            \"Filters_Deserialize\",\n        );\n    }\n\n    #[test]\n    fn preserves_unsplit_types() {\n        let mut types = specta::Types::default();\n        let dt = Plain::definition(&mut types);\n        let resolved = formatted_phases(types);\n\n        let serialize = select_phase_datatype(&dt, &resolved, Phase::Serialize);\n        let deserialize = select_phase_datatype(&dt, &resolved, Phase::Deserialize);\n\n        assert_named_reference(&serialize, &resolved, \"Plain\");\n        assert_named_reference(&deserialize, &resolved, \"Plain\");\n    }\n\n    #[test]\n    fn clears_skip_serializing_if_attribute_after_phase_split() {\n        let mut types = specta::Types::default();\n        let dt = WithSkipIf::definition(&mut types);\n        let resolved = formatted_phases(types);\n\n        let serialize = select_phase_datatype(&dt, &resolved, Phase::Serialize);\n        let deserialize = select_phase_datatype(&dt, &resolved, Phase::Deserialize);\n\n        assert!(!field_has_skip_serializing_if(\n            &serialize, &resolved, \"nickname\"\n        ));\n        assert!(!field_has_skip_serializing_if(\n            &deserialize,\n            &resolved,\n            \"nickname\"\n        ));\n    }\n\n    #[test]\n    fn phase_split_field_passes_unified_mode_validation() {\n        // Regression test for the interaction with downstream callers (e.g.\n        // tauri-specta's `validate_exported_command`) that run unified-mode\n        // validation on the post-`apply_phases` graph. Before clearing the\n        // attribute on phase-split fields, this would error with\n        // \"skip_serializing_if requires format_phases because unified mode\n        // cannot represent conditional omission\".\n        let mut types = specta::Types::default();\n        let dt = WithSkipIf::definition(&mut types);\n        let resolved = formatted_phases(types);\n\n        let serialize = select_phase_datatype(&dt, &resolved, Phase::Serialize);\n        let deserialize = select_phase_datatype(&dt, &resolved, Phase::Deserialize);\n\n        validate_datatype_for_mode(&serialize, &resolved, ApplyMode::Unified)\n            .expect(\"Unified validation should accept phase-split _Serialize variant\");\n        validate_datatype_for_mode(&deserialize, &resolved, ApplyMode::Unified)\n            .expect(\"Unified validation should accept phase-split _Deserialize variant\");\n    }\n\n    #[test]\n    fn resolves_explicit_phased_datatypes_without_named_types() {\n        let mut types = specta::Types::default();\n        let dt = <Phased<String, Vec<String>>>::definition(&mut types);\n        let resolved = formatted_phases(types);\n\n        let serialize = select_phase_datatype(&dt, &resolved, Phase::Serialize);\n        let deserialize = select_phase_datatype(&dt, &resolved, Phase::Deserialize);\n\n        assert_named_reference(&serialize, &resolved, \"String\");\n        assert_named_reference(&deserialize, &resolved, \"Vec\");\n    }\n\n    fn assert_named_reference(dt: &DataType, types: &Types, expected_name: &str) {\n        let DataType::Reference(specta::datatype::Reference::Named(reference)) = dt else {\n            panic!(\"expected named reference\");\n        };\n\n        let actual = types\n            .get(reference)\n            .expect(\"reference should resolve\")\n            .name\n            .as_ref();\n\n        assert_eq!(actual, expected_name);\n    }\n\n    fn named_field_type<'a>(dt: &'a DataType, types: &'a Types, field_name: &str) -> &'a DataType {\n        let DataType::Reference(specta::datatype::Reference::Named(reference)) = dt else {\n            panic!(\"expected named reference\");\n        };\n\n        let named = types.get(reference).expect(\"reference should resolve\");\n        let Some(DataType::Struct(strct)) = &named.ty else {\n            panic!(\"expected struct type\");\n        };\n        let specta::datatype::Fields::Named(fields) = &strct.fields else {\n            panic!(\"expected named fields\");\n        };\n\n        fields\n            .fields\n            .iter()\n            .find_map(|(name, field)| (name == field_name).then(|| field.ty.as_ref()).flatten())\n            .expect(\"field should exist\")\n    }\n\n    fn field_has_skip_serializing_if(dt: &DataType, types: &Types, field_name: &str) -> bool {\n        let DataType::Reference(specta::datatype::Reference::Named(reference)) = dt else {\n            panic!(\"expected named reference\");\n        };\n        let named = types.get(reference).expect(\"reference should resolve\");\n        let Some(DataType::Struct(strct)) = &named.ty else {\n            panic!(\"expected struct type\");\n        };\n        let specta::datatype::Fields::Named(fields) = &strct.fields else {\n            panic!(\"expected named fields\");\n        };\n        fields\n            .fields\n            .iter()\n            .find(|(name, _)| name == field_name)\n            .map(|(_, field)| {\n                field\n                    .attributes\n                    .contains_key(parser::FIELD_SKIP_SERIALIZING_IF)\n            })\n            .expect(\"field should exist\")\n    }\n\n    fn first_generic_type(dt: &DataType) -> &DataType {\n        let DataType::Reference(specta::datatype::Reference::Named(reference)) = dt else {\n            panic!(\"expected named reference with generics\");\n        };\n\n        let specta::datatype::NamedReferenceType::Reference { generics, .. } = &reference.inner\n        else {\n            panic!(\"expected named reference with generics\");\n        };\n\n        generics\n            .first()\n            .map(|(_, dt)| dt)\n            .expect(\"expected first generic type\")\n    }\n\n    fn list_item_type(dt: &DataType) -> &DataType {\n        let DataType::Reference(specta::datatype::Reference::Named(reference)) = dt else {\n            panic!(\"expected inline list reference\");\n        };\n\n        let specta::datatype::NamedReferenceType::Inline { dt, .. } = &reference.inner else {\n            return first_generic_type(dt);\n        };\n\n        let DataType::List(list) = dt.as_ref() else {\n            panic!(\"expected inline list\");\n        };\n\n        &list.ty\n    }\n\n    fn formatted_phases(types: Types) -> Types {\n        let format = PhasesFormat;\n        format\n            .map_types(&types)\n            .expect(\"PhasesFormat should succeed\")\n            .into_owned()\n    }\n}\n"
  },
  {
    "path": "specta-serde/src/parser.rs",
    "content": "#![allow(missing_docs)]\n\nuse crate::{Error, inflection::RenameRule};\nuse specta::datatype::{Attributes, DataType};\n\nconst CONTAINER_RENAME_SERIALIZE: &str = \"serde:container:rename_serialize\";\nconst CONTAINER_RENAME_DESERIALIZE: &str = \"serde:container:rename_deserialize\";\nconst CONTAINER_RENAME_ALL_SERIALIZE: &str = \"serde:container:rename_all_serialize\";\nconst CONTAINER_RENAME_ALL_DESERIALIZE: &str = \"serde:container:rename_all_deserialize\";\nconst CONTAINER_RENAME_ALL_FIELDS_SERIALIZE: &str = \"serde:container:rename_all_fields_serialize\";\nconst CONTAINER_RENAME_ALL_FIELDS_DESERIALIZE: &str =\n    \"serde:container:rename_all_fields_deserialize\";\nconst CONTAINER_TAG: &str = \"serde:container:tag\";\nconst CONTAINER_CONTENT: &str = \"serde:container:content\";\nconst CONTAINER_UNTAGGED: &str = \"serde:container:untagged\";\nconst CONTAINER_DEFAULT: &str = \"serde:container:default\";\nconst CONTAINER_TRANSPARENT: &str = \"serde:container:transparent\";\nconst CONTAINER_FROM_TYPE_SRC: &str = \"serde:container:from_type_src\";\nconst CONTAINER_FROM_RESOLVED: &str = \"serde:container:from_resolved\";\nconst CONTAINER_TRY_FROM_TYPE_SRC: &str = \"serde:container:try_from_type_src\";\nconst CONTAINER_TRY_FROM_RESOLVED: &str = \"serde:container:try_from_resolved\";\nconst CONTAINER_INTO_TYPE_SRC: &str = \"serde:container:into_type_src\";\nconst CONTAINER_INTO_RESOLVED: &str = \"serde:container:into_resolved\";\nconst CONTAINER_VARIANT_IDENTIFIER: &str = \"serde:container:variant_identifier\";\nconst CONTAINER_FIELD_IDENTIFIER: &str = \"serde:container:field_identifier\";\n\nconst VARIANT_RENAME_SERIALIZE: &str = \"serde:variant:rename_serialize\";\nconst VARIANT_RENAME_DESERIALIZE: &str = \"serde:variant:rename_deserialize\";\nconst VARIANT_ALIASES: &str = \"serde:variant:aliases\";\nconst VARIANT_RENAME_ALL_SERIALIZE: &str = \"serde:variant:rename_all_serialize\";\nconst VARIANT_RENAME_ALL_DESERIALIZE: &str = \"serde:variant:rename_all_deserialize\";\nconst VARIANT_SKIP_SERIALIZING: &str = \"serde:variant:skip_serializing\";\nconst VARIANT_SKIP_DESERIALIZING: &str = \"serde:variant:skip_deserializing\";\nconst VARIANT_HAS_SERIALIZE_WITH: &str = \"serde:variant:has_serialize_with\";\nconst VARIANT_HAS_DESERIALIZE_WITH: &str = \"serde:variant:has_deserialize_with\";\nconst VARIANT_HAS_WITH: &str = \"serde:variant:has_with\";\nconst VARIANT_OTHER: &str = \"serde:variant:other\";\nconst VARIANT_UNTAGGED: &str = \"serde:variant:untagged\";\n\nconst FIELD_RENAME_SERIALIZE: &str = \"serde:field:rename_serialize\";\nconst FIELD_RENAME_DESERIALIZE: &str = \"serde:field:rename_deserialize\";\nconst FIELD_ALIASES: &str = \"serde:field:aliases\";\nconst FIELD_DEFAULT: &str = \"serde:field:default\";\nconst FIELD_FLATTEN: &str = \"serde:field:flatten\";\nconst FIELD_SKIP_SERIALIZING: &str = \"serde:field:skip_serializing\";\nconst FIELD_SKIP_DESERIALIZING: &str = \"serde:field:skip_deserializing\";\npub(crate) const FIELD_SKIP_SERIALIZING_IF: &str = \"serde:field:skip_serializing_if\";\nconst FIELD_HAS_SERIALIZE_WITH: &str = \"serde:field:has_serialize_with\";\nconst FIELD_HAS_DESERIALIZE_WITH: &str = \"serde:field:has_deserialize_with\";\nconst FIELD_HAS_WITH: &str = \"serde:field:has_with\";\n\nconst CONTAINER_ATTR_KEYS: &[&str] = &[\n    CONTAINER_RENAME_SERIALIZE,\n    CONTAINER_RENAME_DESERIALIZE,\n    CONTAINER_RENAME_ALL_SERIALIZE,\n    CONTAINER_RENAME_ALL_DESERIALIZE,\n    CONTAINER_RENAME_ALL_FIELDS_SERIALIZE,\n    CONTAINER_RENAME_ALL_FIELDS_DESERIALIZE,\n    CONTAINER_TAG,\n    CONTAINER_CONTENT,\n    CONTAINER_UNTAGGED,\n    CONTAINER_DEFAULT,\n    CONTAINER_TRANSPARENT,\n    CONTAINER_FROM_TYPE_SRC,\n    CONTAINER_FROM_RESOLVED,\n    CONTAINER_TRY_FROM_TYPE_SRC,\n    CONTAINER_TRY_FROM_RESOLVED,\n    CONTAINER_INTO_TYPE_SRC,\n    CONTAINER_INTO_RESOLVED,\n    CONTAINER_VARIANT_IDENTIFIER,\n    CONTAINER_FIELD_IDENTIFIER,\n];\n\nconst VARIANT_ATTR_KEYS: &[&str] = &[\n    VARIANT_RENAME_SERIALIZE,\n    VARIANT_RENAME_DESERIALIZE,\n    VARIANT_ALIASES,\n    VARIANT_RENAME_ALL_SERIALIZE,\n    VARIANT_RENAME_ALL_DESERIALIZE,\n    VARIANT_SKIP_SERIALIZING,\n    VARIANT_SKIP_DESERIALIZING,\n    VARIANT_HAS_SERIALIZE_WITH,\n    VARIANT_HAS_DESERIALIZE_WITH,\n    VARIANT_HAS_WITH,\n    VARIANT_OTHER,\n    VARIANT_UNTAGGED,\n];\n\nconst FIELD_ATTR_KEYS: &[&str] = &[\n    FIELD_RENAME_SERIALIZE,\n    FIELD_RENAME_DESERIALIZE,\n    FIELD_ALIASES,\n    FIELD_DEFAULT,\n    FIELD_FLATTEN,\n    FIELD_SKIP_SERIALIZING,\n    FIELD_SKIP_DESERIALIZING,\n    FIELD_SKIP_SERIALIZING_IF,\n    FIELD_HAS_SERIALIZE_WITH,\n    FIELD_HAS_DESERIALIZE_WITH,\n    FIELD_HAS_WITH,\n];\n\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub struct ConversionType {\n    pub type_src: String,\n}\n\n#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)]\npub struct SerdeContainerAttrs {\n    pub rename_serialize: Option<String>,\n    pub rename_deserialize: Option<String>,\n    pub rename_all_serialize: Option<RenameRule>,\n    pub rename_all_deserialize: Option<RenameRule>,\n    pub rename_all_fields_serialize: Option<RenameRule>,\n    pub rename_all_fields_deserialize: Option<RenameRule>,\n    pub tag: Option<String>,\n    pub content: Option<String>,\n    pub untagged: bool,\n    pub default: bool,\n    pub transparent: bool,\n    pub from: Option<ConversionType>,\n    pub try_from: Option<ConversionType>,\n    pub into: Option<ConversionType>,\n    pub resolved_from: Option<DataType>,\n    pub resolved_try_from: Option<DataType>,\n    pub resolved_into: Option<DataType>,\n    pub variant_identifier: bool,\n    pub field_identifier: bool,\n}\n\nimpl SerdeContainerAttrs {\n    pub fn from_attributes(attributes: &Attributes) -> Result<Option<Self>, Error> {\n        has_any_attr(attributes, CONTAINER_ATTR_KEYS)\n            .then(|| {\n                Ok(Self {\n                    rename_serialize: get_string(attributes, CONTAINER_RENAME_SERIALIZE),\n                    rename_deserialize: get_string(attributes, CONTAINER_RENAME_DESERIALIZE),\n                    rename_all_serialize: get_rename_rule(\n                        attributes,\n                        CONTAINER_RENAME_ALL_SERIALIZE,\n                    )?,\n                    rename_all_deserialize: get_rename_rule(\n                        attributes,\n                        CONTAINER_RENAME_ALL_DESERIALIZE,\n                    )?,\n                    rename_all_fields_serialize: get_rename_rule(\n                        attributes,\n                        CONTAINER_RENAME_ALL_FIELDS_SERIALIZE,\n                    )?,\n                    rename_all_fields_deserialize: get_rename_rule(\n                        attributes,\n                        CONTAINER_RENAME_ALL_FIELDS_DESERIALIZE,\n                    )?,\n                    tag: get_string(attributes, CONTAINER_TAG),\n                    content: get_string(attributes, CONTAINER_CONTENT),\n                    untagged: has_attr(attributes, CONTAINER_UNTAGGED),\n                    default: has_attr(attributes, CONTAINER_DEFAULT),\n                    transparent: has_attr(attributes, CONTAINER_TRANSPARENT),\n                    from: get_string(attributes, CONTAINER_FROM_TYPE_SRC)\n                        .map(|type_src| ConversionType { type_src }),\n                    try_from: get_string(attributes, CONTAINER_TRY_FROM_TYPE_SRC)\n                        .map(|type_src| ConversionType { type_src }),\n                    into: get_string(attributes, CONTAINER_INTO_TYPE_SRC)\n                        .map(|type_src| ConversionType { type_src }),\n                    resolved_from: get_datatype(attributes, CONTAINER_FROM_RESOLVED),\n                    resolved_try_from: get_datatype(attributes, CONTAINER_TRY_FROM_RESOLVED),\n                    resolved_into: get_datatype(attributes, CONTAINER_INTO_RESOLVED),\n                    variant_identifier: has_attr(attributes, CONTAINER_VARIANT_IDENTIFIER),\n                    field_identifier: has_attr(attributes, CONTAINER_FIELD_IDENTIFIER),\n                })\n            })\n            .transpose()\n    }\n}\n\n#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)]\npub struct SerdeVariantAttrs {\n    pub rename_serialize: Option<String>,\n    pub rename_deserialize: Option<String>,\n    pub aliases: Vec<String>,\n    pub rename_all_serialize: Option<RenameRule>,\n    pub rename_all_deserialize: Option<RenameRule>,\n    pub skip_serializing: bool,\n    pub skip_deserializing: bool,\n    pub has_serialize_with: bool,\n    pub has_deserialize_with: bool,\n    pub has_with: bool,\n    pub other: bool,\n    pub untagged: bool,\n}\n\nimpl SerdeVariantAttrs {\n    pub fn from_attributes(attributes: &Attributes) -> Result<Option<Self>, Error> {\n        has_any_attr(attributes, VARIANT_ATTR_KEYS)\n            .then(|| {\n                Ok(Self {\n                    rename_serialize: get_string(attributes, VARIANT_RENAME_SERIALIZE),\n                    rename_deserialize: get_string(attributes, VARIANT_RENAME_DESERIALIZE),\n                    aliases: get_strings(attributes, VARIANT_ALIASES),\n                    rename_all_serialize: get_rename_rule(\n                        attributes,\n                        VARIANT_RENAME_ALL_SERIALIZE,\n                    )?,\n                    rename_all_deserialize: get_rename_rule(\n                        attributes,\n                        VARIANT_RENAME_ALL_DESERIALIZE,\n                    )?,\n                    skip_serializing: has_attr(attributes, VARIANT_SKIP_SERIALIZING),\n                    skip_deserializing: has_attr(attributes, VARIANT_SKIP_DESERIALIZING),\n                    has_serialize_with: has_attr(attributes, VARIANT_HAS_SERIALIZE_WITH),\n                    has_deserialize_with: has_attr(attributes, VARIANT_HAS_DESERIALIZE_WITH),\n                    has_with: has_attr(attributes, VARIANT_HAS_WITH),\n                    other: has_attr(attributes, VARIANT_OTHER),\n                    untagged: has_attr(attributes, VARIANT_UNTAGGED),\n                })\n            })\n            .transpose()\n    }\n}\n\n#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)]\npub struct SerdeFieldAttrs {\n    pub rename_serialize: Option<String>,\n    pub rename_deserialize: Option<String>,\n    pub aliases: Vec<String>,\n    pub default: bool,\n    pub flatten: bool,\n    pub skip_serializing: bool,\n    pub skip_deserializing: bool,\n    pub skip_serializing_if: Option<String>,\n    pub has_serialize_with: bool,\n    pub has_deserialize_with: bool,\n    pub has_with: bool,\n}\n\nimpl SerdeFieldAttrs {\n    pub fn from_attributes(attributes: &Attributes) -> Result<Option<Self>, Error> {\n        has_any_attr(attributes, FIELD_ATTR_KEYS)\n            .then(|| {\n                Ok(Self {\n                    rename_serialize: get_string(attributes, FIELD_RENAME_SERIALIZE),\n                    rename_deserialize: get_string(attributes, FIELD_RENAME_DESERIALIZE),\n                    aliases: get_strings(attributes, FIELD_ALIASES),\n                    default: has_attr(attributes, FIELD_DEFAULT),\n                    flatten: has_attr(attributes, FIELD_FLATTEN),\n                    skip_serializing: has_attr(attributes, FIELD_SKIP_SERIALIZING),\n                    skip_deserializing: has_attr(attributes, FIELD_SKIP_DESERIALIZING),\n                    skip_serializing_if: get_string(attributes, FIELD_SKIP_SERIALIZING_IF),\n                    has_serialize_with: has_attr(attributes, FIELD_HAS_SERIALIZE_WITH),\n                    has_deserialize_with: has_attr(attributes, FIELD_HAS_DESERIALIZE_WITH),\n                    has_with: has_attr(attributes, FIELD_HAS_WITH),\n                })\n            })\n            .transpose()\n    }\n}\n\nfn get_string(attributes: &Attributes, key: &str) -> Option<String> {\n    attributes.get_named_as::<String>(key).cloned()\n}\n\nfn get_strings(attributes: &Attributes, key: &str) -> Vec<String> {\n    attributes\n        .get_named_as::<Vec<String>>(key)\n        .cloned()\n        .unwrap_or_default()\n}\n\nfn has_attr(attributes: &Attributes, key: &str) -> bool {\n    attributes.contains_key(key)\n}\n\nfn get_datatype(attributes: &Attributes, key: &str) -> Option<DataType> {\n    attributes.get_named_as::<DataType>(key).cloned()\n}\n\nfn get_rename_rule(attributes: &Attributes, key: &str) -> Result<Option<RenameRule>, Error> {\n    match get_string(attributes, key) {\n        Some(value) => RenameRule::from_str(&value)\n            .map(Some)\n            .map_err(|_| Error::invalid_rename_rule(key.to_string(), value.clone())),\n        None => Ok(None),\n    }\n}\n\nfn has_any_attr(attributes: &Attributes, keys: &[&str]) -> bool {\n    keys.iter().copied().any(|key| attributes.contains_key(key))\n}\n"
  },
  {
    "path": "specta-serde/src/phased.rs",
    "content": "use std::marker::PhantomData;\n\nuse specta::{\n    Type, Types,\n    datatype::{DataType, Reference},\n};\n\n/// Declares an explicit serialize/deserialize type pair for Specta output.\n///\n/// This is primarily used with `#[specta(type = ...)]` when serde attributes\n/// cause the wire shape to differ by direction.\n///\n/// - `Serialize` is the type used for serialization output.\n/// - `Deserialize` is the type accepted for deserialization input.\n///\n/// When both phases resolve to the same Specta datatype, this collapses to that\n/// single type. When they differ, `PhasesFormat` can split the graph into\n/// `*_Serialize` and `*_Deserialize` variants.\n///\n/// ```rust\n/// # use specta::Type;\n/// #[derive(Type)]\n/// struct OneOrMany {\n///     #[specta(type = specta_serde::Phased<Vec<String>, String>)]\n///     value: Vec<String>,\n/// }\n/// ```\npub struct Phased<Serialize, Deserialize>(PhantomData<(Serialize, Deserialize)>);\n\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub(crate) struct PhasedTy {\n    pub(crate) serialize: DataType,\n    pub(crate) deserialize: DataType,\n}\n\n/// Builds an explicit phased [`DataType`] from precomputed serialize and deserialize shapes.\npub fn phased(serialize: DataType, deserialize: DataType) -> DataType {\n    if serialize == deserialize {\n        serialize\n    } else {\n        DataType::Reference(Reference::opaque(PhasedTy {\n            serialize,\n            deserialize,\n        }))\n    }\n}\n\nimpl<Serialize: Type, Deserialize: Type> Type for Phased<Serialize, Deserialize> {\n    fn definition(types: &mut Types) -> DataType {\n        let serialize = Serialize::definition(types);\n        let deserialize = Deserialize::definition(types);\n\n        phased(serialize, deserialize)\n    }\n}\n"
  },
  {
    "path": "specta-serde/src/repr.rs",
    "content": "use std::borrow::Cow;\n\nuse specta::datatype::Attributes;\n\nuse crate::{Error, parser::SerdeContainerAttrs};\n\n/// Serde representation of an enum.\n/// Refer to the [Serde documentation](https://serde.rs/enum-representations.html) for more information.\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub enum EnumRepr {\n    /// Untagged enum representation.\n    Untagged,\n    /// Externally tagged enum representation.\n    External,\n    /// Internally tagged enum representation.\n    Internal {\n        /// Field name used as the tag discriminator.\n        tag: Cow<'static, str>,\n    },\n    /// Adjacently tagged enum representation.\n    Adjacent {\n        /// Field name used as the tag discriminator.\n        tag: Cow<'static, str>,\n        /// Field name used to hold the variant content.\n        content: Cow<'static, str>,\n    },\n}\n\nimpl EnumRepr {\n    pub(crate) fn from_attrs(attrs: &Attributes) -> Result<Self, Error> {\n        let Some(container_attrs) = SerdeContainerAttrs::from_attributes(attrs)? else {\n            return Ok(Self::External);\n        };\n\n        if container_attrs.untagged {\n            return Ok(Self::Untagged);\n        }\n\n        match (\n            container_attrs.tag.as_deref(),\n            container_attrs.content.as_deref(),\n        ) {\n            (Some(tag), Some(content)) => Ok(Self::Adjacent {\n                tag: Cow::Owned(tag.to_string()),\n                content: Cow::Owned(content.to_string()),\n            }),\n            (Some(tag), None) => Ok(Self::Internal {\n                tag: Cow::Owned(tag.to_string()),\n            }),\n            (None, Some(_)) => Err(Error::invalid_enum_representation(\n                \"`content` is set without `tag`\",\n            )),\n            (None, None) => Ok(Self::External),\n        }\n    }\n}\n"
  },
  {
    "path": "specta-serde/src/validate.rs",
    "content": "use std::collections::HashSet;\n\nuse specta::{\n    Types,\n    datatype::{DataType, Enum, Field, Fields, NamedReferenceType, Reference, Variant},\n};\n\nuse crate::{\n    Error,\n    parser::{SerdeContainerAttrs, SerdeFieldAttrs, SerdeVariantAttrs},\n    phased::PhasedTy,\n    repr::EnumRepr,\n};\n\n#[derive(Clone, Copy, PartialEq, Eq)]\npub enum ApplyMode {\n    Unified,\n    Phases,\n}\n\npub fn validate_for_mode(types: &Types, mode: ApplyMode) -> Result<(), Error> {\n    for ndt in types.into_unsorted_iter() {\n        let Some(ty) = &ndt.ty else {\n            continue;\n        };\n\n        inner(\n            ty,\n            types,\n            &mut HashSet::new(),\n            ndt.name.to_string(),\n            mode,\n            true,\n        )?;\n    }\n\n    Ok(())\n}\n\npub(crate) fn validate_datatype_for_mode(\n    dt: &DataType,\n    types: &Types,\n    mode: ApplyMode,\n) -> Result<(), Error> {\n    inner(\n        dt,\n        types,\n        &mut HashSet::new(),\n        \"<top-level>\".to_string(),\n        mode,\n        true,\n    )\n}\n\npub(crate) fn validate_datatype_for_mode_shallow(\n    dt: &DataType,\n    types: &Types,\n    mode: ApplyMode,\n) -> Result<(), Error> {\n    inner(\n        dt,\n        types,\n        &mut HashSet::new(),\n        \"<top-level>\".to_string(),\n        mode,\n        false,\n    )\n}\n\nfn inner(\n    dt: &DataType,\n    types: &Types,\n    checked_references: &mut HashSet<Reference>,\n    path: String,\n    mode: ApplyMode,\n    follow_named_references: bool,\n) -> Result<(), Error> {\n    match dt {\n        DataType::Nullable(ty) => inner(\n            ty,\n            types,\n            checked_references,\n            path,\n            mode,\n            follow_named_references,\n        )?,\n        DataType::Map(map) => {\n            inner(\n                map.key_ty(),\n                types,\n                checked_references,\n                format!(\"{path}.<map_key>\"),\n                mode,\n                follow_named_references,\n            )?;\n            inner(\n                map.value_ty(),\n                types,\n                checked_references,\n                format!(\"{path}.<map_value>\"),\n                mode,\n                follow_named_references,\n            )?;\n        }\n        DataType::List(list) => {\n            inner(\n                &list.ty,\n                types,\n                checked_references,\n                format!(\"{path}.<list_item>\"),\n                mode,\n                follow_named_references,\n            )?;\n        }\n        DataType::Struct(strct) => {\n            validate_container_attributes(\n                &strct.attributes,\n                types,\n                checked_references,\n                &path,\n                mode,\n            )?;\n            if let Some(attrs) = SerdeContainerAttrs::from_attributes(&strct.attributes)? {\n                if attrs.variant_identifier || attrs.field_identifier {\n                    return Err(Error::invalid_phased_type_usage(\n                        path,\n                        \"`#[serde(variant_identifier)]` and `#[serde(field_identifier)]` are only valid on enums\",\n                    ));\n                }\n\n                if attrs.untagged {\n                    return Err(Error::invalid_phased_type_usage(\n                        path,\n                        \"`#[serde(untagged)]` is only valid on enums\",\n                    ));\n                }\n\n                if attrs.content.is_some() {\n                    return Err(Error::invalid_phased_type_usage(\n                        path,\n                        \"`#[serde(content = ...)]` is only valid on enums\",\n                    ));\n                }\n\n                if attrs.tag.is_some() && !matches!(&strct.fields, Fields::Named(_)) {\n                    return Err(Error::invalid_phased_type_usage(\n                        path,\n                        \"`#[serde(tag = ...)]` on structs requires named fields\",\n                    ));\n                }\n            }\n\n            match &strct.fields {\n                Fields::Unit => {}\n                Fields::Unnamed(unnamed) => {\n                    for (idx, (_, ty)) in unnamed\n                        .fields\n                        .iter()\n                        .filter_map(|field| field.ty.as_ref().map(|ty| (field, ty)))\n                        .enumerate()\n                    {\n                        inner(\n                            ty,\n                            types,\n                            checked_references,\n                            format!(\"{path}[{idx}]\"),\n                            mode,\n                            follow_named_references,\n                        )?;\n                    }\n                }\n                Fields::Named(named) => {\n                    for (name, (field, _)) in named\n                        .fields\n                        .iter()\n                        .filter_map(|(name, field)| field.ty.as_ref().map(|ty| (name, (field, ty))))\n                    {\n                        validate_field_attributes(field, format!(\"{path}.{name}\"), mode)?;\n                    }\n                    for (name, (_, ty)) in named\n                        .fields\n                        .iter()\n                        .filter_map(|(name, field)| field.ty.as_ref().map(|ty| (name, (field, ty))))\n                    {\n                        inner(\n                            ty,\n                            types,\n                            checked_references,\n                            format!(\"{path}.{name}\"),\n                            mode,\n                            follow_named_references,\n                        )?;\n                    }\n                }\n            }\n        }\n        DataType::Enum(enm) => {\n            validate_container_attributes(&enm.attributes, types, checked_references, &path, mode)?;\n            if SerdeContainerAttrs::from_attributes(&enm.attributes)?\n                .is_some_and(|attrs| attrs.default)\n            {\n                return Err(Error::invalid_phased_type_usage(\n                    path,\n                    \"`#[serde(default)]` is only valid on structs\",\n                ));\n            }\n            validate_identifier_enum(enm, &path, mode)?;\n            validate_enum(enm, types, path.clone(), mode)?;\n\n            for (variant_name, variant) in &enm.variants {\n                validate_variant_attributes(variant, format!(\"{path}::{variant_name}\"), mode)?;\n                match &variant.fields {\n                    Fields::Unit => {}\n                    Fields::Named(named) => {\n                        for (name, (field, _)) in named.fields.iter().filter_map(|(name, field)| {\n                            field.ty.as_ref().map(|ty| (name, (field, ty)))\n                        }) {\n                            validate_field_attributes(\n                                field,\n                                format!(\"{path}::{variant_name}.{name}\"),\n                                mode,\n                            )?;\n                        }\n                        for (name, (_, ty)) in named.fields.iter().filter_map(|(name, field)| {\n                            field.ty.as_ref().map(|ty| (name, (field, ty)))\n                        }) {\n                            inner(\n                                ty,\n                                types,\n                                checked_references,\n                                format!(\"{path}::{variant_name}.{name}\"),\n                                mode,\n                                follow_named_references,\n                            )?;\n                        }\n                    }\n                    Fields::Unnamed(unnamed) => {\n                        for (idx, (field, _)) in unnamed\n                            .fields\n                            .iter()\n                            .filter_map(|field| field.ty.as_ref().map(|ty| (field, ty)))\n                            .enumerate()\n                        {\n                            validate_field_attributes(\n                                field,\n                                format!(\"{path}::{variant_name}[{idx}]\"),\n                                mode,\n                            )?;\n                        }\n                        for (idx, (_, ty)) in unnamed\n                            .fields\n                            .iter()\n                            .filter_map(|field| field.ty.as_ref().map(|ty| (field, ty)))\n                            .enumerate()\n                        {\n                            inner(\n                                ty,\n                                types,\n                                checked_references,\n                                format!(\"{path}::{variant_name}[{idx}]\"),\n                                mode,\n                                follow_named_references,\n                            )?;\n                        }\n                    }\n                }\n            }\n        }\n        DataType::Tuple(tuple) => {\n            for (idx, ty) in tuple.elements.iter().enumerate() {\n                inner(\n                    ty,\n                    types,\n                    checked_references,\n                    format!(\"{path}[{idx}]\"),\n                    mode,\n                    follow_named_references,\n                )?;\n            }\n        }\n        DataType::Intersection(types_) => {\n            for (idx, ty) in types_.iter().enumerate() {\n                inner(\n                    ty,\n                    types,\n                    checked_references,\n                    format!(\"{path}.<intersection_{idx}>\"),\n                    mode,\n                    follow_named_references,\n                )?;\n            }\n        }\n        DataType::Reference(reference) => match reference {\n            Reference::Named(reference) => {\n                if let NamedReferenceType::Reference {\n                    generics: reference_generics,\n                    ..\n                } = &reference.inner\n                {\n                    for (_, dt) in reference_generics {\n                        inner(\n                            dt,\n                            types,\n                            checked_references,\n                            format!(\"{path}.<generic>\"),\n                            mode,\n                            follow_named_references,\n                        )?;\n                    }\n                }\n\n                if follow_named_references\n                    && !checked_references.contains(&Reference::Named(reference.clone()))\n                {\n                    let reference_key = Reference::Named(reference.clone());\n                    checked_references.insert(reference_key);\n                    if let Some(ty) = named_reference_ty(reference, types) {\n                        let name = types\n                            .get(reference)\n                            .map(|ndt| ndt.name.to_string())\n                            .unwrap_or_else(|| path.clone());\n                        inner(\n                            ty,\n                            types,\n                            checked_references,\n                            name,\n                            mode,\n                            follow_named_references,\n                        )?;\n                    }\n                }\n            }\n            Reference::Opaque(reference) => {\n                if let Some(phased) = reference.downcast_ref::<PhasedTy>() {\n                    if mode == ApplyMode::Unified {\n                        return Err(Error::invalid_phased_type_usage(\n                            path,\n                            \"`specta_serde::Phased<Serialize, Deserialize>` requires `PhasesFormat`\",\n                        ));\n                    }\n\n                    inner(\n                        &phased.serialize,\n                        types,\n                        checked_references,\n                        format!(\"{path}.<phased_serialize>\"),\n                        mode,\n                        follow_named_references,\n                    )?;\n                    inner(\n                        &phased.deserialize,\n                        types,\n                        checked_references,\n                        format!(\"{path}.<phased_deserialize>\"),\n                        mode,\n                        follow_named_references,\n                    )?;\n                }\n            }\n        },\n        DataType::Generic(_) | DataType::Primitive(_) => {}\n    }\n\n    Ok(())\n}\n\nfn validate_identifier_enum(enm: &Enum, path: &str, mode: ApplyMode) -> Result<(), Error> {\n    let Some(attrs) = SerdeContainerAttrs::from_attributes(&enm.attributes)? else {\n        return Ok(());\n    };\n\n    if !attrs.variant_identifier && !attrs.field_identifier {\n        return Ok(());\n    }\n\n    if attrs.variant_identifier && attrs.field_identifier {\n        return Err(Error::invalid_phased_type_usage(\n            path,\n            \"`variant_identifier` and `field_identifier` cannot be used together\",\n        ));\n    }\n\n    if mode == ApplyMode::Unified {\n        return Err(Error::invalid_phased_type_usage(\n            path,\n            \"identifier enums require `PhasesFormat` because they widen deserialize-only input shape\",\n        ));\n    }\n\n    if attrs.variant_identifier\n        && let Some((name, _)) = enm\n            .variants\n            .iter()\n            .find(|(_, variant)| !matches!(&variant.fields, Fields::Unit))\n    {\n        return Err(Error::invalid_phased_type_usage(\n            path,\n            format!(\n                \"`variant_identifier` requires all unit variants, but variant `{name}` is not unit\"\n            ),\n        ));\n    }\n\n    if attrs.field_identifier {\n        let variants = &enm.variants;\n        for (idx, (name, variant)) in variants.iter().enumerate() {\n            let is_last = idx + 1 == variants.len();\n            match &variant.fields {\n                Fields::Unit => {}\n                Fields::Unnamed(unnamed) if is_last && unnamed.fields.len() == 1 => {}\n                _ => {\n                    return Err(Error::invalid_phased_type_usage(\n                        path,\n                        format!(\n                            \"`field_identifier` requires unit variants and an optional final newtype fallback; invalid variant `{name}`\"\n                        ),\n                    ));\n                }\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn validate_container_attributes(\n    attrs: &specta::datatype::Attributes,\n    types: &Types,\n    checked_references: &mut HashSet<Reference>,\n    path: &str,\n    mode: ApplyMode,\n) -> Result<(), Error> {\n    if let Some(parsed) = SerdeContainerAttrs::from_attributes(attrs)?\n        && parsed.from.is_some()\n        && parsed.try_from.is_some()\n    {\n        return Err(Error::invalid_conversion_usage(\n            path,\n            \"`from` and `try_from` cannot be used together\",\n        ));\n    }\n\n    if let Some(conversions) = SerdeContainerAttrs::from_attributes(attrs)? {\n        for (suffix, target) in [\n            (\"<serde_into>\", conversions.resolved_into.as_ref()),\n            (\"<serde_from>\", conversions.resolved_from.as_ref()),\n            (\"<serde_try_from>\", conversions.resolved_try_from.as_ref()),\n        ] {\n            if let Some(target) = target {\n                inner(\n                    target,\n                    types,\n                    checked_references,\n                    format!(\"{path}.{suffix}\"),\n                    mode,\n                    true,\n                )?;\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn validate_variant_attributes(\n    variant: &Variant,\n    path: String,\n    mode: ApplyMode,\n) -> Result<(), Error> {\n    let Some(serde_attrs) = SerdeVariantAttrs::from_attributes(&variant.attributes)? else {\n        return Ok(());\n    };\n\n    let has_type_override = has_type_override(&variant.attributes);\n\n    if serde_attrs.has_serialize_with {\n        ensure_codec_override(has_type_override, &path, \"serialize_with\")?;\n    }\n    if serde_attrs.has_deserialize_with {\n        ensure_codec_override(has_type_override, &path, \"deserialize_with\")?;\n    }\n    if serde_attrs.has_with {\n        ensure_codec_override(has_type_override, &path, \"with\")?;\n    }\n\n    if mode == ApplyMode::Unified\n        && serde_attrs.untagged\n        && serde_attrs.skip_serializing != serde_attrs.skip_deserializing\n    {\n        return Err(Error::invalid_phased_type_usage(\n            path,\n            \"phase-specific `#[serde(untagged)]` variants require `PhasesFormat` because unified mode would drop one branch\",\n        ));\n    }\n\n    Ok(())\n}\n\nfn validate_field_attributes(field: &Field, path: String, mode: ApplyMode) -> Result<(), Error> {\n    let Some(serde_attrs) = SerdeFieldAttrs::from_attributes(&field.attributes)? else {\n        return Ok(());\n    };\n\n    if mode == ApplyMode::Unified\n        && let (Some(serialize), Some(deserialize)) = (\n            serde_attrs.rename_serialize.as_deref(),\n            serde_attrs.rename_deserialize.as_deref(),\n        )\n        && serialize != deserialize\n    {\n        return Err(Error::incompatible_rename(\n            \"field rename\",\n            path,\n            Some(serialize.to_string()),\n            Some(deserialize.to_string()),\n        ));\n    }\n\n    let has_type_override = has_type_override(&field.attributes);\n\n    if serde_attrs.has_serialize_with {\n        ensure_codec_override(has_type_override, &path, \"serialize_with\")?;\n    }\n    if serde_attrs.has_deserialize_with {\n        ensure_codec_override(has_type_override, &path, \"deserialize_with\")?;\n    }\n    if serde_attrs.has_with {\n        ensure_codec_override(has_type_override, &path, \"with\")?;\n    }\n\n    if mode == ApplyMode::Unified && serde_attrs.skip_serializing_if.is_some() {\n        return Err(Error::invalid_phased_type_usage(\n            path,\n            \"`skip_serializing_if` requires `PhasesFormat` because unified mode cannot represent conditional omission\",\n        ));\n    }\n\n    Ok(())\n}\n\nfn ensure_codec_override(\n    has_type_override: bool,\n    path: &str,\n    attr: &'static str,\n) -> Result<(), Error> {\n    if has_type_override {\n        return Ok(());\n    }\n\n    Err(Error::unsupported_serde_custom_codec(\n        path.to_string(),\n        attr,\n    ))\n}\n\nfn has_type_override(attributes: &specta::datatype::Attributes) -> bool {\n    attributes\n        .get_named_as::<bool>(\"specta:type_override\")\n        .copied()\n        .unwrap_or(false)\n}\n\nfn validate_enum(enm: &Enum, types: &Types, path: String, mode: ApplyMode) -> Result<(), Error> {\n    let valid_variants = enm\n        .variants\n        .iter()\n        .filter(|(_, variant)| !variant.skip)\n        .count();\n    if valid_variants == 0 && !&enm.variants.is_empty() {\n        return Err(Error::invalid_usage_of_skip(\n            path,\n            \"all variants are skipped, resulting in an invalid non-empty enum\",\n        ));\n    }\n\n    let repr = EnumRepr::from_attrs(&enm.attributes)?;\n\n    validate_untagged_variants(enm, &path)?;\n    validate_other_variant(enm, &path, &repr, mode)?;\n\n    if matches!(repr, EnumRepr::Internal { .. }) {\n        validate_internally_tag_enum(enm, types, path)?;\n    }\n\n    Ok(())\n}\n\nfn validate_untagged_variants(enm: &Enum, path: &str) -> Result<(), Error> {\n    let mut seen_untagged = false;\n\n    for (name, variant) in &enm.variants {\n        let is_untagged = SerdeVariantAttrs::from_attributes(&variant.attributes)?\n            .is_some_and(|attrs| attrs.untagged);\n\n        if is_untagged {\n            seen_untagged = true;\n            continue;\n        }\n\n        if seen_untagged && !variant.skip {\n            return Err(Error::invalid_phased_type_usage(\n                path,\n                format!(\n                    \"`#[serde(untagged)]` variants must be ordered last, but variant `{name}` appears after an untagged variant\"\n                ),\n            ));\n        }\n    }\n\n    Ok(())\n}\n\nfn validate_other_variant(\n    enm: &Enum,\n    path: &str,\n    repr: &EnumRepr,\n    mode: ApplyMode,\n) -> Result<(), Error> {\n    let mut other_variants = Vec::new();\n    for (name, variant) in &enm.variants {\n        if SerdeVariantAttrs::from_attributes(&variant.attributes)?.is_some_and(|attrs| attrs.other)\n        {\n            other_variants.push((name, variant));\n        }\n    }\n\n    if other_variants.is_empty() {\n        return Ok(());\n    }\n\n    if mode == ApplyMode::Unified {\n        return Err(Error::invalid_phased_type_usage(\n            path,\n            \"`#[serde(other)]` requires `PhasesFormat` because it widens deserialize-only input shape\",\n        ));\n    }\n\n    if !matches!(repr, EnumRepr::Internal { .. } | EnumRepr::Adjacent { .. }) {\n        return Err(Error::invalid_phased_type_usage(\n            path,\n            \"`#[serde(other)]` requires a tagged enum representation (`tag` with optional `content`)\",\n        ));\n    }\n\n    if other_variants.len() > 1 {\n        return Err(Error::invalid_phased_type_usage(\n            path,\n            \"`#[serde(other)]` can only be used on a single enum variant\",\n        ));\n    }\n\n    let (name, variant) = other_variants[0];\n    if !matches!(&variant.fields, Fields::Unit) {\n        return Err(Error::invalid_phased_type_usage(\n            path,\n            format!(\"`#[serde(other)]` variant `{name}` must be a unit variant\"),\n        ));\n    }\n\n    Ok(())\n}\n\nfn validate_internally_tag_enum(enm: &Enum, types: &Types, path: String) -> Result<(), Error> {\n    for (variant_name, variant) in &enm.variants {\n        validate_internally_tag_variant(enm, variant_name, variant, types, &path)?;\n    }\n\n    Ok(())\n}\n\nfn validate_internally_tag_variant(\n    enm: &Enum,\n    variant_name: &str,\n    variant: &Variant,\n    types: &Types,\n    path: &str,\n) -> Result<(), Error> {\n    let _ = enm;\n    if SerdeVariantAttrs::from_attributes(&variant.attributes)?.is_some_and(|attrs| attrs.untagged)\n    {\n        return Ok(());\n    }\n\n    match &variant.fields {\n        Fields::Unit | Fields::Named(_) => Ok(()),\n        Fields::Unnamed(unnamed) => {\n            let mut fields = unnamed\n                .fields\n                .iter()\n                .filter_map(|field| field.ty.as_ref().map(|ty| (field, ty)));\n            let Some((_, first_field)) = fields.next() else {\n                return Ok(());\n            };\n\n            if fields.next().is_some() {\n                return Err(Error::invalid_internally_tagged_enum(\n                    path,\n                    variant_name,\n                    \"tuple variant must have at most one non-skipped field\",\n                ));\n            }\n\n            validate_internally_tag_enum_datatype(first_field, types, path, variant_name)\n        }\n    }\n}\n\nfn validate_internally_tag_enum_datatype(\n    ty: &DataType,\n    types: &Types,\n    path: &str,\n    variant_name: &str,\n) -> Result<(), Error> {\n    match ty {\n        DataType::Map(_) => Ok(()),\n        DataType::Struct(_) => Ok(()),\n        DataType::Reference(Reference::Named(reference))\n            if matches!(reference.inner, NamedReferenceType::Inline { .. }) =>\n        {\n            if let Some(ty) = named_reference_ty(reference, types) {\n                validate_internally_tag_enum_datatype(ty, types, path, variant_name)?;\n            }\n\n            Ok(())\n        }\n        DataType::Enum(enm) => match EnumRepr::from_attrs(&enm.attributes)? {\n            EnumRepr::Untagged => validate_internally_tag_enum(enm, types, path.to_string()),\n            EnumRepr::External | EnumRepr::Internal { .. } | EnumRepr::Adjacent { .. } => Ok(()),\n        },\n        DataType::Tuple(tuple) if tuple.elements.is_empty() => Ok(()),\n        DataType::Reference(Reference::Named(reference)) => {\n            if let Some(ty) = named_reference_ty(reference, types) {\n                validate_internally_tag_enum_datatype(ty, types, path, variant_name)?;\n            }\n\n            Ok(())\n        }\n        DataType::Reference(Reference::Opaque(_))\n        | DataType::Generic(_)\n        | DataType::Intersection(_)\n        | DataType::Tuple(_)\n        | DataType::Primitive(_)\n        | DataType::List(_)\n        | DataType::Nullable(_) => Err(Error::invalid_internally_tagged_enum(\n            path,\n            variant_name,\n            \"payload cannot be merged with an internal tag\",\n        )),\n    }\n}\n\nfn named_reference_ty<'a>(\n    reference: &'a specta::datatype::NamedReference,\n    types: &'a Types,\n) -> Option<&'a DataType> {\n    match &reference.inner {\n        NamedReferenceType::Inline { dt, .. } => Some(dt),\n        NamedReferenceType::Reference { .. } => types.get(reference)?.ty.as_ref(),\n        NamedReferenceType::Recursive => None,\n    }\n}\n"
  },
  {
    "path": "specta-swift/Cargo.toml",
    "content": "[package]\nname = \"specta-swift\"\ndescription = \"Export your Rust types to Swift\"\nversion = \"0.0.2\"\nauthors = [\"Jamie Pine <hello@jamiepine.com>\", \"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-swift/latest/specta-swift\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"swift\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[lints]\nworkspace = true\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\", features = [\"derive\", \"uuid\", \"chrono\"] }\nthiserror = \"2.0\"\nserde = { version = \"1.0\", features = [\"derive\"] }\n\n[dev-dependencies]\ninsta = \"1.47\"\ntrybuild = \"1.0\"\nspecta-serde = { version = \"=0.0.11\", path = \"../specta-serde\" }\nuuid = \"1.23.1\"\nchrono = { version = \"0.4.44\", features = [\"clock\"] }\n\n[[example]]\nname = \"basic_types\"\npath = \"examples/basic_types.rs\"\n\n[[example]]\nname = \"advanced_unions\"\npath = \"examples/advanced_unions.rs\"\n\n[[example]]\nname = \"configuration_options\"\npath = \"examples/configuration_options.rs\"\n\n[[example]]\nname = \"special_types\"\npath = \"examples/special_types.rs\"\n\n[[example]]\nname = \"string_enums\"\npath = \"examples/string_enums.rs\"\n\n[[example]]\nname = \"comprehensive_demo\"\npath = \"examples/comprehensive_demo.rs\"\n"
  },
  {
    "path": "specta-swift/README.md",
    "content": "# Specta Swift\n\n[![Crates.io](https://img.shields.io/crates/v/specta-swift.svg)](https://crates.io/crates/specta-swift)\n[![Documentation](https://docs.rs/specta-swift/badge.svg)](https://docs.rs/specta-swift)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA Rust crate for exporting Rust types to Swift, built on top of [Specta](https://github.com/specta-rs/specta). Generate idiomatic Swift code from your Rust type definitions with support for complex unions, generics, and nested structures.\n\n## Features\n\n- 🚀 **Zero Runtime Cost** - Compile-time type generation\n- 🎯 **Idiomatic Swift** - Generates clean, Swift-idiomatic code\n- 🔄 **Complex Unions** - Full support for Rust enums with all variant types\n- 🧬 **Generics** - Single and multiple generic type parameters\n- 🔗 **Recursive Types** - Self-referencing and circular type definitions\n- ⚙️ **Highly Configurable** - Naming conventions, indentation styles, optional syntax\n- 📦 **Type Safety** - Leverages Specta's robust type introspection\n- 🧪 **Well Tested** - Comprehensive test suite with snapshot testing\n- 🕒 **Special Types** - Built-in support for Duration with helper structs\n- 📝 **Documentation** - Preserves and formats Rust doc comments in Swift\n- 🔧 **Custom Codable** - Automatic generation of custom Codable implementations\n- 🎨 **Protocol Conformance** - Support for additional Swift protocols\n- 📁 **File Export** - Direct export to Swift files with custom headers\n\n## Quick Start\n\nAdd `specta-swift` and `specta-serde` to your `Cargo.toml`:\n\n```toml\n[dependencies]\nspecta = { version = \"2.0\", features = [\"derive\"] }\nspecta-serde = \"0.0.11\"\nspecta-swift = \"0.1\"\n```\n\nDefine your Rust types:\n\n```rust\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n#[derive(Type)]\nstruct User {\n    id: u32,\n    name: String,\n    email: Option<String>,\n    role: UserRole,\n}\n\n#[derive(Type)]\nenum UserRole {\n    Guest,\n    User { permissions: Vec<String> },\n    Admin { level: u8, department: String },\n}\n\n#[derive(Type)]\nenum ApiResult<T> {\n    Success { data: T, status: u16 },\n    Error { message: String, code: u32 },\n    Loading { progress: f32 },\n}\n```\n\nGenerate Swift code:\n\n```rust\nfn main() {\n    let types = Types::default()\n        .register::<User>()\n        .register::<UserRole>()\n        .register::<ApiResult<String>>();\n\n    let swift = Swift::default();\n    swift\n        .export_to(\"./Types.swift\", &types, specta_serde::format)\n        .unwrap();\n}\n```\n\nThis generates:\n\n```swift\n// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\nenum ApiResult<T>: Codable {\n    case success(data: T, status: UInt16)\n    case error(message: String, code: UInt32)\n    case loading(progress: Float)\n}\n\nstruct User: Codable {\n    let id: UInt32\n    let name: String\n    let email: String?\n    let role: UserRole\n}\n\nenum UserRole: Codable {\n    case guest\n    case user(permissions: [String])\n    case admin(level: UInt8, department: String)\n}\n```\n\n## Advanced Features\n\n### Complex Union Types\n\nSpecta Swift supports all Rust enum variant types:\n\n```rust\n#[derive(Type)]\nenum ComplexUnion {\n    // Unit variant\n    None,\n\n    // Tuple variant\n    Tuple(String, u32, bool),\n\n    // Named fields variant\n    NamedFields {\n        id: u32,\n        name: String,\n        active: bool,\n    },\n\n    // Nested struct variant\n    UserStruct(User),\n\n    // Nested enum variant\n    UserType(UserType),\n\n    // Complex nested structure\n    Complex {\n        user: User,\n        metadata: Vec<String>,\n        settings: Option<Admin>,\n    },\n}\n```\n\nGenerates:\n\n```swift\nenum ComplexUnion: Codable {\n    case none\n    case tuple(String, UInt32, Bool)\n    case namedfields(id: UInt32, name: String, active: Bool)\n    case userstruct(User)\n    case usertype(UserType)\n    case complex(user: User, metadata: [String], settings: Admin?)\n}\n```\n\n### Generic Types\n\nFull support for generic types with multiple parameters:\n\n```rust\n#[derive(Type)]\nenum DatabaseResult<T, E> {\n    Ok { data: T, affected_rows: u64 },\n    Err { error: E, query: String },\n    ConnectionError { host: String, port: u16 },\n}\n```\n\n### Recursive Types\n\nSelf-referencing types are fully supported:\n\n```rust\n#[derive(Type)]\nenum Shape {\n    None,\n    Point(f64, f64),\n    Circle { center: Point, radius: f64 },\n    Complex { shapes: Vec<Shape>, metadata: Option<String> },\n}\n```\n\n## Configuration\n\n### Naming Conventions\n\n```rust\nuse specta_swift::{Swift, NamingConvention};\n\n// PascalCase (default)\nlet swift = Swift::default();\n\n// camelCase\nlet swift = Swift::new().naming(NamingConvention::CamelCase);\n\n// snake_case\nlet swift = Swift::new().naming(NamingConvention::SnakeCase);\n```\n\n### Optional Styles\n\n```rust\nuse specta_swift::{Swift, OptionalStyle};\n\n// T? syntax (default)\nlet swift = Swift::default();\n\n// Optional<T> syntax\nlet swift = Swift::new().optionals(OptionalStyle::Optional);\n```\n\n### Indentation Styles\n\n```rust\nuse specta_swift::{Swift, IndentStyle};\n\n// 4 spaces (default)\nlet swift = Swift::default();\n\n// 2 spaces\nlet swift = Swift::new().indent(IndentStyle::Spaces(2));\n\n// Tabs\nlet swift = Swift::new().indent(IndentStyle::Tabs);\n```\n\n### Custom Headers\n\n```rust\nlet swift = Swift::new()\n    .header(\"// Generated by MyApp v2.0\\n// Custom header with app info\\n// DO NOT EDIT MANUALLY\")\n    .naming(NamingConvention::SnakeCase);\n```\n\n### Additional Protocols\n\n```rust\nlet swift = Swift::new()\n    .add_protocol(\"Equatable\")\n    .add_protocol(\"Hashable\")\n    .add_protocol(\"CustomStringConvertible\");\n```\n\n### Serde Integration\n\n```rust\nlet swift = Swift::new()\n    .add_protocol(\"CustomDebugStringConvertible\");\n\nlet output = swift.export(&types, specta_serde::format).unwrap();\n```\n\n## Type Mapping\n\n| Rust Type                 | Swift Type                            | Notes                          |\n| ------------------------- | ------------------------------------- | ------------------------------ |\n| `i8`, `i16`, `i32`, `i64` | `Int8`, `Int16`, `Int32`, `Int64`     | Signed integers                |\n| `u8`, `u16`, `u32`, `u64` | `UInt8`, `UInt16`, `UInt32`, `UInt64` | Unsigned integers              |\n| `f32`, `f64`              | `Float`, `Double`                     | Floating point numbers         |\n| `bool`                    | `Bool`                                | Boolean values                 |\n| `char`                    | `Character`                           | Single Unicode character       |\n| `String`                  | `String`                              | UTF-8 strings                  |\n| `Option<T>`               | `T?` or `Optional<T>`                 | Optional values (configurable) |\n| `Vec<T>`                  | `[T]`                                 | Arrays                         |\n| `Vec<Vec<T>>`             | `[[T]]`                               | Nested arrays                  |\n| `HashMap<K, V>`           | `[K: V]`                              | Dictionaries                   |\n| `(T, U)`                  | `(T, U)`                              | Tuples                         |\n| `std::time::Duration`     | `RustDuration` + helper               | With automatic helper struct   |\n| `struct`                  | `struct`                              | Structures                     |\n| `enum`                    | `enum`                                | Enums with custom Codable      |\n\n## Special Features\n\n### Duration Support\n\n`std::time::Duration` types are automatically converted to a `RustDuration` helper struct:\n\n```rust\n#[derive(Type)]\nstruct Metrics {\n    processing_time: Duration,\n    timeout: Duration,\n}\n```\n\nGenerates:\n\n```swift\n// MARK: - Duration Helper\npublic struct RustDuration: Codable {\n    public let secs: UInt64\n    public let nanos: UInt32\n\n    public var timeInterval: TimeInterval {\n        return Double(secs) + Double(nanos) / 1_000_000_000.0\n    }\n}\n\npublic struct Metrics: Codable {\n    public let processingTime: RustDuration\n    public let timeout: RustDuration\n}\n```\n\n### Documentation Support\n\nRust doc comments are preserved and formatted for Swift:\n\n```rust\n/// A comprehensive user account\n///\n/// This struct represents a complete user account with all necessary\n/// information for authentication and personalization.\n///\n/// # Security Notes\n/// - The password field should never be logged\n/// - All timestamps are in UTC\n#[derive(Type)]\nstruct User {\n    /// Unique identifier\n    id: u32,\n    /// User's display name\n    name: String,\n}\n```\n\nGenerates:\n\n```swift\n/// A comprehensive user account\n///\n/// This struct represents a complete user account with all necessary\n/// information for authentication and personalization.\n///\n/// # Security Notes\n/// - The password field should never be logged\n/// - All timestamps are in UTC\npublic struct User: Codable {\n    /// Unique identifier\n    public let id: UInt32\n    /// User's display name\n    public let name: String\n}\n```\n\n## Examples\n\nCheck out the `examples/` directory for comprehensive examples:\n\n- `basic_types.rs` - Basic primitive types and their Swift equivalents\n- `advanced_unions.rs` - Complex enum scenarios and custom Codable implementations\n- `configuration_options.rs` - All Swift exporter configuration settings\n- `special_types.rs` - Duration types and special type handling\n- `string_enums.rs` - String enums and custom Codable patterns\n- `comprehensive_demo.rs` - Complete feature showcase (28 types!)\n- `simple_usage.rs` - Quick start example\n- `comments_example.rs` - Documentation and comment support\n\nRun any example:\n\n```bash\ncargo run --example basic_types\ncargo run --example comprehensive_demo\n```\n\nGenerated Swift files are saved to `examples/generated/` for inspection.\n\n## Testing\n\nRun the test suite:\n\n```bash\ncargo test\n```\n\nThe test suite includes:\n\n- Basic type generation tests\n- Comprehensive union type tests\n- Advanced recursive type tests\n- Duration type mapping tests\n- Custom Codable implementation tests\n- Configuration option tests\n- Snapshot testing for generated code\n- String enum handling tests\n- Generic type parameter tests\n\n## Contributing\n\nContributions are welcome! Please see the main [Specta repository](https://github.com/specta-rs/specta) for contribution guidelines.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Related Projects\n\n- [Specta](https://github.com/specta-rs/specta) - Core type introspection library\n- [Specta TypeScript](https://github.com/specta-rs/specta/tree/main/specta-typescript) - TypeScript exporter\n- [Specta Go](https://github.com/specta-rs/specta/tree/main/specta-go) - Go exporter\n"
  },
  {
    "path": "specta-swift/Types.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic struct MyOtherType: Codable {\n    public let otherField: String\n\n    private enum CodingKeys: String, CodingKey {\n        case otherField = \"other_field\"\n    }\n}\n\npublic struct MyType: Codable {\n    public let field: MyOtherType\n}\n\n"
  },
  {
    "path": "specta-swift/examples/README.md",
    "content": "# specta-swift Examples\n\nThis directory contains comprehensive examples demonstrating ALL the functionality of the `specta-swift` library. Each example focuses on different aspects of the Swift code generation capabilities.\n\n## 📚 Available Examples\n\n### 1. **`basic_types.rs`** - Fundamental Type Mappings\n\nDemonstrates basic Rust to Swift type conversions:\n\n- ✅ Primitive types (i8, u32, f64, bool, char, String)\n- ✅ Optional types (Option<T> → T?)\n- ✅ Collections (Vec<T> → [T])\n- ✅ Nested collections (Vec<Vec<T>> → [[T]])\n- ✅ Tuple types ((String, String) → (String, String))\n- ✅ Simple enums with different variant types\n- ✅ Generic structs with type parameters\n- ✅ Complex nested struct relationships\n\n**Run:** `cargo run --example basic_types`  \n**Output:** `examples/generated/BasicTypes.swift`\n\n### 2. **`advanced_unions.rs`** - Complex Enum Scenarios\n\nShowcases advanced enum patterns and custom Codable implementations:\n\n- ✅ Complex enums with mixed variant types\n- ✅ Generic enums with type parameters\n- ✅ Recursive type definitions (Tree<T>)\n- ✅ Nested struct references in enum variants\n- ✅ String enums with automatic Codable\n- ✅ Mixed enums (both simple and complex variants)\n- ✅ Custom Codable implementations for complex enums\n- ✅ Struct generation for named field variants\n\n**Run:** `cargo run --example advanced_unions`  \n**Output:** `examples/generated/AdvancedUnions.swift`\n\n### 3. **`configuration_options.rs`** - All Swift Exporter Settings\n\nComprehensive demonstration of every configuration option:\n\n- ✅ Custom headers and documentation\n- ✅ Naming conventions (PascalCase, camelCase, snake_case)\n- ✅ Indentation styles (spaces, tabs, different widths)\n- ✅ Generic type styles (protocol constraints vs typealias)\n- ✅ Optional type styles (question mark vs Optional<T>)\n- ✅ Additional protocol conformance\n- ✅ Serde validation settings\n- ✅ Combined custom configurations\n\n**Run:** `cargo run --example configuration_options`  \n**Output:** `examples/generated/` (multiple configuration files)\n\n### 4. **`special_types.rs`** - Duration and Special Type Handling\n\nDemonstrates special type conversions and helper generation:\n\n- ✅ Duration type mapping to RustDuration helper\n- ✅ Automatic helper struct generation\n- ✅ timeInterval property for Swift integration\n- ✅ Duration fields in structs and enum variants\n- ✅ Optional Duration fields\n- ✅ Performance metrics with timing information\n- ✅ Complex timing-related data structures\n\n**Run:** `cargo run --example special_types`  \n**Output:** `examples/generated/SpecialTypes.swift`\n\n### 5. **`string_enums.rs`** - String Enums and Custom Codable\n\nFocuses on enum patterns and Codable implementations:\n\n- ✅ Pure string enums (String, Codable)\n- ✅ Mixed enums with both simple and complex variants\n- ✅ Custom Codable implementations for complex enums\n- ✅ Struct generation for named field variants\n- ✅ Generic enum support\n- ✅ Proper Swift enum case naming\n- ✅ Automatic protocol conformance\n\n**Run:** `cargo run --example string_enums`  \n**Output:** `examples/generated/StringEnums.swift`\n\n### 6. **`comprehensive_demo.rs`** - Complete Feature Showcase\n\nThe ultimate example demonstrating EVERY feature in a realistic application:\n\n- ✅ All basic and advanced type patterns\n- ✅ Complex nested relationships\n- ✅ User management with permissions\n- ✅ Task management with status tracking\n- ✅ File attachment handling\n- ✅ Comment and review systems\n- ✅ API response patterns\n- ✅ System monitoring types\n- ✅ Health monitoring and metrics\n- ✅ Pagination and metadata\n\n**Run:** `cargo run --example comprehensive_demo`  \n**Output:** `examples/generated/ComprehensiveDemo.swift`\n\n### 7. **`simple_usage.rs`** - Quick Start Example\n\nA simple, focused example for getting started quickly:\n\n- ✅ Basic struct and enum definitions\n- ✅ Default Swift configuration\n- ✅ Custom configuration demonstration\n- ✅ File export functionality\n\n**Run:** `cargo run --example simple_usage`  \n**Output:** `examples/generated/SimpleTypes.swift`, `examples/generated/CustomTypes.swift`\n\n### 8. **`comments_example.rs`** - Documentation and Comments\n\nDemonstrates comprehensive documentation support:\n\n- ✅ Multi-line type documentation\n- ✅ Field-level documentation\n- ✅ Complex technical descriptions\n- ✅ Swift-compatible doc comments\n- ✅ Bullet points and formatting\n\n**Run:** `cargo run --example comments_example`  \n**Output:** `examples/generated/CommentsExample.swift`\n\n## 🚀 Quick Start\n\nTo run any example:\n\n```bash\ncd specta-swift\ncargo run --example <example_name>\n```\n\nFor example:\n\n```bash\ncargo run --example basic_types\ncargo run --example comprehensive_demo\n```\n\n## 📁 Generated Files\n\nEach example generates Swift files in the `examples/generated/` directory that you can inspect:\n\n- `examples/generated/BasicTypes.swift` - From basic_types example\n- `examples/generated/AdvancedUnions.swift` - From advanced_unions example\n- `examples/generated/SpecialTypes.swift` - From special_types example\n- `examples/generated/StringEnums.swift` - From string_enums example\n- `examples/generated/ComprehensiveDemo.swift` - From comprehensive_demo example\n- `examples/generated/CommentsExample.swift` - From comments_example\n- `examples/generated/SimpleTypes.swift` & `examples/generated/CustomTypes.swift` - From simple_usage\n- Multiple configuration files from the configuration_options example\n\n## 🔍 Key Features Demonstrated\n\n### Type System Support\n\n- ✅ All Rust primitive types\n- ✅ Optional types with proper Swift syntax\n- ✅ Collections and nested collections\n- ✅ Tuple types\n- ✅ Generic types with constraints\n- ✅ Complex nested relationships\n\n### Enum Handling\n\n- ✅ Unit variants\n- ✅ Tuple variants\n- ✅ Named field variants\n- ✅ String enums with automatic Codable\n- ✅ Mixed enums with custom implementations\n- ✅ Generic enums\n- ✅ Recursive enum definitions\n\n### Special Types\n\n- ✅ Duration → RustDuration helper\n- ✅ Automatic helper struct generation\n- ✅ timeInterval property for Swift integration\n- ✅ Proper Codable implementations\n\n### Configuration Options\n\n- ✅ All naming conventions\n- ✅ All indentation styles\n- ✅ Generic type styles\n- ✅ Optional type styles\n- ✅ Additional protocols\n- ✅ Custom headers and documentation\n\n### Code Generation Quality\n\n- ✅ Proper Swift naming conventions\n- ✅ Comprehensive Codable implementations\n- ✅ Error handling in custom Codable\n- ✅ Documentation preservation\n- ✅ Clean, readable Swift code\n\n## 💡 Usage Tips\n\n1. **Start with `basic_types`** to understand fundamental mappings\n2. **Use `comprehensive_demo`** to see everything in action\n3. **Check `configuration_options`** to customize your output\n4. **Examine generated `.swift` files** to see the actual output\n5. **Use `special_types`** if you work with Duration types\n6. **Reference `string_enums`** for enum patterns\n\n## 🎯 Real-World Applications\n\nThese examples demonstrate patterns commonly used in:\n\n- 📱 iOS/macOS app development\n- 🔄 API client generation\n- 📊 Data serialization/deserialization\n- 🏗️ Cross-platform type sharing\n- 📈 Performance monitoring\n- 👥 User management systems\n- 📋 Task management applications\n\n---\n\n**Happy coding! 🎉** These examples should give you everything you need to leverage the full power of `specta-swift` in your projects.\n"
  },
  {
    "path": "specta-swift/examples/advanced_unions.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n/// Advanced example showcasing complex enum unions and their Swift representations\n///\n/// This example demonstrates how specta-swift handles complex enum scenarios\n/// including nested types, generic enums, and custom Codable implementations.\n\n/// Complex enum with mixed variant types\n#[derive(Type)]\nenum ApiResult<T, E> {\n    /// Success with data and metadata\n    Ok {\n        data: T,\n        status: u16,\n        headers: Option<Vec<(String, String)>>,\n        timestamp: String,\n    },\n    /// Error with detailed information\n    Err {\n        error: E,\n        code: u32,\n        message: String,\n        retry_after: Option<u64>,\n    },\n    /// Loading state with progress\n    Loading {\n        progress: f32,\n        estimated_completion: Option<String>,\n    },\n}\n\n/// Enum demonstrating different field patterns\n#[derive(Type)]\nenum Shape {\n    /// Unit variant\n    None,\n    /// Tuple variant\n    Point(f64, f64),\n    /// Named fields variant\n    Circle { center: Point, radius: f64 },\n    /// Referencing another struct\n    Rectangle(Rectangle),\n    /// Complex nested variant\n    Line {\n        start: Point,\n        end: Point,\n        style: LineStyle,\n    },\n    /// Very complex variant with multiple fields\n    Complex {\n        vertices: Vec<Point>,\n        fill_color: Color,\n        stroke_color: Option<Color>,\n        stroke_width: f64,\n        is_closed: bool,\n    },\n}\n\n/// Supporting structs for the Shape enum\n#[derive(Type)]\nstruct Point {\n    x: f64,\n    y: f64,\n}\n\n#[derive(Type)]\nstruct Rectangle {\n    top_left: Point,\n    bottom_right: Point,\n}\n\n#[derive(Type)]\nstruct LineStyle {\n    dash_pattern: Option<Vec<f64>>,\n    cap_style: String,\n    join_style: String,\n}\n\n#[derive(Type)]\nstruct Color {\n    red: f64,\n    green: f64,\n    blue: f64,\n    alpha: f64,\n}\n\n/// Generic enum with constraints\n#[derive(Type)]\nenum Container<T> {\n    Empty,\n    Single(T),\n    Multiple(Vec<T>),\n    KeyValue(Vec<(String, T)>),\n}\n\n/// Enum with recursive references\n#[derive(Type)]\nenum Tree<T> {\n    Leaf(T),\n    Branch {\n        left: Box<Tree<T>>,\n        right: Box<Tree<T>>,\n        value: T,\n    },\n}\n\n/// String enum (will be converted to Swift String enum with Codable)\n#[derive(Type)]\nenum JobStatus {\n    /// Job is queued and waiting to start\n    Queued,\n    /// Job is currently running\n    Running,\n    /// Job is paused (can be resumed)\n    Paused,\n    /// Job completed successfully\n    Completed,\n    /// Job failed with an error\n    Failed,\n    /// Job was cancelled by user\n    Cancelled,\n}\n\n/// Mixed enum with both string-like and data variants\n#[derive(Type)]\nenum MixedEnum {\n    /// Simple string-like variant\n    Simple(String),\n    /// Complex data variant\n    WithFields {\n        id: u32,\n        name: String,\n        metadata: Option<Vec<(String, String)>>,\n    },\n    /// Another simple variant\n    Empty,\n}\n\n/// Event system enum\n#[derive(Type)]\nenum Event {\n    /// User-related events\n    User {\n        user_id: u32,\n        action: String,\n        timestamp: String,\n    },\n    /// System events\n    System {\n        component: String,\n        level: String,\n        message: String,\n    },\n    /// Error events\n    Error {\n        code: u32,\n        message: String,\n        stack_trace: Option<String>,\n    },\n}\n\nfn main() {\n    println!(\"🚀 Advanced Unions Example - Complex enum scenarios\");\n    println!(\"{}\", \"=\".repeat(60));\n\n    // Create type collection\n    let types = Types::default()\n        .register::<ApiResult<String, String>>()\n        .register::<Shape>()\n        .register::<Point>()\n        .register::<Rectangle>()\n        .register::<LineStyle>()\n        .register::<Color>()\n        .register::<Container<String>>()\n        .register::<Tree<String>>()\n        .register::<JobStatus>()\n        .register::<MixedEnum>()\n        .register::<Event>();\n\n    // Export with default settings\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"📝 Generated Swift code:\\n\");\n    println!(\"{}\", output);\n\n    // Write to file for inspection\n    swift\n        .export_to(\n            \"./examples/generated/AdvancedUnions.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Advanced unions exported to AdvancedUnions.swift\");\n\n    println!(\"\\n🔍 Key Features Demonstrated:\");\n    println!(\"• Complex enum variants with named fields\");\n    println!(\"• Generic enums with type parameters\");\n    println!(\"• String enums with automatic Codable implementation\");\n    println!(\"• Mixed enums (both simple and complex variants)\");\n    println!(\"• Recursive type definitions\");\n    println!(\"• Nested struct references in enum variants\");\n    println!(\"• Custom Codable implementations for complex enums\");\n    println!(\"• Struct generation for named field variants\");\n    println!(\"• Tuple variant handling\");\n}\n"
  },
  {
    "path": "specta-swift/examples/basic_types.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n/// Comprehensive example showcasing basic Rust types and their Swift equivalents\n///\n/// This example demonstrates how specta-swift handles fundamental Rust types\n/// and converts them to appropriate Swift types.\n\n/// Basic primitive types\n#[derive(Type)]\nstruct Primitives {\n    // Integer types\n    small_int: i8,\n    unsigned_small: u8,\n    short_int: i16,\n    unsigned_short: u16,\n    regular_int: i32,\n    unsigned_int: u32,\n    long_int: i64,\n    unsigned_long: u64,\n\n    // Float types\n    single_precision: f32,\n    double_precision: f64,\n\n    // Boolean and character\n    is_active: bool,\n    single_char: char,\n\n    // String types\n    name: String,\n    optional_name: Option<String>,\n\n    // Collections\n    tags: Vec<String>,\n    scores: Vec<f64>,\n    user_ids: Vec<u32>,\n\n    // Nested collections\n    matrix: Vec<Vec<f64>>,\n    string_pairs: Vec<(String, String)>,\n}\n\n/// Enum with different variant types\n#[derive(Type)]\nenum Status {\n    /// Simple unit variant\n    Active,\n    /// Tuple variant with single value\n    Pending(String),\n    /// Tuple variant with multiple values\n    Error(String, u32),\n    /// Named field variant\n    Loading {\n        progress: f32,\n        message: Option<String>,\n    },\n}\n\n/// Generic struct demonstrating type parameters\n#[derive(Type)]\nstruct ApiResponse<T, E> {\n    data: Option<T>,\n    error: Option<E>,\n    status_code: u16,\n    headers: Vec<(String, String)>,\n}\n\n/// Nested struct demonstrating complex relationships\n#[derive(Type)]\nstruct User {\n    id: u32,\n    username: String,\n    email: String,\n    profile: UserProfile,\n    preferences: UserPreferences,\n    status: Status,\n    metadata: Option<UserMetadata>,\n}\n\n#[derive(Type)]\nstruct UserProfile {\n    first_name: String,\n    last_name: String,\n    bio: Option<String>,\n    avatar_url: Option<String>,\n    birth_date: Option<String>,\n}\n\n#[derive(Type)]\nstruct UserPreferences {\n    theme: String,\n    language: String,\n    notifications_enabled: bool,\n    privacy_level: u8,\n}\n\n#[derive(Type)]\nstruct UserMetadata {\n    created_at: String,\n    last_login: Option<String>,\n    login_count: u32,\n    is_verified: bool,\n}\n\nfn main() {\n    println!(\"🚀 Basic Types Example - Generating Swift from Rust types\");\n    println!(\"{}\", \"=\".repeat(60));\n\n    // Create type collection with all our types\n    let types = Types::default()\n        .register::<Primitives>()\n        .register::<Status>()\n        .register::<ApiResponse<String, String>>()\n        .register::<User>()\n        .register::<UserProfile>()\n        .register::<UserPreferences>()\n        .register::<UserMetadata>();\n\n    // Export with default settings\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"📝 Generated Swift code:\\n\");\n    println!(\"{}\", output);\n\n    // Write to file for inspection\n    swift\n        .export_to(\n            \"./examples/generated/BasicTypes.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Basic types exported to BasicTypes.swift\");\n\n    println!(\"\\n🔍 Key Features Demonstrated:\");\n    println!(\"• Primitive type mappings (i32 → Int32, f64 → Double, etc.)\");\n    println!(\"• Optional types (Option<String> → String?)\");\n    println!(\"• Collections (Vec<T> → [T])\");\n    println!(\"• Nested collections (Vec<Vec<f64>> → [[Double]])\");\n    println!(\"• Enum variants (unit, tuple, named fields)\");\n    println!(\"• Generic types with type parameters\");\n    println!(\"• Complex nested struct relationships\");\n    println!(\"• Tuple types ((String, String) → (String, String))\");\n}\n"
  },
  {
    "path": "specta-swift/examples/comments_example.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n/// A comprehensive example demonstrating multi-line comment support\n///\n/// This example shows how Specta Swift handles complex documentation\n/// including:\n/// - Multi-line type documentation\n/// - Bullet points and formatting\n/// - Complex technical descriptions\n///\n/// The generated Swift code will have properly formatted doc comments\n/// that are compatible with Swift's documentation system.\n#[derive(Type)]\nenum ApiResponse<T> {\n    /// Successful response containing the requested data\n    ///\n    /// This variant is returned when the API call completes successfully\n    /// and contains the expected data type. The status code indicates\n    /// the HTTP response status (200, 201, etc.).\n    Success {\n        /// The actual data returned by the API\n        data: T,\n        /// HTTP status code (200, 201, 204, etc.)\n        status: u16,\n        /// Optional response headers\n        headers: Option<Vec<(String, String)>>,\n    },\n\n    /// Error response indicating a failure\n    ///\n    /// This variant is returned when the API call fails for any reason.\n    /// The error contains detailed information about what went wrong\n    /// and how to potentially resolve the issue.\n    Error {\n        /// Human-readable error message\n        message: String,\n        /// Machine-readable error code\n        code: u32,\n        /// Optional additional error details\n        details: Option<String>,\n    },\n\n    /// Loading state for asynchronous operations\n    ///\n    /// This variant is used for long-running operations where the client\n    /// needs to show progress to the user. The progress value ranges\n    /// from 0.0 (not started) to 1.0 (completed).\n    Loading {\n        /// Progress value between 0.0 and 1.0\n        progress: f32,\n        /// Optional estimated time remaining in seconds\n        estimated_time: Option<u64>,\n    },\n}\n\n/// A user account in the system\n///\n/// This struct represents a complete user account with all necessary\n/// information for authentication, authorization, and personalization.\n///\n/// # Security Notes\n/// - The `password_hash` field should never be logged or exposed\n/// - The `api_key` is sensitive and should be treated as a secret\n/// - All timestamps are in UTC\n#[derive(Type)]\nstruct User {\n    /// Unique identifier for the user\n    ///\n    /// This ID is generated when the user first registers and never\n    /// changes throughout the user's lifetime in the system.\n    id: u32,\n\n    /// The user's chosen username\n    ///\n    /// Must be unique across the entire system. Usernames are\n    /// case-insensitive and can contain letters, numbers, and underscores.\n    username: String,\n\n    /// The user's email address\n    ///\n    /// Used for authentication, password resets, and notifications.\n    /// Must be a valid email format and unique across the system.\n    email: String,\n\n    /// Whether the user account is currently active\n    ///\n    /// Inactive users cannot log in or perform any actions.\n    /// This is typically set to false when an account is suspended\n    /// or when the user requests account deletion.\n    is_active: bool,\n\n    /// When the user account was created\n    ///\n    /// Timestamp in UTC when the user first registered.\n    created_at: String,\n\n    /// When the user last logged in\n    ///\n    /// Updated on every successful login. Can be None if the user\n    /// has never logged in (e.g., account created but not activated).\n    last_login: Option<String>,\n}\n\nfn main() {\n    let types = Types::default()\n        .register::<ApiResponse<String>>()\n        .register::<User>();\n\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\n        \"Generated Swift code with comprehensive comments:\\n{}\",\n        output\n    );\n\n    // Also write to file for inspection\n    swift\n        .export_to(\n            \"./examples/generated/CommentsExample.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"\\nComments example written to CommentsExample.swift\");\n}\n"
  },
  {
    "path": "specta-swift/examples/comprehensive_demo.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\nuse std::time::Duration;\n\n/// Comprehensive demonstration of ALL specta-swift functionality\n///\n/// This example showcases every feature and capability of specta-swift in a single,\n/// realistic application scenario. It demonstrates complex type relationships,\n/// various enum patterns, special types, and advanced features.\n\n/// Main application types for a task management system\n#[derive(Type)]\nstruct Task {\n    id: u32,\n    title: String,\n    description: Option<String>,\n    status: TaskStatus,\n    priority: Priority,\n    assignee: Option<User>,\n    created_at: String,\n    updated_at: String,\n    due_date: Option<String>,\n    duration: Option<Duration>,\n    tags: Vec<String>,\n    metadata: TaskMetadata,\n    subtasks: Vec<SubTask>,\n}\n\n/// Task status enum with mixed variants\n#[derive(Type)]\nenum TaskStatus {\n    /// Task is waiting to be started\n    Todo,\n    /// Task is currently in progress\n    InProgress {\n        started_at: String,\n        estimated_completion: Option<String>,\n        progress: f32,\n    },\n    /// Task is blocked by dependencies\n    Blocked {\n        reason: String,\n        blocked_by: Vec<u32>,\n        estimated_unblock: Option<String>,\n    },\n    /// Task is under review\n    Review {\n        reviewer: String,\n        review_started_at: String,\n        comments: Vec<ReviewComment>,\n    },\n    /// Task is completed\n    Completed {\n        completed_at: String,\n        completion_time: Duration,\n        final_notes: Option<String>,\n    },\n    /// Task was cancelled\n    Cancelled {\n        reason: String,\n        cancelled_at: String,\n    },\n}\n\n/// Priority enum (string enum)\n#[derive(Type)]\nenum Priority {\n    Low,\n    Medium,\n    High,\n    Critical,\n    Emergency,\n}\n\n/// User information\n#[derive(Type)]\nstruct User {\n    id: u32,\n    username: String,\n    email: String,\n    profile: UserProfile,\n    preferences: UserPreferences,\n    role: UserRole,\n    is_active: bool,\n    last_login: Option<String>,\n    created_at: String,\n}\n\n/// User profile with nested data\n#[derive(Type)]\nstruct UserProfile {\n    first_name: String,\n    last_name: String,\n    bio: Option<String>,\n    avatar_url: Option<String>,\n    timezone: String,\n    language: String,\n}\n\n/// User preferences\n#[derive(Type)]\nstruct UserPreferences {\n    theme: Theme,\n    notifications: NotificationSettings,\n    privacy: PrivacySettings,\n    display: DisplaySettings,\n}\n\n/// Theme enum (string enum)\n#[derive(Type)]\nenum Theme {\n    Light,\n    Dark,\n    Auto,\n    Custom,\n}\n\n/// Notification settings\n#[derive(Type)]\nstruct NotificationSettings {\n    email_enabled: bool,\n    push_enabled: bool,\n    sms_enabled: bool,\n    desktop_enabled: bool,\n    frequency: NotificationFrequency,\n}\n\n/// Notification frequency enum\n#[derive(Type)]\nenum NotificationFrequency {\n    Immediate,\n    Hourly,\n    Daily,\n    Weekly,\n    Never,\n}\n\n/// Privacy settings\n#[derive(Type)]\nstruct PrivacySettings {\n    profile_visibility: Visibility,\n    activity_visibility: Visibility,\n    data_sharing: DataSharing,\n}\n\n/// Visibility enum\n#[derive(Type)]\nenum Visibility {\n    Public,\n    Friends,\n    Private,\n    Hidden,\n}\n\n/// Data sharing settings\n#[derive(Type)]\nstruct DataSharing {\n    analytics: bool,\n    marketing: bool,\n    third_party: bool,\n    research: bool,\n}\n\n/// Display settings\n#[derive(Type)]\nstruct DisplaySettings {\n    items_per_page: u32,\n    date_format: String,\n    time_format: String,\n    currency: String,\n    compact_mode: bool,\n}\n\n/// User role with permissions\n#[derive(Type)]\nenum UserRole {\n    /// Regular user with basic permissions\n    User,\n    /// Moderator with additional permissions\n    Moderator {\n        permissions: Vec<String>,\n        department: String,\n    },\n    /// Administrator with full permissions\n    Admin {\n        level: AdminLevel,\n        departments: Vec<String>,\n        special_access: Vec<String>,\n    },\n    /// Super admin with system-wide access\n    SuperAdmin {\n        system_access: bool,\n        audit_logs: bool,\n    },\n}\n\n/// Admin level enum\n#[derive(Type)]\nenum AdminLevel {\n    Junior,\n    Senior,\n    Lead,\n    Director,\n}\n\n/// Task metadata\n#[derive(Type)]\nstruct TaskMetadata {\n    created_by: u32,\n    last_modified_by: u32,\n    version: u32,\n    custom_fields: Vec<(String, String)>,\n    attachments: Vec<Attachment>,\n    watchers: Vec<u32>,\n    dependencies: Vec<u32>,\n}\n\n/// File attachment\n#[derive(Type)]\nstruct Attachment {\n    id: String,\n    filename: String,\n    size: u64,\n    mime_type: String,\n    uploaded_at: String,\n    uploaded_by: u32,\n}\n\n/// Subtask with timing information\n#[derive(Type)]\nstruct SubTask {\n    id: u32,\n    title: String,\n    description: Option<String>,\n    status: SubTaskStatus,\n    estimated_duration: Duration,\n    actual_duration: Option<Duration>,\n    assignee: Option<u32>,\n    created_at: String,\n    completed_at: Option<String>,\n}\n\n/// Subtask status (simple enum)\n#[derive(Type)]\nenum SubTaskStatus {\n    Pending,\n    InProgress,\n    Completed,\n    Skipped,\n}\n\n/// Review comment\n#[derive(Type)]\nstruct ReviewComment {\n    id: u32,\n    author: u32,\n    content: String,\n    created_at: String,\n    updated_at: String,\n    is_resolved: bool,\n    parent_comment: Option<u32>,\n    attachments: Vec<Attachment>,\n}\n\n/// API response wrapper\n#[derive(Type)]\nstruct ApiResponse<T, E> {\n    data: Option<T>,\n    error: Option<E>,\n    status: ResponseStatus,\n    metadata: ResponseMetadata,\n}\n\n/// Response status enum\n#[derive(Type)]\nenum ResponseStatus {\n    Success,\n    PartialSuccess,\n    Error,\n    ValidationError,\n    AuthenticationError,\n    AuthorizationError,\n    NotFound,\n    RateLimited,\n}\n\n/// Response metadata\n#[derive(Type)]\nstruct ResponseMetadata {\n    request_id: String,\n    timestamp: String,\n    processing_time: Duration,\n    version: String,\n    pagination: Option<PaginationInfo>,\n}\n\n/// Pagination information\n#[derive(Type)]\nstruct PaginationInfo {\n    page: u32,\n    per_page: u32,\n    total_pages: u32,\n    total_items: u64,\n    has_next: bool,\n    has_prev: bool,\n}\n\n/// System health information\n#[derive(Type)]\nstruct SystemHealth {\n    status: HealthStatus,\n    uptime: Duration,\n    last_check: String,\n    services: Vec<ServiceStatus>,\n    metrics: SystemMetrics,\n}\n\n/// Health status enum\n#[derive(Type)]\nenum HealthStatus {\n    Healthy,\n    Degraded,\n    Unhealthy,\n    Unknown,\n}\n\n/// Service status\n#[derive(Type)]\nstruct ServiceStatus {\n    name: String,\n    status: HealthStatus,\n    response_time: Duration,\n    last_check: String,\n    error_count: u32,\n}\n\n/// System metrics\n#[derive(Type)]\nstruct SystemMetrics {\n    cpu_usage: f64,\n    memory_usage: f64,\n    disk_usage: f64,\n    network_usage: f64,\n    active_users: u32,\n    total_requests: u64,\n    error_rate: f64,\n}\n\nfn main() {\n    println!(\"🚀 Comprehensive Demo - Complete specta-swift functionality showcase\");\n    println!(\"{}\", \"=\".repeat(80));\n\n    // Create comprehensive type collection\n    let types = Types::default()\n        // Core types\n        .register::<Task>()\n        .register::<TaskStatus>()\n        .register::<Priority>()\n        .register::<User>()\n        .register::<UserProfile>()\n        .register::<UserPreferences>()\n        .register::<Theme>()\n        .register::<NotificationSettings>()\n        .register::<NotificationFrequency>()\n        .register::<PrivacySettings>()\n        .register::<Visibility>()\n        .register::<DataSharing>()\n        .register::<DisplaySettings>()\n        .register::<UserRole>()\n        .register::<AdminLevel>()\n        .register::<TaskMetadata>()\n        .register::<Attachment>()\n        .register::<SubTask>()\n        .register::<SubTaskStatus>()\n        .register::<ReviewComment>()\n        // API types\n        .register::<ApiResponse<String, String>>()\n        .register::<ResponseStatus>()\n        .register::<ResponseMetadata>()\n        .register::<PaginationInfo>()\n        // System types\n        .register::<SystemHealth>()\n        .register::<HealthStatus>()\n        .register::<ServiceStatus>()\n        .register::<SystemMetrics>();\n\n    // Export with default settings\n    let total_types = types.len();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"📝 Generated Swift code (first 2000 characters):\\n\");\n    let preview = if output.len() > 2000 {\n        format!(\n            \"{}...\\n\\n[Output truncated - see ComprehensiveDemo.swift for full output]\",\n            &output[..2000]\n        )\n    } else {\n        output.clone()\n    };\n    println!(\"{}\", preview);\n\n    // Write to file for inspection\n    swift\n        .export_to(\n            \"./examples/generated/ComprehensiveDemo.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Comprehensive demo exported to ComprehensiveDemo.swift\");\n\n    println!(\"\\n🔍 Complete Feature Showcase:\");\n    println!(\"• ✅ Basic primitive types (i32, f64, bool, String, etc.)\");\n    println!(\"• ✅ Optional types (Option<T> → T?)\");\n    println!(\"• ✅ Collections (Vec<T> → [T])\");\n    println!(\"• ✅ Nested collections (Vec<Vec<T>> → [[T]])\");\n    println!(\"• ✅ Tuple types ((String, String) → (String, String))\");\n    println!(\"• ✅ Complex struct relationships\");\n    println!(\"• ✅ Generic types with type parameters\");\n    println!(\"• ✅ String enums with automatic Codable\");\n    println!(\"• ✅ Mixed enums with custom Codable implementations\");\n    println!(\"• ✅ Named field variants with struct generation\");\n    println!(\"• ✅ Duration types with RustDuration helper\");\n    println!(\"• ✅ Nested enum variants\");\n    println!(\"• ✅ Recursive type references\");\n    println!(\"• ✅ Complex metadata structures\");\n    println!(\"• ✅ API response patterns\");\n    println!(\"• ✅ System monitoring types\");\n    println!(\"• ✅ User management with permissions\");\n    println!(\"• ✅ Task management with status tracking\");\n    println!(\"• ✅ File attachment handling\");\n    println!(\"• ✅ Comment and review systems\");\n    println!(\"• ✅ Pagination and metadata\");\n    println!(\"• ✅ Health monitoring and metrics\");\n\n    println!(\"\\n📊 Statistics:\");\n    println!(\"• Total types registered: {}\", total_types);\n    println!(\"• Generated Swift code length: {} characters\", output.len());\n    println!(\"• Lines of generated code: {}\", output.lines().count());\n\n    println!(\"\\n🎉 This example demonstrates EVERY feature of specta-swift!\");\n    println!(\"Check ComprehensiveDemo.swift for the complete generated Swift code.\");\n}\n"
  },
  {
    "path": "specta-swift/examples/configuration_options.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::{GenericStyle, IndentStyle, NamingConvention, OptionalStyle, Swift};\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n///\n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n\n/// Sample types for demonstration\n#[derive(Type)]\nstruct User {\n    user_id: u32,\n    full_name: String,\n    email_address: Option<String>,\n    is_verified: bool,\n}\n\n#[derive(Type)]\nenum ApiResponse<T> {\n    Success { data: T, status_code: u16 },\n    Error { message: String, error_code: u32 },\n    Loading { progress: f32 },\n}\n\n#[derive(Type)]\nstruct GenericContainer<T, U> {\n    primary: T,\n    secondary: U,\n    metadata: Option<Vec<(String, String)>>,\n}\n\nfn main() {\n    println!(\"🚀 Configuration Options Example - All Swift exporter settings\");\n    println!(\"{}\", \"=\".repeat(70));\n\n    // Sample types for all examples\n    let types = Types::default()\n        .register::<User>()\n        .register::<ApiResponse<String>>()\n        .register::<GenericContainer<String, u32>>();\n\n    // 1. DEFAULT CONFIGURATION\n    println!(\"\\n📋 1. DEFAULT CONFIGURATION\");\n    println!(\"{}\", \"-\".repeat(40));\n    let default_swift = Swift::default();\n    let default_output = default_swift.export(&types, specta_serde::Format).unwrap();\n    println!(\"{}\", default_output);\n    default_swift\n        .export_to(\n            \"./examples/generated/DefaultConfig.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Default configuration exported to DefaultConfig.swift\");\n\n    // 2. CUSTOM HEADER\n    println!(\"\\n📋 2. CUSTOM HEADER\");\n    println!(\"{}\", \"-\".repeat(40));\n    let custom_header = Swift::new()\n        .header(\"// Generated by MyAwesomeApp v2.0\\n// Custom header with app info\\n// DO NOT EDIT MANUALLY\");\n    let header_output = custom_header.export(&types, specta_serde::Format).unwrap();\n    println!(\"{}\", header_output);\n    custom_header\n        .export_to(\n            \"./examples/generated/CustomHeader.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Custom header exported to CustomHeader.swift\");\n\n    // 3. DIFFERENT NAMING CONVENTIONS\n    println!(\"\\n📋 3. NAMING CONVENTIONS\");\n    println!(\"{}\", \"-\".repeat(40));\n\n    // PascalCase (default)\n    let pascal_case = Swift::new().naming(NamingConvention::PascalCase);\n    let pascal_output = pascal_case.export(&types, specta_serde::Format).unwrap();\n    println!(\"PascalCase output:\\n{}\", pascal_output);\n    pascal_case\n        .export_to(\n            \"./examples/generated/PascalCase.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n\n    // camelCase\n    let camel_case = Swift::new().naming(NamingConvention::CamelCase);\n    let camel_output = camel_case.export(&types, specta_serde::Format).unwrap();\n    println!(\"camelCase output:\\n{}\", camel_output);\n    camel_case\n        .export_to(\n            \"./examples/generated/CamelCase.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n\n    // snake_case\n    let snake_case = Swift::new().naming(NamingConvention::SnakeCase);\n    let snake_output = snake_case.export(&types, specta_serde::Format).unwrap();\n    println!(\"snake_case output:\\n{}\", snake_output);\n    snake_case\n        .export_to(\n            \"./examples/generated/SnakeCase.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Naming conventions exported to separate files\");\n\n    // 4. INDENTATION STYLES\n    println!(\"\\n📋 4. INDENTATION STYLES\");\n    println!(\"{}\", \"-\".repeat(40));\n\n    // Spaces (default: 4 spaces)\n    let spaces_4 = Swift::new().indent(IndentStyle::Spaces(4));\n    let spaces_output = spaces_4.export(&types, specta_serde::Format).unwrap();\n    println!(\"4 Spaces indentation:\\n{}\", spaces_output);\n    spaces_4\n        .export_to(\n            \"./examples/generated/Spaces4.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n\n    // 2 Spaces\n    let spaces_2 = Swift::new().indent(IndentStyle::Spaces(2));\n    let spaces2_output = spaces_2.export(&types, specta_serde::Format).unwrap();\n    println!(\"2 Spaces indentation:\\n{}\", spaces2_output);\n    spaces_2\n        .export_to(\n            \"./examples/generated/Spaces2.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n\n    // Tabs\n    let tabs = Swift::new().indent(IndentStyle::Tabs);\n    let tabs_output = tabs.export(&types, specta_serde::Format).unwrap();\n    println!(\"Tabs indentation:\\n{}\", tabs_output);\n    tabs.export_to(\n        \"./examples/generated/Tabs.swift\",\n        &types,\n        specta_serde::Format,\n    )\n    .unwrap();\n    println!(\"✅ Indentation styles exported to separate files\");\n\n    // 5. GENERIC STYLES\n    println!(\"\\n📋 5. GENERIC STYLES\");\n    println!(\"{}\", \"-\".repeat(40));\n\n    // Protocol constraints (default)\n    let protocol_generics = Swift::new().generics(GenericStyle::Protocol);\n    let protocol_output = protocol_generics\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    println!(\"Protocol constraints:\\n{}\", protocol_output);\n    protocol_generics\n        .export_to(\n            \"./examples/generated/ProtocolGenerics.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n\n    // Typealias constraints\n    let typealias_generics = Swift::new().generics(GenericStyle::Typealias);\n    let typealias_output = typealias_generics\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    println!(\"Typealias constraints:\\n{}\", typealias_output);\n    typealias_generics\n        .export_to(\n            \"./examples/generated/TypealiasGenerics.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Generic styles exported to separate files\");\n\n    // 6. OPTIONAL STYLES\n    println!(\"\\n📋 6. OPTIONAL STYLES\");\n    println!(\"{}\", \"-\".repeat(40));\n\n    // Question mark syntax (default)\n    let question_mark = Swift::new().optionals(OptionalStyle::QuestionMark);\n    let question_output = question_mark.export(&types, specta_serde::Format).unwrap();\n    println!(\"Question mark syntax:\\n{}\", question_output);\n    question_mark\n        .export_to(\n            \"./examples/generated/QuestionMark.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n\n    // Optional type syntax\n    let optional_type = Swift::new().optionals(OptionalStyle::Optional);\n    let optional_output = optional_type.export(&types, specta_serde::Format).unwrap();\n    println!(\"Optional type syntax:\\n{}\", optional_output);\n    optional_type\n        .export_to(\n            \"./examples/generated/OptionalType.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Optional styles exported to separate files\");\n\n    // 7. ADDITIONAL PROTOCOLS\n    println!(\"\\n📋 7. ADDITIONAL PROTOCOLS\");\n    println!(\"{}\", \"-\".repeat(40));\n    let with_protocols = Swift::new()\n        .add_protocol(\"Equatable\")\n        .add_protocol(\"Hashable\")\n        .add_protocol(\"CustomStringConvertible\");\n    let protocols_output = with_protocols.export(&types, specta_serde::Format).unwrap();\n    println!(\"With additional protocols:\\n{}\", protocols_output);\n    with_protocols\n        .export_to(\n            \"./examples/generated/WithProtocols.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Additional protocols exported to WithProtocols.swift\");\n\n    // 8. FORMAT PARAMETER SERDE TRANSFORMS\n    println!(\"\\n📋 8. FORMAT PARAMETER SERDE TRANSFORMS\");\n    println!(\"{}\", \"-\".repeat(40));\n    let with_serde = Swift::new();\n    let serde_output = with_serde.export(&types, specta_serde::Format).unwrap();\n    println!(\"With Serde format transform:\\n{}\", serde_output);\n    with_serde\n        .export_to(\n            \"./examples/generated/WithSerde.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Serde format transform example exported to WithSerde.swift\");\n\n    // 9. COMBINED CUSTOM CONFIGURATION\n    println!(\"\\n📋 9. COMBINED CUSTOM CONFIGURATION\");\n    println!(\"{}\", \"-\".repeat(40));\n    let combined = Swift::new()\n        .header(\"// My Custom App Types\\n// Generated with love ❤️\")\n        .naming(NamingConvention::CamelCase)\n        .indent(IndentStyle::Spaces(2))\n        .generics(GenericStyle::Typealias)\n        .optionals(OptionalStyle::Optional)\n        .add_protocol(\"Equatable\")\n        .add_protocol(\"Hashable\");\n\n    let combined_output = combined.export(&types, specta_serde::Format).unwrap();\n    println!(\"Combined custom configuration:\\n{}\", combined_output);\n    combined\n        .export_to(\n            \"./examples/generated/CombinedConfig.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Combined configuration exported to CombinedConfig.swift\");\n\n    println!(\"\\n🎉 All configuration examples completed!\");\n    println!(\"\\n📁 Generated files:\");\n    println!(\"• DefaultConfig.swift - Default settings\");\n    println!(\"• CustomHeader.swift - Custom header\");\n    println!(\"• PascalCase.swift, CamelCase.swift, SnakeCase.swift - Naming conventions\");\n    println!(\"• Spaces4.swift, Spaces2.swift, Tabs.swift - Indentation styles\");\n    println!(\"• ProtocolGenerics.swift, TypealiasGenerics.swift - Generic styles\");\n    println!(\"• QuestionMark.swift, OptionalType.swift - Optional styles\");\n    println!(\"• WithProtocols.swift - Additional protocols\");\n    println!(\"• WithSerde.swift - Serde validation\");\n    println!(\"• CombinedConfig.swift - Combined custom settings\");\n}\n"
  },
  {
    "path": "specta-swift/examples/generated/AdvancedUnions.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\n/// Advanced example showcasing complex enum unions and their Swift representations\n/// \n/// This example demonstrates how specta-swift handles complex enum scenarios\n/// including nested types, generic enums, and custom Codable implementations.\n/// Complex enum with mixed variant types\npublic enum ApiResult<T, E> {\n    case ok(ApiResultOkData)\n    case err(ApiResultErrData)\n    case loading(ApiResultLoadingData)\n}\npublic struct ApiResultOkData: Codable {\n    public let data: T\n    public let status: UInt16\n    public let headers: [(String, String)]?\n    public let timestamp: String\n}\n\npublic struct ApiResultErrData: Codable {\n    public let error: E\n    public let code: UInt32\n    public let message: String\n    public let retryAfter: UInt64?\n\n    private enum CodingKeys: String, CodingKey {\n        case error = \"error\"\n        case code = \"code\"\n        case message = \"message\"\n        case retryAfter = \"retry_after\"\n    }\n}\n\npublic struct ApiResultLoadingData: Codable {\n    public let progress: Float\n    public let estimatedCompletion: String?\n\n    private enum CodingKeys: String, CodingKey {\n        case progress = \"progress\"\n        case estimatedCompletion = \"estimated_completion\"\n    }\n}\n\n// MARK: - ApiResult Codable Implementation\nextension ApiResult: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case ok = \"Ok\"\n        case err = \"Err\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .ok:\n            let data = try container.decode(ApiResultOkData.self, forKey: .ok)\n            self = .ok(data)\n        case .err:\n            let data = try container.decode(ApiResultErrData.self, forKey: .err)\n            self = .err(data)\n        case .loading:\n            let data = try container.decode(ApiResultLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .ok(let data):\n            try container.encode(data, forKey: .ok)\n        case .err(let data):\n            try container.encode(data, forKey: .err)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct Color: Codable {\n    public let red: Double\n    public let green: Double\n    public let blue: Double\n    public let alpha: Double\n}\n\n/// Generic enum with constraints\npublic enum Container<T>: Codable {\n    case empty\n    case single(T)\n    case multiple([T])\n    case keyValue([(String, T)])\n}\n\n/// Event system enum\npublic enum Event {\n    case user(EventUserData)\n    case system(EventSystemData)\n    case error(EventErrorData)\n}\npublic struct EventUserData: Codable {\n    public let userId: UInt32\n    public let action: String\n    public let timestamp: String\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case action = \"action\"\n        case timestamp = \"timestamp\"\n    }\n}\n\npublic struct EventSystemData: Codable {\n    public let component: String\n    public let level: String\n    public let message: String\n}\n\npublic struct EventErrorData: Codable {\n    public let code: UInt32\n    public let message: String\n    public let stackTrace: String?\n\n    private enum CodingKeys: String, CodingKey {\n        case code = \"code\"\n        case message = \"message\"\n        case stackTrace = \"stack_trace\"\n    }\n}\n\n// MARK: - Event Codable Implementation\nextension Event: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case user = \"User\"\n        case system = \"System\"\n        case error = \"Error\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .user:\n            let data = try container.decode(EventUserData.self, forKey: .user)\n            self = .user(data)\n        case .system:\n            let data = try container.decode(EventSystemData.self, forKey: .system)\n            self = .system(data)\n        case .error:\n            let data = try container.decode(EventErrorData.self, forKey: .error)\n            self = .error(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .user(let data):\n            try container.encode(data, forKey: .user)\n        case .system(let data):\n            try container.encode(data, forKey: .system)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        }\n    }\n}\n\n\n/// String enum (will be converted to Swift String enum with Codable)\npublic enum JobStatus: Codable {\n    case queued\n    case running\n    case paused\n    case completed\n    case failed\n    case cancelled\n}\n\npublic struct LineStyle: Codable {\n    public let dashPattern: [Double]?\n    public let capStyle: String\n    public let joinStyle: String\n\n    private enum CodingKeys: String, CodingKey {\n        case dashPattern = \"dash_pattern\"\n        case capStyle = \"cap_style\"\n        case joinStyle = \"join_style\"\n    }\n}\n\n/// Mixed enum with both string-like and data variants\npublic enum MixedEnum {\n    case simple(String)\n    case withFields(MixedEnumWithFieldsData)\n    case empty\n}\npublic struct MixedEnumWithFieldsData: Codable {\n    public let id: UInt32\n    public let name: String\n    public let metadata: [(String, String)]?\n}\n\n// MARK: - MixedEnum Codable Implementation\nextension MixedEnum: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case simple = \"Simple\"\n        case withFields = \"WithFields\"\n        case empty = \"Empty\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .simple:\n            // TODO: Implement tuple variant decoding for simple\n            fatalError(\"Tuple variant decoding not implemented\")\n        case .withFields:\n            let data = try container.decode(MixedEnumWithFieldsData.self, forKey: .withFields)\n            self = .withFields(data)\n        case .empty:\n            self = .empty\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .simple:\n            // TODO: Implement tuple variant encoding for simple\n            fatalError(\"Tuple variant encoding not implemented\")\n        case .withFields(let data):\n            try container.encode(data, forKey: .withFields)\n        case .empty:\n            try container.encodeNil(forKey: .empty)\n        }\n    }\n}\n\n\n/// Supporting structs for the Shape enum\npublic struct Point: Codable {\n    public let x: Double\n    public let y: Double\n}\n\npublic struct Rectangle: Codable {\n    public let topLeft: Point\n    public let bottomRight: Point\n\n    private enum CodingKeys: String, CodingKey {\n        case topLeft = \"top_left\"\n        case bottomRight = \"bottom_right\"\n    }\n}\n\n/// Enum demonstrating different field patterns\npublic enum Shape {\n    case none\n    case point(Double, Double)\n    case circle(ShapeCircleData)\n    case rectangle(Rectangle)\n    case line(ShapeLineData)\n    case complex(ShapeComplexData)\n}\npublic struct ShapeCircleData: Codable {\n    public let center: Point\n    public let radius: Double\n}\n\npublic struct ShapeLineData: Codable {\n    public let start: Point\n    public let end: Point\n    public let style: LineStyle\n}\n\npublic struct ShapeComplexData: Codable {\n    public let vertices: [Point]\n    public let fillColor: Color\n    public let strokeColor: Color?\n    public let strokeWidth: Double\n    public let isClosed: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case vertices = \"vertices\"\n        case fillColor = \"fill_color\"\n        case strokeColor = \"stroke_color\"\n        case strokeWidth = \"stroke_width\"\n        case isClosed = \"is_closed\"\n    }\n}\n\n// MARK: - Shape Codable Implementation\nextension Shape: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case none = \"None\"\n        case point = \"Point\"\n        case circle = \"Circle\"\n        case rectangle = \"Rectangle\"\n        case line = \"Line\"\n        case complex = \"Complex\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .none:\n            self = .none\n        case .point:\n            // TODO: Implement tuple variant decoding for point\n            fatalError(\"Tuple variant decoding not implemented\")\n        case .circle:\n            let data = try container.decode(ShapeCircleData.self, forKey: .circle)\n            self = .circle(data)\n        case .rectangle:\n            // TODO: Implement tuple variant decoding for rectangle\n            fatalError(\"Tuple variant decoding not implemented\")\n        case .line:\n            let data = try container.decode(ShapeLineData.self, forKey: .line)\n            self = .line(data)\n        case .complex:\n            let data = try container.decode(ShapeComplexData.self, forKey: .complex)\n            self = .complex(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .none:\n            try container.encodeNil(forKey: .none)\n        case .point:\n            // TODO: Implement tuple variant encoding for point\n            fatalError(\"Tuple variant encoding not implemented\")\n        case .circle(let data):\n            try container.encode(data, forKey: .circle)\n        case .rectangle:\n            // TODO: Implement tuple variant encoding for rectangle\n            fatalError(\"Tuple variant encoding not implemented\")\n        case .line(let data):\n            try container.encode(data, forKey: .line)\n        case .complex(let data):\n            try container.encode(data, forKey: .complex)\n        }\n    }\n}\n\n\n/// Enum with recursive references\npublic enum Tree<T> {\n    case leaf(T)\n    case branch(TreeBranchData)\n}\npublic struct TreeBranchData: Codable {\n    public let left: Tree<T>\n    public let right: Tree<T>\n    public let value: T\n}\n\n// MARK: - Tree Codable Implementation\nextension Tree: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case leaf = \"Leaf\"\n        case branch = \"Branch\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .leaf:\n            // TODO: Implement tuple variant decoding for leaf\n            fatalError(\"Tuple variant decoding not implemented\")\n        case .branch:\n            let data = try container.decode(TreeBranchData.self, forKey: .branch)\n            self = .branch(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .leaf:\n            // TODO: Implement tuple variant encoding for leaf\n            fatalError(\"Tuple variant encoding not implemented\")\n        case .branch(let data):\n            try container.encode(data, forKey: .branch)\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "specta-swift/examples/generated/BasicTypes.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\n/// Generic struct demonstrating type parameters\npublic struct ApiResponse<T, E>: Codable {\n    public let data: T?\n    public let error: E?\n    public let statusCode: UInt16\n    public let headers: [(String, String)]\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case error = \"error\"\n        case statusCode = \"status_code\"\n        case headers = \"headers\"\n    }\n}\n\n/// Comprehensive example showcasing basic Rust types and their Swift equivalents\n/// \n/// This example demonstrates how specta-swift handles fundamental Rust types\n/// and converts them to appropriate Swift types.\n/// Basic primitive types\npublic struct Primitives: Codable {\n    public let smallInt: Int8\n    public let unsignedSmall: UInt8\n    public let shortInt: Int16\n    public let unsignedShort: UInt16\n    public let regularInt: Int32\n    public let unsignedInt: UInt32\n    public let longInt: Int64\n    public let unsignedLong: UInt64\n    public let singlePrecision: Float\n    public let doublePrecision: Double\n    public let isActive: Bool\n    public let singleChar: Character\n    public let name: String\n    public let optionalName: String?\n    public let tags: [String]\n    public let scores: [Double]\n    public let userIds: [UInt32]\n    public let matrix: [[Double]]\n    public let stringPairs: [(String, String)]\n\n    private enum CodingKeys: String, CodingKey {\n        case smallInt = \"small_int\"\n        case unsignedSmall = \"unsigned_small\"\n        case shortInt = \"short_int\"\n        case unsignedShort = \"unsigned_short\"\n        case regularInt = \"regular_int\"\n        case unsignedInt = \"unsigned_int\"\n        case longInt = \"long_int\"\n        case unsignedLong = \"unsigned_long\"\n        case singlePrecision = \"single_precision\"\n        case doublePrecision = \"double_precision\"\n        case isActive = \"is_active\"\n        case singleChar = \"single_char\"\n        case name = \"name\"\n        case optionalName = \"optional_name\"\n        case tags = \"tags\"\n        case scores = \"scores\"\n        case userIds = \"user_ids\"\n        case matrix = \"matrix\"\n        case stringPairs = \"string_pairs\"\n    }\n}\n\n/// Enum with different variant types\npublic enum Status {\n    case active\n    case pending(String)\n    case error(String, UInt32)\n    case loading(StatusLoadingData)\n}\npublic struct StatusLoadingData: Codable {\n    public let progress: Float\n    public let message: String?\n}\n\n// MARK: - Status Codable Implementation\nextension Status: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case active = \"Active\"\n        case pending = \"Pending\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .active:\n            self = .active\n        case .pending:\n            // TODO: Implement tuple variant decoding for pending\n            fatalError(\"Tuple variant decoding not implemented\")\n        case .error:\n            // TODO: Implement tuple variant decoding for error\n            fatalError(\"Tuple variant decoding not implemented\")\n        case .loading:\n            let data = try container.decode(StatusLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .active:\n            try container.encodeNil(forKey: .active)\n        case .pending:\n            // TODO: Implement tuple variant encoding for pending\n            fatalError(\"Tuple variant encoding not implemented\")\n        case .error:\n            // TODO: Implement tuple variant encoding for error\n            fatalError(\"Tuple variant encoding not implemented\")\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\n/// Nested struct demonstrating complex relationships\npublic struct User: Codable {\n    public let id: UInt32\n    public let username: String\n    public let email: String\n    public let profile: UserProfile\n    public let preferences: UserPreferences\n    public let status: Status\n    public let metadata: UserMetadata?\n}\n\npublic struct UserMetadata: Codable {\n    public let createdAt: String\n    public let lastLogin: String?\n    public let loginCount: UInt32\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case createdAt = \"created_at\"\n        case lastLogin = \"last_login\"\n        case loginCount = \"login_count\"\n        case isVerified = \"is_verified\"\n    }\n}\n\npublic struct UserPreferences: Codable {\n    public let theme: String\n    public let language: String\n    public let notificationsEnabled: Bool\n    public let privacyLevel: UInt8\n\n    private enum CodingKeys: String, CodingKey {\n        case theme = \"theme\"\n        case language = \"language\"\n        case notificationsEnabled = \"notifications_enabled\"\n        case privacyLevel = \"privacy_level\"\n    }\n}\n\npublic struct UserProfile: Codable {\n    public let firstName: String\n    public let lastName: String\n    public let bio: String?\n    public let avatarUrl: String?\n    public let birthDate: String?\n\n    private enum CodingKeys: String, CodingKey {\n        case firstName = \"first_name\"\n        case lastName = \"last_name\"\n        case bio = \"bio\"\n        case avatarUrl = \"avatar_url\"\n        case birthDate = \"birth_date\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/CamelCase.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum apiResponse<T> {\n    case success(apiResponseSuccessData)\n    case error(apiResponseErrorData)\n    case loading(apiResponseLoadingData)\n}\npublic struct apiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct apiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct apiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - apiResponse Codable Implementation\nextension apiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(apiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(apiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(apiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct genericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct user: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/CombinedConfig.swift",
    "content": "// My Custom App Types\n// Generated with love ❤️\nimport Foundation\nimport Codable\nimport Equatable\nimport Hashable\n\npublic enum apiResponse<T> {\n    case success(apiResponseSuccessData)\n    case error(apiResponseErrorData)\n    case loading(apiResponseLoadingData)\n}\npublic struct apiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct apiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct apiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - apiResponse Codable Implementation\nextension apiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(apiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(apiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(apiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct genericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: Optional<[(String, String)]>\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct user: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: Optional<String>\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/CommentsExample.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\n/// A comprehensive example demonstrating multi-line comment support\n/// \n/// This example shows how Specta Swift handles complex documentation\n/// including:\n/// - Multi-line type documentation\n/// - Bullet points and formatting\n/// - Complex technical descriptions\n/// \n/// The generated Swift code will have properly formatted doc comments\n/// that are compatible with Swift's documentation system.\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let status: UInt16\n    public let headers: [(String, String)]?\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let code: UInt32\n    public let details: String?\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n    public let estimatedTime: UInt64?\n\n    private enum CodingKeys: String, CodingKey {\n        case progress = \"progress\"\n        case estimatedTime = \"estimated_time\"\n    }\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\n/// A user account in the system\n/// \n/// This struct represents a complete user account with all necessary\n/// information for authentication, authorization, and personalization.\n/// \n/// # Security Notes\n/// - The `password_hash` field should never be logged or exposed\n/// - The `api_key` is sensitive and should be treated as a secret\n/// - All timestamps are in UTC\npublic struct User: Codable {\n    public let id: UInt32\n    public let username: String\n    public let email: String\n    public let isActive: Bool\n    public let createdAt: String\n    public let lastLogin: String?\n\n    private enum CodingKeys: String, CodingKey {\n        case id = \"id\"\n        case username = \"username\"\n        case email = \"email\"\n        case isActive = \"is_active\"\n        case createdAt = \"created_at\"\n        case lastLogin = \"last_login\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/ComprehensiveDemo.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\n// MARK: - Duration Helper\n/// Helper struct to decode Rust Duration format {\"secs\": u64, \"nanos\": u32}\npublic struct RustDuration: Codable {\n    public let secs: UInt64\n    public let nanos: UInt32\n    \n    public var timeInterval: TimeInterval {\n        return Double(secs) + Double(nanos) / 1_000_000_000.0\n    }\n}\n\n// MARK: - Generated Types\n\n/// Admin level enum\npublic enum AdminLevel: Codable {\n    case junior\n    case senior\n    case lead\n    case director\n}\n\n/// API response wrapper\npublic struct ApiResponse<T, E>: Codable {\n    public let data: T?\n    public let error: E?\n    public let status: ResponseStatus\n    public let metadata: ResponseMetadata\n}\n\n/// File attachment\npublic struct Attachment: Codable {\n    public let id: String\n    public let filename: String\n    public let size: UInt64\n    public let mimeType: String\n    public let uploadedAt: String\n    public let uploadedBy: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case id = \"id\"\n        case filename = \"filename\"\n        case size = \"size\"\n        case mimeType = \"mime_type\"\n        case uploadedAt = \"uploaded_at\"\n        case uploadedBy = \"uploaded_by\"\n    }\n}\n\n/// Data sharing settings\npublic struct DataSharing: Codable {\n    public let analytics: Bool\n    public let marketing: Bool\n    public let thirdParty: Bool\n    public let research: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case analytics = \"analytics\"\n        case marketing = \"marketing\"\n        case thirdParty = \"third_party\"\n        case research = \"research\"\n    }\n}\n\n/// Display settings\npublic struct DisplaySettings: Codable {\n    public let itemsPerPage: UInt32\n    public let dateFormat: String\n    public let timeFormat: String\n    public let currency: String\n    public let compactMode: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case itemsPerPage = \"items_per_page\"\n        case dateFormat = \"date_format\"\n        case timeFormat = \"time_format\"\n        case currency = \"currency\"\n        case compactMode = \"compact_mode\"\n    }\n}\n\n/// Health status enum\npublic enum HealthStatus: Codable {\n    case healthy\n    case degraded\n    case unhealthy\n    case unknown\n}\n\n/// Notification frequency enum\npublic enum NotificationFrequency: Codable {\n    case immediate\n    case hourly\n    case daily\n    case weekly\n    case never\n}\n\n/// Notification settings\npublic struct NotificationSettings: Codable {\n    public let emailEnabled: Bool\n    public let pushEnabled: Bool\n    public let smsEnabled: Bool\n    public let desktopEnabled: Bool\n    public let frequency: NotificationFrequency\n\n    private enum CodingKeys: String, CodingKey {\n        case emailEnabled = \"email_enabled\"\n        case pushEnabled = \"push_enabled\"\n        case smsEnabled = \"sms_enabled\"\n        case desktopEnabled = \"desktop_enabled\"\n        case frequency = \"frequency\"\n    }\n}\n\n/// Pagination information\npublic struct PaginationInfo: Codable {\n    public let page: UInt32\n    public let perPage: UInt32\n    public let totalPages: UInt32\n    public let totalItems: UInt64\n    public let hasNext: Bool\n    public let hasPrev: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case page = \"page\"\n        case perPage = \"per_page\"\n        case totalPages = \"total_pages\"\n        case totalItems = \"total_items\"\n        case hasNext = \"has_next\"\n        case hasPrev = \"has_prev\"\n    }\n}\n\n/// Priority enum (string enum)\npublic enum Priority: Codable {\n    case low\n    case medium\n    case high\n    case critical\n    case emergency\n}\n\n/// Privacy settings\npublic struct PrivacySettings: Codable {\n    public let profileVisibility: Visibility\n    public let activityVisibility: Visibility\n    public let dataSharing: DataSharing\n\n    private enum CodingKeys: String, CodingKey {\n        case profileVisibility = \"profile_visibility\"\n        case activityVisibility = \"activity_visibility\"\n        case dataSharing = \"data_sharing\"\n    }\n}\n\n/// Response metadata\npublic struct ResponseMetadata: Codable {\n    public let requestId: String\n    public let timestamp: String\n    public let processingTime: RustDuration\n    public let version: String\n    public let pagination: PaginationInfo?\n\n    private enum CodingKeys: String, CodingKey {\n        case requestId = \"request_id\"\n        case timestamp = \"timestamp\"\n        case processingTime = \"processing_time\"\n        case version = \"version\"\n        case pagination = \"pagination\"\n    }\n}\n\n/// Response status enum\npublic enum ResponseStatus: Codable {\n    case success\n    case partialSuccess\n    case error\n    case validationError\n    case authenticationError\n    case authorizationError\n    case notFound\n    case rateLimited\n}\n\n/// Review comment\npublic struct ReviewComment: Codable {\n    public let id: UInt32\n    public let author: UInt32\n    public let content: String\n    public let createdAt: String\n    public let updatedAt: String\n    public let isResolved: Bool\n    public let parentComment: UInt32?\n    public let attachments: [Attachment]\n\n    private enum CodingKeys: String, CodingKey {\n        case id = \"id\"\n        case author = \"author\"\n        case content = \"content\"\n        case createdAt = \"created_at\"\n        case updatedAt = \"updated_at\"\n        case isResolved = \"is_resolved\"\n        case parentComment = \"parent_comment\"\n        case attachments = \"attachments\"\n    }\n}\n\n/// Service status\npublic struct ServiceStatus: Codable {\n    public let name: String\n    public let status: HealthStatus\n    public let responseTime: RustDuration\n    public let lastCheck: String\n    public let errorCount: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case name = \"name\"\n        case status = \"status\"\n        case responseTime = \"response_time\"\n        case lastCheck = \"last_check\"\n        case errorCount = \"error_count\"\n    }\n}\n\n/// Subtask with timing information\npublic struct SubTask: Codable {\n    public let id: UInt32\n    public let title: String\n    public let description: String?\n    public let status: SubTaskStatus\n    public let estimatedDuration: RustDuration\n    public let actualDuration: RustDuration?\n    public let assignee: UInt32?\n    public let createdAt: String\n    public let completedAt: String?\n\n    private enum CodingKeys: String, CodingKey {\n        case id = \"id\"\n        case title = \"title\"\n        case description = \"description\"\n        case status = \"status\"\n        case estimatedDuration = \"estimated_duration\"\n        case actualDuration = \"actual_duration\"\n        case assignee = \"assignee\"\n        case createdAt = \"created_at\"\n        case completedAt = \"completed_at\"\n    }\n}\n\n/// Subtask status (simple enum)\npublic enum SubTaskStatus: Codable {\n    case pending\n    case inProgress\n    case completed\n    case skipped\n}\n\n/// System health information\npublic struct SystemHealth: Codable {\n    public let status: HealthStatus\n    public let uptime: RustDuration\n    public let lastCheck: String\n    public let services: [ServiceStatus]\n    public let metrics: SystemMetrics\n\n    private enum CodingKeys: String, CodingKey {\n        case status = \"status\"\n        case uptime = \"uptime\"\n        case lastCheck = \"last_check\"\n        case services = \"services\"\n        case metrics = \"metrics\"\n    }\n}\n\n/// System metrics\npublic struct SystemMetrics: Codable {\n    public let cpuUsage: Double\n    public let memoryUsage: Double\n    public let diskUsage: Double\n    public let networkUsage: Double\n    public let activeUsers: UInt32\n    public let totalRequests: UInt64\n    public let errorRate: Double\n\n    private enum CodingKeys: String, CodingKey {\n        case cpuUsage = \"cpu_usage\"\n        case memoryUsage = \"memory_usage\"\n        case diskUsage = \"disk_usage\"\n        case networkUsage = \"network_usage\"\n        case activeUsers = \"active_users\"\n        case totalRequests = \"total_requests\"\n        case errorRate = \"error_rate\"\n    }\n}\n\n/// Comprehensive demonstration of ALL specta-swift functionality\n/// \n/// This example showcases every feature and capability of specta-swift in a single,\n/// realistic application scenario. It demonstrates complex type relationships,\n/// various enum patterns, special types, and advanced features.\n/// Main application types for a task management system\npublic struct Task: Codable {\n    public let id: UInt32\n    public let title: String\n    public let description: String?\n    public let status: TaskStatus\n    public let priority: Priority\n    public let assignee: User?\n    public let createdAt: String\n    public let updatedAt: String\n    public let dueDate: String?\n    public let duration: RustDuration?\n    public let tags: [String]\n    public let metadata: TaskMetadata\n    public let subtasks: [SubTask]\n\n    private enum CodingKeys: String, CodingKey {\n        case id = \"id\"\n        case title = \"title\"\n        case description = \"description\"\n        case status = \"status\"\n        case priority = \"priority\"\n        case assignee = \"assignee\"\n        case createdAt = \"created_at\"\n        case updatedAt = \"updated_at\"\n        case dueDate = \"due_date\"\n        case duration = \"duration\"\n        case tags = \"tags\"\n        case metadata = \"metadata\"\n        case subtasks = \"subtasks\"\n    }\n}\n\n/// Task metadata\npublic struct TaskMetadata: Codable {\n    public let createdBy: UInt32\n    public let lastModifiedBy: UInt32\n    public let version: UInt32\n    public let customFields: [(String, String)]\n    public let attachments: [Attachment]\n    public let watchers: [UInt32]\n    public let dependencies: [UInt32]\n\n    private enum CodingKeys: String, CodingKey {\n        case createdBy = \"created_by\"\n        case lastModifiedBy = \"last_modified_by\"\n        case version = \"version\"\n        case customFields = \"custom_fields\"\n        case attachments = \"attachments\"\n        case watchers = \"watchers\"\n        case dependencies = \"dependencies\"\n    }\n}\n\n/// Task status enum with mixed variants\npublic enum TaskStatus {\n    case todo\n    case inProgress(TaskStatusInProgressData)\n    case blocked(TaskStatusBlockedData)\n    case review(TaskStatusReviewData)\n    case completed(TaskStatusCompletedData)\n    case cancelled(TaskStatusCancelledData)\n}\npublic struct TaskStatusInProgressData: Codable {\n    public let startedAt: String\n    public let estimatedCompletion: String?\n    public let progress: Float\n\n    private enum CodingKeys: String, CodingKey {\n        case startedAt = \"started_at\"\n        case estimatedCompletion = \"estimated_completion\"\n        case progress = \"progress\"\n    }\n}\n\npublic struct TaskStatusBlockedData: Codable {\n    public let reason: String\n    public let blockedBy: [UInt32]\n    public let estimatedUnblock: String?\n\n    private enum CodingKeys: String, CodingKey {\n        case reason = \"reason\"\n        case blockedBy = \"blocked_by\"\n        case estimatedUnblock = \"estimated_unblock\"\n    }\n}\n\npublic struct TaskStatusReviewData: Codable {\n    public let reviewer: String\n    public let reviewStartedAt: String\n    public let comments: [ReviewComment]\n\n    private enum CodingKeys: String, CodingKey {\n        case reviewer = \"reviewer\"\n        case reviewStartedAt = \"review_started_at\"\n        case comments = \"comments\"\n    }\n}\n\npublic struct TaskStatusCompletedData: Codable {\n    public let completedAt: String\n    public let completionTime: RustDuration\n    public let finalNotes: String?\n\n    private enum CodingKeys: String, CodingKey {\n        case completedAt = \"completed_at\"\n        case completionTime = \"completion_time\"\n        case finalNotes = \"final_notes\"\n    }\n}\n\npublic struct TaskStatusCancelledData: Codable {\n    public let reason: String\n    public let cancelledAt: String\n\n    private enum CodingKeys: String, CodingKey {\n        case reason = \"reason\"\n        case cancelledAt = \"cancelled_at\"\n    }\n}\n\n// MARK: - TaskStatus Codable Implementation\nextension TaskStatus: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case todo = \"Todo\"\n        case inProgress = \"InProgress\"\n        case blocked = \"Blocked\"\n        case review = \"Review\"\n        case completed = \"Completed\"\n        case cancelled = \"Cancelled\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .todo:\n            self = .todo\n        case .inProgress:\n            let data = try container.decode(TaskStatusInProgressData.self, forKey: .inProgress)\n            self = .inProgress(data)\n        case .blocked:\n            let data = try container.decode(TaskStatusBlockedData.self, forKey: .blocked)\n            self = .blocked(data)\n        case .review:\n            let data = try container.decode(TaskStatusReviewData.self, forKey: .review)\n            self = .review(data)\n        case .completed:\n            let data = try container.decode(TaskStatusCompletedData.self, forKey: .completed)\n            self = .completed(data)\n        case .cancelled:\n            let data = try container.decode(TaskStatusCancelledData.self, forKey: .cancelled)\n            self = .cancelled(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .todo:\n            try container.encodeNil(forKey: .todo)\n        case .inProgress(let data):\n            try container.encode(data, forKey: .inProgress)\n        case .blocked(let data):\n            try container.encode(data, forKey: .blocked)\n        case .review(let data):\n            try container.encode(data, forKey: .review)\n        case .completed(let data):\n            try container.encode(data, forKey: .completed)\n        case .cancelled(let data):\n            try container.encode(data, forKey: .cancelled)\n        }\n    }\n}\n\n\n/// Theme enum (string enum)\npublic enum Theme: Codable {\n    case light\n    case dark\n    case auto\n    case custom\n}\n\n/// User information\npublic struct User: Codable {\n    public let id: UInt32\n    public let username: String\n    public let email: String\n    public let profile: UserProfile\n    public let preferences: UserPreferences\n    public let role: UserRole\n    public let isActive: Bool\n    public let lastLogin: String?\n    public let createdAt: String\n\n    private enum CodingKeys: String, CodingKey {\n        case id = \"id\"\n        case username = \"username\"\n        case email = \"email\"\n        case profile = \"profile\"\n        case preferences = \"preferences\"\n        case role = \"role\"\n        case isActive = \"is_active\"\n        case lastLogin = \"last_login\"\n        case createdAt = \"created_at\"\n    }\n}\n\n/// User preferences\npublic struct UserPreferences: Codable {\n    public let theme: Theme\n    public let notifications: NotificationSettings\n    public let privacy: PrivacySettings\n    public let display: DisplaySettings\n}\n\n/// User profile with nested data\npublic struct UserProfile: Codable {\n    public let firstName: String\n    public let lastName: String\n    public let bio: String?\n    public let avatarUrl: String?\n    public let timezone: String\n    public let language: String\n\n    private enum CodingKeys: String, CodingKey {\n        case firstName = \"first_name\"\n        case lastName = \"last_name\"\n        case bio = \"bio\"\n        case avatarUrl = \"avatar_url\"\n        case timezone = \"timezone\"\n        case language = \"language\"\n    }\n}\n\n/// User role with permissions\npublic enum UserRole {\n    case user\n    case moderator(UserRoleModeratorData)\n    case admin(UserRoleAdminData)\n    case superAdmin(UserRoleSuperAdminData)\n}\npublic struct UserRoleModeratorData: Codable {\n    public let permissions: [String]\n    public let department: String\n}\n\npublic struct UserRoleAdminData: Codable {\n    public let level: AdminLevel\n    public let departments: [String]\n    public let specialAccess: [String]\n\n    private enum CodingKeys: String, CodingKey {\n        case level = \"level\"\n        case departments = \"departments\"\n        case specialAccess = \"special_access\"\n    }\n}\n\npublic struct UserRoleSuperAdminData: Codable {\n    public let systemAccess: Bool\n    public let auditLogs: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case systemAccess = \"system_access\"\n        case auditLogs = \"audit_logs\"\n    }\n}\n\n// MARK: - UserRole Codable Implementation\nextension UserRole: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case user = \"User\"\n        case moderator = \"Moderator\"\n        case admin = \"Admin\"\n        case superAdmin = \"SuperAdmin\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .user:\n            self = .user\n        case .moderator:\n            let data = try container.decode(UserRoleModeratorData.self, forKey: .moderator)\n            self = .moderator(data)\n        case .admin:\n            let data = try container.decode(UserRoleAdminData.self, forKey: .admin)\n            self = .admin(data)\n        case .superAdmin:\n            let data = try container.decode(UserRoleSuperAdminData.self, forKey: .superAdmin)\n            self = .superAdmin(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .user:\n            try container.encodeNil(forKey: .user)\n        case .moderator(let data):\n            try container.encode(data, forKey: .moderator)\n        case .admin(let data):\n            try container.encode(data, forKey: .admin)\n        case .superAdmin(let data):\n            try container.encode(data, forKey: .superAdmin)\n        }\n    }\n}\n\n\n/// Visibility enum\npublic enum Visibility: Codable {\n    case public\n    case friends\n    case private\n    case hidden\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/CustomHeader.swift",
    "content": "// Generated by MyAwesomeApp v2.0\n// Custom header with app info\n// DO NOT EDIT MANUALLY\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/CustomTypes.swift",
    "content": "// Generated by MyApp - Custom Header\nimport Foundation\n\npublic enum api_result<T> {\n    case success(api_resultSuccessData)\n    case error(api_resultErrorData)\n    case loading(api_resultLoadingData)\n}\npublic struct api_resultSuccessData: Codable {\n    public let data: T\n    public let status: UInt16\n}\n\npublic struct api_resultErrorData: Codable {\n    public let message: String\n    public let code: UInt32\n}\n\npublic struct api_resultLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - api_result Codable Implementation\nextension api_result: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(api_resultSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(api_resultErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(api_resultLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct user: Codable {\n    public let id: UInt32\n    public let name: String\n    public let email: Optional<String>\n    public let role: user_role\n}\n\npublic enum user_role {\n    case guest\n    case user(user_roleUserData)\n    case admin(user_roleAdminData)\n    case super_admin(user_roleSuperAdminData)\n}\npublic struct user_roleUserData: Codable {\n    public let permissions: [String]\n}\n\npublic struct user_roleAdminData: Codable {\n    public let level: UInt8\n    public let department: String\n}\n\npublic struct user_roleSuperAdminData: Codable {\n    public let access_level: UInt32\n}\n\n// MARK: - user_role Codable Implementation\nextension user_role: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case guest = \"Guest\"\n        case user = \"User\"\n        case admin = \"Admin\"\n        case super_admin = \"SuperAdmin\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .guest:\n            self = .guest\n        case .user:\n            let data = try container.decode(user_roleUserData.self, forKey: .user)\n            self = .user(data)\n        case .admin:\n            let data = try container.decode(user_roleAdminData.self, forKey: .admin)\n            self = .admin(data)\n        case .super_admin:\n            let data = try container.decode(user_roleSuperAdminData.self, forKey: .super_admin)\n            self = .super_admin(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .guest:\n            try container.encodeNil(forKey: .guest)\n        case .user(let data):\n            try container.encode(data, forKey: .user)\n        case .admin(let data):\n            try container.encode(data, forKey: .admin)\n        case .super_admin(let data):\n            try container.encode(data, forKey: .super_admin)\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "specta-swift/examples/generated/DefaultConfig.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/OptionalType.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: Optional<[(String, String)]>\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: Optional<String>\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/PascalCase.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/ProtocolGenerics.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/QuestionMark.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/SimpleTypes.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResult<T> {\n    case success(ApiResultSuccessData)\n    case error(ApiResultErrorData)\n    case loading(ApiResultLoadingData)\n}\npublic struct ApiResultSuccessData: Codable {\n    public let data: T\n    public let status: UInt16\n}\n\npublic struct ApiResultErrorData: Codable {\n    public let message: String\n    public let code: UInt32\n}\n\npublic struct ApiResultLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResult Codable Implementation\nextension ApiResult: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResultSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResultErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResultLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct User: Codable {\n    public let id: UInt32\n    public let name: String\n    public let email: String?\n    public let role: UserRole\n}\n\npublic enum UserRole {\n    case guest\n    case user(UserRoleUserData)\n    case admin(UserRoleAdminData)\n    case superAdmin(UserRoleSuperAdminData)\n}\npublic struct UserRoleUserData: Codable {\n    public let permissions: [String]\n}\n\npublic struct UserRoleAdminData: Codable {\n    public let level: UInt8\n    public let department: String\n}\n\npublic struct UserRoleSuperAdminData: Codable {\n    public let accessLevel: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case accessLevel = \"access_level\"\n    }\n}\n\n// MARK: - UserRole Codable Implementation\nextension UserRole: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case guest = \"Guest\"\n        case user = \"User\"\n        case admin = \"Admin\"\n        case superAdmin = \"SuperAdmin\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .guest:\n            self = .guest\n        case .user:\n            let data = try container.decode(UserRoleUserData.self, forKey: .user)\n            self = .user(data)\n        case .admin:\n            let data = try container.decode(UserRoleAdminData.self, forKey: .admin)\n            self = .admin(data)\n        case .superAdmin:\n            let data = try container.decode(UserRoleSuperAdminData.self, forKey: .superAdmin)\n            self = .superAdmin(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .guest:\n            try container.encodeNil(forKey: .guest)\n        case .user(let data):\n            try container.encode(data, forKey: .user)\n        case .admin(let data):\n            try container.encode(data, forKey: .admin)\n        case .superAdmin(let data):\n            try container.encode(data, forKey: .superAdmin)\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "specta-swift/examples/generated/SnakeCase.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum api_response<T> {\n    case success(api_responseSuccessData)\n    case error(api_responseErrorData)\n    case loading(api_responseLoadingData)\n}\npublic struct api_responseSuccessData: Codable {\n    public let data: T\n    public let status_code: UInt16\n}\n\npublic struct api_responseErrorData: Codable {\n    public let message: String\n    public let error_code: UInt32\n}\n\npublic struct api_responseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - api_response Codable Implementation\nextension api_response: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(api_responseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(api_responseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(api_responseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct generic_container<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct user: Codable {\n    public let user_id: UInt32\n    public let full_name: String\n    public let email_address: String?\n    public let is_verified: Bool\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/Spaces2.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/Spaces4.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/SpecialTypes.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\n// MARK: - Duration Helper\n/// Helper struct to decode Rust Duration format {\"secs\": u64, \"nanos\": u32}\npublic struct RustDuration: Codable {\n    public let secs: UInt64\n    public let nanos: UInt32\n    \n    public var timeInterval: TimeInterval {\n        return Double(secs) + Double(nanos) / 1_000_000_000.0\n    }\n}\n\n// MARK: - Generated Types\n\n/// API response with timing information\npublic struct ApiResponse: Codable {\n    public let data: String\n    public let processingDuration: RustDuration\n    public let cacheDuration: RustDuration?\n    public let transferDuration: RustDuration\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case processingDuration = \"processing_duration\"\n        case cacheDuration = \"cache_duration\"\n        case transferDuration = \"transfer_duration\"\n        case statusCode = \"status_code\"\n    }\n}\n\n/// Struct with various timestamp types\npublic struct EventLog: Codable {\n    public let eventId: String\n    public let timestamp: String\n    public let duration: RustDuration\n    public let metadata: [(String, String)]?\n\n    private enum CodingKeys: String, CodingKey {\n        case eventId = \"event_id\"\n        case timestamp = \"timestamp\"\n        case duration = \"duration\"\n        case metadata = \"metadata\"\n    }\n}\n\n/// Example showcasing special type handling in specta-swift\n/// \n/// This example demonstrates how specta-swift handles special Rust types\n/// like Duration, UUID, chrono types, and other commonly used types\n/// that need special conversion to Swift equivalents.\n/// Struct with Duration fields (will be converted to RustDuration helper)\npublic struct IndexerMetrics: Codable {\n    public let totalDuration: RustDuration\n    public let discoveryDuration: RustDuration\n    public let processingDuration: RustDuration\n    public let contentDuration: RustDuration\n    public let filesProcessed: UInt32\n    public let avgTimePerFile: RustDuration\n\n    private enum CodingKeys: String, CodingKey {\n        case totalDuration = \"total_duration\"\n        case discoveryDuration = \"discovery_duration\"\n        case processingDuration = \"processing_duration\"\n        case contentDuration = \"content_duration\"\n        case filesProcessed = \"files_processed\"\n        case avgTimePerFile = \"avg_time_per_file\"\n    }\n}\n\n/// Job status with timing\npublic enum JobStatus {\n    case queued\n    case running(JobStatusRunningData)\n    case completed(JobStatusCompletedData)\n    case failed(JobStatusFailedData)\n}\npublic struct JobStatusRunningData: Codable {\n    public let startedAt: String\n    public let elapsedTime: RustDuration\n    public let estimatedCompletion: String?\n\n    private enum CodingKeys: String, CodingKey {\n        case startedAt = \"started_at\"\n        case elapsedTime = \"elapsed_time\"\n        case estimatedCompletion = \"estimated_completion\"\n    }\n}\n\npublic struct JobStatusCompletedData: Codable {\n    public let startedAt: String\n    public let completedAt: String\n    public let totalDuration: RustDuration\n    public let result: String\n\n    private enum CodingKeys: String, CodingKey {\n        case startedAt = \"started_at\"\n        case completedAt = \"completed_at\"\n        case totalDuration = \"total_duration\"\n        case result = \"result\"\n    }\n}\n\npublic struct JobStatusFailedData: Codable {\n    public let startedAt: String\n    public let failedAt: String\n    public let duration: RustDuration\n    public let errorMessage: String\n\n    private enum CodingKeys: String, CodingKey {\n        case startedAt = \"started_at\"\n        case failedAt = \"failed_at\"\n        case duration = \"duration\"\n        case errorMessage = \"error_message\"\n    }\n}\n\n// MARK: - JobStatus Codable Implementation\nextension JobStatus: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case queued = \"Queued\"\n        case running = \"Running\"\n        case completed = \"Completed\"\n        case failed = \"Failed\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .queued:\n            self = .queued\n        case .running:\n            let data = try container.decode(JobStatusRunningData.self, forKey: .running)\n            self = .running(data)\n        case .completed:\n            let data = try container.decode(JobStatusCompletedData.self, forKey: .completed)\n            self = .completed(data)\n        case .failed:\n            let data = try container.decode(JobStatusFailedData.self, forKey: .failed)\n            self = .failed(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .queued:\n            try container.encodeNil(forKey: .queued)\n        case .running(let data):\n            try container.encode(data, forKey: .running)\n        case .completed(let data):\n            try container.encode(data, forKey: .completed)\n        case .failed(let data):\n            try container.encode(data, forKey: .failed)\n        }\n    }\n}\n\n\n/// Performance metrics struct\npublic struct PerformanceMetrics: Codable {\n    public let responseTime: RustDuration\n    public let processingTime: RustDuration\n    public let queryTime: RustDuration\n    public let networkLatency: RustDuration\n    public let totalTime: RustDuration\n\n    private enum CodingKeys: String, CodingKey {\n        case responseTime = \"response_time\"\n        case processingTime = \"processing_time\"\n        case queryTime = \"query_time\"\n        case networkLatency = \"network_latency\"\n        case totalTime = \"total_time\"\n    }\n}\n\n/// Complex struct mixing Duration with other types\npublic struct SystemHealth: Codable {\n    public let uptime: RustDuration\n    public let lastCheck: RustDuration\n    public let avgResponseTime: RustDuration\n    public let status: String\n    public let memoryUsage: Double\n    public let cpuUsage: Double\n\n    private enum CodingKeys: String, CodingKey {\n        case uptime = \"uptime\"\n        case lastCheck = \"last_check\"\n        case avgResponseTime = \"avg_response_time\"\n        case status = \"status\"\n        case memoryUsage = \"memory_usage\"\n        case cpuUsage = \"cpu_usage\"\n    }\n}\n\n/// Configuration struct with timing information\npublic struct TaskConfig: Codable {\n    public let name: String\n    public let timeout: RustDuration\n    public let retryInterval: RustDuration\n    public let backoffDuration: RustDuration\n    public let enabled: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case name = \"name\"\n        case timeout = \"timeout\"\n        case retryInterval = \"retry_interval\"\n        case backoffDuration = \"backoff_duration\"\n        case enabled = \"enabled\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/StringEnums.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\n/// Mixed enum with both string-like and data variants\npublic enum ApiResult {\n    case success\n    case successWithData(ApiResultSuccessWithDataData)\n    case error(ApiResultErrorData)\n    case loading\n}\npublic struct ApiResultSuccessWithDataData: Codable {\n    public let data: String\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResultErrorData: Codable {\n    public let message: String\n    public let code: UInt32\n}\n\n// MARK: - ApiResult Codable Implementation\nextension ApiResult: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case successWithData = \"SuccessWithData\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            self = .success\n        case .successWithData:\n            let data = try container.decode(ApiResultSuccessWithDataData.self, forKey: .successWithData)\n            self = .successWithData(data)\n        case .error:\n            let data = try container.decode(ApiResultErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            self = .loading\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success:\n            try container.encodeNil(forKey: .success)\n        case .successWithData(let data):\n            try container.encode(data, forKey: .successWithData)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading:\n            try container.encodeNil(forKey: .loading)\n        }\n    }\n}\n\n\n/// String enum with more complex values\npublic enum Environment: Codable {\n    case development\n    case staging\n    case production\n    case testing\n}\n\n/// Complex enum with multiple data variants\npublic enum EventType {\n    case userCreated\n    case userUpdated(EventTypeUserUpdatedData)\n    case userDeleted(EventTypeUserDeletedData)\n    case systemEvent(EventTypeSystemEventData)\n}\npublic struct EventTypeUserUpdatedData: Codable {\n    public let userId: UInt32\n    public let changes: [(String, String)]\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case changes = \"changes\"\n    }\n}\n\npublic struct EventTypeUserDeletedData: Codable {\n    public let userId: UInt32\n    public let reason: String\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case reason = \"reason\"\n    }\n}\n\npublic struct EventTypeSystemEventData: Codable {\n    public let component: String\n    public let level: String\n    public let message: String\n}\n\n// MARK: - EventType Codable Implementation\nextension EventType: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case userCreated = \"UserCreated\"\n        case userUpdated = \"UserUpdated\"\n        case userDeleted = \"UserDeleted\"\n        case systemEvent = \"SystemEvent\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .userCreated:\n            self = .userCreated\n        case .userUpdated:\n            let data = try container.decode(EventTypeUserUpdatedData.self, forKey: .userUpdated)\n            self = .userUpdated(data)\n        case .userDeleted:\n            let data = try container.decode(EventTypeUserDeletedData.self, forKey: .userDeleted)\n            self = .userDeleted(data)\n        case .systemEvent:\n            let data = try container.decode(EventTypeSystemEventData.self, forKey: .systemEvent)\n            self = .systemEvent(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .userCreated:\n            try container.encodeNil(forKey: .userCreated)\n        case .userUpdated(let data):\n            try container.encode(data, forKey: .userUpdated)\n        case .userDeleted(let data):\n            try container.encode(data, forKey: .userDeleted)\n        case .systemEvent(let data):\n            try container.encode(data, forKey: .systemEvent)\n        }\n    }\n}\n\n\n/// String enum for file types\npublic enum FileType: Codable {\n    case image\n    case video\n    case audio\n    case document\n    case archive\n    case unknown\n}\n\n/// Comprehensive example showcasing string enums and custom Codable implementations\n/// \n/// This example demonstrates how specta-swift handles string enums, mixed enums,\n/// and generates appropriate Codable implementations for different enum patterns.\n/// Simple string enum (will be converted to Swift String enum with Codable)\npublic enum HttpStatus: Codable {\n    case ok\n    case created\n    case accepted\n    case noContent\n    case badRequest\n    case unauthorized\n    case notFound\n    case internalServerError\n}\n\n/// String enum for job states\npublic enum JobState: Codable {\n    case queued\n    case running\n    case paused\n    case completed\n    case failed\n    case cancelled\n}\n\n/// Mixed enum with complex variants\npublic enum NotificationType {\n    case email\n    case push\n    case sms\n    case webhook(NotificationTypeWebhookData)\n    case inApp(NotificationTypeInAppData)\n}\npublic struct NotificationTypeWebhookData: Codable {\n    public let url: String\n    public let headers: [(String, String)]\n    public let retryCount: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case url = \"url\"\n        case headers = \"headers\"\n        case retryCount = \"retry_count\"\n    }\n}\n\npublic struct NotificationTypeInAppData: Codable {\n    public let title: String\n    public let message: String\n    public let priority: String\n}\n\n// MARK: - NotificationType Codable Implementation\nextension NotificationType: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case email = \"Email\"\n        case push = \"Push\"\n        case sms = \"Sms\"\n        case webhook = \"Webhook\"\n        case inApp = \"InApp\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .email:\n            self = .email\n        case .push:\n            self = .push\n        case .sms:\n            self = .sms\n        case .webhook:\n            let data = try container.decode(NotificationTypeWebhookData.self, forKey: .webhook)\n            self = .webhook(data)\n        case .inApp:\n            let data = try container.decode(NotificationTypeInAppData.self, forKey: .inApp)\n            self = .inApp(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .email:\n            try container.encodeNil(forKey: .email)\n        case .push:\n            try container.encodeNil(forKey: .push)\n        case .sms:\n            try container.encodeNil(forKey: .sms)\n        case .webhook(let data):\n            try container.encode(data, forKey: .webhook)\n        case .inApp(let data):\n            try container.encode(data, forKey: .inApp)\n        }\n    }\n}\n\n\n/// Enum with generic type parameter\npublic enum Result<T, E>: Codable {\n    case ok(T)\n    case err(E)\n}\n\n/// Complex mixed enum\npublic enum UserAction {\n    case login\n    case logout\n    case updateProfile(UserActionUpdateProfileData)\n    case changePassword(UserActionChangePasswordData)\n    case deleteAccount\n}\npublic struct UserActionUpdateProfileData: Codable {\n    public let name: String\n    public let email: String\n    public let avatarUrl: String?\n\n    private enum CodingKeys: String, CodingKey {\n        case name = \"name\"\n        case email = \"email\"\n        case avatarUrl = \"avatar_url\"\n    }\n}\n\npublic struct UserActionChangePasswordData: Codable {\n    public let oldPassword: String\n    public let newPassword: String\n\n    private enum CodingKeys: String, CodingKey {\n        case oldPassword = \"old_password\"\n        case newPassword = \"new_password\"\n    }\n}\n\n// MARK: - UserAction Codable Implementation\nextension UserAction: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case login = \"Login\"\n        case logout = \"Logout\"\n        case updateProfile = \"UpdateProfile\"\n        case changePassword = \"ChangePassword\"\n        case deleteAccount = \"DeleteAccount\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .login:\n            self = .login\n        case .logout:\n            self = .logout\n        case .updateProfile:\n            let data = try container.decode(UserActionUpdateProfileData.self, forKey: .updateProfile)\n            self = .updateProfile(data)\n        case .changePassword:\n            let data = try container.decode(UserActionChangePasswordData.self, forKey: .changePassword)\n            self = .changePassword(data)\n        case .deleteAccount:\n            self = .deleteAccount\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .login:\n            try container.encodeNil(forKey: .login)\n        case .logout:\n            try container.encodeNil(forKey: .logout)\n        case .updateProfile(let data):\n            try container.encode(data, forKey: .updateProfile)\n        case .changePassword(let data):\n            try container.encode(data, forKey: .changePassword)\n        case .deleteAccount:\n            try container.encodeNil(forKey: .deleteAccount)\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "specta-swift/examples/generated/Tabs.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/TypealiasGenerics.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/WithProtocols.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\nimport Equatable\nimport Hashable\nimport CustomStringConvertible\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/generated/WithSerde.swift",
    "content": "// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\nimport Codable\n\npublic enum ApiResponse<T> {\n    case success(ApiResponseSuccessData)\n    case error(ApiResponseErrorData)\n    case loading(ApiResponseLoadingData)\n}\npublic struct ApiResponseSuccessData: Codable {\n    public let data: T\n    public let statusCode: UInt16\n\n    private enum CodingKeys: String, CodingKey {\n        case data = \"data\"\n        case statusCode = \"status_code\"\n    }\n}\n\npublic struct ApiResponseErrorData: Codable {\n    public let message: String\n    public let errorCode: UInt32\n\n    private enum CodingKeys: String, CodingKey {\n        case message = \"message\"\n        case errorCode = \"error_code\"\n    }\n}\n\npublic struct ApiResponseLoadingData: Codable {\n    public let progress: Float\n}\n\n// MARK: - ApiResponse Codable Implementation\nextension ApiResponse: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case success = \"Success\"\n        case error = \"Error\"\n        case loading = \"Loading\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .success:\n            let data = try container.decode(ApiResponseSuccessData.self, forKey: .success)\n            self = .success(data)\n        case .error:\n            let data = try container.decode(ApiResponseErrorData.self, forKey: .error)\n            self = .error(data)\n        case .loading:\n            let data = try container.decode(ApiResponseLoadingData.self, forKey: .loading)\n            self = .loading(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .success(let data):\n            try container.encode(data, forKey: .success)\n        case .error(let data):\n            try container.encode(data, forKey: .error)\n        case .loading(let data):\n            try container.encode(data, forKey: .loading)\n        }\n    }\n}\n\n\npublic struct GenericContainer<T, U>: Codable {\n    public let primary: T\n    public let secondary: U\n    public let metadata: [(String, String)]?\n}\n\n/// Comprehensive example showcasing ALL configuration options for specta-swift\n/// \n/// This example demonstrates every configuration option available in the Swift exporter,\n/// showing how different settings affect the generated Swift code.\n/// Sample types for demonstration\npublic struct User: Codable {\n    public let userId: UInt32\n    public let fullName: String\n    public let emailAddress: String?\n    public let isVerified: Bool\n\n    private enum CodingKeys: String, CodingKey {\n        case userId = \"user_id\"\n        case fullName = \"full_name\"\n        case emailAddress = \"email_address\"\n        case isVerified = \"is_verified\"\n    }\n}\n\n"
  },
  {
    "path": "specta-swift/examples/simple_usage.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n// Simple user management types\n#[derive(Type)]\nstruct User {\n    id: u32,\n    name: String,\n    email: Option<String>,\n    role: UserRole,\n}\n\n#[derive(Type)]\nenum UserRole {\n    Guest,\n    User { permissions: Vec<String> },\n    Admin { level: u8, department: String },\n    SuperAdmin { access_level: u32 },\n}\n\n#[derive(Type)]\nenum ApiResult<T> {\n    Success { data: T, status: u16 },\n    Error { message: String, code: u32 },\n    Loading { progress: f32 },\n}\n\nfn main() {\n    // Create a type collection\n    let types = Types::default()\n        .register::<User>()\n        .register::<UserRole>()\n        .register::<ApiResult<String>>();\n\n    // Export to Swift with default settings\n    let swift = Swift::default();\n    swift\n        .export_to(\n            \"./examples/generated/SimpleTypes.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n\n    println!(\"Simple types exported to SimpleTypes.swift\");\n\n    // Export with custom settings\n    let custom_swift = Swift::new()\n        .header(\"// Generated by MyApp - Custom Header\")\n        .naming(specta_swift::NamingConvention::SnakeCase)\n        .optionals(specta_swift::OptionalStyle::Optional);\n\n    custom_swift\n        .export_to(\n            \"./examples/generated/CustomTypes.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n\n    println!(\"Custom types exported to CustomTypes.swift\");\n}\n"
  },
  {
    "path": "specta-swift/examples/special_types.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\nuse std::time::Duration;\n\n/// Example showcasing special type handling in specta-swift\n///\n/// This example demonstrates how specta-swift handles special Rust types\n/// like Duration, UUID, chrono types, and other commonly used types\n/// that need special conversion to Swift equivalents.\n\n/// Struct with Duration fields (will be converted to RustDuration helper)\n#[derive(Type)]\nstruct IndexerMetrics {\n    /// Total time spent indexing\n    total_duration: Duration,\n    /// Time spent discovering files\n    discovery_duration: Duration,\n    /// Time spent processing content\n    processing_duration: Duration,\n    /// Time spent analyzing content\n    content_duration: Duration,\n    /// Number of files processed\n    files_processed: u32,\n    /// Average processing time per file\n    avg_time_per_file: Duration,\n}\n\n/// Struct with various timestamp types\n#[derive(Type)]\nstruct EventLog {\n    /// Event ID\n    event_id: String,\n    /// When the event occurred\n    timestamp: String,\n    /// Event duration\n    duration: Duration,\n    /// Additional metadata\n    metadata: Option<Vec<(String, String)>>,\n}\n\n/// Configuration struct with timing information\n#[derive(Type)]\nstruct TaskConfig {\n    /// Task name\n    name: String,\n    /// Maximum execution time\n    timeout: Duration,\n    /// Retry interval\n    retry_interval: Duration,\n    /// Backoff duration\n    backoff_duration: Duration,\n    /// Whether task is enabled\n    enabled: bool,\n}\n\n/// Performance metrics struct\n#[derive(Type)]\nstruct PerformanceMetrics {\n    /// Response time\n    response_time: Duration,\n    /// Processing time\n    processing_time: Duration,\n    /// Database query time\n    query_time: Duration,\n    /// Network latency\n    network_latency: Duration,\n    /// Total time\n    total_time: Duration,\n}\n\n/// API response with timing information\n#[derive(Type)]\nstruct ApiResponse {\n    /// Response data\n    data: String,\n    /// Processing duration\n    processing_duration: Duration,\n    /// Cache hit duration (if applicable)\n    cache_duration: Option<Duration>,\n    /// Network transfer duration\n    transfer_duration: Duration,\n    /// Status code\n    status_code: u16,\n}\n\n/// Job status with timing\n#[derive(Type)]\nenum JobStatus {\n    /// Job is queued\n    Queued,\n    /// Job is running with timing info\n    Running {\n        started_at: String,\n        elapsed_time: Duration,\n        estimated_completion: Option<String>,\n    },\n    /// Job completed successfully\n    Completed {\n        started_at: String,\n        completed_at: String,\n        total_duration: Duration,\n        result: String,\n    },\n    /// Job failed with error and timing\n    Failed {\n        started_at: String,\n        failed_at: String,\n        duration: Duration,\n        error_message: String,\n    },\n}\n\n/// Complex struct mixing Duration with other types\n#[derive(Type)]\nstruct SystemHealth {\n    /// System uptime\n    uptime: Duration,\n    /// Last health check\n    last_check: Duration,\n    /// Average response time\n    avg_response_time: Duration,\n    /// System status\n    status: String,\n    /// Memory usage percentage\n    memory_usage: f64,\n    /// CPU usage percentage\n    cpu_usage: f64,\n}\n\nfn main() {\n    println!(\"🚀 Special Types Example - Duration and timing types\");\n    println!(\"{}\", \"=\".repeat(60));\n\n    // Create type collection with all our special types\n    let types = Types::default()\n        .register::<IndexerMetrics>()\n        .register::<EventLog>()\n        .register::<TaskConfig>()\n        .register::<PerformanceMetrics>()\n        .register::<ApiResponse>()\n        .register::<JobStatus>()\n        .register::<SystemHealth>();\n\n    // Export with default settings\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"📝 Generated Swift code:\\n\");\n    println!(\"{}\", output);\n\n    // Write to file for inspection\n    swift\n        .export_to(\n            \"./examples/generated/SpecialTypes.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ Special types exported to SpecialTypes.swift\");\n\n    println!(\"\\n🔍 Key Features Demonstrated:\");\n    println!(\"• Duration type mapping to RustDuration helper struct\");\n    println!(\"• Automatic helper struct generation for Duration types\");\n    println!(\"• timeInterval property for easy Swift integration\");\n    println!(\"• Duration fields in structs and enum variants\");\n    println!(\"• Optional Duration fields\");\n    println!(\"• Complex timing-related data structures\");\n    println!(\"• Performance metrics with multiple Duration fields\");\n\n    println!(\"\\n💡 Duration Helper Features:\");\n    println!(\"• RustDuration struct with secs and nanos fields\");\n    println!(\"• timeInterval computed property (Double)\");\n    println!(\"• Proper Codable implementation for Rust format\");\n    println!(\"• Automatic injection when Duration types are detected\");\n\n    println!(\"\\n📋 Generated Helper Struct:\");\n    println!(\"```swift\");\n    println!(\"public struct RustDuration: Codable {{\");\n    println!(\"    public let secs: UInt64\");\n    println!(\"    public let nanos: UInt32\");\n    println!(\"    \");\n    println!(\"    public var timeInterval: TimeInterval {{\");\n    println!(\"        return Double(secs) + Double(nanos) / 1_000_000_000.0\");\n    println!(\"    }}\");\n    println!(\"}}\");\n    println!(\"```\");\n}\n"
  },
  {
    "path": "specta-swift/examples/string_enums.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n/// Comprehensive example showcasing string enums and custom Codable implementations\n///\n/// This example demonstrates how specta-swift handles string enums, mixed enums,\n/// and generates appropriate Codable implementations for different enum patterns.\n\n/// Simple string enum (will be converted to Swift String enum with Codable)\n#[derive(Type)]\nenum HttpStatus {\n    /// Request was successful\n    Ok,\n    /// Resource was created\n    Created,\n    /// Request was accepted\n    Accepted,\n    /// No content to return\n    NoContent,\n    /// Bad request\n    BadRequest,\n    /// Unauthorized access\n    Unauthorized,\n    /// Resource not found\n    NotFound,\n    /// Internal server error\n    InternalServerError,\n}\n\n/// String enum with more complex values\n#[derive(Type)]\nenum Environment {\n    /// Development environment\n    Development,\n    /// Staging environment\n    Staging,\n    /// Production environment\n    Production,\n    /// Testing environment\n    Testing,\n}\n\n/// Mixed enum with both string-like and data variants\n#[derive(Type)]\nenum ApiResult {\n    /// Simple success case\n    Success,\n    /// Success with data\n    SuccessWithData { data: String, status_code: u16 },\n    /// Error case\n    Error { message: String, code: u32 },\n    /// Loading state\n    Loading,\n}\n\n/// Complex mixed enum\n#[derive(Type)]\nenum UserAction {\n    /// Simple login action\n    Login,\n    /// Logout action\n    Logout,\n    /// Update profile with data\n    UpdateProfile {\n        name: String,\n        email: String,\n        avatar_url: Option<String>,\n    },\n    /// Change password\n    ChangePassword {\n        old_password: String,\n        new_password: String,\n    },\n    /// Delete account\n    DeleteAccount,\n}\n\n/// String enum for job states\n#[derive(Type)]\nenum JobState {\n    /// Job is waiting in queue\n    Queued,\n    /// Job is currently running\n    Running,\n    /// Job is paused\n    Paused,\n    /// Job completed successfully\n    Completed,\n    /// Job failed with error\n    Failed,\n    /// Job was cancelled\n    Cancelled,\n}\n\n/// Mixed enum with complex variants\n#[derive(Type)]\nenum NotificationType {\n    /// Simple email notification\n    Email,\n    /// Push notification\n    Push,\n    /// SMS notification\n    Sms,\n    /// Webhook notification with payload\n    Webhook {\n        url: String,\n        headers: Vec<(String, String)>,\n        retry_count: u32,\n    },\n    /// In-app notification\n    InApp {\n        title: String,\n        message: String,\n        priority: String,\n    },\n}\n\n/// Enum with generic type parameter\n#[derive(Type)]\nenum Result<T, E> {\n    /// Success with data\n    Ok(T),\n    /// Error with error details\n    Err(E),\n}\n\n/// Complex enum with multiple data variants\n#[derive(Type)]\nenum EventType {\n    /// User created event\n    UserCreated,\n    /// User updated event\n    UserUpdated {\n        user_id: u32,\n        changes: Vec<(String, String)>,\n    },\n    /// User deleted event\n    UserDeleted { user_id: u32, reason: String },\n    /// System event\n    SystemEvent {\n        component: String,\n        level: String,\n        message: String,\n    },\n}\n\n/// String enum for file types\n#[derive(Type)]\nenum FileType {\n    /// Image files\n    Image,\n    /// Video files\n    Video,\n    /// Audio files\n    Audio,\n    /// Document files\n    Document,\n    /// Archive files\n    Archive,\n    /// Unknown file type\n    Unknown,\n}\n\nfn main() {\n    println!(\"🚀 String Enums Example - String enums and custom Codable\");\n    println!(\"{}\", \"=\".repeat(60));\n\n    // Create type collection with all our enum types\n    let types = Types::default()\n        .register::<HttpStatus>()\n        .register::<Environment>()\n        .register::<ApiResult>()\n        .register::<UserAction>()\n        .register::<JobState>()\n        .register::<NotificationType>()\n        .register::<Result<String, String>>()\n        .register::<EventType>()\n        .register::<FileType>();\n\n    // Export with default settings\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"📝 Generated Swift code:\\n\");\n    println!(\"{}\", output);\n\n    // Write to file for inspection\n    swift\n        .export_to(\n            \"./examples/generated/StringEnums.swift\",\n            &types,\n            specta_serde::Format,\n        )\n        .unwrap();\n    println!(\"✅ String enums exported to StringEnums.swift\");\n\n    println!(\"\\n🔍 Key Features Demonstrated:\");\n    println!(\"• Pure string enums (String, Codable)\");\n    println!(\"• Mixed enums with both simple and complex variants\");\n    println!(\"• Custom Codable implementations for complex enums\");\n    println!(\"• Struct generation for named field variants\");\n    println!(\"• Generic enum support\");\n    println!(\"• Proper Swift enum case naming\");\n    println!(\"• Automatic protocol conformance\");\n\n    println!(\"\\n📋 String Enum Features:\");\n    println!(\"• Automatic String and Codable conformance\");\n    println!(\"• Simple enum cases without associated values\");\n    println!(\"• Clean Swift enum representation\");\n\n    println!(\"\\n📋 Mixed Enum Features:\");\n    println!(\"• Custom Codable implementation generation\");\n    println!(\"• Struct generation for named field variants\");\n    println!(\"• Proper key mapping (Rust → Swift naming)\");\n    println!(\"• Error handling in Codable implementations\");\n    println!(\"• Support for both simple and complex variants\");\n\n    println!(\"\\n💡 Generated Codable Features:\");\n    println!(\"• CodingKeys enum for key mapping\");\n    println!(\"• Custom init(from decoder:) implementation\");\n    println!(\"• Custom encode(to encoder:) implementation\");\n    println!(\"• Error handling for invalid data\");\n    println!(\"• Support for nested data structures\");\n}\n"
  },
  {
    "path": "specta-swift/src/error.rs",
    "content": "//! Error types for the Swift language exporter.\n\nuse thiserror::Error;\n\n/// Errors that can occur during Swift code generation.\n#[derive(Debug, Error)]\npub enum Error {\n    /// Swift does not support this type.\n    #[error(\"Unsupported type: {0}\")]\n    UnsupportedType(String),\n\n    /// Invalid identifier for Swift.\n    #[error(\"Invalid identifier: {0}\")]\n    InvalidIdentifier(String),\n\n    /// Circular reference detected in type definitions.\n    #[error(\"Circular reference detected\")]\n    CircularReference,\n\n    /// Generic constraint error.\n    #[error(\"Generic constraint error: {0}\")]\n    GenericConstraint(String),\n\n    /// IO error during file operations.\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// Invalid configuration.\n    #[error(\"Configuration error: {0}\")]\n    Configuration(String),\n\n    /// Custom format callback failed.\n    #[error(\"Format error: {message}: {source}\")]\n    Format {\n        /// Context describing which format callback failed.\n        message: &'static str,\n        /// The underlying format error.\n        source: specta::FormatError,\n    },\n}\n\nimpl Error {\n    pub(crate) fn format(message: &'static str, source: specta::FormatError) -> Self {\n        Self::Format { message, source }\n    }\n}\n"
  },
  {
    "path": "specta-swift/src/lib.rs",
    "content": "//! [Swift](https://www.swift.org) language exporter for [Specta](specta).\n//!\n//! This crate provides functionality to export Rust types to Swift code.\n//!\n//! # Usage\n//!\n//! Add `specta`, `specta-serde`, and `specta-swift` to your project:\n//!\n//! ```bash\n//! cargo add specta@2.0.0-rc.24 --features derive,collect\n//! cargo add specta-serde@0.0.11\n//! cargo add specta-swift@0.0.2\n//! ```\n//!\n//! Next copy the following into your `main.rs` file:\n//!\n//! ```rust\n//! use specta::{Type, Types};\n//! use specta_swift::Swift;\n//!\n//! #[derive(Type)]\n//! pub struct MyType {\n//!     pub field: MyOtherType,\n//! }\n//!\n//! #[derive(Type)]\n//! pub struct MyOtherType {\n//!     pub other_field: String,\n//! }\n//!\n//! let types = Types::default()\n//!     // We don't need to specify `MyOtherType` because it's referenced by `MyType`\n//!     .register::<MyType>();\n//!\n//! Swift::default()\n//!     .export_to(\"./Types.swift\", &types, specta_serde::Format)\n//!     .unwrap();\n//! ```\n//!\n//! Now you're set up with Specta Swift!\n//!\n//! If you get tired of listing all your types, checkout the `specta::collect` function.\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n\nmod error;\nmod primitives;\nmod swift;\n\npub use error::Error;\npub use swift::{GenericStyle, IndentStyle, NamingConvention, OptionalStyle, Swift};\n"
  },
  {
    "path": "specta-swift/src/primitives.rs",
    "content": "//! Primitive type conversion from Rust to Swift.\n\nuse specta::{\n    Format, Types,\n    datatype::{\n        DataType, Enum, Fields, Generic, NamedReferenceType, Primitive, Reference, Variant,\n    },\n};\n\nuse crate::error::Error;\nuse crate::swift::Swift;\n\nfn string_literal_raw_value(dt: &DataType) -> Option<&str> {\n    let DataType::Enum(literal_enum) = dt else {\n        return None;\n    };\n\n    let [(raw_value, literal_variant)] = literal_enum.variants.as_slice() else {\n        return None;\n    };\n\n    match &literal_variant.fields {\n        Fields::Unit => Some(raw_value.as_ref()),\n        Fields::Unnamed(fields) => {\n            let [field] = fields.fields.as_slice() else {\n                return None;\n            };\n\n            string_literal_raw_value(field.ty.as_ref()?)\n        }\n        Fields::Named(fields) => {\n            let [(_, field)] = fields.fields.as_slice() else {\n                return None;\n            };\n\n            string_literal_raw_value(field.ty.as_ref()?)\n        }\n    }\n}\n\nfn enum_string_raw_value(variant: &Variant) -> Option<&str> {\n    let payload = match &variant.fields {\n        Fields::Unnamed(fields) => {\n            let [field] = fields.fields.as_slice() else {\n                return None;\n            };\n\n            field.ty.as_ref()?\n        }\n        Fields::Named(fields) => {\n            let [(_, field)] = fields.fields.as_slice() else {\n                return None;\n            };\n\n            field.ty.as_ref()?\n        }\n        Fields::Unit => return None,\n    };\n\n    string_literal_raw_value(payload)\n}\n\nfn resolved_string_enum(e: &Enum) -> Option<Vec<(&str, &str)>> {\n    e.variants\n        .iter()\n        .map(|(variant_name, variant)| {\n            enum_string_raw_value(variant).map(|raw| (variant_name.as_ref(), raw))\n        })\n        .collect()\n}\n\nfn serde_variant_payload<'a>(variant_name: &str, variant: &'a Variant) -> Option<&'a DataType> {\n    let Fields::Named(fields) = &variant.fields else {\n        return None;\n    };\n\n    let [(payload_name, payload_field)] = fields.fields.as_slice() else {\n        return None;\n    };\n\n    payload_name\n        .as_ref()\n        .eq_ignore_ascii_case(variant_name)\n        .then_some(payload_field.ty.as_ref())\n        .flatten()\n}\n\nfn self_named_struct_payload<'a>(variant_name: &str, dt: &'a DataType) -> Option<&'a DataType> {\n    let DataType::Struct(strct) = dt else {\n        return None;\n    };\n\n    let Fields::Named(fields) = &strct.fields else {\n        return None;\n    };\n\n    let [(field_name, field)] = fields.fields.as_slice() else {\n        return None;\n    };\n\n    field_name\n        .as_ref()\n        .eq_ignore_ascii_case(variant_name)\n        .then_some(field.ty.as_ref())\n        .flatten()\n}\n\nfn normalized_payload<'a>(variant_name: &str, payload: &'a DataType) -> &'a DataType {\n    let mut current = payload;\n\n    while let Some(inner) = self_named_struct_payload(variant_name, current) {\n        current = inner;\n    }\n\n    current\n}\n\nfn is_unit_payload(variant_name: &str, dt: &DataType) -> bool {\n    let dt = normalized_payload(variant_name, dt);\n\n    if string_literal_raw_value(dt).is_some() {\n        return true;\n    }\n\n    let DataType::Enum(enm) = dt else {\n        return false;\n    };\n\n    let [(_, variant)] = enm.variants.as_slice() else {\n        return false;\n    };\n\n    match &variant.fields {\n        Fields::Unit => true,\n        Fields::Unnamed(fields) => fields.fields.is_empty(),\n        Fields::Named(fields) => fields.fields.is_empty(),\n    }\n}\n\nfn enum_payload_to_swift_type(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    variant_name: &str,\n    payload: &DataType,\n    generic_scope: &[Generic],\n) -> Result<String, Error> {\n    let payload = normalized_payload(variant_name, payload);\n\n    Ok(match payload {\n        DataType::Tuple(tuple) if tuple.elements.len() > 1 => tuple\n            .elements\n            .iter()\n            .map(|element| datatype_to_swift(swift, format, types, element, generic_scope.to_vec()))\n            .collect::<std::result::Result<Vec<_>, _>>()?\n            .join(\", \"),\n        _ => datatype_to_swift(swift, format, types, payload, generic_scope.to_vec())?,\n    })\n}\n\nfn should_emit_variant_wrapper(variant_name: &str, variant: &Variant) -> bool {\n    let Fields::Named(fields) = &variant.fields else {\n        return false;\n    };\n\n    if fields.fields.is_empty() {\n        return false;\n    }\n\n    let Some(payload) = serde_variant_payload(variant_name, variant) else {\n        return true;\n    };\n\n    let payload = normalized_payload(variant_name, payload);\n\n    matches!(\n        payload,\n        DataType::Struct(strct)\n            if matches!(\n                &strct.fields,\n                Fields::Named(named) if !named.fields.is_empty()\n            )\n    )\n}\n\nfn wrapper_variant_fields<'a>(variant_name: &str, variant: &'a Variant) -> Option<&'a Fields> {\n    if let Some(payload) = serde_variant_payload(variant_name, variant) {\n        let DataType::Struct(strct) = normalized_payload(variant_name, payload) else {\n            return None;\n        };\n\n        return Some(&strct.fields);\n    }\n\n    Some(&variant.fields)\n}\n\nfn is_unit_like_variant(variant_name: &str, variant: &Variant) -> bool {\n    match &variant.fields {\n        Fields::Unit => true,\n        Fields::Unnamed(fields) => {\n            fields.fields.is_empty()\n                || (fields.fields.len() == 1\n                    && fields.fields[0]\n                        .ty\n                        .as_ref()\n                        .is_some_and(|ty| is_unit_payload(variant_name, ty)))\n        }\n        Fields::Named(fields) => {\n            fields.fields.is_empty()\n                || serde_variant_payload(variant_name, variant)\n                    .is_some_and(|payload| is_unit_payload(variant_name, payload))\n        }\n    }\n}\n\n/// Export a single type to Swift.\npub fn export_type(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    ndt: &specta::datatype::NamedDataType,\n) -> Result<String, Error> {\n    if !matches!(&ndt.ty, Some(DataType::Struct(_) | DataType::Enum(_))) {\n        return Ok(String::new());\n    }\n    let mut result = String::new();\n\n    // Add JSDoc-style comments if present\n    if !ndt.docs.is_empty() {\n        let docs = &ndt.docs;\n        // Handle multi-line comments properly\n        for line in docs.lines() {\n            result.push_str(\"/// \");\n            // Trim leading whitespace from the line to avoid extra spaces\n            result.push_str(line.trim_start());\n            result.push('\\n');\n        }\n    }\n\n    // Add deprecated annotation if present\n    if let Some(deprecated) = ndt.deprecated.as_ref() {\n        let message = deprecated\n            .note\n            .as_deref()\n            .filter(|note| !note.trim().is_empty())\n            .map(ToString::to_string)\n            .unwrap_or_else(|| \"This type is deprecated\".to_string());\n        result.push_str(&format!(\n            \"@available(*, deprecated, message: \\\"{}\\\")\\n\",\n            message\n        ));\n    }\n\n    let generic_scope = ndt\n        .generics\n        .iter()\n        .map(|generic| generic.reference())\n        .collect::<Vec<_>>();\n\n    // Format based on type\n    match ndt.ty.as_ref().expect(\"checked above\") {\n        DataType::Struct(s) => {\n            let type_def = struct_to_swift(swift, format, types, s, generic_scope.clone())?;\n            let name = swift.naming.convert(&ndt.name);\n            let generics = if ndt.generics.is_empty() {\n                String::new()\n            } else {\n                format!(\n                    \"<{}>\",\n                    ndt.generics\n                        .iter()\n                        .map(|g| g.name.as_ref().to_string())\n                        .collect::<Vec<_>>()\n                        .join(\", \")\n                )\n            };\n\n            result.push_str(&format!(\"public struct {}{}: Codable {{\\n\", name, generics));\n            result.push_str(&type_def);\n            result.push('}');\n        }\n        DataType::Enum(e) => {\n            let formatted_enum = match apply_datatype_format(\n                None,\n                types,\n                ndt.ty.as_ref().expect(\"checked above\"),\n            )? {\n                DataType::Enum(e) => Some(e),\n                _ => None,\n            };\n            let e = formatted_enum\n                .as_ref()\n                .filter(|e| resolved_string_enum(e).is_some())\n                .unwrap_or(e);\n\n            let name = swift.naming.convert(&ndt.name);\n            let generics = if ndt.generics.is_empty() {\n                String::new()\n            } else {\n                format!(\n                    \"<{}>\",\n                    ndt.generics\n                        .iter()\n                        .map(|g| g.name.as_ref().to_string())\n                        .collect::<Vec<_>>()\n                        .join(\", \")\n                )\n            };\n\n            // Check if this is a string enum\n            let is_string_enum_val = resolved_string_enum(e).is_some();\n\n            // Check if this enum has struct-like variants (needs custom Codable)\n            let has_struct_variants = e\n                .variants\n                .iter()\n                .any(|(variant_name, variant)| should_emit_variant_wrapper(variant_name, variant));\n\n            let has_serde_payload_variants = format.is_some()\n                && e.variants.iter().any(|(variant_name, variant)| {\n                    serde_variant_payload(variant_name, variant)\n                        .is_some_and(|_| !is_unit_like_variant(variant_name, variant))\n                });\n\n            let needs_custom_codable = has_struct_variants || has_serde_payload_variants;\n\n            // Determine protocols based on whether we'll generate custom Codable\n            let protocols = if is_string_enum_val {\n                if needs_custom_codable {\n                    \"String\" // Custom Codable will be generated\n                } else {\n                    \"String, Codable\"\n                }\n            } else if needs_custom_codable {\n                \"\" // Custom Codable will be generated\n            } else {\n                \"Codable\"\n            };\n\n            let protocol_part = if protocols.is_empty() {\n                String::new()\n            } else {\n                format!(\": {}\", protocols)\n            };\n\n            result.push_str(&format!(\n                \"public enum {}{}{} {{\\n\",\n                name, generics, protocol_part\n            ));\n            let enum_body =\n                enum_to_swift(swift, format, types, e, generic_scope.clone(), Some(&name))?;\n            result.push_str(&enum_body);\n            result.push('}');\n\n            // Generate struct definitions for named field variants\n            let struct_definitions =\n                generate_enum_structs(swift, format, types, e, generic_scope.clone(), &name)?;\n            result.push_str(&struct_definitions);\n\n            // Generate custom Codable implementation for enums with struct variants\n            if needs_custom_codable {\n                let codable_impl = generate_enum_codable_impl(\n                    swift,\n                    format,\n                    types,\n                    e,\n                    generic_scope.clone(),\n                    &name,\n                )?;\n                result.push_str(&codable_impl);\n            }\n        }\n        _ => {\n            return Ok(String::new());\n        }\n    }\n\n    Ok(result)\n}\n\n/// Convert a DataType to Swift syntax.\npub fn datatype_to_swift(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n    generic_scope: Vec<Generic>,\n) -> Result<String, Error> {\n    let dt = apply_datatype_format(format, types, dt)?;\n\n    match &dt {\n        DataType::Primitive(p) => primitive_to_swift(p),\n        // DataType::Literal(l) => literal_to_swift(l),\n        DataType::List(l) => list_to_swift(swift, format, types, l, generic_scope.clone()),\n        DataType::Map(m) => map_to_swift(swift, format, types, m, generic_scope.clone()),\n        DataType::Nullable(def) => {\n            let inner = datatype_to_swift(swift, format, types, def, generic_scope)?;\n            Ok(match swift.optionals {\n                crate::swift::OptionalStyle::QuestionMark => format!(\"{}?\", inner),\n                crate::swift::OptionalStyle::Optional => format!(\"Optional<{}>\", inner),\n            })\n        }\n        DataType::Struct(s) => {\n            // Check if this is a Duration struct by looking at its fields\n            if is_duration_struct(s) {\n                return Ok(\"RustDuration\".to_string());\n            }\n            struct_to_swift(swift, format, types, s, generic_scope)\n        }\n        DataType::Enum(e) => enum_to_swift(swift, format, types, e, generic_scope, None),\n        DataType::Tuple(t) => tuple_to_swift(swift, format, types, t, generic_scope.clone()),\n        DataType::Reference(r) => reference_to_swift(swift, format, types, r, &generic_scope),\n        DataType::Generic(g) => generic_to_swift(g, &generic_scope),\n        DataType::Intersection(_) => Err(Error::UnsupportedType(\n            \"Intersection types are not supported by Swift exporter\".to_string(),\n        )),\n    }\n}\n\nfn apply_datatype_format(\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n) -> Result<DataType, Error> {\n    if contains_generic_reference(dt) {\n        let Some(format) = format else {\n            return apply_datatype_format_children(None, types, dt.clone());\n        };\n\n        match format.map_type(types, dt) {\n            Ok(std::borrow::Cow::Borrowed(dt)) => {\n                return apply_datatype_format_children(Some(format), types, dt.clone());\n            }\n            Ok(std::borrow::Cow::Owned(dt)) => {\n                return apply_datatype_format_children(Some(format), types, dt);\n            }\n            Err(err) if err.to_string().contains(\"Unresolved generic reference\") => {\n                return apply_datatype_format_children(Some(format), types, dt.clone());\n            }\n            Err(err) => return Err(Error::format(\"datatype formatter failed\", err)),\n        }\n    }\n\n    if contains_recursive_reference(dt) {\n        return apply_datatype_format_children(format, types, dt.clone());\n    }\n\n    let Some(format) = format else {\n        return apply_datatype_format_children(None, types, dt.clone());\n    };\n\n    let mapped = format\n        .map_type(types, dt)\n        .map_err(|err| Error::format(\"datatype formatter failed\", err))?;\n\n    match mapped {\n        std::borrow::Cow::Borrowed(dt) => {\n            apply_datatype_format_children(Some(format), types, dt.clone())\n        }\n        std::borrow::Cow::Owned(dt) => apply_datatype_format_children(Some(format), types, dt),\n    }\n}\n\nfn apply_datatype_format_children(\n    format: Option<&dyn Format>,\n    types: &Types,\n    mut dt: DataType,\n) -> Result<DataType, Error> {\n    match &mut dt {\n        DataType::Primitive(_) => {}\n        DataType::List(list) => {\n            *list.ty = apply_datatype_format(format, types, &list.ty)?;\n        }\n        DataType::Map(map) => {\n            let key = apply_datatype_format(format, types, map.key_ty())?;\n            let value = apply_datatype_format(format, types, map.value_ty())?;\n            map.set_key_ty(key);\n            map.set_value_ty(value);\n        }\n        DataType::Nullable(inner) => {\n            **inner = apply_datatype_format(format, types, inner)?;\n        }\n        DataType::Struct(strct) => map_fields(format, types, &mut strct.fields)?,\n        DataType::Enum(enm) => {\n            for (_, variant) in &mut enm.variants {\n                map_fields(format, types, &mut variant.fields)?;\n            }\n        }\n        DataType::Tuple(tuple) => {\n            for element in &mut tuple.elements {\n                *element = apply_datatype_format(format, types, element)?;\n            }\n        }\n        DataType::Intersection(intersection) => {\n            for element in intersection {\n                *element = apply_datatype_format(format, types, element)?;\n            }\n        }\n        DataType::Reference(Reference::Named(reference)) => match &mut reference.inner {\n            specta::datatype::NamedReferenceType::Reference { generics, .. } => {\n                for (_, generic) in generics {\n                    *generic = apply_datatype_format(format, types, generic)?;\n                }\n            }\n            specta::datatype::NamedReferenceType::Inline { .. }\n            | specta::datatype::NamedReferenceType::Recursive => {}\n        },\n        DataType::Reference(Reference::Opaque(_)) | DataType::Generic(_) => {}\n    }\n\n    Ok(dt)\n}\n\nfn map_fields(\n    format: Option<&dyn Format>,\n    types: &Types,\n    fields: &mut Fields,\n) -> Result<(), Error> {\n    match fields {\n        Fields::Unit => {}\n        Fields::Unnamed(unnamed) => {\n            for field in &mut unnamed.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    *ty = apply_datatype_format(format, types, ty)?;\n                }\n            }\n        }\n        Fields::Named(named) => {\n            for (_, field) in &mut named.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    *ty = apply_datatype_format(format, types, ty)?;\n                }\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn contains_generic_reference(dt: &DataType) -> bool {\n    match dt {\n        DataType::Primitive(_) => false,\n        DataType::List(list) => contains_generic_reference(&list.ty),\n        DataType::Map(map) => {\n            contains_generic_reference(map.key_ty()) || contains_generic_reference(map.value_ty())\n        }\n        DataType::Nullable(inner) => contains_generic_reference(inner),\n        DataType::Struct(strct) => fields_contain_generic_reference(&strct.fields),\n        DataType::Enum(enm) => enm\n            .variants\n            .iter()\n            .any(|(_, variant)| fields_contain_generic_reference(&variant.fields)),\n        DataType::Tuple(tuple) => tuple.elements.iter().any(contains_generic_reference),\n        DataType::Reference(Reference::Named(reference)) => match &reference.inner {\n            NamedReferenceType::Reference { generics, .. } => generics\n                .iter()\n                .any(|(_, generic)| contains_generic_reference(generic)),\n            NamedReferenceType::Inline { .. } | NamedReferenceType::Recursive => false,\n        },\n        DataType::Reference(Reference::Opaque(_)) => false,\n        DataType::Generic(_) => true,\n        DataType::Intersection(types) => types.iter().any(contains_generic_reference),\n    }\n}\n\nfn fields_contain_generic_reference(fields: &Fields) -> bool {\n    match fields {\n        Fields::Unit => false,\n        Fields::Unnamed(unnamed) => unnamed\n            .fields\n            .iter()\n            .any(|field| field.ty.as_ref().is_some_and(contains_generic_reference)),\n        Fields::Named(named) => named\n            .fields\n            .iter()\n            .any(|(_, field)| field.ty.as_ref().is_some_and(contains_generic_reference)),\n    }\n}\n\nfn contains_recursive_reference(dt: &DataType) -> bool {\n    match dt {\n        DataType::Primitive(_)\n        | DataType::Generic(_)\n        | DataType::Reference(Reference::Opaque(_)) => false,\n        DataType::List(list) => contains_recursive_reference(&list.ty),\n        DataType::Map(map) => {\n            contains_recursive_reference(map.key_ty())\n                || contains_recursive_reference(map.value_ty())\n        }\n        DataType::Nullable(inner) => contains_recursive_reference(inner),\n        DataType::Struct(strct) => fields_contain_recursive_reference(&strct.fields),\n        DataType::Enum(enm) => enm\n            .variants\n            .iter()\n            .any(|(_, variant)| fields_contain_recursive_reference(&variant.fields)),\n        DataType::Tuple(tuple) => tuple.elements.iter().any(contains_recursive_reference),\n        DataType::Reference(Reference::Named(reference)) => match &reference.inner {\n            NamedReferenceType::Recursive => true,\n            NamedReferenceType::Reference { generics, .. } => generics\n                .iter()\n                .any(|(_, generic)| contains_recursive_reference(generic)),\n            NamedReferenceType::Inline { .. } => false,\n        },\n        DataType::Intersection(types) => types.iter().any(contains_recursive_reference),\n    }\n}\n\nfn fields_contain_recursive_reference(fields: &Fields) -> bool {\n    match fields {\n        Fields::Unit => false,\n        Fields::Unnamed(unnamed) => unnamed\n            .fields\n            .iter()\n            .any(|field| field.ty.as_ref().is_some_and(contains_recursive_reference)),\n        Fields::Named(named) => named\n            .fields\n            .iter()\n            .any(|(_, field)| field.ty.as_ref().is_some_and(contains_recursive_reference)),\n    }\n}\n\n/// Check if a struct is a Duration by examining its fields\npub fn is_duration_struct(s: &specta::datatype::Struct) -> bool {\n    match &s.fields {\n        specta::datatype::Fields::Named(fields) => {\n            let field_names: Vec<String> = fields\n                .fields\n                .iter()\n                .map(|(name, _)| name.to_string())\n                .collect();\n            // Duration has exactly two fields: \"secs\" (u64) and \"nanos\" (u32)\n            field_names.len() == 2\n                && field_names.contains(&\"secs\".to_string())\n                && field_names.contains(&\"nanos\".to_string())\n        }\n        _ => false,\n    }\n}\n\n/// Convert primitive types to Swift.\nfn primitive_to_swift(primitive: &Primitive) -> Result<String, Error> {\n    Ok(match primitive {\n        Primitive::i8 => \"Int8\".to_string(),\n        Primitive::i16 => \"Int16\".to_string(),\n        Primitive::i32 => \"Int32\".to_string(),\n        Primitive::i64 => \"Int64\".to_string(),\n        Primitive::isize => \"Int\".to_string(),\n        Primitive::u8 => \"UInt8\".to_string(),\n        Primitive::u16 => \"UInt16\".to_string(),\n        Primitive::u32 => \"UInt32\".to_string(),\n        Primitive::u64 => \"UInt64\".to_string(),\n        Primitive::usize => \"UInt\".to_string(),\n        Primitive::f32 => \"Float\".to_string(),\n        Primitive::f64 => \"Double\".to_string(),\n        Primitive::bool => \"Bool\".to_string(),\n        Primitive::char => \"Character\".to_string(),\n        Primitive::str => \"String\".to_string(),\n        Primitive::i128 | Primitive::u128 => {\n            return Err(Error::UnsupportedType(\n                \"Swift does not support 128-bit integers\".to_string(),\n            ));\n        }\n        Primitive::f16 => {\n            return Err(Error::UnsupportedType(\n                \"Swift does not support f16\".to_string(),\n            ));\n        }\n        Primitive::f128 => {\n            return Err(Error::UnsupportedType(\n                \"Swift does not support f128\".to_string(),\n            ));\n        }\n    })\n}\n\n// /// Convert literal types to Swift.\n// fn literal_to_swift(literal: &specta::datatype::Literal) -> Result<String, Error> {\n//     Ok(match literal {\n//         specta::datatype::Literal::i8(v) => v.to_string(),\n//         specta::datatype::Literal::i16(v) => v.to_string(),\n//         specta::datatype::Literal::i32(v) => v.to_string(),\n//         specta::datatype::Literal::u8(v) => v.to_string(),\n//         specta::datatype::Literal::u16(v) => v.to_string(),\n//         specta::datatype::Literal::u32(v) => v.to_string(),\n//         specta::datatype::Literal::f32(v) => v.to_string(),\n//         specta::datatype::Literal::f64(v) => v.to_string(),\n//         specta::datatype::Literal::bool(v) => v.to_string(),\n//         specta::datatype::Literal::String(s) => format!(\"\\\"{}\\\"\", s),\n//         specta::datatype::Literal::char(c) => format!(\"\\\"{}\\\"\", c),\n//         specta::datatype::Literal::None => \"nil\".to_string(),\n//         _ => {\n//             return Err(Error::UnsupportedType(\n//                 \"Unsupported literal type\".to_string(),\n//             ));\n//         }\n//     })\n// }\n\n/// Convert list types to Swift arrays.\nfn list_to_swift(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    list: &specta::datatype::List,\n    generic_scope: Vec<Generic>,\n) -> Result<String, Error> {\n    let element_type = datatype_to_swift(swift, format, types, &list.ty, generic_scope)?;\n    Ok(format!(\"[{}]\", element_type))\n}\n\n/// Convert map types to Swift dictionaries.\nfn map_to_swift(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    map: &specta::datatype::Map,\n    generic_scope: Vec<Generic>,\n) -> Result<String, Error> {\n    let key_type = datatype_to_swift(swift, format, types, map.key_ty(), generic_scope.clone())?;\n    let value_type = datatype_to_swift(swift, format, types, map.value_ty(), generic_scope)?;\n    Ok(format!(\"[{}: {}]\", key_type, value_type))\n}\n\n/// Convert struct types to Swift.\nfn struct_to_swift(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    s: &specta::datatype::Struct,\n    generic_scope: Vec<Generic>,\n) -> Result<String, Error> {\n    match &s.fields {\n        specta::datatype::Fields::Unit => Ok(\"Void\".to_string()),\n        specta::datatype::Fields::Unnamed(fields) => {\n            if fields.fields.is_empty() {\n                Ok(\"Void\".to_string())\n            } else if fields.fields.len() == 1 {\n                // Single field tuple struct - convert to a proper struct with a 'value' field\n                let field_type = datatype_to_swift(\n                    swift,\n                    format,\n                    types,\n                    fields.fields[0]\n                        .ty\n                        .as_ref()\n                        .expect(\"tuple field should have a type\"),\n                    generic_scope,\n                )?;\n                Ok(format!(\"    let value: {}\\n\", field_type))\n            } else {\n                // Multiple field tuple struct - convert to a proper struct with numbered fields\n                let mut result = String::new();\n                for (i, field) in fields.fields.iter().enumerate() {\n                    let field_type = datatype_to_swift(\n                        swift,\n                        format,\n                        types,\n                        field.ty.as_ref().expect(\"tuple field should have a type\"),\n                        generic_scope.clone(),\n                    )?;\n                    result.push_str(&format!(\"    public let field{}: {}\\n\", i, field_type));\n                }\n                Ok(result)\n            }\n        }\n        specta::datatype::Fields::Named(fields) => {\n            let mut result = String::new();\n            let mut field_mappings = Vec::new();\n\n            for (original_field_name, field) in &fields.fields {\n                let field_type = if let Some(ty) = field.ty.as_ref() {\n                    datatype_to_swift(swift, format, types, ty, generic_scope.clone())?\n                } else {\n                    continue;\n                };\n\n                let optional_marker = if field.optional { \"?\" } else { \"\" };\n                let swift_field_name = swift.naming.convert_field(original_field_name.as_ref());\n\n                result.push_str(&format!(\n                    \"    public let {}: {}{}\\n\",\n                    swift_field_name, field_type, optional_marker\n                ));\n\n                field_mappings.push((swift_field_name, original_field_name.to_string()));\n            }\n\n            // Generate custom CodingKeys if field names were converted\n            let needs_custom_coding_keys = field_mappings\n                .iter()\n                .any(|(swift_name, rust_name)| swift_name != rust_name);\n            if needs_custom_coding_keys {\n                result.push_str(\"\\n    private enum CodingKeys: String, CodingKey {\\n\");\n                for (swift_name, rust_name) in &field_mappings {\n                    result.push_str(&format!(\n                        \"        case {} = \\\"{}\\\"\\n\",\n                        swift_name, rust_name\n                    ));\n                }\n                result.push_str(\"    }\\n\");\n            }\n\n            Ok(result)\n        }\n    }\n}\n\n/// Convert enum types to Swift.\nfn enum_to_swift(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    e: &specta::datatype::Enum,\n    generic_scope: Vec<Generic>,\n    enum_name: Option<&str>,\n) -> Result<String, Error> {\n    let mut result = String::new();\n\n    // Check if this is a string enum\n    let is_string_enum = resolved_string_enum(e).is_some();\n\n    for (original_variant_name, variant) in &e.variants {\n        if variant.skip {\n            continue;\n        }\n\n        let variant_name = swift\n            .naming\n            .convert_enum_case(original_variant_name.as_ref());\n\n        match &variant.fields {\n            specta::datatype::Fields::Unit => {\n                if is_string_enum {\n                    let raw_value = enum_string_raw_value(variant)\n                        .unwrap_or_else(|| original_variant_name.as_ref());\n                    result.push_str(&format!(\"    case {} = \\\"{}\\\"\\n\", variant_name, raw_value));\n                } else {\n                    result.push_str(&format!(\"    case {}\\n\", variant_name));\n                }\n            }\n            specta::datatype::Fields::Unnamed(fields) => {\n                if is_string_enum {\n                    let raw_value = enum_string_raw_value(variant)\n                        .unwrap_or_else(|| original_variant_name.as_ref());\n                    result.push_str(&format!(\"    case {} = \\\"{}\\\"\\n\", variant_name, raw_value));\n                } else if fields.fields.is_empty()\n                    || fields.fields.len() == 1\n                        && fields.fields[0]\n                            .ty\n                            .as_ref()\n                            .is_some_and(|ty| is_unit_payload(original_variant_name, ty))\n                {\n                    result.push_str(&format!(\"    case {}\\n\", variant_name));\n                } else {\n                    let types_str = fields\n                        .fields\n                        .iter()\n                        .map(|f| {\n                            datatype_to_swift(\n                                swift,\n                                format,\n                                types,\n                                f.ty.as_ref()\n                                    .expect(\"enum variant field should have a type\"),\n                                generic_scope.clone(),\n                            )\n                        })\n                        .collect::<std::result::Result<Vec<_>, _>>()?\n                        .join(\", \");\n                    result.push_str(&format!(\"    case {}({})\\n\", variant_name, types_str));\n                }\n            }\n            specta::datatype::Fields::Named(fields) => {\n                if fields.fields.is_empty() {\n                    result.push_str(&format!(\"    case {}\\n\", variant_name));\n                } else if !should_emit_variant_wrapper(original_variant_name, variant) {\n                    let payload = serde_variant_payload(original_variant_name, variant)\n                        .expect(\"serde payload variants should contain a payload\");\n\n                    if is_unit_payload(original_variant_name, payload) {\n                        result.push_str(&format!(\"    case {}\\n\", variant_name));\n                    } else {\n                        let payload_ty = enum_payload_to_swift_type(\n                            swift,\n                            format,\n                            types,\n                            original_variant_name,\n                            payload,\n                            &generic_scope,\n                        )?;\n                        result.push_str(&format!(\"    case {}({})\\n\", variant_name, payload_ty));\n                    }\n                } else {\n                    // Generate struct for named fields\n                    // Use the original variant name for PascalCase struct name\n                    let pascal_variant_name = to_pascal_case(original_variant_name);\n                    let struct_name = if let Some(enum_name) = enum_name {\n                        format!(\"{}{}Data\", enum_name, pascal_variant_name)\n                    } else {\n                        format!(\"{}Data\", pascal_variant_name)\n                    };\n\n                    // Generate enum case that references the struct\n                    result.push_str(&format!(\"    case {}({})\\n\", variant_name, struct_name));\n                }\n            }\n        }\n    }\n\n    Ok(result)\n}\n\n/// Generate struct definitions for enum variants with named fields\nfn generate_enum_structs(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    e: &specta::datatype::Enum,\n    generic_scope: Vec<Generic>,\n    enum_name: &str,\n) -> Result<String, Error> {\n    let mut result = String::new();\n\n    for (original_variant_name, variant) in &e.variants {\n        if variant.skip {\n            continue;\n        }\n\n        if let Some(Fields::Named(fields)) = wrapper_variant_fields(original_variant_name, variant)\n            && !fields.fields.is_empty()\n            && should_emit_variant_wrapper(original_variant_name, variant)\n        {\n            let pascal_variant_name = to_pascal_case(original_variant_name.as_ref());\n            let struct_name = format!(\"{}{}Data\", enum_name, pascal_variant_name);\n\n            // Generate struct definition with custom CodingKeys for field name mapping\n            result.push_str(&format!(\"\\npublic struct {}: Codable {{\\n\", struct_name));\n\n            // Generate struct fields\n            let mut field_mappings = Vec::new();\n            for (original_field_name, field) in &fields.fields {\n                if let Some(ty) = field.ty.as_ref() {\n                    let field_type =\n                        datatype_to_swift(swift, format, types, ty, generic_scope.clone())?;\n                    let optional_marker = if field.optional { \"?\" } else { \"\" };\n                    let swift_field_name = swift.naming.convert_field(original_field_name.as_ref());\n                    result.push_str(&format!(\n                        \"    public let {}: {}{}\\n\",\n                        swift_field_name, field_type, optional_marker\n                    ));\n                    field_mappings.push((swift_field_name, original_field_name.to_string()));\n                }\n            }\n\n            // Generate custom CodingKeys if field names were converted\n            let needs_custom_coding_keys = field_mappings\n                .iter()\n                .any(|(swift_name, rust_name)| swift_name != rust_name);\n            if needs_custom_coding_keys {\n                result.push_str(\"\\n    private enum CodingKeys: String, CodingKey {\\n\");\n                for (swift_name, rust_name) in &field_mappings {\n                    result.push_str(&format!(\n                        \"        case {} = \\\"{}\\\"\\n\",\n                        swift_name, rust_name\n                    ));\n                }\n                result.push_str(\"    }\\n\");\n            }\n\n            result.push_str(\"}\\n\");\n        }\n    }\n\n    Ok(result)\n}\n\n/// Convert a string to PascalCase\nfn to_pascal_case(s: &str) -> String {\n    // If it's already PascalCase (starts with uppercase), return as-is\n    if s.chars().next().is_some_and(|c| c.is_uppercase()) {\n        return s.to_string();\n    }\n\n    // Otherwise, convert snake_case to PascalCase\n    let mut result = String::new();\n    let mut capitalize_next = true;\n\n    for c in s.chars() {\n        if c == '_' || c == '-' {\n            capitalize_next = true;\n        } else if capitalize_next {\n            result.push(c.to_uppercase().next().unwrap_or(c));\n            capitalize_next = false;\n        } else {\n            result.push(c.to_lowercase().next().unwrap_or(c));\n        }\n    }\n\n    result\n}\n\n/// Convert tuple types to Swift.\nfn tuple_to_swift(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    t: &specta::datatype::Tuple,\n    generic_scope: Vec<Generic>,\n) -> Result<String, Error> {\n    if t.elements.is_empty() {\n        Ok(\"Void\".to_string())\n    } else if t.elements.len() == 1 {\n        datatype_to_swift(swift, format, types, &t.elements[0], generic_scope)\n    } else {\n        let types_str = t\n            .elements\n            .iter()\n            .map(|e| datatype_to_swift(swift, format, types, e, generic_scope.clone()))\n            .collect::<std::result::Result<Vec<_>, _>>()?\n            .join(\", \");\n        Ok(format!(\"({})\", types_str))\n    }\n}\n\n/// Convert reference types to Swift.\nfn reference_to_swift(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    r: &specta::datatype::Reference,\n    generic_scope: &[Generic],\n) -> Result<String, Error> {\n    match r {\n        Reference::Named(r) => {\n            let Some(ndt) = types.get(r) else {\n                return Err(Error::InvalidIdentifier(\n                    \"Reference to unknown type\".to_string(),\n                ));\n            };\n\n            if let NamedReferenceType::Inline { dt, .. } = &r.inner\n                && !matches!(dt.as_ref(), DataType::Enum(_))\n                && !contains_recursive_reference(dt)\n            {\n                return datatype_to_swift(swift, format, types, dt, generic_scope.to_vec());\n            }\n\n            let generics = match &r.inner {\n                NamedReferenceType::Reference { generics, .. } => generics.as_slice(),\n                NamedReferenceType::Inline { .. } | NamedReferenceType::Recursive => &[],\n            };\n\n            let name = swift.naming.convert(&ndt.name);\n\n            if ndt.name.as_ref() == \"String\" {\n                return Ok(\"String\".to_string());\n            }\n\n            if ndt.name.as_ref() == \"Vec\"\n                && let [(_, element)] = generics\n            {\n                let element =\n                    datatype_to_swift(swift, format, types, element, generic_scope.to_vec())?;\n                return Ok(format!(\"[{element}]\"));\n            }\n\n            if generics.is_empty() {\n                Ok(name)\n            } else {\n                let generics = generics\n                    .iter()\n                    .map(|(_, t)| {\n                        datatype_to_swift(swift, format, types, t, generic_scope.to_vec())\n                    })\n                    .collect::<std::result::Result<Vec<_>, _>>()?\n                    .join(\", \");\n                Ok(format!(\"{}<{}>\", name, generics))\n            }\n        }\n        Reference::Opaque(_) => Err(Error::UnsupportedType(\n            \"Opaque references are not supported by Swift exporter\".to_string(),\n        )),\n    }\n}\n\n/// Convert generic types to Swift.\nfn generic_to_swift(\n    g: &specta::datatype::GenericReference,\n    generic_scope: &[Generic],\n) -> Result<String, Error> {\n    generic_scope\n        .iter()\n        .find_map(|generic| (generic.reference() == *g).then(|| generic.name().to_string()))\n        .ok_or_else(|| Error::GenericConstraint(format!(\"Unresolved generic reference: {g:?}\")))\n}\n\n/// Generate custom Codable implementation for enums with struct-like variants\nfn generate_enum_codable_impl(\n    swift: &Swift,\n    format: Option<&dyn Format>,\n    types: &Types,\n    e: &specta::datatype::Enum,\n    generic_scope: Vec<Generic>,\n    enum_name: &str,\n) -> Result<String, Error> {\n    let mut result = String::new();\n\n    result.push_str(&format!(\n        \"\\n// MARK: - {} Codable Implementation\\n\",\n        enum_name\n    ));\n    result.push_str(&format!(\"extension {}: Codable {{\\n\", enum_name));\n\n    // Generate CodingKeys enum\n    result.push_str(\"    private enum CodingKeys: String, CodingKey {\\n\");\n    for (original_variant_name, variant) in &e.variants {\n        if variant.skip {\n            continue;\n        }\n        let swift_case_name = swift\n            .naming\n            .convert_enum_case(original_variant_name.as_ref());\n        result.push_str(&format!(\n            \"        case {} = \\\"{}\\\"\\n\",\n            swift_case_name, original_variant_name\n        ));\n    }\n    result.push_str(\"    }\\n\\n\");\n\n    // Generate init(from decoder:)\n    result.push_str(\"    public init(from decoder: Decoder) throws {\\n\");\n    result.push_str(\"        let container = try decoder.container(keyedBy: CodingKeys.self)\\n\");\n    result.push_str(\"        \\n\");\n    result.push_str(\"        if container.allKeys.count != 1 {\\n\");\n    result.push_str(\"            throw DecodingError.dataCorrupted(\\n\");\n    result.push_str(\"                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \\\"Invalid number of keys found, expected one.\\\")\\n\");\n    result.push_str(\"            )\\n\");\n    result.push_str(\"        }\\n\\n\");\n    result.push_str(\"        let key = container.allKeys.first!\\n\");\n    result.push_str(\"        switch key {\\n\");\n\n    for (original_variant_name, variant) in &e.variants {\n        if variant.skip {\n            continue;\n        }\n\n        let swift_case_name = swift\n            .naming\n            .convert_enum_case(original_variant_name.as_ref());\n\n        match &variant.fields {\n            specta::datatype::Fields::Unit => {\n                result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                result.push_str(&format!(\"            self = .{}\\n\", swift_case_name));\n            }\n            specta::datatype::Fields::Unnamed(fields) => {\n                if fields.fields.is_empty()\n                    || fields.fields.len() == 1\n                        && fields.fields[0]\n                            .ty\n                            .as_ref()\n                            .is_some_and(|ty| is_unit_payload(original_variant_name, ty))\n                {\n                    result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                    result.push_str(&format!(\"            self = .{}\\n\", swift_case_name));\n                } else if fields.fields.len() == 1 {\n                    let payload_ty = datatype_to_swift(\n                        swift,\n                        format,\n                        types,\n                        fields.fields[0]\n                            .ty\n                            .as_ref()\n                            .expect(\"enum variant field should have a type\"),\n                        generic_scope.clone(),\n                    )?;\n                    result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                    result.push_str(&format!(\n                        \"            let data = try container.decode({}.self, forKey: .{})\\n\",\n                        payload_ty, swift_case_name\n                    ));\n                    result.push_str(&format!(\"            self = .{}(data)\\n\", swift_case_name));\n                } else {\n                    // For tuple variants, decode as array\n                    result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                    result.push_str(&format!(\n                        \"            // TODO: Implement tuple variant decoding for {}\\n\",\n                        swift_case_name\n                    ));\n                    result.push_str(\n                        \"            fatalError(\\\"Tuple variant decoding not implemented\\\")\\n\",\n                    );\n                }\n            }\n            specta::datatype::Fields::Named(_) => {\n                if should_emit_variant_wrapper(original_variant_name, variant) {\n                    let pascal_variant_name = to_pascal_case(original_variant_name.as_ref());\n                    let struct_name = format!(\"{}{}Data\", enum_name, pascal_variant_name);\n\n                    result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                    result.push_str(&format!(\n                        \"            let data = try container.decode({}.self, forKey: .{})\\n\",\n                        struct_name, swift_case_name\n                    ));\n                    result.push_str(&format!(\"            self = .{}(data)\\n\", swift_case_name));\n                } else {\n                    let payload = serde_variant_payload(original_variant_name, variant)\n                        .expect(\"serde payload variants should contain a payload\");\n\n                    result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                    if is_unit_payload(original_variant_name, payload) {\n                        result.push_str(&format!(\"            self = .{}\\n\", swift_case_name));\n                    } else {\n                        let payload_ty = enum_payload_to_swift_type(\n                            swift,\n                            format,\n                            types,\n                            original_variant_name,\n                            payload,\n                            &generic_scope,\n                        )?;\n                        result.push_str(&format!(\n                            \"            let data = try container.decode({}.self, forKey: .{})\\n\",\n                            payload_ty, swift_case_name\n                        ));\n                        result\n                            .push_str(&format!(\"            self = .{}(data)\\n\", swift_case_name));\n                    }\n                }\n            }\n        }\n    }\n\n    result.push_str(\"        }\\n\");\n    result.push_str(\"    }\\n\\n\");\n\n    // Generate encode(to encoder:)\n    result.push_str(\"    public func encode(to encoder: Encoder) throws {\\n\");\n    result.push_str(\"        var container = encoder.container(keyedBy: CodingKeys.self)\\n\");\n    result.push_str(\"        \\n\");\n    result.push_str(\"        switch self {\\n\");\n\n    for (original_variant_name, variant) in &e.variants {\n        if variant.skip {\n            continue;\n        }\n\n        let swift_case_name = swift\n            .naming\n            .convert_enum_case(original_variant_name.as_ref());\n\n        match &variant.fields {\n            specta::datatype::Fields::Unit => {\n                result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                result.push_str(&format!(\n                    \"            try container.encodeNil(forKey: .{})\\n\",\n                    swift_case_name\n                ));\n            }\n            specta::datatype::Fields::Unnamed(fields) => {\n                if fields.fields.len() == 1\n                    && fields.fields[0]\n                        .ty\n                        .as_ref()\n                        .is_some_and(|ty| is_unit_payload(original_variant_name, ty))\n                {\n                    result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                    result.push_str(&format!(\n                        \"            try container.encodeNil(forKey: .{})\\n\",\n                        swift_case_name\n                    ));\n                    continue;\n                } else if fields.fields.len() == 1 {\n                    result.push_str(&format!(\"        case .{}(let data):\\n\", swift_case_name));\n                    result.push_str(&format!(\n                        \"            try container.encode(data, forKey: .{})\\n\",\n                        swift_case_name\n                    ));\n                    continue;\n                }\n\n                // TODO: Handle tuple variants\n                result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                result.push_str(&format!(\n                    \"            // TODO: Implement tuple variant encoding for {}\\n\",\n                    swift_case_name\n                ));\n                result.push_str(\n                    \"            fatalError(\\\"Tuple variant encoding not implemented\\\")\\n\",\n                );\n            }\n            specta::datatype::Fields::Named(_) => {\n                if should_emit_variant_wrapper(original_variant_name, variant) {\n                    result.push_str(&format!(\"        case .{}(let data):\\n\", swift_case_name));\n                    result.push_str(&format!(\n                        \"            try container.encode(data, forKey: .{})\\n\",\n                        swift_case_name\n                    ));\n                } else {\n                    let payload = serde_variant_payload(original_variant_name, variant)\n                        .expect(\"serde payload variants should contain a payload\");\n\n                    if is_unit_payload(original_variant_name, payload) {\n                        result.push_str(&format!(\"        case .{}:\\n\", swift_case_name));\n                        result.push_str(&format!(\n                            \"            try container.encodeNil(forKey: .{})\\n\",\n                            swift_case_name\n                        ));\n                    } else {\n                        result.push_str(&format!(\"        case .{}(let data):\\n\", swift_case_name));\n                        result.push_str(&format!(\n                            \"            try container.encode(data, forKey: .{})\\n\",\n                            swift_case_name\n                        ));\n                    }\n                }\n            }\n        }\n    }\n\n    result.push_str(\"        }\\n\");\n    result.push_str(\"    }\\n\");\n    result.push_str(\"}\\n\");\n\n    Ok(result)\n}\n"
  },
  {
    "path": "specta-swift/src/swift.rs",
    "content": "//! Swift language exporter configuration and main export functionality.\n\nuse std::{borrow::Cow, fmt, path::Path};\n\nuse specta::{\n    Format, Types,\n    datatype::{DataType, Fields, Reference},\n};\n\nuse crate::Error;\nuse crate::primitives::{export_type, is_duration_struct};\n\n/// Swift language exporter.\n#[derive(Clone)]\npub struct Swift {\n    /// Header comment for generated files.\n    pub header: Cow<'static, str>,\n    /// Indentation style for generated code.\n    pub indent: IndentStyle,\n    /// Naming convention for identifiers.\n    pub naming: NamingConvention,\n    /// Generic type style.\n    pub generics: GenericStyle,\n    /// Optional type style.\n    pub optionals: OptionalStyle,\n    /// Additional protocols to conform to.\n    pub protocols: Vec<Cow<'static, str>>,\n}\n\nimpl fmt::Debug for Swift {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_struct(\"Swift\")\n            .field(\"header\", &self.header)\n            .field(\"indent\", &self.indent)\n            .field(\"naming\", &self.naming)\n            .field(\"generics\", &self.generics)\n            .field(\"optionals\", &self.optionals)\n            .field(\"protocols\", &self.protocols)\n            .finish()\n    }\n}\n\n/// Indentation style for generated Swift code.\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum IndentStyle {\n    /// Use spaces for indentation.\n    Spaces(usize),\n    /// Use tabs for indentation.\n    Tabs,\n}\n\nimpl Default for IndentStyle {\n    fn default() -> Self {\n        Self::Spaces(4)\n    }\n}\n\n/// Naming convention for Swift identifiers.\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum NamingConvention {\n    /// PascalCase naming (default for Swift types).\n    #[default]\n    PascalCase,\n    /// camelCase naming.\n    CamelCase,\n    /// snake_case naming.\n    SnakeCase,\n}\n\n/// Generic type style for Swift.\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum GenericStyle {\n    /// Use protocol constraints: `<T: Codable>`.\n    #[default]\n    Protocol,\n    /// Use where clauses: `<T> where T: Codable`.\n    Typealias,\n}\n\n/// Optional type style for Swift.\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum OptionalStyle {\n    /// Use question mark syntax: `String?`.\n    #[default]\n    QuestionMark,\n    /// Use Optional type: `Optional<String>`.\n    Optional,\n}\n\nimpl Default for Swift {\n    fn default() -> Self {\n        Self {\n            header: \"// This file has been generated by Specta. DO NOT EDIT.\".into(),\n            indent: IndentStyle::default(),\n            naming: NamingConvention::default(),\n            generics: GenericStyle::default(),\n            optionals: OptionalStyle::default(),\n            protocols: vec![],\n        }\n    }\n}\n\nimpl Swift {\n    /// Create a new Swift exporter with default configuration.\n    pub fn new() -> Self {\n        Self::default()\n    }\n\n    /// Set the header comment for generated files.\n    pub fn header(mut self, header: impl Into<Cow<'static, str>>) -> Self {\n        self.header = header.into();\n        self\n    }\n\n    /// Set the indentation style.\n    pub fn indent(mut self, style: IndentStyle) -> Self {\n        self.indent = style;\n        self\n    }\n\n    /// Set the naming convention.\n    pub fn naming(mut self, convention: NamingConvention) -> Self {\n        self.naming = convention;\n        self\n    }\n\n    /// Set the generic type style.\n    pub fn generics(mut self, style: GenericStyle) -> Self {\n        self.generics = style;\n        self\n    }\n\n    /// Set the optional type style.\n    pub fn optionals(mut self, style: OptionalStyle) -> Self {\n        self.optionals = style;\n        self\n    }\n\n    /// Add a protocol that all types should conform to.\n    pub fn add_protocol(mut self, protocol: impl Into<Cow<'static, str>>) -> Self {\n        self.protocols.push(protocol.into());\n        self\n    }\n\n    /// Export types to a Swift string.\n    pub fn export(&self, types: &Types, format: impl Format) -> Result<String, Error> {\n        let exporter = self.clone();\n        let formatted_types = format_types(types, &format)?.into_owned();\n        let raw_types = &formatted_types;\n\n        let mut result = String::new();\n\n        // Add header\n        if !exporter.header.is_empty() {\n            result.push_str(&exporter.header);\n            result.push('\\n');\n        }\n\n        // Add imports\n        result.push_str(\"import Foundation\\n\");\n        for protocol in &exporter.protocols {\n            result.push_str(&format!(\"import {}\\n\", protocol));\n        }\n        result.push('\\n');\n\n        // Check if we need to inject Duration helper\n        if needs_duration_helper(raw_types) {\n            result.push_str(&generate_duration_helper());\n        }\n\n        // Export types\n        for ndt in raw_types.into_sorted_iter() {\n            let exported = export_type(&exporter, Some(&format), raw_types, ndt)?;\n            if !exported.is_empty() {\n                result.push_str(&exported);\n                result.push_str(\"\\n\\n\");\n            }\n        }\n\n        Ok(result)\n    }\n\n    /// Export types to a file.\n    pub fn export_to(\n        &self,\n        path: impl AsRef<Path>,\n        types: &Types,\n        format: impl Format,\n    ) -> Result<(), Error> {\n        let content = self.export(types, format)?;\n        std::fs::write(path, content)?;\n        Ok(())\n    }\n}\n\nfn format_types<'a>(types: &'a Types, format: &'a dyn Format) -> Result<Cow<'a, Types>, Error> {\n    format\n        .map_types(types)\n        .map_err(|err| Error::format(\"type graph formatter failed\", err))\n}\n\nimpl NamingConvention {\n    /// Convert a string to the appropriate naming convention.\n    pub fn convert(&self, name: &str) -> String {\n        match self {\n            Self::PascalCase => self.to_pascal_case(name),\n            Self::CamelCase => self.to_camel_case(name),\n            Self::SnakeCase => self.to_snake_case(name),\n        }\n    }\n\n    /// Convert a string to camelCase (for field names).\n    pub fn convert_to_camel_case(&self, name: &str) -> String {\n        self.to_camel_case(name)\n    }\n\n    /// Convert a string to the appropriate naming convention for fields.\n    pub fn convert_field(&self, name: &str) -> String {\n        match self {\n            Self::PascalCase => self.to_camel_case(name), // Fields should be camelCase even with PascalCase\n            Self::CamelCase => self.to_camel_case(name),\n            Self::SnakeCase => self.to_snake_case(name),\n        }\n    }\n\n    /// Convert a string to the appropriate naming convention for enum cases.\n    pub fn convert_enum_case(&self, name: &str) -> String {\n        match self {\n            Self::PascalCase => self.to_camel_case(name), // Enum cases should be camelCase\n            Self::CamelCase => self.to_camel_case(name),\n            Self::SnakeCase => self.to_snake_case(name),\n        }\n    }\n\n    #[allow(clippy::wrong_self_convention)]\n    fn to_camel_case(&self, name: &str) -> String {\n        // Convert snake_case or PascalCase to camelCase\n        if name.contains('_') {\n            // Handle snake_case\n            let parts: Vec<&str> = name.split('_').collect();\n            if parts.is_empty() {\n                return name.to_string();\n            }\n\n            let mut result = String::new();\n            for (i, part) in parts.iter().enumerate() {\n                if i == 0 {\n                    result.push_str(&part.to_lowercase());\n                } else {\n                    let mut chars = part.chars();\n                    match chars.next() {\n                        None => continue,\n                        Some(first) => {\n                            result.push(first.to_uppercase().next().unwrap_or(first));\n                            for c in chars {\n                                result.extend(c.to_lowercase());\n                            }\n                        }\n                    }\n                }\n            }\n            result\n        } else {\n            if name.chars().any(|c| c.is_ascii_alphabetic())\n                && name\n                    .chars()\n                    .all(|c| !c.is_ascii_alphabetic() || c.is_ascii_uppercase())\n            {\n                return name.to_ascii_lowercase();\n            }\n\n            // Handle PascalCase - convert to camelCase\n            let mut chars = name.chars();\n            match chars.next() {\n                None => name.to_string(),\n                Some(first) => {\n                    let mut result = String::new();\n                    result.push(first.to_lowercase().next().unwrap_or(first));\n                    for c in chars {\n                        result.push(c); // Keep the rest as-is for PascalCase\n                    }\n                    result\n                }\n            }\n        }\n    }\n\n    #[allow(clippy::wrong_self_convention)]\n    fn to_pascal_case(&self, name: &str) -> String {\n        // Convert snake_case to PascalCase\n        name.split('_')\n            .map(|part| {\n                let mut chars = part.chars();\n                match chars.next() {\n                    None => String::new(),\n                    Some(first) => first.to_uppercase().chain(chars).collect(),\n                }\n            })\n            .collect()\n    }\n\n    #[allow(clippy::wrong_self_convention)]\n    fn to_snake_case(&self, name: &str) -> String {\n        // Convert camelCase/PascalCase to snake_case\n        let mut result = String::new();\n        let chars = name.chars();\n\n        for c in chars {\n            if c.is_uppercase() && !result.is_empty() {\n                result.push('_');\n            }\n            result.push(c.to_lowercase().next().unwrap_or(c));\n        }\n\n        result\n    }\n}\n\n/// Check if the type collection contains any Duration types that need the helper\nfn needs_duration_helper(types: &Types) -> bool {\n    for ndt in types.into_sorted_iter() {\n        if ndt.name == \"Duration\" {\n            return true;\n        }\n        // Also check if any struct fields contain Duration\n        if let Some(DataType::Struct(s)) = &ndt.ty\n            && let Fields::Named(fields) = &s.fields\n        {\n            for (_, field) in &fields.fields {\n                if let Some(ty) = field.ty.as_ref() {\n                    if let DataType::Reference(Reference::Named(r)) = ty\n                        && let Some(referenced_ndt) = types.get(r)\n                        && referenced_ndt.name == \"Duration\"\n                    {\n                        return true;\n                    }\n                    // Also check if the field type is a Duration struct directly\n                    if let DataType::Struct(struct_ty) = ty\n                        && is_duration_struct(struct_ty)\n                    {\n                        return true;\n                    }\n                }\n            }\n        }\n    }\n    false\n}\n\n/// Generate the Duration helper struct\nfn generate_duration_helper() -> String {\n    \"// MARK: - Duration Helper\\n\".to_string()\n        + \"/// Helper struct to decode Rust Duration format {\\\"secs\\\": u64, \\\"nanos\\\": u32}\\n\"\n        + \"public struct RustDuration: Codable {\\n\"\n        + \"    public let secs: UInt64\\n\"\n        + \"    public let nanos: UInt32\\n\"\n        + \"    \\n\"\n        + \"    public var timeInterval: TimeInterval {\\n\"\n        + \"        return Double(secs) + Double(nanos) / 1_000_000_000.0\\n\"\n        + \"    }\\n\"\n        + \"}\\n\\n\"\n        + \"// MARK: - Generated Types\\n\\n\"\n}\n"
  },
  {
    "path": "specta-swift/tests/Cargo.toml",
    "content": "[package]\nname = \"specta-swift-tests\"\nversion = \"0.0.0\"\nedition = \"2021\"\npublish = false\n\n[[test]]\nname = \"basic\"\npath = \"basic.rs\"\n\n[dependencies]\nspecta = { path = \"../../specta\", features = [\"derive\", \"uuid\", \"chrono\"] }\nspecta-swift = { path = \"../\" }\nuuid = \"1.12.1\"\nchrono = { version = \"0.4.40\", features = [\"clock\"] }\n"
  },
  {
    "path": "specta-swift/tests/advanced_unions.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n#[derive(Type)]\nstruct Point {\n    x: f64,\n    y: f64,\n}\n\n#[derive(Type)]\nstruct Circle {\n    center: Point,\n    radius: f64,\n}\n\n#[derive(Type)]\nstruct Rectangle {\n    top_left: Point,\n    bottom_right: Point,\n}\n\n#[derive(Type)]\nstruct Line {\n    start: Point,\n    end: Point,\n}\n\n#[derive(Type)]\nenum Shape {\n    // Unit variant\n    None,\n\n    // Simple tuple variant\n    Point(f64, f64),\n\n    // Named fields variant\n    Circle {\n        center: Point,\n        radius: f64,\n    },\n\n    // Nested struct variant\n    Rectangle(Rectangle),\n\n    // Complex nested variant\n    Line {\n        start: Point,\n        end: Point,\n    },\n\n    // Mixed variant with multiple nested types\n    Complex {\n        shapes: Vec<Shape>,\n        metadata: Option<String>,\n    },\n}\n\n#[derive(Type)]\nenum ApiResponse<T> {\n    // Success with data\n    Success {\n        data: T,\n        status: u16,\n        headers: Vec<(String, String)>,\n    },\n\n    // Error with details\n    Error {\n        code: u32,\n        message: String,\n        details: Option<T>,\n    },\n\n    // Loading state\n    Loading {\n        progress: f32,\n        estimated_time: Option<u64>,\n    },\n\n    // Redirect\n    Redirect {\n        url: String,\n        permanent: bool,\n    },\n}\n\n#[derive(Type)]\nenum DatabaseResult<T, E> {\n    // Success with data and metadata\n    Ok {\n        data: T,\n        affected_rows: u64,\n        execution_time: f64,\n    },\n\n    // Error with error type and context\n    Err {\n        error: E,\n        query: String,\n        retry_count: u32,\n    },\n\n    // Connection issues\n    ConnectionError {\n        host: String,\n        port: u16,\n        reason: String,\n    },\n\n    // Timeout\n    Timeout {\n        duration: f64,\n        operation: String,\n    },\n}\n\n#[test]\nfn test_complex_unions() {\n    let types = Types::default()\n        .register::<Point>()\n        .register::<Circle>()\n        .register::<Rectangle>()\n        .register::<Line>()\n        .register::<Shape>()\n        .register::<ApiResponse<String>>()\n        .register::<DatabaseResult<String, String>>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Complex unions Swift code:\\n{}\", output);\n\n    // Test that all types are generated\n    assert!(output.contains(\"struct Point\"));\n    assert!(output.contains(\"struct Circle\"));\n    assert!(output.contains(\"struct Rectangle\"));\n    assert!(output.contains(\"struct Line\"));\n    assert!(output.contains(\"enum Shape\"));\n    assert!(output.contains(\"enum ApiResponse\"));\n    assert!(output.contains(\"enum DatabaseResult\"));\n\n    // Test Shape enum variants\n    assert!(output.contains(\"case none\"));\n    assert!(output.contains(\"case point(Double, Double)\"));\n    assert!(output.contains(\"case circle\"));\n    assert!(output.contains(\"case rectangle(Rectangle)\"));\n    assert!(output.contains(\"case line\"));\n    assert!(output.contains(\"case complex\"));\n\n    // Test ApiResponse enum variants\n    assert!(output.contains(\"case success\"));\n    assert!(output.contains(\"case error\"));\n    assert!(output.contains(\"case loading\"));\n    assert!(output.contains(\"case redirect\"));\n\n    // Test DatabaseResult enum variants\n    assert!(output.contains(\"case ok\"));\n    assert!(output.contains(\"case err\"));\n    assert!(output.contains(\"case connectionError\"));\n    assert!(output.contains(\"case timeout\"));\n\n    // Test that nested structs are properly referenced\n    assert!(output.contains(\"center: Point\"));\n    assert!(output.contains(\"radius: Double\"));\n    assert!(output.contains(\"topLeft: Point\"));\n    assert!(output.contains(\"bottomRight: Point\"));\n    assert!(output.contains(\"start: Point\"));\n    assert!(output.contains(\"end: Point\"));\n}\n\n#[test]\nfn test_union_with_generics() {\n    let types = Types::default()\n        .register::<ApiResponse<String>>()\n        .register::<DatabaseResult<i32, String>>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generic unions Swift code:\\n{}\", output);\n\n    // Test generic enum definitions\n    assert!(output.contains(\"enum ApiResponse<T>\"));\n    assert!(output.contains(\"enum DatabaseResult<T, E>\"));\n\n    // Test that Codable is added via extension\n    assert!(output.contains(\"extension ApiResponse: Codable\"));\n    assert!(output.contains(\"extension DatabaseResult: Codable\"));\n\n    // Test that generic types are used in variants\n    assert!(output.contains(\"data: T\"));\n    assert!(output.contains(\"error: E\"));\n    assert!(output.contains(\"details: T?\"));\n}\n\n#[test]\nfn test_union_naming_conventions() {\n    let types = Types::default().register::<Shape>();\n    // Test with different naming conventions\n    let swift_pascal = Swift::new().naming(specta_swift::NamingConvention::PascalCase);\n    let swift_snake = Swift::new().naming(specta_swift::NamingConvention::SnakeCase);\n\n    let output_pascal = swift_pascal.export(&types, specta_serde::Format).unwrap();\n    let output_snake = swift_snake.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"PascalCase output:\\n{}\", output_pascal);\n    println!(\"SnakeCase output:\\n{}\", output_snake);\n\n    // PascalCase should have camelCase enum cases\n    assert!(output_pascal.contains(\"case none\"));\n    assert!(output_pascal.contains(\"case point\"));\n    assert!(output_pascal.contains(\"case circle\"));\n\n    // SnakeCase should have snake_case enum cases\n    assert!(output_snake.contains(\"case none\"));\n    assert!(output_snake.contains(\"case point\"));\n    assert!(output_snake.contains(\"case circle\"));\n}\n"
  },
  {
    "path": "specta-swift/tests/basic.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n#[derive(Type)]\nstruct User {\n    name: String,\n    age: u32,\n    active: bool,\n}\n\n#[derive(Type)]\nenum Status {\n    Active,\n    Inactive,\n    Pending { reason: String },\n    Error(String),\n}\n\n#[test]\nfn test_basic_export() {\n    let types = Types::default().register::<User>().register::<Status>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift code:\\n{}\", output);\n\n    // Basic assertions\n    assert!(output.contains(\"struct User\"));\n    assert!(output.contains(\"enum Status\"));\n    assert!(output.contains(\"let name: String\"));\n    assert!(output.contains(\"let age: UInt32\"));\n    assert!(output.contains(\"case active\"));\n    assert!(output.contains(\"case pending\"));\n}\n"
  },
  {
    "path": "specta-swift/tests/common_types.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n// Test with common types that might not have Type implementations\n#[derive(Type)]\nstruct TestStruct {\n    // Basic types that should work\n    id: u32,\n    name: String,\n    email: Option<String>,\n    // These might not have Type implementations\n    // uuid: uuid::Uuid,  // Commented out - likely not supported\n    // created_at: chrono::DateTime<chrono::Utc>,  // Commented out - likely not supported\n}\n\n#[derive(Type)]\nenum TestEnum {\n    Unit,\n    Tuple(String, u32),\n    Named { id: u32, name: String },\n}\n\n#[test]\nfn test_common_types() {\n    let types = Types::default()\n        .register::<TestStruct>()\n        .register::<TestEnum>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift code:\\n{}\", output);\n\n    // Test that basic types work\n    assert!(output.contains(\"struct TestStruct\"));\n    assert!(output.contains(\"enum TestEnum\"));\n    assert!(output.contains(\"let id: UInt32\"));\n    assert!(output.contains(\"let name: String\"));\n    assert!(output.contains(\"let email: String?\"));\n}\n\n// Test what happens when we try to use unsupported types\n#[test]\nfn test_unsupported_types() {\n    // This test will fail to compile if UUID doesn't have Type implementation\n    // Uncomment to test:\n    /*\n    #[derive(Type)]\n    struct WithUuid {\n        id: uuid::Uuid,\n    }\n\n    let types = Types::default().register::<WithUuid>();\n    let swift = Swift::default();\n    let output = swift.export(&types).unwrap();\n    println!(\"UUID support: {}\", output);\n    */\n}\n"
  },
  {
    "path": "specta-swift/tests/comprehensive.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n#[derive(Type)]\nstruct User {\n    id: u32,\n    name: String,\n    email: Option<String>,\n    age: u8,\n    is_active: bool,\n    metadata: UserMetadata,\n    tags: Vec<String>,\n    scores: Vec<f64>,\n}\n\n#[derive(Type)]\nstruct UserMetadata {\n    created_at: String,\n    last_login: Option<String>,\n    preferences: UserPreferences,\n}\n\n#[derive(Type)]\nstruct UserPreferences {\n    theme: String,\n    notifications: bool,\n    language: String,\n}\n\n#[derive(Type)]\nenum UserRole {\n    Admin,\n    User,\n    Guest,\n    Moderator { permissions: Vec<String> },\n    Custom { name: String, level: u8 },\n}\n\n#[derive(Type)]\nenum ApiResponse<T> {\n    Success(T),\n    Error { code: u32, message: String },\n    Loading,\n}\n\n#[derive(Type)]\nstruct ApiResult<T, E> {\n    data: Option<T>,\n    error: Option<E>,\n    status: u16,\n}\n\n#[test]\nfn test_comprehensive_export() {\n    let types = Types::default()\n        .register::<User>()\n        .register::<UserMetadata>()\n        .register::<UserPreferences>()\n        .register::<UserRole>()\n        .register::<ApiResponse<String>>()\n        .register::<ApiResult<String, String>>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift code:\\n{}\", output);\n\n    // Test struct generation\n    assert!(output.contains(\"struct User\"));\n    assert!(output.contains(\"struct UserMetadata\"));\n    assert!(output.contains(\"struct UserPreferences\"));\n    assert!(output.contains(\"struct ApiResult\"));\n\n    // Test enum generation\n    assert!(output.contains(\"enum UserRole\"));\n    assert!(output.contains(\"enum ApiResponse\"));\n\n    // Test field types\n    assert!(output.contains(\"let id: UInt32\"));\n    assert!(output.contains(\"let name: String\"));\n    assert!(output.contains(\"let email: String?\"));\n    assert!(output.contains(\"let age: UInt8\"));\n    assert!(output.contains(\"let isActive: Bool\"));\n    assert!(output.contains(\"let metadata: UserMetadata\"));\n    assert!(output.contains(\"let tags: [String]\"));\n    assert!(output.contains(\"let scores: [Double]\"));\n\n    // Test enum cases\n    assert!(output.contains(\"case admin\"));\n    assert!(output.contains(\"case user\"));\n    assert!(output.contains(\"case guest\"));\n    assert!(output.contains(\"case moderator\"));\n    assert!(output.contains(\"case custom\"));\n\n    // Test generic types (they appear as generic definitions, not concrete instantiations)\n    assert!(output.contains(\"enum ApiResponse<T>\"));\n    assert!(output.contains(\"struct ApiResult<T, E>\"));\n\n    // Test optional types\n    assert!(output.contains(\"let email: String?\"));\n    assert!(output.contains(\"let lastLogin: String?\"));\n    assert!(output.contains(\"let data: T?\"));\n    assert!(output.contains(\"let error: E?\"));\n\n    // Test array types\n    assert!(output.contains(\"let tags: [String]\"));\n    assert!(output.contains(\"let scores: [Double]\"));\n    assert!(output.contains(\"permissions: [String]\"));\n}\n\n#[test]\nfn test_naming_conventions() {\n    let types = Types::default().register::<User>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    // Test PascalCase for type names\n    assert!(output.contains(\"struct User\"));\n\n    // Test camelCase for field names\n    assert!(output.contains(\"let isActive: Bool\")); // snake_case -> camelCase\n    assert!(output.contains(\"let createdAt: String\")); // snake_case -> camelCase\n}\n\n#[test]\nfn test_swift_configuration() {\n    let types = Types::default().register::<User>();\n    // Test with custom configuration\n    let swift = Swift::new()\n        .header(\"// Custom header\")\n        .naming(specta_swift::NamingConvention::SnakeCase)\n        .optionals(specta_swift::OptionalStyle::Optional);\n\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Snake case output:\\n{}\", output);\n\n    assert!(output.contains(\"// Custom header\"));\n    assert!(output.contains(\"struct user\")); // snake_case type names\n    assert!(output.contains(\"let is_active: Bool\")); // snake_case field names\n    assert!(output.contains(\"let email: Optional<String>\")); // Optional<T> style\n}\n"
  },
  {
    "path": "specta-swift/tests/multiline_comments.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n/// A path within the Spacedrive Virtual Distributed File System\n///\n/// This is the core abstraction that enables cross-device operations.\n/// An SdPath can represent:\n/// - A physical file at a specific path on a specific device\n/// - A content-addressed file that can be sourced from any device\n///\n/// This enum-based approach enables resilient file operations by allowing\n/// content-based paths to be resolved to optimal physical locations at runtime.\n#[derive(Type)]\nenum SdPath {\n    /// A physical file path on a specific device\n    Physical {\n        /// The device ID where this file is located\n        device_id: String,\n        /// The file path on the device\n        path: String,\n    },\n    /// A content-addressed file that can be sourced from any device\n    Content {\n        /// The content hash of the file\n        hash: String,\n        /// Optional preferred device for this content\n        preferred_device: Option<String>,\n    },\n}\n\n/// A simple struct with a single-line comment\n#[derive(Type)]\nstruct SimpleStruct {\n    /// The name of the struct\n    name: String,\n}\n\n#[test]\nfn test_multiline_comments() {\n    let types = Types::default()\n        .register::<SdPath>()\n        .register::<SimpleStruct>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift code with comments:\\n{}\", output);\n\n    // Test that multi-line comments are properly formatted\n    assert!(output.contains(\"/// A path within the Spacedrive Virtual Distributed File System\"));\n    assert!(\n        output.contains(\"/// This is the core abstraction that enables cross-device operations.\")\n    );\n    assert!(output.contains(\"/// An SdPath can represent:\"));\n    assert!(output.contains(\"/// - A physical file at a specific path on a specific device\"));\n    assert!(output.contains(\"/// - A content-addressed file that can be sourced from any device\"));\n    assert!(output.contains(\"/// This enum-based approach enables resilient file operations\"));\n\n    // Test that single-line comments work too\n    assert!(output.contains(\"/// A simple struct with a single-line comment\"));\n\n    // Note: Field-level comments are not currently supported by Specta\n    // The enum cases and struct fields don't have individual comments\n    // because Specta doesn't extract field-level documentation by default\n}\n"
  },
  {
    "path": "specta-swift/tests/string_enum_implementation.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse serde::{Deserialize, Serialize};\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n#[derive(Type, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum JobStatus {\n    Queued,\n    Running,\n    Paused,\n    Completed,\n    Failed,\n    Cancelled,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[serde(rename_all = \"UPPERCASE\")]\npub enum Priority {\n    Low,\n    Medium,\n    High,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub enum LogLevel {\n    Debug,\n    Info,\n    Warning,\n    Error,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[serde(rename_all = \"PascalCase\")]\npub enum UserRole {\n    Admin,\n    Moderator,\n    User,\n    Guest,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[serde(rename_all = \"kebab-case\")]\npub enum ApiStatus {\n    Online,\n    Offline,\n    Maintenance,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[serde(rename_all = \"SCREAMING-KEBAB-CASE\")]\npub enum DatabaseStatus {\n    Connected,\n    Disconnected,\n    Reconnecting,\n}\n\n// This should NOT be a string enum (has data fields)\n#[derive(Type, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum MixedEnum {\n    Unit,\n    WithData(String),\n    WithFields { name: String, value: i32 },\n}\n\n// This should NOT be a string enum (no rename_all)\n#[derive(Type)]\npub enum RegularEnum {\n    Variant1,\n    Variant2,\n    Variant3,\n}\n\n#[test]\nfn test_string_enum_snake_case() {\n    let types = Types::default().register::<JobStatus>();\n\n    let swift = Swift::default();\n    let result = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for JobStatus:\");\n    println!(\"{}\", result);\n\n    assert!(result.contains(\"enum JobStatus: String, Codable\"));\n    assert!(result.contains(\"case queued = \\\"queued\\\"\"));\n    assert!(result.contains(\"case running = \\\"running\\\"\"));\n    assert!(result.contains(\"case completed = \\\"completed\\\"\"));\n    assert!(result.contains(\"case failed = \\\"failed\\\"\"));\n    assert!(result.contains(\"case cancelled = \\\"cancelled\\\"\"));\n}\n\n#[test]\nfn test_string_enum_uppercase() {\n    let types = Types::default().register::<Priority>();\n\n    let swift = Swift::default();\n    let result = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for Priority:\");\n    println!(\"{}\", result);\n\n    assert!(result.contains(\"enum Priority: String, Codable\"));\n    assert!(result.contains(\"case low = \\\"LOW\\\"\"));\n    assert!(result.contains(\"case medium = \\\"MEDIUM\\\"\"));\n    assert!(result.contains(\"case high = \\\"HIGH\\\"\"));\n}\n\n#[test]\nfn test_string_enum_camel_case() {\n    let types = Types::default().register::<LogLevel>();\n\n    let swift = Swift::default();\n    let result = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for LogLevel:\");\n    println!(\"{}\", result);\n\n    assert!(result.contains(\"enum LogLevel: String, Codable\"));\n    assert!(result.contains(\"case debug = \\\"debug\\\"\"));\n    assert!(result.contains(\"case info = \\\"info\\\"\"));\n    assert!(result.contains(\"case warning = \\\"warning\\\"\"));\n    assert!(result.contains(\"case error = \\\"error\\\"\"));\n}\n\n#[test]\nfn test_string_enum_pascal_case() {\n    let types = Types::default().register::<UserRole>();\n\n    let swift = Swift::default();\n    let result = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for UserRole:\");\n    println!(\"{}\", result);\n\n    assert!(result.contains(\"enum UserRole: String, Codable\"));\n    assert!(result.contains(\"case admin = \\\"Admin\\\"\"));\n    assert!(result.contains(\"case moderator = \\\"Moderator\\\"\"));\n    assert!(result.contains(\"case user = \\\"User\\\"\"));\n    assert!(result.contains(\"case guest = \\\"Guest\\\"\"));\n}\n\n#[test]\nfn test_string_enum_kebab_case() {\n    let types = Types::default().register::<ApiStatus>();\n\n    let swift = Swift::default();\n    let result = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for ApiStatus:\");\n    println!(\"{}\", result);\n\n    assert!(result.contains(\"enum ApiStatus: String, Codable\"));\n    assert!(result.contains(\"case online = \\\"online\\\"\"));\n    assert!(result.contains(\"case offline = \\\"offline\\\"\"));\n    assert!(result.contains(\"case maintenance = \\\"maintenance\\\"\"));\n}\n\n#[test]\nfn test_string_enum_screaming_kebab_case() {\n    let types = Types::default().register::<DatabaseStatus>();\n\n    let swift = Swift::default();\n    let result = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for DatabaseStatus:\");\n    println!(\"{}\", result);\n\n    assert!(result.contains(\"enum DatabaseStatus: String, Codable\"));\n    assert!(result.contains(\"case connected = \\\"CONNECTED\\\"\"));\n    assert!(result.contains(\"case disconnected = \\\"DISCONNECTED\\\"\"));\n    assert!(result.contains(\"case reconnecting = \\\"RECONNECTING\\\"\"));\n}\n\n#[test]\nfn test_mixed_enum_not_string() {\n    let types = Types::default().register::<MixedEnum>();\n    let swift = Swift::default();\n    let result = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for MixedEnum:\");\n    println!(\"{}\", result);\n\n    // Should NOT be a string enum (has data fields) - no redundant Codable in declaration\n    assert!(result.contains(\"enum MixedEnum\"));\n    assert!(!result.contains(\"enum MixedEnum: Codable\"));\n    assert!(!result.contains(\"enum MixedEnum: String, Codable\"));\n\n    // Should have Codable in extension instead\n    assert!(result.contains(\"extension MixedEnum: Codable\"));\n    assert!(result.contains(\"case unit\"));\n    assert!(result.contains(\"case withData(String)\"));\n    assert!(result.contains(\"case withFields(MixedEnumWithFieldsData)\"));\n    assert!(result.contains(\"struct MixedEnumWithFieldsData: Codable\"));\n    assert!(result.contains(\"let name: String\"));\n    assert!(result.contains(\"let value: Int32\"));\n    assert!(!result.contains(\"case unit(    case unit\"));\n    assert!(!result.contains(\"public let withFields:     public let\"));\n    assert!(!result.contains(\"public let withData:     public let\"));\n}\n\n#[test]\nfn test_regular_enum_not_string() {\n    let types = Types::default().register::<RegularEnum>();\n    let swift = Swift::default();\n    let result = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for RegularEnum:\");\n    println!(\"{}\", result);\n\n    assert!(result.contains(\"enum RegularEnum: String, Codable\"));\n    assert!(result.contains(\"case variant1 = \\\"Variant1\\\"\"));\n    assert!(result.contains(\"case variant2 = \\\"Variant2\\\"\"));\n    assert!(result.contains(\"case variant3 = \\\"Variant3\\\"\"));\n}\n\n#[test]\nfn test_all_string_enums_together() {\n    let string_types = Types::default()\n        .register::<JobStatus>()\n        .register::<Priority>()\n        .register::<LogLevel>()\n        .register::<UserRole>()\n        .register::<ApiStatus>()\n        .register::<DatabaseStatus>();\n    let other_types = Types::default()\n        .register::<MixedEnum>()\n        .register::<RegularEnum>();\n    let swift = Swift::default();\n    let result = swift.export(&string_types, specta_serde::Format).unwrap();\n    let raw_result = swift.export(&other_types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for all enums:\");\n    println!(\"{}\", result);\n\n    assert!(result.contains(\"enum JobStatus: String, Codable\"));\n    assert!(result.contains(\"enum Priority: String, Codable\"));\n    assert!(result.contains(\"enum LogLevel: String, Codable\"));\n    assert!(result.contains(\"enum UserRole: String, Codable\"));\n    assert!(result.contains(\"enum ApiStatus: String, Codable\"));\n    assert!(result.contains(\"enum DatabaseStatus: String, Codable\"));\n\n    assert!(raw_result.contains(\"enum MixedEnum\"));\n    assert!(raw_result.contains(\"enum RegularEnum: String, Codable\"));\n    assert!(raw_result.contains(\"extension MixedEnum: Codable\"));\n}\n"
  },
  {
    "path": "specta-swift/tests/string_enum_test.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse serde::{Deserialize, Serialize};\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n/// Test enum with snake_case rename_all.\n#[derive(Type, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\nenum JobStatus {\n    Completed,\n    Running,\n    Failed,\n    PendingApproval,\n}\n\n/// Test enum without rename_all.\n#[derive(Type)]\nenum RegularEnum {\n    Option1,\n    Option2,\n    Option3,\n}\n\n#[test]\nfn test_string_enum_generation() {\n    let swift = Swift::default();\n    let serde_resolved = Types::default().register::<JobStatus>();\n    let raw_resolved = Types::default().register::<RegularEnum>();\n    let string_output = swift.export(&serde_resolved, specta_serde::Format).unwrap();\n    let raw_output = swift.export(&raw_resolved, specta_serde::Format).unwrap();\n\n    println!(\"String enum test output:\\n{}\", string_output);\n    println!(\"Regular enum test output:\\n{}\", raw_output);\n\n    assert!(string_output.contains(\"enum JobStatus: String, Codable\"));\n    assert!(string_output.contains(\"case completed = \\\"completed\\\"\"));\n    assert!(string_output.contains(\"case running = \\\"running\\\"\"));\n    assert!(string_output.contains(\"case failed = \\\"failed\\\"\"));\n    assert!(string_output.contains(\"case pendingApproval = \\\"pending_approval\\\"\"));\n\n    assert!(raw_output.contains(\"enum RegularEnum: String, Codable\"));\n    assert!(raw_output.contains(\"case option1 = \\\"Option1\\\"\"));\n    assert!(raw_output.contains(\"case option2 = \\\"Option2\\\"\"));\n    assert!(raw_output.contains(\"case option3 = \\\"Option3\\\"\"));\n}\n"
  },
  {
    "path": "specta-swift/tests/struct_reuse_test.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n#[derive(Type)]\nstruct UserData {\n    id: u32,\n    name: String,\n    email: Option<String>,\n}\n\n#[derive(Type)]\nenum ApiResponse {\n    Success(UserData),\n    Error { message: String, code: u32 },\n    Loading,\n}\n\n#[derive(Type)]\nstruct ApiRequest {\n    user: UserData,\n    action: String,\n}\n\n#[test]\nfn test_struct_reuse_between_standalone_and_enum() {\n    let types = Types::default()\n        .register::<UserData>()\n        .register::<ApiResponse>()\n        .register::<ApiRequest>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for struct reuse test:\");\n    println!(\"{}\", output);\n\n    // Check that UserData is defined as a standalone struct\n    assert!(output.contains(\"public struct UserData: Codable\"));\n    assert!(output.contains(\"public let id: UInt32\"));\n    assert!(output.contains(\"public let name: String\"));\n    assert!(output.contains(\"public let email: String?\"));\n\n    // Check that ApiResponse uses UserData directly (not a generated struct)\n    assert!(output.contains(\"case success(UserData)\"));\n\n    // Check that ApiRequest also uses UserData directly\n    assert!(output.contains(\"public struct ApiRequest: Codable\"));\n    assert!(output.contains(\"public let user: UserData\"));\n    assert!(output.contains(\"public let action: String\"));\n\n    // Ensure we don't have duplicate UserData definitions\n    let user_data_count = output.matches(\"public struct UserData: Codable\").count();\n    assert_eq!(user_data_count, 1, \"UserData should be defined only once\");\n\n    // Ensure we don't have any generated structs like ApiResponseSuccessData\n    assert!(\n        !output.contains(\"ApiResponseSuccessData\"),\n        \"Should not generate ApiResponseSuccessData when UserData is standalone\"\n    );\n}\n\n#[test]\nfn test_struct_reuse_with_different_ordering() {\n    // Test with different ordering - enum first, then standalone struct\n    let types = Types::default()\n        .register::<ApiResponse>()\n        .register::<UserData>()\n        .register::<ApiRequest>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for struct reuse test (enum first):\");\n    println!(\"{}\", output);\n\n    // Check that UserData is still defined as a standalone struct\n    assert!(output.contains(\"public struct UserData: Codable\"));\n\n    // Check that ApiResponse uses UserData directly\n    assert!(output.contains(\"case success(UserData)\"));\n\n    // Ensure we don't have duplicate UserData definitions\n    let user_data_count = output.matches(\"public struct UserData: Codable\").count();\n    assert_eq!(user_data_count, 1, \"UserData should be defined only once\");\n\n    // Ensure we don't have any generated structs like ApiResponseSuccessData\n    assert!(\n        !output.contains(\"ApiResponseSuccessData\"),\n        \"Should not generate ApiResponseSuccessData when UserData is standalone\"\n    );\n}\n"
  },
  {
    "path": "specta-swift/tests/struct_variants.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n/// Test enum with struct-like variants (named fields)\n#[derive(Type)]\npub enum Event {\n    /// Job started event with named fields\n    JobStarted { job_id: String, job_type: String },\n    /// Job completed event with named fields\n    JobCompleted {\n        job_id: String,\n        result: String,\n        duration: u64,\n    },\n    /// Simple unit variant\n    JobCancelled,\n    /// Tuple variant (unnamed fields)\n    JobFailed(String, u32),\n}\n\n/// Test enum with mixed variant types\n#[derive(Type)]\npub enum ApiResponse {\n    /// Success with data\n    Success { data: String, status: u16 },\n    /// Error with details\n    Error {\n        message: String,\n        code: u32,\n        details: Option<String>,\n    },\n    /// Loading state\n    Loading,\n    /// Tuple variant\n    Redirect(String),\n}\n\n#[test]\nfn test_struct_variants_generation() {\n    let types = Types::default()\n        .register::<Event>()\n        .register::<ApiResponse>();\n    let swift = Swift::default();\n    let result = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift for struct variants:\");\n    println!(\"{}\", result);\n\n    // Event enum should have struct-like cases\n    assert!(result.contains(\"enum Event\"));\n    assert!(result.contains(\"case jobStarted(EventJobStartedData)\"));\n    assert!(result.contains(\"case jobCompleted(EventJobCompletedData)\"));\n    assert!(result.contains(\"case jobCancelled\"));\n    assert!(result.contains(\"case jobFailed(String, UInt32)\"));\n\n    // Should generate structs for named field variants\n    assert!(result.contains(\"struct EventJobStartedData: Codable\"));\n    assert!(result.contains(\"let jobId: String\"));\n    assert!(result.contains(\"let jobType: String\"));\n\n    assert!(result.contains(\"struct EventJobCompletedData: Codable\"));\n    assert!(result.contains(\"let jobId: String\"));\n    assert!(result.contains(\"let result: String\"));\n    assert!(result.contains(\"let duration: UInt64\"));\n\n    // ApiResponse enum should have struct-like cases\n    assert!(result.contains(\"enum ApiResponse\"));\n    assert!(result.contains(\"case success(ApiResponseSuccessData)\"));\n    assert!(result.contains(\"case error(ApiResponseErrorData)\"));\n    assert!(result.contains(\"case loading\"));\n    assert!(result.contains(\"case redirect(String)\"));\n\n    // Should generate structs for ApiResponse variants\n    assert!(result.contains(\"struct ApiResponseSuccessData: Codable\"));\n    assert!(result.contains(\"let data: String\"));\n    assert!(result.contains(\"let status: UInt16\"));\n\n    assert!(result.contains(\"struct ApiResponseErrorData: Codable\"));\n    assert!(result.contains(\"let message: String\"));\n    assert!(result.contains(\"let code: UInt32\"));\n    assert!(result.contains(\"let details: String?\"));\n}\n"
  },
  {
    "path": "specta-swift/tests/unions.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n#[derive(Type)]\nstruct User {\n    id: u32,\n    name: String,\n    email: Option<String>,\n}\n\n#[derive(Type)]\nstruct Admin {\n    id: u32,\n    name: String,\n    permissions: Vec<String>,\n    level: u8,\n}\n\n#[derive(Type)]\nstruct Guest {\n    session_id: String,\n    expires_at: String,\n}\n\n#[derive(Type)]\nenum UserType {\n    // Unit variant\n    Anonymous,\n\n    // Tuple variant\n    User(String, u32),\n\n    // Named fields variant (should become a struct-like case)\n    Admin {\n        id: u32,\n        name: String,\n        permissions: Vec<String>,\n    },\n\n    // Nested struct variant\n    Registered(User),\n\n    // Complex nested struct variant\n    SuperAdmin(Admin),\n\n    // Mixed variant with nested struct\n    Guest {\n        info: Guest,\n        created_at: String,\n    },\n}\n\n#[derive(Type)]\nenum ApiResult<T, E> {\n    Success {\n        data: T,\n        status: u16,\n    },\n    Error {\n        error: E,\n        code: u32,\n        message: String,\n    },\n    Loading {\n        progress: f32,\n    },\n}\n\n#[derive(Type)]\nenum ComplexUnion {\n    // Simple unit\n    None,\n\n    // Tuple with multiple types\n    Tuple(String, u32, bool),\n\n    // Named fields\n    NamedFields {\n        id: u32,\n        name: String,\n        active: bool,\n    },\n\n    // Nested struct\n    UserStruct(User),\n\n    // Nested enum\n    UserType(UserType),\n\n    // Complex nested structure\n    Complex {\n        user: User,\n        metadata: Vec<String>,\n        settings: Option<Admin>,\n    },\n}\n\n#[test]\nfn test_enum_with_nested_structs() {\n    let types = Types::default()\n        .register::<User>()\n        .register::<Admin>()\n        .register::<Guest>()\n        .register::<UserType>()\n        .register::<ApiResult<String, String>>()\n        .register::<ComplexUnion>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Generated Swift code:\\n{}\", output);\n\n    // Test enum generation\n    assert!(output.contains(\"enum UserType\"));\n    assert!(output.contains(\"enum ApiResult\"));\n    assert!(output.contains(\"enum ComplexUnion\"));\n\n    // Test unit variants\n    assert!(output.contains(\"case anonymous\"));\n    assert!(output.contains(\"case none\"));\n\n    // Test tuple variants\n    assert!(output.contains(\"case user(String, UInt32)\"));\n    assert!(output.contains(\"case tuple(String, UInt32, Bool)\"));\n\n    // Test named field variants (should be struct-like)\n    assert!(output.contains(\"case admin(UserTypeAdminData)\"));\n    assert!(output.contains(\"case guest(UserTypeGuestData)\"));\n    assert!(output.contains(\"case success(ApiResultSuccessData)\"));\n    assert!(output.contains(\"case error(ApiResultErrorData)\"));\n    assert!(output.contains(\"case loading(ApiResultLoadingData)\"));\n    assert!(output.contains(\"case namedFields(ComplexUnionNamedFieldsData)\"));\n    assert!(output.contains(\"case complex(ComplexUnionComplexData)\"));\n\n    // Test nested struct variants\n    assert!(output.contains(\"case registered(User)\"));\n    assert!(output.contains(\"case superAdmin(Admin)\"));\n    assert!(output.contains(\"case userStruct(User)\"));\n    assert!(output.contains(\"case userType(UserType)\"));\n\n    // Test that nested structs are properly defined\n    assert!(output.contains(\"struct User\"));\n    assert!(output.contains(\"struct Admin\"));\n    assert!(output.contains(\"struct Guest\"));\n}\n\n#[test]\nfn test_swift_union_syntax() {\n    let types = Types::default().register::<UserType>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"UserType Swift code:\\n{}\", output);\n\n    // Verify proper Swift enum syntax (no redundant Codable in declaration)\n    assert!(output.contains(\"enum UserType {\"));\n\n    // Unit variant\n    assert!(output.contains(\"case anonymous\"));\n\n    // Tuple variant\n    assert!(output.contains(\"case user(String, UInt32)\"));\n\n    // Named fields should be struct-like\n    assert!(output.contains(\"case admin(UserTypeAdminData)\"));\n    assert!(output.contains(\"case registered(User)\"));\n    assert!(output.contains(\"case superAdmin(Admin)\"));\n    assert!(output.contains(\"case guest(UserTypeGuestData)\"));\n}\n"
  },
  {
    "path": "specta-swift/tests/uuid_simple.rs",
    "content": "#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n// Test with UUID - this should work now that we have the uuid feature enabled\n#[derive(Type)]\nstruct WithUuid {\n    id: uuid::Uuid,\n    name: String,\n}\n\n#[derive(Type)]\nstruct WithChrono {\n    created_at: chrono::DateTime<chrono::Utc>,\n    updated_at: chrono::NaiveDateTime,\n    name: String,\n}\n\n#[test]\nfn test_uuid_support() {\n    let types = Types::default().register::<WithUuid>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"UUID support test:\\n{}\", output);\n\n    // UUID should be converted to String in Swift\n    assert!(output.contains(\"let id: String\"));\n    assert!(output.contains(\"let name: String\"));\n}\n\n#[test]\nfn test_chrono_support() {\n    let types = Types::default().register::<WithChrono>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Chrono support test:\\n{}\", output);\n\n    // Chrono types should be converted to String in Swift\n    assert!(output.contains(\"let createdAt: String\"));\n    assert!(output.contains(\"let updatedAt: String\"));\n    assert!(output.contains(\"let name: String\"));\n}\n"
  },
  {
    "path": "specta-swift/tests/uuid_test.rs",
    "content": "//! Integration tests for Swift UUID and chrono support.\n\n#![allow(dead_code, missing_docs)]\n\nuse specta::{Type, Types};\nuse specta_swift::Swift;\n\n#[derive(Type)]\nstruct WithUuid {\n    id: uuid::Uuid,\n    name: String,\n}\n\n#[test]\nfn test_uuid_support() {\n    let types = Types::default().register::<WithUuid>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"UUID support test:\\n{}\", output);\n\n    // UUID should be converted to String in Swift\n    assert!(output.contains(\"let id: String\"));\n    assert!(output.contains(\"let name: String\"));\n}\n\n#[derive(Type)]\nstruct WithChrono {\n    created_at: chrono::DateTime<chrono::Utc>,\n    updated_at: chrono::NaiveDateTime,\n    name: String,\n}\n\n#[test]\nfn test_chrono_support() {\n    let types = Types::default().register::<WithChrono>();\n    let swift = Swift::default();\n    let output = swift.export(&types, specta_serde::Format).unwrap();\n\n    println!(\"Chrono support test:\\n{}\", output);\n\n    // Chrono types should be converted to String in Swift\n    assert!(output.contains(\"let createdAt: String\"));\n    assert!(output.contains(\"let updatedAt: String\"));\n    assert!(output.contains(\"let name: String\"));\n}\n"
  },
  {
    "path": "specta-tags/Cargo.toml",
    "content": "[package]\nname = \"specta-tags\"\ndescription = \"Analyze Specta datatypes and generate inline JavaScript transforms\"\nversion = \"0.0.0\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-tags/latest/specta-tags\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"typescript\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\nreadme = \"../README.md\"\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[lints]\nworkspace = true\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\" }\nserde = \"1\"\nserde_json = \"1\"\n\n[dev-dependencies]\nserde = { version = \"1\", features = [\"derive\"] }\nbytes = \"1.11.1\"\nchrono = \"0.4.44\"\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\", features = [\"derive\", \"chrono\", \"bytes\"] }\nspecta-serde = { version = \"0.0.11\", path = \"../specta-serde\" }\n"
  },
  {
    "path": "specta-tags/src/lib.rs",
    "content": "//! Analyze Specta datatypes and generate inline JavaScript transforms.\n//!\n//! `TransformPlan` walks a resolved `specta::DataType` tree, tags values that need\n//! JavaScript-side conversion, and renders a plain JavaScript expression that applies\n//! those conversions at runtime.\n//!\n//! This is intended for cases where a transport serializes values like `u128`, dates,\n//! or bytes into JSON-compatible representations and the client needs to restore their\n//! richer JavaScript forms.\n//!\n//! ```rust\n//! use specta::{Type, Types};\n//!\n//! #[derive(Type)]\n//! struct Event {\n//!     id: u128,\n//! }\n//!\n//! let mut types = Types::default();\n//! let dt = Event::definition(&mut types);\n//! let plan = specta_tags::TransformPlan::analyze(&dt, &types);\n//! let js = plan.map(\"value\");\n//! assert!(js.contains(\"BigInt\"));\n//! assert!(js.contains(\"[\\\"id\\\"]\"));\n//! ```\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n\nuse std::{borrow::Cow, sync::Arc};\n\nuse specta::{\n    Types,\n    datatype::{\n        DataType, Fields, GenericReference, NamedReference, NamedReferenceType, Primitive,\n        Reference,\n    },\n};\n\n// TODO: Allow configuring custom named types via NDT name and module path using config params.\n// TODO: Tagging-style system for `rspc` w/ runtime\n\n// TODO: Core changes to `BigInt` handling with Typescript exporter???\n// TODO: How to handle `UInt8Array`?\n// TODO: Could we support `Custom` tags? If the runtime is fixed thats hard.\n\n// TODO: Documentations -> Explain how input types *just work* (double check that though)\n\n/// A tag is used to identify the transformation required for a given data type.\n#[derive(Clone)]\npub enum Tag {\n    /// [BigInt](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt)\n    BigInt,\n    /// [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)\n    Uint8Array,\n    /// [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)\n    Date,\n    /// A custom tag.\n    ///\n    /// TODO: Document this\n    Custom(Arc<dyn Fn(&str) -> Cow<'static, str> + Send + Sync>),\n}\n\nimpl std::fmt::Debug for Tag {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        match self {\n            Self::BigInt => f.write_str(\"BigInt\"),\n            Self::Uint8Array => f.write_str(\"Uint8Array\"),\n            Self::Date => f.write_str(\"Date\"),\n            Self::Custom(_) => f.write_str(\"Custom(<fn>)\"),\n        }\n    }\n}\n\n/// A compiled transform plan for a resolved Specta datatype.\n///\n/// Use [`TransformPlan::analyze`] to build the plan, then [`TransformPlan::map`] to\n/// render the JavaScript expression that applies the required runtime conversions.\n#[derive(Debug)]\npub struct TransformPlan {\n    plan: PlanNode,\n}\n\nimpl TransformPlan {\n    /// Analyzes a resolved datatype and records the JavaScript conversions it needs.\n    pub fn analyze(dt: &DataType, types: &Types) -> Self {\n        // Scan all `DataType` references, etc. and collect tags and their object location for `Self::map` to use.\n        //\n        // You should match on `NamedDataType`'s name and module path to determine known named types.\n\n        Self {\n            plan: Analyzer.analyze(dt, types, &[], &mut Vec::new()),\n        }\n    }\n\n    /// Renders a JavaScript expression that transforms the provided input expression.\n    ///\n    /// When no runtime conversions are required this returns the original expression.\n    /// Otherwise it returns a new expression that applies the necessary `BigInt`,\n    /// `Date`, or `Uint8Array` conversions inline.\n    pub fn map<'a>(&self, t: &'a str) -> Cow<'a, str> {\n        // If `t` is a struct and has tags we wanna decompose it to something like:\n        // `{ ...t, field_with_override: { nested_override: new Date(t.field_with_override.nested_override) } }`\n        //\n        // If a nested tag doesn't have tags we should just return it to avoid deconstructing it.\n        //\n        // Otherwise we need to traverse the structure to apply the tags inline.\n        // This should just be plain JS code so should work in Typescript (via inference) and in JS.\n        //\n        // If it has no tags we can just return `t` as is.\n\n        if self.plan.is_identity() {\n            return t.into();\n        }\n\n        Cow::Owned(Renderer::default().render(&self.plan, t))\n    }\n}\n\n#[derive(Debug)]\nenum PlanNode {\n    Identity,\n    Leaf(Tag),\n    Nullable(Box<PlanNode>),\n    List(Box<PlanNode>),\n    Tuple(Vec<PlanNode>),\n    Object(Vec<ObjectFieldPlan>),\n    Map(Box<PlanNode>),\n    Enum(Vec<EnumVariantPlan>),\n}\n\nimpl PlanNode {\n    fn is_identity(&self) -> bool {\n        match self {\n            Self::Identity => true,\n            Self::Leaf(_) => false,\n            Self::Nullable(inner) | Self::List(inner) | Self::Map(inner) => inner.is_identity(),\n            Self::Tuple(items) => items.iter().all(Self::is_identity),\n            Self::Object(fields) => fields.iter().all(ObjectFieldPlan::is_identity),\n            Self::Enum(variants) => variants.iter().all(|v| v.plan.is_identity()),\n        }\n    }\n}\n\n#[derive(Debug)]\nenum ObjectFieldPlan {\n    Named(String, PlanNode),\n}\n\nimpl ObjectFieldPlan {\n    fn is_identity(&self) -> bool {\n        match self {\n            Self::Named(_, plan) => plan.is_identity(),\n        }\n    }\n}\n\n#[derive(Debug)]\nstruct EnumVariantPlan {\n    matcher: EnumVariantMatcher,\n    plan: PlanNode,\n}\n\n#[derive(Debug, Clone)]\nenum EnumVariantMatcher {\n    HasField(String),\n    Tagged { field: String, value: String },\n    Direct,\n}\n\n#[derive(Clone, Copy)]\nenum KnownNamedTag {\n    Date,\n    Uint8Array,\n}\n\n// TODO: Review everything in this!\nconst BUILTIN_MATCHERS: &[(&str, &str, KnownNamedTag)] = &[\n    // BigInt-like wrapper\n    // (\"tauri_specta\", \"BigInt\", KnownNamedTag::BigInt), // TODO: Fix this\n    // Date-like\n    (\"std::time\", \"SystemTime\", KnownNamedTag::Date),\n    (\"toml::value\", \"Datetime\", KnownNamedTag::Date),\n    (\"chrono\", \"NaiveDateTime\", KnownNamedTag::Date),\n    (\"chrono\", \"NaiveDate\", KnownNamedTag::Date),\n    (\"chrono\", \"Date\", KnownNamedTag::Date),\n    (\"chrono\", \"DateTime\", KnownNamedTag::Date),\n    (\"time\", \"PrimitiveDateTime\", KnownNamedTag::Date),\n    (\"time\", \"OffsetDateTime\", KnownNamedTag::Date),\n    (\"time\", \"Date\", KnownNamedTag::Date),\n    (\"jiff\", \"Timestamp\", KnownNamedTag::Date),\n    (\"jiff\", \"Zoned\", KnownNamedTag::Date),\n    (\"jiff::civil\", \"Date\", KnownNamedTag::Date),\n    (\"jiff::civil\", \"DateTime\", KnownNamedTag::Date),\n    (\"bson\", \"DateTime\", KnownNamedTag::Date),\n    // Byte-like\n    (\"bytes\", \"Bytes\", KnownNamedTag::Uint8Array),\n    (\"bytes\", \"BytesMut\", KnownNamedTag::Uint8Array),\n];\n\n#[derive(Default)]\nstruct Analyzer;\n\nimpl Analyzer {\n    fn analyze(\n        &self,\n        dt: &DataType,\n        types: &Types,\n        generics: &[(GenericReference, DataType)],\n        stack: &mut Vec<NamedReference>,\n    ) -> PlanNode {\n        match dt {\n            DataType::Primitive(Primitive::i64)\n            | DataType::Primitive(Primitive::u64)\n            | DataType::Primitive(Primitive::i128)\n            | DataType::Primitive(Primitive::u128) => PlanNode::Leaf(Tag::BigInt),\n            DataType::Primitive(_) => PlanNode::Identity,\n            DataType::List(list) => {\n                let inner = self.analyze(&list.ty, types, generics, stack);\n                if inner.is_identity() {\n                    PlanNode::Identity\n                } else {\n                    PlanNode::List(Box::new(inner))\n                }\n            }\n            DataType::Map(map) => {\n                let inner = self.analyze(map.value_ty(), types, generics, stack);\n                if inner.is_identity() {\n                    PlanNode::Identity\n                } else {\n                    PlanNode::Map(Box::new(inner))\n                }\n            }\n            DataType::Struct(st) => self.analyze_fields(&st.fields, types, generics, stack),\n            DataType::Enum(en) => {\n                let mut variants = Vec::new();\n\n                for (name, variant) in en.variants.iter().filter(|(_, v)| !v.skip) {\n                    if let Some(variant) =\n                        self.analyze_enum_variant(name, variant, types, generics, stack)\n                        && !variant.plan.is_identity()\n                    {\n                        variants.push(variant);\n                    }\n                }\n\n                if variants.is_empty() {\n                    PlanNode::Identity\n                } else {\n                    PlanNode::Enum(variants)\n                }\n            }\n            DataType::Tuple(tuple) => {\n                let items = tuple\n                    .elements\n                    .iter()\n                    .map(|ty| self.analyze(ty, types, generics, stack))\n                    .collect::<Vec<_>>();\n\n                if items.iter().all(PlanNode::is_identity) {\n                    PlanNode::Identity\n                } else {\n                    PlanNode::Tuple(items)\n                }\n            }\n            DataType::Nullable(inner) => {\n                let inner = self.analyze(inner, types, generics, stack);\n                if inner.is_identity() {\n                    PlanNode::Identity\n                } else {\n                    PlanNode::Nullable(Box::new(inner))\n                }\n            }\n            DataType::Reference(Reference::Named(reference)) => {\n                if let Some(ndt) = types.get(reference) {\n                    if let Some(tag) = self.resolve_named_tag(&ndt.module_path, &ndt.name) {\n                        return match tag {\n                            KnownNamedTag::Date => PlanNode::Leaf(Tag::Date),\n                            KnownNamedTag::Uint8Array => PlanNode::Leaf(Tag::Uint8Array),\n                        };\n                    }\n\n                    if stack.contains(reference) {\n                        return PlanNode::Identity;\n                    }\n\n                    if let NamedReferenceType::Inline { dt, .. } = &reference.inner {\n                        return self.analyze(dt, types, &[], stack);\n                    }\n\n                    stack.push(reference.clone());\n                    let Some(ty) = &ndt.ty else {\n                        stack.pop();\n                        return PlanNode::Identity;\n                    };\n\n                    let (ty, generics) = match &reference.inner {\n                        NamedReferenceType::Reference { generics, .. } => (ty, generics.as_slice()),\n                        NamedReferenceType::Inline { dt, .. } => (dt.as_ref(), &[][..]),\n                        NamedReferenceType::Recursive => (ty, &[][..]),\n                    };\n                    let out = self.analyze(ty, types, generics, stack);\n                    stack.pop();\n                    out\n                } else if let NamedReferenceType::Inline { dt, .. } = &reference.inner {\n                    self.analyze(dt, types, &[], stack)\n                } else {\n                    PlanNode::Identity\n                }\n            }\n            DataType::Generic(generic) => generics\n                .iter()\n                .find(|(key, _)| key == generic)\n                .map(|(_, dt)| self.analyze(dt, types, &[], stack))\n                .unwrap_or(PlanNode::Identity),\n            DataType::Reference(Reference::Opaque(_)) => PlanNode::Identity,\n            DataType::Intersection(intersection) => {\n                let items = intersection\n                    .iter()\n                    .map(|ty| self.analyze(ty, types, generics, stack))\n                    .collect::<Vec<_>>();\n\n                if items.iter().all(PlanNode::is_identity) {\n                    PlanNode::Identity\n                } else {\n                    PlanNode::Tuple(items)\n                }\n            }\n        }\n    }\n\n    fn analyze_fields(\n        &self,\n        fields: &Fields,\n        types: &Types,\n        generics: &[(GenericReference, DataType)],\n        stack: &mut Vec<NamedReference>,\n    ) -> PlanNode {\n        match fields {\n            Fields::Unit => PlanNode::Identity,\n            Fields::Unnamed(fields) => {\n                let items = fields\n                    .fields\n                    .iter()\n                    .filter_map(|field| field.ty.as_ref())\n                    .map(|ty| self.analyze(ty, types, generics, stack))\n                    .collect::<Vec<_>>();\n\n                if items.iter().all(PlanNode::is_identity) {\n                    PlanNode::Identity\n                } else {\n                    PlanNode::Tuple(items)\n                }\n            }\n            Fields::Named(fields) => {\n                let object = fields\n                    .fields\n                    .iter()\n                    .filter_map(|(name, field)| {\n                        let ty = field.ty.as_ref()?;\n                        let plan = self.analyze(ty, types, generics, stack);\n                        if plan.is_identity() {\n                            None\n                        } else {\n                            Some(ObjectFieldPlan::Named(name.to_string(), plan))\n                        }\n                    })\n                    .collect::<Vec<_>>();\n\n                if object.is_empty() {\n                    PlanNode::Identity\n                } else {\n                    PlanNode::Object(object)\n                }\n            }\n        }\n    }\n\n    fn resolve_named_tag(&self, module_path: &str, name: &str) -> Option<KnownNamedTag> {\n        BUILTIN_MATCHERS\n            .iter()\n            .find(|(module, ty_name, _)| module_path == *module && name == *ty_name)\n            .map(|(_, _, kind)| *kind)\n    }\n\n    fn analyze_enum_variant(\n        &self,\n        name: &str,\n        variant: &specta::datatype::Variant,\n        types: &Types,\n        generics: &[(GenericReference, DataType)],\n        stack: &mut Vec<NamedReference>,\n    ) -> Option<EnumVariantPlan> {\n        let plan = self.analyze_fields(&variant.fields, types, generics, stack);\n        let matcher = match &variant.fields {\n            Fields::Unit | Fields::Unnamed(_) => EnumVariantMatcher::Direct,\n            Fields::Named(fields) => {\n                let literal_fields = fields\n                    .fields\n                    .iter()\n                    .filter_map(|(field_name, field)| {\n                        string_literal(field.ty.as_ref()?)\n                            .map(|value| (field_name.to_string(), value))\n                    })\n                    .collect::<Vec<_>>();\n\n                if literal_fields.len() == 1 {\n                    let (field, value) = &literal_fields[0];\n                    EnumVariantMatcher::Tagged {\n                        field: field.clone(),\n                        value: value.clone(),\n                    }\n                } else if fields.fields.len() == 1 {\n                    let (field_name, _) = &fields.fields[0];\n                    EnumVariantMatcher::HasField(field_name.to_string())\n                } else {\n                    let _ = name;\n                    EnumVariantMatcher::Direct\n                }\n            }\n        };\n\n        Some(EnumVariantPlan { matcher, plan })\n    }\n}\n\n#[derive(Default)]\nstruct Renderer {\n    ident_counter: usize,\n}\n\nimpl Renderer {\n    fn render(&mut self, plan: &PlanNode, input: &str) -> String {\n        match plan {\n            PlanNode::Identity => input.to_string(),\n            PlanNode::Leaf(tag) => self.render_leaf(tag, input),\n            PlanNode::Nullable(inner) => {\n                let inner = self.render(inner, input);\n                format!(\"({input} == null ? {input} : {inner})\")\n            }\n            PlanNode::List(inner) => {\n                let item = self.next_ident(\"item\");\n                let inner = self.render(inner, &item);\n                format!(\"{input}.map(({item}) => {inner})\")\n            }\n            PlanNode::Tuple(items) => {\n                let rendered = items\n                    .iter()\n                    .enumerate()\n                    .map(|(idx, plan)| {\n                        let source = format!(\"{input}[{idx}]\");\n                        self.render(plan, &source)\n                    })\n                    .collect::<Vec<_>>()\n                    .join(\", \");\n\n                format!(\"[{rendered}]\")\n            }\n            PlanNode::Object(fields) => self.render_object(fields, input),\n            PlanNode::Map(inner) => {\n                let key = self.next_ident(\"key\");\n                let value = self.next_ident(\"value\");\n                let inner = self.render(inner, &value);\n\n                format!(\n                    \"Object.fromEntries(Object.entries({input}).map(([{key}, {value}]) => [{key}, {inner}]))\"\n                )\n            }\n            PlanNode::Enum(variants) => self.render_enum(variants, input),\n        }\n    }\n\n    fn render_object(&mut self, fields: &[ObjectFieldPlan], input: &str) -> String {\n        let value = self.next_ident(\"value\");\n        let mut out = format!(\"(() => {{ let {value} = {input};\");\n\n        for field in fields {\n            match field {\n                ObjectFieldPlan::Named(field, plan) => {\n                    let key = js_string(field);\n                    let source = format!(\"{value}[{key}]\");\n                    let next = self.render(plan, &source);\n                    out.push_str(&format!(\n                        \" {{ const next = {next}; if (next !== {source}) {value} = {{ ...{value}, {key}: next }}; }}\"\n                    ));\n                }\n            }\n        }\n\n        out.push_str(&format!(\" return {value}; }})()\"));\n        out\n    }\n\n    fn render_leaf(&mut self, tag: &Tag, input: &str) -> String {\n        match tag {\n            Tag::BigInt => format!(\"BigInt({input})\"),\n            Tag::Uint8Array => format!(\"Uint8Array.from({input})\"),\n            Tag::Date => format!(\"new Date({input})\"),\n            Tag::Custom(handler) => handler(input).into_owned(),\n        }\n    }\n\n    fn render_enum(&mut self, variants: &[EnumVariantPlan], input: &str) -> String {\n        let value = self.next_ident(\"value\");\n        let mut out = format!(\"(() => {{ const {value} = {input};\");\n\n        if variants.is_empty() {\n            out.push_str(&format!(\" return {value}; }})()\"));\n            return out;\n        }\n\n        for variant in variants {\n            if variant.plan.is_identity() {\n                continue;\n            }\n\n            let next = self.render(&variant.plan, &value);\n\n            match &variant.matcher {\n                EnumVariantMatcher::HasField(field) => {\n                    let field = js_string(field);\n                    out.push_str(&format!(\n                        \" if ({value} != null && typeof {value} === \\\"object\\\" && !Array.isArray({value}) && Object.prototype.hasOwnProperty.call({value}, {field})) {{ const next = {next}; if (next !== {value}) return next; return {value}; }}\"\n                    ));\n                }\n                EnumVariantMatcher::Tagged { field, value: tag } => {\n                    let field = js_string(field);\n                    let tag = js_string(tag);\n                    out.push_str(&format!(\n                        \" if ({value} != null && typeof {value} === \\\"object\\\" && !Array.isArray({value}) && {value}[{field}] === {tag}) {{ const next = {next}; if (next !== {value}) return next; return {value}; }}\"\n                    ));\n                }\n                EnumVariantMatcher::Direct => {\n                    out.push_str(&format!(\n                        \" {{ const next = {next}; if (next !== {value}) return next; }}\"\n                    ));\n                }\n            }\n        }\n\n        out.push_str(&format!(\" return {value}; }})()\"));\n        out\n    }\n\n    fn next_ident(&mut self, prefix: &str) -> String {\n        self.ident_counter += 1;\n        format!(\"__{prefix}{}\", self.ident_counter)\n    }\n}\n\nfn js_string(value: &str) -> String {\n    serde_json::to_string(value).expect(\"failed to encode JavaScript string\")\n}\n\nfn string_literal(ty: &DataType) -> Option<String> {\n    let DataType::Enum(enm) = ty else {\n        return None;\n    };\n\n    let [(name, variant)] = enm.variants.as_slice() else {\n        return None;\n    };\n\n    matches!(&variant.fields, Fields::Unit).then(|| name.to_string())\n}\n\n#[cfg(test)]\nmod tests {\n    use serde::{Deserialize, Serialize};\n    use specta::{Format as _, Type, Types};\n\n    use super::TransformPlan;\n\n    #[allow(dead_code)]\n    #[derive(Type)]\n    struct Inner {\n        bigint: u128,\n        date: chrono::DateTime<chrono::Utc>,\n        bytes: bytes::Bytes,\n    }\n\n    #[allow(dead_code)]\n    #[derive(Type)]\n    struct Root {\n        bigint: u128,\n        date: chrono::DateTime<chrono::Utc>,\n        bytes: bytes::Bytes,\n        nested: Inner,\n        list: Vec<u128>,\n    }\n\n    #[test]\n    fn map_renders_trusting_transforms() {\n        let mut types = Types::default();\n        let dt = Root::definition(&mut types);\n        let plan = TransformPlan::analyze(&dt, &types);\n        let js = plan.map(\"v\");\n\n        assert!(\n            js.contains(\"BigInt(\") && js.contains(\"[\\\"bigint\\\"]\") && js.contains(\"[\\\"nested\\\"]\")\n        );\n        assert!(\n            js.contains(\"new Date(\") && js.contains(\"[\\\"date\\\"]\") && js.contains(\"[\\\"nested\\\"]\")\n        );\n        assert!(\n            js.contains(\"Uint8Array.from(\")\n                && js.contains(\"[\\\"bytes\\\"]\")\n                && js.contains(\"[\\\"nested\\\"]\")\n        );\n        assert!(js.contains(\"[\\\"list\\\"]\") && js.contains(\".map((__item\"));\n\n        assert!(!js.contains(\"typeof \"));\n        assert!(!js.contains(\"Array.isArray(\"));\n        assert!(!js.contains(\"Number.isInteger(\"));\n        assert!(!js.contains(\"try {\"));\n        assert!(!js.contains(\" catch \"));\n    }\n\n    #[derive(Type, Serialize, Deserialize)]\n    #[serde(tag = \"kind\")]\n    enum TaggedEnum {\n        A { count: u128 },\n    }\n\n    #[derive(Type, Serialize, Deserialize)]\n    #[serde(tag = \"kind\", content = \"payload\")]\n    enum AdjacentEnum {\n        A { count: u128 },\n    }\n\n    #[test]\n    fn map_renders_from_serde_applied_internal_enum_shape() {\n        let format = specta_serde::Format;\n        let resolved = format\n            .map_types(&Types::default().register::<TaggedEnum>())\n            .unwrap()\n            .into_owned();\n        let dt = resolved\n            .into_sorted_iter()\n            .find(|ty| ty.name.as_ref() == \"TaggedEnum\")\n            .expect(\"TaggedEnum should be registered\")\n            .ty\n            .clone();\n\n        let js = TransformPlan::analyze(dt.as_ref().unwrap(), &resolved).map(\"v\");\n\n        assert!(js.contains(\"[\\\"kind\\\"] === \\\"A\\\"\"));\n        assert!(js.contains(\"BigInt(\"));\n        assert!(js.contains(\"[\\\"count\\\"]\"));\n    }\n\n    #[test]\n    fn map_renders_from_serde_applied_adjacent_enum_shape() {\n        let format = specta_serde::Format;\n        let resolved = format\n            .map_types(&Types::default().register::<AdjacentEnum>())\n            .unwrap()\n            .into_owned();\n        let dt = resolved\n            .into_sorted_iter()\n            .find(|ty| ty.name.as_ref() == \"AdjacentEnum\")\n            .expect(\"AdjacentEnum should be registered\")\n            .ty\n            .clone();\n\n        let js = TransformPlan::analyze(dt.as_ref().unwrap(), &resolved).map(\"v\");\n\n        assert!(js.contains(\"[\\\"kind\\\"] === \\\"A\\\"\"));\n        assert!(js.contains(\"payload\"));\n        assert!(js.contains(\"BigInt(\"));\n    }\n}\n"
  },
  {
    "path": "specta-typescript/Cargo.toml",
    "content": "[package]\nname = \"specta-typescript\"\ndescription = \"Export your Rust types to TypeScript\"\nversion = \"0.0.11\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-typescript/latest/specta-typescript\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"typescript\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\nreadme = \"../README.md\"\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[lints]\nworkspace = true\n\n[features]\ndefault = []\n\n# Implement `serde::Serialize` and `serde::Deserialize` for Typescript-specific types (Any, Unknown, Never)\nserde = [\"dep:serde\"]\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\" }\nserde = { version = \"1\", default-features = false, optional = true }\n\n[dev-dependencies]\nserde = { version = \"1\", features = [\"derive\"] }\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\", features = [\"derive\", \"collect\"] }\nspecta-serde = { path = \"../specta-serde\" }\nspecta-util = { path = \"../specta-util\", features = [\"serde\"] }\n"
  },
  {
    "path": "specta-typescript/bindings.ts",
    "content": "// This file has been generated by Specta. Do not edit this file manually.\nexport type MyOtherType = {\n\tother_field: string,\n};\n\nexport type MyType = {\n\tfield: MyOtherType,\n};\n"
  },
  {
    "path": "specta-typescript/src/branded.rs",
    "content": "use std::borrow::Cow;\n\nuse specta::datatype::DataType;\n\n/// Create a branded tuple struct type that exports to TypeScript with a custom name.\n///\n/// This macro generates a single-field tuple struct and implements the `Type` trait\n/// for it, allowing you to create \"branded\" types that maintain distinct identities\n/// in TypeScript.\n///\n/// # Examples\n///\n/// Basic usage:\n/// ```ignore\n/// branded!(pub struct AccountId(String));\n/// ```\n///\n/// With custom TypeScript name:\n/// ```ignore\n/// branded!(pub struct AccountId(String) as \"accountId\");\n/// ```\n///\n/// With attributes:\n/// ```ignore\n/// branded!(#[derive(Serialize)] pub struct UserId(String));\n/// ```\n///\n/// With generics:\n/// ```ignore\n/// branded!(pub struct Id<T>(T) as \"id\");\n/// ```\n///\n/// # Requirements\n///\n/// This macro requires that the `specta` crate is in scope and available as a dependency.\n///\n/// # Notes\n///\n/// - The struct must be a tuple struct with exactly one field\n/// - The `Type` implementation is currently a `todo!()` placeholder\n/// - The `as \"name\"` syntax is optional; if omitted, the struct name is used\n#[macro_export]\nmacro_rules! branded {\n    // Pattern with generics and optional TypeScript name\n    (\n        $(#[$attr:meta])*\n        $vis:vis struct $ident:ident<$($generic:ident),+ $(,)?> ( $ty:ty ) $(as $ts_name:literal)?\n    ) => {\n        $(#[$attr])*\n        $vis struct $ident<$($generic),+>($ty);\n\n        impl<$($generic: specta::Type),+> specta::Type for $ident<$($generic),+> {\n            fn definition(types: &mut specta::Types) -> specta::datatype::DataType {\n                let ty = <$ty as specta::Type>::definition(types);\n                let brand: &'static str = branded!(@brand $ident $( $ts_name )?);\n\n                specta::datatype::DataType::Reference(\n                    specta::datatype::Reference::opaque(\n                        $crate::Branded::new(std::borrow::Cow::Borrowed(brand), ty)\n                    )\n                )\n            }\n        }\n    };\n\n    // Pattern without generics\n    (\n        $(#[$attr:meta])*\n        $vis:vis struct $ident:ident ( $ty:ty ) $(as $ts_name:literal)?\n    ) => {\n        $(#[$attr])*\n        $vis struct $ident($ty);\n\n        impl specta::Type for $ident {\n            fn definition(types: &mut specta::Types) -> specta::datatype::DataType {\n                let ty = <$ty as specta::Type>::definition(types);\n                let brand: &'static str = branded!(@brand $ident $( $ts_name )?);\n\n                specta::datatype::DataType::Reference(\n                    specta::datatype::Reference::opaque(\n                        $crate::Branded::new(std::borrow::Cow::Borrowed(brand), ty)\n                    )\n                )\n            }\n        }\n    };\n\n    // Internal\n     (@brand $ident:ident $ts_name:literal) => {\n         $ts_name\n     };\n     (@brand $ident:ident) => {\n         stringify!($ident)\n     };\n}\n\n#[derive(Debug, Clone, PartialEq, Eq, Hash)]\n/// Runtime payload for a TypeScript branded type.\npub struct Branded {\n    brand: Cow<'static, str>,\n    ty: DataType,\n}\n\nimpl Branded {\n    /// Construct a branded type from a brand label and inner type.\n    pub fn new(brand: impl Into<Cow<'static, str>>, ty: DataType) -> Self {\n        Self {\n            brand: brand.into(),\n            ty,\n        }\n    }\n\n    /// Get the brand label.\n    pub fn brand(&self) -> &Cow<'static, str> {\n        &self.brand\n    }\n\n    /// Get the inner data type.\n    pub fn ty(&self) -> &DataType {\n        &self.ty\n    }\n}\n"
  },
  {
    "path": "specta-typescript/src/error.rs",
    "content": "use std::{borrow::Cow, error, fmt, io, panic::Location, path::PathBuf};\n\nuse specta::datatype::OpaqueReference;\n\nuse crate::Layout;\n\nuse super::legacy::ExportPath;\n\n/// The error type for the TypeScript exporter.\n///\n/// ## BigInt Forbidden\n///\n/// Specta Typescript intentionally forbids exporting BigInt-style Rust integer types.\n/// This includes [usize], [isize], [i64], [u64], [u128], [i128] and [f128].\n///\n/// This guard exists because `JSON.parse` will truncate large integers to fit into a JavaScript `number` type so we explicitly forbid exporting them.\n///\n/// We take the stance that correctness matters more than developer experience as people using Rust generally strive for correctness.\n///\n/// If you encounter this error, there are a few common migration paths (in order of preference):\n///\n/// 1. Use a Specta-based framework which can handle these types\n///     - None currently exist but it would theoretically be possible refer to [#203](https://github.com/specta-rs/specta/issues/203) for more information.\n///\n/// 2. Use a smaller integer types (any of `u8`/`i8`/`u16`/`i16`/`u32`/`i32`/`f64`).\n///    - Only possible when the biggest integer you need to represent is small enough to be represented by a `number` in JS.\n///    - This approach forces your application code to handle overflow/underflow values explicitly\n///    - Downside is that it can introduce annoying glue code and doesn't actually work if your need large values.\n///\n/// 3. Serialize the value as a string\n///     - This can be done using `#[specta(type = String)]` for the type combined with a Serde `#[serde(with = \"...\")]` attribute for runtime.\n///     - Downside is that it can introduce annoying glue code, both on in Rust and in JS as you will need to turn it back into a `new BigInt(myString)` in JS but this will support numbers of any size losslessly.\n///\n/// 4. **UNSAFE:** Accept precision loss on per-field basis\n///     - Accept that large numbers may be deserialized differently than they are in Rust and use `#[specta(type = specta_typescript::Number)]` to bypass this warning on a per-field basis.\n///     - Marking each field explicitly encodes the decision similar to an `unsafe` block, ensuring everyone working on your codebase is aware of the risk and where it exists within the codebase.\n///     - This doesn't work for external implementations like `serde_json::Value` which contain `BigInt`'s as you don't control the definition.\n///\n/// 5. **UNSAFE:** Accept precision loss using [`specta_util::Remapper`](https://docs.rs/specta-util/latest/specta_util/struct.Remapper.html)\n///     - You can apply a `Remapper` to your [`Types`](specta::Types) collection to override types. This would allow you to remap `usize`/`isize`/`i64`/`u64`/`i128`/`u128`/`f128` into `number`.\n///     - This is highly not recommended but it might be required if your using `serde_json::Value` or other built-in impls which contain `BigInt`'s as you can't override them.\n///\n#[non_exhaustive]\npub struct Error {\n    kind: ErrorKind,\n}\n\ntype FrameworkSource = Box<dyn error::Error + Send + Sync + 'static>;\nconst BIGINT_DOCS_URL: &str =\n    \"https://docs.rs/specta-typescript/latest/specta_typescript/struct.Error.html#bigint-forbidden\";\n\n#[allow(dead_code)]\nenum ErrorKind {\n    InvalidMapKey {\n        path: String,\n        reason: Cow<'static, str>,\n    },\n    /// Attempted to export a bigint type but the configuration forbids it.\n    BigIntForbidden {\n        path: String,\n    },\n    /// A type's name conflicts with a reserved keyword in Typescript.\n    ForbiddenName {\n        path: String,\n        name: &'static str,\n    },\n    /// A type's name contains invalid characters or is not valid.\n    InvalidName {\n        path: String,\n        name: Cow<'static, str>,\n    },\n    /// Detected multiple items within the same scope with the same name.\n    /// Typescript doesn't support this so we error out.\n    ///\n    /// Using anything other than [Layout::FlatFile] should make this basically impossible.\n    DuplicateTypeName {\n        name: Cow<'static, str>,\n        first: String,\n        second: String,\n    },\n    /// An filesystem IO error.\n    /// This is possible when using `Typescript::export_to` when writing to a file or formatting the file.\n    Io(io::Error),\n    /// Failed to read a directory while exporting files.\n    ReadDir {\n        path: PathBuf,\n        source: io::Error,\n    },\n    /// Failed to inspect filesystem metadata while exporting files.\n    Metadata {\n        path: PathBuf,\n        source: io::Error,\n    },\n    /// Failed to remove a stale file while exporting files.\n    RemoveFile {\n        path: PathBuf,\n        source: io::Error,\n    },\n    /// Failed to remove an empty directory while exporting files.\n    RemoveDir {\n        path: PathBuf,\n        source: io::Error,\n    },\n    /// Found an opaque reference which the Typescript exporter doesn't know how to handle.\n    /// You may be referencing a type which is not supported by the Typescript exporter.\n    UnsupportedOpaqueReference(OpaqueReference),\n    /// Found a named reference that cannot be resolved from the provided\n    /// [`Types`](specta::Types).\n    DanglingNamedReference {\n        reference: String,\n    },\n    /// Found a recursive named reference while expanding an inline type.\n    InfiniteRecursiveInlineType {\n        reference: String,\n    },\n    /// An error occurred in your exporter framework.\n    Framework {\n        message: Cow<'static, str>,\n        source: FrameworkSource,\n    },\n    /// An error occurred in a format callback.\n    Format {\n        message: Cow<'static, str>,\n        source: FrameworkSource,\n    },\n    //\n    //\n    // TODO: Break\n    //\n    //\n    BigIntForbiddenLegacy(ExportPath),\n    ForbiddenNameLegacy(ExportPath, &'static str),\n    InvalidNameLegacy(ExportPath, String),\n    FmtLegacy(std::fmt::Error),\n    UnableToExport(Layout),\n}\n\nimpl Error {\n    pub(crate) fn invalid_map_key(\n        path: impl Into<String>,\n        reason: impl Into<Cow<'static, str>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::InvalidMapKey {\n                path: path.into(),\n                reason: reason.into(),\n            },\n        }\n    }\n\n    /// Construct an error for framework-specific logic.\n    pub fn framework(\n        message: impl Into<Cow<'static, str>>,\n        source: impl Into<Box<dyn std::error::Error + Send + Sync>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::Framework {\n                message: message.into(),\n                source: source.into(),\n            },\n        }\n    }\n\n    /// Construct an error for custom format callbacks.\n    pub(crate) fn format(\n        message: impl Into<Cow<'static, str>>,\n        source: impl Into<Box<dyn std::error::Error + Send + Sync>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::Format {\n                message: message.into(),\n                source: source.into(),\n            },\n        }\n    }\n\n    pub(crate) fn bigint_forbidden(path: String) -> Self {\n        Self {\n            kind: ErrorKind::BigIntForbidden { path },\n        }\n    }\n\n    pub(crate) fn invalid_name(path: String, name: impl Into<Cow<'static, str>>) -> Self {\n        Self {\n            kind: ErrorKind::InvalidName {\n                path,\n                name: name.into(),\n            },\n        }\n    }\n\n    pub(crate) fn duplicate_type_name(\n        name: Cow<'static, str>,\n        first: Location<'static>,\n        second: Location<'static>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::DuplicateTypeName {\n                name,\n                first: format_location(first),\n                second: format_location(second),\n            },\n        }\n    }\n\n    pub(crate) fn read_dir(path: PathBuf, source: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::ReadDir { path, source },\n        }\n    }\n\n    pub(crate) fn metadata(path: PathBuf, source: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::Metadata { path, source },\n        }\n    }\n\n    pub(crate) fn remove_file(path: PathBuf, source: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::RemoveFile { path, source },\n        }\n    }\n\n    pub(crate) fn remove_dir(path: PathBuf, source: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::RemoveDir { path, source },\n        }\n    }\n\n    pub(crate) fn unsupported_opaque_reference(reference: OpaqueReference) -> Self {\n        Self {\n            kind: ErrorKind::UnsupportedOpaqueReference(reference),\n        }\n    }\n\n    pub(crate) fn dangling_named_reference(reference: String) -> Self {\n        Self {\n            kind: ErrorKind::DanglingNamedReference { reference },\n        }\n    }\n\n    pub(crate) fn infinite_recursive_inline_type(reference: String) -> Self {\n        Self {\n            kind: ErrorKind::InfiniteRecursiveInlineType { reference },\n        }\n    }\n\n    pub(crate) fn forbidden_name_legacy(path: ExportPath, name: &'static str) -> Self {\n        Self {\n            kind: ErrorKind::ForbiddenNameLegacy(path, name),\n        }\n    }\n\n    pub(crate) fn invalid_name_legacy(path: ExportPath, name: String) -> Self {\n        Self {\n            kind: ErrorKind::InvalidNameLegacy(path, name),\n        }\n    }\n\n    pub(crate) fn unable_to_export(layout: Layout) -> Self {\n        Self {\n            kind: ErrorKind::UnableToExport(layout),\n        }\n    }\n}\n\nimpl From<io::Error> for Error {\n    fn from(error: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::Io(error),\n        }\n    }\n}\n\nimpl From<std::fmt::Error> for Error {\n    fn from(error: std::fmt::Error) -> Self {\n        Self {\n            kind: ErrorKind::FmtLegacy(error),\n        }\n    }\n}\n\nimpl fmt::Display for Error {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        match &self.kind {\n            ErrorKind::InvalidMapKey { path, reason } => {\n                write!(f, \"Invalid map key at '{path}': {reason}\")\n            }\n            ErrorKind::BigIntForbidden { path } => write!(\n                f,\n                \"Attempted to export {path:?} but Specta forbids exporting BigInt-style types (usize, isize, i64, u64, i128, u128) to avoid precision loss. See {BIGINT_DOCS_URL} for a full explanation.\"\n            ),\n            ErrorKind::ForbiddenName { path, name } => write!(\n                f,\n                \"Attempted to export {path:?} but was unable to due toname {name:?} conflicting with a reserved keyword in Typescript. Try renaming it or using `#[specta(rename = \\\"new name\\\")]`\"\n            ),\n            ErrorKind::InvalidName { path, name } => write!(\n                f,\n                \"Attempted to export {path:?} but was unable to due to name {name:?} containing an invalid character. Try renaming it or using `#[specta(rename = \\\"new name\\\")]`\"\n            ),\n            ErrorKind::DuplicateTypeName {\n                name,\n                first,\n                second,\n            } => write!(\n                f,\n                \"Detected multiple types with the same name: {name:?} at {first} and {second}\"\n            ),\n            ErrorKind::Io(err) => write!(f, \"IO error: {err}\"),\n            ErrorKind::ReadDir { path, source } => {\n                write!(f, \"Failed to read directory '{}': {source}\", path.display())\n            }\n            ErrorKind::Metadata { path, source } => {\n                write!(\n                    f,\n                    \"Failed to read metadata for '{}': {source}\",\n                    path.display()\n                )\n            }\n            ErrorKind::RemoveFile { path, source } => {\n                write!(f, \"Failed to remove file '{}': {source}\", path.display())\n            }\n            ErrorKind::RemoveDir { path, source } => {\n                write!(\n                    f,\n                    \"Failed to remove directory '{}': {source}\",\n                    path.display()\n                )\n            }\n            ErrorKind::UnsupportedOpaqueReference(reference) => write!(\n                f,\n                \"Found unsupported opaque reference '{}'. It is not supported by the Typescript exporter.\",\n                reference.type_name()\n            ),\n            ErrorKind::DanglingNamedReference { reference } => write!(\n                f,\n                \"Found dangling named reference {reference}. The referenced type is missing from the resolved type collection.\"\n            ),\n            ErrorKind::InfiniteRecursiveInlineType { reference } => write!(\n                f,\n                \"Found infinitely recursive inline named reference {reference}. Recursive inline types cannot be expanded because they would produce an infinite Typescript type.\"\n            ),\n            ErrorKind::Framework { message, source } => {\n                let source = source.to_string();\n                if message.is_empty() && source.is_empty() {\n                    write!(f, \"Framework error\")\n                } else if source.is_empty() {\n                    write!(f, \"Framework error: {message}\")\n                } else {\n                    write!(f, \"Framework error: {message}: {source}\")\n                }\n            }\n            ErrorKind::Format { message, source } => {\n                let source = source.to_string();\n                if message.is_empty() && source.is_empty() {\n                    write!(f, \"Format error\")\n                } else if source.is_empty() {\n                    write!(f, \"Format error: {message}\")\n                } else {\n                    write!(f, \"Format error: {message}: {source}\")\n                }\n            }\n            ErrorKind::BigIntForbiddenLegacy(path) => write!(\n                f,\n                \"Attempted to export {path:?} but Specta forbids exporting BigInt-style types (usize, isize, i64, u64, i128, u128) to avoid precision loss. See {BIGINT_DOCS_URL} for a full explanation.\"\n            ),\n            ErrorKind::ForbiddenNameLegacy(path, name) => write!(\n                f,\n                \"Attempted to export {path:?} but was unable to due to name {name:?} conflicting with a reserved keyword in Typescript. Try renaming it or using `#[specta(rename = \\\"new name\\\")]`\"\n            ),\n            ErrorKind::InvalidNameLegacy(path, name) => write!(\n                f,\n                \"Attempted to export {path:?} but was unable to due to name {name:?} containing an invalid character. Try renaming it or using `#[specta(rename = \\\"new name\\\")]`\"\n            ),\n            ErrorKind::FmtLegacy(err) => write!(f, \"formatter: {err:?}\"),\n            ErrorKind::UnableToExport(layout) => write!(\n                f,\n                \"Unable to export layout {layout} with the current configuration. Maybe try `Exporter::export_to` or switching to Typescript.\"\n            ),\n        }\n    }\n}\n\nimpl fmt::Debug for Error {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Display::fmt(self, f)\n    }\n}\n\nimpl error::Error for Error {\n    fn source(&self) -> Option<&(dyn error::Error + 'static)> {\n        match &self.kind {\n            ErrorKind::Io(error) => Some(error),\n            ErrorKind::ReadDir { source, .. }\n            | ErrorKind::Metadata { source, .. }\n            | ErrorKind::RemoveFile { source, .. }\n            | ErrorKind::RemoveDir { source, .. } => Some(source),\n            ErrorKind::Framework { source, .. } | ErrorKind::Format { source, .. } => {\n                Some(source.as_ref())\n            }\n            ErrorKind::FmtLegacy(error) => Some(error),\n            _ => None,\n        }\n    }\n}\n\nfn format_location(location: Location<'static>) -> String {\n    format!(\n        \"{}:{}:{}\",\n        location.file(),\n        location.line(),\n        location.column()\n    )\n}\n"
  },
  {
    "path": "specta-typescript/src/exporter.rs",
    "content": "use std::{\n    borrow::Cow,\n    collections::{BTreeMap, BTreeSet, HashMap, HashSet},\n    fmt,\n    ops::Deref,\n    panic::Location,\n    path::{Path, PathBuf},\n    sync::Arc,\n};\n\nuse specta::{\n    Format, Types,\n    datatype::{DataType, Fields, NamedDataType, NamedReference, NamedReferenceType, Reference},\n};\n\nuse crate::{Branded, Error, primitives, references};\n\n/// Allows configuring the format of the final types file\n#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]\npub enum Layout {\n    /// Produce a Typescript namespace for each Rust module\n    Namespaces,\n    /// Produce a dedicated file for each Rust module\n    Files,\n    /// Include the full module path in the types name but keep a flat structure.\n    ModulePrefixedName,\n    /// Flatten all of the types into a single file of types.\n    /// This mode doesn't support having multiple types with the same name.\n    #[default]\n    FlatFile,\n}\n\nimpl fmt::Display for Layout {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(f, \"{self:?}\")\n    }\n}\n\n#[derive(Clone)]\n#[allow(clippy::type_complexity)]\nstruct RuntimeFn(Arc<dyn Fn(FrameworkExporter) -> Result<Cow<'static, str>, Error> + Send + Sync>);\n\nimpl fmt::Debug for RuntimeFn {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(f, \"RuntimeFn({:p})\", self.0)\n    }\n}\n\n#[derive(Clone)]\n#[allow(clippy::type_complexity)]\npub struct BrandedTypeImpl(\n    pub(crate)  Arc<\n        dyn for<'a> Fn(BrandedTypeExporter<'a>, &Branded) -> Result<Cow<'static, str>, Error>\n            + Send\n            + Sync,\n    >,\n);\n\nimpl fmt::Debug for BrandedTypeImpl {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(f, \"BrandedTypeImpl({:p})\", self.0)\n    }\n}\n\n/// Typescript language exporter.\n#[derive(Debug, Clone)]\n#[non_exhaustive]\npub struct Exporter {\n    /// Custom header prepended to exported files.\n    pub header: Cow<'static, str>,\n    framework_runtime: Option<RuntimeFn>,\n    pub(crate) branded_type_impl: Option<BrandedTypeImpl>,\n    framework_prelude: Cow<'static, str>,\n    /// Output layout mode for generated TypeScript.\n    pub layout: Layout,\n    pub(crate) jsdoc: bool,\n}\n\nimpl Exporter {\n    // You should get this from either a [Typescript] or [JSDoc], not construct it directly.\n    pub(crate) fn default() -> Exporter {\n        Exporter {\n            header: Cow::Borrowed(\"\"),\n            framework_runtime: None,\n            branded_type_impl: None,\n            framework_prelude: Cow::Borrowed(\n                \"// This file has been generated by Specta. Do not edit this file manually.\",\n            ),\n            layout: Default::default(),\n            jsdoc: false,\n        }\n    }\n\n    /// Provide a prelude which is added to the start of all exported files.\n    pub fn framework_prelude(mut self, prelude: impl Into<Cow<'static, str>>) -> Self {\n        self.framework_prelude = prelude.into();\n        self\n    }\n\n    /// Add some custom Typescript or Javascript code that is exported as part of the bindings.\n    /// It's appending to the types file for single-file layouts or put in a root `index.{ts/js}` for multi-file.\n    ///\n    /// The closure is wrapped in [`specta::collect()`] to capture any referenced types.\n    /// Ensure you call `T::reference()` within the closure if you want an import to be created.\n    pub fn framework_runtime(\n        mut self,\n        builder: impl Fn(FrameworkExporter) -> Result<Cow<'static, str>, Error> + Send + Sync + 'static,\n    ) -> Self {\n        self.framework_runtime = Some(RuntimeFn(Arc::new(builder)));\n        self\n    }\n\n    /// Configure how `specta_typescript::branded!` types are rendered with exporter context.\n    ///\n    /// This callback receives both the branded payload and a [`BrandedTypeExporter`], allowing\n    /// you to call [`BrandedTypeExporter::inline`] / [`BrandedTypeExporter::reference`] while\n    /// preserving the current export configuration.\n    ///\n    /// # Examples\n    ///\n    /// `ts-brand` style:\n    /// ```rust\n    /// # use std::borrow::Cow;\n    /// # use specta_typescript::{Branded, Error, Typescript};\n    /// let exporter = Typescript::default().branded_type_impl(|ctx, branded| {\n    ///     let datatype = ctx.inline(branded.ty())?;\n    ///\n    ///     Ok(Cow::Owned(format!(\n    ///         \"import(\\\"ts-brand\\\").Brand<{}, \\\"{}\\\">\",\n    ///         datatype,\n    ///         branded.brand()\n    ///     )))\n    /// });\n    /// # let _ = exporter;\n    /// ```\n    ///\n    /// Effect style:\n    /// ```rust\n    /// # use std::borrow::Cow;\n    /// # use specta_typescript::{Branded, Error, Typescript};\n    /// let exporter = Typescript::default().branded_type_impl(|ctx, branded| {\n    ///     let datatype = ctx.inline(branded.ty())?;\n    ///\n    ///     Ok(Cow::Owned(format!(\n    ///         \"{} & import(\\\"effect\\\").Brand.Brand<\\\"{}\\\">\",\n    ///         datatype,\n    ///         branded.brand()\n    ///     )))\n    /// });\n    /// # let _ = exporter;\n    /// ```\n    pub fn branded_type_impl(\n        mut self,\n        builder: impl for<'a> Fn(BrandedTypeExporter<'a>, &Branded) -> Result<Cow<'static, str>, Error>\n        + Send\n        + Sync\n        + 'static,\n    ) -> Self {\n        self.branded_type_impl = Some(BrandedTypeImpl(Arc::new(builder)));\n        self\n    }\n\n    /// Configure a header for the file.\n    ///\n    /// This is perfect for configuring lint ignore rules or other file-level comments.\n    pub fn header(mut self, header: impl Into<Cow<'static, str>>) -> Self {\n        self.header = header.into();\n        self\n    }\n\n    /// Configure the bindings layout\n    pub fn layout(mut self, layout: Layout) -> Self {\n        self.layout = layout;\n        self\n    }\n\n    /// Export the files into a single string.\n    ///\n    /// Note: This returns an error if the format is `Format::Files`.\n    pub fn export(&self, types: &Types, format: impl Format) -> Result<String, Error> {\n        fn inner(exporter: Exporter, types: &Types, format: &dyn Format) -> Result<String, Error> {\n            let types = format_types(types, &format)?;\n            let types = types.as_ref();\n\n            if let Layout::Files = exporter.layout {\n                return Err(Error::unable_to_export(exporter.layout));\n            }\n            if let Layout::Namespaces = exporter.layout\n                && exporter.jsdoc\n            {\n                return Err(Error::unable_to_export(exporter.layout));\n            }\n\n            let mut out = render_file_header(&exporter)?;\n\n            let mut has_manually_exported_user_types = false;\n            let mut runtime = Ok(Cow::default());\n            if let Some(framework_runtime) = &exporter.framework_runtime {\n                runtime = (framework_runtime.0)(FrameworkExporter {\n                    exporter: &exporter,\n                    format: Some(&format),\n                    has_manually_exported_user_types: &mut has_manually_exported_user_types,\n                    files_root_types: \"\",\n                    types,\n                });\n            }\n            let runtime = runtime?;\n\n            // Framework runtime\n            if !runtime.is_empty() {\n                out += \"\\n\";\n            }\n            out += &runtime;\n            if !runtime.is_empty() {\n                out += \"\\n\";\n            }\n\n            // User types (if not included in framework runtime)\n            if !has_manually_exported_user_types {\n                render_types(&mut out, &exporter, Some(&format), types, \"\")?;\n            }\n\n            Ok(out)\n        }\n\n        inner(self.clone(), types, &format)\n    }\n\n    /// Export the types to a specific file/folder.\n    ///\n    /// When configured when `format` is `Format::Files`, you must provide a directory path.\n    /// Otherwise, you must provide the path of a single file.\n    ///\n    pub fn export_to(\n        &self,\n        path: impl AsRef<Path>,\n        types: &Types,\n        format: impl Format,\n    ) -> Result<(), Error> {\n        fn inner(\n            exporter: Exporter,\n            path: &Path,\n            types: &Types,\n            format: &dyn Format,\n        ) -> Result<(), Error> {\n            let formatted_types = format_types(types, &format)?;\n            let types = formatted_types.as_ref();\n\n            if exporter.layout != Layout::Files {\n                let mut result = render_file_header(&exporter)?;\n\n                let mut has_manually_exported_user_types = false;\n                let mut runtime = Ok(Cow::default());\n                if let Some(framework_runtime) = &exporter.framework_runtime {\n                    runtime = (framework_runtime.0)(FrameworkExporter {\n                        exporter: &exporter,\n                        format: Some(&format),\n                        has_manually_exported_user_types: &mut has_manually_exported_user_types,\n                        files_root_types: \"\",\n                        types,\n                    });\n                }\n                let runtime = runtime?;\n\n                if !runtime.is_empty() {\n                    result.push('\\n');\n                    result.push_str(&runtime);\n                    result.push('\\n');\n                }\n\n                if !has_manually_exported_user_types {\n                    render_types(&mut result, &exporter, Some(&format), types, \"\")?;\n                }\n\n                if let Some(parent) = path.parent() {\n                    std::fs::create_dir_all(parent)?;\n                };\n                std::fs::write(path, result)?;\n                return Ok(());\n            }\n\n            fn export(\n                exporter: &Exporter,\n                format: Option<&dyn Format>,\n                types: &Types,\n                module: &mut Module,\n                s: &mut String,\n                path: &Path,\n                files: &mut HashMap<PathBuf, String>,\n            ) -> Result<bool, Error> {\n                module.types.sort_by(|a, b| {\n                    a.name\n                        .cmp(&b.name)\n                        .then(a.module_path.cmp(&b.module_path))\n                        .then(a.location.cmp(&b.location))\n                });\n                let (rendered_types_result, referenced_types) =\n                    references::with_module_path(module.module_path.as_ref(), || {\n                        references::collect_references(|| {\n                            let mut rendered = String::new();\n                            let exports = render_flat_types(\n                                &mut rendered,\n                                exporter,\n                                format,\n                                types,\n                                module.types.iter().copied(),\n                                \"\",\n                            )?;\n                            Ok::<_, Error>((rendered, exports))\n                        })\n                    });\n                let (rendered_types, exports) = rendered_types_result?;\n\n                let import_paths = referenced_types\n                    .into_iter()\n                    .map(|r| reference_module_path(types, &r))\n                    .collect::<Result<Vec<_>, _>>()?\n                    .into_iter()\n                    .flatten()\n                    .filter(|module_path| module_path != module.module_path.as_ref())\n                    .collect::<BTreeSet<_>>();\n                if !import_paths.is_empty() {\n                    s.push('\\n');\n                    s.push_str(&module_import_block(\n                        exporter,\n                        module.module_path.as_ref(),\n                        &import_paths,\n                    ));\n                }\n\n                if !import_paths.is_empty() && !rendered_types.is_empty() {\n                    s.push('\\n');\n                }\n\n                s.push_str(&rendered_types);\n\n                for (name, module) in &mut module.children {\n                    // This doesn't account for `NamedDataType::requires_reference`\n                    // but we keep it for performance.\n                    if module.types.is_empty() && module.children.is_empty() {\n                        continue;\n                    }\n\n                    let mut path = path.join(name);\n                    let mut out = render_file_header(exporter)?;\n\n                    let has_types =\n                        export(exporter, format, types, module, &mut out, &path, files)?;\n                    if has_types {\n                        path.set_extension(if exporter.jsdoc { \"js\" } else { \"ts\" });\n                        files.insert(path, out);\n                    }\n                }\n\n                Ok(!exports.is_empty())\n            }\n\n            let mut files = HashMap::new();\n            let mut runtime_path = path.join(\"index\");\n            runtime_path.set_extension(if exporter.jsdoc { \"js\" } else { \"ts\" });\n\n            let mut root_types = String::new();\n            export(\n                &exporter,\n                Some(&format),\n                types,\n                &mut build_module_graph(types),\n                &mut root_types,\n                path,\n                &mut files,\n            )?;\n\n            {\n                let mut has_manually_exported_user_types = false;\n                let mut runtime = Cow::default();\n                let mut runtime_references = HashSet::new();\n                if let Some(framework_runtime) = &exporter.framework_runtime {\n                    let (runtime_result, referenced_types) =\n                        references::with_module_path(\"\", || {\n                            references::collect_references(|| {\n                                (framework_runtime.0)(FrameworkExporter {\n                                    exporter: &exporter,\n                                    format: Some(&format),\n                                    has_manually_exported_user_types:\n                                        &mut has_manually_exported_user_types,\n                                    files_root_types: &root_types,\n                                    types,\n                                })\n                            })\n                        });\n                    runtime = runtime_result?;\n                    runtime_references = referenced_types;\n                }\n\n                let should_export_user_types =\n                    !has_manually_exported_user_types && !root_types.is_empty();\n\n                if !runtime.is_empty() || should_export_user_types {\n                    files.insert(runtime_path, {\n                        let mut out = render_file_header(&exporter)?;\n                        let mut body = String::new();\n\n                        // Framework runtime\n                        if !runtime.is_empty() {\n                            body.push_str(&runtime);\n                        }\n\n                        // User types (if not included in framework runtime)\n                        if should_export_user_types {\n                            if !body.is_empty() {\n                                body.push('\\n');\n                            }\n\n                            body.push_str(&root_types);\n                        }\n\n                        let import_paths = runtime_references\n                            .into_iter()\n                            .map(|r| reference_module_path(types, &r))\n                            .collect::<Result<Vec<_>, _>>()?\n                            .into_iter()\n                            .flatten()\n                            .filter(|module_path| !module_path.is_empty())\n                            .collect::<BTreeSet<_>>();\n\n                        let import_paths = import_paths\n                            .into_iter()\n                            .filter(|module_path| {\n                                !body.contains(&module_import_statement(&exporter, \"\", module_path))\n                            })\n                            .collect::<BTreeSet<_>>();\n\n                        if !import_paths.is_empty() {\n                            out.push('\\n');\n                            out.push_str(&module_import_block(&exporter, \"\", &import_paths));\n                        }\n\n                        if !body.is_empty() {\n                            out.push('\\n');\n                            if !import_paths.is_empty() {\n                                out.push('\\n');\n                            }\n                            out.push_str(&body);\n                        }\n\n                        out\n                    });\n                }\n            }\n\n            match path.metadata() {\n                Ok(meta) if !meta.is_dir() => std::fs::remove_file(path).or_else(|source| {\n                    if source.kind() == std::io::ErrorKind::NotFound {\n                        Ok(())\n                    } else {\n                        Err(Error::remove_file(path.to_path_buf(), source))\n                    }\n                })?,\n                Ok(_) => {}\n                Err(err) if err.kind() == std::io::ErrorKind::NotFound => {}\n                Err(source) => {\n                    return Err(Error::metadata(path.to_path_buf(), source));\n                }\n            }\n\n            for (path, content) in &files {\n                path.parent().map(std::fs::create_dir_all).transpose()?;\n                std::fs::write(path, content)?;\n            }\n\n            cleanup_stale_files(path, &files, &exporter)?;\n\n            Ok(())\n        }\n\n        inner(self.clone(), path.as_ref(), types, &format)\n    }\n}\n\nfn reference_module_path(types: &Types, r: &NamedReference) -> Result<Option<String>, Error> {\n    match &r.inner {\n        NamedReferenceType::Reference { .. } => {\n            Ok(types.get(r).map(|ndt| ndt.module_path.as_ref().to_string()))\n        }\n        NamedReferenceType::Inline { .. } => Ok(None),\n        NamedReferenceType::Recursive => {\n            Ok(types.get(r).map(|ndt| ndt.module_path.as_ref().to_string()))\n        }\n    }\n}\n\nfn format_types<'a>(types: &'a Types, format: &dyn Format) -> Result<Cow<'a, Types>, Error> {\n    Ok(\n        match format\n            .map_types(types)\n            .map_err(|err| Error::format(\"type graph formatter failed\", err))?\n        {\n            Cow::Borrowed(_) => Cow::Borrowed(types),\n            Cow::Owned(types) => Cow::Owned(types),\n        },\n    )\n}\n\nfn map_datatype_format(\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n) -> Result<DataType, Error> {\n    if matches!(dt, DataType::Generic(_)) {\n        return Ok(dt.clone());\n    }\n\n    fn contains_generic_reference(dt: &DataType) -> Result<bool, Error> {\n        Ok(match dt {\n            DataType::Primitive(_) => false,\n            DataType::List(list) => contains_generic_reference(&list.ty)?,\n            DataType::Map(map) => {\n                contains_generic_reference(map.key_ty())?\n                    || contains_generic_reference(map.value_ty())?\n            }\n            DataType::Nullable(inner) => contains_generic_reference(inner)?,\n            DataType::Struct(strct) => match &strct.fields {\n                Fields::Unit => false,\n                Fields::Unnamed(unnamed) => unnamed\n                    .fields\n                    .iter()\n                    .filter_map(|field| field.ty.as_ref())\n                    .try_fold(false, |found, ty| {\n                        Ok::<_, Error>(found || contains_generic_reference(ty)?)\n                    })?,\n                Fields::Named(named) => named\n                    .fields\n                    .iter()\n                    .filter_map(|(_, field)| field.ty.as_ref())\n                    .try_fold(false, |found, ty| {\n                        Ok::<_, Error>(found || contains_generic_reference(ty)?)\n                    })?,\n            },\n            DataType::Enum(enm) => enm.variants.iter().try_fold(false, |found, (_, variant)| {\n                let variant_found = match &variant.fields {\n                    Fields::Unit => false,\n                    Fields::Unnamed(unnamed) => unnamed\n                        .fields\n                        .iter()\n                        .filter_map(|field| field.ty.as_ref())\n                        .try_fold(false, |found, ty| {\n                            Ok::<_, Error>(found || contains_generic_reference(ty)?)\n                        })?,\n                    Fields::Named(named) => named\n                        .fields\n                        .iter()\n                        .filter_map(|(_, field)| field.ty.as_ref())\n                        .try_fold(false, |found, ty| {\n                            Ok::<_, Error>(found || contains_generic_reference(ty)?)\n                        })?,\n                };\n\n                Ok::<_, Error>(found || variant_found)\n            })?,\n            DataType::Tuple(tuple) => tuple.elements.iter().try_fold(false, |found, ty| {\n                Ok::<_, Error>(found || contains_generic_reference(ty)?)\n            })?,\n            DataType::Reference(Reference::Named(reference)) => match &reference.inner {\n                NamedReferenceType::Reference { generics, .. } => {\n                    generics.iter().try_fold(false, |found, (_, dt)| {\n                        Ok::<_, Error>(found || contains_generic_reference(dt)?)\n                    })?\n                }\n                NamedReferenceType::Inline { .. } => false,\n                NamedReferenceType::Recursive => false,\n            },\n            DataType::Generic(_) => true,\n            DataType::Reference(Reference::Opaque(_)) => false,\n            DataType::Intersection(types) => types.iter().try_fold(false, |found, ty| {\n                Ok::<_, Error>(found || contains_generic_reference(ty)?)\n            })?,\n        })\n    }\n\n    if contains_generic_reference(dt)? {\n        let Some(format) = format else {\n            return map_datatype_format_children(None, types, dt.clone());\n        };\n\n        match format.map_type(types, dt) {\n            Ok(Cow::Borrowed(dt)) => {\n                return map_datatype_format_children(Some(format), types, dt.clone());\n            }\n            Ok(Cow::Owned(dt)) => return map_datatype_format_children(Some(format), types, dt),\n            Err(err) if err.to_string().contains(\"Unresolved generic reference\") => {\n                return map_datatype_format_children(Some(format), types, dt.clone());\n            }\n            Err(err) => return Err(Error::format(\"datatype formatter failed\", err)),\n        }\n    }\n\n    let Some(format) = format else {\n        return Ok(dt.clone());\n    };\n\n    let mapped = format\n        .map_type(types, dt)\n        .map_err(|err| Error::format(\"datatype formatter failed\", err))?;\n\n    match mapped {\n        Cow::Borrowed(dt) => map_datatype_format_children(Some(format), types, dt.clone()),\n        Cow::Owned(dt) => map_datatype_format_children(Some(format), types, dt),\n    }\n}\n\nfn map_datatype_format_children(\n    format: Option<&dyn Format>,\n    types: &Types,\n    mut dt: DataType,\n) -> Result<DataType, Error> {\n    match &mut dt {\n        DataType::Primitive(_) => {}\n        DataType::List(list) => {\n            *list.ty = map_datatype_format(format, types, &list.ty)?;\n        }\n        DataType::Map(map) => {\n            let key = map_datatype_format(format, types, map.key_ty())?;\n            let value = map_datatype_format(format, types, map.value_ty())?;\n            map.set_key_ty(key);\n            map.set_value_ty(value);\n        }\n        DataType::Nullable(inner) => {\n            **inner = map_datatype_format(format, types, inner)?;\n        }\n        DataType::Struct(strct) => map_datatype_fields(format, types, &mut strct.fields)?,\n        DataType::Enum(enm) => {\n            for (_, variant) in &mut enm.variants {\n                map_datatype_fields(format, types, &mut variant.fields)?;\n            }\n        }\n        DataType::Tuple(tuple) => {\n            for element in &mut tuple.elements {\n                *element = map_datatype_format(format, types, element)?;\n            }\n        }\n        DataType::Intersection(types_) => {\n            for ty in types_ {\n                *ty = map_datatype_format(format, types, ty)?;\n            }\n        }\n        DataType::Reference(Reference::Named(reference)) => {\n            if let NamedReferenceType::Inline { dt, .. } = &mut reference.inner {\n                **dt = map_datatype_format(format, types, dt)?;\n            }\n\n            for (_, dt) in named_reference_generics_mut(reference) {\n                *dt = map_datatype_format(format, types, dt)?;\n            }\n        }\n        DataType::Generic(_) => {}\n        DataType::Reference(Reference::Opaque(reference)) => {\n            if let Some(branded) = reference.downcast_ref::<Branded>() {\n                dt = Reference::opaque(Branded::new(\n                    branded.brand().clone(),\n                    map_datatype_format(format, types, branded.ty())?,\n                ))\n                .into();\n            }\n        }\n    }\n\n    Ok(dt)\n}\n\nfn named_reference_generics_mut(\n    reference: &mut NamedReference,\n) -> &mut [(specta::datatype::Generic, DataType)] {\n    match &mut reference.inner {\n        NamedReferenceType::Reference { generics, .. } => generics,\n        NamedReferenceType::Inline { .. } | NamedReferenceType::Recursive => &mut [],\n    }\n}\n\nfn map_datatype_fields(\n    format: Option<&dyn Format>,\n    types: &Types,\n    fields: &mut Fields,\n) -> Result<(), Error> {\n    match fields {\n        Fields::Unit => {}\n        Fields::Unnamed(unnamed) => {\n            for field in &mut unnamed.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    *ty = map_datatype_format(format, types, ty)?;\n                }\n            }\n        }\n        Fields::Named(named) => {\n            for (_, field) in &mut named.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    *ty = map_datatype_format(format, types, ty)?;\n                }\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn map_named_datatype_format(\n    format: Option<&dyn Format>,\n    types: &Types,\n    ndt: &NamedDataType,\n) -> Result<NamedDataType, Error> {\n    let mut mapped = ndt.clone();\n    mapped.ty = ndt\n        .ty\n        .clone()\n        .map(|ty| map_datatype_format_children(format, types, ty))\n        .transpose()?;\n    Ok(mapped)\n}\n\nimpl AsRef<Exporter> for Exporter {\n    fn as_ref(&self) -> &Exporter {\n        self\n    }\n}\n\nimpl AsMut<Exporter> for Exporter {\n    fn as_mut(&mut self) -> &mut Exporter {\n        self\n    }\n}\n\n/// Reference to Typescript language exporter for branded type callbacks.\npub struct BrandedTypeExporter<'a> {\n    pub(crate) exporter: &'a Exporter,\n    pub(crate) format: Option<&'a dyn Format>,\n    /// Collected types currently being exported.\n    pub types: &'a Types,\n}\n\nimpl fmt::Debug for BrandedTypeExporter<'_> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        self.exporter.fmt(f)\n    }\n}\n\nimpl AsRef<Exporter> for BrandedTypeExporter<'_> {\n    fn as_ref(&self) -> &Exporter {\n        self\n    }\n}\n\nimpl Deref for BrandedTypeExporter<'_> {\n    type Target = Exporter;\n\n    fn deref(&self) -> &Self::Target {\n        self.exporter\n    }\n}\n\nimpl BrandedTypeExporter<'_> {\n    /// [primitives::inline]\n    pub fn inline(&self, dt: &DataType) -> Result<String, Error> {\n        let mapped = map_datatype_format(self.format, self.types, dt)?;\n        primitives::inline(self, self.types, &mapped)\n    }\n\n    /// [primitives::reference]\n    pub fn reference(&self, r: &Reference) -> Result<String, Error> {\n        let mapped = map_datatype_format(self.format, self.types, &DataType::Reference(r.clone()))?;\n        match mapped {\n            DataType::Reference(reference) => primitives::reference(self, self.types, &reference),\n            dt => primitives::inline(self, self.types, &dt),\n        }\n    }\n}\n\n/// Reference to Typescript language exporter for framework\npub struct FrameworkExporter<'a> {\n    exporter: &'a Exporter,\n    format: Option<&'a dyn Format>,\n    has_manually_exported_user_types: &'a mut bool,\n    // For `Layout::Files` we need to inject the value\n    files_root_types: &'a str,\n    /// Collected types currently being exported.\n    pub types: &'a Types,\n}\n\nimpl fmt::Debug for FrameworkExporter<'_> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        self.exporter.fmt(f)\n    }\n}\n\nimpl AsRef<Exporter> for FrameworkExporter<'_> {\n    fn as_ref(&self) -> &Exporter {\n        self\n    }\n}\n\nimpl Deref for FrameworkExporter<'_> {\n    type Target = Exporter;\n\n    fn deref(&self) -> &Self::Target {\n        self.exporter\n    }\n}\n\nimpl FrameworkExporter<'_> {\n    /// Render the types within the [`Types`](specta::Types).\n    ///\n    /// This will only work if used within [`Exporter::framework_runtime`].\n    /// It allows frameworks to intersperse their user types into their runtime code.\n    pub fn render_types(&mut self) -> Result<Cow<'static, str>, Error> {\n        let mut s = String::new();\n        render_types(\n            &mut s,\n            self.exporter,\n            self.format,\n            self.types,\n            self.files_root_types,\n        )?;\n        *self.has_manually_exported_user_types = true;\n        Ok(Cow::Owned(s))\n    }\n\n    /// [primitives::inline]\n    pub fn inline(&self, dt: &DataType) -> Result<String, Error> {\n        let mapped = map_datatype_format(self.format, self.types, dt)?;\n        primitives::inline(self, self.types, &mapped)\n    }\n\n    /// [primitives::reference]\n    pub fn reference(&self, r: &Reference) -> Result<String, Error> {\n        let mapped = map_datatype_format(self.format, self.types, &DataType::Reference(r.clone()))?;\n        match mapped {\n            DataType::Reference(reference) => primitives::reference(self, self.types, &reference),\n            dt => primitives::inline(self, self.types, &dt),\n        }\n    }\n\n    /// [primitives::export]\n    pub fn export<'a>(\n        &self,\n        ndts: impl Iterator<Item = &'a NamedDataType>,\n        indent: &'a str,\n    ) -> Result<String, Error> {\n        let mapped = ndts\n            .map(|ndt| map_named_datatype_format(self.format, self.types, ndt))\n            .collect::<Result<Vec<_>, _>>()?;\n        primitives::export(self, self.types, mapped.iter(), indent)\n    }\n}\n\nstruct Module<'a> {\n    types: Vec<&'a NamedDataType>,\n    children: BTreeMap<&'a str, Module<'a>>,\n    module_path: Cow<'static, str>,\n}\n\nfn build_module_graph(types: &Types) -> Module<'_> {\n    types.into_unsorted_iter().fold(\n        Module {\n            types: Default::default(),\n            children: Default::default(),\n            module_path: Default::default(),\n        },\n        |mut ns, ndt| {\n            let path = &ndt.module_path;\n\n            if path.is_empty() {\n                ns.types.push(ndt);\n            } else {\n                let mut current = &mut ns;\n                let mut current_path = String::new();\n                for segment in path.split(\"::\") {\n                    if !current_path.is_empty() {\n                        current_path.push_str(\"::\");\n                    }\n                    current_path.push_str(segment);\n\n                    current = current.children.entry(segment).or_insert_with(|| Module {\n                        types: Default::default(),\n                        children: Default::default(),\n                        module_path: current_path.clone().into(),\n                    });\n                }\n\n                current.types.push(ndt);\n            }\n\n            ns\n        },\n    )\n}\n\nfn render_file_header(exporter: &Exporter) -> Result<String, Error> {\n    let mut out = exporter.header.to_string();\n    if !exporter.header.is_empty() {\n        out += \"\\n\";\n    }\n\n    out += &exporter.framework_prelude;\n    if !exporter.framework_prelude.is_empty() {\n        out += \"\\n\";\n    }\n\n    Ok(out)\n}\n\nfn render_types(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    files_user_types: &str,\n) -> Result<(), Error> {\n    match exporter.layout {\n        Layout::Namespaces => {\n            fn has_renderable_content(module: &Module<'_>) -> bool {\n                module.types.iter().any(|ndt| ndt.ty.is_some())\n                    || module.children.values().any(has_renderable_content)\n            }\n\n            fn export<'a>(\n                exporter: &Exporter,\n                format: Option<&dyn Format>,\n                types: &Types,\n                s: &mut String,\n                module: impl ExactSizeIterator<Item = (&'a &'a str, &'a mut Module<'a>)>,\n                depth: usize,\n            ) -> Result<(), Error> {\n                let namespace_indent = \"\\t\".repeat(depth);\n                let content_indent = \"\\t\".repeat(depth + 1);\n\n                for (name, module) in module {\n                    if !has_renderable_content(module) {\n                        continue;\n                    }\n\n                    s.push('\\n');\n                    s.push_str(&namespace_indent);\n                    if depth != 0 && *name != \"$specta$\" {\n                        s.push_str(\"export \");\n                    }\n                    s.push_str(\"namespace \");\n                    s.push_str(name);\n                    s.push_str(\" {\\n\");\n\n                    // Types\n                    module.types.sort_by(|a, b| {\n                        a.name\n                            .cmp(&b.name)\n                            .then(a.module_path.cmp(&b.module_path))\n                            .then(a.location.cmp(&b.location))\n                    });\n                    render_flat_types(\n                        s,\n                        exporter,\n                        format,\n                        types,\n                        module.types.iter().copied(),\n                        &content_indent,\n                    )?;\n\n                    // Namespaces\n                    export(\n                        exporter,\n                        format,\n                        types,\n                        s,\n                        module.children.iter_mut(),\n                        depth + 1,\n                    )?;\n\n                    s.push_str(&namespace_indent);\n                    s.push_str(\"}\\n\");\n                }\n\n                Ok(())\n            }\n\n            let mut module = build_module_graph(types);\n\n            let reexports = {\n                let mut reexports = String::new();\n                for name in module\n                    .children\n                    .iter()\n                    .filter_map(|(name, module)| has_renderable_content(module).then_some(*name))\n                    .chain(\n                        module\n                            .types\n                            .iter()\n                            .filter(|ndt| ndt.ty.is_some())\n                            .map(|ndt| ndt.name.as_ref()),\n                    )\n                {\n                    reexports.push_str(\"export import \");\n                    reexports.push_str(name);\n                    reexports.push_str(\" = $s$.\");\n                    reexports.push_str(name);\n                    reexports.push_str(\";\\n\");\n                }\n                reexports\n            };\n\n            export(\n                exporter,\n                format,\n                types,\n                s,\n                [(&\"$s$\", &mut module)].into_iter(),\n                0,\n            )?;\n            s.push_str(&reexports);\n        }\n        Layout::ModulePrefixedName | Layout::FlatFile => {\n            render_flat_types(s, exporter, format, types, types.into_sorted_iter(), \"\")?;\n        }\n        // The types will get their own files\n        // So we keep the user types empty for easy downstream detection.\n        Layout::Files => {\n            if !files_user_types.is_empty() {\n                s.push_str(files_user_types);\n            }\n        }\n    }\n\n    Ok(())\n}\n\n// Implementation of `Layout::ModulePrefixedName | Layout::FlatFile`,\n// but is used by `Layout::Namespace` and `Layout::Files`\nfn render_flat_types<'a>(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    ndts: impl ExactSizeIterator<Item = &'a NamedDataType>,\n    indent: &str,\n) -> Result<HashMap<String, Location<'static>>, Error> {\n    let mut exports = HashMap::with_capacity(ndts.len());\n\n    let ndts = ndts\n        .filter(|ndt| ndt.ty.is_some())\n        .map(|ndt| {\n            let export_name = exported_type_name(exporter, ndt);\n            if let Some(other) = exports.insert(export_name.to_string(), ndt.location) {\n                return Err(Error::duplicate_type_name(export_name, ndt.location, other));\n            }\n\n            Ok(ndt)\n        })\n        .collect::<Result<Vec<_>, _>>()?;\n\n    primitives::export_internal(s, exporter, format, types, ndts.into_iter(), indent)?;\n\n    Ok(exports)\n}\n\n/// Collect all TypeScript/JavaScript files in a directory recursively\nfn collect_existing_files(root: &Path) -> Result<HashSet<PathBuf>, Error> {\n    if !root.exists() {\n        return Ok(HashSet::new());\n    }\n\n    let mut files = HashSet::new();\n    let entries =\n        std::fs::read_dir(root).map_err(|source| Error::read_dir(root.to_path_buf(), source))?;\n    for entry in entries {\n        let entry = entry.map_err(|source| Error::read_dir(root.to_path_buf(), source))?;\n        let path = entry.path();\n        let file_type = entry\n            .file_type()\n            .map_err(|source| Error::metadata(path.clone(), source))?;\n\n        if file_type.is_symlink() {\n            continue;\n        }\n\n        if file_type.is_dir() {\n            files.extend(collect_existing_files(&path)?);\n        } else if matches!(path.extension().and_then(|e| e.to_str()), Some(\"ts\" | \"js\")) {\n            files.insert(path);\n        }\n    }\n\n    Ok(files)\n}\n\nfn is_generated_specta_file(path: &Path, exporter: &Exporter) -> Result<bool, Error> {\n    match std::fs::read_to_string(path) {\n        Ok(contents) => Ok((!exporter.framework_prelude.is_empty()\n            && contents.contains(exporter.framework_prelude.as_ref()))\n            || contents.contains(\"generated by Specta\")),\n        Err(err) if err.kind() == std::io::ErrorKind::InvalidData => Ok(false),\n        Err(source) => Err(Error::from(source)),\n    }\n}\n\n/// Remove empty directories recursively, stopping at the root\nfn remove_empty_dirs(path: &Path, root: &Path) -> Result<(), Error> {\n    let entries =\n        std::fs::read_dir(path).map_err(|source| Error::read_dir(path.to_path_buf(), source))?;\n    for entry in entries {\n        let entry = entry.map_err(|source| Error::read_dir(path.to_path_buf(), source))?;\n        let entry_path = entry.path();\n        let file_type = entry\n            .file_type()\n            .map_err(|source| Error::metadata(entry_path.clone(), source))?;\n        if file_type.is_symlink() {\n            continue;\n        }\n        if file_type.is_dir() {\n            remove_empty_dirs(&entry_path, root)?;\n        }\n    }\n\n    let is_empty = path\n        .read_dir()\n        .map_err(|source| Error::read_dir(path.to_path_buf(), source))?\n        .next()\n        .is_none();\n\n    if path != root && is_empty {\n        match std::fs::remove_dir(path) {\n            Ok(()) => {}\n            Err(err) if err.kind() == std::io::ErrorKind::NotFound => {}\n            Err(source) => {\n                return Err(Error::remove_dir(path.to_path_buf(), source));\n            }\n        }\n    }\n    Ok(())\n}\n\n/// Delete stale files and clean up empty directories\nfn cleanup_stale_files(\n    root: &Path,\n    current_files: &HashMap<PathBuf, String>,\n    exporter: &Exporter,\n) -> Result<(), Error> {\n    for path in collect_existing_files(root)? {\n        if current_files.contains_key(&path) || !is_generated_specta_file(&path, exporter)? {\n            continue;\n        }\n\n        std::fs::remove_file(&path).or_else(|source| {\n            if source.kind() == std::io::ErrorKind::NotFound {\n                Ok(())\n            } else {\n                Err(Error::remove_file(path.clone(), source))\n            }\n        })?;\n    }\n\n    remove_empty_dirs(root, root)?;\n\n    Ok(())\n}\n\nfn exported_type_name(exporter: &Exporter, ndt: &NamedDataType) -> Cow<'static, str> {\n    match exporter.layout {\n        Layout::ModulePrefixedName => {\n            let mut s = ndt.module_path.split(\"::\").collect::<Vec<_>>().join(\"_\");\n            s.push('_');\n            s.push_str(&ndt.name);\n            Cow::Owned(s)\n        }\n        _ => ndt.name.clone(),\n    }\n}\n\npub(crate) fn module_alias(module_path: &str) -> String {\n    if module_path.is_empty() {\n        \"$root\".to_string()\n    } else {\n        module_path.split(\"::\").collect::<Vec<_>>().join(\"$\")\n    }\n}\n\nfn module_import_statement(\n    exporter: &Exporter,\n    from_module_path: &str,\n    to_module_path: &str,\n) -> String {\n    let import_keyword = if exporter.jsdoc {\n        \"import\"\n    } else {\n        \"import type\"\n    };\n\n    format!(\n        \"{} * as {} from \\\"{}\\\";\",\n        import_keyword,\n        module_alias(to_module_path),\n        module_import_path(from_module_path, to_module_path)\n    )\n}\n\nfn module_import_block(\n    exporter: &Exporter,\n    from_module_path: &str,\n    import_paths: &BTreeSet<String>,\n) -> String {\n    if exporter.jsdoc {\n        let mut out = String::from(\"/**\\n\");\n\n        for module_path in import_paths {\n            out.push_str(\" * @typedef {import(\\\"\");\n            out.push_str(&module_import_path(from_module_path, module_path));\n            out.push_str(\"\\\")} \");\n            out.push_str(&module_alias(module_path));\n            out.push('\\n');\n        }\n\n        out.push_str(\" */\");\n        out\n    } else {\n        import_paths\n            .iter()\n            .map(|module_path| module_import_statement(exporter, from_module_path, module_path))\n            .collect::<Vec<_>>()\n            .join(\"\\n\")\n    }\n}\n\nfn module_import_path(from_module_path: &str, to_module_path: &str) -> String {\n    fn module_file_segments(module_path: &str) -> Vec<&str> {\n        if module_path.is_empty() {\n            vec![\"index\"]\n        } else {\n            module_path.split(\"::\").collect()\n        }\n    }\n\n    let from_file_segments = module_file_segments(from_module_path);\n    let from_dir_segments = &from_file_segments[..from_file_segments.len() - 1];\n    let to_file_segments = module_file_segments(to_module_path);\n\n    let shared = from_dir_segments\n        .iter()\n        .zip(to_file_segments.iter())\n        .take_while(|(a, b)| a == b)\n        .count();\n\n    let mut relative_parts = Vec::new();\n    relative_parts.extend(std::iter::repeat_n(\n        \"..\",\n        from_dir_segments.len().saturating_sub(shared),\n    ));\n    relative_parts.extend(to_file_segments.iter().skip(shared).copied());\n\n    if relative_parts\n        .first()\n        .is_none_or(|v| *v != \".\" && *v != \"..\")\n    {\n        relative_parts.insert(0, \".\");\n    }\n\n    relative_parts.join(\"/\")\n}\n"
  },
  {
    "path": "specta-typescript/src/jsdoc.rs",
    "content": "use std::{borrow::Cow, path::Path};\n\nuse specta::{Format, Types};\n\nuse crate::{Branded, BrandedTypeExporter, Error, Exporter, Layout};\n\n/// JSDoc language exporter.\n#[derive(Debug, Clone)]\n#[non_exhaustive]\npub struct JSDoc(Exporter);\n\nimpl Default for JSDoc {\n    fn default() -> Self {\n        let mut exporter = Exporter::default();\n        exporter.jsdoc = true;\n        exporter.into()\n    }\n}\n\nimpl From<JSDoc> for Exporter {\n    fn from(value: JSDoc) -> Self {\n        value.0\n    }\n}\n\nimpl From<Exporter> for JSDoc {\n    fn from(mut value: Exporter) -> Self {\n        value.jsdoc = true;\n        Self(value)\n    }\n}\n\nimpl JSDoc {\n    /// Construct a new JSDoc exporter with the default options configured.\n    pub fn new() -> Self {\n        Default::default()\n    }\n\n    /// Configure a header for the file.\n    ///\n    /// This is perfect for configuring lint ignore rules or other file-level comments.\n    pub fn header(self, header: impl Into<Cow<'static, str>>) -> Self {\n        Self(self.0.header(header))\n    }\n\n    /// Configure the layout of the generated file\n    pub fn layout(self, layout: Layout) -> Self {\n        Self(self.0.layout(layout))\n    }\n\n    /// Configure how `specta_typescript::branded!` types are rendered.\n    ///\n    /// See [`Exporter::branded_type_impl`] for details.\n    pub fn branded_type_impl(\n        self,\n        builder: impl for<'a> Fn(BrandedTypeExporter<'a>, &Branded) -> Result<Cow<'static, str>, Error>\n        + Send\n        + Sync\n        + 'static,\n    ) -> Self {\n        Self(self.0.branded_type_impl(builder))\n    }\n\n    /// Export the files into a single string.\n    ///\n    /// Note: This returns an error if the format is `Format::Files`.\n    pub fn export(&self, types: &Types, format: impl Format) -> Result<String, Error> {\n        self.0.export(types, format)\n    }\n\n    /// Export the types to a specific file/folder.\n    ///\n    /// When configured when `format` is `Format::Files`, you must provide a directory path.\n    /// Otherwise, you must provide the path of a single file.\n    ///\n    pub fn export_to(\n        &self,\n        path: impl AsRef<Path>,\n        types: &Types,\n        format: impl Format,\n    ) -> Result<(), Error> {\n        self.0.export_to(path, types, format)\n    }\n}\n\nimpl AsRef<Exporter> for JSDoc {\n    fn as_ref(&self) -> &Exporter {\n        &self.0\n    }\n}\n\nimpl AsMut<Exporter> for JSDoc {\n    fn as_mut(&mut self) -> &mut Exporter {\n        &mut self.0\n    }\n}\n"
  },
  {
    "path": "specta-typescript/src/legacy.rs",
    "content": "// TODO: Drop this stuff\n\nuse std::{\n    borrow::Cow,\n    collections::BTreeSet,\n    fmt::{self, Write},\n};\n\nuse specta::{\n    Types,\n    datatype::{\n        DataType, Deprecated, Enum, Field, Fields, GenericReference, NamedReferenceType, Reference,\n        Struct, Tuple, Variant,\n    },\n};\n\nuse crate::{Error, Exporter, reserved_names::RESERVED_TYPE_NAMES};\n\n#[derive(Clone, Debug)]\npub(crate) enum PathItem {\n    // Type(Cow<'static, str>),\n    // TypeExtended(Cow<'static, str>, &'static str),\n    Field(Cow<'static, str>),\n    Variant(Cow<'static, str>),\n}\n\n#[derive(Clone)]\npub(crate) struct ExportContext<'a> {\n    pub(crate) cfg: &'a Exporter,\n    pub(crate) path: Vec<PathItem>,\n}\n\nimpl ExportContext<'_> {\n    pub(crate) fn with(&self, item: PathItem) -> Self {\n        Self {\n            path: self.path.iter().cloned().chain([item]).collect(),\n            ..*self\n        }\n    }\n\n    pub(crate) fn export_path(&self) -> ExportPath {\n        ExportPath::new(&self.path)\n    }\n}\n\n/// Represents the path of an error in the export tree.\n/// This is designed to be opaque, meaning it's internal format and `Display` impl are subject to change at will.\npub struct ExportPath(String);\n\nimpl ExportPath {\n    pub(crate) fn new(path: &[PathItem]) -> Self {\n        let mut s = String::new();\n        let mut path = path.iter().peekable();\n        while let Some(item) = path.next() {\n            s.push_str(match item {\n                // PathItem::Type(v) => v,\n                // PathItem::TypeExtended(_, loc) => loc,\n                PathItem::Field(v) => v,\n                PathItem::Variant(v) => v,\n            });\n\n            if let Some(next) = path.peek() {\n                s.push_str(match next {\n                    // PathItem::Type(_) => \" -> \",\n                    // PathItem::TypeExtended(_, _) => \" -> \",\n                    PathItem::Field(_) => \".\",\n                    PathItem::Variant(_) => \"::\",\n                });\n            } else {\n                break;\n            }\n        }\n\n        Self(s)\n    }\n}\n\nimpl PartialEq for ExportPath {\n    fn eq(&self, other: &Self) -> bool {\n        self.0 == other.0\n    }\n}\n\nimpl fmt::Debug for ExportPath {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.write_str(&self.0)\n    }\n}\n\nimpl fmt::Display for ExportPath {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(f, \"{}\", self.0)\n    }\n}\n\n#[allow(missing_docs)]\npub(crate) type Result<T> = std::result::Result<T, Error>;\n\npub(crate) type Output = Result<String>;\n\n#[allow(clippy::ptr_arg)]\nfn inner_comments(\n    deprecated: Option<&Deprecated>,\n    docs: &str,\n    other: String,\n    start_with_newline: bool,\n    prefix: &str,\n) -> String {\n    let mut comments = String::new();\n    js_doc(&mut comments, docs, deprecated);\n    if comments.is_empty() {\n        return other;\n    }\n\n    let mut out = String::new();\n    if start_with_newline {\n        out.push('\\n');\n    }\n\n    for line in comments.lines() {\n        out.push_str(prefix);\n        out.push_str(line);\n        out.push('\\n');\n    }\n\n    out.push_str(&other);\n    out\n}\n\npub(crate) fn datatype_inner(\n    ctx: ExportContext,\n    typ: &DataType,\n    types: &Types,\n    s: &mut String,\n    generics: &[(GenericReference, DataType)],\n) -> Result<()> {\n    crate::primitives::datatype(s, ctx.cfg, None, types, typ, vec![], None, \"\", generics)\n}\n\n// Can be used with `StructUnnamedFields.fields` or `EnumNamedFields.fields`\nfn unnamed_fields_datatype(\n    ctx: ExportContext,\n    fields: &[(&Field, &DataType)],\n    types: &Types,\n    s: &mut String,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n    force_inline: bool,\n) -> Result<()> {\n    match fields {\n        [(field, ty)] => {\n            let mut v = String::new();\n            crate::primitives::datatype_with_inline_attr(\n                &mut v,\n                ctx.cfg,\n                None,\n                types,\n                ty,\n                vec![],\n                None,\n                \"\",\n                generics,\n                force_inline,\n            )?;\n            s.push_str(&inner_comments(\n                field.deprecated.as_ref(),\n                &field.docs,\n                v,\n                true,\n                prefix,\n            ));\n        }\n        fields => {\n            s.push('[');\n\n            for (i, (field, ty)) in fields.iter().enumerate() {\n                if i != 0 {\n                    s.push_str(\", \");\n                }\n\n                let mut v = String::new();\n                crate::primitives::datatype_with_inline_attr(\n                    &mut v,\n                    ctx.cfg,\n                    None,\n                    types,\n                    ty,\n                    vec![],\n                    None,\n                    \"\",\n                    generics,\n                    force_inline,\n                )?;\n                s.push_str(&inner_comments(\n                    field.deprecated.as_ref(),\n                    &field.docs,\n                    v,\n                    true,\n                    prefix,\n                ));\n            }\n\n            s.push(']');\n        }\n    }\n\n    Ok(())\n}\n\npub(crate) fn tuple_datatype(\n    ctx: ExportContext,\n    tuple: &Tuple,\n    types: &Types,\n    generics: &[(GenericReference, DataType)],\n) -> Output {\n    match tuple.elements.as_slice() {\n        [] => Ok(NULL.to_string()),\n        tys => Ok(format!(\n            \"[{}]\",\n            tys.iter()\n                .map(|v| {\n                    let mut s = String::new();\n                    datatype_inner(ctx.clone(), v, types, &mut s, generics).map(|_| s)\n                })\n                .collect::<Result<Vec<_>>>()?\n                .join(\", \")\n        )),\n    }\n}\n\npub(crate) fn struct_datatype(\n    ctx: ExportContext,\n    strct: &Struct,\n    types: &Types,\n    s: &mut String,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n) -> Result<()> {\n    match &strct.fields {\n        Fields::Unit => s.push_str(NULL),\n        Fields::Unnamed(unnamed) => unnamed_fields_datatype(\n            ctx,\n            &unnamed\n                .fields\n                .iter()\n                .filter_map(|field| field.ty.as_ref().map(|ty| (field, ty)))\n                .collect::<Vec<_>>(),\n            types,\n            s,\n            prefix,\n            generics,\n            false,\n        )?,\n        Fields::Named(named) => {\n            let fields = named\n                .fields\n                .iter()\n                .filter_map(|(name, field)| field.ty.as_ref().map(|ty| (name, (field, ty))))\n                .collect::<Vec<_>>();\n\n            if fields.is_empty() {\n                // TODO: Handle this\n                // match (named.tag().as_ref(), parent_name) {\n                //     (Some(tag), Some(key)) => write!(s, r#\"{{ \"{tag}\": \"{key}\" }}\"#)?,\n                //     (_, _) => write!(s, \"Record<{STRING}, {NEVER}>\")?,\n                // }\n                write!(s, \"Record<{STRING}, {NEVER}>\")?;\n                return Ok(());\n            }\n\n            let flattened: Vec<(&Cow<'static, str>, (&Field, &DataType))> = Vec::new();\n            let non_flattened = fields.clone();\n\n            let mut flattened_sections = flattened\n                .into_iter()\n                .map(|(_key, (field, ty))| {\n                    let mut s = String::new();\n                    crate::primitives::datatype_with_inline_attr(\n                        &mut s,\n                        ctx.cfg,\n                        None,\n                        types,\n                        ty,\n                        vec![],\n                        None,\n                        \"\",\n                        generics,\n                        false,\n                    )\n                    .map(|_| {\n                        inner_comments(\n                            field.deprecated.as_ref(),\n                            &field.docs,\n                            format!(\"({s})\"),\n                            true,\n                            prefix,\n                        )\n                    })\n                })\n                .collect::<Result<Vec<_>>>()?;\n\n            let unflattened_fields = non_flattened\n                .into_iter()\n                .map(|(key, field_ref)| {\n                    let (field, ty) = field_ref;\n                    let field_prefix = format!(\"{prefix}\\t\");\n\n                    let mut other = String::new();\n                    object_field_to_ts(\n                        ctx.with(PathItem::Field(key.clone())),\n                        key.clone(),\n                        (field, ty),\n                        types,\n                        &mut other,\n                        generics,\n                        &field_prefix,\n                        false,\n                        None,\n                    )?;\n\n                    let docs = field\n                        .docs\n                        .trim()\n                        .is_empty()\n                        .then(|| inline_reference_docs(types, (field, ty), false))\n                        .flatten()\n                        .unwrap_or(&field.docs);\n\n                    Ok(inner_comments(\n                        field.deprecated.as_ref(),\n                        docs,\n                        other,\n                        false,\n                        &field_prefix,\n                    ))\n                })\n                .collect::<Result<Vec<_>>>()?;\n\n            // TODO: Handle this\n            // if let (Some(tag), Some(key)) = (&named.tag(), parent_name) {\n            //     unflattened_fields.push(format!(\"{tag}: \\\"{key}\\\"\"));\n            // }\n\n            if !unflattened_fields.is_empty() {\n                let mut s = \"{\".to_string();\n\n                for field in unflattened_fields {\n                    s.push('\\n');\n                    s.push_str(&field);\n                    s.push(',');\n                }\n\n                s.push('\\n');\n                s.push_str(prefix);\n                s.push('}');\n                flattened_sections.insert(0, s);\n            }\n\n            // Remove duplicates while preserving source order.\n            let mut seen = BTreeSet::new();\n            flattened_sections.retain(|section| seen.insert(section.clone()));\n            s.push_str(&flattened_sections.join(\" & \"));\n        }\n    }\n\n    Ok(())\n}\n\nfn enum_variant_datatype(\n    ctx: ExportContext,\n    types: &Types,\n    name: Cow<'static, str>,\n    variant: &Variant,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n    ty_override: Option<VariantTypeOverride<'_>>,\n) -> Result<Option<String>> {\n    match &variant.fields {\n        Fields::Unit if name.is_empty() => Err(Error::invalid_name_legacy(\n            ctx.export_path(),\n            \"anonymous unit enum variants cannot be exported to Typescript\".to_string(),\n        )),\n        Fields::Unit => Ok(Some(sanitise_key(name, true).to_string())),\n        Fields::Named(_) if name.is_empty() => Err(Error::invalid_name_legacy(\n            ctx.export_path(),\n            \"anonymous named-field enum variants cannot be exported to Typescript\".to_string(),\n        )),\n        Fields::Named(obj) => {\n            let all_fields = obj\n                .fields\n                .iter()\n                .filter_map(|(name, field)| field.ty.as_ref().map(|ty| (name, (field, ty))))\n                .collect::<Vec<_>>();\n\n            let flattened: Vec<(&Cow<'static, str>, (&Field, &DataType))> = Vec::new();\n            let non_flattened = all_fields.clone();\n\n            let field_sections = flattened\n                .into_iter()\n                .map(|(_key, (field, ty))| {\n                    let mut s = String::new();\n                    crate::primitives::datatype_with_inline_attr(\n                        &mut s,\n                        ctx.cfg,\n                        None,\n                        types,\n                        ty,\n                        vec![],\n                        None,\n                        \"\",\n                        generics,\n                        false,\n                    )\n                    .map(|_| {\n                        inner_comments(\n                            field.deprecated.as_ref(),\n                            &field.docs,\n                            format!(\"({s})\"),\n                            true,\n                            prefix,\n                        )\n                    })\n                })\n                .collect::<Result<Vec<_>>>()?;\n\n            let mut regular_fields = vec![];\n            // TODO\n            // let mut regular_fields = if let Some(tag) = &obj.tag() {\n            //     let sanitised_name = sanitise_key(name, true);\n            //     vec![format!(\"{tag}: {sanitised_name}\")]\n            // } else {\n            //     vec![]\n            // };\n\n            regular_fields.extend(\n                non_flattened\n                    .into_iter()\n                    .map(|(name, field_ref)| {\n                        let (field, ty) = field_ref;\n\n                        let mut other = String::new();\n                        object_field_to_ts(\n                            ctx.with(PathItem::Field(name.clone())),\n                            name.clone(),\n                            (field, ty),\n                            types,\n                            &mut other,\n                            generics,\n                            \"\",\n                            false,\n                            ty_override\n                                .as_ref()\n                                .filter(|override_ty| override_ty.key == name.as_ref())\n                                .map(|override_ty| override_ty.ty),\n                        )?;\n\n                        let docs = field\n                            .docs\n                            .trim()\n                            .is_empty()\n                            .then(|| inline_reference_docs(types, (field, ty), false))\n                            .flatten()\n                            .unwrap_or(&field.docs);\n\n                        Ok(inner_comments(\n                            field.deprecated.as_ref(),\n                            docs,\n                            other,\n                            true,\n                            prefix,\n                        ))\n                    })\n                    .collect::<Result<Vec<_>>>()?,\n            );\n\n            Ok(Some(match (&field_sections[..], &regular_fields[..]) {\n                ([], []) => format!(\"Record<{STRING}, {NEVER}>\").to_string(),\n                ([], fields) => format!(\"{{ {} }}\", fields.join(\"; \")),\n                (_, []) => field_sections.join(\" & \"),\n                (_, _) => {\n                    let mut sections = vec![format!(\"{{ {} }}\", regular_fields.join(\"; \"))];\n                    sections.extend(field_sections);\n                    sections.join(\" & \")\n                }\n            }))\n        }\n        Fields::Unnamed(obj) => {\n            let fields = obj\n                .fields\n                .iter()\n                .filter_map(|field| field.ty.as_ref())\n                .map(|ty| {\n                    let mut s = String::new();\n                    crate::primitives::datatype_with_inline_attr(\n                        &mut s,\n                        ctx.cfg,\n                        None,\n                        types,\n                        ty,\n                        vec![],\n                        None,\n                        \"\",\n                        generics,\n                        false,\n                    )\n                    .map(|_| s)\n                })\n                .collect::<Result<Vec<_>>>()?;\n\n            Ok(match &fields[..] {\n                [] => {\n                    // If the actual length is 0, we know `#[serde(skip)]` was not used.\n                    if obj.fields.is_empty() {\n                        Some(\"[]\".to_string())\n                    } else {\n                        // We wanna render `{tag}` not `{tag}: {type}` (where `{type}` is what this function returns)\n                        None\n                    }\n                }\n                // If the actual length is 1, we know `#[serde(skip)]` was not used.\n                [field] if obj.fields.len() == 1 => Some(field.to_string()),\n                fields => Some(format!(\"[{}]\", fields.join(\", \"))),\n            })\n        }\n    }\n}\n\nstruct EnumVariantOutput {\n    value: String,\n    strict_keys: Option<BTreeSet<String>>,\n}\n\n#[derive(Debug, Clone)]\nstruct DiscriminatorAnalysis {\n    key: String,\n    known_literals: Vec<String>,\n    fallback_variant_idx: Option<usize>,\n}\n\n#[derive(Debug, Clone, Copy)]\nstruct VariantTypeOverride<'a> {\n    key: &'a str,\n    ty: &'a str,\n}\n\n#[derive(Debug, Clone)]\nenum DiscriminatorValue {\n    StringLiteral(String),\n    String,\n}\n\nfn analyze_discriminator(\n    variants: &[&(Cow<'static, str>, Variant)],\n) -> Option<DiscriminatorAnalysis> {\n    if variants.iter().any(|(name, _)| name.is_empty()) {\n        return None;\n    }\n\n    let mut key = None::<String>;\n    let mut known_literals = BTreeSet::new();\n    let mut fallback_variant_idx = None;\n\n    for (idx, (_, variant)) in variants.iter().enumerate() {\n        let (variant_key, value) = variant_discriminator(variant)?;\n\n        if let Some(expected) = &key {\n            if expected != &variant_key {\n                return None;\n            }\n        } else {\n            key = Some(variant_key.clone());\n        }\n\n        match value {\n            DiscriminatorValue::StringLiteral(value) => {\n                known_literals.insert(value);\n            }\n            DiscriminatorValue::String => {\n                if fallback_variant_idx.replace(idx).is_some() {\n                    return None;\n                }\n            }\n        }\n    }\n\n    if known_literals.is_empty() {\n        return None;\n    }\n\n    Some(DiscriminatorAnalysis {\n        key: key.expect(\"at least one variant when called\"),\n        known_literals: known_literals.into_iter().collect(),\n        fallback_variant_idx,\n    })\n}\n\nfn variant_discriminator(variant: &Variant) -> Option<(String, DiscriminatorValue)> {\n    let Fields::Named(named) = &variant.fields else {\n        return None;\n    };\n\n    let (name, field) = named.fields.iter().find(|(_, field)| !field.optional)?;\n    let ty = field.ty.as_ref()?;\n\n    if matches!(ty, DataType::Primitive(specta::datatype::Primitive::str)) {\n        return Some((name.to_string(), DiscriminatorValue::String));\n    }\n\n    string_literal_datatype_value(ty)\n        .map(|value| (name.to_string(), DiscriminatorValue::StringLiteral(value)))\n}\n\nfn string_literal_datatype_value(ty: &DataType) -> Option<String> {\n    let DataType::Enum(enm) = ty else {\n        return None;\n    };\n\n    let mut variants = enm.variants.iter();\n    let (name, variant) = variants.next()?;\n\n    if variants.next().is_some() {\n        return None;\n    }\n\n    if !matches!(&variant.fields, Fields::Unit) {\n        return None;\n    }\n\n    Some(name.to_string())\n}\n\nfn exclude_known_literals_type(literals: &[String]) -> Option<String> {\n    if literals.is_empty() {\n        return None;\n    }\n\n    let known = literals\n        .iter()\n        .map(|value| format!(\"\\\"{}\\\"\", escape_typescript_string_literal(value.as_str())))\n        .collect::<Vec<_>>()\n        .join(\" | \");\n\n    Some(format!(\"Exclude<string, {known}>\"))\n}\n\nfn untagged_strict_keys(variant: &Variant) -> Option<BTreeSet<String>> {\n    match &variant.fields {\n        Fields::Named(obj) => {\n            let all_fields = obj\n                .fields\n                .iter()\n                .filter_map(|(name, field)| field.ty.as_ref().map(|ty| (name, (field, ty))))\n                .collect::<Vec<_>>();\n            Some(\n                all_fields\n                    .into_iter()\n                    .map(|(name, _)| sanitise_key(name.clone(), false).to_string())\n                    .collect(),\n            )\n        }\n        _ => None,\n    }\n}\n\nfn has_anonymous_variant(variants: &[&(Cow<'static, str>, Variant)]) -> bool {\n    variants.iter().any(|(name, _)| name.is_empty())\n}\n\nfn strictify_enum_variants(variants: &mut [EnumVariantOutput]) {\n    let strict_key_universe = variants\n        .iter()\n        .filter_map(|variant| variant.strict_keys.as_ref())\n        .flat_map(|keys| keys.iter().cloned())\n        .collect::<BTreeSet<_>>();\n\n    if strict_key_universe.len() < 2 {\n        return;\n    }\n\n    for variant in variants {\n        let Some(keys) = variant.strict_keys.as_ref() else {\n            continue;\n        };\n\n        let missing_keys = strict_key_universe\n            .iter()\n            .filter(|key| !keys.contains(*key))\n            .map(|key| format!(\"{key}?: {NEVER}\"))\n            .collect::<Vec<_>>();\n\n        if missing_keys.is_empty() {\n            continue;\n        }\n\n        variant.value = format!(\"({}) & {{ {} }}\", variant.value, missing_keys.join(\"; \"));\n    }\n}\n\npub(crate) fn enum_datatype(\n    ctx: ExportContext,\n    e: &Enum,\n    types: &Types,\n    s: &mut String,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n) -> Result<()> {\n    if e.variants.is_empty() {\n        return Ok(write!(s, \"{NEVER}\")?);\n    }\n\n    let filtered_variants = e\n        .variants\n        .iter()\n        .filter(|(_, variant)| !variant.skip)\n        .collect::<Vec<_>>();\n\n    let discriminator = analyze_discriminator(&filtered_variants);\n    let fallback_override = discriminator.as_ref().and_then(|discriminator| {\n        discriminator.fallback_variant_idx.and_then(|idx| {\n            exclude_known_literals_type(&discriminator.known_literals)\n                .map(|ty| (idx, discriminator.key.as_str(), ty))\n        })\n    });\n\n    let mut rendered_variants = Vec::with_capacity(filtered_variants.len());\n    for (idx, (variant_name, variant)) in filtered_variants.iter().enumerate() {\n        let variant_override = fallback_override\n            .as_ref()\n            .and_then(|(fallback_idx, key, ty)| {\n                if *fallback_idx == idx {\n                    Some(VariantTypeOverride {\n                        key,\n                        ty: ty.as_str(),\n                    })\n                } else {\n                    None\n                }\n            });\n\n        let ts_values = enum_variant_datatype(\n            ctx.with(PathItem::Variant(variant_name.clone())),\n            types,\n            variant_name.clone(),\n            variant,\n            prefix,\n            generics,\n            variant_override,\n        )?;\n\n        rendered_variants.push(EnumVariantOutput {\n            value: ts_values.unwrap_or_else(|| NEVER.to_string()),\n            strict_keys: untagged_strict_keys(variant),\n        });\n    }\n\n    if discriminator.is_none() && !has_anonymous_variant(&filtered_variants) {\n        strictify_enum_variants(&mut rendered_variants);\n    }\n\n    let mut variants = filtered_variants\n        .into_iter()\n        .zip(rendered_variants)\n        .map(|((_, variant), rendered)| {\n            inner_comments(\n                variant.deprecated.as_ref(),\n                &variant.docs,\n                rendered.value,\n                true,\n                prefix,\n            )\n        })\n        .collect::<Vec<_>>();\n\n    let mut seen = BTreeSet::new();\n    variants.retain(|variant| seen.insert(variant.clone()));\n\n    // If all variants are skipped, the enum has no valid values\n    if variants.is_empty() {\n        s.push_str(NEVER);\n    } else {\n        s.push_str(&variants.join(\" | \"));\n    }\n\n    Ok(())\n}\n\n/// convert an object field into a Typescript string\nfn object_field_to_ts(\n    ctx: ExportContext,\n    key: Cow<'static, str>,\n    field_ref: (&Field, &DataType),\n    types: &Types,\n    s: &mut String,\n    generics: &[(GenericReference, DataType)],\n    prefix: &str,\n    force_inline: bool,\n    ty_override: Option<&str>,\n) -> Result<()> {\n    let (field, ty) = field_ref;\n    let field_name_safe = sanitise_key(key, false);\n\n    // https://github.com/specta-rs/rspc/issues/100#issuecomment-1373092211\n    let (key, ty) = match field.optional {\n        true => (format!(\"{field_name_safe}?\").into(), ty),\n        false => (field_name_safe, ty),\n    };\n\n    let value = match ty_override {\n        Some(ty_override) => ty_override.to_string(),\n        None => {\n            let mut value = String::new();\n            crate::primitives::datatype_with_inline_attr(\n                &mut value,\n                ctx.cfg,\n                None,\n                types,\n                ty,\n                vec![],\n                None,\n                prefix,\n                generics,\n                force_inline,\n            )?;\n            value\n        }\n    };\n\n    Ok(write!(s, \"{prefix}{key}: {value}\",)?)\n}\n\nfn inline_reference_docs<'a>(\n    types: &'a Types,\n    (_field, ty): (&Field, &'a DataType),\n    force_inline: bool,\n) -> Option<&'a str> {\n    let DataType::Reference(Reference::Named(r)) = ty else {\n        return None;\n    };\n\n    if !force_inline {\n        return None;\n    }\n\n    match &r.inner {\n        NamedReferenceType::Reference { .. } => types\n            .get(r)\n            .filter(|ndt| !ndt.docs.trim().is_empty())\n            .map(|ndt| ndt.docs.as_ref()),\n        NamedReferenceType::Inline { .. } | NamedReferenceType::Recursive => None,\n    }\n}\n\n/// sanitise a string to be a valid Typescript key\nfn sanitise_key<'a>(field_name: Cow<'static, str>, force_string: bool) -> Cow<'a, str> {\n    let valid = is_identifier(&field_name);\n\n    if force_string || !valid {\n        format!(r#\"\"{}\"\"#, escape_typescript_string_literal(&field_name)).into()\n    } else {\n        field_name\n    }\n}\n\npub(crate) fn is_identifier(name: &str) -> bool {\n    let mut chars = name.chars();\n    let Some(first) = chars.next() else {\n        return false;\n    };\n\n    (first.is_ascii_alphabetic() || first == '_' || first == '$')\n        && chars.all(|ch| ch.is_ascii_alphanumeric() || ch == '_' || ch == '$')\n}\n\npub(crate) fn escape_typescript_string_literal(value: &str) -> Cow<'_, str> {\n    if !value.chars().any(|ch| {\n        ch == '\"' || ch == '\\\\' || ch == '\\u{2028}' || ch == '\\u{2029}' || ch.is_control()\n    }) {\n        return Cow::Borrowed(value);\n    }\n\n    let mut escaped = String::with_capacity(value.len());\n    for ch in value.chars() {\n        match ch {\n            '\"' => escaped.push_str(r#\"\\\"\"#),\n            '\\\\' => escaped.push_str(r#\"\\\\\"#),\n            '\\n' => escaped.push_str(r#\"\\n\"#),\n            '\\r' => escaped.push_str(r#\"\\r\"#),\n            '\\t' => escaped.push_str(r#\"\\t\"#),\n            '\\u{2028}' => escaped.push_str(r#\"\\u2028\"#),\n            '\\u{2029}' => escaped.push_str(r#\"\\u2029\"#),\n            ch if ch.is_control() => {\n                write!(escaped, r#\"\\u{:04X}\"#, ch as u32).expect(\"infallible\");\n            }\n            _ => escaped.push(ch),\n        }\n    }\n\n    Cow::Owned(escaped)\n}\n\npub(crate) fn sanitise_type_name(ctx: ExportContext, ident: &str) -> Output {\n    if let Some(name) = RESERVED_TYPE_NAMES.iter().find(|v| **v == ident) {\n        return Err(Error::forbidden_name_legacy(ctx.export_path(), name));\n    }\n\n    if let Some(first_char) = ident.chars().next()\n        && !first_char.is_alphabetic()\n        && first_char != '_'\n    {\n        return Err(Error::invalid_name_legacy(\n            ctx.export_path(),\n            ident.to_string(),\n        ));\n    }\n\n    if ident\n        .find(|c: char| !c.is_alphanumeric() && c != '_')\n        .is_some()\n    {\n        return Err(Error::invalid_name_legacy(\n            ctx.export_path(),\n            ident.to_string(),\n        ));\n    }\n\n    Ok(ident.to_string())\n}\n\nconst STRING: &str = \"string\";\nconst NULL: &str = \"null\";\nconst NEVER: &str = \"never\";\n\n// TODO: Merge this into main expoerter\npub(crate) fn js_doc(s: &mut String, docs: &str, deprecated: Option<&Deprecated>) {\n    // Early return - no-op if nothing to document\n    if docs.is_empty() && deprecated.is_none() {\n        return;\n    }\n\n    if deprecated.is_none() {\n        let mut lines = docs.lines();\n        if let (Some(line), None) = (lines.next(), lines.next()) {\n            s.push_str(\"/** \");\n            s.push_str(&escape_jsdoc_text(line));\n            s.push_str(\" */\\n\");\n            return;\n        }\n    }\n\n    // Start JSDoc comment\n    s.push_str(\"/**\\n\");\n\n    // Add documentation lines\n    if !docs.is_empty() {\n        for line in docs.lines() {\n            s.push_str(\" * \");\n            s.push_str(&escape_jsdoc_text(line));\n            s.push('\\n');\n        }\n    }\n\n    // Add @deprecated tag if present\n    if let Some(typ) = deprecated {\n        s.push_str(\" * @deprecated\");\n\n        if let Some(details) = deprecated_details(typ) {\n            s.push(' ');\n            s.push_str(&details);\n        }\n\n        s.push('\\n');\n    }\n\n    // Close JSDoc comment\n    s.push_str(\" */\\n\");\n}\n\npub(crate) fn escape_jsdoc_text(text: &str) -> Cow<'_, str> {\n    if text.contains(\"*/\") {\n        Cow::Owned(text.replace(\"*/\", \"*\\\\/\"))\n    } else {\n        Cow::Borrowed(text)\n    }\n}\n\npub(crate) fn deprecated_details(typ: &Deprecated) -> Option<String> {\n    let note = typ.note.as_deref().map(str::trim).filter(|v| !v.is_empty());\n    let since: Option<&str> = None;\n\n    match (note, since) {\n        (Some(note), Some(since)) => Some(format!(\"{note} since {since}\")),\n        (Some(note), None) => Some(note.to_string()),\n        (None, Some(since)) => Some(format!(\"since {since}\")),\n        (None, None) => None,\n    }\n}\n\n// pub fn typedef_named_datatype(\n//     cfg: &Typescript,\n//     typ: &NamedDataType,\n//     types: &Types,\n// ) -> Output {\n//     typedef_named_datatype_inner(\n//         &ExportContext {\n//             cfg,\n//             path: vec![],\n//         },\n//         typ,\n//         types,\n//     )\n// }\n\n// fn typedef_named_datatype_inner(\n//     ctx: &ExportContext,\n//     typ: &NamedDataType,\n//     types: &Types,\n// ) -> Output {\n//     let name = typ.name();\n//     let docs = typ.docs();\n//     let deprecated = typ.deprecated();\n//     let item = typ.ty();\n\n//     let ctx = ctx.with(PathItem::Type(name.clone()));\n\n//     let name = sanitise_type_name(ctx.clone(), name)?;\n\n//     let mut inline_ts = String::new();\n//     datatype_inner(\n//         ctx.clone(),\n//         &FunctionReturnType::Value(typ.ty().clone()),\n//         types,\n//         &mut inline_ts,\n//     )?;\n\n//     let mut builder = js_doc_builder(docs, deprecated);\n\n//     typ.generics()()\n//         .into_iter()\n//         .for_each(|generic| builder.push_generic(generic));\n\n//     builder.push_internal([\"@typedef { \", &inline_ts, \" } \", &name]);\n\n//     Ok(builder.build())\n// }\n"
  },
  {
    "path": "specta-typescript/src/lib.rs",
    "content": "//! [TypeScript](https://www.typescriptlang.org) language exporter.\n//!\n//! # Usage\n//!\n//! Add `specta`, `specta-serde`, and `specta-typescript` to your project:\n//!\n//! ```bash\n//! cargo add specta@2.0.0-rc.24 --features derive,collect\n//! cargo add specta-serde@0.0.11\n//! cargo add specta-typescript@0.0.11\n//! ```\n//!\n//! Next copy the following into your `main.rs` file:\n//!\n//! ```rust\n//! use specta::{Type, Types};\n//! use specta_typescript::Typescript;\n//!\n//! #[derive(Type)]\n//! pub struct MyType {\n//!     pub field: MyOtherType,\n//! }\n//!\n//!\n//! #[derive(Type)]\n//! pub struct MyOtherType {\n//!     pub other_field: String,\n//! }\n//!\n//! let mut types = Types::default()\n//!     // We don't need to specify `MyOtherType` because it's referenced by `MyType`\n//!     .register::<MyType>();\n//! Typescript::default()\n//!     .export_to(\n//!         \"./bindings.ts\",\n//!         &types,\n//!         specta_serde::Format,\n//!     )\n//!     .unwrap();\n//! ```\n//!\n//! Now your setup with Specta!\n//!\n//! If you get tired of listing all your types manually? Checkout `specta::collect`!\n//!\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n\nmod branded;\nmod error;\nmod exporter;\nmod jsdoc;\nmod legacy; // TODO: Remove this\nmod map_keys;\nmod opaque;\npub mod primitives;\nmod references;\npub(crate) mod reserved_names;\nmod types;\nmod typescript;\n\npub use branded::Branded;\npub use error::Error;\npub use exporter::{BrandedTypeExporter, Exporter, FrameworkExporter, Layout};\npub use jsdoc::JSDoc;\npub use opaque::define;\npub use references::collect_references;\npub use types::{Any, Never, Number, Unknown};\npub use typescript::Typescript;\n"
  },
  {
    "path": "specta-typescript/src/map_keys.rs",
    "content": "use std::collections::HashSet;\n\nuse specta::{\n    Types,\n    datatype::{DataType, Fields, Generic, NamedReferenceType, Primitive, Reference},\n};\n\nuse crate::Error;\n\npub(crate) fn validate_map_key(\n    key_ty: &DataType,\n    types: &Types,\n    path: String,\n) -> Result<(), Error> {\n    validate_map_key_inner(key_ty, types, path, &mut HashSet::new())\n}\n\nfn validate_map_key_inner(\n    key_ty: &DataType,\n    types: &Types,\n    path: String,\n    visiting_named_refs: &mut HashSet<Reference>,\n) -> Result<(), Error> {\n    fn unwrap_synthetic_variant_fields<'a>(\n        variant_name: &str,\n        fields: &'a Fields,\n    ) -> Option<&'a Fields> {\n        let Fields::Named(named) = fields else {\n            return None;\n        };\n\n        let mut live_fields = named\n            .fields\n            .iter()\n            .filter_map(|(name, field)| field.ty.as_ref().map(|ty| (name.as_ref(), ty)));\n        let (field_name, DataType::Enum(inner)) = live_fields.next()? else {\n            return None;\n        };\n\n        if field_name != variant_name || live_fields.next().is_some() {\n            return None;\n        }\n\n        match inner.variants.as_slice() {\n            [(inner_name, inner_variant)] if inner_name == variant_name => {\n                Some(&inner_variant.fields)\n            }\n            _ => None,\n        }\n    }\n\n    match key_ty {\n        DataType::Primitive(primitive) if primitive_is_valid_key(primitive.clone()) => Ok(()),\n        DataType::Primitive(other) => Err(Error::invalid_map_key(\n            path,\n            invalid_primitive_reason(other.clone()),\n        )),\n        DataType::Enum(enm) => {\n            for (variant_name, variant) in &enm.variants {\n                let fields = unwrap_synthetic_variant_fields(variant_name, &variant.fields)\n                    .unwrap_or(&variant.fields);\n\n                match fields {\n                    Fields::Unit => {}\n                    Fields::Unnamed(unnamed) => {\n                        let non_skipped = unnamed\n                            .fields\n                            .iter()\n                            .filter_map(|field| field.ty.as_ref())\n                            .count();\n                        if non_skipped != 1 {\n                            return Err(Error::invalid_map_key(\n                                &path,\n                                format!(\n                                    \"enum key variant '{variant_name}' must serialize as a newtype value\"\n                                ),\n                            ));\n                        }\n                    }\n                    Fields::Named(_) => {\n                        return Err(Error::invalid_map_key(\n                            &path,\n                            format!(\n                                \"enum key variant '{variant_name}' serializes as a struct variant, which serde_json rejects\"\n                            ),\n                        ));\n                    }\n                }\n            }\n\n            Ok(())\n        }\n        DataType::Struct(strct) => {\n            let Fields::Unnamed(unnamed) = &strct.fields else {\n                return Err(Error::invalid_map_key(\n                    path,\n                    \"struct keys must serialize as a newtype struct to be valid serde_json map keys\",\n                ));\n            };\n\n            let mut non_skipped = unnamed.fields.iter().filter_map(|field| field.ty.as_ref());\n            let Some(inner_ty) = non_skipped.next() else {\n                return Err(Error::invalid_map_key(\n                    path,\n                    \"newtype struct map keys must have exactly one serializable field\",\n                ));\n            };\n\n            if non_skipped.next().is_some() {\n                return Err(Error::invalid_map_key(\n                    path,\n                    \"newtype struct map keys must have exactly one serializable field\",\n                ));\n            }\n\n            validate_map_key_inner(inner_ty, types, path, visiting_named_refs)\n        }\n        DataType::Reference(Reference::Named(reference)) => {\n            let reference_key = Reference::Named(reference.clone());\n            if !visiting_named_refs.insert(reference_key.clone()) {\n                return Err(Error::invalid_map_key(\n                    path,\n                    \"recursive map key reference cycle detected\",\n                ));\n            }\n\n            let result = match &reference.inner {\n                NamedReferenceType::Reference { generics, .. } => {\n                    if let Some(ndt) = types.get(reference) {\n                        if let Some(ty) = ndt.ty.as_ref() {\n                            let mut ty = ty.clone();\n                            substitute_generics(&mut ty, generics);\n                            validate_map_key_inner(&ty, types, path, visiting_named_refs)\n                        } else {\n                            Err(Error::invalid_map_key(\n                                path,\n                                format!(\"unresolved named map key reference {reference:?}\"),\n                            ))\n                        }\n                    } else {\n                        Err(Error::invalid_map_key(\n                            path,\n                            format!(\"unresolved named map key reference {reference:?}\"),\n                        ))\n                    }\n                }\n                NamedReferenceType::Inline { dt, .. } => {\n                    validate_map_key_inner(dt, types, path, visiting_named_refs)\n                }\n                NamedReferenceType::Recursive => Err(Error::invalid_map_key(\n                    path,\n                    format!(\"recursive inline named map key reference {reference:?}\"),\n                )),\n            };\n\n            visiting_named_refs.remove(&reference_key);\n            result\n        }\n        DataType::Generic(_) => Ok(()),\n        DataType::Reference(Reference::Opaque(_)) => Err(Error::invalid_map_key(\n            path,\n            \"opaque references cannot be validated as serde_json map keys\",\n        )),\n        DataType::Tuple(_) => Err(Error::invalid_map_key(\n            path,\n            \"tuple keys are not supported by serde_json map key serialization\",\n        )),\n        DataType::List(_)\n        | DataType::Map(_)\n        | DataType::Nullable(_)\n        | DataType::Intersection(_) => Err(Error::invalid_map_key(\n            path,\n            \"collection, map, and nullable keys are not supported by serde_json map key serialization\",\n        )),\n    }\n}\n\nfn substitute_generics(dt: &mut DataType, generics: &[(Generic, DataType)]) {\n    match dt {\n        DataType::Generic(generic) => {\n            if let Some((_, ty)) = generics.iter().find(|(reference, _)| reference == generic) {\n                *dt = ty.clone();\n            }\n        }\n        DataType::List(list) => substitute_generics(&mut list.ty, generics),\n        DataType::Map(map) => {\n            substitute_generics(map.key_ty_mut(), generics);\n            substitute_generics(map.value_ty_mut(), generics);\n        }\n        DataType::Nullable(inner) => substitute_generics(inner, generics),\n        DataType::Struct(strct) => substitute_field_generics(&mut strct.fields, generics),\n        DataType::Enum(enm) => {\n            for (_, variant) in &mut enm.variants {\n                substitute_field_generics(&mut variant.fields, generics);\n            }\n        }\n        DataType::Tuple(tuple) => {\n            for ty in &mut tuple.elements {\n                substitute_generics(ty, generics);\n            }\n        }\n        DataType::Reference(Reference::Named(reference)) => {\n            if let NamedReferenceType::Reference {\n                generics: reference_generics,\n                ..\n            } = &mut reference.inner\n            {\n                for (_, ty) in reference_generics {\n                    substitute_generics(ty, generics);\n                }\n            }\n        }\n        DataType::Intersection(types) => {\n            for ty in types {\n                substitute_generics(ty, generics);\n            }\n        }\n        DataType::Primitive(_) | DataType::Reference(Reference::Opaque(_)) => {}\n    }\n}\n\nfn substitute_field_generics(fields: &mut Fields, generics: &[(Generic, DataType)]) {\n    match fields {\n        Fields::Unit => {}\n        Fields::Unnamed(unnamed) => {\n            for field in &mut unnamed.fields {\n                if let Some(ty) = &mut field.ty {\n                    substitute_generics(ty, generics);\n                }\n            }\n        }\n        Fields::Named(named) => {\n            for (_, field) in &mut named.fields {\n                if let Some(ty) = &mut field.ty {\n                    substitute_generics(ty, generics);\n                }\n            }\n        }\n    }\n}\n\nfn primitive_is_valid_key(primitive: Primitive) -> bool {\n    matches!(\n        primitive,\n        Primitive::bool\n            | Primitive::i8\n            | Primitive::i16\n            | Primitive::i32\n            | Primitive::i64\n            | Primitive::i128\n            | Primitive::isize\n            | Primitive::u8\n            | Primitive::u16\n            | Primitive::u32\n            | Primitive::u64\n            | Primitive::u128\n            | Primitive::usize\n            | Primitive::f32\n            | Primitive::f64\n            | Primitive::str\n            | Primitive::char\n    )\n}\n\nfn invalid_primitive_reason(primitive: Primitive) -> &'static str {\n    match primitive {\n        Primitive::f16 | Primitive::f128 => {\n            \"f16 and f128 keys are not supported by serde_json map key serialization\"\n        }\n        _ => \"unsupported primitive key type for serde_json map key serialization\",\n    }\n}\n"
  },
  {
    "path": "specta-typescript/src/opaque.rs",
    "content": "use std::borrow::Cow;\n\nuse specta::datatype::Reference;\n\n#[derive(PartialEq, Eq, Hash)]\npub(crate) struct Define(pub(crate) Cow<'static, str>);\n\n#[derive(PartialEq, Eq, Hash)]\npub(crate) struct Any;\n\n#[derive(PartialEq, Eq, Hash)]\npub(crate) struct Unknown;\n\n#[derive(PartialEq, Eq, Hash)]\npub(crate) struct Never;\n\n#[derive(PartialEq, Eq, Hash)]\npub(crate) struct Number;\n\n/// Define a custom Typescript string which can be used as a `DataType::Reference`.\n///\n/// This is an advanced feature which should be used with caution.\npub fn define(raw: impl Into<Cow<'static, str>>) -> Reference {\n    Reference::opaque(Define(raw.into()))\n}\n"
  },
  {
    "path": "specta-typescript/src/primitives.rs",
    "content": "//! Primitives provide building blocks for Specta-based libraries.\n//!\n//! These are for advanced usecases, you should generally use [crate::Typescript] or\n//! [crate::JSDoc] in end-user applications.\n\nuse std::{borrow::Cow, fmt::Write as _};\n\nuse specta::{\n    Format, Types,\n    datatype::{\n        DataType, Deprecated, Enum, Fields, GenericDefinition, GenericReference, List, Map,\n        NamedDataType, NamedReference, NamedReferenceType, OpaqueReference, Primitive, Reference,\n        Tuple, Variant,\n    },\n};\n\nuse crate::{\n    Branded, BrandedTypeExporter, Error, Exporter, Layout,\n    legacy::{\n        ExportContext, deprecated_details, escape_jsdoc_text, escape_typescript_string_literal,\n        is_identifier, js_doc,\n    },\n    map_keys, opaque,\n};\n\n/// Generate a group of `export Type = ...` Typescript string for a specific [`NamedDataType`].\n///\n/// This method leaves the following up to the implementer:\n///  - Ensuring all referenced types are exported\n///  - Handling multiple type with overlapping names\n///  - Transforming the type for your serialization format (Eg. Serde)\n///\n/// We recommend passing in your types in bulk instead of doing individual calls as it leaves formatting to us and also allows us to merge the JSDoc types into a single large comment.\n///\n/// If you are using a custom format such as `serde::format` with the high-level exporter,\n/// these primitive helpers do not apply that mapping automatically. Standalone primitive usage\n/// should map both the full [`Types`] graph and any top-level [`DataType`] values with matching\n/// helpers first.\n///\npub fn export<'a>(\n    exporter: &dyn AsRef<Exporter>,\n    types: &Types,\n    ndts: impl Iterator<Item = &'a NamedDataType>,\n    indent: &str,\n) -> Result<String, Error> {\n    let mut s = String::new();\n    export_internal(&mut s, exporter.as_ref(), None, types, ndts, indent)?;\n    Ok(s)\n}\n\npub(crate) fn export_internal<'a>(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    ndts: impl Iterator<Item = &'a NamedDataType>,\n    indent: &str,\n) -> Result<(), Error> {\n    let ndts = ndts.filter(|ndt| ndt.ty.is_some());\n\n    if exporter.jsdoc {\n        let mut ndts = ndts.peekable();\n        if ndts.peek().is_none() {\n            return Ok(());\n        }\n\n        s.push_str(indent);\n        s.push_str(\"/**\\n\");\n\n        for (index, ndt) in ndts.enumerate() {\n            if index != 0 {\n                s.push_str(indent);\n                s.push_str(\"\\t*\\n\");\n            }\n\n            append_typedef_body(s, exporter, format, types, ndt, indent)?;\n        }\n\n        s.push_str(indent);\n        s.push_str(\"\\t*/\\n\");\n        return Ok(());\n    }\n\n    for (index, ndt) in ndts.enumerate() {\n        if index != 0 {\n            s.push('\\n');\n        }\n\n        export_single_internal(s, exporter, format, types, ndt, indent)?;\n    }\n\n    Ok(())\n}\n\nfn export_single_internal(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    ndt: &NamedDataType,\n    indent: &str,\n) -> Result<(), Error> {\n    if exporter.jsdoc {\n        let mut typedef = String::new();\n        typedef_internal(&mut typedef, exporter, format, types, ndt)?;\n        for line in typedef.lines() {\n            s.push_str(indent);\n            s.push_str(line);\n            s.push('\\n');\n        }\n        return Ok(());\n    }\n\n    // TODO: Modernise this\n    let name = crate::legacy::sanitise_type_name(\n        crate::legacy::ExportContext {\n            cfg: exporter,\n            path: vec![],\n        },\n        &match exporter.layout {\n            Layout::ModulePrefixedName => {\n                let mut s = ndt.module_path.split(\"::\").collect::<Vec<_>>().join(\"_\");\n                s.push('_');\n                s.push_str(&ndt.name);\n                Cow::Owned(s)\n            }\n            _ => ndt.name.clone(),\n        },\n    )?;\n\n    let mut comments = String::new();\n    js_doc(&mut comments, &ndt.docs, ndt.deprecated.as_ref());\n    if !comments.is_empty() {\n        for line in comments.lines() {\n            s.push_str(indent);\n            s.push_str(line);\n            s.push('\\n');\n        }\n    }\n\n    s.push_str(indent);\n    s.push_str(\"export type \");\n    s.push_str(&name);\n    write_generic_parameters(s, exporter, types, &ndt.generics)?;\n    s.push_str(\" = \");\n\n    datatype(\n        s,\n        exporter,\n        format,\n        types,\n        ndt.ty.as_ref().expect(\"named datatype must have a body\"),\n        vec![ndt.name.clone()],\n        Some(ndt.name.as_ref()),\n        indent,\n        Default::default(),\n    )?;\n    s.push_str(\";\\n\");\n\n    Ok(())\n}\n\n/// Generate an inlined Typescript string for a specific [`DataType`].\n///\n/// This methods leaves all the same things as the [`export`] method up to the user.\n///\n/// Note that calling this method with a tagged struct or enum may cause the tag to not be exported.\n/// The type should be wrapped in a [`NamedDataType`] to provide a proper name.\n///\n/// You are responsible for apply Serde or other format mapping to the top-level datatype in the\n/// same way as the [`Types`] graph before calling this helper.\n///\npub fn inline(\n    exporter: &dyn AsRef<Exporter>,\n    types: &Types,\n    dt: &DataType,\n) -> Result<String, Error> {\n    let mut s = String::new();\n    inline_datatype(\n        &mut s,\n        exporter.as_ref(),\n        None,\n        types,\n        dt,\n        vec![],\n        None,\n        \"\",\n        0,\n        &[],\n    )?;\n    Ok(s)\n}\n\n// This can be used internally to prevent cloning `Typescript` instances.\n// Externally this shouldn't be a concern so we don't expose it.\npub(crate) fn typedef_internal(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &NamedDataType,\n) -> Result<(), Error> {\n    s.push_str(\"/**\\n\");\n    append_typedef_body(s, exporter, format, types, dt, \"\")?;\n\n    s.push_str(\"\\t*/\");\n\n    Ok(())\n}\n\nfn append_jsdoc_properties(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt_name: &str,\n    dt: &DataType,\n    indent: &str,\n) -> Result<(), Error> {\n    match dt {\n        DataType::Struct(strct) => match &strct.fields {\n            Fields::Unit => {}\n            Fields::Unnamed(unnamed) => {\n                for (idx, field) in unnamed.fields.iter().enumerate() {\n                    let Some(ty) = field.ty.as_ref() else {\n                        continue;\n                    };\n\n                    let mut ty_str = String::new();\n                    let datatype_prefix = format!(\"{indent}\\t*\\t\");\n                    datatype(\n                        &mut ty_str,\n                        exporter,\n                        format,\n                        types,\n                        ty,\n                        vec![Cow::Owned(dt_name.to_owned()), idx.to_string().into()],\n                        Some(dt_name),\n                        &datatype_prefix,\n                        Default::default(),\n                    )?;\n\n                    push_jsdoc_property(\n                        s,\n                        &ty_str,\n                        &idx.to_string(),\n                        field.optional,\n                        &field.docs,\n                        field.deprecated.as_ref(),\n                        indent,\n                    );\n                }\n            }\n            Fields::Named(named) => {\n                for (name, field) in &named.fields {\n                    let Some(ty) = field.ty.as_ref() else {\n                        continue;\n                    };\n\n                    let mut ty_str = String::new();\n                    let datatype_prefix = format!(\"{indent}\\t*\\t\");\n                    datatype(\n                        &mut ty_str,\n                        exporter,\n                        format,\n                        types,\n                        ty,\n                        vec![Cow::Owned(dt_name.to_owned()), name.clone()],\n                        Some(dt_name),\n                        &datatype_prefix,\n                        Default::default(),\n                    )?;\n\n                    push_jsdoc_property(\n                        s,\n                        &ty_str,\n                        name,\n                        field.optional,\n                        &field.docs,\n                        field.deprecated.as_ref(),\n                        indent,\n                    );\n                }\n            }\n        },\n        DataType::Enum(enm) => {\n            for (variant_name, variant) in enm.variants.iter().filter(|(_, v)| !v.skip) {\n                let mut one_variant_enum = enm.clone();\n                one_variant_enum\n                    .variants\n                    .retain(|(name, _)| name == variant_name);\n\n                let mut variant_ty = String::new();\n                crate::legacy::enum_datatype(\n                    ExportContext {\n                        cfg: exporter,\n                        path: vec![],\n                    },\n                    &one_variant_enum,\n                    types,\n                    &mut variant_ty,\n                    \"\",\n                    &[],\n                )?;\n\n                push_jsdoc_property(\n                    s,\n                    &variant_ty,\n                    variant_name,\n                    false,\n                    &variant.docs,\n                    variant.deprecated.as_ref(),\n                    indent,\n                );\n            }\n        }\n        DataType::Intersection(types_) => {\n            for ty in types_ {\n                append_jsdoc_properties(s, exporter, format, types, dt_name, ty, indent)?;\n            }\n        }\n        _ => {}\n    }\n\n    Ok(())\n}\n\nfn push_jsdoc_property(\n    s: &mut String,\n    ty: &str,\n    name: &str,\n    optional: bool,\n    docs: &str,\n    deprecated: Option<&Deprecated>,\n    indent: &str,\n) {\n    s.push_str(indent);\n    s.push_str(\"\\t* @property {\");\n    push_jsdoc_type(s, ty, indent);\n    s.push_str(\"} \");\n    s.push_str(&jsdoc_property_name(name, optional));\n\n    if let Some(description) = jsdoc_description(docs, deprecated) {\n        s.push_str(\" - \");\n        s.push_str(&description);\n    }\n\n    s.push('\\n');\n}\n\nfn push_jsdoc_type(s: &mut String, ty: &str, indent: &str) {\n    let mut lines = ty.lines();\n    if let Some(first_line) = lines.next() {\n        s.push_str(first_line);\n    }\n\n    for line in lines {\n        s.push('\\n');\n\n        if line\n            .strip_prefix(indent)\n            .is_some_and(|rest| rest.starts_with(\"\\t*\"))\n        {\n            s.push_str(line);\n        } else {\n            s.push_str(indent);\n            s.push_str(\"\\t* \");\n            s.push_str(line);\n        }\n    }\n}\n\nfn jsdoc_property_name(name: &str, optional: bool) -> String {\n    let name = if is_identifier(name) {\n        name.to_string()\n    } else {\n        format!(\"\\\"{}\\\"\", escape_typescript_string_literal(name))\n    };\n\n    if optional { format!(\"[{name}]\") } else { name }\n}\n\nfn append_typedef_body(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &NamedDataType,\n    indent: &str,\n) -> Result<(), Error> {\n    let name = &dt.name;\n    let mut type_name = String::from(name.as_ref());\n    write_generic_parameters(&mut type_name, exporter, types, &dt.generics)?;\n\n    let mut typedef_ty = String::new();\n    let datatype_prefix = format!(\"{indent}\\t*\\t\");\n    datatype(\n        &mut typedef_ty,\n        exporter,\n        format,\n        types,\n        dt.ty.as_ref().expect(\"named datatype must have a body\"),\n        vec![dt.name.clone()],\n        Some(dt.name.as_ref()),\n        &datatype_prefix,\n        Default::default(),\n    )?;\n\n    if !dt.docs.is_empty() {\n        for line in dt.docs.lines() {\n            s.push_str(indent);\n            s.push_str(\"\\t* \");\n            s.push_str(&escape_jsdoc_text(line));\n            s.push('\\n');\n        }\n        s.push_str(indent);\n        s.push_str(\"\\t*\\n\");\n    }\n\n    if let Some(deprecated) = dt.deprecated.as_ref() {\n        s.push_str(indent);\n        s.push_str(\"\\t* @deprecated\");\n        if let Some(details) = deprecated_details(deprecated) {\n            s.push(' ');\n            s.push_str(&details);\n        }\n        s.push('\\n');\n    }\n\n    s.push_str(indent);\n    s.push_str(\"\\t* @typedef {\");\n    push_jsdoc_type(s, &typedef_ty, indent);\n    s.push_str(\"} \");\n    s.push_str(&type_name);\n    s.push('\\n');\n\n    if let Some(ty) = &dt.ty {\n        append_jsdoc_properties(s, exporter, format, types, dt.name.as_ref(), ty, indent)?;\n    }\n\n    Ok(())\n}\n\nfn write_generic_parameters(\n    s: &mut String,\n    exporter: &Exporter,\n    types: &Types,\n    generics: &[GenericDefinition],\n) -> Result<(), Error> {\n    if generics.is_empty() {\n        return Ok(());\n    }\n\n    s.push('<');\n    for (index, generic) in generics.iter().enumerate() {\n        if index != 0 {\n            s.push_str(\", \");\n        }\n\n        s.push_str(generic.name.as_ref());\n\n        if let Some(default) = &generic.default {\n            let mut rendered_default = String::new();\n            shallow_inline_datatype(\n                &mut rendered_default,\n                exporter,\n                None,\n                types,\n                default,\n                Vec::new(),\n                None,\n                \"\",\n                Default::default(),\n            )?;\n            s.push_str(\" = \");\n            s.push_str(&rendered_default);\n        }\n    }\n    s.push('>');\n\n    Ok(())\n}\n\nfn jsdoc_description(docs: &str, deprecated: Option<&Deprecated>) -> Option<String> {\n    let docs = docs\n        .lines()\n        .map(str::trim)\n        .filter(|line| !line.is_empty())\n        .map(|line| escape_jsdoc_text(line).into_owned())\n        .collect::<Vec<_>>()\n        .join(\" \");\n\n    let deprecated = deprecated.map(|deprecated| {\n        let mut value = String::from(\"@deprecated\");\n        if let Some(details) = deprecated_details(deprecated) {\n            value.push(' ');\n            value.push_str(&escape_jsdoc_text(&details));\n        }\n        value\n    });\n\n    match (docs.is_empty(), deprecated) {\n        (true, None) => None,\n        (true, Some(deprecated)) => Some(deprecated),\n        (false, None) => Some(docs),\n        (false, Some(deprecated)) => Some(format!(\"{docs} {deprecated}\")),\n    }\n}\n\n/// Generate an Typescript string to refer to a specific [`DataType`].\n///\n/// For primitives this will include the literal type but for named type it will contain a reference.\n///\n/// See [`export`] for the list of things to consider when using this.\npub fn reference(\n    exporter: &dyn AsRef<Exporter>,\n    types: &Types,\n    r: &Reference,\n) -> Result<String, Error> {\n    let mut s = String::new();\n    datatype(\n        &mut s,\n        exporter.as_ref(),\n        None,\n        types,\n        &DataType::Reference(r.clone()),\n        vec![],\n        None,\n        \"\",\n        &[],\n    )?;\n    Ok(s)\n}\n\npub(crate) fn datatype_with_inline_attr(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n    location: Vec<Cow<'static, str>>,\n    parent_name: Option<&str>,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n    inline: bool,\n) -> Result<(), Error> {\n    if inline {\n        return shallow_inline_datatype(\n            s,\n            exporter,\n            format,\n            types,\n            dt,\n            location,\n            parent_name,\n            prefix,\n            generics,\n        );\n    }\n\n    datatype(\n        s,\n        exporter,\n        format,\n        types,\n        dt,\n        location,\n        parent_name,\n        prefix,\n        generics,\n    )\n}\n\nfn write_generic_reference(s: &mut String, generic: &GenericReference) {\n    s.push_str(generic.name());\n}\n\nfn scoped_reference_generics(\n    parent_generics: &[(GenericReference, DataType)],\n    reference_generics: &[(GenericReference, DataType)],\n) -> Vec<(GenericReference, DataType)> {\n    parent_generics\n        .iter()\n        .filter(|(parent_generic, _)| {\n            !reference_generics\n                .iter()\n                .any(|(child_generic, _)| child_generic == parent_generic)\n        })\n        .cloned()\n        .collect()\n}\n\nfn named_reference_generics(r: &NamedReference) -> Result<&[(GenericReference, DataType)], Error> {\n    match &r.inner {\n        NamedReferenceType::Reference { generics, .. } => Ok(generics),\n        NamedReferenceType::Inline { .. } => Ok(&[]),\n        NamedReferenceType::Recursive => Ok(&[]),\n    }\n}\n\nfn named_reference_ty<'a>(types: &'a Types, r: &'a NamedReference) -> Result<&'a DataType, Error> {\n    match &r.inner {\n        NamedReferenceType::Reference { .. } => types\n            .get(r)\n            .and_then(|ndt| ndt.ty.as_ref())\n            .ok_or_else(|| Error::dangling_named_reference(format!(\"{r:?}\"))),\n        NamedReferenceType::Inline { dt, .. } => Ok(dt),\n        NamedReferenceType::Recursive => types\n            .get(r)\n            .and_then(|ndt| ndt.ty.as_ref())\n            .ok_or_else(|| Error::infinite_recursive_inline_type(format!(\"{r:?}\"))),\n    }\n}\n\nfn resolve_scoped_generic_default(\n    default: &DataType,\n    scoped_generics: &[(GenericReference, DataType)],\n) -> DataType {\n    match default {\n        DataType::Generic(default) => scoped_generics\n            .iter()\n            .find_map(|(reference, dt)| (reference == default).then_some(dt.clone()))\n            .unwrap_or_else(|| DataType::Generic(default.clone())),\n        default => default.clone(),\n    }\n}\n\nfn resolved_reference_generics(\n    ndt: &specta::datatype::NamedDataType,\n    r: &NamedReference,\n    parent_generics: &[(GenericReference, DataType)],\n) -> Option<(Vec<DataType>, bool, Vec<(GenericReference, DataType)>)> {\n    let reference_generics = named_reference_generics(r).ok()?;\n    let mut scoped_generics = scoped_reference_generics(parent_generics, reference_generics);\n    let mut all_default = true;\n    let mut rendered_generics = Vec::with_capacity(ndt.generics.len());\n\n    for generic in ndt.generics.iter() {\n        let explicit = reference_generics\n            .iter()\n            .find(|(reference, _)| *reference == generic.reference())\n            .map(|(_, dt)| dt.clone());\n\n        let resolved_default = generic\n            .default\n            .as_ref()\n            .map(|default| resolve_scoped_generic_default(default, &scoped_generics));\n\n        let resolved = explicit.or_else(|| resolved_default.clone()).or_else(|| {\n            Some(DataType::Reference(Reference::opaque(\n                crate::opaque::Unknown,\n            )))\n        });\n\n        let resolved = resolved?;\n        all_default &= resolved_default\n            .as_ref()\n            .is_some_and(|default| default == &resolved);\n        scoped_generics.push((generic.reference(), resolved.clone()));\n        rendered_generics.push(resolved);\n    }\n\n    Some((rendered_generics, all_default, scoped_generics))\n}\n\nfn shallow_inline_datatype(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n    location: Vec<Cow<'static, str>>,\n    parent_name: Option<&str>,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    match dt {\n        DataType::Primitive(p) => s.push_str(primitive_dt(p, location)?),\n        DataType::Generic(g) => write_generic_reference(s, g),\n        DataType::List(list) => {\n            let mut inner = String::new();\n            shallow_inline_datatype(\n                &mut inner,\n                exporter,\n                format,\n                types,\n                &list.ty,\n                location,\n                parent_name,\n                prefix,\n                generics,\n            )?;\n\n            let inner = if (inner.contains(' ') && !inner.ends_with('}'))\n                || (inner.contains(' ') && (inner.contains('&') || inner.contains('|')))\n            {\n                format!(\"({inner})\")\n            } else {\n                inner\n            };\n\n            if let Some(length) = list.length {\n                s.push('[');\n                for i in 0..length {\n                    if i != 0 {\n                        s.push_str(\", \");\n                    }\n                    s.push_str(&inner);\n                }\n                s.push(']');\n            } else {\n                write!(s, \"{inner}[]\")?;\n            }\n        }\n        DataType::Map(map) => {\n            let path = map_key_path(&location);\n            map_keys::validate_map_key(map.key_ty(), types, format!(\"{path}.<map_key>\"))?;\n            let rendered_key = map_key_render_type(map.key_ty().clone());\n\n            fn is_exhaustive(dt: &DataType, types: &Types) -> bool {\n                match dt {\n                    DataType::Enum(e) => e.variants.iter().filter(|(_, v)| !v.skip).count() == 0,\n                    DataType::Reference(Reference::Named(r)) => {\n                        match named_reference_ty(types, r) {\n                            Ok(ty) => is_exhaustive(ty, types),\n                            Err(_) => false,\n                        }\n                    }\n                    DataType::Reference(Reference::Opaque(_)) => false,\n                    _ => true,\n                }\n            }\n\n            let exhaustive = is_exhaustive(&rendered_key, types);\n            if !exhaustive {\n                s.push_str(\"Partial<\");\n            }\n\n            s.push_str(\"{ [key in \");\n            map_key_datatype(\n                s,\n                exporter,\n                format,\n                types,\n                &rendered_key,\n                location.clone(),\n                parent_name,\n                prefix,\n                generics,\n            )?;\n            s.push_str(\"]: \");\n            shallow_inline_datatype(\n                s,\n                exporter,\n                format,\n                types,\n                map.value_ty(),\n                location,\n                parent_name,\n                prefix,\n                generics,\n            )?;\n            s.push_str(\" }\");\n\n            if !exhaustive {\n                s.push('>');\n            }\n        }\n        DataType::Nullable(dt) => {\n            let mut inner = String::new();\n            shallow_inline_datatype(\n                &mut inner,\n                exporter,\n                format,\n                types,\n                dt,\n                location,\n                parent_name,\n                prefix,\n                generics,\n            )?;\n\n            s.push_str(&inner);\n            if inner != \"null\" && !inner.ends_with(\" | null\") {\n                s.push_str(\" | null\");\n            }\n        }\n        DataType::Intersection(types_) => intersection_dt(\n            s,\n            exporter,\n            format,\n            types,\n            types_,\n            location,\n            parent_name,\n            prefix,\n            generics,\n            shallow_intersection_part_datatype,\n        )?,\n        DataType::Struct(st) => {\n            crate::legacy::struct_datatype(\n                crate::legacy::ExportContext {\n                    cfg: exporter,\n                    path: vec![],\n                },\n                st,\n                types,\n                s,\n                prefix,\n                generics,\n            )?;\n        }\n        DataType::Enum(enm) => {\n            crate::legacy::enum_datatype(\n                crate::legacy::ExportContext {\n                    cfg: exporter,\n                    path: vec![],\n                },\n                enm,\n                types,\n                s,\n                prefix,\n                generics,\n            )?;\n        }\n        DataType::Tuple(tuple) => match tuple.elements.as_slice() {\n            [] => s.push_str(\"null\"),\n            elements => {\n                s.push('[');\n                for (idx, dt) in elements.iter().enumerate() {\n                    if idx != 0 {\n                        s.push_str(\", \");\n                    }\n                    shallow_inline_datatype(\n                        s,\n                        exporter,\n                        format,\n                        types,\n                        dt,\n                        location.clone(),\n                        parent_name,\n                        prefix,\n                        generics,\n                    )?;\n                }\n                s.push(']');\n            }\n        },\n        DataType::Reference(r) => match r {\n            Reference::Named(r) => {\n                let ty = named_reference_ty(types, r)?;\n                let reference_generics = named_reference_generics(r)?;\n                shallow_inline_datatype(\n                    s,\n                    exporter,\n                    format,\n                    types,\n                    ty,\n                    location,\n                    parent_name,\n                    prefix,\n                    reference_generics,\n                )\n            }\n            Reference::Opaque(_) => {\n                reference_dt(s, exporter, format, types, r, location, prefix, generics)\n            }\n        }?,\n    }\n\n    Ok(())\n}\n\ntype DatatypeRenderer = fn(\n    &mut String,\n    &Exporter,\n    Option<&dyn Format>,\n    &Types,\n    &DataType,\n    Vec<Cow<'static, str>>,\n    Option<&str>,\n    &str,\n    &[(GenericReference, DataType)],\n) -> Result<(), Error>;\n\nfn shallow_intersection_part_datatype(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n    location: Vec<Cow<'static, str>>,\n    parent_name: Option<&str>,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    match dt {\n        DataType::Reference(r) => {\n            reference_dt(s, exporter, format, types, r, location, prefix, generics)\n        }\n        _ => shallow_inline_datatype(\n            s,\n            exporter,\n            format,\n            types,\n            dt,\n            location,\n            parent_name,\n            prefix,\n            generics,\n        ),\n    }\n}\n\nfn intersection_dt(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    parts: &[DataType],\n    location: Vec<Cow<'static, str>>,\n    parent_name: Option<&str>,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n    render: DatatypeRenderer,\n) -> Result<(), Error> {\n    let mut rendered = Vec::with_capacity(parts.len());\n    for part in parts {\n        let mut out = String::new();\n        render(\n            &mut out,\n            exporter,\n            format,\n            types,\n            part,\n            location.clone(),\n            parent_name,\n            prefix,\n            generics,\n        )?;\n        rendered.push(format!(\"({out})\"));\n    }\n\n    s.push_str(&rendered.join(\" & \"));\n    Ok(())\n}\n\n// Internal function to handle inlining without cloning DataType nodes\nfn inline_datatype(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n    location: Vec<Cow<'static, str>>,\n    parent_name: Option<&str>,\n    prefix: &str,\n    depth: usize,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    // Prevent infinite recursion\n    if depth == 25 {\n        return Err(Error::invalid_name(\n            location.join(\".\"),\n            \"Type recursion limit exceeded during inline expansion\",\n        ));\n    }\n\n    match dt {\n        DataType::Primitive(p) => s.push_str(primitive_dt(p, location)?),\n        DataType::Generic(g) => write_generic_reference(s, g),\n        DataType::List(l) => {\n            // Inline the list element type\n            let mut dt_str = String::new();\n            crate::legacy::datatype_inner(\n                crate::legacy::ExportContext {\n                    cfg: exporter,\n                    path: vec![],\n                },\n                &l.ty,\n                types,\n                &mut dt_str,\n                generics,\n            )?;\n\n            let dt_str = if (dt_str.contains(' ') && !dt_str.ends_with('}'))\n                || (dt_str.contains(' ') && (dt_str.contains('&') || dt_str.contains('|')))\n            {\n                format!(\"({dt_str})\")\n            } else {\n                dt_str\n            };\n\n            if let Some(length) = l.length {\n                s.push('[');\n                for n in 0..length {\n                    if n != 0 {\n                        s.push_str(\", \");\n                    }\n                    s.push_str(&dt_str);\n                }\n                s.push(']');\n            } else {\n                write!(s, \"{dt_str}[]\")?;\n            }\n        }\n        DataType::Map(m) => map_dt(s, exporter, format, types, m, location, generics)?,\n        DataType::Nullable(def) => {\n            let mut inner = String::new();\n            inline_datatype(\n                &mut inner,\n                exporter,\n                format,\n                types,\n                def,\n                location,\n                parent_name,\n                prefix,\n                depth + 1,\n                generics,\n            )?;\n\n            s.push_str(&inner);\n            if inner != \"null\" && !inner.ends_with(\" | null\") {\n                s.push_str(\" | null\");\n            }\n        }\n        DataType::Struct(st) => {\n            // If we have generics to resolve, handle the struct inline to preserve context\n            if !generics.is_empty() {\n                use specta::datatype::Fields;\n                match &st.fields {\n                    Fields::Unit => s.push_str(\"null\"),\n                    Fields::Named(named) => {\n                        s.push('{');\n                        let mut has_field = false;\n                        for (key, field) in &named.fields {\n                            // Skip fields without a type (e.g., flattened or skipped fields)\n                            let Some(field_ty) = field.ty.as_ref() else {\n                                continue;\n                            };\n\n                            has_field = true;\n                            s.push('\\n');\n                            s.push_str(prefix);\n                            s.push('\\t');\n                            s.push_str(key);\n                            s.push_str(\": \");\n                            inline_datatype(\n                                s,\n                                exporter,\n                                format,\n                                types,\n                                field_ty,\n                                location.clone(),\n                                parent_name,\n                                prefix,\n                                depth + 1,\n                                generics,\n                            )?;\n                            s.push(',');\n                        }\n\n                        if has_field {\n                            s.push('\\n');\n                            s.push_str(prefix);\n                        }\n\n                        s.push('}');\n                    }\n                    Fields::Unnamed(_) => {\n                        // For unnamed fields, fall back to legacy handling\n                        crate::legacy::struct_datatype(\n                            crate::legacy::ExportContext {\n                                cfg: exporter,\n                                path: vec![],\n                            },\n                            st,\n                            types,\n                            s,\n                            prefix,\n                            generics,\n                        )?\n                    }\n                }\n            } else {\n                // No generics, use legacy path\n                crate::legacy::struct_datatype(\n                    crate::legacy::ExportContext {\n                        cfg: exporter,\n                        path: vec![],\n                    },\n                    st,\n                    types,\n                    s,\n                    prefix,\n                    Default::default(),\n                )?\n            }\n        }\n        DataType::Enum(e) => enum_dt(s, exporter, types, e, prefix, generics)?,\n        DataType::Tuple(t) => tuple_dt(s, exporter, types, t, generics)?,\n        DataType::Intersection(types_) => intersection_dt(\n            s,\n            exporter,\n            format,\n            types,\n            types_,\n            location,\n            parent_name,\n            prefix,\n            generics,\n            datatype,\n        )?,\n        DataType::Reference(r) => {\n            if let Reference::Named(r) = r\n                && let Ok(ty) = named_reference_ty(types, r)\n            {\n                let reference_generics = named_reference_generics(r)?;\n                inline_datatype(\n                    s,\n                    exporter,\n                    format,\n                    types,\n                    ty,\n                    location,\n                    parent_name,\n                    prefix,\n                    depth + 1,\n                    reference_generics,\n                )?;\n            } else {\n                reference_dt(s, exporter, format, types, r, location, prefix, generics)?;\n            }\n        }\n    }\n\n    Ok(())\n}\n\npub(crate) fn datatype(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n    location: Vec<Cow<'static, str>>,\n    _parent_name: Option<&str>,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    // TODO: Validating the variant from `dt` can be flattened\n\n    match dt {\n        DataType::Primitive(p) => s.push_str(primitive_dt(p, location)?),\n        DataType::List(l) => list_dt(s, exporter, types, l, generics)?,\n        DataType::Map(m) => map_dt(s, exporter, format, types, m, location, generics)?,\n        DataType::Nullable(def) => {\n            // TODO: Replace legacy stuff\n            let mut inner = String::new();\n            crate::legacy::datatype_inner(\n                crate::legacy::ExportContext {\n                    cfg: exporter,\n                    path: vec![],\n                },\n                def,\n                types,\n                &mut inner,\n                generics,\n            )?;\n\n            s.push_str(&inner);\n            if inner != \"null\" && !inner.ends_with(\" | null\") {\n                s.push_str(\" | null\");\n            }\n\n            // datatype(s, ts, types, &*t, location, state)?;\n            // let or_null = \" | null\";\n            // if !s.ends_with(or_null) {\n            //     s.push_str(or_null);\n            // }\n        }\n        DataType::Struct(st) => {\n            // location.push(st.name().clone());\n            // fields_dt(s, ts, types, st.name(), &&st.fields, location, state)?\n\n            crate::legacy::struct_datatype(\n                crate::legacy::ExportContext {\n                    cfg: exporter,\n                    path: vec![],\n                },\n                st,\n                types,\n                s,\n                prefix,\n                generics,\n            )?\n        }\n        DataType::Enum(e) => enum_dt(s, exporter, types, e, prefix, generics)?,\n        DataType::Tuple(t) => tuple_dt(s, exporter, types, t, generics)?,\n        DataType::Intersection(types_) => {\n            for (idx, ty) in types_.iter().enumerate() {\n                if idx != 0 {\n                    s.push_str(\" & \");\n                }\n                datatype(\n                    s,\n                    exporter,\n                    format,\n                    types,\n                    ty,\n                    location.clone(),\n                    _parent_name,\n                    prefix,\n                    generics,\n                )?;\n            }\n        }\n        DataType::Generic(g) => write_generic_reference(s, g),\n        DataType::Reference(r) => {\n            reference_dt(s, exporter, format, types, r, location, prefix, generics)?\n        }\n    };\n\n    Ok(())\n}\n\nfn primitive_dt(p: &Primitive, location: Vec<Cow<'static, str>>) -> Result<&'static str, Error> {\n    use Primitive::*;\n\n    Ok(match p {\n        i8 | i16 | i32 | u8 | u16 | u32 => \"number\",\n        // `null` comes from `NaN`, `Infinity` and `-Infinity`. Is done by JS APIs and Serde JSON.\n        f16 | f32 | f64 /* this looks wrong but `f64` is the direct equivalent of `number` */ => \"number | null\",\n        usize | isize | i64 | u64 | i128 | u128 | f128 => {\n            return Err(Error::bigint_forbidden(location.join(\".\")));\n        }\n        Primitive::bool => \"boolean\",\n        str | char => \"string\",\n    })\n}\n\nfn list_dt(\n    s: &mut String,\n    exporter: &Exporter,\n    types: &Types,\n    l: &List,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    // TODO: This is the legacy stuff\n    {\n        let mut dt = String::new();\n        crate::legacy::datatype_inner(\n            crate::legacy::ExportContext {\n                cfg: exporter,\n                path: vec![],\n            },\n            &l.ty,\n            types,\n            &mut dt,\n            generics,\n        )?;\n\n        let dt = if (dt.contains(' ') && !dt.ends_with('}'))\n          // This is to do with maintaining order of operations.\n          // Eg `{} | {}` must be wrapped in parens like `({} | {})[]` but `{}` doesn't cause `{}[]` is valid\n          || (dt.contains(' ') && (dt.contains('&') || dt.contains('|')))\n        {\n            format!(\"({dt})\")\n        } else {\n            dt\n        };\n\n        if let Some(length) = l.length {\n            s.push('[');\n\n            for n in 0..length {\n                if n != 0 {\n                    s.push_str(\", \");\n                }\n\n                s.push_str(&dt);\n            }\n\n            s.push(']');\n        } else {\n            write!(s, \"{dt}[]\")?;\n        }\n    }\n\n    //     // We use `T[]` instead of `Array<T>` to avoid issues with circular references.\n\n    //     let mut result = String::new();\n    //     datatype(&mut result, ts, types, &&l.ty, location, state)?;\n    //     let result = if (result.contains(' ') && !result.ends_with('}'))\n    //         // This is to do with maintaining order of operations.\n    //         // Eg `{} | {}` must be wrapped in parens like `({} | {})[]` but `{}` doesn't cause `{}[]` is valid\n    //         || (result.contains(' ') && (result.contains('&') || result.contains('|')))\n    //     {\n    //         format!(\"({result})\")\n    //     } else {\n    //         result\n    //     };\n\n    //     match l.length {\n    //         Some(len) => {\n    //             s.push_str(\"[\");\n    //             iter_with_sep(\n    //                 s,\n    //                 0..len,\n    //                 |s, _| {\n    //                     s.push_str(&result);\n    //                     Ok(())\n    //                 },\n    //                 \", \",\n    //             )?;\n    //             s.push_str(\"]\");\n    //         }\n    //         None => {\n    //             s.push_str(&result);\n    //             s.push_str(\"[]\");\n    //         }\n    //     }\n\n    Ok(())\n}\n\nfn map_key_datatype(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    key_ty: &DataType,\n    location: Vec<Cow<'static, str>>,\n    parent_name: Option<&str>,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    match key_ty {\n        DataType::Reference(r) => {\n            reference_dt(s, exporter, format, types, r, location, prefix, generics)\n        }\n        key_ty => shallow_inline_datatype(\n            s,\n            exporter,\n            format,\n            types,\n            key_ty,\n            location,\n            parent_name,\n            prefix,\n            generics,\n        ),\n    }\n}\n\nfn map_dt(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    m: &Map,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    let path = map_key_path(&location);\n    map_keys::validate_map_key(m.key_ty(), types, format!(\"{path}.<map_key>\"))?;\n\n    {\n        fn is_exhaustive(dt: &DataType, types: &Types) -> bool {\n            match dt {\n                DataType::Enum(e) => e.variants.iter().filter(|(_, v)| !v.skip).count() == 0,\n                DataType::Reference(Reference::Named(r)) => match named_reference_ty(types, r) {\n                    Ok(ty) => is_exhaustive(ty, types),\n                    Err(_) => false,\n                },\n                DataType::Reference(Reference::Opaque(_)) => false,\n                _ => true,\n            }\n        }\n\n        let resolved_key = map_key_render_type(m.key_ty().clone());\n        let is_exhaustive = is_exhaustive(&resolved_key, types);\n\n        // We use `{ [key in K]: V }` instead of `Record<K, V>` to avoid issues with circular references.\n        // Wrapped in Partial<> because otherwise TypeScript would enforce exhaustiveness.\n        if !is_exhaustive {\n            s.push_str(\"Partial<\");\n        }\n        s.push_str(\"{ [key in \");\n        map_key_datatype(\n            s,\n            exporter,\n            format,\n            types,\n            &resolved_key,\n            location,\n            None,\n            \"\",\n            generics,\n        )?;\n        s.push_str(\"]: \");\n        crate::legacy::datatype_inner(\n            crate::legacy::ExportContext {\n                cfg: exporter,\n                path: vec![],\n            },\n            m.value_ty(),\n            types,\n            s,\n            generics,\n        )?;\n        s.push_str(\" }\");\n        if !is_exhaustive {\n            s.push('>');\n        }\n    }\n    // assert!(flattening, \"todo: map flattening\");\n\n    // // We use `{ [key in K]: V }` instead of `Record<K, V>` to avoid issues with circular references.\n    // // Wrapped in Partial<> because otherwise TypeScript would enforce exhaustiveness.\n    // s.push_str(\"Partial<{ [key in \");\n    // datatype(s, ts, types, m.key_ty(), location.clone(), state)?;\n    // s.push_str(\"]: \");\n    // datatype(s, ts, types, m.value_ty(), location, state)?;\n    // s.push_str(\" }>\");\n    Ok(())\n}\n\nfn map_key_path(location: &[Cow<'static, str>]) -> String {\n    if location.is_empty() {\n        return \"HashMap\".to_string();\n    }\n\n    location.join(\".\")\n}\n\nfn map_key_render_type(dt: DataType) -> DataType {\n    if matches!(dt, DataType::Primitive(Primitive::bool)) {\n        return bool_key_literal_datatype();\n    }\n\n    dt\n}\n\nfn bool_key_literal_datatype() -> DataType {\n    let mut bool_enum = Enum::default();\n    bool_enum\n        .variants\n        .push((Cow::Borrowed(\"true\"), Variant::unit()));\n    bool_enum\n        .variants\n        .push((Cow::Borrowed(\"false\"), Variant::unit()));\n    DataType::Enum(bool_enum)\n}\n\nfn enum_dt(\n    s: &mut String,\n    exporter: &Exporter,\n    types: &Types,\n    e: &Enum,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    // TODO: Drop legacy stuff\n    {\n        crate::legacy::enum_datatype(\n            crate::legacy::ExportContext {\n                cfg: exporter,\n                path: vec![],\n            },\n            e,\n            types,\n            s,\n            prefix,\n            generics,\n        )?\n    }\n\n    //     assert!(!state.flattening, \"todo: support for flattening enums\"); // TODO\n\n    //     location.push(e.name().clone());\n\n    //     let variants = &e.variants.iter().filter(|(_, variant)| !variant.skip);\n\n    //     if variants.clone().next().is_none()\n    //     /* is_empty */\n    //     {\n    //         s.push_str(\"never\");\n    //         return Ok(());\n    //     }\n\n    //     let mut variants = variants\n    //         .into_iter()\n    //         .map(|(variant_name, variant)| {\n    //             let mut s = String::new();\n    //             let mut location = location.clone();\n    //             location.push(variant_name.clone());\n\n    //             // TODO\n    //             // variant.deprecated.as_ref()\n    //             // &variant.docs\n\n    //             match &e.repr() {\n    //                 EnumRepr::Untagged => {\n    //                     fields_dt(&mut s, ts, types, variant_name, variant.fields(), location, state)?;\n    //                 },\n    //                 EnumRepr::External => match variant.fields() {\n    //                     Fields::Unit => {\n    //                         s.push_str(\"\\\"\");\n    //                         s.push_str(variant_name);\n    //                         s.push_str(\"\\\"\");\n    //                     },\n    //                     Fields::Unnamed(n) if n.fields().into_iter().filter(|f| f.ty().is_some()).next().is_none() /* is_empty */ => {\n    //                         // We detect `#[specta(skip)]` by checking if the unfiltered fields are also empty.\n    //                         if n.fields().is_empty() {\n    //                             s.push_str(\"{ \");\n    //                             s.push_str(&escape_key(variant_name));\n    //                             s.push_str(\": [] }\");\n    //                         } else {\n    //                             s.push_str(\"\\\"\");\n    //                             s.push_str(variant_name);\n    //                             s.push_str(\"\\\"\");\n    //                         }\n    //                     }\n    //                     _ => {\n    //                         s.push_str(\"{ \");\n    //                         s.push_str(&escape_key(variant_name));\n    //                         s.push_str(\": \");\n    //                         fields_dt(&mut s, ts, types, variant_name, variant.fields(), location, state)?;\n    //                         s.push_str(\" }\");\n    //                     }\n    //                 }\n    //                 EnumRepr::Internal { tag } => {\n    //                     // TODO: Unconditionally wrapping in `(` kinda sucks.\n    //                     write!(s, \"({{ {}: \\\"{}\\\"\", escape_key(tag), variant_name).expect(\"infallible\");\n\n    //                     match variant.fields() {\n    //                         Fields::Unit => {\n    //                              s.push_str(\" })\");\n    //                         },\n    //                         // Fields::Unnamed(f) if f.fields.iter().filter(|f| f.ty().is_some()).count() == 1 => {\n    //                         //     // let mut fields = f.fields().into_iter().filter(|f| f.ty().is_some());\n\n    //                         //      s.push_str(\"______\"); // TODO\n\n    //                         // //     // if fields.len\n\n    //                         // //     // TODO: Having no fields are skipping is valid\n    //                         // //     // TODO: Having more than 1 field is invalid\n\n    //                         // //     // TODO: Check if the field's type is object-like and can be merged.\n\n    //                         //     // todo!();\n    //                         // }\n    //                         f => {\n    //                             // TODO: Cleanup and explain this\n    //                             let mut skip_join = false;\n    //                             if let Fields::Unnamed(f) = &f {\n    //                                 let mut fields = f.fields.iter().filter(|f| f.ty().is_some());\n    //                                 if let (Some(v), None) = (fields.next(), fields.next()) {\n    //                                     if let Some(DataType::Tuple(tuple)) = &v.ty() {\n    //                                         skip_join = &tuple.elements.len() == 0;\n    //                                     }\n    //                                 }\n    //                             }\n\n    //                             if skip_join {\n    //                                 s.push_str(\" })\");\n    //                             } else {\n    //                                 s.push_str(\" } & \");\n\n    //                                 // TODO: Can we be smart enough to omit the `{` and `}` if this is an object\n    //                                 fields_dt(&mut s, ts, types, variant_name, f, location, state)?;\n    //                                 s.push_str(\")\");\n    //                             }\n\n    //                             // match f {\n    //                             //     // Checked above\n    //                             //     Fields::Unit => unreachable!(),\n    //                             //     Fields::Unnamed(unnamed_fields) => unnamed_fields,\n    //                             //     Fields::Named(named_fields) => todo!(),\n    //                             // }\n\n    //                             // println!(\"{:?}\", f); // TODO: If object we can join in fields like this, else `} & ...`\n    //                             // flattened_fields_dt(&mut s, ts, types, variant_name, f, location, false)?; // TODO: Fix `flattening`\n\n    //                         }\n    //                     }\n\n    //                 }\n    //                 EnumRepr::Adjacent { tag, content } => {\n    //                     write!(s, \"{{ {}: \\\"{}\\\"\", escape_key(tag), variant_name).expect(\"infallible\");\n\n    //                     match variant.fields() {\n    //                         Fields::Unit => {},\n    //                         f => {\n    //                             write!(s, \"; {}: \", escape_key(content)).expect(\"infallible\");\n    //                             fields_dt(&mut s, ts, types, variant_name, f, location, state)?;\n    //                         }\n    //                     }\n\n    //                     s.push_str(\" }\");\n    //                 }\n    //             }\n\n    //             Ok(s)\n    //         })\n    //         .collect::<Result<Vec<String>, Error>>()?;\n\n    //     // TODO: Instead of deduplicating on the string, we should do it in the AST.\n    //     // This would avoid the intermediate `String` allocations and be more reliable.\n    //     variants.dedup();\n\n    //     iter_with_sep(\n    //         s,\n    //         variants,\n    //         |s, v| {\n    //             s.push_str(&v);\n    //             Ok(())\n    //         },\n    //         \" | \",\n    //     )?;\n\n    Ok(())\n}\n\n// fn fields_dt(\n//     s: &mut String,\n//     ts: &Typescript,\n//     types: &Types,\n//     name: &Cow<'static, str>,\n//     f: &Fields,\n//     location: Vec<Cow<'static, str>>,\n//     state: State,\n// ) -> Result<(), Error> {\n//     match f {\n//         Fields::Unit => {\n//             assert!(!state.flattening, \"todo: support for flattening enums\"); // TODO\n//             s.push_str(\"null\")\n//         }\n//         Fields::Unnamed(f) => {\n//             assert!(!state.flattening, \"todo: support for flattening enums\"); // TODO\n//             let mut fields = f.fields().into_iter().filter(|f| f.ty().is_some());\n\n//             // A single field usually becomes `T`.\n//             // but when `#[serde(skip)]` is used it should be `[T]`.\n//             if fields.clone().count() == 1 && f.fields.len() == 1 {\n//                 return field_dt(\n//                     s,\n//                     ts,\n//                     types,\n//                     None,\n//                     fields.next().expect(\"checked above\"),\n//                     location,\n//                     state,\n//                 );\n//             }\n\n//             s.push_str(\"[\");\n//             iter_with_sep(\n//                 s,\n//                 fields.enumerate(),\n//                 |s, (i, f)| {\n//                     let mut location = location.clone();\n//                     location.push(i.to_string().into());\n\n//                     field_dt(s, ts, types, None, f, location, state)\n//                 },\n//                 \", \",\n//             )?;\n//             s.push_str(\"]\");\n//         }\n//         Fields::Named(f) => {\n//             let fields = f.fields().into_iter().filter(|(_, f)| f.ty().is_some());\n//             if fields.clone().next().is_none()\n//             /* is_empty */\n//             {\n//                 assert!(!state.flattening, \"todo: support for flattening enums\"); // TODO\n\n//                 if let Some(tag) = f.tag() {\n//                     if !state.flattening {}\n\n//                     write!(s, \"{{ {}: \\\"{name}\\\" }}\", escape_key(tag)).expect(\"infallible\");\n//                 } else {\n//                     s.push_str(\"Record<string, never>\");\n//                 }\n\n//                 return Ok(());\n//             }\n\n//             if !state.flattening {\n//                 s.push_str(\"{ \");\n//             }\n//             if let Some(tag) = &f.tag() {\n//                 write!(s, \"{}: \\\"{name}\\\"; \", escape_key(tag)).expect(\"infallible\");\n//             }\n\n//             iter_with_sep(\n//                 s,\n//                 fields,\n//                 |s, (key, f)| {\n//                     let mut location = location.clone();\n//                     location.push(key.clone());\n\n//                     field_dt(s, ts, types, Some(key), f, location, state)\n//                 },\n//                 \"; \",\n//             )?;\n//             if !state.flattening {\n//                 s.push_str(\" }\");\n//             }\n//         }\n//     }\n//     Ok(())\n// }\n\n// // TODO: Remove this to avoid so much duplicate logic\n// fn flattened_fields_dt(\n//     s: &mut String,\n//     ts: &Typescript,\n//     types: &Types,\n//     name: &Cow<'static, str>,\n//     f: &Fields,\n//     location: Vec<Cow<'static, str>>,\n//     state: State,\n// ) -> Result<(), Error> {\n//     match f {\n//         Fields::Unit => todo!(), // s.push_str(\"null\"),\n//         Fields::Unnamed(f) => {\n//             // TODO: Validate flattening?\n\n//             let mut fields = f.fields().into_iter().filter(|f| f.ty().is_some());\n\n//             // A single field usually becomes `T`.\n//             // but when `#[serde(skip)]` is used it should be `[T]`.\n//             if fields.clone().count() == 1 && f.fields.len() == 1 {\n//                 return field_dt(\n//                     s,\n//                     ts,\n//                     types,\n//                     None,\n//                     fields.next().expect(\"checked above\"),\n//                     location,\n//                     state,\n//                 );\n//             }\n\n//             s.push_str(\"[\");\n//             iter_with_sep(\n//                 s,\n//                 fields.enumerate(),\n//                 |s, (i, f)| {\n//                     let mut location = location.clone();\n//                     location.push(i.to_string().into());\n\n//                     field_dt(s, ts, types, None, f, location, state)\n//                 },\n//                 \", \",\n//             )?;\n//             s.push_str(\"]\");\n//         }\n//         Fields::Named(f) => {\n//             let fields = f.fields().into_iter().filter(|(_, f)| f.ty().is_some());\n//             if fields.clone().next().is_none()\n//             /* is_empty */\n//             {\n//                 if let Some(tag) = f.tag() {\n//                     write!(s, \"{{ {}: \\\"{name}\\\" }}\", escape_key(tag)).expect(\"infallible\");\n//                 } else {\n//                     s.push_str(\"Record<string, never>\");\n//                 }\n\n//                 return Ok(());\n//             }\n\n//             // s.push_str(\"{ \"); // TODO\n//             if let Some(tag) = &f.tag() {\n//                 write!(s, \"{}: \\\"{name}\\\"; \", escape_key(tag)).expect(\"infallible\");\n//             }\n\n//             iter_with_sep(\n//                 s,\n//                 fields,\n//                 |s, (key, f)| {\n//                     let mut location = location.clone();\n//                     location.push(key.clone());\n\n//                     field_dt(s, ts, types, Some(key), f, location, state)\n//                 },\n//                 \"; \",\n//             )?;\n//             // s.push_str(\" }\"); // TODO\n//         }\n//     }\n//     Ok(())\n// }\n\n// fn field_dt(\n//     s: &mut String,\n//     ts: &Typescript,\n//     types: &Types,\n//     key: Option<&Cow<'static, str>>,\n//     f: &Field,\n//     location: Vec<Cow<'static, str>>,\n//     state: State,\n// ) -> Result<(), Error> {\n//     let Some(ty) = f.ty() else {\n//         // These should be filtered out before getting here.\n//         unreachable!()\n//     };\n\n//     // TODO\n//     // field.deprecated.as_ref(),\n//     // &field.docs,\n\n//     let ty = if f.inline() {\n//         specta::datatype::inline_dt(types, ty.clone())\n//     } else {\n//         ty.clone()\n//     };\n\n//     if !f.flatten() {\n//         if let Some(key) = key {\n//             s.push_str(&*escape_key(key));\n//             // https://github.com/specta-rs/rspc/issues/100#issuecomment-1373092211\n//             if f.optional() {\n//                 s.push_str(\"?\");\n//             }\n//             s.push_str(\": \");\n//         }\n//     } else {\n//         // TODO: We need to validate the inner type can be flattened safely???\n\n//         //     data\n\n//         //     match ty {\n//         //         DataType::Any => todo!(),\n//         //         DataType::Unknown => todo!(),\n//         //         DataType::Primitive(primitive_type) => todo!(),\n//         //         DataType::Literal(literal_type) => todo!(),\n//         //         DataType::List(list) => todo!(),\n//         //         DataType::Map(map) => todo!(),\n//         //         DataType::Nullable(data_type) => todo!(),\n//         //         DataType::Struct(st) => {\n//         //             // location.push(st.name().clone()); // TODO\n//         //             flattened_fields_dt(s, ts, types, st.name(), &&st.fields, location)?\n//         //         }\n\n//         //         // flattened_fields_dt(s, ts, types, &ty, location)?,\n//         //         DataType::Enum(enum_type) => todo!(),\n//         //         DataType::Tuple(tuple_type) => todo!(),\n//         //         DataType::Reference(reference) => todo!(),\n//         //         DataType::Generic(generic_type) => todo!(),\n//         //     };\n//     }\n\n//     // TODO: Only flatten when object is inline?\n\n//     datatype(\n//         s,\n//         ts,\n//         types,\n//         &ty,\n//         location,\n//         State {\n//             flattening: state.flattening || f.flatten(),\n//         },\n//     )?;\n\n//     // TODO: This is not always correct but is it ever correct?\n//     // If we can't use `?` (Eg. in a tuple) we manually join it.\n//     // if key.is_none() && f.optional() {\n//     //     s.push_str(\" | undefined\");\n//     // }\n\n//     Ok(())\n// }\n\nfn tuple_dt(\n    s: &mut String,\n    exporter: &Exporter,\n    types: &Types,\n    t: &Tuple,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    {\n        s.push_str(&crate::legacy::tuple_datatype(\n            crate::legacy::ExportContext {\n                cfg: exporter,\n                path: vec![],\n            },\n            t,\n            types,\n            generics,\n        )?);\n    }\n\n    // match &t.elements()[..] {\n    //     [] => s.push_str(\"null\"),\n    //     elems => {\n    //         s.push_str(\"[\");\n    //         iter_with_sep(\n    //             s,\n    //             elems.into_iter().enumerate(),\n    //             |s, (i, dt)| {\n    //                 let mut location = location.clone();\n    //                 location.push(i.to_string().into());\n\n    //                 datatype(s, ts, types, &dt, location, state)\n    //             },\n    //             \", \",\n    //         )?;\n    //         s.push_str(\"]\");\n    //     }\n    // }\n    Ok(())\n}\n\nfn reference_dt(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    r: &Reference,\n    location: Vec<Cow<'static, str>>,\n    prefix: &str,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    match r {\n        Reference::Named(r) => match &r.inner {\n            NamedReferenceType::Reference { .. } => {\n                reference_named_dt(s, exporter, types, r, generics)\n            }\n            NamedReferenceType::Inline { dt, .. } => inline_datatype(\n                s, exporter, format, types, dt, location, None, prefix, 0, generics,\n            ),\n            NamedReferenceType::Recursive => reference_named_dt(s, exporter, types, r, generics),\n        },\n        Reference::Opaque(r) => reference_opaque_dt(s, exporter, format, types, r),\n    }\n}\n\nfn reference_opaque_dt(\n    s: &mut String,\n    exporter: &Exporter,\n    format: Option<&dyn Format>,\n    types: &Types,\n    r: &OpaqueReference,\n) -> Result<(), Error> {\n    if let Some(def) = r.downcast_ref::<opaque::Define>() {\n        s.push_str(&def.0);\n        return Ok(());\n    } else if r.downcast_ref::<opaque::Any>().is_some() {\n        s.push_str(\"any\");\n        return Ok(());\n    } else if r.downcast_ref::<opaque::Unknown>().is_some() {\n        s.push_str(\"unknown\");\n        return Ok(());\n    } else if r.downcast_ref::<opaque::Never>().is_some() {\n        s.push_str(\"never\");\n        return Ok(());\n    } else if r.downcast_ref::<opaque::Number>().is_some() {\n        s.push_str(\"number\");\n        return Ok(());\n    } else if let Some(def) = r.downcast_ref::<Branded>() {\n        if let Some(branded_type) = exporter\n            .branded_type_impl\n            .as_ref()\n            .map(|builder| {\n                (builder.0)(\n                    BrandedTypeExporter {\n                        exporter,\n                        format,\n                        types,\n                    },\n                    def,\n                )\n            })\n            .transpose()?\n        {\n            s.push_str(branded_type.as_ref());\n            return Ok(());\n        }\n\n        // TODO: Build onto `s` instead of appending a separate string\n        match def.ty() {\n            DataType::Reference(r) => reference_dt(s, exporter, format, types, r, vec![], \"\", &[])?,\n            ty => inline_datatype(s, exporter, format, types, ty, vec![], None, \"\", 0, &[])?,\n        }\n        s.push_str(r#\" & { { readonly __brand: \"\"#);\n        s.push_str(def.brand());\n        s.push_str(\"\\\" }\");\n        return Ok(());\n    }\n\n    Err(Error::unsupported_opaque_reference(r.clone()))\n}\n\nfn reference_named_dt(\n    s: &mut String,\n    exporter: &Exporter,\n    types: &Types,\n    r: &NamedReference,\n    generics: &[(GenericReference, DataType)],\n) -> Result<(), Error> {\n    // TODO: Legacy stuff\n    {\n        let ndt = types\n            .get(r)\n            .ok_or_else(|| Error::dangling_named_reference(format!(\"{r:?}\")))?;\n        // We check it's valid before tracking\n        crate::references::track_nr(r);\n\n        let name = match exporter.layout {\n            Layout::ModulePrefixedName => {\n                let mut s = ndt.module_path.split(\"::\").collect::<Vec<_>>().join(\"_\");\n                s.push('_');\n                s.push_str(&ndt.name);\n                Cow::Owned(s)\n            }\n            Layout::Namespaces => {\n                if ndt.module_path.is_empty() {\n                    ndt.name.clone()\n                } else {\n                    let mut path =\n                        ndt.module_path\n                            .split(\"::\")\n                            .fold(\"$s$.\".to_string(), |mut s, segment| {\n                                s.push_str(segment);\n                                s.push('.');\n                                s\n                            });\n                    path.push_str(&ndt.name);\n                    Cow::Owned(path)\n                }\n            }\n            Layout::Files => {\n                let current_module_path =\n                    crate::references::current_module_path().unwrap_or_default();\n\n                if ndt.module_path == current_module_path {\n                    ndt.name.clone()\n                } else {\n                    let mut path = crate::exporter::module_alias(&ndt.module_path);\n                    path.push('.');\n                    path.push_str(&ndt.name);\n                    Cow::Owned(path)\n                }\n            }\n            _ => ndt.name.clone(),\n        };\n\n        let (rendered_generics, omit_generics, scoped_generics) =\n            resolved_reference_generics(ndt, r, generics)\n                .ok_or_else(|| Error::dangling_named_reference(format!(\"{r:?}\")))?;\n\n        s.push_str(&name);\n        if !omit_generics && !rendered_generics.is_empty() {\n            s.push('<');\n\n            for (i, dt) in rendered_generics.iter().enumerate() {\n                if i != 0 {\n                    s.push_str(\", \");\n                }\n\n                crate::legacy::datatype_inner(\n                    crate::legacy::ExportContext {\n                        cfg: exporter,\n                        path: vec![],\n                    },\n                    dt,\n                    types,\n                    s,\n                    &scoped_generics,\n                )?;\n            }\n\n            s.push('>');\n        }\n    }\n\n    //     let ndt = types\n    //         .get(r.sid())\n    //         // Should be impossible without a bug in Specta.\n    //         .unwrap_or_else(|| panic!(\"Missing {:?} in `Types`\", r.sid()));\n\n    //     if r.inline() {\n    //         todo!(\"inline reference!\");\n    //     }\n\n    //     s.push_str(&ndt.name);\n    //     // TODO: We could possible break this out, the root `export` function also has to emit generics.\n    //     match r.generics()() {\n    //         [] => {}\n    //         generics => {\n    //             s.push('<');\n    //             // TODO: Should we push a location for which generic?\n    //             iter_with_sep(\n    //                 s,\n    //                 generics,\n    //                 |s, dt| datatype(s, ts, types, &dt, location.clone(), state),\n    //                 \", \",\n    //             )?;\n    //             s.push('>');\n    //         }\n    //     }\n\n    Ok(())\n}\n\n// fn validate_name(\n//     ident: &Cow<'static, str>,\n//     location: &Vec<Cow<'static, str>>,\n// ) -> Result<(), Error> {\n//     // TODO: Use a perfect hash-map for faster lookups?\n//     if let Some(name) = RESERVED_TYPE_NAMES.iter().find(|v| **v == ident) {\n//         return Err(Error::ForbiddenName {\n//             path: location.join(\".\"),\n//             name,\n//         });\n//     }\n\n//     if ident.is_empty() {\n//         return Err(Error::InvalidName {\n//             path: location.join(\".\"),\n//             name: ident.clone(),\n//         });\n//     }\n\n//     if let Some(first_char) = ident.chars().next() {\n//         if !first_char.is_alphabetic() && first_char != '_' {\n//             return Err(Error::InvalidName {\n//                 path: location.join(\".\"),\n//                 name: ident.clone(),\n//             });\n//         }\n//     }\n\n//     if ident\n//         .find(|c: char| !c.is_alphanumeric() && c != '_')\n//         .is_some()\n//     {\n//         return Err(Error::InvalidName {\n//             path: location.join(\".\"),\n//             name: ident.clone(),\n//         });\n//     }\n\n//     Ok(())\n// }\n\n// fn escape_key(name: &Cow<'static, str>) -> Cow<'static, str> {\n//     let needs_escaping = name\n//         .chars()\n//         .all(|c| c.is_alphanumeric() || c == '_' || c == '$')\n//         && name\n//             .chars()\n//             .next()\n//             .map(|first| !first.is_numeric())\n//             .unwrap_or(true);\n\n//     if !needs_escaping {\n//         format!(r#\"\"{name}\"\"#).into()\n//     } else {\n//         name.clone()\n//     }\n// }\n\n// fn comment() {\n//     // TODO: Different JSDoc modes\n\n//     // TODO: Regular comments\n//     // TODO: Deprecated\n\n//     // TODO: When enabled: arguments, result types\n// }\n\n// /// Iterate with separate and error handling\n// fn iter_with_sep<T>(\n//     s: &mut String,\n//     i: impl IntoIterator<Item = T>,\n//     mut item: impl FnMut(&mut String, T) -> Result<(), Error>,\n//     sep: &'static str,\n// ) -> Result<(), Error> {\n//     for (i, e) in i.into_iter().enumerate() {\n//         if i != 0 {\n//             s.push_str(sep);\n//         }\n//         (item)(s, e)?;\n//     }\n//     Ok(())\n// }\n"
  },
  {
    "path": "specta-typescript/src/references.rs",
    "content": "use std::{cell::RefCell, collections::HashSet};\n\nuse specta::datatype::NamedReference;\n\nthread_local! {\n    static REFERENCED_TYPES: RefCell<Option<Vec<HashSet<NamedReference>>>> = const { RefCell::new(None) };\n    static MODULE_PATH_CONTEXT: RefCell<Vec<String>> = const { RefCell::new(Vec::new()) };\n}\n\npub(crate) fn with_module_path<R>(module_path: &str, func: impl FnOnce() -> R) -> R {\n    struct Guard;\n    impl Drop for Guard {\n        fn drop(&mut self) {\n            MODULE_PATH_CONTEXT.with_borrow_mut(|ctx| {\n                ctx.pop();\n            });\n        }\n    }\n\n    MODULE_PATH_CONTEXT.with_borrow_mut(|ctx| {\n        ctx.push(module_path.to_string());\n    });\n\n    let guard = Guard;\n    let result = func();\n    std::mem::forget(guard);\n    MODULE_PATH_CONTEXT.with_borrow_mut(|ctx| {\n        ctx.pop();\n    });\n\n    result\n}\n\npub(crate) fn current_module_path() -> Option<String> {\n    MODULE_PATH_CONTEXT.with_borrow(|ctx| ctx.last().cloned())\n}\n\n/// This function collects all Typescript references which are created within the given closure.\n///\n/// This can be used for determining the imports required in a particular file.\npub fn collect_references<R>(func: impl FnOnce() -> R) -> (R, HashSet<NamedReference>) {\n    struct Guard;\n    impl Drop for Guard {\n        fn drop(&mut self) {\n            REFERENCED_TYPES.with_borrow_mut(|types| {\n                if let Some(v) = types {\n                    // Last collection means we can drop all memory\n                    if v.len() == 1 {\n                        *types = None;\n                    } else {\n                        // Otherwise just remove the current collection.\n                        v.pop();\n                    }\n                }\n            })\n        }\n    }\n\n    // If we have no collection, register one\n    // If we already have one create a new context.\n    REFERENCED_TYPES.with_borrow_mut(|v| {\n        if let Some(v) = v {\n            v.push(Default::default());\n        } else {\n            *v = Some(vec![Default::default()]);\n        }\n    });\n\n    let guard = Guard;\n    let result = func();\n    // We only use the guard when unwinding\n    std::mem::forget(guard);\n\n    (\n        result,\n        REFERENCED_TYPES.with_borrow_mut(|types| {\n            types\n                .as_mut()\n                .expect(\"COLLECTED_TYPES is unset but it should be set\")\n                .pop()\n                .expect(\"COLLECTED_TYPES is missing a valid collection context\")\n        }),\n    )\n}\n\n/// Used internally to track a named references.\npub(crate) fn track_nr(r: &NamedReference) {\n    REFERENCED_TYPES.with_borrow_mut(|ctxs| {\n        if let Some(ctxs) = ctxs {\n            for ctx in ctxs {\n                ctx.insert(r.clone());\n            }\n        }\n    });\n}\n"
  },
  {
    "path": "specta-typescript/src/reserved_names.rs",
    "content": "/// Taken from: https://github.com/microsoft/TypeScript/blob/fad889283e710ee947e8412e173d2c050107a3c1/src/compiler/types.ts#L276\npub(crate) const RESERVED_TYPE_NAMES: &[&str] = &[\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"const\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"delete\",\n    \"do\",\n    \"else\",\n    \"enum\",\n    \"export\",\n    \"extends\",\n    \"false\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"import\",\n    \"in\",\n    \"instanceof\",\n    \"new\",\n    \"null\",\n    \"return\",\n    \"super\",\n    \"switch\",\n    \"this\",\n    \"throw\",\n    \"true\",\n    \"try\",\n    \"typeof\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"with\",\n    \"as\",\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n    \"any\",\n    \"boolean\",\n    \"constructor\",\n    \"declare\",\n    \"get\",\n    \"module\",\n    \"require\",\n    \"number\",\n    \"set\",\n    \"string\",\n    \"symbol\",\n    \"type\",\n    \"from\",\n    \"of\",\n];\n"
  },
  {
    "path": "specta-typescript/src/types.rs",
    "content": "use std::fmt::Debug;\n\nuse specta::{\n    Type, Types,\n    datatype::{DataType, Reference},\n};\n\nuse crate::opaque;\n\n/// Cast a Rust type to a Typescript `any` type.\n///\n/// <div class=\"warning\">\n///\n/// **WARNING:** When used with `Option<Any<T>>`, Typescript will not prompt you about nullability checks as `any | null` is coalesced to `any` in Typescript.\n///\n/// </div>\n///\n/// # Examples\n///\n/// This can be used as a type override.\n/// ```rust\n/// use serde::Serialize;\n/// use specta::Type;\n/// use specta_typescript::Any;\n///\n/// #[derive(Serialize, Type)]\n/// pub struct Demo {\n///     #[specta(type = Any)]\n///     pub field: String,\n/// }\n/// ```\n///\n/// Or it can be used as a wrapper type.\n/// ```rust\n/// use serde::Serialize;\n/// use specta::Type;\n/// use specta_typescript::Any;\n///\n/// # #[cfg(feature = \"serde\")] {\n/// #[derive(Serialize, Type)]\n/// pub struct Demo {\n///     pub field: Any<String>,\n/// }\n/// # }\n/// ```\npub struct Any<T = ()>(T);\n\nimpl<T> Type for Any<T> {\n    fn definition(_: &mut Types) -> DataType {\n        DataType::Reference(Reference::opaque(opaque::Any))\n    }\n}\n\nimpl<T: Debug> Debug for Any<T> {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.debug_tuple(\"Any\").field(&self.0).finish()\n    }\n}\n\nimpl<T: Clone> Clone for Any<T> {\n    fn clone(&self) -> Self {\n        Self(self.0.clone())\n    }\n}\n\nimpl<T: Default> Default for Any<T> {\n    fn default() -> Self {\n        Self(T::default())\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<T: serde::Serialize> serde::Serialize for Any<T> {\n    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: serde::Serializer,\n    {\n        T::serialize(&self.0, serializer)\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for Any<T> {\n    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>\n    where\n        D: serde::Deserializer<'de>,\n    {\n        T::deserialize(deserializer).map(Self)\n    }\n}\n\n/// Cast a Rust type to a Typescript `unknown` type.\n///\n/// # Examples\n///\n/// This can be used as a type override.\n/// ```rust\n/// use serde::Serialize;\n/// use specta::Type;\n/// use specta_typescript::Unknown;\n///\n/// #[derive(Serialize, Type)]\n/// pub struct Demo {\n///     #[specta(type = Unknown)]\n///     pub field: String,\n/// }\n/// ```\n///\n/// Or it can be used as a wrapper type.\n/// ```rust\n/// use serde::Serialize;\n/// use specta::Type;\n/// use specta_typescript::Unknown;\n///\n/// # #[cfg(feature = \"serde\")] {\n/// #[derive(Serialize, Type)]\n/// pub struct Demo {\n///     pub field: Unknown<String>,\n/// }\n/// # }\n/// ```\npub struct Unknown<T = ()>(T);\n\nimpl<T> Type for Unknown<T> {\n    fn definition(_: &mut Types) -> DataType {\n        DataType::Reference(Reference::opaque(opaque::Unknown))\n    }\n}\n\nimpl<T: Debug> Debug for Unknown<T> {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.debug_tuple(\"Any\").field(&self.0).finish()\n    }\n}\n\nimpl<T: Clone> Clone for Unknown<T> {\n    fn clone(&self) -> Self {\n        Self(self.0.clone())\n    }\n}\n\nimpl<T: Default> Default for Unknown<T> {\n    fn default() -> Self {\n        Self(T::default())\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<T: serde::Serialize> serde::Serialize for Unknown<T> {\n    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: serde::Serializer,\n    {\n        T::serialize(&self.0, serializer)\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for Unknown<T> {\n    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>\n    where\n        D: serde::Deserializer<'de>,\n    {\n        T::deserialize(deserializer).map(Self)\n    }\n}\n\n/// Cast a Rust type to a Typescript `never` type.\n///\n/// # Examples\n///\n/// This can be used as a type override.\n/// ```rust\n/// use serde::Serialize;\n/// use specta::Type;\n/// use specta_typescript::Never;\n///\n/// #[derive(Serialize, Type)]\n/// pub struct Demo {\n///     #[specta(type = Never)]\n///     pub field: String,\n/// }\n/// ```\n///\n/// Or it can be used as a wrapper type.\n/// ```rust\n/// use serde::Serialize;\n/// use specta::Type;\n/// use specta_typescript::Never;\n///\n/// # #[cfg(feature = \"serde\")] {\n/// #[derive(Serialize, Type)]\n/// pub struct Demo {\n///     pub field: Never<String>,\n/// }\n/// # }\n/// ```\npub struct Never<T = ()>(T);\n\nimpl<T> Type for Never<T> {\n    fn definition(_: &mut Types) -> DataType {\n        DataType::Reference(Reference::opaque(opaque::Never))\n    }\n}\n\nimpl<T: Debug> Debug for Never<T> {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.debug_tuple(\"Any\").field(&self.0).finish()\n    }\n}\n\nimpl<T: Clone> Clone for Never<T> {\n    fn clone(&self) -> Self {\n        Self(self.0.clone())\n    }\n}\n\nimpl<T: Default> Default for Never<T> {\n    fn default() -> Self {\n        Self(T::default())\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<T: serde::Serialize> serde::Serialize for Never<T> {\n    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: serde::Serializer,\n    {\n        T::serialize(&self.0, serializer)\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for Never<T> {\n    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>\n    where\n        D: serde::Deserializer<'de>,\n    {\n        T::deserialize(deserializer).map(Self)\n    }\n}\n\n/// Cast a Rust type to a Typescript `number` type.\n///\n/// This can be used to opt into exporting BigInt-style Rust integer types as\n/// Typescript `number` when precision loss is acceptable.\n///\n/// # Examples\n///\n/// This can be used as a type override.\n/// ```rust\n/// use serde::Serialize;\n/// use specta::Type;\n/// use specta_typescript::Number;\n///\n/// #[derive(Serialize, Type)]\n/// pub struct Demo {\n///     #[specta(type = Number)]\n///     pub field: i128,\n/// }\n/// ```\n///\n/// Or it can be used as a wrapper type.\n/// ```rust\n/// use serde::Serialize;\n/// use specta::Type;\n/// use specta_typescript::Number;\n///\n/// # #[cfg(feature = \"serde\")] {\n/// #[derive(Serialize, Type)]\n/// pub struct Demo {\n///     pub field: Number<i128>,\n/// }\n/// # }\n/// ```\npub struct Number<T = ()>(T);\n\nimpl<T> Type for Number<T> {\n    fn definition(_: &mut Types) -> DataType {\n        DataType::Reference(Reference::opaque(opaque::Number))\n    }\n}\n\nimpl<T: Debug> Debug for Number<T> {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.debug_tuple(\"Number\").field(&self.0).finish()\n    }\n}\n\nimpl<T: Clone> Clone for Number<T> {\n    fn clone(&self) -> Self {\n        Self(self.0.clone())\n    }\n}\n\nimpl<T: Default> Default for Number<T> {\n    fn default() -> Self {\n        Self(T::default())\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<T: serde::Serialize> serde::Serialize for Number<T> {\n    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: serde::Serializer,\n    {\n        T::serialize(&self.0, serializer)\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for Number<T> {\n    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>\n    where\n        D: serde::Deserializer<'de>,\n    {\n        T::deserialize(deserializer).map(Self)\n    }\n}\n"
  },
  {
    "path": "specta-typescript/src/typescript.rs",
    "content": "use std::{borrow::Cow, path::Path};\n\nuse specta::{Format, Types};\n\nuse crate::{Branded, BrandedTypeExporter, Error, Exporter, Layout};\n\n/// JSDoc language exporter.\n#[derive(Debug, Clone)]\n#[non_exhaustive]\npub struct Typescript(Exporter);\n\nimpl Default for Typescript {\n    fn default() -> Self {\n        Exporter::default().into()\n    }\n}\n\nimpl From<Typescript> for Exporter {\n    fn from(value: Typescript) -> Self {\n        value.0\n    }\n}\n\nimpl From<Exporter> for Typescript {\n    fn from(mut value: Exporter) -> Self {\n        value.jsdoc = false;\n        Self(value)\n    }\n}\n\nimpl Typescript {\n    /// Construct a new JSDoc exporter with the default options configured.\n    pub fn new() -> Self {\n        Default::default()\n    }\n\n    /// Configure a header for the file.\n    ///\n    /// This is perfect for configuring lint ignore rules or other file-level comments.\n    pub fn header(self, header: impl Into<Cow<'static, str>>) -> Self {\n        Self(self.0.header(header))\n    }\n\n    /// Configure the layout of the generated file\n    pub fn layout(self, layout: Layout) -> Self {\n        Self(self.0.layout(layout))\n    }\n\n    /// Configure how `specta_typescript::branded!` types are rendered.\n    ///\n    /// See [`Exporter::branded_type_impl`] for details.\n    pub fn branded_type_impl(\n        self,\n        builder: impl for<'a> Fn(BrandedTypeExporter<'a>, &Branded) -> Result<Cow<'static, str>, Error>\n        + Send\n        + Sync\n        + 'static,\n    ) -> Self {\n        Self(self.0.branded_type_impl(builder))\n    }\n\n    /// Export the files into a single string.\n    ///\n    /// Note: This returns an error if the format is `Format::Files`.\n    pub fn export(&self, types: &Types, format: impl Format) -> Result<String, Error> {\n        self.0.export(types, format)\n    }\n\n    /// Export the types to a specific file/folder.\n    ///\n    /// When configured when `format` is `Format::Files`, you must provide a directory path.\n    /// Otherwise, you must provide the path of a single file.\n    ///\n    pub fn export_to(\n        &self,\n        path: impl AsRef<Path>,\n        types: &Types,\n        format: impl Format,\n    ) -> Result<(), Error> {\n        self.0.export_to(path, types, format)\n    }\n}\n\nimpl AsRef<Exporter> for Typescript {\n    fn as_ref(&self) -> &Exporter {\n        &self.0\n    }\n}\n\nimpl AsMut<Exporter> for Typescript {\n    fn as_mut(&mut self) -> &mut Exporter {\n        &mut self.0\n    }\n}\n"
  },
  {
    "path": "specta-util/Cargo.toml",
    "content": "[package]\nname = \"specta-util\"\ndescription = \"High-level utilities for working with Specta\"\nversion = \"0.0.11\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-util/latest/specta-util\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"typescript\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\nreadme = \"../README.md\"\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[features]\ndefault = []\n\n## Support for [serde](https://serde.rs)\nserde = [\"dep:serde\"]\n\n[lints]\nworkspace = true\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\" }\nserde = { version = \"1\", optional = true, default-features = false }\nserde_json = { version = \"1\", optional = true, default-features = false, features = [\"std\"] }\n"
  },
  {
    "path": "specta-util/src/array.rs",
    "content": "use std::marker::PhantomData;\n\nuse specta::{\n    Type, Types,\n    datatype::{DataType, List},\n};\n\n/// Declares a fixed-length array type for Specta exporters.\n///\n/// This is primarily useful with `#[specta(type = ...)]` when you want an array\n/// field to keep its length information in exported schemas.\n///\n/// A plain Rust array like `[u8; 2]` may be exported as `number[]` if Specta\n/// deems it's unable to safely export it as `[number, number]`. This limitation\n/// is due to the fact that Specta can't track the inference of const generics and\n/// hence can't fully support them. Using `FixedArray<N, T>` will always encode the\n/// length so it can be used to force override Specta's conservative behaviour when you know what your doing.\n///\n/// ```ignore\n/// use specta::Type;\n///\n/// /// #[derive(Type)]\n/// struct DemoA {\n///     a: [u8; 2],     // becomes `[number, number]`\n///\n///     #[specta(type = specta_util::FixedArray<2, u8>)]\n///     d: [u8; 2],     // becomes `[number, number]`\n/// }\n///\n/// #[derive(Type)]\n/// struct DemoB<const N: usize = 1> {\n///     // These are generalised by Specta as we can't know if a specific type is using `N` or a constant, and we don't know what `N` is.\n///     // If you `#[specta(inline)]` or `#[serde(flatten)]` the `[number, number]` will be restored as we are able to track it properly.\n///     data: [u32; N], // becomes `number[]`\n///     a: [u8; 2],     // becomes `number[]`\n///\n///     #[specta(type = specta_util::FixedArray<2, u8>)]\n///     d: [u8; 2],     // becomes `[number, number]`\n/// }\n/// ```\npub struct FixedArray<const N: usize, T: Type>(PhantomData<[T; N]>);\n\nimpl<const N: usize, T: Type> Type for FixedArray<N, T> {\n    fn definition(types: &mut Types) -> DataType {\n        let mut l = List::new(T::definition(types));\n        // Refer to the type documentation for the safety around this.\n        l.length = Some(N);\n        DataType::List(l)\n    }\n}\n"
  },
  {
    "path": "specta-util/src/lib.rs",
    "content": "//! Extended functionality for [Specta](specta).\n\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nmod selection;\n\nmod array;\nmod remapper;\n\npub use array::FixedArray;\npub use remapper::Remapper;\n"
  },
  {
    "path": "specta-util/src/remapper.rs",
    "content": "use specta::{\n    Types,\n    datatype::{DataType, Fields, NamedReferenceType, Reference},\n};\n\n/// Recursively replaces [`DataType`]s within a [`DataType`] structure from a set of remap rules.\n///\n/// `Remapper` is useful when a type should be represented differently for export\n/// without changing the original Rust type or derive output. It performs [`DataType`]\n/// equality checks while walking the [`DataType`] structure applying the transformations.\n///\n/// Rules are applied in the order they are registered. For each visited\n/// [`DataType`], every matching rule is applied, with each rule seeing the\n/// result of the previous matching rule.\n///\n/// <div class=\"warning\">\n///\n/// **WARNING:** This is an advanced API!\n///\n/// It needs to be used carefully as it can easily break the safety of the end to end type contract.\n///\n/// You must ensure you have Serde applying the same transformations to the runtime data for it to be sound.\n///\n/// </div>\n///\n/// # Examples\n///\n/// Remap `u32` to `str` and `i32` to `bool`:\n///\n/// ```rust\n/// use specta::{Types, datatype::{DataType, Field, List, NamedDataType, Primitive, Struct}};\n/// use specta_util::Remapper;\n///\n/// let remapper = Remapper::new()\n///     .rule(Primitive::u32.into(), Primitive::str.into())\n///     .rule(Primitive::i32.into(), Primitive::bool.into());\n///\n/// // For a single `DataType`\n/// assert_eq!(\n///     remapper.remap_dt(DataType::List(List::new(Primitive::u32.into()))),\n///     DataType::List(List::new(Primitive::str.into()))\n/// );\n///\n/// // For a whole collection of types\n/// # #[allow(unused)]\n/// let types: Types = remapper.remap_types(Types::default());\n/// ```\n#[derive(Debug, Clone, Default)]\npub struct Remapper {\n    rules: Vec<(DataType, DataType)>,\n}\n\nimpl Remapper {\n    /// Creates a remapper with no rules.\n    pub fn new() -> Self {\n        Self::default()\n    }\n\n    /// Registers a rule that replaces exact matches of `from` with `to`.\n    ///\n    /// Rules are checked in the order they are registered.\n    pub fn rule(mut self, from: DataType, to: DataType) -> Self {\n        self.rules.push((from, to));\n        self\n    }\n\n    /// Applies the remap operation to a datatype, returning the remapped datatype.\n    pub fn remap_dt(&self, mut dt: DataType) -> DataType {\n        self.remap_internal(&mut dt);\n        dt\n    }\n\n    /// Applies the remap operation to every datatype in a [`Types`] collection, returning the remapped collection.\n    pub fn remap_types(&self, types: Types) -> Types {\n        types.map(|mut ndt| {\n            ndt.generics.to_mut().iter_mut().for_each(|generic| {\n                if let Some(dt) = &mut generic.default {\n                    self.remap_internal(dt);\n                }\n            });\n            if let Some(dt) = &mut ndt.ty {\n                self.remap_internal(dt);\n            }\n            ndt\n        })\n    }\n\n    fn remap_internal(&self, dt: &mut DataType) {\n        self.remap_rules(dt);\n\n        match dt {\n            DataType::Primitive(_) | DataType::Generic(_) => {}\n            DataType::List(list) => self.remap_internal(&mut list.ty),\n            DataType::Map(map) => {\n                self.remap_internal(map.key_ty_mut());\n                self.remap_internal(map.value_ty_mut());\n            }\n            DataType::Struct(s) => self.remap_fields(&mut s.fields),\n            DataType::Enum(e) => {\n                for (_, variant) in &mut e.variants {\n                    self.remap_fields(&mut variant.fields);\n                }\n            }\n            DataType::Tuple(tuple) => {\n                for dt in &mut tuple.elements {\n                    self.remap_internal(dt);\n                }\n            }\n            DataType::Nullable(dt) => self.remap_internal(dt),\n            DataType::Intersection(dts) => {\n                for dt in dts {\n                    self.remap_internal(dt);\n                }\n            }\n            DataType::Reference(r) => self.remap_reference(r),\n        }\n    }\n\n    fn remap_rules(&self, dt: &mut DataType) {\n        for (from, to) in &self.rules {\n            if *dt == *from {\n                *dt = to.clone();\n            }\n        }\n    }\n\n    fn remap_fields(&self, fields: &mut Fields) {\n        match fields {\n            Fields::Unit => {}\n            Fields::Unnamed(fields) => {\n                for field in &mut fields.fields {\n                    if let Some(dt) = &mut field.ty {\n                        self.remap_internal(dt);\n                    }\n                }\n            }\n            Fields::Named(fields) => {\n                for (_, field) in &mut fields.fields {\n                    if let Some(dt) = &mut field.ty {\n                        self.remap_internal(dt);\n                    }\n                }\n            }\n        }\n    }\n\n    fn remap_reference(&self, reference: &mut Reference) {\n        let Reference::Named(reference) = reference else {\n            return;\n        };\n\n        match &mut reference.inner {\n            NamedReferenceType::Recursive => {}\n            NamedReferenceType::Inline { dt, .. } => self.remap_internal(dt),\n            NamedReferenceType::Reference { generics, .. } => {\n                for (_, dt) in generics {\n                    self.remap_internal(dt);\n                }\n            }\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use specta::{\n        Types,\n        datatype::{DataType, Field, List, NamedDataType, Primitive, Struct, Tuple},\n    };\n\n    use super::Remapper;\n\n    #[test]\n    fn remaps_multiple_rules_in_one_crawl() {\n        let dt = DataType::Tuple(Tuple::new(vec![\n            Primitive::u32.into(),\n            Primitive::i32.into(),\n        ]));\n\n        let remapped = Remapper::new()\n            .rule(Primitive::u32.into(), Primitive::str.into())\n            .rule(Primitive::i32.into(), Primitive::bool.into())\n            .remap_dt(dt);\n\n        assert_eq!(\n            remapped,\n            DataType::Tuple(Tuple::new(vec![\n                Primitive::str.into(),\n                Primitive::bool.into()\n            ]))\n        );\n    }\n\n    #[test]\n    fn rules_are_piped_in_registration_order() {\n        let remapped = Remapper::new()\n            .rule(Primitive::u32.into(), Primitive::i32.into())\n            .rule(Primitive::i32.into(), Primitive::bool.into())\n            .remap_dt(Primitive::u32.into());\n\n        assert_eq!(remapped, Primitive::bool.into());\n    }\n\n    #[test]\n    fn replacement_is_recrawled() {\n        let remapped = Remapper::new()\n            .rule(\n                Primitive::u32.into(),\n                DataType::List(List::new(Primitive::i32.into())),\n            )\n            .rule(Primitive::i32.into(), Primitive::bool.into())\n            .remap_dt(Primitive::u32.into());\n\n        assert_eq!(remapped, DataType::List(List::new(Primitive::bool.into())));\n    }\n\n    #[test]\n    fn remaps_named_type_bodies() {\n        let mut types = Types::default();\n        NamedDataType::new(\"User\", &mut types, |_, ty| {\n            ty.ty = Some(\n                Struct::named()\n                    .field(\"id\", Field::new(Primitive::u32.into()))\n                    .field(\"active\", Field::new(Primitive::i32.into()))\n                    .build(),\n            );\n        });\n\n        let types = Remapper::new()\n            .rule(Primitive::u32.into(), Primitive::str.into())\n            .rule(Primitive::i32.into(), Primitive::bool.into())\n            .remap_types(types);\n\n        let debug = format!(\"{types:?}\");\n        assert!(debug.contains(\"Primitive(str)\"));\n        assert!(debug.contains(\"Primitive(bool)\"));\n    }\n}\n"
  },
  {
    "path": "specta-util/src/selection.rs",
    "content": "// TODO: Should `specta-util` rexport `specta` for these macros???\n\n/// Specta compatible selection of struct fields.\n///\n/// ```ignore\n/// use specta_typescript::legacy::inline_ref;\n/// use specta_util::selection;\n///\n/// #[derive(Clone)]\n/// struct MyStruct {\n///     name: String,\n///     age: i32,\n///     is_verified: bool,\n///     password: String,\n/// }\n///\n/// let person = MyStruct {\n///     name: \"Monty\".into(),\n///     age: 7,\n///     is_verified: true,\n///     password: \"password\".into(),\n/// };\n/// let people = vec![person.clone(), person.clone()];\n///\n/// // Selection creates an anonymous struct with the subset of fields you want.\n/// assert_eq!(inline_ref(&selection!(person, {\n///     name,\n///     age\n/// }), &Default::default()).unwrap(), \"{ name: string; age: number }\");\n///\n/// // You can apply the selection to an array.\n/// assert_eq!(inline_ref(&selection!(people, [{\n///     name,\n///     age\n/// }]), &Default::default()).unwrap(), \"{ name: string; age: number }[]\");\n/// ```\n// TODO: better docs w/ example\n#[macro_export]\nmacro_rules! selection {\n    ( $s:expr, { $($n:ident),+ $(,)? } as $name:ident ) => {{\n        #[allow(non_camel_case_types)]\n        mod selection {\n            #[derive(serde::Serialize, specta::Type)]\n            #[specta(inline)]\n            pub struct $name<$($n,)*> {\n                $(pub $n: $n),*\n            }\n        }\n        use selection::$name;\n        #[allow(non_camel_case_types)]\n        $name { $($n: $s.$n,)* }\n    }};\n    ( $s:expr, { $($n:ident),+ $(,)? } ) => {{\n        $crate::selection!($s, { $($n),+ } as Selection)\n    }};\n\n    ( $s:expr, [{ $($n:ident),+ $(,)? }] as $name:ident ) => {{\n        #[allow(non_camel_case_types)]\n        mod selection {\n            #[derive(serde::Serialize, specta::Type)]\n            #[specta(inline)]\n            pub struct $name<$($n,)*> {\n                $(pub $n: $n),*\n            }\n        }\n        use selection::$name;\n        #[allow(non_camel_case_types)]\n        $s.into_iter().map(|v| $name { $($n: v.$n,)* }).collect::<Vec<_>>()\n    }};\n    ( $s:expr, [{ $($n:ident),+ $(,)? }] ) => {{\n        $crate::selection!($s, [{ $($n),+ }] as Selection)\n    }};\n}\n"
  },
  {
    "path": "specta-zod/Cargo.toml",
    "content": "[package]\nname = \"specta-zod\"\ndescription = \"Export your Rust types to Zod schemas for TypeScript\"\nversion = \"0.0.2\"\nauthors = [\"Oscar Beaumont <oscar@otbeaumont.me>\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/specta-rs/specta\"\ndocumentation = \"https://docs.rs/specta-zod/latest/specta-zod\"\nkeywords = [\"async\", \"specta\", \"rspc\", \"typescript\", \"typesafe\"]\ncategories = [\"web-programming\", \"asynchronous\"]\nreadme = \"../README.md\"\n\n# /bin/sh RUSTDOCFLAGS=\"--cfg docsrs\" cargo +nightly doc --all-features\n[package.metadata.\"docs.rs\"]\nall-features = true\nrustdoc-args = [\"--cfg\", \"docsrs\"]\n\n[lints]\nworkspace = true\n\n[features]\ndefault = []\n\n# Implement `serde::Serialize` for Zod-specific wrapper types (Any, Unknown, Never)\nserde = [\"dep:serde\"]\n\n[dependencies]\nspecta = { version = \"=2.0.0-rc.24\", path = \"../specta\" }\nserde = { version = \"1\", default-features = false, optional = true }\nspecta-typescript = { version = \"=0.0.11\", path = \"../specta-typescript\" }\n# TODO: Don't depend on serde\nspecta-serde = { version = \"=0.0.11\", path = \"../specta-serde\" }\nthiserror = \"2\" # TODO: Remove this\n\n[dev-dependencies]\nspecta-util = { path = \"../specta-util\" }\n"
  },
  {
    "path": "specta-zod/src/error.rs",
    "content": "use std::{borrow::Cow, error, fmt, io, panic::Location, path::PathBuf};\n\nuse specta::datatype::OpaqueReference;\n\nuse crate::Layout;\n\n/// The error type for the Zod exporter.\n#[non_exhaustive]\npub struct Error {\n    kind: ErrorKind,\n}\n\ntype FrameworkSource = Box<dyn error::Error + Send + Sync + 'static>;\n\n#[allow(dead_code)]\nenum ErrorKind {\n    BigIntForbidden {\n        path: String,\n    },\n    InvalidName {\n        path: String,\n        name: Cow<'static, str>,\n    },\n    ForbiddenName {\n        path: String,\n        name: Cow<'static, str>,\n    },\n    DuplicateTypeName {\n        name: Cow<'static, str>,\n        first: String,\n        second: String,\n    },\n    Io(io::Error),\n    ReadDir {\n        path: PathBuf,\n        source: io::Error,\n    },\n    Metadata {\n        path: PathBuf,\n        source: io::Error,\n    },\n    RemoveFile {\n        path: PathBuf,\n        source: io::Error,\n    },\n    RemoveDir {\n        path: PathBuf,\n        source: io::Error,\n    },\n    UnsupportedOpaqueReference(OpaqueReference),\n    DanglingNamedReference {\n        reference: String,\n    },\n    Framework {\n        message: Cow<'static, str>,\n        source: FrameworkSource,\n    },\n    UnableToExport(Layout),\n}\n\nimpl Error {\n    /// Construct an error for framework-specific logic.\n    pub fn framework(\n        message: impl Into<Cow<'static, str>>,\n        source: impl Into<Box<dyn std::error::Error + Send + Sync>>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::Framework {\n                message: message.into(),\n                source: source.into(),\n            },\n        }\n    }\n\n    pub(crate) fn bigint_forbidden(path: String) -> Self {\n        Self {\n            kind: ErrorKind::BigIntForbidden { path },\n        }\n    }\n\n    pub(crate) fn invalid_name(path: String, name: impl Into<Cow<'static, str>>) -> Self {\n        Self {\n            kind: ErrorKind::InvalidName {\n                path,\n                name: name.into(),\n            },\n        }\n    }\n\n    pub(crate) fn forbidden_name(path: String, name: impl Into<Cow<'static, str>>) -> Self {\n        Self {\n            kind: ErrorKind::ForbiddenName {\n                path,\n                name: name.into(),\n            },\n        }\n    }\n\n    pub(crate) fn duplicate_type_name(\n        name: Cow<'static, str>,\n        first: Location<'static>,\n        second: Location<'static>,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::DuplicateTypeName {\n                name,\n                first: format_location(first),\n                second: format_location(second),\n            },\n        }\n    }\n\n    pub(crate) fn read_dir(path: PathBuf, source: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::ReadDir { path, source },\n        }\n    }\n\n    pub(crate) fn metadata(path: PathBuf, source: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::Metadata { path, source },\n        }\n    }\n\n    pub(crate) fn remove_file(path: PathBuf, source: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::RemoveFile { path, source },\n        }\n    }\n\n    pub(crate) fn remove_dir(path: PathBuf, source: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::RemoveDir { path, source },\n        }\n    }\n\n    pub(crate) fn unsupported_opaque_reference(reference: OpaqueReference) -> Self {\n        Self {\n            kind: ErrorKind::UnsupportedOpaqueReference(reference),\n        }\n    }\n\n    pub(crate) fn dangling_named_reference(reference: String) -> Self {\n        Self {\n            kind: ErrorKind::DanglingNamedReference { reference },\n        }\n    }\n\n    pub(crate) fn unable_to_export(layout: Layout) -> Self {\n        Self {\n            kind: ErrorKind::UnableToExport(layout),\n        }\n    }\n\n    pub(crate) fn format(\n        message: impl Into<Cow<'static, str>>,\n        source: specta::FormatError,\n    ) -> Self {\n        Self {\n            kind: ErrorKind::Framework {\n                message: message.into(),\n                source,\n            },\n        }\n    }\n}\n\nimpl From<io::Error> for Error {\n    fn from(error: io::Error) -> Self {\n        Self {\n            kind: ErrorKind::Io(error),\n        }\n    }\n}\n\nimpl From<std::fmt::Error> for Error {\n    fn from(source: std::fmt::Error) -> Self {\n        Self {\n            kind: ErrorKind::Framework {\n                message: Cow::Borrowed(\"Formatting error\"),\n                source: Box::new(source),\n            },\n        }\n    }\n}\n\nimpl fmt::Display for Error {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        match &self.kind {\n            ErrorKind::BigIntForbidden { path } => write!(\n                f,\n                \"Attempted to export {path:?} but Specta configuration forbids exporting BigInt types (i64, u64, i128, u128) because serializer compatibility is unknown. Configure `BigIntExportBehavior` to allow this.\"\n            ),\n            ErrorKind::InvalidName { path, name } => write!(\n                f,\n                \"Attempted to export {path:?} but was unable to due to name {name:?} containing an invalid character. Try renaming it or using `#[specta(rename = \\\"new_name\\\")]`\"\n            ),\n            ErrorKind::ForbiddenName { path, name } => write!(\n                f,\n                \"Attempted to export {path:?} but was unable to due to name {name:?} being a reserved keyword in TypeScript. Try renaming it or using `#[specta(rename = \\\"new_name\\\")]`\"\n            ),\n            ErrorKind::DuplicateTypeName {\n                name,\n                first,\n                second,\n            } => write!(\n                f,\n                \"Detected multiple types with the same name: {name:?} at {first} and {second}\"\n            ),\n            ErrorKind::Io(err) => write!(f, \"IO error: {err}\"),\n            ErrorKind::ReadDir { path, source } => {\n                write!(f, \"Failed to read directory '{}': {source}\", path.display())\n            }\n            ErrorKind::Metadata { path, source } => {\n                write!(\n                    f,\n                    \"Failed to read metadata for '{}': {source}\",\n                    path.display()\n                )\n            }\n            ErrorKind::RemoveFile { path, source } => {\n                write!(f, \"Failed to remove file '{}': {source}\", path.display())\n            }\n            ErrorKind::RemoveDir { path, source } => {\n                write!(\n                    f,\n                    \"Failed to remove directory '{}': {source}\",\n                    path.display()\n                )\n            }\n            ErrorKind::UnsupportedOpaqueReference(reference) => write!(\n                f,\n                \"Found unsupported opaque reference '{}'. It is not supported by the Zod exporter.\",\n                reference.type_name()\n            ),\n            ErrorKind::DanglingNamedReference { reference } => write!(\n                f,\n                \"Found dangling named reference {reference}. The referenced type is missing from the resolved type collection.\"\n            ),\n            ErrorKind::Framework { message, source } => {\n                let source = source.to_string();\n                if message.is_empty() && source.is_empty() {\n                    write!(f, \"Framework error\")\n                } else if source.is_empty() {\n                    write!(f, \"Framework error: {message}\")\n                } else {\n                    write!(f, \"Framework error: {message}: {source}\")\n                }\n            }\n            ErrorKind::UnableToExport(layout) => {\n                write!(\n                    f,\n                    \"Unable to export layout {layout} with `Zod::export`. Use `Zod::export_to` or change layout.\"\n                )\n            }\n        }\n    }\n}\n\nimpl fmt::Debug for Error {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Display::fmt(self, f)\n    }\n}\n\nimpl error::Error for Error {\n    fn source(&self) -> Option<&(dyn error::Error + 'static)> {\n        match &self.kind {\n            ErrorKind::Io(error) => Some(error),\n            ErrorKind::ReadDir { source, .. }\n            | ErrorKind::Metadata { source, .. }\n            | ErrorKind::RemoveFile { source, .. }\n            | ErrorKind::RemoveDir { source, .. } => Some(source),\n            ErrorKind::Framework { source, .. } => Some(source.as_ref()),\n            _ => None,\n        }\n    }\n}\n\nfn format_location(location: Location<'static>) -> String {\n    format!(\n        \"{}:{}:{}\",\n        location.file(),\n        location.line(),\n        location.column()\n    )\n}\n"
  },
  {
    "path": "specta-zod/src/lib.rs",
    "content": "//! [Zod](https://zod.dev) language exporter for [Specta](specta).\n//!\n//! <div class=\"warning\">\n//! This crate is still in active development and is not yet ready for general purpose use!\n//! </div>\n//!\n#![cfg_attr(docsrs, feature(doc_cfg))]\n#![doc(\n    html_logo_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\",\n    html_favicon_url = \"https://github.com/specta-rs/specta/raw/main/.github/logo-128.png\"\n)]\n\nmod error;\nmod opaque;\npub mod primitives;\nmod references;\nmod reserved_names;\nmod types;\nmod zod;\n\npub use error::Error;\npub use opaque::define;\npub use types::{Any, Never, Unknown};\npub use zod::{BigIntExportBehavior, FrameworkExporter, Layout, Zod};\n"
  },
  {
    "path": "specta-zod/src/opaque.rs",
    "content": "use std::borrow::Cow;\n\nuse specta::datatype::Reference;\n\n#[derive(PartialEq, Eq, Hash)]\npub(crate) struct Define(pub(crate) Cow<'static, str>);\n\n#[derive(PartialEq, Eq, Hash)]\npub(crate) struct Any;\n\n#[derive(PartialEq, Eq, Hash)]\npub(crate) struct Unknown;\n\n#[derive(PartialEq, Eq, Hash)]\npub(crate) struct Never;\n\n/// Define a custom Zod expression which can be used as a `DataType::Reference`.\n///\n/// This is an advanced feature which should be used with caution.\npub fn define(raw: impl Into<Cow<'static, str>>) -> Reference {\n    Reference::opaque(Define(raw.into()))\n}\n"
  },
  {
    "path": "specta-zod/src/primitives.rs",
    "content": "//! Primitives provide building blocks for Specta-based libraries.\n\nuse std::{borrow::Cow, fmt::Write as _};\n\nuse specta::{\n    Types,\n    datatype::{\n        DataType, Enum, Fields, GenericReference, List, Map, NamedDataType, NamedReference,\n        NamedReferenceType, OpaqueReference, Primitive, Reference, Struct, Tuple,\n    },\n};\n\nuse crate::{\n    BigIntExportBehavior, Error, Layout, Zod, opaque, reserved_names::RESERVED_TYPE_NAMES,\n};\n\npub(crate) type TypeRenderStack = Vec<(Cow<'static, str>, Cow<'static, str>)>;\n\nfn named_reference_generics(r: &NamedReference) -> Result<&[(GenericReference, DataType)], Error> {\n    match &r.inner {\n        NamedReferenceType::Reference { generics, .. } => Ok(generics),\n        NamedReferenceType::Inline { .. } => Ok(&[]),\n        NamedReferenceType::Recursive => Err(Error::dangling_named_reference(format!(\n            \"recursive inline named reference {r:?}\"\n        ))),\n    }\n}\n\nfn named_reference_ty<'a>(types: &'a Types, r: &'a NamedReference) -> Result<&'a DataType, Error> {\n    match &r.inner {\n        NamedReferenceType::Reference { .. } => types\n            .get(r)\n            .and_then(|ndt| ndt.ty.as_ref())\n            .ok_or_else(|| Error::dangling_named_reference(format!(\"{r:?}\"))),\n        NamedReferenceType::Inline { dt, .. } => Ok(dt),\n        NamedReferenceType::Recursive => Err(Error::dangling_named_reference(format!(\n            \"recursive inline named reference {r:?}\"\n        ))),\n    }\n}\n\n/// Generate a group of `export const XSchema = ...` declarations for named types.\npub fn export<'a>(\n    exporter: &dyn AsRef<Zod>,\n    types: &Types,\n    ndts: impl Iterator<Item = &'a NamedDataType>,\n    indent: &str,\n) -> Result<String, Error> {\n    let mut s = String::new();\n    let mut type_render_stack = TypeRenderStack::new();\n    export_internal(\n        &mut s,\n        exporter.as_ref(),\n        types,\n        ndts,\n        indent,\n        &mut type_render_stack,\n    )?;\n    Ok(s)\n}\n\npub(crate) fn export_internal<'a>(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    ndts: impl Iterator<Item = &'a NamedDataType>,\n    indent: &str,\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    for (index, ndt) in ndts.enumerate() {\n        if index != 0 {\n            s.push('\\n');\n        }\n        export_single_internal(s, exporter, types, ndt, indent, type_render_stack)?;\n    }\n\n    Ok(())\n}\n\nfn export_single_internal(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    ndt: &NamedDataType,\n    indent: &str,\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    let base_name = exported_type_name(exporter, ndt);\n    let name_path = if ndt.module_path.is_empty() {\n        ndt.name.to_string()\n    } else {\n        format!(\"{}::{}\", ndt.module_path, ndt.name)\n    };\n    validate_type_name(&base_name, name_path)?;\n    let schema_name = format!(\"{base_name}Schema\");\n\n    let Some(ty) = &ndt.ty else {\n        return Ok(());\n    };\n\n    type_render_stack.push((ndt.module_path.clone(), ndt.name.clone()));\n\n    let result = (|| {\n        if ndt.generics.is_empty() {\n            let mut schema_expr = String::new();\n            datatype(\n                &mut schema_expr,\n                exporter,\n                types,\n                ty,\n                vec![ndt.name.clone()],\n                &[],\n                false,\n                type_render_stack,\n            )?;\n\n            writeln!(s, \"{indent}export const {schema_name} = {schema_expr};\")?;\n            writeln!(\n                s,\n                \"{indent}export type {base_name} = z.infer<typeof {schema_name}>;\"\n            )?;\n            return Ok(());\n        }\n\n        let generic_names = ndt\n            .generics\n            .iter()\n            .map(|generic| generic.name.as_ref().to_string())\n            .collect::<Vec<_>>();\n\n        let generic_params = generic_names\n            .iter()\n            .map(|name| format!(\"{name} extends z.ZodTypeAny\"))\n            .collect::<Vec<_>>()\n            .join(\", \");\n\n        let fn_params = generic_names.join(\", \");\n\n        let mut schema_expr = String::new();\n        datatype(\n            &mut schema_expr,\n            exporter,\n            types,\n            ty,\n            vec![ndt.name.clone()],\n            &[],\n            false,\n            type_render_stack,\n        )?;\n\n        writeln!(\n            s,\n            \"{indent}export const {schema_name} = <{generic_params}>({fn_params}) => {schema_expr};\"\n        )?;\n\n        let alias_params = generic_names.join(\", \");\n        let infer_args = generic_names\n            .iter()\n            .map(|name| format!(\"z.ZodType<{name}>\"))\n            .collect::<Vec<_>>()\n            .join(\", \");\n\n        writeln!(\n            s,\n            \"{indent}export type {base_name}<{alias_params}> = z.infer<ReturnType<typeof {schema_name}<{infer_args}>>>;\"\n        )?;\n\n        Ok(())\n    })();\n\n    type_render_stack.pop();\n    result\n}\n\n/// Generate an inline Zod expression for a [`DataType`].\n///\n/// If you are using a custom format such as `specta_serde::Format`, this helper does not apply\n/// datatype mapping automatically. Map both the full [`Types`] graph and any top-level\n/// [`DataType`] values before calling this helper.\npub fn inline(exporter: &dyn AsRef<Zod>, types: &Types, dt: &DataType) -> Result<String, Error> {\n    let mut s = String::new();\n    let mut type_render_stack = TypeRenderStack::new();\n    datatype(\n        &mut s,\n        exporter.as_ref(),\n        types,\n        dt,\n        vec![],\n        &[],\n        false,\n        &mut type_render_stack,\n    )?;\n    Ok(s)\n}\n\n/// Generate a Zod expression for a [`Reference`].\n///\n/// If you are using a custom format such as `specta_serde::Format`, this helper does not apply\n/// datatype mapping automatically.\npub fn reference(exporter: &dyn AsRef<Zod>, types: &Types, r: &Reference) -> Result<String, Error> {\n    let mut s = String::new();\n    let mut type_render_stack = TypeRenderStack::new();\n    reference_dt(\n        &mut s,\n        exporter.as_ref(),\n        types,\n        r,\n        vec![],\n        &[],\n        &mut type_render_stack,\n    )?;\n    Ok(s)\n}\n\npub(crate) fn datatype_with_inline_attr(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    dt: &DataType,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    inline: bool,\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    datatype(\n        s,\n        exporter,\n        types,\n        dt,\n        location,\n        generics,\n        inline,\n        type_render_stack,\n    )\n}\n\nfn datatype(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    dt: &DataType,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    force_inline_ref: bool,\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    match dt {\n        DataType::Primitive(p) => s.push_str(primitive_dt(&exporter.bigint, p, location)?),\n        DataType::List(l) => list_dt(s, exporter, types, l, location, generics, type_render_stack)?,\n        DataType::Map(m) => map_dt(s, exporter, types, m, location, generics, type_render_stack)?,\n        DataType::Nullable(def) => {\n            let mut inner = String::new();\n            datatype(\n                &mut inner,\n                exporter,\n                types,\n                def,\n                location,\n                generics,\n                force_inline_ref,\n                type_render_stack,\n            )?;\n            write!(s, \"{inner}.nullable()\")?;\n        }\n        DataType::Struct(st) => struct_dt(\n            s,\n            exporter,\n            types,\n            st,\n            location,\n            generics,\n            type_render_stack,\n        )?,\n        DataType::Enum(enm) => enum_dt(\n            s,\n            exporter,\n            types,\n            enm,\n            location,\n            generics,\n            type_render_stack,\n        )?,\n        DataType::Tuple(tuple) => tuple_dt(\n            s,\n            exporter,\n            types,\n            tuple,\n            location,\n            generics,\n            type_render_stack,\n        )?,\n        DataType::Reference(r) => {\n            if force_inline_ref {\n                match r {\n                    Reference::Named(named) => {\n                        let ty = named_reference_ty(types, named)?;\n                        let reference_generics = named_reference_generics(named)?;\n                        datatype(\n                            s,\n                            exporter,\n                            types,\n                            ty,\n                            location,\n                            reference_generics,\n                            false,\n                            type_render_stack,\n                        )?;\n                    }\n                    _ => {\n                        reference_dt(s, exporter, types, r, location, generics, type_render_stack)?\n                    }\n                }\n            } else {\n                reference_dt(s, exporter, types, r, location, generics, type_render_stack)?;\n            }\n        }\n        DataType::Generic(g) => generic_dt(s, g),\n        DataType::Intersection(intersection) => {\n            let mut parts = Vec::with_capacity(intersection.len());\n            for ty in intersection {\n                let mut part = String::new();\n                datatype(\n                    &mut part,\n                    exporter,\n                    types,\n                    ty,\n                    location.clone(),\n                    generics,\n                    false,\n                    type_render_stack,\n                )?;\n                parts.push(part);\n            }\n            s.push_str(&parts.join(\".and(\"));\n            for _ in 1..parts.len() {\n                s.push(')');\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn primitive_dt(\n    b: &BigIntExportBehavior,\n    p: &Primitive,\n    location: Vec<Cow<'static, str>>,\n) -> Result<&'static str, Error> {\n    use Primitive::*;\n\n    Ok(match p {\n        i8 | i16 | i32 | u8 | u16 | u32 | f16 | f32 | f64 | f128 => \"z.number()\",\n        usize | isize | i64 | u64 | i128 | u128 => match b {\n            BigIntExportBehavior::String => \"z.string()\",\n            BigIntExportBehavior::Number => \"z.number()\",\n            BigIntExportBehavior::BigInt => \"z.bigint()\",\n            BigIntExportBehavior::Fail => return Err(Error::bigint_forbidden(location.join(\".\"))),\n        },\n        Primitive::bool => \"z.boolean()\",\n        str | char => \"z.string()\",\n    })\n}\n\nfn list_dt(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    l: &List,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    let mut dt = String::new();\n    datatype(\n        &mut dt,\n        exporter,\n        types,\n        &l.ty,\n        location,\n        generics,\n        false,\n        type_render_stack,\n    )?;\n\n    if let Some(length) = l.length {\n        s.push_str(\"z.tuple([\");\n        for n in 0..length {\n            if n != 0 {\n                s.push_str(\", \");\n            }\n            s.push_str(&dt);\n        }\n        s.push_str(\"])\");\n    } else {\n        write!(s, \"z.array({dt})\")?;\n    }\n\n    Ok(())\n}\n\nfn map_dt(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    m: &Map,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    let mut key = String::new();\n    datatype(\n        &mut key,\n        exporter,\n        types,\n        m.key_ty(),\n        location.clone(),\n        generics,\n        false,\n        type_render_stack,\n    )?;\n    let mut value = String::new();\n    datatype(\n        &mut value,\n        exporter,\n        types,\n        m.value_ty(),\n        location,\n        generics,\n        false,\n        type_render_stack,\n    )?;\n\n    write!(s, \"z.record({key}, {value})\")?;\n    Ok(())\n}\n\nfn tuple_dt(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    t: &Tuple,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    match t.elements.as_slice() {\n        [] => s.push_str(\"z.null()\"),\n        elements => {\n            s.push_str(\"z.tuple([\");\n            for (i, dt) in elements.iter().enumerate() {\n                if i != 0 {\n                    s.push_str(\", \");\n                }\n                datatype(\n                    s,\n                    exporter,\n                    types,\n                    dt,\n                    location.clone(),\n                    generics,\n                    false,\n                    type_render_stack,\n                )?;\n            }\n            s.push_str(\"])\");\n        }\n    }\n\n    Ok(())\n}\n\nfn struct_dt(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    st: &Struct,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    match &st.fields {\n        Fields::Unit => s.push_str(\"z.null()\"),\n        Fields::Unnamed(unnamed) => {\n            let fields = unnamed\n                .fields\n                .iter()\n                .filter_map(|field| field.ty.as_ref().map(|ty| (field, ty)))\n                .collect::<Vec<_>>();\n\n            match fields.as_slice() {\n                [] => s.push_str(\"z.tuple([])\"),\n                [(field, ty)] if unnamed.fields.len() == 1 => {\n                    datatype_with_inline_attr(\n                        s,\n                        exporter,\n                        types,\n                        ty,\n                        location,\n                        generics,\n                        false,\n                        type_render_stack,\n                    )?;\n                }\n                fields => {\n                    s.push_str(\"z.tuple([\");\n                    for (i, (_field, ty)) in fields.iter().enumerate() {\n                        if i != 0 {\n                            s.push_str(\", \");\n                        }\n                        datatype_with_inline_attr(\n                            s,\n                            exporter,\n                            types,\n                            ty,\n                            location.clone(),\n                            generics,\n                            false,\n                            type_render_stack,\n                        )?;\n                    }\n                    s.push_str(\"])\");\n                }\n            }\n        }\n        Fields::Named(named) => {\n            let all_fields = named\n                .fields\n                .iter()\n                .filter_map(|(name, field)| field.ty.as_ref().map(|ty| (name, field, ty)))\n                .collect::<Vec<_>>();\n\n            if all_fields.is_empty() {\n                s.push_str(\"z.object({}).strict()\");\n                return Ok(());\n            }\n\n            let non_flattened = all_fields.iter().collect::<Vec<_>>();\n\n            let mut schema = String::from(\"z.object({\");\n            for (name, field, ty) in &non_flattened {\n                let key = sanitise_key(name.as_ref());\n                write!(schema, \"\\n\\t{key}: \")?;\n                let mut value = String::new();\n                datatype_with_inline_attr(\n                    &mut value,\n                    exporter,\n                    types,\n                    ty,\n                    location.clone(),\n                    generics,\n                    false,\n                    type_render_stack,\n                )?;\n                if field.optional {\n                    write!(schema, \"{value}.optional(),\")?;\n                } else {\n                    write!(schema, \"{value},\")?;\n                }\n            }\n            if !non_flattened.is_empty() {\n                schema.push('\\n');\n            }\n            schema.push_str(\"})\");\n\n            s.push_str(&schema);\n        }\n    }\n\n    Ok(())\n}\n\nfn enum_dt(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    e: &Enum,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    let variants = e\n        .variants\n        .iter()\n        .filter(|(_, variant)| !variant.skip)\n        .map(|(name, variant)| {\n            enum_variant_dt(\n                exporter,\n                types,\n                name.as_ref(),\n                variant,\n                location.clone(),\n                generics,\n                type_render_stack,\n            )\n        })\n        .collect::<Result<Vec<_>, _>>()?;\n\n    let mut variants = variants.into_iter().flatten().collect::<Vec<_>>();\n\n    if variants.is_empty() {\n        s.push_str(\"z.never()\");\n        return Ok(());\n    }\n\n    variants.sort();\n    variants.dedup();\n\n    if variants.len() == 1 {\n        s.push_str(&variants[0]);\n    } else {\n        write!(s, \"z.union([{}])\", variants.join(\", \"))?;\n    }\n\n    Ok(())\n}\n\nfn enum_variant_dt(\n    exporter: &Zod,\n    types: &Types,\n    name: &str,\n    variant: &specta::datatype::Variant,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<Option<String>, Error> {\n    match &variant.fields {\n        Fields::Unit => Ok(Some(format!(\"z.literal(\\\"{}\\\")\", escape_string(name)))),\n        Fields::Named(named) => {\n            if named.fields.iter().all(|(_, field)| field.ty.is_none()) {\n                return Ok(Some(\"z.object({}).strict()\".to_string()));\n            }\n\n            let mut schema = String::from(\"z.object({\");\n            let mut has_field = false;\n            let mut flattened_sections = Vec::new();\n\n            for (field_name, field) in &named.fields {\n                let Some(ty) = field.ty.as_ref() else {\n                    continue;\n                };\n\n                if false {\n                    let mut value = String::new();\n                    datatype_with_inline_attr(\n                        &mut value,\n                        exporter,\n                        types,\n                        ty,\n                        location.clone(),\n                        generics,\n                        false,\n                        type_render_stack,\n                    )?;\n                    flattened_sections.push(value);\n                    continue;\n                }\n\n                has_field = true;\n                let mut value = String::new();\n                datatype_with_inline_attr(\n                    &mut value,\n                    exporter,\n                    types,\n                    ty,\n                    location.clone(),\n                    generics,\n                    false,\n                    type_render_stack,\n                )?;\n\n                let key = sanitise_key(field_name);\n                if field.optional {\n                    write!(schema, \"\\n\\t{key}: {value}.optional(),\")?;\n                } else {\n                    write!(schema, \"\\n\\t{key}: {value},\")?;\n                }\n            }\n\n            if has_field {\n                schema.push('\\n');\n            }\n            schema.push_str(\"})\");\n\n            if flattened_sections.is_empty() {\n                return Ok(Some(schema));\n            }\n\n            let mut sections = vec![schema];\n            sections.extend(flattened_sections);\n            let mut out = String::new();\n            out.push_str(&sections.join(\".and(\"));\n            for _ in 1..sections.len() {\n                out.push(')');\n            }\n            Ok(Some(out))\n        }\n        Fields::Unnamed(unnamed) => {\n            let fields = unnamed\n                .fields\n                .iter()\n                .filter_map(|field| field.ty.as_ref().map(|ty| (field, ty)))\n                .collect::<Vec<_>>();\n\n            Ok(match fields.as_slice() {\n                [] => {\n                    if unnamed.fields.is_empty() {\n                        Some(\"z.tuple([])\".to_string())\n                    } else {\n                        None\n                    }\n                }\n                [(field, ty)] if unnamed.fields.len() == 1 => {\n                    let mut out = String::new();\n                    datatype_with_inline_attr(\n                        &mut out,\n                        exporter,\n                        types,\n                        ty,\n                        location,\n                        generics,\n                        false,\n                        type_render_stack,\n                    )?;\n                    Some(out)\n                }\n                fields => {\n                    let mut out = String::from(\"z.tuple([\");\n                    for (i, (_field, ty)) in fields.iter().enumerate() {\n                        if i != 0 {\n                            out.push_str(\", \");\n                        }\n                        let mut item = String::new();\n                        datatype_with_inline_attr(\n                            &mut item,\n                            exporter,\n                            types,\n                            ty,\n                            location.clone(),\n                            generics,\n                            false,\n                            type_render_stack,\n                        )?;\n                        out.push_str(&item);\n                    }\n                    out.push_str(\"])\");\n                    Some(out)\n                }\n            })\n        }\n    }\n}\n\nfn reference_dt(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    r: &Reference,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    match r {\n        Reference::Named(r) => {\n            reference_named_dt(s, exporter, types, r, location, generics, type_render_stack)\n        }\n        Reference::Opaque(r) => reference_opaque_dt(s, r),\n    }\n}\n\nfn generic_dt(s: &mut String, g: &GenericReference) {\n    s.push_str(g.name());\n}\n\nfn reference_opaque_dt(s: &mut String, r: &OpaqueReference) -> Result<(), Error> {\n    if let Some(def) = r.downcast_ref::<opaque::Define>() {\n        s.push_str(&def.0);\n        return Ok(());\n    }\n    if r.downcast_ref::<opaque::Any>().is_some() {\n        s.push_str(\"z.any()\");\n        return Ok(());\n    }\n    if r.downcast_ref::<opaque::Unknown>().is_some() {\n        s.push_str(\"z.unknown()\");\n        return Ok(());\n    }\n    if r.downcast_ref::<opaque::Never>().is_some() {\n        s.push_str(\"z.never()\");\n        return Ok(());\n    }\n\n    Err(Error::unsupported_opaque_reference(r.clone()))\n}\n\nfn reference_named_dt(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    r: &NamedReference,\n    location: Vec<Cow<'static, str>>,\n    generics: &[(GenericReference, DataType)],\n    type_render_stack: &mut TypeRenderStack,\n) -> Result<(), Error> {\n    let ndt = types\n        .get(r)\n        .ok_or_else(|| Error::dangling_named_reference(format!(\"{r:?}\")))?;\n\n    if matches!(r.inner, NamedReferenceType::Inline { .. }) {\n        let ty = named_reference_ty(types, r)?;\n        let reference_generics = named_reference_generics(r)?;\n        return datatype(\n            s,\n            exporter,\n            types,\n            ty,\n            location,\n            reference_generics,\n            false,\n            type_render_stack,\n        );\n    }\n\n    crate::references::track_nr(r);\n\n    let schema_name = match exporter.layout {\n        Layout::FlatFile => format!(\"{}Schema\", ndt.name),\n        Layout::ModulePrefixedName => {\n            let mut name = ndt.module_path.split(\"::\").collect::<Vec<_>>().join(\"_\");\n            if !name.is_empty() {\n                name.push('_');\n            }\n            name.push_str(&ndt.name);\n            name.push_str(\"Schema\");\n            name\n        }\n        Layout::Files => {\n            let current_module_path = crate::references::current_module_path().unwrap_or_default();\n            let base = format!(\"{}Schema\", ndt.name);\n            if ndt.module_path == current_module_path {\n                base\n            } else {\n                format!(\"{}.{}\", crate::zod::module_alias(&ndt.module_path), base)\n            }\n        }\n    };\n\n    let should_lazy = type_render_stack\n        .iter()\n        .any(|(module, name)| module == &ndt.module_path && name == &ndt.name);\n\n    let mut reference_expr = schema_name;\n    let reference_generics = match &r.inner {\n        NamedReferenceType::Recursive => &[],\n        _ => named_reference_generics(r)?,\n    };\n    if !reference_generics.is_empty() {\n        let scoped_generics = generics\n            .iter()\n            .filter(|(parent_generic, _)| {\n                !reference_generics\n                    .iter()\n                    .any(|(child_generic, _)| child_generic == parent_generic)\n            })\n            .cloned()\n            .collect::<Vec<_>>();\n\n        reference_expr.push('(');\n        for (i, (_, v)) in reference_generics.iter().enumerate() {\n            if i != 0 {\n                reference_expr.push_str(\", \");\n            }\n            let mut generic_schema = String::new();\n            datatype(\n                &mut generic_schema,\n                exporter,\n                types,\n                v,\n                vec![],\n                &scoped_generics,\n                false,\n                type_render_stack,\n            )?;\n            reference_expr.push_str(&generic_schema);\n        }\n        reference_expr.push(')');\n    }\n\n    if should_lazy {\n        write!(s, \"z.lazy(() => {reference_expr})\")?;\n    } else {\n        s.push_str(&reference_expr);\n    }\n\n    Ok(())\n}\n\nfn exported_type_name(exporter: &Zod, ndt: &NamedDataType) -> Cow<'static, str> {\n    match exporter.layout {\n        Layout::FlatFile | Layout::Files => ndt.name.clone(),\n        Layout::ModulePrefixedName => {\n            let mut s = ndt.module_path.split(\"::\").collect::<Vec<_>>().join(\"_\");\n            if !s.is_empty() {\n                s.push('_');\n            }\n            s.push_str(&ndt.name);\n            Cow::Owned(s)\n        }\n    }\n}\n\nfn validate_type_name(name: &str, path: String) -> Result<(), Error> {\n    if RESERVED_TYPE_NAMES.contains(&name) {\n        return Err(Error::forbidden_name(path, name.to_string()));\n    }\n\n    let mut chars = name.chars();\n    let Some(first) = chars.next() else {\n        return Err(Error::invalid_name(path, name.to_string()));\n    };\n\n    if !(first.is_ascii_alphabetic() || first == '_' || first == '$') {\n        return Err(Error::invalid_name(path, name.to_string()));\n    }\n    if chars.any(|ch| !(ch.is_ascii_alphanumeric() || ch == '_' || ch == '$')) {\n        return Err(Error::invalid_name(path, name.to_string()));\n    }\n\n    Ok(())\n}\n\nfn sanitise_key(field_name: &str) -> String {\n    if is_identifier(field_name) {\n        field_name.to_string()\n    } else {\n        format!(\"\\\"{}\\\"\", escape_string(field_name))\n    }\n}\n\nfn is_identifier(name: &str) -> bool {\n    let mut chars = name.chars();\n    let Some(first) = chars.next() else {\n        return false;\n    };\n\n    (first.is_ascii_alphabetic() || first == '_' || first == '$')\n        && chars.all(|ch| ch.is_ascii_alphanumeric() || ch == '_' || ch == '$')\n}\n\nfn escape_string(value: &str) -> Cow<'_, str> {\n    if !value\n        .chars()\n        .any(|ch| ch == '\"' || ch == '\\\\' || ch == '\\n' || ch == '\\r' || ch == '\\t')\n    {\n        return Cow::Borrowed(value);\n    }\n\n    let mut escaped = String::with_capacity(value.len());\n    for ch in value.chars() {\n        match ch {\n            '\"' => escaped.push_str(r#\"\\\"\"#),\n            '\\\\' => escaped.push_str(r#\"\\\\\"#),\n            '\\n' => escaped.push_str(r#\"\\n\"#),\n            '\\r' => escaped.push_str(r#\"\\r\"#),\n            '\\t' => escaped.push_str(r#\"\\t\"#),\n            _ => escaped.push(ch),\n        }\n    }\n\n    Cow::Owned(escaped)\n}\n"
  },
  {
    "path": "specta-zod/src/references.rs",
    "content": "use std::{cell::RefCell, collections::HashSet};\n\nuse specta::datatype::NamedReference;\n\nthread_local! {\n    static REFERENCED_TYPES: RefCell<Option<Vec<HashSet<NamedReference>>>> = const { RefCell::new(None) };\n    static MODULE_PATH_CONTEXT: RefCell<Vec<String>> = const { RefCell::new(Vec::new()) };\n}\n\npub(crate) fn with_module_path<R>(module_path: &str, func: impl FnOnce() -> R) -> R {\n    struct Guard;\n    impl Drop for Guard {\n        fn drop(&mut self) {\n            MODULE_PATH_CONTEXT.with_borrow_mut(|ctx| {\n                ctx.pop();\n            });\n        }\n    }\n\n    MODULE_PATH_CONTEXT.with_borrow_mut(|ctx| {\n        ctx.push(module_path.to_string());\n    });\n\n    let guard = Guard;\n    let result = func();\n    std::mem::forget(guard);\n    MODULE_PATH_CONTEXT.with_borrow_mut(|ctx| {\n        ctx.pop();\n    });\n\n    result\n}\n\npub(crate) fn current_module_path() -> Option<String> {\n    MODULE_PATH_CONTEXT.with_borrow(|ctx| ctx.last().cloned())\n}\n\n/// Collect all named references created in the closure body.\npub fn collect_references<R>(func: impl FnOnce() -> R) -> (R, HashSet<NamedReference>) {\n    struct Guard;\n    impl Drop for Guard {\n        fn drop(&mut self) {\n            REFERENCED_TYPES.with_borrow_mut(|types| {\n                if let Some(v) = types {\n                    if v.len() == 1 {\n                        *types = None;\n                    } else {\n                        v.pop();\n                    }\n                }\n            })\n        }\n    }\n\n    REFERENCED_TYPES.with_borrow_mut(|v| {\n        if let Some(v) = v {\n            v.push(Default::default());\n        } else {\n            *v = Some(vec![Default::default()]);\n        }\n    });\n\n    let guard = Guard;\n    let result = func();\n    std::mem::forget(guard);\n\n    (\n        result,\n        REFERENCED_TYPES.with_borrow_mut(|types| {\n            types\n                .as_mut()\n                .expect(\"REFERENCED_TYPES is unset but it should be set\")\n                .pop()\n                .expect(\"REFERENCED_TYPES is missing a valid collection context\")\n        }),\n    )\n}\n\npub(crate) fn track_nr(r: &NamedReference) {\n    REFERENCED_TYPES.with_borrow_mut(|ctxs| {\n        if let Some(ctxs) = ctxs {\n            for ctx in ctxs {\n                ctx.insert(r.clone());\n            }\n        }\n    });\n}\n"
  },
  {
    "path": "specta-zod/src/reserved_names.rs",
    "content": "pub(crate) const RESERVED_TYPE_NAMES: &[&str] = &[\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"const\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"delete\",\n    \"do\",\n    \"else\",\n    \"enum\",\n    \"export\",\n    \"extends\",\n    \"false\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"import\",\n    \"in\",\n    \"instanceof\",\n    \"new\",\n    \"null\",\n    \"return\",\n    \"super\",\n    \"switch\",\n    \"this\",\n    \"throw\",\n    \"true\",\n    \"try\",\n    \"typeof\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"with\",\n    \"as\",\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n    \"type\",\n    \"from\",\n    \"of\",\n];\n"
  },
  {
    "path": "specta-zod/src/types.rs",
    "content": "use std::fmt::Debug;\n\nuse specta::{\n    Type, Types,\n    datatype::{DataType, Reference},\n};\n\nuse crate::opaque;\n\n/// Cast a Rust type to `z.any()`.\npub struct Any<T = ()>(T);\n\nimpl<T> Type for Any<T> {\n    fn definition(_: &mut Types) -> DataType {\n        DataType::Reference(Reference::opaque(opaque::Any))\n    }\n}\n\nimpl<T: Debug> Debug for Any<T> {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.debug_tuple(\"Any\").field(&self.0).finish()\n    }\n}\n\nimpl<T: Clone> Clone for Any<T> {\n    fn clone(&self) -> Self {\n        Self(self.0.clone())\n    }\n}\n\nimpl<T: Default> Default for Any<T> {\n    fn default() -> Self {\n        Self(T::default())\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<T: serde::Serialize> serde::Serialize for Any<T> {\n    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: serde::Serializer,\n    {\n        T::serialize(&self.0, serializer)\n    }\n}\n\n/// Cast a Rust type to `z.unknown()`.\npub struct Unknown<T = ()>(T);\n\nimpl<T> Type for Unknown<T> {\n    fn definition(_: &mut Types) -> DataType {\n        DataType::Reference(Reference::opaque(opaque::Unknown))\n    }\n}\n\nimpl<T: Debug> Debug for Unknown<T> {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.debug_tuple(\"Unknown\").field(&self.0).finish()\n    }\n}\n\nimpl<T: Clone> Clone for Unknown<T> {\n    fn clone(&self) -> Self {\n        Self(self.0.clone())\n    }\n}\n\nimpl<T: Default> Default for Unknown<T> {\n    fn default() -> Self {\n        Self(T::default())\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<T: serde::Serialize> serde::Serialize for Unknown<T> {\n    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: serde::Serializer,\n    {\n        T::serialize(&self.0, serializer)\n    }\n}\n\n/// Cast a Rust type to `z.never()`.\npub struct Never<T = ()>(T);\n\nimpl<T> Type for Never<T> {\n    fn definition(_: &mut Types) -> DataType {\n        DataType::Reference(Reference::opaque(opaque::Never))\n    }\n}\n\nimpl<T: Debug> Debug for Never<T> {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.debug_tuple(\"Never\").field(&self.0).finish()\n    }\n}\n\nimpl<T: Clone> Clone for Never<T> {\n    fn clone(&self) -> Self {\n        Self(self.0.clone())\n    }\n}\n\nimpl<T: Default> Default for Never<T> {\n    fn default() -> Self {\n        Self(T::default())\n    }\n}\n\n#[cfg(feature = \"serde\")]\n#[cfg_attr(docsrs, doc(cfg(feature = \"serde\")))]\nimpl<T: serde::Serialize> serde::Serialize for Never<T> {\n    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: serde::Serializer,\n    {\n        T::serialize(&self.0, serializer)\n    }\n}\n"
  },
  {
    "path": "specta-zod/src/zod.rs",
    "content": "use std::{\n    borrow::Cow,\n    collections::{BTreeMap, BTreeSet, HashMap, HashSet},\n    fmt,\n    ops::Deref,\n    path::{Path, PathBuf},\n    sync::Arc,\n};\n\nuse specta::{\n    Format, Types,\n    datatype::{DataType, Fields, NamedDataType, Reference},\n};\n\nuse crate::{Error, primitives, references};\n\n/// Allows configuring how Specta's Zod exporter will deal with BigInt types ([i64], [i128] etc).\n#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]\npub enum BigIntExportBehavior {\n    /// Export BigInt as a Zod string schema.\n    String,\n    /// Export BigInt as a Zod number schema.\n    Number,\n    /// Export BigInt as a Zod bigint schema.\n    BigInt,\n    /// Abort export on BigInt usage.\n    #[default]\n    Fail,\n}\n\n/// Allows configuring the format of generated output.\n#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]\npub enum Layout {\n    /// Flatten all types into one file with unmodified names.\n    #[default]\n    FlatFile,\n    /// Flatten into one file with module prefixes added to each type name.\n    ModulePrefixedName,\n    /// Emit one file per Rust module path.\n    Files,\n}\n\nimpl fmt::Display for Layout {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(f, \"{self:?}\")\n    }\n}\n\n#[derive(Clone)]\n#[allow(clippy::type_complexity)]\nstruct RuntimeFn(\n    Arc<dyn Fn(FrameworkExporter<'_>) -> Result<Cow<'static, str>, Error> + Send + Sync>,\n);\n\nimpl fmt::Debug for RuntimeFn {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(f, \"RuntimeFn({:p})\", self.0)\n    }\n}\n\n/// Zod language exporter.\n#[derive(Debug, Clone)]\n#[non_exhaustive]\npub struct Zod {\n    /// Custom header prepended to exported files.\n    pub header: Cow<'static, str>,\n    framework_runtime: Option<RuntimeFn>,\n    framework_prelude: Cow<'static, str>,\n    /// Strategy for exporting Rust bigint-compatible primitives.\n    pub bigint: BigIntExportBehavior,\n    /// Output layout mode for generated Zod TypeScript.\n    pub layout: Layout,\n}\n\nimpl Default for Zod {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl Zod {\n    /// Construct a new exporter with default options configured.\n    pub fn new() -> Self {\n        Self {\n            header: Cow::Borrowed(\"\"),\n            framework_runtime: None,\n            framework_prelude: Cow::Borrowed(\n                \"import { z } from \\\"zod\\\";\\n// This file has been generated by Specta. Do not edit this file manually.\",\n            ),\n            bigint: Default::default(),\n            layout: Default::default(),\n        }\n    }\n\n    /// Provide a prelude which is added to the start of all exported files.\n    pub fn framework_prelude(mut self, prelude: impl Into<Cow<'static, str>>) -> Self {\n        self.framework_prelude = prelude.into();\n        self\n    }\n\n    /// Add runtime code exported as part of the bindings.\n    pub fn framework_runtime(\n        mut self,\n        builder: impl Fn(FrameworkExporter<'_>) -> Result<Cow<'static, str>, Error>\n        + Send\n        + Sync\n        + 'static,\n    ) -> Self {\n        self.framework_runtime = Some(RuntimeFn(Arc::new(builder)));\n        self\n    }\n\n    /// Configure a header for the file.\n    pub fn header(mut self, header: impl Into<Cow<'static, str>>) -> Self {\n        self.header = header.into();\n        self\n    }\n\n    /// Configure BigInt handling behaviour.\n    pub fn bigint(mut self, bigint: BigIntExportBehavior) -> Self {\n        self.bigint = bigint;\n        self\n    }\n\n    /// Configure bindings layout.\n    pub fn layout(mut self, layout: Layout) -> Self {\n        self.layout = layout;\n        self\n    }\n\n    /// Export files into a single string.\n    pub fn export(&self, types: &Types, format: impl Format) -> Result<String, Error> {\n        let exporter = self.clone();\n        let formatted_types = format_types(types, &format)?;\n        let types = formatted_types.as_ref();\n\n        if let Layout::Files = exporter.layout {\n            return Err(Error::unable_to_export(exporter.layout));\n        }\n\n        let mut out = render_file_header(&exporter);\n\n        let mut has_manually_exported_user_types = false;\n        let mut runtime = Ok(Cow::default());\n        if let Some(framework_runtime) = &exporter.framework_runtime {\n            runtime = (framework_runtime.0)(FrameworkExporter {\n                exporter: &exporter,\n                format: Some(&format),\n                has_manually_exported_user_types: &mut has_manually_exported_user_types,\n                files_root_types: \"\",\n                types,\n            });\n        }\n        let runtime = runtime?;\n\n        if !runtime.is_empty() {\n            out.push('\\n');\n            out.push_str(&runtime);\n            out.push('\\n');\n        }\n\n        if !has_manually_exported_user_types {\n            render_types(&mut out, &exporter, types, \"\")?;\n        }\n\n        Ok(out)\n    }\n\n    /// Export the types to a specific file/folder.\n    pub fn export_to(\n        &self,\n        path: impl AsRef<Path>,\n        types: &Types,\n        format: impl Format,\n    ) -> Result<(), Error> {\n        let exporter = self.clone();\n        let formatted_types = format_types(types, &format)?;\n        let types = formatted_types.as_ref();\n        let path = path.as_ref();\n\n        if exporter.layout != Layout::Files {\n            let mut result = render_file_header(&exporter);\n\n            let mut has_manually_exported_user_types = false;\n            let mut runtime = Ok(Cow::default());\n            if let Some(framework_runtime) = &exporter.framework_runtime {\n                runtime = (framework_runtime.0)(FrameworkExporter {\n                    exporter: &exporter,\n                    format: Some(&format),\n                    has_manually_exported_user_types: &mut has_manually_exported_user_types,\n                    files_root_types: \"\",\n                    types,\n                });\n            }\n            let runtime = runtime?;\n\n            if !runtime.is_empty() {\n                result.push('\\n');\n                result.push_str(&runtime);\n                result.push('\\n');\n            }\n\n            if !has_manually_exported_user_types {\n                render_types(&mut result, &exporter, types, \"\")?;\n            }\n\n            if let Some(parent) = path.parent() {\n                std::fs::create_dir_all(parent)?;\n            }\n            std::fs::write(path, result)?;\n            return Ok(());\n        }\n\n        fn export(\n            exporter: &Zod,\n            types: &Types,\n            module: &mut Module,\n            s: &mut String,\n            path: &Path,\n            files: &mut HashMap<PathBuf, String>,\n        ) -> Result<bool, Error> {\n            module.types.sort_by(|a, b| {\n                a.name\n                    .cmp(&b.name)\n                    .then(a.module_path.cmp(&b.module_path))\n                    .then(a.location.cmp(&b.location))\n            });\n\n            let (rendered_types_result, referenced_types) =\n                references::with_module_path(module.module_path.as_ref(), || {\n                    references::collect_references(|| {\n                        let mut rendered = String::new();\n                        let exports = render_flat_types(\n                            &mut rendered,\n                            exporter,\n                            types,\n                            module.types.iter().copied(),\n                            \"\",\n                        )?;\n                        Ok::<_, Error>((rendered, exports))\n                    })\n                });\n\n            let (rendered_types, exports) = rendered_types_result?;\n\n            let import_paths = referenced_types\n                .into_iter()\n                .filter_map(|r| {\n                    types\n                        .get(&r)\n                        .map(|ndt| ndt.module_path.as_ref().to_string())\n                })\n                .filter(|module_path| module_path != module.module_path.as_ref())\n                .collect::<BTreeSet<_>>();\n\n            if !import_paths.is_empty() {\n                s.push('\\n');\n                s.push_str(&module_import_block(\n                    module.module_path.as_ref(),\n                    &import_paths,\n                ));\n            }\n\n            if !import_paths.is_empty() && !rendered_types.is_empty() {\n                s.push('\\n');\n            }\n\n            s.push_str(&rendered_types);\n\n            for (name, module) in &mut module.children {\n                if module.types.is_empty() && module.children.is_empty() {\n                    continue;\n                }\n\n                let mut path = path.join(name);\n                let mut out = render_file_header(exporter);\n                let has_types = export(exporter, types, module, &mut out, &path, files)?;\n                if has_types {\n                    path.set_extension(\"ts\");\n                    files.insert(path, out);\n                }\n            }\n\n            Ok(!exports.is_empty())\n        }\n\n        let mut files = HashMap::new();\n        let mut runtime_path = path.join(\"index\");\n        runtime_path.set_extension(\"ts\");\n\n        let mut root_types = String::new();\n        export(\n            &exporter,\n            types,\n            &mut build_module_graph(types),\n            &mut root_types,\n            path,\n            &mut files,\n        )?;\n\n        {\n            let mut has_manually_exported_user_types = false;\n            let mut runtime = Cow::default();\n            let mut runtime_references = HashSet::new();\n            if let Some(framework_runtime) = &exporter.framework_runtime {\n                let (runtime_result, referenced_types) = references::with_module_path(\"\", || {\n                    references::collect_references(|| {\n                        (framework_runtime.0)(FrameworkExporter {\n                            exporter: &exporter,\n                            format: Some(&format),\n                            has_manually_exported_user_types: &mut has_manually_exported_user_types,\n                            files_root_types: &root_types,\n                            types,\n                        })\n                    })\n                });\n                runtime = runtime_result?;\n                runtime_references = referenced_types;\n            }\n\n            let should_export_user_types =\n                !has_manually_exported_user_types && !root_types.is_empty();\n\n            if !runtime.is_empty() || should_export_user_types {\n                files.insert(runtime_path, {\n                    let mut out = render_file_header(&exporter);\n                    let mut body = String::new();\n\n                    if !runtime.is_empty() {\n                        body.push_str(&runtime);\n                    }\n\n                    if should_export_user_types {\n                        if !body.is_empty() {\n                            body.push('\\n');\n                        }\n                        body.push_str(&root_types);\n                    }\n\n                    let import_paths = runtime_references\n                        .into_iter()\n                        .filter_map(|r| {\n                            types\n                                .get(&r)\n                                .map(|ndt| ndt.module_path.as_ref().to_string())\n                        })\n                        .filter(|module_path| !module_path.is_empty())\n                        .collect::<BTreeSet<_>>();\n\n                    if !import_paths.is_empty() {\n                        out.push('\\n');\n                        out.push_str(&module_import_block(\"\", &import_paths));\n                    }\n\n                    if !body.is_empty() {\n                        out.push('\\n');\n                        if !import_paths.is_empty() {\n                            out.push('\\n');\n                        }\n                        out.push_str(&body);\n                    }\n\n                    out\n                });\n            }\n        }\n\n        match path.metadata() {\n            Ok(meta) if !meta.is_dir() => std::fs::remove_file(path).or_else(|source| {\n                if source.kind() == std::io::ErrorKind::NotFound {\n                    Ok(())\n                } else {\n                    Err(Error::remove_file(path.to_path_buf(), source))\n                }\n            })?,\n            Ok(_) => {}\n            Err(err) if err.kind() == std::io::ErrorKind::NotFound => {}\n            Err(source) => {\n                return Err(Error::metadata(path.to_path_buf(), source));\n            }\n        }\n\n        for (path, content) in &files {\n            path.parent().map(std::fs::create_dir_all).transpose()?;\n            std::fs::write(path, content)?;\n        }\n\n        cleanup_stale_files(path, &files, self)?;\n\n        Ok(())\n    }\n}\n\nfn format_types<'a>(types: &'a Types, format: &dyn Format) -> Result<Cow<'a, Types>, Error> {\n    Ok(\n        match format\n            .map_types(types)\n            .map_err(|err| Error::format(\"type graph formatter failed\", err))?\n        {\n            Cow::Borrowed(_) => Cow::Borrowed(types),\n            Cow::Owned(types) => Cow::Owned(types),\n        },\n    )\n}\n\nfn map_datatype_format(\n    format: Option<&dyn Format>,\n    types: &Types,\n    dt: &DataType,\n) -> Result<DataType, Error> {\n    let Some(format) = format else {\n        return Ok(dt.clone());\n    };\n\n    let mapped = format\n        .map_type(types, dt)\n        .map_err(|err| Error::format(\"datatype formatter failed\", err))?;\n\n    match mapped {\n        Cow::Borrowed(dt) => map_datatype_format_children(Some(format), types, dt.clone()),\n        Cow::Owned(dt) => map_datatype_format_children(Some(format), types, dt),\n    }\n}\n\nfn map_datatype_format_children(\n    format: Option<&dyn Format>,\n    types: &Types,\n    mut dt: DataType,\n) -> Result<DataType, Error> {\n    match &mut dt {\n        DataType::Primitive(_) => {}\n        DataType::List(list) => {\n            *list.ty = map_datatype_format(format, types, &list.ty)?;\n        }\n        DataType::Map(map) => {\n            let key = map_datatype_format(format, types, map.key_ty())?;\n            let value = map_datatype_format(format, types, map.value_ty())?;\n            map.set_key_ty(key);\n            map.set_value_ty(value);\n        }\n        DataType::Nullable(inner) => {\n            **inner = map_datatype_format(format, types, inner)?;\n        }\n        DataType::Struct(strct) => map_datatype_fields(format, types, &mut strct.fields)?,\n        DataType::Enum(enm) => {\n            for (_, variant) in &mut enm.variants {\n                map_datatype_fields(format, types, &mut variant.fields)?;\n            }\n        }\n        DataType::Tuple(tuple) => {\n            for element in &mut tuple.elements {\n                *element = map_datatype_format(format, types, element)?;\n            }\n        }\n        DataType::Intersection(intersection) => {\n            for element in intersection {\n                *element = map_datatype_format(format, types, element)?;\n            }\n        }\n        DataType::Reference(Reference::Named(reference)) => {\n            if let specta::datatype::NamedReferenceType::Reference { generics, .. } =\n                &mut reference.inner\n            {\n                for (_, generic) in generics {\n                    *generic = map_datatype_format(format, types, generic)?;\n                }\n            }\n        }\n        DataType::Reference(Reference::Opaque(_)) | DataType::Generic(_) => {}\n    }\n\n    Ok(dt)\n}\n\nfn map_datatype_fields(\n    format: Option<&dyn Format>,\n    types: &Types,\n    fields: &mut Fields,\n) -> Result<(), Error> {\n    match fields {\n        Fields::Unit => {}\n        Fields::Unnamed(unnamed) => {\n            for field in &mut unnamed.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    *ty = map_datatype_format(format, types, ty)?;\n                }\n            }\n        }\n        Fields::Named(named) => {\n            for (_, field) in &mut named.fields {\n                if let Some(ty) = field.ty.as_mut() {\n                    *ty = map_datatype_format(format, types, ty)?;\n                }\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn map_named_datatype_format(\n    format: Option<&dyn Format>,\n    types: &Types,\n    ndt: &NamedDataType,\n) -> Result<NamedDataType, Error> {\n    let mut mapped = ndt.clone();\n    mapped.ty = ndt\n        .ty\n        .as_ref()\n        .map(|ty| map_datatype_format(format, types, ty))\n        .transpose()?;\n    Ok(mapped)\n}\n\nimpl AsRef<Zod> for Zod {\n    fn as_ref(&self) -> &Zod {\n        self\n    }\n}\n\nimpl AsMut<Zod> for Zod {\n    fn as_mut(&mut self) -> &mut Zod {\n        self\n    }\n}\n\n/// Reference to the Zod exporter for framework callbacks.\npub struct FrameworkExporter<'a> {\n    exporter: &'a Zod,\n    format: Option<&'a dyn Format>,\n    has_manually_exported_user_types: &'a mut bool,\n    files_root_types: &'a str,\n    /// Collected types currently being exported.\n    pub types: &'a Types,\n}\n\nimpl fmt::Debug for FrameworkExporter<'_> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        self.exporter.fmt(f)\n    }\n}\n\nimpl AsRef<Zod> for FrameworkExporter<'_> {\n    fn as_ref(&self) -> &Zod {\n        self.exporter\n    }\n}\n\nimpl Deref for FrameworkExporter<'_> {\n    type Target = Zod;\n\n    fn deref(&self) -> &Self::Target {\n        self.exporter\n    }\n}\n\nimpl FrameworkExporter<'_> {\n    /// Render the types within [`Types`](specta::Types).\n    pub fn render_types(&mut self) -> Result<Cow<'static, str>, Error> {\n        let mut s = String::new();\n        render_types(&mut s, self.exporter, self.types, self.files_root_types)?;\n        *self.has_manually_exported_user_types = true;\n        Ok(Cow::Owned(s))\n    }\n\n    /// [primitives::inline]\n    pub fn inline(&self, dt: &DataType) -> Result<String, Error> {\n        let mapped = map_datatype_format(self.format, self.types, dt)?;\n        primitives::inline(self, self.types, &mapped)\n    }\n\n    /// [primitives::reference]\n    pub fn reference(&self, r: &Reference) -> Result<String, Error> {\n        let mapped = map_datatype_format(self.format, self.types, &DataType::Reference(r.clone()))?;\n        match mapped {\n            DataType::Reference(reference) => primitives::reference(self, self.types, &reference),\n            dt => primitives::inline(self, self.types, &dt),\n        }\n    }\n\n    /// [primitives::export]\n    pub fn export<'a>(\n        &self,\n        ndts: impl Iterator<Item = &'a NamedDataType>,\n        indent: &'a str,\n    ) -> Result<String, Error> {\n        let mapped = ndts\n            .map(|ndt| map_named_datatype_format(self.format, self.types, ndt))\n            .collect::<Result<Vec<_>, _>>()?;\n        primitives::export(self, self.types, mapped.iter(), indent)\n    }\n}\n\nstruct Module<'a> {\n    types: Vec<&'a NamedDataType>,\n    children: BTreeMap<&'a str, Module<'a>>,\n    module_path: Cow<'static, str>,\n}\n\nfn build_module_graph(types: &Types) -> Module<'_> {\n    types.into_unsorted_iter().fold(\n        Module {\n            types: Default::default(),\n            children: Default::default(),\n            module_path: Default::default(),\n        },\n        |mut ns, ndt| {\n            let path = &ndt.module_path;\n\n            if path.is_empty() {\n                ns.types.push(ndt);\n            } else {\n                let mut current = &mut ns;\n                let mut current_path = String::new();\n                for segment in path.split(\"::\") {\n                    if !current_path.is_empty() {\n                        current_path.push_str(\"::\");\n                    }\n                    current_path.push_str(segment);\n\n                    current = current.children.entry(segment).or_insert_with(|| Module {\n                        types: Default::default(),\n                        children: Default::default(),\n                        module_path: current_path.clone().into(),\n                    });\n                }\n\n                current.types.push(ndt);\n            }\n\n            ns\n        },\n    )\n}\n\nfn render_file_header(exporter: &Zod) -> String {\n    let mut out = exporter.header.to_string();\n    if !exporter.header.is_empty() {\n        out.push('\\n');\n    }\n\n    out.push_str(&exporter.framework_prelude);\n    if !exporter.framework_prelude.is_empty() {\n        out.push('\\n');\n    }\n\n    out\n}\n\nfn render_types(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    files_user_types: &str,\n) -> Result<(), Error> {\n    match exporter.layout {\n        Layout::FlatFile | Layout::ModulePrefixedName => {\n            render_flat_types(s, exporter, types, types.into_sorted_iter(), \"\")?;\n        }\n        Layout::Files => {\n            if !files_user_types.is_empty() {\n                s.push_str(files_user_types);\n            }\n        }\n    }\n\n    Ok(())\n}\n\nfn render_flat_types<'a>(\n    s: &mut String,\n    exporter: &Zod,\n    types: &Types,\n    ndts: impl ExactSizeIterator<Item = &'a NamedDataType>,\n    indent: &str,\n) -> Result<HashMap<String, std::panic::Location<'static>>, Error> {\n    let mut exports = HashMap::with_capacity(ndts.len());\n\n    let ndts = ndts\n        .filter(|ndt| ndt.ty.is_some())\n        .map(|ndt| {\n            let export_name = exported_type_name(exporter, ndt);\n            if let Some(other) = exports.insert(export_name.to_string(), ndt.location) {\n                return Err(Error::duplicate_type_name(export_name, ndt.location, other));\n            }\n            Ok(ndt)\n        })\n        .collect::<Result<Vec<_>, _>>()?;\n\n    let mut type_render_stack = Vec::new();\n    primitives::export_internal(\n        s,\n        exporter,\n        types,\n        ndts.into_iter(),\n        indent,\n        &mut type_render_stack,\n    )?;\n\n    Ok(exports)\n}\n\nfn collect_existing_files(root: &Path) -> Result<HashSet<PathBuf>, Error> {\n    if !root.exists() {\n        return Ok(HashSet::new());\n    }\n\n    let mut files = HashSet::new();\n    let entries =\n        std::fs::read_dir(root).map_err(|source| Error::read_dir(root.to_path_buf(), source))?;\n    for entry in entries {\n        let entry = entry.map_err(|source| Error::read_dir(root.to_path_buf(), source))?;\n        let path = entry.path();\n        let file_type = entry\n            .file_type()\n            .map_err(|source| Error::metadata(path.clone(), source))?;\n\n        if file_type.is_symlink() {\n            continue;\n        }\n\n        if file_type.is_dir() {\n            files.extend(collect_existing_files(&path)?);\n        } else if matches!(path.extension().and_then(|e| e.to_str()), Some(\"ts\")) {\n            files.insert(path);\n        }\n    }\n\n    Ok(files)\n}\n\nfn is_generated_specta_file(path: &Path, exporter: &Zod) -> Result<bool, Error> {\n    match std::fs::read_to_string(path) {\n        Ok(contents) => Ok((!exporter.framework_prelude.is_empty()\n            && contents.contains(exporter.framework_prelude.as_ref()))\n            || contents.contains(\"generated by Specta\")),\n        Err(err) if err.kind() == std::io::ErrorKind::InvalidData => Ok(false),\n        Err(source) => Err(Error::from(source)),\n    }\n}\n\nfn remove_empty_dirs(path: &Path, root: &Path) -> Result<(), Error> {\n    let entries =\n        std::fs::read_dir(path).map_err(|source| Error::read_dir(path.to_path_buf(), source))?;\n    for entry in entries {\n        let entry = entry.map_err(|source| Error::read_dir(path.to_path_buf(), source))?;\n        let entry_path = entry.path();\n        let file_type = entry\n            .file_type()\n            .map_err(|source| Error::metadata(entry_path.clone(), source))?;\n        if file_type.is_symlink() {\n            continue;\n        }\n        if file_type.is_dir() {\n            remove_empty_dirs(&entry_path, root)?;\n        }\n    }\n\n    let is_empty = path\n        .read_dir()\n        .map_err(|source| Error::read_dir(path.to_path_buf(), source))?\n        .next()\n        .is_none();\n\n    if path != root && is_empty {\n        match std::fs::remove_dir(path) {\n            Ok(()) => {}\n            Err(err) if err.kind() == std::io::ErrorKind::NotFound => {}\n            Err(source) => {\n                return Err(Error::remove_dir(path.to_path_buf(), source));\n            }\n        }\n    }\n    Ok(())\n}\n\nfn cleanup_stale_files(\n    root: &Path,\n    current_files: &HashMap<PathBuf, String>,\n    exporter: &Zod,\n) -> Result<(), Error> {\n    for path in collect_existing_files(root)? {\n        if current_files.contains_key(&path) || !is_generated_specta_file(&path, exporter)? {\n            continue;\n        }\n\n        std::fs::remove_file(&path).or_else(|source| {\n            if source.kind() == std::io::ErrorKind::NotFound {\n                Ok(())\n            } else {\n                Err(Error::remove_file(path.clone(), source))\n            }\n        })?;\n    }\n\n    remove_empty_dirs(root, root)?;\n\n    Ok(())\n}\n\nfn exported_type_name(exporter: &Zod, ndt: &NamedDataType) -> Cow<'static, str> {\n    match exporter.layout {\n        Layout::FlatFile | Layout::Files => ndt.name.clone(),\n        Layout::ModulePrefixedName => {\n            let mut s = ndt.module_path.split(\"::\").collect::<Vec<_>>().join(\"_\");\n            if !s.is_empty() {\n                s.push('_');\n            }\n            s.push_str(&ndt.name);\n            Cow::Owned(s)\n        }\n    }\n}\n\npub(crate) fn module_alias(module_path: &str) -> String {\n    if module_path.is_empty() {\n        \"$root\".to_string()\n    } else {\n        module_path.split(\"::\").collect::<Vec<_>>().join(\"$\")\n    }\n}\n\nfn module_import_statement(from_module_path: &str, to_module_path: &str) -> String {\n    format!(\n        \"import * as {} from \\\"{}\\\";\",\n        module_alias(to_module_path),\n        module_import_path(from_module_path, to_module_path)\n    )\n}\n\nfn module_import_block(from_module_path: &str, import_paths: &BTreeSet<String>) -> String {\n    import_paths\n        .iter()\n        .map(|module_path| module_import_statement(from_module_path, module_path))\n        .collect::<Vec<_>>()\n        .join(\"\\n\")\n}\n\nfn module_import_path(from_module_path: &str, to_module_path: &str) -> String {\n    fn module_file_segments(module_path: &str) -> Vec<&str> {\n        if module_path.is_empty() {\n            vec![\"index\"]\n        } else {\n            module_path.split(\"::\").collect()\n        }\n    }\n\n    let from_file_segments = module_file_segments(from_module_path);\n    let from_dir_segments = &from_file_segments[..from_file_segments.len() - 1];\n    let to_file_segments = module_file_segments(to_module_path);\n\n    let shared = from_dir_segments\n        .iter()\n        .zip(to_file_segments.iter())\n        .take_while(|(a, b)| a == b)\n        .count();\n\n    let mut relative_parts = Vec::new();\n    relative_parts.extend(std::iter::repeat_n(\n        \"..\",\n        from_dir_segments.len().saturating_sub(shared),\n    ));\n    relative_parts.extend(to_file_segments.iter().skip(shared).copied());\n\n    if relative_parts\n        .first()\n        .is_none_or(|v| *v != \".\" && *v != \"..\")\n    {\n        relative_parts.insert(0, \".\");\n    }\n\n    relative_parts.join(\"/\")\n}\n"
  },
  {
    "path": "tests/Cargo.toml",
    "content": "[package]\nname = \"specta-tests\"\nversion = \"0.0.0\"\nedition = \"2024\"\npublish = false\nautotests = false\n\n[[test]]\nname = \"test\"\npath = \"tests/mod.rs\"\nharness = true\n\n[dependencies]\nspecta = { path = \"../specta\", features = [\"function\", \"std\", \"derive\", \"serde_json\", \"serde_yaml\", \"toml\", \"chrono\", \"either\", \"error-stack\", \"ulid\", \"glam\", \"ordered-float\", \"heapless\", \"semver\", \"smol_str\", \"arrayvec\", \"smallvec\", \"geojson\", \"bson\"] }\nspecta-serde = { path = \"../specta-serde\" }\nspecta-swift = { path = \"../specta-swift\" }\nspecta-typescript = { path = \"../specta-typescript\" }\nspecta-zod = { path = \"../specta-zod\" }\nspecta-util = { path = \"../specta-util\", features = [\"serde\"] }                # TODO: Remove `serde` feature\n\nserde = { version = \"1.0.228\", features = [\"std\", \"derive\"] }\ntrybuild = \"1.0.116\"\nwasm-bindgen = \"0.2.120\"\nserde_json = \"1.0.149\"\nserde_yaml = \"0.9.34\"\ntoml = \"1.1.2\"\ninsta = \"1.47.2\"\nchrono = { version = \"0.4\", default-features = false, features = [\"clock\"] }\neither = { version = \"1.15\", default-features = false }\nulid = { version = \"1.2\", default-features = false, features = [] }\nglam = { version = \"0.32\", default-features = false, features = [\"std\"] }\nordered-float = { version = \">=3, <6\", default-features = false }\nheapless = { version = \">=0.7, <0.10\", default-features = false }\nsemver = { version = \"1\", default-features = false }\nsmol_str = { version = \"0.3\", default-features = false }\narrayvec = { version = \">=0.6, <0.8\", default-features = false }\nsmallvec = { version = \"1\", default-features = false }\ngeojson = { version = \"1.0\", default-features = false }\ntempfile = \"3.27.0\"\nthiserror = \"2.0.18\"\nerror-stack = { version = \"0.7\", default-features = false }\nbson = { version = \"3\", default-features = false, features = [\"compat-3-0-0\"] }\n"
  },
  {
    "path": "tests/tests/bound.rs",
    "content": "use specta::{Type, Types};\nuse specta_typescript::Typescript;\n\n#[derive(Type)]\n#[specta(bound = \"T: Clone + Type\", collect = false)]\nstruct CustomBound<T> {\n    value: T,\n}\n\n#[derive(Type)]\n#[specta(bound = \"T: Clone + Type, U: std::fmt::Debug + Type\", collect = false)]\nstruct MultiBound<T, U> {\n    t: T,\n    u: U,\n}\n\n#[derive(Type)]\n#[specta(bound = \"T: Clone + std::fmt::Debug + Type\", collect = false)]\nstruct ComplexBound<T> {\n    value: T,\n}\n\n#[derive(Type)]\n#[specta(bound = \"T: Type\", collect = false)]\nstruct ExistingWhere<T>\nwhere\n    T: Clone,\n{\n    value: T,\n}\n\n#[derive(Type)]\n#[specta(bound = \"T: Clone + Type\", collect = false)]\nenum EnumWithBound<T> {\n    Variant(T),\n    Other,\n}\n\n#[derive(Type)]\n#[specta(bound = \"T: Type + 'static\", collect = false)]\nstruct LifetimeBound<T> {\n    value: T,\n}\n\n#[derive(Type)]\n#[specta(bound = \"T: Clone + Type\", collect = false)]\nstruct RequiresClone<T> {\n    value: T,\n}\n\n#[test]\nfn custom_bound() {\n    #[derive(Clone, Type)]\n    #[specta(collect = false)]\n    struct CloneAndType;\n\n    let _: CustomBound<CloneAndType> = CustomBound {\n        value: CloneAndType,\n    };\n}\n\n#[test]\nfn multi_bound() {\n    #[derive(Clone, Debug, Type)]\n    #[specta(collect = false)]\n    struct AllTraits;\n\n    let _: MultiBound<AllTraits, AllTraits> = MultiBound {\n        t: AllTraits,\n        u: AllTraits,\n    };\n}\n\n#[test]\nfn complex_bound() {\n    #[derive(Clone, Debug, Type)]\n    #[specta(collect = false)]\n    struct AllTraits;\n\n    let _: ComplexBound<AllTraits> = ComplexBound { value: AllTraits };\n}\n\n#[test]\nfn existing_where() {\n    #[derive(Clone, Type)]\n    #[specta(collect = false)]\n    struct BothTraits;\n\n    let _: ExistingWhere<BothTraits> = ExistingWhere { value: BothTraits };\n}\n\n#[test]\nfn enum_bound() {\n    #[derive(Clone, Type)]\n    #[specta(collect = false)]\n    struct CloneAndType;\n\n    let _: EnumWithBound<CloneAndType> = EnumWithBound::Other;\n}\n\n#[test]\nfn lifetime_bound() {\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StaticType;\n\n    let _: LifetimeBound<StaticType> = LifetimeBound { value: StaticType };\n}\n\n#[test]\nfn requires_clone_bound() {\n    #[derive(Clone, Type)]\n    #[specta(collect = false)]\n    struct CloneAndType;\n\n    let _: RequiresClone<CloneAndType> = RequiresClone {\n        value: CloneAndType,\n    };\n}\n\n#[test]\nfn associated_type_bound_issue_138() {\n    // Regression test for https://github.com/specta-rs/specta/issues/138\n    trait MyTrait {\n        type A: Type;\n    }\n\n    struct AssocIsI32;\n\n    impl MyTrait for AssocIsI32 {\n        type A = i32;\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct Demo<T: MyTrait> {\n        value: T::A,\n    }\n\n    let types = Types::default().register::<Demo<AssocIsI32>>();\n    let output = Typescript::default()\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"bound-associated-type-issue-138\", output);\n}\n"
  },
  {
    "path": "tests/tests/errors.rs",
    "content": "// TODO: Maybe should this be merged into other tests???\n\nuse std::io;\n\nuse specta::Type;\nuse thiserror::Error;\n\n#[derive(Type, Error, Debug)]\n#[specta(collect = false)]\npub enum MyError {\n    #[error(\"data store disconnected\")]\n    Disconnect(\n        #[specta(type = String)]\n        #[from]\n        io::Error,\n    ),\n    #[error(\"the data for key `{0}` is not available\")]\n    Redaction(String),\n    #[error(\"invalid header (expected {expected:?}, found {found:?})\")]\n    InvalidHeader { expected: String, found: String },\n    #[error(\"unknown data store error\")]\n    Unknown,\n}\n"
  },
  {
    "path": "tests/tests/functions.rs",
    "content": "use std::fmt;\n\nuse specta::{\n    Format as _, Type, Types,\n    datatype::{DataType, Function},\n    function::{self, fn_datatype},\n    specta,\n};\nuse specta_typescript::{Typescript, primitives};\n\nfn render_datatype(ts: &Typescript, types: &Types, dt: &DataType) -> String {\n    // This is handled by Specta Typescript for you.\n    let types = specta_serde::Format.map_types(types).unwrap();\n    let dt = specta_serde::Format.map_type(&types, dt).unwrap();\n\n    match &*dt {\n        DataType::Reference(r) => primitives::reference(ts, &types, r).unwrap(),\n        dt => primitives::inline(ts, &types, dt).unwrap(),\n    }\n}\n\n/// Multiline\n/// Docs\n#[specta]\nfn a() {}\n\n#[specta]\nfn b(demo: String) {}\n\n#[specta]\nfn c(a: String, b: i32, c: bool) {}\n\n#[specta]\nfn d(demo: String) -> i32 {\n    42\n}\n\n#[specta]\nfn e<T: fmt::Debug>(window: T) {}\n\n// https://github.com/specta-rs/tauri-specta/issues/24\n#[specta]\nfn f(mut demo: String) -> i32 {\n    42\n}\n\n#[specta]\nfn g(x: std::string::String) {}\n\nmacro_rules! special_string {\n    () => {\n        String\n    };\n}\n\n#[specta]\nfn h(demo: special_string!()) {}\n\n#[specta]\nfn i() -> Result<i32, f32> {\n    Ok(42)\n}\n\n#[specta]\nfn k() -> Result<String, f32> {\n    Err(42.0)\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\npub struct Demo {\n    pub demo: String,\n}\n\n#[specta]\nfn l(Demo { demo }: Demo, (a, b): (String, u32)) {}\n\nmacro_rules! special_destructure {\n    () => {\n        Demo { demo }\n    };\n}\n\n#[specta]\nfn m(special_destructure!(): Demo) {}\n\n#[specta]\nasync fn async_fn() {}\n\n/// Testing Doc Comment\n#[specta]\nfn with_docs() {}\n\n#[specta]\npub fn public_function() {}\n\nmod nested {\n    use super::*;\n\n    #[specta]\n    pub fn nested() {}\n}\n\n#[specta]\nfn raw(r#type: i32) {}\n\n// https://github.com/specta-rs/specta/issues/213\n#[allow(non_snake_case)]\n#[specta(rename_all = \"snake_case\")]\nfn rename_all_fn(myArg: i32, anotherValue: String) {}\n\n#[allow(non_snake_case)]\n#[specta(rename = \"totally_custom\")]\nfn renamed_fn(myArg: i32) {}\n\n// TODO: Finish fixing these\n\n#[test]\nfn test_trailing_comma() {\n    function::collect_functions![a];\n    function::collect_functions![a,];\n    function::collect_functions![a, b, c];\n    function::collect_functions![a, b, c,];\n\n    function::collect_functions![a, b, c, d, e::<i32>, f, g, h, i, k, nested::nested];\n}\n\n#[test]\nfn test_function_exporting() {\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![a](&mut types);\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"a\");\n        insta::assert_snapshot!(def.args().len(), @\"0\");\n        insta::assert_snapshot!(format!(\"{:?}\", def.result()), @\"None\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![b](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"b\");\n        insta::assert_snapshot!(def.args().len(), @\"1\");\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[0].1),\n            @\"string\"\n        );\n        insta::assert_snapshot!(format!(\"{:?}\", def.result()), @\"None\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![c](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"c\");\n        insta::assert_snapshot!(def.args().len(), @\"3\");\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[0].1),\n            @\"string\"\n        );\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[1].1),\n            @\"number\"\n        );\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[2].1),\n            @\"boolean\"\n        );\n        insta::assert_snapshot!(format!(\"{:?}\", def.result()), @\"None\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![d](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"d\");\n        insta::assert_snapshot!(def.args().len(), @\"1\");\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[0].1),\n            @\"string\"\n        );\n        insta::assert_snapshot!(\n            def.result()\n                .map(|result| render_datatype(&ts, &types, result))\n                .as_deref()\n                .unwrap_or(\"None\"),\n            @\"number\"\n        );\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![e::<bool>](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"e\");\n        insta::assert_snapshot!(def.args().len(), @\"1\");\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[0].1),\n            @\"boolean\"\n        );\n        insta::assert_snapshot!(format!(\"{:?}\", def.result()), @\"None\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![f](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"f\");\n        insta::assert_snapshot!(def.args().len(), @\"1\");\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[0].1),\n            @\"string\"\n        );\n        insta::assert_snapshot!(\n            def.result()\n                .map(|result| render_datatype(&ts, &types, result))\n                .as_deref()\n                .unwrap_or(\"None\"),\n            @\"number\"\n        );\n    }\n\n    {\n        let mut types = Types::default();\n        let def: specta::datatype::Function = fn_datatype![g](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"g\");\n        insta::assert_snapshot!(def.args().len(), @\"1\");\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[0].1),\n            @\"string\"\n        );\n        insta::assert_snapshot!(format!(\"{:?}\", def.result()), @\"None\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: specta::datatype::Function = fn_datatype![h](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"h\");\n        insta::assert_snapshot!(def.args().len(), @\"1\");\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[0].1),\n            @\"string\"\n        );\n        insta::assert_snapshot!(format!(\"{:?}\", def.result()), @\"None\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![i](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"i\");\n        insta::assert_snapshot!(def.args().len(), @\"0\");\n        insta::assert_snapshot!(\n            def.result()\n                .map(|result| render_datatype(&ts, &types, result))\n                .as_deref()\n                .unwrap_or(\"None\"),\n            @\"Result<number, number>\"\n        );\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![k](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"k\");\n        insta::assert_snapshot!(def.args().len(), @\"0\");\n        insta::assert_snapshot!(\n            def.result()\n                .map(|result| render_datatype(&ts, &types, result))\n                .as_deref()\n                .unwrap_or(\"None\"),\n            @\"Result<string, number>\"\n        );\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![l](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"l\");\n        insta::assert_snapshot!(def.args().len(), @\"2\");\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[0].1),\n            @\"Demo\"\n        );\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[1].1),\n            @\"[string, number]\"\n        );\n        insta::assert_snapshot!(format!(\"{:?}\", def.result()), @\"None\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![m](&mut types);\n        let ts = Typescript::new();\n        insta::assert_snapshot!(def.asyncness(), @\"false\");\n        insta::assert_snapshot!(def.name(), @\"m\");\n        insta::assert_snapshot!(def.args().len(), @\"1\");\n        insta::assert_snapshot!(\n            render_datatype(&ts, &types, &def.args()[0].1),\n            @\"Demo\"\n        );\n        insta::assert_snapshot!(format!(\"{:?}\", def.result()), @\"None\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![async_fn](&mut types);\n        insta::assert_snapshot!(def.asyncness(), @\"true\");\n        insta::assert_snapshot!(def.name(), @\"async_fn\");\n        insta::assert_snapshot!(def.args().len(), @\"0\");\n        insta::assert_snapshot!(format!(\"{:?}\", def.result()), @\"None\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![with_docs](&mut types);\n        insta::assert_snapshot!(def.asyncness, @\"false\");\n        insta::assert_snapshot!(def.name, @\"with_docs\");\n        insta::assert_snapshot!(def.args.len(), @\"0\");\n        insta::assert_snapshot!(format!(\"{:?}\", def.result), @\"None\");\n        insta::assert_snapshot!(def.docs, @\" Testing Doc Comment\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![raw](&mut types);\n        insta::assert_snapshot!(def.args()[0].0, @\"type\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![rename_all_fn](&mut types);\n        insta::assert_snapshot!(def.name, @\"rename_all_fn\");\n        insta::assert_snapshot!(def.args[0].0, @\"my_arg\");\n        insta::assert_snapshot!(def.args[1].0, @\"another_value\");\n    }\n\n    {\n        let mut types = Types::default();\n        let def: Function = fn_datatype![renamed_fn](&mut types);\n        insta::assert_snapshot!(def.name, @\"totally_custom\");\n        insta::assert_snapshot!(def.args[0].0, @\"myArg\");\n    }\n}\n"
  },
  {
    "path": "tests/tests/jsdoc.rs",
    "content": "use std::{\n    path::Path,\n    time::{Duration, SystemTime},\n};\n\nuse specta::datatype::{DataType, Reference};\nuse specta::{Type, Types};\nuse specta_typescript::{JSDoc, Layout, primitives};\nuse tempfile::TempDir;\n\nuse crate::fs_to_string;\n\nuse crate::typescript::phase_collections;\n\nmod jsdoc_export_to_files_runtime_imports_types {\n    use super::*;\n\n    pub mod three {\n        use super::*;\n\n        #[derive(Type)]\n        #[specta(collect = false)]\n        pub struct Three {\n            pub active: bool,\n        }\n    }\n\n    pub mod two {\n        use super::*;\n\n        #[derive(Type)]\n        #[specta(collect = false)]\n        pub struct Two {\n            pub value: String,\n        }\n    }\n\n    pub mod one {\n        use super::*;\n\n        #[derive(Type)]\n        #[specta(collect = false)]\n        pub struct One {\n            pub two: super::two::Two,\n            pub three: super::three::Three,\n        }\n    }\n}\n\n#[test]\nfn export_to() {\n    let temp = Path::new(env!(\"CARGO_MANIFEST_DIR\")).join(\".temp\");\n    std::fs::create_dir_all(&temp).unwrap();\n    let temp = TempDir::new_in(temp).unwrap();\n\n    for layout in [\n        Layout::Files,\n        Layout::FlatFile,\n        Layout::ModulePrefixedName,\n        Layout::Namespaces,\n    ] {\n        for (mode, format, _, types) in phase_collections() {\n            let name = format!(\n                \"jsdoc-export-to-{}-{}\",\n                layout.to_string().to_lowercase(),\n                mode\n            );\n            let output = (|| {\n                let path = temp.path().join(&name);\n                JSDoc::default()\n                    .layout(layout)\n                    .export_to(&path, &types, format)\n                    .unwrap();\n                fs_to_string(&path).map_err(|err| err.to_string())\n            })()\n            .unwrap();\n\n            insta::assert_snapshot!(name, output);\n        }\n    }\n\n    temp.close().unwrap();\n\n    // TODO: Assert layouts error out with `export` method\n    // TODO: Assert it errors if given the path to a file\n}\n\n#[test]\nfn primitives_export() {\n    for (mode, format, dts, types) in phase_collections() {\n        let types = format.map_types(&types).unwrap().into_owned();\n\n        let output = dts\n            .iter()\n            .filter_map(|(name, dt)| {\n                let mut ndt = match dt {\n                    DataType::Reference(Reference::Named(r)) => types.get(r).unwrap().to_owned(),\n                    _ => return None,\n                };\n\n                if let Some(ty) = &mut ndt.ty {\n                    *ty = format.map_type(&types, ty).unwrap().into_owned();\n                }\n\n                Some(\n                    primitives::export(&JSDoc::default(), &types, [ndt].iter(), \"\")\n                        .map(|ty| format!(\"{name}: {ty}\")),\n                )\n            })\n            .collect::<Result<Vec<_>, _>>()\n            .map(|exports| exports.join(\"\\n\"))\n            .unwrap();\n\n        insta::assert_snapshot!(format!(\"export-{mode}\"), output);\n    }\n}\n\n#[test]\nfn primitives_export_many() {\n    for (mode, format, dts, types) in phase_collections() {\n        let types = format.map_types(&types).unwrap().into_owned();\n\n        let output = primitives::export(\n            &JSDoc::default(),\n            &types,\n            dts.iter()\n                .filter_map(|(_, ty)| match ty {\n                    DataType::Reference(Reference::Named(r)) => types.get(r).cloned(),\n                    _ => None,\n                })\n                .map(|mut ndt| {\n                    if let Some(ty) = &mut ndt.ty {\n                        *ty = format.map_type(&types, ty).unwrap().into_owned();\n                    }\n                    ndt\n                })\n                .collect::<Vec<_>>()\n                .iter(),\n            \"\",\n        )\n        .unwrap();\n\n        insta::assert_snapshot!(format!(\"export-many-{mode}\"), output);\n    }\n}\n\n#[test]\nfn primitives_reference() {\n    for (mode, format, dts, types) in phase_collections() {\n        let types = format.map_types(&types).unwrap().into_owned();\n\n        let output = dts\n            .iter()\n            .filter_map(|(name, dt)| {\n                let dt = format.map_type(&types, dt).unwrap().into_owned();\n\n                let reference = match dt {\n                    DataType::Reference(reference) => reference.clone(),\n                    _ => return None,\n                };\n\n                Some(\n                    primitives::reference(&JSDoc::default(), &types, &reference)\n                        .map(|ty| format!(\"{name}: {ty}\")),\n                )\n            })\n            .collect::<Result<Vec<_>, _>>()\n            .map(|exports| exports.join(\"\\n\"))\n            .unwrap();\n\n        insta::assert_snapshot!(format!(\"reference-{mode}\"), output);\n    }\n}\n\n#[test]\nfn primitives_inline() {\n    for (mode, format, dts, types) in phase_collections() {\n        let types = format.map_types(&types).unwrap().into_owned();\n\n        let output = dts\n            .iter()\n            .map(|(name, dt)| {\n                let dt = format.map_type(&types, dt).unwrap().into_owned();\n\n                primitives::inline(&JSDoc::default(), &types, &dt).map(|ty| format!(\"{name}: {ty}\"))\n            })\n            .collect::<Result<Vec<_>, _>>()\n            .map(|exports| exports.join(\"\\n\"))\n            .unwrap();\n\n        insta::assert_snapshot!(format!(\"inline-{mode}\"), output);\n    }\n}\n\n#[test]\nfn jsdoc_export_bigint_errors() {\n    fn assert_bigint_error<T: Type>(failures: &mut Vec<String>, name: &str) {\n        let jsdoc = JSDoc::default();\n        let mut types = Types::default();\n        let dt = T::definition(&mut types);\n\n        match primitives::inline(&jsdoc, &types, &dt) {\n            Ok(ty) => failures.push(format!(\n                \"{name} [inline]: expected BigInt error, but export succeeded with '{ty}'\"\n            )),\n            Err(err)\n                if err\n                    .to_string()\n                    .contains(\"forbids exporting BigInt-style types\") => {}\n            Err(err) => failures.push(format!(\"{name} [inline]: unexpected error '{err}'\")),\n        }\n\n        if types.is_empty() {\n            return;\n        }\n\n        match jsdoc.export(&types, specta_serde::Format) {\n            Ok(output) => failures.push(format!(\n                \"{name} [export]: expected BigInt error, but export succeeded with '{output}'\"\n            )),\n            Err(err)\n                if err\n                    .to_string()\n                    .contains(\"forbids exporting BigInt-style types\") => {}\n            Err(err) => failures.push(format!(\"{name} [export]: unexpected error '{err}'\")),\n        }\n    }\n\n    fn assert_inline_bigint_error<T: Type>(failures: &mut Vec<String>, name: &str) {\n        let jsdoc = JSDoc::default();\n        let mut types = Types::default();\n        let dt = T::definition(&mut types);\n\n        match primitives::inline(&jsdoc, &types, &dt) {\n            Ok(ty) => failures.push(format!(\n                \"{name} [inline]: expected BigInt error, but export succeeded with '{ty}'\"\n            )),\n            Err(err)\n                if err\n                    .to_string()\n                    .contains(\"forbids exporting BigInt-style types\") => {}\n            Err(err) => failures.push(format!(\"{name} [inline]: unexpected error '{err}'\")),\n        }\n    }\n\n    macro_rules! for_bigint_types {\n        (T -> $s:expr) => {{\n            for_bigint_types!(usize, isize, i64, u64, i128, u128; $s);\n        }};\n        ($($i:ty),+; $s:expr) => {{\n            $({\n                type T = $i;\n                $s(stringify!($i));\n            })*\n        }};\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithSystemTime {\n        // https://github.com/specta-rs/specta/issues/77\n        #[specta(inline)]\n        value: SystemTime,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithDuration {\n        // https://github.com/specta-rs/specta/issues/77\n        #[specta(inline)]\n        value: Duration,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithBigInt {\n        a: i128,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithStructWithBigInt {\n        #[specta(inline)]\n        abc: StructWithBigInt,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithStructWithStructWithBigInt {\n        #[specta(inline)]\n        field1: StructWithStructWithBigInt,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithOptionWithStructWithBigInt {\n        #[specta(inline)]\n        optional_field: Option<StructWithBigInt>,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    enum EnumWithStructWithStructWithBigInt {\n        #[specta(inline)]\n        A(StructWithStructWithBigInt),\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    enum EnumWithInlineStructWithBigInt {\n        #[specta(inline)]\n        B { a: i128 },\n    }\n\n    let mut failures = Vec::new();\n\n    for_bigint_types!(T -> |name| {\n        assert_bigint_error::<T>(&mut failures, name);\n    });\n\n    for (name, assert) in [\n        (\n            \"StructWithSystemTime\",\n            assert_bigint_error::<StructWithSystemTime> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithDuration\",\n            assert_bigint_error::<StructWithDuration> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithBigInt\",\n            assert_bigint_error::<StructWithBigInt> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithStructWithBigInt\",\n            assert_bigint_error::<StructWithStructWithBigInt> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithStructWithStructWithBigInt\",\n            assert_bigint_error::<StructWithStructWithStructWithBigInt>\n                as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithOptionWithStructWithBigInt\",\n            assert_bigint_error::<StructWithOptionWithStructWithBigInt>\n                as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"EnumWithStructWithStructWithBigInt\",\n            assert_bigint_error::<EnumWithStructWithStructWithBigInt> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"EnumWithInlineStructWithBigInt\",\n            assert_bigint_error::<EnumWithInlineStructWithBigInt> as fn(&mut Vec<String>, &str),\n        ),\n    ] {\n        assert(&mut failures, name);\n    }\n\n    assert_inline_bigint_error::<SystemTime>(&mut failures, \"SystemTime\");\n    assert_inline_bigint_error::<Duration>(&mut failures, \"Duration\");\n\n    assert!(\n        failures.is_empty(),\n        \"Unexpected JSDoc BigInt export behavior:\\n{}\",\n        failures.join(\"\\n\")\n    );\n}\n\n#[test]\nfn jsdoc_export_to_files_uses_jsdoc_import_typedefs() {\n    let temp = Path::new(env!(\"CARGO_MANIFEST_DIR\")).join(\".temp\");\n    std::fs::create_dir_all(&temp).unwrap();\n    let temp = TempDir::new_in(temp).unwrap();\n\n    let path = temp.path().join(\"jsdoc-export-to-files-both\");\n    let types = Types::default()\n        .register::<jsdoc_export_to_files_runtime_imports_types::one::One>()\n        .register::<jsdoc_export_to_files_runtime_imports_types::two::Two>()\n        .register::<jsdoc_export_to_files_runtime_imports_types::three::Three>();\n\n    JSDoc::default()\n        .layout(Layout::Files)\n        .export_to(&path, &types, specta_serde::Format)\n        .unwrap();\n\n    let output = fs_to_string(&path).unwrap();\n    insta::assert_snapshot!(\"jsdoc-export-to-files-both\", output);\n\n    temp.close().unwrap();\n}\n\n// TODO: Confirm different layouts\n// TODO: Unit test JSDoc and other languages\n\n// TODO: Ensure this is feature matching with the Typescript testing\n"
  },
  {
    "path": "tests/tests/layouts.rs",
    "content": "use std::path::Path;\n\nuse specta::{\n    Type, Types,\n    datatype::{DataType, NamedDataType, Primitive},\n};\nuse specta_typescript::{Layout, Typescript};\nuse tempfile::TempDir;\n\n#[derive(Type)]\nstruct Testing {\n    a: testing::Testing,\n}\n\n#[derive(Type)]\nstruct Another {\n    bruh: String,\n}\n\n#[derive(Type)]\nstruct MoreType {\n    u: String,\n}\n\nmod testing {\n    use super::*;\n\n    #[derive(Type)]\n    pub struct Testing {\n        b: testing2::Testing,\n    }\n\n    pub mod testing2 {\n        use super::*;\n\n        #[derive(Type)]\n        pub struct Testing {\n            c: String,\n        }\n    }\n}\n\n#[test]\nfn duplicate_typenames_layouts() {\n    let types = Types::default()\n        .register::<Testing>()\n        .register::<Another>()\n        .register::<MoreType>();\n    assert_error_contains(\n        Typescript::default().export(&types, specta_serde::Format),\n        \"Detected multiple types\",\n    );\n\n    assert_error_contains(\n        Typescript::default()\n            .layout(Layout::FlatFile)\n            .export(&types, specta_serde::Format),\n        \"Detected multiple types\",\n    );\n\n    let module_prefixed = Typescript::default()\n        .layout(Layout::ModulePrefixedName)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"layouts-duplicate-module-prefixed\", module_prefixed);\n\n    let namespaces = Typescript::default()\n        .layout(Layout::Namespaces)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"layouts-duplicate-namespaces\", namespaces);\n\n    assert_error_contains(\n        Typescript::default()\n            .layout(Layout::Files)\n            .export(&types, specta_serde::Format),\n        \"Unable to export layout Files\",\n    );\n\n    let temp = temp_dir();\n    let path = temp.path().join(\"duplicate-layout\");\n    Typescript::default()\n        .layout(Layout::Files)\n        .export_to(&path, &types, specta_serde::Format)\n        .unwrap();\n\n    let output = crate::fs_to_string(&path).unwrap();\n    insta::assert_snapshot!(\"layouts-duplicate-files\", output);\n}\n\n#[test]\nfn non_duplicate_typenames_layouts() {\n    let types = Types::default()\n        .register::<Another>()\n        .register::<MoreType>();\n    let default_output = Typescript::default()\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"layouts-non-duplicate-default\", default_output);\n\n    let flat = Typescript::default()\n        .layout(Layout::FlatFile)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"layouts-non-duplicate-flat\", flat);\n\n    let module_prefixed = Typescript::default()\n        .layout(Layout::ModulePrefixedName)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"layouts-non-duplicate-module-prefixed\", module_prefixed);\n\n    let namespaces = Typescript::default()\n        .layout(Layout::Namespaces)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"layouts-non-duplicate-namespaces\", namespaces);\n\n    assert_error_contains(\n        Typescript::default()\n            .layout(Layout::Files)\n            .export(&types, specta_serde::Format),\n        \"Unable to export layout Files\",\n    );\n\n    let temp = temp_dir();\n    let path = temp.path().join(\"no-duplicate-layout\");\n    Typescript::default()\n        .layout(Layout::Files)\n        .export_to(&path, &types, specta_serde::Format)\n        .unwrap();\n\n    let output = crate::fs_to_string(&path).unwrap();\n    insta::assert_snapshot!(\"layouts-non-duplicate-files\", output);\n}\n\n#[test]\nfn empty_module_path_layouts() {\n    let mut types = Types::default();\n\n    let mut testing = NamedDataType::new(\"testing\", &mut types, |_, ndt| {\n        ndt.ty = Some(DataType::Primitive(Primitive::i8));\n    });\n    testing.module_path = \"\".into();\n    let flat = Typescript::default()\n        .layout(Layout::FlatFile)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"layouts-empty-module-path-flat\", flat);\n\n    let module_prefixed = Typescript::default()\n        .layout(Layout::ModulePrefixedName)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"layouts-empty-module-path-module-prefixed\", module_prefixed);\n\n    let namespaces = Typescript::default()\n        .layout(Layout::Namespaces)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    insta::assert_snapshot!(\"layouts-empty-module-path-namespaces\", namespaces);\n\n    let temp = temp_dir();\n    let path = temp.path().join(\"empty-module-path-layout\");\n    Typescript::default()\n        .layout(Layout::Files)\n        .export_to(&path, &types, specta_serde::Format)\n        .unwrap();\n\n    let output = crate::fs_to_string(Path::new(&path)).unwrap();\n    insta::assert_snapshot!(\"layouts-empty-module-path-files\", output);\n}\n\nfn temp_dir() -> TempDir {\n    let temp_root = Path::new(env!(\"CARGO_MANIFEST_DIR\")).join(\".temp\");\n    std::fs::create_dir_all(&temp_root).unwrap();\n    TempDir::new_in(temp_root).unwrap()\n}\n\nfn assert_error_contains<T>(result: Result<T, specta_typescript::Error>, expected: &str) {\n    let error = match result {\n        Ok(_) => panic!(\"expected exporter to fail\"),\n        Err(error) => error,\n    };\n    assert!(\n        error.to_string().contains(expected),\n        \"error '{error}' did not contain '{expected}'\"\n    );\n}\n"
  },
  {
    "path": "tests/tests/legacy_impls.rs",
    "content": "#![allow(deprecated)]\n\nuse specta::{Type, Types};\nuse specta_typescript::Typescript;\n\n#[derive(Debug)]\nstruct ErrorStackRootError;\n\nimpl std::fmt::Display for ErrorStackRootError {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.write_str(\"error stack root error\")\n    }\n}\n\nimpl std::error::Error for ErrorStackRootError {}\n\n#[derive(Type)]\nstruct LegacyImpls {\n    ordered_f32: ordered_float::OrderedFloat<f32>,\n    ordered_f64: ordered_float::OrderedFloat<f64>,\n    heapless_vec: heapless::Vec<i32, 8>,\n    semver: semver::Version,\n    smol: smol_str::SmolStr,\n    array_vec: arrayvec::ArrayVec<i32, 8>,\n    array_string: arrayvec::ArrayString<16>,\n    smallvec: smallvec::SmallVec<[i32; 8]>,\n    toml_datetime: toml::value::Datetime,\n    ulid: ulid::Ulid,\n    chrono_naive_datetime: chrono::NaiveDateTime,\n    chrono_naive_date: chrono::NaiveDate,\n    chrono_naive_time: chrono::NaiveTime,\n    chrono_duration: chrono::Duration,\n    chrono_date: chrono::Date<chrono::Utc>,\n    chrono_datetime: chrono::DateTime<chrono::Utc>,\n    chrono_fixed_offset: chrono::FixedOffset,\n    chrono_utc: chrono::Utc,\n    chrono_local: chrono::Local,\n    either: either::Either<i32, String>,\n    error_stack_report: error_stack::Report<ErrorStackRootError>,\n    error_stack_multi_report: error_stack::Report<[ErrorStackRootError]>,\n    glam_affine2: glam::Affine2,\n    glam_affine3a: glam::Affine3A,\n    glam_mat2: glam::Mat2,\n    glam_mat3: glam::Mat3,\n    glam_mat3a: glam::Mat3A,\n    glam_mat4: glam::Mat4,\n    glam_quat: glam::Quat,\n    glam_vec2: glam::Vec2,\n    glam_vec3: glam::Vec3,\n    glam_vec3a: glam::Vec3A,\n    glam_vec4: glam::Vec4,\n    glam_daffine2: glam::DAffine2,\n    glam_daffine3: glam::DAffine3,\n    glam_dmat2: glam::DMat2,\n    glam_dmat3: glam::DMat3,\n    glam_dmat4: glam::DMat4,\n    glam_dquat: glam::DQuat,\n    glam_dvec2: glam::DVec2,\n    glam_dvec3: glam::DVec3,\n    glam_dvec4: glam::DVec4,\n    glam_i8vec2: glam::I8Vec2,\n    glam_i8vec3: glam::I8Vec3,\n    glam_i8vec4: glam::I8Vec4,\n    glam_u8vec2: glam::U8Vec2,\n    glam_u8vec3: glam::U8Vec3,\n    glam_u8vec4: glam::U8Vec4,\n    glam_i16vec2: glam::I16Vec2,\n    glam_i16vec3: glam::I16Vec3,\n    glam_i16vec4: glam::I16Vec4,\n    glam_u16vec2: glam::U16Vec2,\n    glam_u16vec3: glam::U16Vec3,\n    glam_u16vec4: glam::U16Vec4,\n    glam_ivec2: glam::IVec2,\n    glam_ivec3: glam::IVec3,\n    glam_ivec4: glam::IVec4,\n    glam_uvec2: glam::UVec2,\n    glam_uvec3: glam::UVec3,\n    glam_uvec4: glam::UVec4,\n    glam_bvec2: glam::BVec2,\n    glam_bvec3: glam::BVec3,\n    glam_bvec4: glam::BVec4,\n}\n\n#[derive(Type)]\nstruct LegacyImplWithBigints {\n    serde_json_map: serde_json::Map<String, serde_json::Value>,\n    serde_json_value: serde_json::Value,\n    serde_json_number: serde_json::Number,\n    serde_yaml_mapping: serde_yaml::Mapping,\n    serde_yaml_tagged: serde_yaml::value::TaggedValue,\n    serde_yaml_value: serde_yaml::Value,\n    serde_yaml_number: serde_yaml::Number,\n\n    bson_document: bson::Document,\n    bson_value: bson::Bson,\n    toml_map: toml::map::Map<String, toml::Value>,\n    toml_value: toml::Value,\n\n    glam_i64vec2: glam::I64Vec2,\n    glam_i64vec3: glam::I64Vec3,\n    glam_i64vec4: glam::I64Vec4,\n    glam_u64vec2: glam::U64Vec2,\n    glam_u64vec3: glam::U64Vec3,\n    glam_u64vec4: glam::U64Vec4,\n    glam_usizevec2: glam::USizeVec2,\n    glam_usizevec3: glam::USizeVec3,\n    glam_usizevec4: glam::USizeVec4,\n}\n\n#[test]\nfn legacy_impls() {\n    insta::assert_snapshot!(\n        \"legacy_impls\",\n        Typescript::default()\n            .export(\n                &Types::default().register::<LegacyImpls>(),\n                specta_serde::Format\n            )\n            .unwrap()\n    );\n}\n\n#[test]\nfn legacy_impl_bigint_errors() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<LegacyImplWithBigints>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"legacy BigInt impls should fail TypeScript export\");\n\n    assert!(\n        err.to_string()\n            .contains(\"forbids exporting BigInt-style types\")\n            || err\n                .to_string()\n                .contains(\"Detected multiple types with the same name\"),\n        \"unexpected error: {err}\"\n    );\n}\n\n#[test]\nfn legacy_impl_individual_bigint_errors() {\n    fn assert_bigint_export_error<T: Type>(failures: &mut Vec<String>, name: &str) {\n        match Typescript::default().export(&Types::default().register::<T>(), specta_serde::Format)\n        {\n            Ok(output) => failures.push(format!(\n                \"{name}: expected BigInt export error, but export succeeded with '{output}'\"\n            )),\n            Err(err)\n                if err\n                    .to_string()\n                    .contains(\"forbids exporting BigInt-style types\") => {}\n            Err(err) => failures.push(format!(\"{name}: unexpected error '{err}'\")),\n        }\n    }\n\n    fn assert_bigint_or_invalid_map_key_error<T: Type>(failures: &mut Vec<String>, name: &str) {\n        match Typescript::default().export(&Types::default().register::<T>(), specta_serde::Format)\n        {\n            Ok(output) => failures.push(format!(\n                \"{name}: expected BigInt or invalid map key error, but export succeeded with '{output}'\"\n            )),\n            Err(err)\n                if err\n                    .to_string()\n                    .contains(\"forbids exporting BigInt-style types\") => {}\n            Err(err)\n                if err\n                    .to_string()\n                    .contains(\"Invalid map key\") => {}\n            Err(err) => failures.push(format!(\"{name}: unexpected error '{err}'\")),\n        }\n    }\n\n    macro_rules! bigint_wrapper {\n        ($name:ident, $ty:ty) => {\n            #[derive(Type)]\n            #[specta(collect = false)]\n            struct $name {\n                value: $ty,\n            }\n        };\n    }\n\n    bigint_wrapper!(BsonDocumentBigint, bson::Document);\n    bigint_wrapper!(BsonValueBigint, bson::Bson);\n    bigint_wrapper!(SerdeJsonMapBigint, serde_json::Map<String, serde_json::Value>);\n    bigint_wrapper!(SerdeJsonValueBigint, serde_json::Value);\n    bigint_wrapper!(SerdeJsonNumberBigint, serde_json::Number);\n    bigint_wrapper!(SerdeYamlMappingBigint, serde_yaml::Mapping);\n    bigint_wrapper!(SerdeYamlTaggedBigint, serde_yaml::value::TaggedValue);\n    bigint_wrapper!(SerdeYamlValueBigint, serde_yaml::Value);\n    bigint_wrapper!(SerdeYamlNumberBigint, serde_yaml::Number);\n    bigint_wrapper!(TomlMapBigint, toml::map::Map<String, toml::Value>);\n    bigint_wrapper!(TomlValueBigint, toml::Value);\n    bigint_wrapper!(GlamI64Vec2Bigint, glam::I64Vec2);\n    bigint_wrapper!(GlamI64Vec3Bigint, glam::I64Vec3);\n    bigint_wrapper!(GlamI64Vec4Bigint, glam::I64Vec4);\n    bigint_wrapper!(GlamU64Vec2Bigint, glam::U64Vec2);\n    bigint_wrapper!(GlamU64Vec3Bigint, glam::U64Vec3);\n    bigint_wrapper!(GlamU64Vec4Bigint, glam::U64Vec4);\n    bigint_wrapper!(GlamUSizeVec2Bigint, glam::USizeVec2);\n    bigint_wrapper!(GlamUSizeVec3Bigint, glam::USizeVec3);\n    bigint_wrapper!(GlamUSizeVec4Bigint, glam::USizeVec4);\n\n    let mut failures = Vec::new();\n\n    for (name, assert) in [\n        (\n            \"bson::Document\",\n            assert_bigint_export_error::<BsonDocumentBigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"bson::Bson\",\n            assert_bigint_export_error::<BsonValueBigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"serde_json::Map<String, serde_json::Value>\",\n            assert_bigint_export_error::<SerdeJsonMapBigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"serde_json::Value\",\n            assert_bigint_export_error::<SerdeJsonValueBigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"serde_json::Number\",\n            assert_bigint_export_error::<SerdeJsonNumberBigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"serde_yaml::Mapping\",\n            assert_bigint_or_invalid_map_key_error::<SerdeYamlMappingBigint>\n                as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"serde_yaml::value::TaggedValue\",\n            assert_bigint_or_invalid_map_key_error::<SerdeYamlTaggedBigint>\n                as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"serde_yaml::Value\",\n            assert_bigint_or_invalid_map_key_error::<SerdeYamlValueBigint>\n                as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"serde_yaml::Number\",\n            assert_bigint_export_error::<SerdeYamlNumberBigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"toml::map::Map<String, toml::Value>\",\n            assert_bigint_export_error::<TomlMapBigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"toml::Value\",\n            assert_bigint_export_error::<TomlValueBigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"glam::I64Vec2\",\n            assert_bigint_export_error::<GlamI64Vec2Bigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"glam::I64Vec3\",\n            assert_bigint_export_error::<GlamI64Vec3Bigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"glam::I64Vec4\",\n            assert_bigint_export_error::<GlamI64Vec4Bigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"glam::U64Vec2\",\n            assert_bigint_export_error::<GlamU64Vec2Bigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"glam::U64Vec3\",\n            assert_bigint_export_error::<GlamU64Vec3Bigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"glam::U64Vec4\",\n            assert_bigint_export_error::<GlamU64Vec4Bigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"glam::USizeVec2\",\n            assert_bigint_export_error::<GlamUSizeVec2Bigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"glam::USizeVec3\",\n            assert_bigint_export_error::<GlamUSizeVec3Bigint> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"glam::USizeVec4\",\n            assert_bigint_export_error::<GlamUSizeVec4Bigint> as fn(&mut Vec<String>, &str),\n        ),\n    ] {\n        assert(&mut failures, name);\n    }\n\n    assert!(\n        failures.is_empty(),\n        \"Unexpected legacy impl BigInt export behavior:\\n{}\",\n        failures.join(\"\\n\")\n    );\n}\n"
  },
  {
    "path": "tests/tests/macro/compile_error.rs",
    "content": "//! This file is run with the `trybuild` crate to assert compilation errors in the Specta macros.\n\nuse specta::{Type, specta};\n\n// Invalid inflection\n#[derive(Type)]\n#[specta(collect = false)]\n#[serde(rename_all = \"camelCase123\")]\npub enum Demo2 {}\n\n// Specta doesn't support Trait objects\n#[derive(Type)]\n#[specta(collect = false)]\npub struct Error {\n    pub(crate) cause: Option<Box<dyn std::error::Error + Send + Sync>>,\n}\n\n// Enums can only flatten if\n// at least one of their variants can flatten\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum UnitExternal {\n    Unit,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum UnnamedMultiExternal {\n    UnnamedMulti(String, String),\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct FlattenExternal {\n    #[serde(flatten)]\n    unit: UnitExternal,\n    #[serde(flatten)]\n    unnamed_multi: UnnamedMultiExternal,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum UnnamedUntagged {\n    Unnamed(String),\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum UnnamedMultiUntagged {\n    Unnamed(String, String),\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct FlattenUntagged {\n    #[serde(flatten)]\n    unnamed: UnnamedUntagged,\n    #[serde(flatten)]\n    unnamed_multi: UnnamedMultiUntagged,\n}\n\n// Adjacent can always flatten\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[serde(tag = \"tag\")]\nenum UnnamedInternal {\n    Unnamed(String),\n}\n\n// Internal can't be used with unnamed multis\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct FlattenInternal {\n    #[serde(flatten)]\n    unnamed: UnnamedInternal,\n}\n\n// Invalid attributes\n#[derive(Type)]\n#[specta(collect = false)]\n#[specta(noshot = true)]\nstruct InvalidAttrs1;\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[specta(noshot)]\nstruct InvalidAttrs2;\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct InvalidAttrs3 {\n    #[specta(noshot = true)]\n    a: String,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct InvalidAttrs4 {\n    #[specta(noshot)]\n    a: String,\n}\n\n// Legacy `#[specta(...)]` migration errors\n#[derive(Type)]\n#[specta(collect = false)]\n#[specta(rename = \"Renamed\")]\nstruct LegacyContainerRename;\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct LegacyFieldRename {\n    #[specta(rename = \"renamed\")]\n    a: String,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum LegacyVariantRename {\n    #[specta(rename = \"renamed\")]\n    A,\n}\n\nconst INTERNAL_RENAME_KEY: &str = \"renamed\";\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct InternalRenameFromPath {\n    #[specta(rename_from_path = INTERNAL_RENAME_KEY)]\n    a: String,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[specta(transparent)]\npub enum TransparentEnum {}\n\n#[derive(Type)]\n#[specta(collect = false, type = String, transparent)]\npub struct TransparentTypeOverrideConflict(String);\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[specta]\npub struct InvalidSpectaAttribute1;\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[specta = \"todo\"]\npub struct InvalidSpectaAttribute2;\n\nuse wasm_bindgen::prelude::wasm_bindgen;\n\n#[wasm_bindgen]\n#[specta]\npub fn testing() {}\n\n#[specta(rename_all = \"camelCase123\")]\npub fn invalid_function_rename_all() {}\n\n// TODO: https://docs.rs/trybuild/latest/trybuild/#what-to-test\n"
  },
  {
    "path": "tests/tests/macro/compile_error.stderr",
    "content": "error: unsupported serde casing: `camelCase123`\n --> tests/macro/compile_error.rs:8:22\n  |\n8 | #[serde(rename_all = \"camelCase123\")]\n  |                      ^^^^^^^^^^^^^^\n\nerror: specta: Found unsupported container attribute 'noshot'\n  --> tests/macro/compile_error.rs:86:10\n   |\n86 | #[specta(noshot = true)]\n   |          ^^^^^^\n\nerror: specta: Found unsupported container attribute 'noshot'\n  --> tests/macro/compile_error.rs:91:10\n   |\n91 | #[specta(noshot)]\n   |          ^^^^^^\n\nerror: specta: Found unsupported field attribute 'noshot'\n  --> tests/macro/compile_error.rs:97:14\n   |\n97 |     #[specta(noshot = true)]\n   |              ^^^^^^\n\nerror: specta: Found unsupported field attribute 'noshot'\n   --> tests/macro/compile_error.rs:104:14\n    |\n104 |     #[specta(noshot)]\n    |              ^^^^^^\n\nerror: specta: `#[specta(rename ...)]` is no longer supported on containers. Use `#[serde(rename = \"...\")]` instead.\n   --> tests/macro/compile_error.rs:111:10\n    |\n111 | #[specta(rename = \"Renamed\")]\n    |          ^^^^^^\n\nerror: specta: `#[specta(rename ...)]` is no longer supported on fields. Use `#[serde(rename = \"...\")]` instead.\n   --> tests/macro/compile_error.rs:117:14\n    |\n117 |     #[specta(rename = \"renamed\")]\n    |              ^^^^^^\n\nerror: expected `,`\n   --> tests/macro/compile_error.rs:124:21\n    |\n124 |     #[specta(rename = \"renamed\")]\n    |                     ^\n\nerror: specta: Found unsupported field attribute 'rename_from_path'\n   --> tests/macro/compile_error.rs:133:14\n    |\n133 |     #[specta(rename_from_path = INTERNAL_RENAME_KEY)]\n    |              ^^^^^^^^^^^^^^^^\n\nerror: #[specta(transparent)] is not allowed on an enum\n   --> tests/macro/compile_error.rs:140:5\n    |\n140 | pub enum TransparentEnum {}\n    |     ^^^^\n\nerror: specta: `#[specta(type = ...)]` cannot be combined with `#[specta(transparent)]`\n   --> tests/macro/compile_error.rs:144:12\n    |\n144 | pub struct TransparentTypeOverrideConflict(String);\n    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nerror: specta: invalid formatted attribute\n   --> tests/macro/compile_error.rs:148:3\n    |\n148 | #[specta]\n    |   ^^^^^^\n\nerror: specta: invalid formatted attribute\n   --> tests/macro/compile_error.rs:153:3\n    |\n153 | #[specta = \"todo\"]\n    |   ^^^^^^\n\nerror: specta: You must apply the #[specta] macro before the #[wasm_bindgen] macro\n   --> tests/macro/compile_error.rs:158:1\n    |\n158 | #[wasm_bindgen]\n    | ^^^^^^^^^^^^^^^\n    |\n    = note: this error originates in the attribute macro `wasm_bindgen` (in Nightly builds, run with -Z macro-backtrace for more info)\n\nerror: specta: unsupported rename rule. Expected one of lowercase, UPPERCASE, PascalCase, camelCase, snake_case, SCREAMING_SNAKE_CASE, kebab-case, SCREAMING-KEBAB-CASE\n   --> tests/macro/compile_error.rs:162:23\n    |\n162 | #[specta(rename_all = \"camelCase123\")]\n    |                       ^^^^^^^^^^^^^^\n\nerror[E0255]: the name `__specta__fn__testing` is defined multiple times\n   --> tests/macro/compile_error.rs:160:8\n    |\n159 | #[specta]\n    | --------- previous definition of the macro `__specta__fn__testing` here\n160 | pub fn testing() {}\n    |        ^^^^^^^ `__specta__fn__testing` reimported here\n    |\n    = note: `__specta__fn__testing` must be defined only once in the macro namespace of this module\n\nerror: cannot find attribute `serde` in this scope\n  --> tests/macro/compile_error.rs:8:3\n   |\n 8 | #[serde(rename_all = \"camelCase123\")]\n   |   ^^^^^\n   |\n   = note: `serde` is in scope, but it is a crate, not an attribute\nhelp: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute\n   |\n 9 + #[derive(Deserialize, Serialize)]\n10 | pub enum Demo2 {}\n   |\n\nerror: cannot find attribute `serde` in this scope\n  --> tests/macro/compile_error.rs:36:7\n   |\n36 |     #[serde(flatten)]\n   |       ^^^^^\n   |\n   = note: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute\n   = note: `serde` is in scope, but it is a crate, not an attribute\n\nerror: cannot find attribute `serde` in this scope\n  --> tests/macro/compile_error.rs:38:7\n   |\n38 |     #[serde(flatten)]\n   |       ^^^^^\n   |\n   = note: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute\n   = note: `serde` is in scope, but it is a crate, not an attribute\n\nerror: cannot find attribute `serde` in this scope\n  --> tests/macro/compile_error.rs:44:3\n   |\n44 | #[serde(untagged)]\n   |   ^^^^^\n   |\n   = note: `serde` is in scope, but it is a crate, not an attribute\nhelp: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute\n   |\n45 + #[derive(Deserialize, Serialize)]\n46 | enum UnnamedUntagged {\n   |\n\nerror: cannot find attribute `serde` in this scope\n  --> tests/macro/compile_error.rs:51:3\n   |\n51 | #[serde(untagged)]\n   |   ^^^^^\n   |\n   = note: `serde` is in scope, but it is a crate, not an attribute\nhelp: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute\n   |\n52 + #[derive(Deserialize, Serialize)]\n53 | enum UnnamedMultiUntagged {\n   |\n\nerror: cannot find attribute `serde` in this scope\n  --> tests/macro/compile_error.rs:59:7\n   |\n59 |     #[serde(flatten)]\n   |       ^^^^^\n   |\n   = note: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute\n   = note: `serde` is in scope, but it is a crate, not an attribute\n\nerror: cannot find attribute `serde` in this scope\n  --> tests/macro/compile_error.rs:61:7\n   |\n61 |     #[serde(flatten)]\n   |       ^^^^^\n   |\n   = note: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute\n   = note: `serde` is in scope, but it is a crate, not an attribute\n\nerror: cannot find attribute `serde` in this scope\n  --> tests/macro/compile_error.rs:69:3\n   |\n69 | #[serde(tag = \"tag\")]\n   |   ^^^^^\n   |\n   = note: `serde` is in scope, but it is a crate, not an attribute\nhelp: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute\n   |\n70 + #[derive(Deserialize, Serialize)]\n71 | enum UnnamedInternal {\n   |\n\nerror: cannot find attribute `serde` in this scope\n  --> tests/macro/compile_error.rs:79:7\n   |\n79 |     #[serde(flatten)]\n   |       ^^^^^\n   |\n   = note: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute\n   = note: `serde` is in scope, but it is a crate, not an attribute\n\nerror[E0601]: `main` function not found in crate `$CRATE`\n   --> tests/macro/compile_error.rs:163:40\n    |\n163 | pub fn invalid_function_rename_all() {}\n    |                                        ^ consider adding a `main` function to `$DIR/tests/macro/compile_error.rs`\n\nerror[E0277]: the trait `specta::Type` is not implemented for `dyn std::error::Error + Send + Sync`\n  --> tests/macro/compile_error.rs:15:23\n   |\n15 |     pub(crate) cause: Option<Box<dyn std::error::Error + Send + Sync>>,\n   |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `dyn std::error::Error + Send + Sync` must implement `Type`\n   |\n   = help: the trait `specta::Type` is not implemented for `dyn std::error::Error + Send + Sync`\n   = note: Depending on your use case, this can be fixed in multiple ways:\n            - If your using an type defined in one of your own crates, ensure you have `#[derive(specta::Type)]` on it.\n            - If your using a crate with official Specta support, enable the matching feature flag on the `specta` crate.\n            - If your using an external crate without Specta support, you may need to wrap your type in a new-type wrapper.\n\n   = help: the following other types implement trait `specta::Type`:\n             &T\n             ()\n             (T10, T11, T12, T13)\n             (T11, T12, T13)\n             (T12, T13)\n             (T13,)\n             (T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)\n             (T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)\n           and $N others\n   = note: required for `Box<dyn std::error::Error + Send + Sync>` to implement `specta::Type`\n   = note: 1 redundant requirement hidden\n   = note: required for `Option<Box<dyn std::error::Error + Send + Sync>>` to implement `specta::Type`\n"
  },
  {
    "path": "tests/tests/mod.rs",
    "content": "//! We register a single entrypoint so all tests are compiled into a single binary.\n#![allow(unused_parens, unused_variables, dead_code, unused_mut)]\n\nmacro_rules! register {\n    ($types:expr, $dts:expr; $($ty:ty),* $(,)?) => {{\n        $(\n            {\n                let ty = <$ty as specta::Type>::definition(&mut $types);\n                $dts.push((stringify!($ty), ty));\n            }\n        )*\n    }};\n}\n\nmod bound;\nmod errors;\nmod functions;\nmod jsdoc;\nmod layouts;\nmod legacy_impls;\nmod references;\nmod serde_conversions;\nmod serde_identifiers;\nmod serde_other;\nmod swift;\nmod types;\nmod typescript;\nmod utils;\nmod zod;\n\npub use types::{types, types_phased};\npub use utils::fs_to_string;\n\n#[test]\nfn compile_errors() {\n    let t = trybuild::TestCases::new();\n    t.compile_fail(\"tests/macro/compile_error.rs\");\n}\n"
  },
  {
    "path": "tests/tests/references.rs",
    "content": "use std::any::TypeId;\n\nuse specta::{\n    Type, Types,\n    datatype::{DataType, Reference},\n};\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericType<T>(T);\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct AnotherOne;\n\n#[test]\nfn references() {\n    // Opaque references are compared by value\n    assert_eq!(Reference::opaque(()), Reference::opaque(()));\n    assert_eq!(Reference::opaque(true), Reference::opaque(true));\n    assert_ne!(Reference::opaque(true), Reference::opaque(false));\n    assert_ne!(Reference::opaque(42u32), Reference::opaque('a'));\n\n    // Ensure opaque metadata can be extracted again\n    {\n        let r = match Reference::opaque(()) {\n            Reference::Opaque(r) => r,\n            _ => panic!(\"Expected an opaque reference\"),\n        };\n\n        assert_eq!(r.type_id(), TypeId::of::<()>());\n        assert_eq!(r.type_name(), \"()\");\n        assert_eq!(r.downcast_ref(), Some(&()));\n    }\n\n    let mut types = Types::default();\n\n    // Named references `PartialEq` are compared by type, generics, inline,\n    // however `Reference::ty_eq` compares by just type.\n    {\n        let a = match GenericType::<()>::definition(&mut types) {\n            DataType::Reference(r) => r,\n            _ => panic!(\"Expected a reference type\"),\n        };\n        let b = match GenericType::<()>::definition(&mut types) {\n            DataType::Reference(r) => r,\n            _ => panic!(\"Expected a reference type\"),\n        };\n        assert_eq!(a, b);\n        assert!(a.ty_eq(&b));\n        assert!(b.ty_eq(&a));\n    }\n\n    {\n        let a = match GenericType::<()>::definition(&mut types) {\n            DataType::Reference(r) => r,\n            _ => panic!(\"Expected a reference type\"),\n        };\n        let b = match GenericType::<String>::definition(&mut types) {\n            DataType::Reference(r) => r,\n            _ => panic!(\"Expected a reference type\"),\n        };\n        assert_ne!(a, b);\n        assert!(a.ty_eq(&b));\n        assert!(b.ty_eq(&a));\n    }\n\n    {\n        let a = match GenericType::<()>::definition(&mut types) {\n            DataType::Reference(r) => r,\n            _ => panic!(\"Expected a reference type\"),\n        };\n        let b = match AnotherOne::definition(&mut types) {\n            DataType::Reference(r) => r,\n            _ => panic!(\"Expected a reference type\"),\n        };\n        assert_ne!(a, b);\n        assert!(!a.ty_eq(&b));\n        assert!(!b.ty_eq(&a));\n    }\n}\n"
  },
  {
    "path": "tests/tests/serde_conversions.rs",
    "content": "use serde::{Deserialize, Serialize};\nuse specta::{Type, Types};\nuse specta_typescript::Typescript;\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Wire {\n    value: i32,\n}\n\n#[derive(Clone, Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(into = \"Wire\")]\nstruct IntoOnly {\n    value: i32,\n}\n\n#[derive(Clone, Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(from = \"Wire\", into = \"Wire\")]\nstruct Symmetric {\n    value: i32,\n}\n\n#[derive(Clone, Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct GenericWire<T> {\n    values: Vec<T>,\n}\n\n#[derive(Clone, Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(try_from = \"GenericWire<T>\")]\nstruct GenericTryFrom<T> {\n    values: Vec<T>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct GenericParent<T> {\n    child: GenericTryFrom<T>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Parent {\n    child: IntoOnly,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct CustomCodecNoOverride {\n    #[serde(with = \"codec\")]\n    value: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct CustomCodecWithOverride {\n    #[specta(type = String)]\n    #[serde(with = \"codec\")]\n    value: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct CustomCodecWithPhasedOverride {\n    #[specta(type = specta_serde::Phased<String, i32>)]\n    #[serde(with = \"codec\")]\n    value: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FieldOnlyPhasedOverride {\n    #[specta(type = specta_serde::Phased<String, i32>)]\n    value: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct SkipSerializingIfOnly {\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    value: Option<String>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FieldPhaseSpecificRename {\n    #[serde(rename(serialize = \"serialized_value\", deserialize = \"deserialized_value\"))]\n    value: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum VariantCodecNoOverride {\n    #[serde(\n        serialize_with = \"codec_variant::serialize\",\n        deserialize_with = \"codec_variant::deserialize\"\n    )]\n    A(String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum VariantCodecWithOverride {\n    #[serde(\n        serialize_with = \"codec_variant::serialize\",\n        deserialize_with = \"codec_variant::deserialize\"\n    )]\n    #[specta(r#type = String)]\n    A(String),\n}\n\n#[derive(Type, Deserialize)]\n#[specta(collect = false)]\n#[serde(variant_identifier)]\nenum VariantIdentifierValid {\n    Alpha,\n    Beta,\n}\n\n#[derive(Type, Deserialize)]\n#[specta(collect = false)]\n#[serde(field_identifier)]\nenum FieldIdentifierValid {\n    Alpha,\n    Beta,\n    Other(String),\n}\n\nmod codec {\n    use serde::{Deserialize, Deserializer, Serializer};\n\n    pub fn serialize<S>(_value: &str, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: Serializer,\n    {\n        serializer.serialize_str(\"codec\")\n    }\n\n    pub fn deserialize<'de, D>(deserializer: D) -> Result<String, D::Error>\n    where\n        D: Deserializer<'de>,\n    {\n        String::deserialize(deserializer)\n    }\n}\n\nmod codec_variant {\n    use serde::{Deserialize, Deserializer, Serializer};\n\n    pub fn serialize<S>(value: &str, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: Serializer,\n    {\n        serializer.serialize_str(value)\n    }\n\n    pub fn deserialize<'de, D>(deserializer: D) -> Result<String, D::Error>\n    where\n        D: Deserializer<'de>,\n    {\n        String::deserialize(deserializer)\n    }\n}\n\nimpl From<IntoOnly> for Wire {\n    fn from(value: IntoOnly) -> Self {\n        Self { value: value.value }\n    }\n}\n\nimpl From<Symmetric> for Wire {\n    fn from(value: Symmetric) -> Self {\n        Self { value: value.value }\n    }\n}\n\nimpl From<Wire> for Symmetric {\n    fn from(value: Wire) -> Self {\n        Self { value: value.value }\n    }\n}\n\nimpl<T> TryFrom<GenericWire<T>> for GenericTryFrom<T> {\n    type Error = std::convert::Infallible;\n\n    fn try_from(value: GenericWire<T>) -> Result<Self, Self::Error> {\n        Ok(Self {\n            values: value.values,\n        })\n    }\n}\n\n#[test]\nfn apply_rejects_asymmetric_container_conversion() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<IntoOnly>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"apply should reject asymmetric serde conversions\");\n\n    assert!(\n        err.to_string()\n            .contains(\"Incompatible container conversion\"),\n        \"unexpected error: {err}\"\n    );\n}\n\n#[test]\nfn phases_format_splits_container_and_dependents_for_conversions() {\n    let rendered = Typescript::default()\n        .export(\n            &Types::default().register::<Parent>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"PhasesFormat should support asymmetric serde conversions\");\n\n    insta::assert_snapshot!(\n        \"serde-conversions-format-phases-splits-container-and-dependents\",\n        rendered\n    );\n}\n\n#[test]\nfn apply_accepts_symmetric_container_conversion() {\n    Typescript::default()\n        .export(\n            &Types::default().register::<Symmetric>(),\n            specta_serde::Format,\n        )\n        .expect(\"apply should accept symmetric serde conversions\");\n}\n\n#[test]\nfn phases_format_accepts_generic_try_from_container_conversion() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<GenericParent<String>>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"apply should reject deserialize-only container conversions\");\n    assert!(\n        err.to_string()\n            .contains(\"Incompatible container conversion\")\n    );\n\n    Typescript::default()\n        .export(\n            &Types::default().register::<GenericParent<String>>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"PhasesFormat should resolve nested generic references from container conversions\");\n}\n\n#[test]\nfn custom_codec_requires_explicit_override() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<CustomCodecNoOverride>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"custom serde codecs should require #[specta(type = ...)]\");\n\n    assert!(err.to_string().contains(\"Unsupported serde attribute\"));\n\n    Typescript::default()\n        .export(\n            &Types::default().register::<CustomCodecWithOverride>(),\n            specta_serde::Format,\n        )\n        .expect(\"override should satisfy custom serde codecs\");\n}\n\n#[test]\nfn custom_codec_variant_requires_explicit_override() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<VariantCodecNoOverride>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"variant custom serde codecs should require #[specta(type = ...)]\");\n    assert!(err.to_string().contains(\"Unsupported serde attribute\"));\n\n    Typescript::default()\n        .export(\n            &Types::default().register::<VariantCodecWithOverride>(),\n            specta_serde::Format,\n        )\n        .expect(\"variant override should satisfy custom serde codecs\");\n}\n\n#[test]\nfn phased_override_requires_phases_format() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<CustomCodecWithPhasedOverride>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"apply should reject phased overrides\");\n    assert!(err.to_string().contains(\"requires `PhasesFormat`\"));\n\n    Typescript::default()\n        .export(\n            &Types::default().register::<CustomCodecWithPhasedOverride>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"PhasesFormat should accept phased overrides\");\n}\n\n#[test]\nfn field_only_phased_override_requires_phases_format() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<FieldOnlyPhasedOverride>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"apply should reject phased field overrides\");\n    assert!(err.to_string().contains(\"requires `PhasesFormat`\"));\n\n    Typescript::default()\n        .export(\n            &Types::default().register::<FieldOnlyPhasedOverride>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"phased export should remove phased opaque references\");\n}\n\n#[test]\nfn phases_format_exports_field_only_phased_override() {\n    let rendered = Typescript::default()\n        .export(\n            &Types::default().register::<FieldOnlyPhasedOverride>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"PhasesFormat should resolve phased overrides during export\");\n\n    insta::assert_snapshot!(\n        \"serde-conversions-format-phases-exports-field-only-phased-override\",\n        rendered\n    );\n}\n\n#[test]\nfn skip_serializing_if_requires_phases() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<SkipSerializingIfOnly>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"skip_serializing_if should require PhasesFormat\");\n    assert!(err.to_string().contains(\"skip_serializing_if\"));\n\n    Typescript::default()\n        .export(\n            &Types::default().register::<SkipSerializingIfOnly>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"PhasesFormat should accept skip_serializing_if\");\n}\n\n#[test]\nfn field_phase_specific_rename_requires_phases() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<FieldPhaseSpecificRename>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"field-level phase-specific renames should require PhasesFormat\");\n    assert!(err.to_string().contains(\"Incompatible field rename\"));\n\n    Typescript::default()\n        .export(\n            &Types::default().register::<FieldPhaseSpecificRename>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"PhasesFormat should accept field-level phase-specific renames\");\n}\n\n#[test]\nfn identifier_enums_require_phases() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<VariantIdentifierValid>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"identifier enums should require PhasesFormat\");\n    assert!(\n        err.to_string()\n            .contains(\"identifier enums require `PhasesFormat`\")\n    );\n\n    Typescript::default()\n        .export(\n            &Types::default().register::<VariantIdentifierValid>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"valid variant_identifier enum should pass in PhasesFormat\");\n    Typescript::default()\n        .export(\n            &Types::default().register::<FieldIdentifierValid>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"valid field_identifier enum should pass in PhasesFormat\");\n}\n"
  },
  {
    "path": "tests/tests/serde_identifiers.rs",
    "content": "use serde::Deserialize;\nuse specta::{Type, Types};\nuse specta_typescript::Typescript;\n\n#[derive(Type, Deserialize)]\n#[specta(collect = false)]\n#[serde(variant_identifier, rename_all = \"snake_case\")]\nenum VariantIdentifier {\n    HttpStatus,\n    #[serde(alias = \"legacy\")]\n    LegacyName,\n}\n\n#[derive(Type, Deserialize)]\n#[specta(collect = false)]\n#[serde(field_identifier, rename_all = \"snake_case\")]\nenum FieldIdentifier {\n    FirstName,\n    LastName,\n    Other(bool),\n}\n\n#[test]\nfn identifier_apply_requires_phases() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<VariantIdentifier>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"variant_identifier should require PhasesFormat\");\n    assert!(\n        err.to_string()\n            .contains(\"identifier enums require `PhasesFormat`\")\n    );\n\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<FieldIdentifier>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"field_identifier should require PhasesFormat\");\n    assert!(\n        err.to_string()\n            .contains(\"identifier enums require `PhasesFormat`\")\n    );\n}\n\n#[test]\nfn identifier_phases_format_exports_deserialize_union() {\n    let variant_ts = Typescript::default()\n        .export(\n            &Types::default().register::<VariantIdentifier>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"typescript export should succeed\");\n\n    insta::assert_snapshot!(\"serde-identifiers-variant-typescript\", variant_ts);\n\n    let field_ts = Typescript::default()\n        .export(\n            &Types::default().register::<FieldIdentifier>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"typescript export should succeed\");\n\n    insta::assert_snapshot!(\"serde-identifiers-field-typescript\", field_ts);\n}\n"
  },
  {
    "path": "tests/tests/serde_other.rs",
    "content": "// Regression test for https://github.com/specta-rs/specta/issues/131\n\nuse serde::Deserialize;\nuse specta::{Type, Types};\nuse specta_typescript::Typescript;\n\n#[derive(Type, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"kind\")]\nenum InternalOther {\n    #[serde(rename = \"known\")]\n    Known,\n    #[serde(other)]\n    Other,\n}\n\n#[derive(Type, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"kind\", content = \"data\")]\nenum AdjacentOther {\n    #[serde(rename = \"known\")]\n    Known(String),\n    #[serde(other)]\n    Other,\n}\n\n#[test]\nfn serde_other_requires_phases_format() {\n    let err = Typescript::default()\n        .export(\n            &Types::default().register::<InternalOther>(),\n            specta_serde::Format,\n        )\n        .expect_err(\"#[serde(other)] should require PhasesFormat\");\n\n    assert!(\n        err.to_string()\n            .contains(\"`#[serde(other)]` requires `PhasesFormat`\")\n    );\n}\n\n#[test]\nfn serde_other_internal_tag_widens_deserialize_tag_to_string() {\n    let ts = Typescript::default()\n        .export(\n            &Types::default().register::<InternalOther>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"typescript export should succeed\");\n\n    insta::assert_snapshot!(\"serde-other-internal-tag-typescript\", ts);\n}\n\n#[test]\nfn serde_other_adjacent_tag_widens_deserialize_tag_to_string() {\n    let ts = Typescript::default()\n        .export(\n            &Types::default().register::<AdjacentOther>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"typescript export should succeed\");\n\n    insta::assert_snapshot!(\"serde-other-adjacent-tag-typescript\", ts);\n}\n"
  },
  {
    "path": "tests/tests/snapshots/test__bound__bound-associated-type-issue-138.snap",
    "content": "---\nsource: tests/tests/bound.rs\nexpression: output\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type Demo = {\n\tvalue: number,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__export-many-raw.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\n/**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {[]} Unit6\n\t* @property {[]} A\n\t*\n\t* @typedef {Record<string, never>} Unit7\n\t* @property {Record<string, never>} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {\"Unit\" | number | [number, number] | { a: number }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {number} Single\n\t* @property {[number, number]} Multiple\n\t* @property {{ a: number }} Struct\n\t*\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t\tinner: FlattenEnum,\n\t*\t}} FlattenEnumStruct\n\t* @property {string} outer\n\t* @property {FlattenEnum} inner\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {string | number | { a: string; b: number }} EnumMacroAttributes\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ a: string; b: number }} D\n\t*\n\t* @typedef {{\n\t* \ta: string,\n\t* }} InlineEnumField\n\t* @property {{\n\t* \ta: string,\n\t* }} A\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*\n\t* @typedef {\"OneWord\" | \"TwoWords\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"TwoWords\"} TwoWords\n\t*\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t\tresult: NestedEnum,\n\t*\t}} FlattenOnNestedEnum\n\t* @property {string} id\n\t* @property {NestedEnum} result\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {string} ExtraBracketsInTupleVariant\n\t* @property {string} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*\n\t* @typedef {never | string} SkippedFieldWithinVariant\n\t* @property {never} A\n\t* @property {string} B\n\t*\n\t* @typedef {{\n\t*\t\ttest_ing: string,\n\t*\t}} KebabCase\n\t* @property {string} test_ing\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {T} LifetimeGenericEnum<T>\n\t* @property {T} Borrowed\n\t* @property {T} Owned\n\t*\n\t* @typedef {{\n\t*\t\todata_context: string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} odata_context\n\t*\n\t* @typedef {string} RenameWithWeirdCharsVariant\n\t* @property {string} A\n\t*\n\t* @typedef {{\n\t*\t\tempty: string,\n\t*\t\tquote: string,\n\t*\t\tbackslash: string,\n\t*\t\tnewline: string,\n\t*\t\tline_separator: string,\n\t*\t\tparagraph_separator: string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} empty\n\t* @property {string} quote\n\t* @property {string} backslash\n\t* @property {string} newline\n\t* @property {string} line_separator\n\t* @property {string} paragraph_separator\n\t*\n\t* @typedef {never} RenamedVariantWithSkippedPayload\n\t* @property {never} A\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct2\n\t* @property {string} a\n\t*\n\t* @typedef {\"A\" | \"B\"} Enum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {\"A\" | \"B\" | { enum_field: null }} Enum2\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {{ enum_field: null }} D\n\t*\n\t* @typedef {{ a: string }} Enum3\n\t* @property {{ a: string }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} b\n\t*\n\t* @typedef {\"HelloWorld\" | \"VariantB\" | \"TestingWords\"} EnumRenameAllUppercase\n\t* @property {\"HelloWorld\"} HelloWorld\n\t* @property {\"VariantB\"} VariantB\n\t* @property {\"TestingWords\"} TestingWords\n\t*\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*\n\t* @typedef {{ demo: RecursiveInEnum }} RecursiveInEnum\n\t* @property {{ demo: RecursiveInEnum }} A\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {string | null | { a: string | null } | { a?: string | null }} OptionalInEnum\n\t* @property {string | null} A\n\t* @property {{ a: string | null }} B\n\t* @property {{ a?: string | null }} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {string | { demo2: string }} MacroEnum\n\t* @property {string} Demo\n\t* @property {{ demo2: string }} Demo2\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* number | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* { \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* a: number }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* number} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { \n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* a: number }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* number | \n\t*\t/**  Some single-line comment */\n\t* { \n\t*\t/**  Some single-line comment */\n\t* a: number }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* number} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { \n\t* /**  Some single-line comment */\n\t* a: number }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*\n\t* @typedef {{\n\t*\t\tc: Inner,\n\t*\t}} FlattenedInner\n\t* @property {Inner} c\n\t*\n\t* @typedef {{\n\t*\t\tb: BoxedInner,\n\t*\t}} BoxFlattened\n\t* @property {BoxedInner} b\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t}} Third\n\t* @property {First} a\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*\n\t* @typedef {string | \"B\"} Eight\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Ninth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {{ inner: First }} MyEnumTagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumExternal\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumAdjacent\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {Record<string, never>} EmptyStructWithTag\n\t*\n\t* @typedef {\"A\" | { id: string; method: string } | string} AdjacentlyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*\n\t* @typedef {({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number }} LoadProjectEvent\n\t* @property {{ project_name: string }} Started\n\t* @property {{ project_name: string; status: string; progress: number }} ProgressTest\n\t* @property {{ project_name: string }} Finished\n\t*\n\t* @typedef {\"A\" | { id: string; method: string } | string} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221External\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {{ [key in string]: string }} InternallyTaggedD\n\t* @property {{ [key in string]: string }} A\n\t*\n\t* @typedef {null} InternallyTaggedE\n\t* @property {null} A\n\t*\n\t* @typedef {InternallyTaggedFInner} InternallyTaggedF\n\t* @property {InternallyTaggedFInner} A\n\t*\n\t* @typedef {InternallyTaggedHInner} InternallyTaggedH\n\t* @property {InternallyTaggedHInner} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedL\n\t* @property {\"A\" | \"B\"} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedM\n\t* @property {\"A\" | \"B\"} A\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} field\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} InternallyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} AdjacentlyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {string} SkipVariant\n\t* @property {string} A\n\t*\n\t* @typedef {never | [number]} SkipUnnamedFieldInVariant\n\t* @property {never} A\n\t* @property {[number]} B\n\t*\n\t* @typedef {Record<string, never> | { b: number }} SkipNamedFieldInVariant\n\t* @property {Record<string, never>} A\n\t* @property {{ b: number }} B\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} SkipVariant2\n\t* @property {string} A\n\t*\n\t* @typedef {{ a: string }} SkipVariant3\n\t* @property {{ a: string }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenB\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenC\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*\n\t* @typedef {A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][]} Generic2<A, B, C>\n\t* @property {A} A\n\t* @property {[B, B, B]} B\n\t* @property {C[]} C\n\t* @property {A[][][]} D\n\t* @property {{ a: A; b: B; c: C }} E\n\t* @property {number[]} X\n\t* @property {number} Y\n\t* @property {number[][]} Z\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t\tt: InlineFlattenGenericsG<string>,\n\t*\t}} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t* @property {InlineFlattenGenericsG<string>} t\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*/\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__export-many-serde.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\n/**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & FlattenEnum} FlattenEnumStruct\n\t* @property {string} outer\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & NestedEnum} FlattenOnNestedEnum\n\t* @property {string} id\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*\n\t* @typedef {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} RecursiveInEnum\n\t* @property {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} A\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**  Some single-line comment */\n\t* ({ B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*\n\t* @typedef {Inner} FlattenedInner\n\t*\n\t* @typedef {BoxedInner} BoxFlattened\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t} & First} Third\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: First }} D\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {{ type: \"Variant\"; inner: First }} MyEnumTagged\n\t* @property {{ type: \"Variant\"; inner: First }} Variant\n\t*\n\t* @typedef {{ Variant: {\n\t* \tinner: First,\n\t* } }} MyEnumExternal\n\t* @property {{ Variant: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} InternallyTaggedD\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenB\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenC\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*/\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__export-many-serde_phases.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\n/**\n\t*  https://github.com/specta-rs/specta/issues/374\n\t*\n\t* @typedef {Issue374_Serialize | Issue374_Deserialize} Issue374\n\t* @property {Issue374_Serialize} Serialize\n\t* @property {Issue374_Deserialize} Deserialize\n\t*\n\t* @typedef {Optional_Serialize | Optional_Deserialize} Optional\n\t* @property {Optional_Serialize} Serialize\n\t* @property {Optional_Deserialize} Deserialize\n\t*\n\t* @typedef {StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize} StructPhaseSpecificRename\n\t* @property {StructPhaseSpecificRenameSerialize} Serialize\n\t* @property {StructPhaseSpecificRenameDeserialize} Deserialize\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & FlattenEnum} FlattenEnumStruct\n\t* @property {string} outer\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & NestedEnum} FlattenOnNestedEnum\n\t* @property {string} id\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*\n\t* @typedef {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} RecursiveInEnum\n\t* @property {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} A\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**  Some single-line comment */\n\t* ({ B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*\n\t* @typedef {Inner} FlattenedInner\n\t*\n\t* @typedef {BoxedInner} BoxFlattened\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t} & First} Third\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: First }} D\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {{ type: \"Variant\"; inner: First }} MyEnumTagged\n\t* @property {{ type: \"Variant\"; inner: First }} Variant\n\t*\n\t* @typedef {{ Variant: {\n\t* \tinner: First,\n\t* } }} MyEnumExternal\n\t* @property {{ Variant: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} InternallyTaggedD\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenB\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenC\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*/\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__export-raw.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nRange<i32>: /**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*/\n\nRangeInclusive<i32>: /**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*/\n\nString: \nPathBuf: \nIpAddr: \nIpv4Addr: \nIpv6Addr: \nSocketAddr: \nSocketAddrV4: \nSocketAddrV6: \nCow<'static, str>: \nCow<'static, i32>: \nVec<i32>: \nVec<MyEnum>: \nResult<String, i32>: /**\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*/\n\nVec<Option<Cow<'static, i32>>>: \nPhantomData<()>: \nPhantomData<String>: \nInfallible: \nUnit1: /**\n\t* @typedef {null} Unit1\n\t*/\n\nUnit2: /**\n\t* @typedef {Record<string, never>} Unit2\n\t*/\n\nUnit3: /**\n\t* @typedef {[]} Unit3\n\t*/\n\nUnit4: /**\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*/\n\nUnit5: /**\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*/\n\nUnit6: /**\n\t* @typedef {[]} Unit6\n\t* @property {[]} A\n\t*/\n\nUnit7: /**\n\t* @typedef {Record<string, never>} Unit7\n\t* @property {Record<string, never>} A\n\t*/\n\nSimpleStruct: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*/\n\nTupleStruct1: /**\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*/\n\nTupleStruct3: /**\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*/\n\nTestEnum: /**\n\t* @typedef {\"Unit\" | number | [number, number] | { a: number }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {number} Single\n\t* @property {[number, number]} Multiple\n\t* @property {{ a: number }} Struct\n\t*/\n\nRefStruct: /**\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*/\n\nInlinerStruct: /**\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*/\n\nGenericStruct<i32>: /**\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*/\n\nGenericStruct<String>: /**\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*/\n\nFlattenEnumStruct: /**\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t\tinner: FlattenEnum,\n\t*\t}} FlattenEnumStruct\n\t* @property {string} outer\n\t* @property {FlattenEnum} inner\n\t*/\n\nOverridenStruct: /**\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*/\n\nHasGenericAlias: /**\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*/\n\nEnumMacroAttributes: /**\n\t* @typedef {string | number | { a: string; b: number }} EnumMacroAttributes\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ a: string; b: number }} D\n\t*/\n\nInlineEnumField: /**\n\t* @typedef {{\n\t* \ta: string,\n\t* }} InlineEnumField\n\t* @property {{\n\t* \ta: string,\n\t* }} A\n\t*/\n\nInlineOptionalType: /**\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*/\n\nRename: /**\n\t* @typedef {\"OneWord\" | \"TwoWords\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"TwoWords\"} TwoWords\n\t*/\n\nTransparentType: /**\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*/\n\nTransparentType2: /**\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*/\n\nTransparentTypeWithOverride: /**\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*/\n\nHashMap<BasicEnum, ()>: \nHashMap<BasicEnum, i32>: \nVec<PlaceholderInnerField>: \nEnumReferenceRecordKey: /**\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*/\n\nFlattenOnNestedEnum: /**\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t\tresult: NestedEnum,\n\t*\t}} FlattenOnNestedEnum\n\t* @property {string} id\n\t* @property {NestedEnum} result\n\t*/\n\nMyEmptyInput: /**\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*/\n\n(String): \nExtraBracketsInTupleVariant: /**\n\t* @typedef {string} ExtraBracketsInTupleVariant\n\t* @property {string} A\n\t*/\n\nExtraBracketsInUnnamedStruct: /**\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*/\n\nVec<MyEnum>: \nInlineTuple: /**\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*/\n\nInlineTuple2: /**\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*/\n\nBox<str>: \nBox<String>: \nSkippedFieldWithinVariant: /**\n\t* @typedef {never | string} SkippedFieldWithinVariant\n\t* @property {never} A\n\t* @property {string} B\n\t*/\n\nKebabCase: /**\n\t* @typedef {{\n\t*\t\ttest_ing: string,\n\t*\t}} KebabCase\n\t* @property {string} test_ing\n\t*/\n\nIssue281<'_>: /**\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*/\n\nLifetimeGenericStruct<'_, i32>: /**\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*/\n\nLifetimeGenericEnum<'_, i32>: /**\n\t* @typedef {T} LifetimeGenericEnum<T>\n\t* @property {T} Borrowed\n\t* @property {T} Owned\n\t*/\n\nRenameWithWeirdCharsField: /**\n\t* @typedef {{\n\t*\t\todata_context: string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} odata_context\n\t*/\n\nRenameWithWeirdCharsVariant: /**\n\t* @typedef {string} RenameWithWeirdCharsVariant\n\t* @property {string} A\n\t*/\n\nRenamedFieldKeys: /**\n\t* @typedef {{\n\t*\t\tempty: string,\n\t*\t\tquote: string,\n\t*\t\tbackslash: string,\n\t*\t\tnewline: string,\n\t*\t\tline_separator: string,\n\t*\t\tparagraph_separator: string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} empty\n\t* @property {string} quote\n\t* @property {string} backslash\n\t* @property {string} newline\n\t* @property {string} line_separator\n\t* @property {string} paragraph_separator\n\t*/\n\nRenamedVariantWithSkippedPayload: /**\n\t* @typedef {never} RenamedVariantWithSkippedPayload\n\t* @property {never} A\n\t*/\n\ntype_type::Type: /**\n\t* @typedef {never} Type\n\t*/\n\nActualType: /**\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*/\n\nSpectaTypeOverride: /**\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*/\n\nContainerTypeOverrideStruct: /**\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*/\n\nContainerTypeOverrideEnum: /**\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*/\n\nContainerTypeOverrideGeneric<Box<dyn Any>>: /**\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*/\n\nContainerTypeOverrideToGeneric<i32>: /**\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*/\n\nContainerTypeOverrideTuple: /**\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*/\n\nContainerTypeOverrideTupleGeneric<i32>: /**\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*/\n\nInvalidToValidType: /**\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*/\n\nTupleStruct: /**\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*/\n\nTupleStructWithRep: /**\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*/\n\nGenericTupleStruct<String>: /**\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*/\n\nBracedStruct: /**\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*/\n\nStruct: /**\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct\n\t* @property {string} a\n\t*/\n\nStruct2: /**\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct2\n\t* @property {string} a\n\t*/\n\nEnum: /**\n\t* @typedef {\"A\" | \"B\"} Enum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*/\n\nEnum2: /**\n\t* @typedef {\"A\" | \"B\" | { enum_field: null }} Enum2\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {{ enum_field: null }} D\n\t*/\n\nEnum3: /**\n\t* @typedef {{ a: string }} Enum3\n\t* @property {{ a: string }} A\n\t*/\n\nStructRenameAllUppercase: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} a\n\t* @property {number} b\n\t*/\n\nRenameSerdeSpecialChar: /**\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} b\n\t*/\n\nEnumRenameAllUppercase: /**\n\t* @typedef {\"HelloWorld\" | \"VariantB\" | \"TestingWords\"} EnumRenameAllUppercase\n\t* @property {\"HelloWorld\"} HelloWorld\n\t* @property {\"VariantB\"} VariantB\n\t* @property {\"TestingWords\"} TestingWords\n\t*/\n\nRecursive: /**\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*/\n\nRecursiveMapValue: /**\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*/\n\nRecursiveTransparent: /**\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*/\n\nRecursiveInEnum: /**\n\t* @typedef {{ demo: RecursiveInEnum }} RecursiveInEnum\n\t* @property {{ demo: RecursiveInEnum }} A\n\t*/\n\nNonOptional: /**\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*/\n\nOptionalOnNamedField: /**\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*/\n\nOptionalOnTransparentNamedField: /**\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*/\n\nOptionalInEnum: /**\n\t* @typedef {string | null | { a: string | null } | { a?: string | null }} OptionalInEnum\n\t* @property {string | null} A\n\t* @property {{ a: string | null }} B\n\t* @property {{ a?: string | null }} C\n\t*/\n\nUntaggedVariants: /**\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*/\n\nUntaggedVariantsWithoutValue: /**\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*/\n\nUntaggedVariantsWithDuplicateBranches: /**\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*/\n\nHashMap<String, ()>: \nRegular: /**\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*/\n\nHashMap<Infallible, ()>: \nHashMap<TransparentStruct, ()>: \nHashMap<UnitVariants, ()>: \nHashMap<UntaggedVariantsKey, ()>: \nValidMaybeValidKey: /**\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*/\n\nValidMaybeValidKeyNested: /**\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*/\n\nMacroStruct: /**\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*/\n\nMacroStruct2: /**\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*/\n\nMacroEnum: /**\n\t* @typedef {string | { demo2: string }} MacroEnum\n\t* @property {string} Demo\n\t* @property {{ demo2: string }} Demo2\n\t*/\n\nDeprecatedType: /**\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*/\n\nDeprecatedTypeWithMsg: /**\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*/\n\nDeprecatedTypeWithMsg2: /**\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*/\n\nDeprecatedFields: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*/\n\nDeprecatedTupleVariant: /**\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*/\n\nDeprecatedEnumVariants: /**\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*/\n\nCommentedStruct: /**\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*/\n\nCommentedEnum: /**\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* number | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* { \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* a: number }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* number} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { \n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* a: number }} B - Some triple-slash comment Some more triple-slash comment\n\t*/\n\nSingleLineComment: /**\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* number | \n\t*\t/**  Some single-line comment */\n\t* { \n\t*\t/**  Some single-line comment */\n\t* a: number }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* number} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { \n\t* /**  Some single-line comment */\n\t* a: number }} B - Some single-line comment\n\t*/\n\nNonGeneric: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nHalfGenericA<u8>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nHalfGenericB<bool>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nFullGeneric<u8, bool>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nAnother<bool>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nMapA<u32>: \nMapB<u32>: \nMapC<u32>: \nAGenericStruct<u32>: /**\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*/\n\nA: /**\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*/\n\nDoubleFlattened: /**\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*/\n\nFlattenedInner: /**\n\t* @typedef {{\n\t*\t\tc: Inner,\n\t*\t}} FlattenedInner\n\t* @property {Inner} c\n\t*/\n\nBoxFlattened: /**\n\t* @typedef {{\n\t*\t\tb: BoxedInner,\n\t*\t}} BoxFlattened\n\t* @property {BoxedInner} b\n\t*/\n\nBoxInline: /**\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*/\n\nFirst: /**\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*/\n\nSecond: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*/\n\nThird: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t}} Third\n\t* @property {First} a\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*/\n\nFourth: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*/\n\nTagOnStructWithInline: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*/\n\nSixth: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*/\n\nSeventh: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*/\n\nEight: /**\n\t* @typedef {string | \"B\"} Eight\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t*/\n\nNinth: /**\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Ninth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*/\n\nTenth: /**\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*/\n\nMyEnumTagged: /**\n\t* @typedef {{ inner: First }} MyEnumTagged\n\t* @property {{ inner: First }} Variant\n\t*/\n\nMyEnumExternal: /**\n\t* @typedef {{ inner: First }} MyEnumExternal\n\t* @property {{ inner: First }} Variant\n\t*/\n\nMyEnumAdjacent: /**\n\t* @typedef {{ inner: First }} MyEnumAdjacent\n\t* @property {{ inner: First }} Variant\n\t*/\n\nMyEnumUntagged: /**\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*/\n\nEmptyStruct: /**\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*/\n\nEmptyStructWithTag: /**\n\t* @typedef {Record<string, never>} EmptyStructWithTag\n\t*/\n\nAdjacentlyTagged: /**\n\t* @typedef {\"A\" | { id: string; method: string } | string} AdjacentlyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*/\n\nLoadProjectEvent: /**\n\t* @typedef {({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number }} LoadProjectEvent\n\t* @property {{ project_name: string }} Started\n\t* @property {{ project_name: string; status: string; progress: number }} ProgressTest\n\t* @property {{ project_name: string }} Finished\n\t*/\n\nExternallyTagged: /**\n\t* @typedef {\"A\" | { id: string; method: string } | string} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*/\n\nIssue221External: /**\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221External\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*/\n\nInternallyTaggedD: /**\n\t* @typedef {{ [key in string]: string }} InternallyTaggedD\n\t* @property {{ [key in string]: string }} A\n\t*/\n\nInternallyTaggedE: /**\n\t* @typedef {null} InternallyTaggedE\n\t* @property {null} A\n\t*/\n\nInternallyTaggedF: /**\n\t* @typedef {InternallyTaggedFInner} InternallyTaggedF\n\t* @property {InternallyTaggedFInner} A\n\t*/\n\nInternallyTaggedH: /**\n\t* @typedef {InternallyTaggedHInner} InternallyTaggedH\n\t* @property {InternallyTaggedHInner} A\n\t*/\n\nInternallyTaggedL: /**\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedL\n\t* @property {\"A\" | \"B\"} A\n\t*/\n\nInternallyTaggedM: /**\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedM\n\t* @property {\"A\" | \"B\"} A\n\t*/\n\nStructWithAlias: /**\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*/\n\nStructWithMultipleAliases: /**\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*/\n\nStructWithAliasAndRename: /**\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} field\n\t*/\n\nEnumWithVariantAlias: /**\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*/\n\nEnumWithMultipleVariantAliases: /**\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*/\n\nEnumWithVariantAliasAndRename: /**\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*/\n\nInternallyTaggedWithAlias: /**\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} InternallyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*/\n\nAdjacentlyTaggedWithAlias: /**\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} AdjacentlyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*/\n\nUntaggedWithAlias: /**\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*/\n\nIssue221UntaggedSafe: /**\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*/\n\nIssue221UntaggedMixed: /**\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*/\n\nEmptyEnum: /**\n\t* @typedef {never} EmptyEnum\n\t*/\n\nEmptyEnumTagged: /**\n\t* @typedef {never} EmptyEnumTagged\n\t*/\n\nEmptyEnumTaggedWContent: /**\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*/\n\nEmptyEnumUntagged: /**\n\t* @typedef {never} EmptyEnumUntagged\n\t*/\n\nSkipOnlyField: /**\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*/\n\nSkipField: /**\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*/\n\nSkipVariant: /**\n\t* @typedef {string} SkipVariant\n\t* @property {string} A\n\t*/\n\nSkipUnnamedFieldInVariant: /**\n\t* @typedef {never | [number]} SkipUnnamedFieldInVariant\n\t* @property {never} A\n\t* @property {[number]} B\n\t*/\n\nSkipNamedFieldInVariant: /**\n\t* @typedef {Record<string, never> | { b: number }} SkipNamedFieldInVariant\n\t* @property {Record<string, never>} A\n\t* @property {{ b: number }} B\n\t*/\n\nTransparentWithSkip: /**\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*/\n\nTransparentWithSkip2: /**\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*/\n\nTransparentWithSkip3: /**\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*/\n\nSkipVariant2: /**\n\t* @typedef {string} SkipVariant2\n\t* @property {string} A\n\t*/\n\nSkipVariant3: /**\n\t* @typedef {{ a: string }} SkipVariant3\n\t* @property {{ a: string }} A\n\t*/\n\nSkipStructFields: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*/\n\nSpectaSkipNonTypeField: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*/\n\nFlattenA: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*/\n\nFlattenB: /**\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenB\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*/\n\nFlattenC: /**\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenC\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*/\n\nFlattenD: /**\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*/\n\nFlattenE: /**\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} b\n\t* @property {number} d\n\t*/\n\nFlattenF: /**\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} b\n\t* @property {number} d\n\t*/\n\nFlattenG: /**\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*/\n\nTupleNested: /**\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*/\n\nGeneric1<()>: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*/\n\nGenericAutoBound<()>: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*/\n\nGenericAutoBound2<()>: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*/\n\nContainer1: /**\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*/\n\nGeneric2<(), String, i32>: /**\n\t* @typedef {A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][]} Generic2<A, B, C>\n\t* @property {A} A\n\t* @property {[B, B, B]} B\n\t* @property {C[]} C\n\t* @property {A[][][]} D\n\t* @property {{ a: A; b: B; c: C }} E\n\t* @property {number[]} X\n\t* @property {number} Y\n\t* @property {number[][]} Z\n\t*/\n\nGenericNewType1<()>: /**\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*/\n\nGenericTuple<()>: /**\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*/\n\nGenericStruct2<()>: /**\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*/\n\nInlineGenericNewtype<String>: \nInlineGenericNested<String>: \nInlineFlattenGenericsG<()>: /**\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*/\n\nInlineFlattenGenerics: /**\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t\tt: InlineFlattenGenericsG<string>,\n\t*\t}} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t* @property {InlineFlattenGenericsG<string>} t\n\t*/\n\nGenericDefault: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*/\n\nChainedGenericDefault: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nChainedGenericDefault<String, String>: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nChainedGenericDefault<i32>: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nChainedGenericDefault<String, i32>: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nGenericDefaultSkipped: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*/\n\nGenericDefaultSkippedNonType: /**\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*/\n\nGenericParameterOrderPreserved: /**\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*/\n\nConstGenericInNonConstContainer: /**\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*/\n\nConstGenericInConstContainer: /**\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*/\n\nNamedConstGenericContainer: /**\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*/\n\nInlineConstGenericContainer: /**\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*/\n\nInlineRecursiveConstGenericContainer: /**\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*/\n\nTestCollectionRegister: /**\n\t* @typedef {never} TestCollectionRegister\n\t*/\n\nTestCollectionRegister: /**\n\t* @typedef {never} TestCollectionRegister\n\t*/\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__export-serde.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nRange<i32>: /**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*/\n\nRangeInclusive<i32>: /**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*/\n\nString: \nPathBuf: \nIpAddr: \nIpv4Addr: \nIpv6Addr: \nSocketAddr: \nSocketAddrV4: \nSocketAddrV6: \nCow<'static, str>: \nCow<'static, i32>: \nVec<i32>: \nVec<MyEnum>: \nResult<String, i32>: /**\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*/\n\nVec<Option<Cow<'static, i32>>>: \nPhantomData<()>: \nPhantomData<String>: \nInfallible: \nUnit1: /**\n\t* @typedef {null} Unit1\n\t*/\n\nUnit2: /**\n\t* @typedef {Record<string, never>} Unit2\n\t*/\n\nUnit3: /**\n\t* @typedef {[]} Unit3\n\t*/\n\nUnit4: /**\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*/\n\nUnit5: /**\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*/\n\nUnit6: /**\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*/\n\nUnit7: /**\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*/\n\nSimpleStruct: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*/\n\nTupleStruct1: /**\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*/\n\nTupleStruct3: /**\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*/\n\nTestEnum: /**\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*/\n\nRefStruct: /**\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*/\n\nInlinerStruct: /**\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*/\n\nGenericStruct<i32>: /**\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*/\n\nGenericStruct<String>: /**\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*/\n\nFlattenEnumStruct: /**\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & FlattenEnum} FlattenEnumStruct\n\t* @property {string} outer\n\t*/\n\nOverridenStruct: /**\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*/\n\nHasGenericAlias: /**\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*/\n\nEnumMacroAttributes: /**\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*/\n\nInlineEnumField: /**\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*/\n\nInlineOptionalType: /**\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*/\n\nRename: /**\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*/\n\nTransparentType: /**\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*/\n\nTransparentType2: /**\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*/\n\nTransparentTypeWithOverride: /**\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*/\n\nHashMap<BasicEnum, ()>: \nHashMap<BasicEnum, i32>: \nVec<PlaceholderInnerField>: \nEnumReferenceRecordKey: /**\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*/\n\nFlattenOnNestedEnum: /**\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & NestedEnum} FlattenOnNestedEnum\n\t* @property {string} id\n\t*/\n\nMyEmptyInput: /**\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*/\n\n(String): \nExtraBracketsInTupleVariant: /**\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*/\n\nExtraBracketsInUnnamedStruct: /**\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*/\n\nVec<MyEnum>: \nInlineTuple: /**\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*/\n\nInlineTuple2: /**\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*/\n\nBox<str>: \nBox<String>: \nSkippedFieldWithinVariant: /**\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*/\n\nKebabCase: /**\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*/\n\nIssue281<'_>: /**\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*/\n\nLifetimeGenericStruct<'_, i32>: /**\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*/\n\nLifetimeGenericEnum<'_, i32>: /**\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*/\n\nRenameWithWeirdCharsField: /**\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*/\n\nRenameWithWeirdCharsVariant: /**\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*/\n\nRenamedFieldKeys: /**\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*/\n\nRenamedVariantWithSkippedPayload: /**\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*/\n\ntype_type::Type: /**\n\t* @typedef {never} Type\n\t*/\n\nActualType: /**\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*/\n\nSpectaTypeOverride: /**\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*/\n\nContainerTypeOverrideStruct: /**\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*/\n\nContainerTypeOverrideEnum: /**\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*/\n\nContainerTypeOverrideGeneric<Box<dyn Any>>: /**\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*/\n\nContainerTypeOverrideToGeneric<i32>: /**\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*/\n\nContainerTypeOverrideTuple: /**\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*/\n\nContainerTypeOverrideTupleGeneric<i32>: /**\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*/\n\nInvalidToValidType: /**\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*/\n\nTupleStruct: /**\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*/\n\nTupleStructWithRep: /**\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*/\n\nGenericTupleStruct<String>: /**\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*/\n\nBracedStruct: /**\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*/\n\nStruct: /**\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*/\n\nStruct2: /**\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*/\n\nEnum: /**\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*/\n\nEnum2: /**\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*/\n\nEnum3: /**\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*/\n\nStructRenameAllUppercase: /**\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*/\n\nRenameSerdeSpecialChar: /**\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*/\n\nEnumRenameAllUppercase: /**\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*/\n\nRecursive: /**\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*/\n\nRecursiveMapValue: /**\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*/\n\nRecursiveTransparent: /**\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*/\n\nRecursiveInEnum: /**\n\t* @typedef {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} RecursiveInEnum\n\t* @property {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} A\n\t*/\n\nNonOptional: /**\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*/\n\nOptionalOnNamedField: /**\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*/\n\nOptionalOnTransparentNamedField: /**\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*/\n\nOptionalInEnum: /**\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*/\n\nUntaggedVariants: /**\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*/\n\nUntaggedVariantsWithoutValue: /**\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*/\n\nUntaggedVariantsWithDuplicateBranches: /**\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*/\n\nHashMap<String, ()>: \nRegular: /**\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*/\n\nHashMap<Infallible, ()>: \nHashMap<TransparentStruct, ()>: \nHashMap<UnitVariants, ()>: \nHashMap<UntaggedVariantsKey, ()>: \nValidMaybeValidKey: /**\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*/\n\nValidMaybeValidKeyNested: /**\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*/\n\nMacroStruct: /**\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*/\n\nMacroStruct2: /**\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*/\n\nMacroEnum: /**\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*/\n\nDeprecatedType: /**\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*/\n\nDeprecatedTypeWithMsg: /**\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*/\n\nDeprecatedTypeWithMsg2: /**\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*/\n\nDeprecatedFields: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*/\n\nDeprecatedTupleVariant: /**\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*/\n\nDeprecatedEnumVariants: /**\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*/\n\nCommentedStruct: /**\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*/\n\nCommentedEnum: /**\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*/\n\nSingleLineComment: /**\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**  Some single-line comment */\n\t* ({ B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*/\n\nNonGeneric: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nHalfGenericA<u8>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nHalfGenericB<bool>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nFullGeneric<u8, bool>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nAnother<bool>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nMapA<u32>: \nMapB<u32>: \nMapC<u32>: \nAGenericStruct<u32>: /**\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*/\n\nA: /**\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*/\n\nDoubleFlattened: /**\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*/\n\nFlattenedInner: /**\n\t* @typedef {Inner} FlattenedInner\n\t*/\n\nBoxFlattened: /**\n\t* @typedef {BoxedInner} BoxFlattened\n\t*/\n\nBoxInline: /**\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*/\n\nFirst: /**\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*/\n\nSecond: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*/\n\nThird: /**\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t} & First} Third\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*/\n\nFourth: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*/\n\nTagOnStructWithInline: /**\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*/\n\nSixth: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*/\n\nSeventh: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*/\n\nEight: /**\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*/\n\nNinth: /**\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: First }} D\n\t*/\n\nTenth: /**\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*/\n\nMyEnumTagged: /**\n\t* @typedef {{ type: \"Variant\"; inner: First }} MyEnumTagged\n\t* @property {{ type: \"Variant\"; inner: First }} Variant\n\t*/\n\nMyEnumExternal: /**\n\t* @typedef {{ Variant: {\n\t* \tinner: First,\n\t* } }} MyEnumExternal\n\t* @property {{ Variant: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*/\n\nMyEnumAdjacent: /**\n\t* @typedef {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*/\n\nMyEnumUntagged: /**\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*/\n\nEmptyStruct: /**\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*/\n\nEmptyStructWithTag: /**\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*/\n\nAdjacentlyTagged: /**\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*/\n\nLoadProjectEvent: /**\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*/\n\nExternallyTagged: /**\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*/\n\nIssue221External: /**\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*/\n\nInternallyTaggedD: /**\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} InternallyTaggedD\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} A\n\t*/\n\nInternallyTaggedE: /**\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*/\n\nInternallyTaggedF: /**\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*/\n\nInternallyTaggedH: /**\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*/\n\nInternallyTaggedL: /**\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t*/\n\nInternallyTaggedM: /**\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*/\n\nStructWithAlias: /**\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*/\n\nStructWithMultipleAliases: /**\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*/\n\nStructWithAliasAndRename: /**\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*/\n\nEnumWithVariantAlias: /**\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*/\n\nEnumWithMultipleVariantAliases: /**\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*/\n\nEnumWithVariantAliasAndRename: /**\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*/\n\nInternallyTaggedWithAlias: /**\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*/\n\nAdjacentlyTaggedWithAlias: /**\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*/\n\nUntaggedWithAlias: /**\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*/\n\nIssue221UntaggedSafe: /**\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*/\n\nIssue221UntaggedMixed: /**\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*/\n\nEmptyEnum: /**\n\t* @typedef {never} EmptyEnum\n\t*/\n\nEmptyEnumTagged: /**\n\t* @typedef {never} EmptyEnumTagged\n\t*/\n\nEmptyEnumTaggedWContent: /**\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*/\n\nEmptyEnumUntagged: /**\n\t* @typedef {never} EmptyEnumUntagged\n\t*/\n\nSkipOnlyField: /**\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*/\n\nSkipField: /**\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*/\n\nSkipVariant: /**\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*/\n\nSkipUnnamedFieldInVariant: /**\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*/\n\nSkipNamedFieldInVariant: /**\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*/\n\nTransparentWithSkip: /**\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*/\n\nTransparentWithSkip2: /**\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*/\n\nTransparentWithSkip3: /**\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*/\n\nSkipVariant2: /**\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*/\n\nSkipVariant3: /**\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*/\n\nSkipStructFields: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*/\n\nSpectaSkipNonTypeField: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*/\n\nFlattenA: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*/\n\nFlattenB: /**\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenB\n\t* @property {number} c\n\t*/\n\nFlattenC: /**\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenC\n\t* @property {number} c\n\t*/\n\nFlattenD: /**\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*/\n\nFlattenE: /**\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*/\n\nFlattenF: /**\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*/\n\nFlattenG: /**\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*/\n\nTupleNested: /**\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*/\n\nGeneric1<()>: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*/\n\nGenericAutoBound<()>: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*/\n\nGenericAutoBound2<()>: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*/\n\nContainer1: /**\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*/\n\nGeneric2<(), String, i32>: /**\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*/\n\nGenericNewType1<()>: /**\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*/\n\nGenericTuple<()>: /**\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*/\n\nGenericStruct2<()>: /**\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*/\n\nInlineGenericNewtype<String>: \nInlineGenericNested<String>: \nInlineFlattenGenericsG<()>: /**\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*/\n\nInlineFlattenGenerics: /**\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t*/\n\nGenericDefault: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*/\n\nChainedGenericDefault: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nChainedGenericDefault<String, String>: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nChainedGenericDefault<i32>: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nChainedGenericDefault<String, i32>: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nGenericDefaultSkipped: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*/\n\nGenericDefaultSkippedNonType: /**\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*/\n\nGenericParameterOrderPreserved: /**\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*/\n\nConstGenericInNonConstContainer: /**\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*/\n\nConstGenericInConstContainer: /**\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*/\n\nNamedConstGenericContainer: /**\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*/\n\nInlineConstGenericContainer: /**\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*/\n\nInlineRecursiveConstGenericContainer: /**\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*/\n\nTestCollectionRegister: /**\n\t* @typedef {never} TestCollectionRegister\n\t*/\n\nTestCollectionRegister: /**\n\t* @typedef {never} TestCollectionRegister\n\t*/\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__export-serde_phases.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nIssue374: /**\n\t*  https://github.com/specta-rs/specta/issues/374\n\t*\n\t* @typedef {Issue374_Serialize | Issue374_Deserialize} Issue374\n\t* @property {Issue374_Serialize} Serialize\n\t* @property {Issue374_Deserialize} Deserialize\n\t*/\n\nOptional: /**\n\t* @typedef {Optional_Serialize | Optional_Deserialize} Optional\n\t* @property {Optional_Serialize} Serialize\n\t* @property {Optional_Deserialize} Deserialize\n\t*/\n\nStructPhaseSpecificRename: /**\n\t* @typedef {StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize} StructPhaseSpecificRename\n\t* @property {StructPhaseSpecificRenameSerialize} Serialize\n\t* @property {StructPhaseSpecificRenameDeserialize} Deserialize\n\t*/\n\nRange<i32>: /**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*/\n\nRangeInclusive<i32>: /**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*/\n\nString: \nPathBuf: \nIpAddr: \nIpv4Addr: \nIpv6Addr: \nSocketAddr: \nSocketAddrV4: \nSocketAddrV6: \nCow<'static, str>: \nCow<'static, i32>: \nVec<i32>: \nVec<MyEnum>: \nResult<String, i32>: /**\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*/\n\nVec<Option<Cow<'static, i32>>>: \nPhantomData<()>: \nPhantomData<String>: \nInfallible: \nUnit1: /**\n\t* @typedef {null} Unit1\n\t*/\n\nUnit2: /**\n\t* @typedef {Record<string, never>} Unit2\n\t*/\n\nUnit3: /**\n\t* @typedef {[]} Unit3\n\t*/\n\nUnit4: /**\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*/\n\nUnit5: /**\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*/\n\nUnit6: /**\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*/\n\nUnit7: /**\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*/\n\nSimpleStruct: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*/\n\nTupleStruct1: /**\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*/\n\nTupleStruct3: /**\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*/\n\nTestEnum: /**\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*/\n\nRefStruct: /**\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*/\n\nInlinerStruct: /**\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*/\n\nGenericStruct<i32>: /**\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*/\n\nGenericStruct<String>: /**\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*/\n\nFlattenEnumStruct: /**\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & FlattenEnum} FlattenEnumStruct\n\t* @property {string} outer\n\t*/\n\nOverridenStruct: /**\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*/\n\nHasGenericAlias: /**\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*/\n\nEnumMacroAttributes: /**\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*/\n\nInlineEnumField: /**\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*/\n\nInlineOptionalType: /**\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*/\n\nRename: /**\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*/\n\nTransparentType: /**\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*/\n\nTransparentType2: /**\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*/\n\nTransparentTypeWithOverride: /**\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*/\n\nHashMap<BasicEnum, ()>: \nHashMap<BasicEnum, i32>: \nVec<PlaceholderInnerField>: \nEnumReferenceRecordKey: /**\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*/\n\nFlattenOnNestedEnum: /**\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & NestedEnum} FlattenOnNestedEnum\n\t* @property {string} id\n\t*/\n\nMyEmptyInput: /**\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*/\n\n(String): \nExtraBracketsInTupleVariant: /**\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*/\n\nExtraBracketsInUnnamedStruct: /**\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*/\n\nVec<MyEnum>: \nInlineTuple: /**\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*/\n\nInlineTuple2: /**\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*/\n\nBox<str>: \nBox<String>: \nSkippedFieldWithinVariant: /**\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*/\n\nKebabCase: /**\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*/\n\nIssue281<'_>: /**\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*/\n\nLifetimeGenericStruct<'_, i32>: /**\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*/\n\nLifetimeGenericEnum<'_, i32>: /**\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*/\n\nRenameWithWeirdCharsField: /**\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*/\n\nRenameWithWeirdCharsVariant: /**\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*/\n\nRenamedFieldKeys: /**\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*/\n\nRenamedVariantWithSkippedPayload: /**\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*/\n\ntype_type::Type: /**\n\t* @typedef {never} Type\n\t*/\n\nActualType: /**\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*/\n\nSpectaTypeOverride: /**\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*/\n\nContainerTypeOverrideStruct: /**\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*/\n\nContainerTypeOverrideEnum: /**\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*/\n\nContainerTypeOverrideGeneric<Box<dyn Any>>: /**\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*/\n\nContainerTypeOverrideToGeneric<i32>: /**\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*/\n\nContainerTypeOverrideTuple: /**\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*/\n\nContainerTypeOverrideTupleGeneric<i32>: /**\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*/\n\nInvalidToValidType: /**\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*/\n\nTupleStruct: /**\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*/\n\nTupleStructWithRep: /**\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*/\n\nGenericTupleStruct<String>: /**\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*/\n\nBracedStruct: /**\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*/\n\nStruct: /**\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*/\n\nStruct2: /**\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*/\n\nEnum: /**\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*/\n\nEnum2: /**\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*/\n\nEnum3: /**\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*/\n\nStructRenameAllUppercase: /**\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*/\n\nRenameSerdeSpecialChar: /**\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*/\n\nEnumRenameAllUppercase: /**\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*/\n\nRecursive: /**\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*/\n\nRecursiveMapValue: /**\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*/\n\nRecursiveTransparent: /**\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*/\n\nRecursiveInEnum: /**\n\t* @typedef {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} RecursiveInEnum\n\t* @property {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} A\n\t*/\n\nNonOptional: /**\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*/\n\nOptionalOnNamedField: /**\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*/\n\nOptionalOnTransparentNamedField: /**\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*/\n\nOptionalInEnum: /**\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*/\n\nUntaggedVariants: /**\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*/\n\nUntaggedVariantsWithoutValue: /**\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*/\n\nUntaggedVariantsWithDuplicateBranches: /**\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*/\n\nHashMap<String, ()>: \nRegular: /**\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*/\n\nHashMap<Infallible, ()>: \nHashMap<TransparentStruct, ()>: \nHashMap<UnitVariants, ()>: \nHashMap<UntaggedVariantsKey, ()>: \nValidMaybeValidKey: /**\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*/\n\nValidMaybeValidKeyNested: /**\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*/\n\nMacroStruct: /**\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*/\n\nMacroStruct2: /**\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*/\n\nMacroEnum: /**\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*/\n\nDeprecatedType: /**\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*/\n\nDeprecatedTypeWithMsg: /**\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*/\n\nDeprecatedTypeWithMsg2: /**\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*/\n\nDeprecatedFields: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*/\n\nDeprecatedTupleVariant: /**\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*/\n\nDeprecatedEnumVariants: /**\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*/\n\nCommentedStruct: /**\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*/\n\nCommentedEnum: /**\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*/\n\nSingleLineComment: /**\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**  Some single-line comment */\n\t* ({ B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*/\n\nNonGeneric: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nHalfGenericA<u8>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nHalfGenericB<bool>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nFullGeneric<u8, bool>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nAnother<bool>: /**\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*/\n\nMapA<u32>: \nMapB<u32>: \nMapC<u32>: \nAGenericStruct<u32>: /**\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*/\n\nA: /**\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*/\n\nDoubleFlattened: /**\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*/\n\nFlattenedInner: /**\n\t* @typedef {Inner} FlattenedInner\n\t*/\n\nBoxFlattened: /**\n\t* @typedef {BoxedInner} BoxFlattened\n\t*/\n\nBoxInline: /**\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*/\n\nFirst: /**\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*/\n\nSecond: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*/\n\nThird: /**\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t} & First} Third\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*/\n\nFourth: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*/\n\nTagOnStructWithInline: /**\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*/\n\nSixth: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*/\n\nSeventh: /**\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*/\n\nEight: /**\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*/\n\nNinth: /**\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: First }} D\n\t*/\n\nTenth: /**\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*/\n\nMyEnumTagged: /**\n\t* @typedef {{ type: \"Variant\"; inner: First }} MyEnumTagged\n\t* @property {{ type: \"Variant\"; inner: First }} Variant\n\t*/\n\nMyEnumExternal: /**\n\t* @typedef {{ Variant: {\n\t* \tinner: First,\n\t* } }} MyEnumExternal\n\t* @property {{ Variant: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*/\n\nMyEnumAdjacent: /**\n\t* @typedef {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*/\n\nMyEnumUntagged: /**\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*/\n\nEmptyStruct: /**\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*/\n\nEmptyStructWithTag: /**\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*/\n\nAdjacentlyTagged: /**\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*/\n\nLoadProjectEvent: /**\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*/\n\nExternallyTagged: /**\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*/\n\nIssue221External: /**\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*/\n\nInternallyTaggedD: /**\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} InternallyTaggedD\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} A\n\t*/\n\nInternallyTaggedE: /**\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*/\n\nInternallyTaggedF: /**\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*/\n\nInternallyTaggedH: /**\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*/\n\nInternallyTaggedL: /**\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t*/\n\nInternallyTaggedM: /**\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*/\n\nStructWithAlias: /**\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*/\n\nStructWithMultipleAliases: /**\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*/\n\nStructWithAliasAndRename: /**\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*/\n\nEnumWithVariantAlias: /**\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*/\n\nEnumWithMultipleVariantAliases: /**\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*/\n\nEnumWithVariantAliasAndRename: /**\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*/\n\nInternallyTaggedWithAlias: /**\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*/\n\nAdjacentlyTaggedWithAlias: /**\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*/\n\nUntaggedWithAlias: /**\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*/\n\nIssue221UntaggedSafe: /**\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*/\n\nIssue221UntaggedMixed: /**\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*/\n\nEmptyEnum: /**\n\t* @typedef {never} EmptyEnum\n\t*/\n\nEmptyEnumTagged: /**\n\t* @typedef {never} EmptyEnumTagged\n\t*/\n\nEmptyEnumTaggedWContent: /**\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*/\n\nEmptyEnumUntagged: /**\n\t* @typedef {never} EmptyEnumUntagged\n\t*/\n\nSkipOnlyField: /**\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*/\n\nSkipField: /**\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*/\n\nSkipVariant: /**\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*/\n\nSkipUnnamedFieldInVariant: /**\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*/\n\nSkipNamedFieldInVariant: /**\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*/\n\nTransparentWithSkip: /**\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*/\n\nTransparentWithSkip2: /**\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*/\n\nTransparentWithSkip3: /**\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*/\n\nSkipVariant2: /**\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*/\n\nSkipVariant3: /**\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*/\n\nSkipStructFields: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*/\n\nSpectaSkipNonTypeField: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*/\n\nFlattenA: /**\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*/\n\nFlattenB: /**\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenB\n\t* @property {number} c\n\t*/\n\nFlattenC: /**\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenC\n\t* @property {number} c\n\t*/\n\nFlattenD: /**\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*/\n\nFlattenE: /**\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*/\n\nFlattenF: /**\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*/\n\nFlattenG: /**\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*/\n\nTupleNested: /**\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*/\n\nGeneric1<()>: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*/\n\nGenericAutoBound<()>: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*/\n\nGenericAutoBound2<()>: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*/\n\nContainer1: /**\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*/\n\nGeneric2<(), String, i32>: /**\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*/\n\nGenericNewType1<()>: /**\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*/\n\nGenericTuple<()>: /**\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*/\n\nGenericStruct2<()>: /**\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*/\n\nInlineGenericNewtype<String>: \nInlineGenericNested<String>: \nInlineFlattenGenericsG<()>: /**\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*/\n\nInlineFlattenGenerics: /**\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t*/\n\nGenericDefault: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*/\n\nChainedGenericDefault: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nChainedGenericDefault<String, String>: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nChainedGenericDefault<i32>: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nChainedGenericDefault<String, i32>: /**\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*/\n\nGenericDefaultSkipped: /**\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*/\n\nGenericDefaultSkippedNonType: /**\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*/\n\nGenericParameterOrderPreserved: /**\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*/\n\nConstGenericInNonConstContainer: /**\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*/\n\nConstGenericInConstContainer: /**\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*/\n\nNamedConstGenericContainer: /**\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*/\n\nInlineConstGenericContainer: /**\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*/\n\nInlineRecursiveConstGenericContainer: /**\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*/\n\nTestCollectionRegister: /**\n\t* @typedef {never} TestCollectionRegister\n\t*/\n\nTestCollectionRegister: /**\n\t* @typedef {never} TestCollectionRegister\n\t*/\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__inline-raw.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\ni8: number\ni16: number\ni32: number\nu8: number\nu16: number\nu32: number\nf32: number\nf64: number\nbool: boolean\nchar: string\nRange<i32>: {\n\tstart: T,\n\tend: T,\n}\nRangeInclusive<i32>: {\n\tstart: T,\n\tend: T,\n}\n(): null\n(String, i32): [string, number]\n(String, i32, bool): [string, number, boolean]\n((String, i32), (bool, char, bool), ()): [[string, number], [boolean, string, boolean], null]\n(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool): [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]\n(Vec<i32>, Vec<bool>): [number[], boolean[]]\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\n&'static str: string\n&'static bool: boolean\n&'static i32: number\nVec<i32>: number[]\n&'static [i32]: number[]\n&'static [i32; 3]: [number, number, number]\n[i32; 3]: [number, number, number]\nVec<MyEnum>: MyEnum[]\n&'static [MyEnum]: MyEnum[]\n&'static [MyEnum; 6]: [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum]\n[MyEnum; 2]: [MyEnum, MyEnum]\n&'static [i32; 1]: [number]\n&'static [i32; 0]: []\nOption<i32>: number | null\nOption<()>: null\nOption<Vec<i32>>: number[] | null\nResult<String, i32>: {\n\tok: T,\n\terr: E,\n}\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nOption<Vec<Cow<'static, i32>>>: number[] | null\n[Vec<String>; 3]: [string[], string[], string[]]\nOption<Option<String>>: string | null\nOption<Option<Option<String>>>: string | null\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: null\nUnit2: Record<string, never>\nUnit3: []\nUnit4: null\nUnit5: \"A\"\nUnit6: []\nUnit7: Record<string, never>\nSimpleStruct: {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n}\nTupleStruct1: number\nTupleStruct3: [number, boolean, string]\nTestEnum: \"Unit\" | number | [number, number] | { a: number }\nRefStruct: TestEnum\nInlinerStruct: {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n}\nGenericStruct<i32>: {\n\targ: T,\n}\nGenericStruct<String>: {\n\targ: T,\n}\nFlattenEnumStruct: {\n\touter: string,\n\tinner: FlattenEnum,\n}\nOverridenStruct: {\n\toverriden_field: string,\n}\nHasGenericAlias: { [key in number]: string }\nEnumMacroAttributes: string | number | { a: string; b: number }\nInlineEnumField: {\n\ta: string,\n}\nInlineOptionalType: {\n\toptional_field: {\n\ta: string,\n} | null,\n}\nRename: \"OneWord\" | \"TwoWords\"\nTransparentType: TransparentTypeInner\nTransparentType2: null\nTransparentTypeWithOverride: string\n[Option<u8>; 3]: [(number | null), (number | null), (number | null)]\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nOption<Option<Option<Option<i32>>>>: number | null\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n}\nFlattenOnNestedEnum: {\n\tid: string,\n\tresult: NestedEnum,\n}\nMyEmptyInput: Record<string, never>\n(String): string\n(String,): [string]\nExtraBracketsInTupleVariant: string\nExtraBracketsInUnnamedStruct: string\nVec<MyEnum>: MyEnum[]\nInlineTuple: {\n\tdemo: [string, boolean],\n}\nInlineTuple2: {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n}\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: never | string\nKebabCase: {\n\ttest_ing: string,\n}\n&[&str]: string[]\nIssue281<'_>: {\n\tdefault_unity_arguments: string[],\n}\nLifetimeGenericStruct<'_, i32>: {\n\tborrowed: T[],\n\towned: T[],\n}\nLifetimeGenericEnum<'_, i32>: T\nRenameWithWeirdCharsField: {\n\todata_context: string,\n}\nRenameWithWeirdCharsVariant: string\nRenamedFieldKeys: {\n\tempty: string,\n\tquote: string,\n\tbackslash: string,\n\tnewline: string,\n\tline_separator: string,\n\tparagraph_separator: string,\n}\nRenamedVariantWithSkippedPayload: never\ntype_type::Type: never\nActualType: {\n\ta: GenericType<string>,\n}\nSpectaTypeOverride: {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n}\nContainerTypeOverrideStruct: string\nContainerTypeOverrideEnum: string\nContainerTypeOverrideGeneric<Box<dyn Any>>: string\nContainerTypeOverrideToGeneric<i32>: T\nContainerTypeOverrideTuple: [string, number]\nContainerTypeOverrideTupleGeneric<i32>: [T, string]\nInvalidToValidType: {\n\tcause: null,\n}\nTupleStruct: string\nTupleStructWithRep: string\nGenericTupleStruct<String>: T\nBracedStruct: string\nStruct: {\n\ta: string,\n}\nStruct2: {\n\ta: string,\n}\nEnum: \"A\" | \"B\"\nEnum2: \"A\" | \"B\" | { enum_field: null }\nEnum3: { a: string }\nStructRenameAllUppercase: {\n\ta: number,\n\tb: number,\n}\nRenameSerdeSpecialChar: {\n\tb: number,\n}\nEnumRenameAllUppercase: \"HelloWorld\" | \"VariantB\" | \"TestingWords\"\nRecursive: {\n\tdemo: Recursive,\n}\nRecursiveMapValue: {\n\tdemo: { [key in string]: RecursiveMapValue },\n}\nRecursiveTransparent: RecursiveInline\nRecursiveInEnum: { demo: RecursiveInEnum }\nNonOptional: string | null\nOptionalOnNamedField: string | null\nOptionalOnTransparentNamedField: {\n\tb: string | null,\n}\nOptionalInEnum: string | null | { a: string | null } | { a?: string | null }\nUntaggedVariants: string | number | { id: string } | [string, boolean]\nUntaggedVariantsWithoutValue: string | [number, string] | number\nUntaggedVariantsWithDuplicateBranches: null | number\nHashMap<String, ()>: { [key in string]: null }\nRegular: { [key in string]: null }\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: { [key in MaybeValidKey<string>]: null }\nValidMaybeValidKeyNested: { [key in MaybeValidKey<MaybeValidKey<string>>]: null }\nMacroStruct: string\nMacroStruct2: {\n\tdemo: string,\n}\nMacroEnum: string | { demo2: string }\nDeprecatedType: {\n\ta: number,\n}\nDeprecatedTypeWithMsg: {\n\ta: number,\n}\nDeprecatedTypeWithMsg2: {\n\ta: number,\n}\nDeprecatedFields: {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n}\nDeprecatedTupleVariant: [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber]\nDeprecatedEnumVariants: \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\"\nCommentedStruct: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n}\nCommentedEnum: \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nnumber | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n{ \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\na: number }\nSingleLineComment: \n/**  Some single-line comment */\nnumber | \n/**  Some single-line comment */\n{ \n/**  Some single-line comment */\na: number }\nNonGeneric: {\n\ta: A,\n\tb: B,\n}\nHalfGenericA<u8>: {\n\ta: A,\n\tb: B,\n}\nHalfGenericB<bool>: {\n\ta: A,\n\tb: B,\n}\nFullGeneric<u8, bool>: {\n\ta: A,\n\tb: B,\n}\nAnother<bool>: {\n\ta: A,\n\tb: B,\n}\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: {\n\tfield: {\n\ta: A,\n\tb: B,\n},\n}\nA: {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n}\nDoubleFlattened: {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n}\nFlattenedInner: {\n\tc: Inner,\n}\nBoxFlattened: {\n\tb: BoxedInner,\n}\nBoxInline: {\n\tc: {\n\t\ta: number,\n\t},\n}\nFirst: {\n\ta: string,\n}\nSecond: {\n\ta: number,\n}\nThird: {\n\ta: First,\n\tb: { [key in string]: string },\n\tc: First,\n}\nFourth: {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nTagOnStructWithInline: {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nSixth: {\n\ta: First,\n\tb: First,\n}\nSeventh: {\n\ta: First,\n\tb: Second,\n}\nEight: string | \"B\"\nNinth: string | \"B\" | {\n\ta: string,\n} | First\nTenth: string | \"B\" | {\n\ta: string,\n} | First\nMyEnumTagged: { inner: First }\nMyEnumExternal: { inner: First }\nMyEnumAdjacent: { inner: First }\nMyEnumUntagged: { inner: First }\nEmptyStruct: Record<string, never>\nEmptyStructWithTag: Record<string, never>\nAdjacentlyTagged: \"A\" | { id: string; method: string } | string\nLoadProjectEvent: ({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number }\nExternallyTagged: \"A\" | { id: string; method: string } | string\nIssue221External: ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }\nInternallyTaggedD: { [key in string]: string }\nInternallyTaggedE: null\nInternallyTaggedF: InternallyTaggedFInner\nInternallyTaggedH: InternallyTaggedHInner\nInternallyTaggedL: \"A\" | \"B\"\nInternallyTaggedM: \"A\" | \"B\"\nStructWithAlias: {\n\tfield: string,\n}\nStructWithMultipleAliases: {\n\tfield: string,\n}\nStructWithAliasAndRename: {\n\tfield: string,\n}\nEnumWithVariantAlias: \"Variant\" | \"Other\"\nEnumWithMultipleVariantAliases: \"Variant\" | \"Other\"\nEnumWithVariantAliasAndRename: \"Variant\" | \"Other\"\nInternallyTaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nAdjacentlyTaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nUntaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nIssue221UntaggedSafe: ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }\nIssue221UntaggedMixed: ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }\nEmptyEnum: never\nEmptyEnumTagged: never\nEmptyEnumTaggedWContent: never\nEmptyEnumUntagged: never\nSkipOnlyField: Record<string, never>\nSkipField: {\n\tb: number,\n}\nSkipVariant: string\nSkipUnnamedFieldInVariant: never | [number]\nSkipNamedFieldInVariant: Record<string, never> | { b: number }\nTransparentWithSkip: null\nTransparentWithSkip2: string\nTransparentWithSkip3: string\nSkipVariant2: string\nSkipVariant3: { a: string }\nSkipStructFields: {\n\ta: number,\n}\nSpectaSkipNonTypeField: {\n\ta: number,\n}\nFlattenA: {\n\ta: number,\n\tb: number,\n}\nFlattenB: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenC: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenD: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenE: {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n}\nFlattenF: {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n}\nFlattenG: {\n\tb: FlattenB,\n\td: number,\n}\nTupleNested: [number[], [number[], number[]], [number[], number[], number[]]]\nGeneric1<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound2<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nContainer1: {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n}\nGeneric2<(), String, i32>: A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][]\nGenericNewType1<()>: T[][]\nGenericTuple<()>: [T, T[], T[][]]\nGenericStruct2<()>: {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n}\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }]\nInlineFlattenGenericsG<()>: {\n\tt: T,\n}\nInlineFlattenGenerics: {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n\tt: InlineFlattenGenericsG<string>,\n}\nGenericDefault: {\n\tvalue: T,\n}\nChainedGenericDefault: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, String>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nGenericDefaultSkipped: {\n\tvalue: T,\n}\nGenericDefaultSkippedNonType: {\n\tvalue: number,\n}\nGenericParameterOrderPreserved: {\n\tpair: Pair<number, string>,\n}\nConstGenericInNonConstContainer: {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n}\nConstGenericInConstContainer: {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n}\nNamedConstGenericContainer: {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n}\nInlineConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n}\nInlineRecursiveConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n}\nTestCollectionRegister: never\nTestCollectionRegister: never\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__inline-serde.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\ni8: number\ni16: number\ni32: number\nu8: number\nu16: number\nu32: number\nf32: number\nf64: number\nbool: boolean\nchar: string\nRange<i32>: {\n\tstart: T,\n\tend: T,\n}\nRangeInclusive<i32>: {\n\tstart: T,\n\tend: T,\n}\n(): null\n(String, i32): [string, number]\n(String, i32, bool): [string, number, boolean]\n((String, i32), (bool, char, bool), ()): [[string, number], [boolean, string, boolean], null]\n(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool): [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]\n(Vec<i32>, Vec<bool>): [number[], boolean[]]\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\n&'static str: string\n&'static bool: boolean\n&'static i32: number\nVec<i32>: number[]\n&'static [i32]: number[]\n&'static [i32; 3]: [number, number, number]\n[i32; 3]: [number, number, number]\nVec<MyEnum>: MyEnum[]\n&'static [MyEnum]: MyEnum[]\n&'static [MyEnum; 6]: [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum]\n[MyEnum; 2]: [MyEnum, MyEnum]\n&'static [i32; 1]: [number]\n&'static [i32; 0]: []\nOption<i32>: number | null\nOption<()>: null\nOption<Vec<i32>>: number[] | null\nResult<String, i32>: {\n\tok: T,\n\terr: E,\n}\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nOption<Vec<Cow<'static, i32>>>: number[] | null\n[Vec<String>; 3]: [string[], string[], string[]]\nOption<Option<String>>: string | null\nOption<Option<Option<String>>>: string | null\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: null\nUnit2: Record<string, never>\nUnit3: []\nUnit4: null\nUnit5: \"A\"\nUnit6: { A: null }\nUnit7: { A: Record<string, never> }\nSimpleStruct: {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n}\nTupleStruct1: number\nTupleStruct3: [number, boolean, string]\nTestEnum: \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never }\nRefStruct: TestEnum\nInlinerStruct: {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n}\nGenericStruct<i32>: {\n\targ: T,\n}\nGenericStruct<String>: {\n\targ: T,\n}\nFlattenEnumStruct: ({\n\touter: string,\n}) & (FlattenEnum)\nOverridenStruct: {\n\toverriden_field: string,\n}\nHasGenericAlias: { [key in number]: string }\nEnumMacroAttributes: ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never }\nInlineEnumField: { A: {\n\ta: string,\n} }\nInlineOptionalType: {\n\toptional_field: {\n\ta: string,\n} | null,\n}\nRename: \"OneWord\" | \"Two words\"\nTransparentType: TransparentTypeInner\nTransparentType2: null\nTransparentTypeWithOverride: string\n[Option<u8>; 3]: [(number | null), (number | null), (number | null)]\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nOption<Option<Option<Option<i32>>>>: number | null\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n}\nFlattenOnNestedEnum: ({\n\tid: string,\n}) & (NestedEnum)\nMyEmptyInput: Record<string, never>\n(String): string\n(String,): [string]\nExtraBracketsInTupleVariant: { A: string }\nExtraBracketsInUnnamedStruct: string\nVec<MyEnum>: MyEnum[]\nInlineTuple: {\n\tdemo: [string, boolean],\n}\nInlineTuple2: {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n}\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: { type: \"A\" } | { type: \"B\"; data: string }\nKebabCase: {\n\t\"test-ing\": string,\n}\n&[&str]: string[]\nIssue281<'_>: {\n\tdefault_unity_arguments: string[],\n}\nLifetimeGenericStruct<'_, i32>: {\n\tborrowed: T[],\n\towned: T[],\n}\nLifetimeGenericEnum<'_, i32>: ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }\nRenameWithWeirdCharsField: {\n\t\"@odata.context\": string,\n}\nRenameWithWeirdCharsVariant: { \"@odata.context\": string }\nRenamedFieldKeys: {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n}\nRenamedVariantWithSkippedPayload: \"a-b\"\ntype_type::Type: never\nActualType: {\n\ta: GenericType<string>,\n}\nSpectaTypeOverride: {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n}\nContainerTypeOverrideStruct: string\nContainerTypeOverrideEnum: string\nContainerTypeOverrideGeneric<Box<dyn Any>>: string\nContainerTypeOverrideToGeneric<i32>: T\nContainerTypeOverrideTuple: [string, number]\nContainerTypeOverrideTupleGeneric<i32>: [T, string]\nInvalidToValidType: {\n\tcause: null,\n}\nTupleStruct: string\nTupleStructWithRep: string\nGenericTupleStruct<String>: T\nBracedStruct: string\nStruct: {\n\tt: \"StructNew\",\n\ta: string,\n}\nStruct2: {\n\tb: string,\n}\nEnum: { t: \"A\" } | { t: \"B\" }\nEnum2: { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }\nEnum3: { t: \"A\"; b: string }\nStructRenameAllUppercase: {\n\tA: number,\n\tB: number,\n}\nRenameSerdeSpecialChar: {\n\t\"a/b\": number,\n}\nEnumRenameAllUppercase: \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"\nRecursive: {\n\tdemo: Recursive,\n}\nRecursiveMapValue: {\n\tdemo: { [key in string]: RecursiveMapValue },\n}\nRecursiveTransparent: RecursiveInline\nRecursiveInEnum: { A: {\n\tdemo: RecursiveInEnum,\n} }\nNonOptional: string | null\nOptionalOnNamedField: string | null\nOptionalOnTransparentNamedField: {\n\tb: string | null,\n}\nOptionalInEnum: ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never }\nUntaggedVariants: string | number | { id: string } | [string, boolean]\nUntaggedVariantsWithoutValue: string | [number, string] | number\nUntaggedVariantsWithDuplicateBranches: null | number\nHashMap<String, ()>: { [key in string]: null }\nRegular: { [key in string]: null }\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: { [key in MaybeValidKey<string>]: null }\nValidMaybeValidKeyNested: { [key in MaybeValidKey<MaybeValidKey<string>>]: null }\nMacroStruct: string\nMacroStruct2: {\n\tdemo: string,\n}\nMacroEnum: ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never }\nDeprecatedType: {\n\ta: number,\n}\nDeprecatedTypeWithMsg: {\n\ta: number,\n}\nDeprecatedTypeWithMsg2: {\n\ta: number,\n}\nDeprecatedFields: {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n}\nDeprecatedTupleVariant: [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber]\nDeprecatedEnumVariants: \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\"\nCommentedStruct: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n}\nCommentedEnum: \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never }\nSingleLineComment: \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never }\nNonGeneric: {\n\ta: A,\n\tb: B,\n}\nHalfGenericA<u8>: {\n\ta: A,\n\tb: B,\n}\nHalfGenericB<bool>: {\n\ta: A,\n\tb: B,\n}\nFullGeneric<u8, bool>: {\n\ta: A,\n\tb: B,\n}\nAnother<bool>: {\n\ta: A,\n\tb: B,\n}\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: {\n\tfield: {\n\ta: A,\n\tb: B,\n},\n}\nA: {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n}\nDoubleFlattened: {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n}\nFlattenedInner: (Inner)\nBoxFlattened: (BoxedInner)\nBoxInline: {\n\tc: {\n\t\ta: number,\n\t},\n}\nFirst: {\n\ta: string,\n}\nSecond: {\n\ta: number,\n}\nThird: ({\n\tb: { [key in string]: string },\n\tc: First,\n}) & (First)\nFourth: {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nTagOnStructWithInline: {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nSixth: {\n\ta: First,\n\tb: First,\n}\nSeventh: {\n\ta: First,\n\tb: Second,\n}\nEight: { A: string } | \"B\"\nNinth: { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First }\nTenth: string | \"B\" | {\n\ta: string,\n} | First\nMyEnumTagged: { type: \"Variant\"; inner: First }\nMyEnumExternal: { Variant: {\n\tinner: First,\n} }\nMyEnumAdjacent: { t: \"Variant\"; c: {\n\tinner: First,\n} }\nMyEnumUntagged: { inner: First }\nEmptyStruct: Record<string, never>\nEmptyStructWithTag: {\n\ta: \"EmptyStructWithTag\",\n}\nAdjacentlyTagged: { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string }\nLoadProjectEvent: { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} }\nExternallyTagged: \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never }\nIssue221External: ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never }\nInternallyTaggedD: {\n\ttype: \"A\",\n} & { [key in string]: string }\nInternallyTaggedE: { type: \"A\" }\nInternallyTaggedF: { type: \"A\" }\nInternallyTaggedH: { type: \"A\" }\nInternallyTaggedL: {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" }\nInternallyTaggedM: { type: \"A\" }\nStructWithAlias: {\n\tfield: string,\n}\nStructWithMultipleAliases: {\n\tfield: string,\n}\nStructWithAliasAndRename: {\n\trenamed_field: string,\n}\nEnumWithVariantAlias: \"Variant\" | \"Other\"\nEnumWithMultipleVariantAliases: \"Variant\" | \"Other\"\nEnumWithVariantAliasAndRename: \"renamed_variant\" | \"Other\"\nInternallyTaggedWithAlias: { type: \"A\"; field: string } | { type: \"B\"; other: number }\nAdjacentlyTaggedWithAlias: { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} }\nUntaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nIssue221UntaggedSafe: ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }\nIssue221UntaggedMixed: ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }\nEmptyEnum: never\nEmptyEnumTagged: never\nEmptyEnumTaggedWContent: never\nEmptyEnumUntagged: never\nSkipOnlyField: Record<string, never>\nSkipField: {\n\tb: number,\n}\nSkipVariant: { A: string }\nSkipUnnamedFieldInVariant: \"A\" | { B: [number] }\nSkipNamedFieldInVariant: ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never }\nTransparentWithSkip: null\nTransparentWithSkip2: string\nTransparentWithSkip3: string\nSkipVariant2: { tag: \"A\"; data: string }\nSkipVariant3: { A: {\n\ta: string,\n} }\nSkipStructFields: {\n\ta: number,\n}\nSpectaSkipNonTypeField: {\n\ta: number,\n}\nFlattenA: {\n\ta: number,\n\tb: number,\n}\nFlattenB: ({\n\tc: number,\n}) & (FlattenA)\nFlattenC: ({\n\tc: number,\n}) & (FlattenA)\nFlattenD: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenE: {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n}\nFlattenF: {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n}\nFlattenG: {\n\tb: FlattenB,\n\td: number,\n}\nTupleNested: [number[], [number[], number[]], [number[], number[], number[]]]\nGeneric1<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound2<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nContainer1: {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n}\nGeneric2<(), String, i32>: ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }\nGenericNewType1<()>: T[][]\nGenericTuple<()>: [T, T[], T[][]]\nGenericStruct2<()>: {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n}\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }]\nInlineFlattenGenericsG<()>: {\n\tt: T,\n}\nInlineFlattenGenerics: ({\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n}) & (InlineFlattenGenericsG<string>)\nGenericDefault: {\n\tvalue: T,\n}\nChainedGenericDefault: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, String>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nGenericDefaultSkipped: {\n\tvalue: T,\n}\nGenericDefaultSkippedNonType: {\n\tvalue: number,\n}\nGenericParameterOrderPreserved: {\n\tpair: Pair<number, string>,\n}\nConstGenericInNonConstContainer: {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n}\nConstGenericInConstContainer: {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n}\nNamedConstGenericContainer: {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n}\nInlineConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n}\nInlineRecursiveConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n}\nTestCollectionRegister: never\nTestCollectionRegister: never\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__inline-serde_phases.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nIssue374: {\n\tfoo?: boolean,\n\tbar?: boolean,\n}\nOptional: {\n\ta: number | null,\n\tb?: number | null,\n\tc?: string | null,\n\td: boolean,\n}\nStructPhaseSpecificRename: {\n\tkind: \"StructPhaseSpecificRenameSerialize\",\n\tser: string,\n}\ni8: number\ni16: number\ni32: number\nu8: number\nu16: number\nu32: number\nf32: number\nf64: number\nbool: boolean\nchar: string\nRange<i32>: {\n\tstart: T,\n\tend: T,\n}\nRangeInclusive<i32>: {\n\tstart: T,\n\tend: T,\n}\n(): null\n(String, i32): [string, number]\n(String, i32, bool): [string, number, boolean]\n((String, i32), (bool, char, bool), ()): [[string, number], [boolean, string, boolean], null]\n(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool): [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]\n(Vec<i32>, Vec<bool>): [number[], boolean[]]\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\n&'static str: string\n&'static bool: boolean\n&'static i32: number\nVec<i32>: number[]\n&'static [i32]: number[]\n&'static [i32; 3]: [number, number, number]\n[i32; 3]: [number, number, number]\nVec<MyEnum>: MyEnum[]\n&'static [MyEnum]: MyEnum[]\n&'static [MyEnum; 6]: [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum]\n[MyEnum; 2]: [MyEnum, MyEnum]\n&'static [i32; 1]: [number]\n&'static [i32; 0]: []\nOption<i32>: number | null\nOption<()>: null\nOption<Vec<i32>>: number[] | null\nResult<String, i32>: {\n\tok: T,\n\terr: E,\n}\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nOption<Vec<Cow<'static, i32>>>: number[] | null\n[Vec<String>; 3]: [string[], string[], string[]]\nOption<Option<String>>: string | null\nOption<Option<Option<String>>>: string | null\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: null\nUnit2: Record<string, never>\nUnit3: []\nUnit4: null\nUnit5: \"A\"\nUnit6: { A: null }\nUnit7: { A: Record<string, never> }\nSimpleStruct: {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n}\nTupleStruct1: number\nTupleStruct3: [number, boolean, string]\nTestEnum: \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never }\nRefStruct: TestEnum\nInlinerStruct: {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n}\nGenericStruct<i32>: {\n\targ: T,\n}\nGenericStruct<String>: {\n\targ: T,\n}\nFlattenEnumStruct: ({\n\touter: string,\n}) & (FlattenEnum)\nOverridenStruct: {\n\toverriden_field: string,\n}\nHasGenericAlias: { [key in number]: string }\nEnumMacroAttributes: ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never }\nInlineEnumField: { A: {\n\ta: string,\n} }\nInlineOptionalType: {\n\toptional_field: {\n\ta: string,\n} | null,\n}\nRename: \"OneWord\" | \"Two words\"\nTransparentType: TransparentTypeInner\nTransparentType2: null\nTransparentTypeWithOverride: string\n[Option<u8>; 3]: [(number | null), (number | null), (number | null)]\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nOption<Option<Option<Option<i32>>>>: number | null\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n}\nFlattenOnNestedEnum: ({\n\tid: string,\n}) & (NestedEnum)\nMyEmptyInput: Record<string, never>\n(String): string\n(String,): [string]\nExtraBracketsInTupleVariant: { A: string }\nExtraBracketsInUnnamedStruct: string\nVec<MyEnum>: MyEnum[]\nInlineTuple: {\n\tdemo: [string, boolean],\n}\nInlineTuple2: {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n}\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: { type: \"A\" } | { type: \"B\"; data: string }\nKebabCase: {\n\t\"test-ing\": string,\n}\n&[&str]: string[]\nIssue281<'_>: {\n\tdefault_unity_arguments: string[],\n}\nLifetimeGenericStruct<'_, i32>: {\n\tborrowed: T[],\n\towned: T[],\n}\nLifetimeGenericEnum<'_, i32>: ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }\nRenameWithWeirdCharsField: {\n\t\"@odata.context\": string,\n}\nRenameWithWeirdCharsVariant: { \"@odata.context\": string }\nRenamedFieldKeys: {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n}\nRenamedVariantWithSkippedPayload: \"a-b\"\ntype_type::Type: never\nActualType: {\n\ta: GenericType<string>,\n}\nSpectaTypeOverride: {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n}\nContainerTypeOverrideStruct: string\nContainerTypeOverrideEnum: string\nContainerTypeOverrideGeneric<Box<dyn Any>>: string\nContainerTypeOverrideToGeneric<i32>: T\nContainerTypeOverrideTuple: [string, number]\nContainerTypeOverrideTupleGeneric<i32>: [T, string]\nInvalidToValidType: {\n\tcause: null,\n}\nTupleStruct: string\nTupleStructWithRep: string\nGenericTupleStruct<String>: T\nBracedStruct: string\nStruct: {\n\tt: \"StructNew\",\n\ta: string,\n}\nStruct2: {\n\tb: string,\n}\nEnum: { t: \"A\" } | { t: \"B\" }\nEnum2: { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }\nEnum3: { t: \"A\"; b: string }\nStructRenameAllUppercase: {\n\tA: number,\n\tB: number,\n}\nRenameSerdeSpecialChar: {\n\t\"a/b\": number,\n}\nEnumRenameAllUppercase: \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"\nRecursive: {\n\tdemo: Recursive,\n}\nRecursiveMapValue: {\n\tdemo: { [key in string]: RecursiveMapValue },\n}\nRecursiveTransparent: RecursiveInline\nRecursiveInEnum: { A: {\n\tdemo: RecursiveInEnum,\n} }\nNonOptional: string | null\nOptionalOnNamedField: string | null\nOptionalOnTransparentNamedField: {\n\tb: string | null,\n}\nOptionalInEnum: ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never }\nUntaggedVariants: string | number | { id: string } | [string, boolean]\nUntaggedVariantsWithoutValue: string | [number, string] | number\nUntaggedVariantsWithDuplicateBranches: null | number\nHashMap<String, ()>: { [key in string]: null }\nRegular: { [key in string]: null }\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: { [key in MaybeValidKey<string>]: null }\nValidMaybeValidKeyNested: { [key in MaybeValidKey<MaybeValidKey<string>>]: null }\nMacroStruct: string\nMacroStruct2: {\n\tdemo: string,\n}\nMacroEnum: ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never }\nDeprecatedType: {\n\ta: number,\n}\nDeprecatedTypeWithMsg: {\n\ta: number,\n}\nDeprecatedTypeWithMsg2: {\n\ta: number,\n}\nDeprecatedFields: {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n}\nDeprecatedTupleVariant: [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber]\nDeprecatedEnumVariants: \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\"\nCommentedStruct: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n}\nCommentedEnum: \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never }\nSingleLineComment: \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never }\nNonGeneric: {\n\ta: A,\n\tb: B,\n}\nHalfGenericA<u8>: {\n\ta: A,\n\tb: B,\n}\nHalfGenericB<bool>: {\n\ta: A,\n\tb: B,\n}\nFullGeneric<u8, bool>: {\n\ta: A,\n\tb: B,\n}\nAnother<bool>: {\n\ta: A,\n\tb: B,\n}\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: {\n\tfield: {\n\ta: A,\n\tb: B,\n},\n}\nA: {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n}\nDoubleFlattened: {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n}\nFlattenedInner: (Inner)\nBoxFlattened: (BoxedInner)\nBoxInline: {\n\tc: {\n\t\ta: number,\n\t},\n}\nFirst: {\n\ta: string,\n}\nSecond: {\n\ta: number,\n}\nThird: ({\n\tb: { [key in string]: string },\n\tc: First,\n}) & (First)\nFourth: {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nTagOnStructWithInline: {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nSixth: {\n\ta: First,\n\tb: First,\n}\nSeventh: {\n\ta: First,\n\tb: Second,\n}\nEight: { A: string } | \"B\"\nNinth: { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First }\nTenth: string | \"B\" | {\n\ta: string,\n} | First\nMyEnumTagged: { type: \"Variant\"; inner: First }\nMyEnumExternal: { Variant: {\n\tinner: First,\n} }\nMyEnumAdjacent: { t: \"Variant\"; c: {\n\tinner: First,\n} }\nMyEnumUntagged: { inner: First }\nEmptyStruct: Record<string, never>\nEmptyStructWithTag: {\n\ta: \"EmptyStructWithTag\",\n}\nAdjacentlyTagged: { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string }\nLoadProjectEvent: { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} }\nExternallyTagged: \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never }\nIssue221External: ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never }\nInternallyTaggedD: {\n\ttype: \"A\",\n} & { [key in string]: string }\nInternallyTaggedE: { type: \"A\" }\nInternallyTaggedF: { type: \"A\" }\nInternallyTaggedH: { type: \"A\" }\nInternallyTaggedL: {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" }\nInternallyTaggedM: { type: \"A\" }\nStructWithAlias: {\n\tfield: string,\n}\nStructWithMultipleAliases: {\n\tfield: string,\n}\nStructWithAliasAndRename: {\n\trenamed_field: string,\n}\nEnumWithVariantAlias: \"Variant\" | \"Other\"\nEnumWithMultipleVariantAliases: \"Variant\" | \"Other\"\nEnumWithVariantAliasAndRename: \"renamed_variant\" | \"Other\"\nInternallyTaggedWithAlias: { type: \"A\"; field: string } | { type: \"B\"; other: number }\nAdjacentlyTaggedWithAlias: { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} }\nUntaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nIssue221UntaggedSafe: ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }\nIssue221UntaggedMixed: ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }\nEmptyEnum: never\nEmptyEnumTagged: never\nEmptyEnumTaggedWContent: never\nEmptyEnumUntagged: never\nSkipOnlyField: Record<string, never>\nSkipField: {\n\tb: number,\n}\nSkipVariant: { A: string }\nSkipUnnamedFieldInVariant: \"A\" | { B: [number] }\nSkipNamedFieldInVariant: ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never }\nTransparentWithSkip: null\nTransparentWithSkip2: string\nTransparentWithSkip3: string\nSkipVariant2: { tag: \"A\"; data: string }\nSkipVariant3: { A: {\n\ta: string,\n} }\nSkipStructFields: {\n\ta: number,\n}\nSpectaSkipNonTypeField: {\n\ta: number,\n}\nFlattenA: {\n\ta: number,\n\tb: number,\n}\nFlattenB: ({\n\tc: number,\n}) & (FlattenA)\nFlattenC: ({\n\tc: number,\n}) & (FlattenA)\nFlattenD: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenE: {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n}\nFlattenF: {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n}\nFlattenG: {\n\tb: FlattenB,\n\td: number,\n}\nTupleNested: [number[], [number[], number[]], [number[], number[], number[]]]\nGeneric1<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound2<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nContainer1: {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n}\nGeneric2<(), String, i32>: ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }\nGenericNewType1<()>: T[][]\nGenericTuple<()>: [T, T[], T[][]]\nGenericStruct2<()>: {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n}\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }]\nInlineFlattenGenericsG<()>: {\n\tt: T,\n}\nInlineFlattenGenerics: ({\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n}) & (InlineFlattenGenericsG<string>)\nGenericDefault: {\n\tvalue: T,\n}\nChainedGenericDefault: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, String>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nGenericDefaultSkipped: {\n\tvalue: T,\n}\nGenericDefaultSkippedNonType: {\n\tvalue: number,\n}\nGenericParameterOrderPreserved: {\n\tpair: Pair<number, string>,\n}\nConstGenericInNonConstContainer: {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n}\nConstGenericInConstContainer: {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n}\nNamedConstGenericContainer: {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n}\nInlineConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n}\nInlineRecursiveConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n}\nTestCollectionRegister: never\nTestCollectionRegister: never\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-files-both.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\ntest/\n  jsdoc/\n    jsdoc_export_to_files_runtime_imports_types/\n      one.js (621 bytes)\n      ────────────────────────────────────────\n      // This file has been generated by Specta. Do not edit this file manually.\n      \n      /**\n       * @typedef {import(\"./three\")} test$jsdoc$jsdoc_export_to_files_runtime_imports_types$three\n       * @typedef {import(\"./two\")} test$jsdoc$jsdoc_export_to_files_runtime_imports_types$two\n       */\n      /**\n      \t* @typedef {{\n      \t*\t\ttwo: test$jsdoc$jsdoc_export_to_files_runtime_imports_types$two.Two,\n      \t*\t\tthree: test$jsdoc$jsdoc_export_to_files_runtime_imports_types$three.Three,\n      \t*\t}} One\n      \t* @property {test$jsdoc$jsdoc_export_to_files_runtime_imports_types$two.Two} two\n      \t* @property {test$jsdoc$jsdoc_export_to_files_runtime_imports_types$three.Three} three\n      \t*/\n      ════════════════════════════════════════\n\n      three.js (161 bytes)\n      ────────────────────────────────────────\n      // This file has been generated by Specta. Do not edit this file manually.\n      /**\n      \t* @typedef {{\n      \t*\t\tactive: boolean,\n      \t*\t}} Three\n      \t* @property {boolean} active\n      \t*/\n      ════════════════════════════════════════\n\n      two.js (155 bytes)\n      ────────────────────────────────────────\n      // This file has been generated by Specta. Do not edit this file manually.\n      /**\n      \t* @typedef {{\n      \t*\t\tvalue: string,\n      \t*\t}} Two\n      \t* @property {string} value\n      \t*/\n      ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-files-raw.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nstd/\n  ops.js (295 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  /**\n  \t* @typedef {{\n  \t*\t\tstart: T,\n  \t*\t\tend: T,\n  \t*\t}} Range<T>\n  \t* @property {T} start\n  \t* @property {T} end\n  \t*\n  \t* @typedef {{\n  \t*\t\tstart: T,\n  \t*\t\tend: T,\n  \t*\t}} RangeInclusive<T>\n  \t* @property {T} start\n  \t* @property {T} end\n  \t*/\n  ════════════════════════════════════════\n\n  result.js (181 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  /**\n  \t* @typedef {{\n  \t*\t\tok: T,\n  \t*\t\terr: E,\n  \t*\t}} Result<T, E>\n  \t* @property {T} ok\n  \t* @property {E} err\n  \t*/\n  ════════════════════════════════════════\n\ntest/\n  types/\n    type_type.js (108 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    /**\n    \t* @typedef {never} Type\n    \t*/\n    ════════════════════════════════════════\n\n  types.js (26962 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  /**\n  \t* @typedef {{\n  \t*\t\ta: B,\n  \t*\t\tb: {\n  \t*\t\t\tb: number,\n  \t*\t\t},\n  \t*\t\tc: B,\n  \t*\t\td: {\n  \t*\t\t\tflattened: number,\n  \t*\t\t},\n  \t*\t\te: {\n  \t*\t\t\tgeneric_flattened: number,\n  \t*\t\t},\n  \t*\t}} A\n  \t* @property {B} a\n  \t* @property {{\n  \t*\t\tb: number,\n  \t*\t}} b\n  \t* @property {B} c\n  \t* @property {{\n  \t*\t\tflattened: number,\n  \t*\t}} d\n  \t* @property {{\n  \t*\t\tgeneric_flattened: number,\n  \t*\t}} e\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: Demo<T, boolean>,\n  \t*\t}} AGenericStruct<T>\n  \t* @property {Demo<T, boolean>} field\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: GenericType<string>,\n  \t*\t}} ActualType\n  \t* @property {GenericType<string>} a\n  \t*\n  \t* @typedef {\"A\" | { id: string; method: string } | string} AdjacentlyTagged\n  \t* @property {\"A\"} A\n  \t* @property {{ id: string; method: string }} B\n  \t* @property {string} C\n  \t*\n  \t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} AdjacentlyTaggedWithAlias\n  \t* @property {{ field: string }} A\n  \t* @property {{ other: number }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: number,\n  \t*\t}} B\n  \t* @property {number} b\n  \t*\n  \t* @typedef {\"A\" | \"B\"} BasicEnum\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: BoxedInner,\n  \t*\t}} BoxFlattened\n  \t* @property {BoxedInner} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tc: {\n  \t*\t\t\ta: number,\n  \t*\t\t},\n  \t*\t}} BoxInline\n  \t* @property {{\n  \t*\t\ta: number,\n  \t*\t}} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} BoxedInner\n  \t* @property {number} a\n  \t*\n  \t* @typedef {string} BracedStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tfirst: T,\n  \t*\t\tsecond: U,\n  \t*\t}} ChainedGenericDefault<T = string, U = T>\n  \t* @property {T} first\n  \t* @property {U} second\n  \t*\n  \t*  Some triple-slash comment\n  \t*  Some more triple-slash comment\n  \t*\n  \t* @typedef {\n  \t*\t/**\n  \t*\t *  Some triple-slash comment\n  \t*\t *  Some more triple-slash comment\n  \t*\t */\n  \t* number | \n  \t*\t/**\n  \t*\t *  Some triple-slash comment\n  \t*\t *  Some more triple-slash comment\n  \t*\t */\n  \t* { \n  \t*\t/**\n  \t*\t *  Some triple-slash comment\n  \t*\t *  Some more triple-slash comment\n  \t*\t */\n  \t* a: number }} CommentedEnum\n  \t* @property {\n  \t* /**\n  \t*  *  Some triple-slash comment\n  \t*  *  Some more triple-slash comment\n  \t*  */\n  \t* number} A - Some triple-slash comment Some more triple-slash comment\n  \t* @property {\n  \t* /**\n  \t*  *  Some triple-slash comment\n  \t*  *  Some more triple-slash comment\n  \t*  */\n  \t* { \n  \t* /**\n  \t*  *  Some triple-slash comment\n  \t*  *  Some more triple-slash comment\n  \t*  */\n  \t* a: number }} B - Some triple-slash comment Some more triple-slash comment\n  \t*\n  \t*  Some triple-slash comment\n  \t*  Some more triple-slash comment\n  \t*\n  \t* @typedef {{\n  \t*\t\t/**\n  \t*\t\t *  Some triple-slash comment\n  \t*\t\t *  Some more triple-slash comment\n  \t*\t\t */\n  \t*\t\ta: number,\n  \t*\t}} CommentedStruct\n  \t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: number[],\n  \t*\t\ta: number[],\n  \t*\t\td: [number, number],\n  \t*\t}} ConstGenericInConstContainer\n  \t* @property {number[]} data\n  \t* @property {number[]} a\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: [number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number],\n  \t*\t}} ConstGenericInNonConstContainer\n  \t* @property {[number]} data\n  \t* @property {[number, number]} a\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tfoo: Generic1<number>,\n  \t*\t\tbar: Generic1<number>[],\n  \t*\t\tbaz: { [key in string]: Generic1<string> },\n  \t*\t}} Container1\n  \t* @property {Generic1<number>} foo\n  \t* @property {Generic1<number>[]} bar\n  \t* @property {{ [key in string]: Generic1<string> }} baz\n  \t*\n  \t* @typedef {string} ContainerTypeOverrideEnum\n  \t*\n  \t* @typedef {string} ContainerTypeOverrideGeneric\n  \t*\n  \t* @typedef {string} ContainerTypeOverrideStruct\n  \t*\n  \t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n  \t*\n  \t* @typedef {[string, number]} ContainerTypeOverrideTuple\n  \t*\n  \t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n  \t*\n  \t* @typedef {{\n  \t*\t\tflattened: number,\n  \t*\t}} D\n  \t* @property {number} flattened\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: A,\n  \t*\t\tb: B,\n  \t*\t}} Demo<A, B>\n  \t* @property {A} a\n  \t* @property {B} b\n  \t*\n  \t* @typedef {\n  \t*\t/**\n  \t*\t * @deprecated\n  \t*\t */\n  \t* \"A\" | \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* \"B\" | \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* \"C\"} DeprecatedEnumVariants\n  \t* @property {\n  \t* /**\n  \t*  * @deprecated\n  \t*  */\n  \t* \"A\"} A - @deprecated\n  \t* @property {\n  \t* /**\n  \t*  * @deprecated Nope\n  \t*  */\n  \t* \"B\"} B - @deprecated Nope\n  \t* @property {\n  \t* /**\n  \t*  * @deprecated Nope\n  \t*  */\n  \t* \"C\"} C - @deprecated Nope\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\t/**\n  \t*\t\t * @deprecated\n  \t*\t\t */\n  \t*\t\tb: string,\n  \t*\t\t/**\n  \t*\t\t * @deprecated This field is cringe!\n  \t*\t\t */\n  \t*\t\tc: string,\n  \t*\t\t/**\n  \t*\t\t * @deprecated This field is cringe!\n  \t*\t\t */\n  \t*\t\td: string,\n  \t*\t}} DeprecatedFields\n  \t* @property {number} a\n  \t* @property {string} b - @deprecated\n  \t* @property {string} c - @deprecated This field is cringe!\n  \t* @property {string} d - @deprecated This field is cringe!\n  \t*\n  \t* @typedef {[\n  \t*\t/**\n  \t*\t * @deprecated\n  \t*\t */\n  \t* string, \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* string, \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* number]} DeprecatedTupleVariant\n  \t* @property {string} \"0\" - @deprecated\n  \t* @property {string} \"1\" - @deprecated Nope\n  \t* @property {number} \"2\" - @deprecated Nope\n  \t*\n  \t* @deprecated\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} DeprecatedType\n  \t* @property {number} a\n  \t*\n  \t* @deprecated Look at you big man using a deprecation message\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} DeprecatedTypeWithMsg\n  \t* @property {number} a\n  \t*\n  \t* @deprecated Look at you big man using a deprecation message\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} DeprecatedTypeWithMsg2\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: ToBeFlattened,\n  \t*\t\tb: ToBeFlattened,\n  \t*\t}} DoubleFlattened\n  \t* @property {ToBeFlattened} a\n  \t* @property {ToBeFlattened} b\n  \t*\n  \t* @typedef {string | \"B\"} Eight\n  \t* @property {string} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {never} EmptyEnum\n  \t*\n  \t* @typedef {never} EmptyEnumTagged\n  \t*\n  \t* @typedef {never} EmptyEnumTaggedWContent\n  \t*\n  \t* @typedef {never} EmptyEnumUntagged\n  \t*\n  \t* @typedef {Record<string, never>} EmptyStruct\n  \t*\n  \t* @typedef {Record<string, never>} EmptyStructWithTag\n  \t*\n  \t* @typedef {\"A\" | \"B\"} Enum\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {\"A\" | \"B\" | { enum_field: null }} Enum2\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t* @property {{ enum_field: null }} D\n  \t*\n  \t* @typedef {{ a: string }} Enum3\n  \t* @property {{ a: string }} A\n  \t*\n  \t* @typedef {string | number | { a: string; b: number }} EnumMacroAttributes\n  \t* @property {string} A\n  \t* @property {number} B\n  \t* @property {number} C\n  \t* @property {{ a: string; b: number }} D\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n  \t*\t}} EnumReferenceRecordKey\n  \t* @property {Partial<{ [key in BasicEnum]: number }>} a\n  \t*\n  \t* @typedef {\"HelloWorld\" | \"VariantB\" | \"TestingWords\"} EnumRenameAllUppercase\n  \t* @property {\"HelloWorld\"} HelloWorld\n  \t* @property {\"VariantB\"} VariantB\n  \t* @property {\"TestingWords\"} TestingWords\n  \t*\n  \t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n  \t* @property {\"Variant\"} Variant\n  \t* @property {\"Other\"} Other\n  \t*\n  \t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n  \t* @property {\"Variant\"} Variant\n  \t* @property {\"Other\"} Other\n  \t*\n  \t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAliasAndRename\n  \t* @property {\"Variant\"} Variant\n  \t* @property {\"Other\"} Other\n  \t*\n  \t* @typedef {\"A\" | { id: string; method: string } | string} ExternallyTagged\n  \t* @property {\"A\"} A\n  \t* @property {{ id: string; method: string }} B\n  \t* @property {string} C\n  \t*\n  \t* @typedef {string} ExtraBracketsInTupleVariant\n  \t* @property {string} A\n  \t*\n  \t* @typedef {string} ExtraBracketsInUnnamedStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} First\n  \t* @property {string} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\tb: number,\n  \t*\t}} FlattenA\n  \t* @property {number} a\n  \t* @property {number} b\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: FlattenA,\n  \t*\t\tc: number,\n  \t*\t}} FlattenB\n  \t* @property {FlattenA} a\n  \t* @property {number} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: FlattenA,\n  \t*\t\tc: number,\n  \t*\t}} FlattenC\n  \t* @property {FlattenA} a\n  \t* @property {number} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: FlattenA,\n  \t*\t\tc: number,\n  \t*\t}} FlattenD\n  \t* @property {FlattenA} a\n  \t* @property {number} c\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: {\n  \t*\t\t\ta: FlattenA,\n  \t*\t\t\tc: number,\n  \t*\t\t},\n  \t*\t\td: number,\n  \t*\t}} FlattenE\n  \t* @property {{\n  \t*\t\ta: FlattenA,\n  \t*\t\tc: number,\n  \t*\t}} b\n  \t* @property {number} d\n  \t*\n  \t* @typedef {\"One\" | \"Two\" | \"Three\"} FlattenEnum\n  \t* @property {\"One\"} One\n  \t* @property {\"Two\"} Two\n  \t* @property {\"Three\"} Three\n  \t*\n  \t* @typedef {{\n  \t*\t\touter: string,\n  \t*\t\tinner: FlattenEnum,\n  \t*\t}} FlattenEnumStruct\n  \t* @property {string} outer\n  \t* @property {FlattenEnum} inner\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: {\n  \t*\t\t\ta: FlattenA,\n  \t*\t\t\tc: number,\n  \t*\t\t},\n  \t*\t\td: number,\n  \t*\t}} FlattenF\n  \t* @property {{\n  \t*\t\ta: FlattenA,\n  \t*\t\tc: number,\n  \t*\t}} b\n  \t* @property {number} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: FlattenB,\n  \t*\t\td: number,\n  \t*\t}} FlattenG\n  \t* @property {FlattenB} b\n  \t* @property {number} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tid: string,\n  \t*\t\tresult: NestedEnum,\n  \t*\t}} FlattenOnNestedEnum\n  \t* @property {string} id\n  \t* @property {NestedEnum} result\n  \t*\n  \t* @typedef {{\n  \t*\t\tc: Inner,\n  \t*\t}} FlattenedInner\n  \t* @property {Inner} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: {\n  \t*\t\t\ta: string,\n  \t*\t\t},\n  \t*\t}} Fourth\n  \t* @property {First} a\n  \t* @property {{\n  \t*\t\ta: string,\n  \t*\t}} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t\tvalues: T[],\n  \t*\t}} Generic1<T>\n  \t* @property {T} value\n  \t* @property {T[]} values\n  \t*\n  \t* @typedef {A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][]} Generic2<A, B, C>\n  \t* @property {A} A\n  \t* @property {[B, B, B]} B\n  \t* @property {C[]} C\n  \t* @property {A[][][]} D\n  \t* @property {{ a: A; b: B; c: C }} E\n  \t* @property {number[]} X\n  \t* @property {number} Y\n  \t* @property {number[][]} Z\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t\tvalues: T[],\n  \t*\t}} GenericAutoBound<T>\n  \t* @property {T} value\n  \t* @property {T[]} values\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t\tvalues: T[],\n  \t*\t}} GenericAutoBound2<T>\n  \t* @property {T} value\n  \t* @property {T[]} values\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t}} GenericDefault<T = string>\n  \t* @property {T} value\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t}} GenericDefaultSkipped<T>\n  \t* @property {T} value\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: number,\n  \t*\t}} GenericDefaultSkippedNonType<T>\n  \t* @property {number} value\n  \t*\n  \t* @typedef {{\n  \t*\t\tgeneric_flattened: T,\n  \t*\t}} GenericFlattened<T>\n  \t* @property {T} generic_flattened\n  \t*\n  \t* @typedef {T[][]} GenericNewType1<T>\n  \t* @property {T[][]} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tpair: Pair<number, string>,\n  \t*\t}} GenericParameterOrderPreserved\n  \t* @property {Pair<number, string>} pair\n  \t*\n  \t* @typedef {{\n  \t*\t\targ: T,\n  \t*\t}} GenericStruct<T>\n  \t* @property {T} arg\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: T,\n  \t*\t\tb: [T, T],\n  \t*\t\tc: [T, [T, T]],\n  \t*\t\td: [T, T, T],\n  \t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n  \t*\t\tf: T[],\n  \t*\t\tg: T[][],\n  \t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n  \t*\t}} GenericStruct2<T>\n  \t* @property {T} a\n  \t* @property {[T, T]} b\n  \t* @property {[T, [T, T]]} c\n  \t* @property {[T, T, T]} d\n  \t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n  \t* @property {T[]} f\n  \t* @property {T[][]} g\n  \t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n  \t*\n  \t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n  \t* @property {T} \"0\"\n  \t* @property {T[]} \"1\"\n  \t* @property {T[][]} \"2\"\n  \t*\n  \t* @typedef {T} GenericTupleStruct<T>\n  \t* @property {T} \"0\"\n  \t*\n  \t* @typedef {\"Undefined\" | T} GenericType<T>\n  \t* @property {\"Undefined\"} Undefined\n  \t* @property {T} Value\n  \t*\n  \t* @typedef {{ [key in number]: string }} HasGenericAlias\n  \t* @property {{ [key in number]: string }} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: {\n  \t*\t\t\tdata: [number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t},\n  \t*\t\tc: {\n  \t*\t\t\tdata: [number, number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t},\n  \t*\t\td: [number, number],\n  \t*\t}} InlineConstGenericContainer\n  \t* @property {{\n  \t*\t\tdata: [number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t}} b\n  \t* @property {{\n  \t*\t\tdata: [number, number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t}} c\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t* \ta: string,\n  \t* }} InlineEnumField\n  \t* @property {{\n  \t* \ta: string,\n  \t* }} A\n  \t*\n  \t* @typedef {{\n  \t*\t\tg: InlineFlattenGenericsG<string>,\n  \t*\t\tgi: {\n  \t*\t\t\tt: string,\n  \t*\t\t},\n  \t*\t\tt: InlineFlattenGenericsG<string>,\n  \t*\t}} InlineFlattenGenerics\n  \t* @property {InlineFlattenGenericsG<string>} g\n  \t* @property {{\n  \t*\t\tt: string,\n  \t*\t}} gi\n  \t* @property {InlineFlattenGenericsG<string>} t\n  \t*\n  \t* @typedef {{\n  \t*\t\tt: T,\n  \t*\t}} InlineFlattenGenericsG<T>\n  \t* @property {T} t\n  \t*\n  \t* @typedef {{\n  \t*\t\toptional_field: {\n  \t* \ta: string,\n  \t* } | null,\n  \t*\t}} InlineOptionalType\n  \t* @property {{\n  \t* \ta: string,\n  \t* } | null} optional_field\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: number[],\n  \t*\t\ta: number[],\n  \t*\t\td: [number, number, number],\n  \t*\t\te: InlineRecursiveConstGeneric,\n  \t*\t}} InlineRecursiveConstGeneric\n  \t* @property {number[]} data\n  \t* @property {number[]} a\n  \t* @property {[number, number, number]} d\n  \t* @property {InlineRecursiveConstGeneric} e\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: {\n  \t*\t\t\tdata: [number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t\te: InlineRecursiveConstGeneric,\n  \t*\t\t},\n  \t*\t\tc: {\n  \t*\t\t\tdata: [number, number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t\te: InlineRecursiveConstGeneric,\n  \t*\t\t},\n  \t*\t\td: [number, number],\n  \t*\t}} InlineRecursiveConstGenericContainer\n  \t* @property {{\n  \t*\t\tdata: [number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t\te: InlineRecursiveConstGeneric,\n  \t*\t}} b\n  \t* @property {{\n  \t*\t\tdata: [number, number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t\te: InlineRecursiveConstGeneric,\n  \t*\t}} c\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tref_struct: SimpleStruct,\n  \t*\t\tval: number,\n  \t*\t}} InlineStruct\n  \t* @property {SimpleStruct} ref_struct\n  \t* @property {number} val\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: [string, boolean],\n  \t*\t}} InlineTuple\n  \t* @property {[string, boolean]} demo\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: [{\n  \t* \tdemo: [string, boolean],\n  \t* }, boolean],\n  \t*\t}} InlineTuple2\n  \t* @property {[{\n  \t* \tdemo: [string, boolean],\n  \t* }, boolean]} demo\n  \t*\n  \t* @typedef {{\n  \t*\t\tinline_this: {\n  \t*\t\t\tref_struct: SimpleStruct,\n  \t*\t\t\tval: number,\n  \t*\t\t},\n  \t*\t\tdont_inline_this: RefStruct,\n  \t*\t}} InlinerStruct\n  \t* @property {{\n  \t*\t\tref_struct: SimpleStruct,\n  \t*\t\tval: number,\n  \t*\t}} inline_this\n  \t* @property {RefStruct} dont_inline_this\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\tb: FlattenedInner,\n  \t*\t}} Inner\n  \t* @property {number} a\n  \t* @property {FlattenedInner} b\n  \t*\n  \t* @typedef {{ [key in string]: string }} InternallyTaggedD\n  \t* @property {{ [key in string]: string }} A\n  \t*\n  \t* @typedef {null} InternallyTaggedE\n  \t* @property {null} A\n  \t*\n  \t* @typedef {InternallyTaggedFInner} InternallyTaggedF\n  \t* @property {InternallyTaggedFInner} A\n  \t*\n  \t* @typedef {null} InternallyTaggedFInner\n  \t* @property {null} A\n  \t*\n  \t* @typedef {InternallyTaggedHInner} InternallyTaggedH\n  \t* @property {InternallyTaggedHInner} A\n  \t*\n  \t* @typedef {null} InternallyTaggedHInner\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {\"A\" | \"B\"} InternallyTaggedL\n  \t* @property {\"A\" | \"B\"} A\n  \t*\n  \t* @typedef {\"A\" | \"B\"} InternallyTaggedLInner\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {\"A\" | \"B\"} InternallyTaggedM\n  \t* @property {\"A\" | \"B\"} A\n  \t*\n  \t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} InternallyTaggedWithAlias\n  \t* @property {{ field: string }} A\n  \t* @property {{ other: number }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tcause: null,\n  \t*\t}} InvalidToValidType\n  \t* @property {null} cause\n  \t*\n  \t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221External\n  \t* @property {{ a: string }} A\n  \t* @property {{ b: string }} B\n  \t*\n  \t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n  \t* @property {{ a: string }} A\n  \t* @property {{ b: string }} B\n  \t* @property {{ values: { [key in string]: string } }} Unsafe\n  \t*\n  \t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n  \t* @property {{ a: string }} A\n  \t* @property {{ b: string }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tdefault_unity_arguments: string[],\n  \t*\t}} Issue281\n  \t* @property {string[]} default_unity_arguments\n  \t*\n  \t* @typedef {{\n  \t*\t\ttest_ing: string,\n  \t*\t}} KebabCase\n  \t* @property {string} test_ing\n  \t*\n  \t* @typedef {T} LifetimeGenericEnum<T>\n  \t* @property {T} Borrowed\n  \t* @property {T} Owned\n  \t*\n  \t* @typedef {{\n  \t*\t\tborrowed: T[],\n  \t*\t\towned: T[],\n  \t*\t}} LifetimeGenericStruct<T>\n  \t* @property {T[]} borrowed\n  \t* @property {T[]} owned\n  \t*\n  \t* @typedef {({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number }} LoadProjectEvent\n  \t* @property {{ project_name: string }} Started\n  \t* @property {{ project_name: string; status: string; progress: number }} ProgressTest\n  \t* @property {{ project_name: string }} Finished\n  \t*\n  \t* @typedef {string | { demo2: string }} MacroEnum\n  \t* @property {string} Demo\n  \t* @property {{ demo2: string }} Demo2\n  \t*\n  \t* @typedef {string} MacroStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: string,\n  \t*\t}} MacroStruct2\n  \t* @property {string} demo\n  \t*\n  \t* @typedef {T} MaybeValidKey<T>\n  \t* @property {T} \"0\"\n  \t*\n  \t* @typedef {Record<string, never>} MyEmptyInput\n  \t*\n  \t* @typedef {string | number} MyEnum\n  \t* @property {string} A\n  \t* @property {number} B\n  \t*\n  \t* @typedef {{ inner: First }} MyEnumAdjacent\n  \t* @property {{ inner: First }} Variant\n  \t*\n  \t* @typedef {{ inner: First }} MyEnumExternal\n  \t* @property {{ inner: First }} Variant\n  \t*\n  \t* @typedef {{ inner: First }} MyEnumTagged\n  \t* @property {{ inner: First }} Variant\n  \t*\n  \t* @typedef {{ inner: First }} MyEnumUntagged\n  \t* @property {{ inner: First }} Variant\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: number[],\n  \t*\t\ta: number[],\n  \t*\t\td: [number, number],\n  \t*\t}} NamedConstGeneric\n  \t* @property {number[]} data\n  \t* @property {number[]} a\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: NamedConstGeneric,\n  \t*\t\tb: NamedConstGeneric,\n  \t*\t\td: [number, number],\n  \t*\t}} NamedConstGenericContainer\n  \t* @property {NamedConstGeneric} a\n  \t* @property {NamedConstGeneric} b\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {string | number} NestedEnum\n  \t* @property {string} A\n  \t* @property {number} B\n  \t*\n  \t* @typedef {string | \"B\" | {\n  \t* \ta: string,\n  \t* } | First} Ninth\n  \t* @property {string} A\n  \t* @property {\"B\"} B\n  \t* @property {{\n  \t* \ta: string,\n  \t* }} C\n  \t* @property {First} D\n  \t*\n  \t* @typedef {string | null} NonOptional\n  \t* @property {string | null} \"0\"\n  \t*\n  \t* @typedef {string | null | { a: string | null } | { a?: string | null }} OptionalInEnum\n  \t* @property {string | null} A\n  \t* @property {{ a: string | null }} B\n  \t* @property {{ a?: string | null }} C\n  \t*\n  \t* @typedef {string | null} OptionalOnNamedField\n  \t* @property {string | null} [\"0\"]\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: string | null,\n  \t*\t}} OptionalOnTransparentNamedField\n  \t* @property {string | null} b\n  \t*\n  \t* @typedef {{\n  \t*\t\toverriden_field: string,\n  \t*\t}} OverridenStruct\n  \t* @property {string} overriden_field\n  \t*\n  \t* @typedef {{\n  \t*\t\tfirst: Z,\n  \t*\t\tsecond: A,\n  \t*\t}} Pair<Z, A>\n  \t* @property {Z} first\n  \t* @property {A} second\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} PlaceholderInnerField\n  \t* @property {string} a\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: Recursive,\n  \t*\t}} Recursive\n  \t* @property {Recursive} demo\n  \t*\n  \t* @typedef {{ demo: RecursiveInEnum }} RecursiveInEnum\n  \t* @property {{ demo: RecursiveInEnum }} A\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: RecursiveInline,\n  \t*\t}} RecursiveInline\n  \t* @property {RecursiveInline} demo\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: { [key in string]: RecursiveMapValue },\n  \t*\t}} RecursiveMapValue\n  \t* @property {{ [key in string]: RecursiveMapValue }} demo\n  \t*\n  \t* @typedef {RecursiveInline} RecursiveTransparent\n  \t* @property {RecursiveInline} \"0\"\n  \t*\n  \t* @typedef {TestEnum} RefStruct\n  \t* @property {TestEnum} \"0\"\n  \t*\n  \t* @typedef {{ [key in string]: null }} Regular\n  \t* @property {{ [key in string]: null }} \"0\"\n  \t*\n  \t* @typedef {\"OneWord\" | \"TwoWords\"} Rename\n  \t* @property {\"OneWord\"} OneWord\n  \t* @property {\"TwoWords\"} TwoWords\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: number,\n  \t*\t}} RenameSerdeSpecialChar\n  \t* @property {number} b\n  \t*\n  \t* @typedef {{\n  \t*\t\todata_context: string,\n  \t*\t}} RenameWithWeirdCharsField\n  \t* @property {string} odata_context\n  \t*\n  \t* @typedef {string} RenameWithWeirdCharsVariant\n  \t* @property {string} A\n  \t*\n  \t* @typedef {{\n  \t*\t\tempty: string,\n  \t*\t\tquote: string,\n  \t*\t\tbackslash: string,\n  \t*\t\tnewline: string,\n  \t*\t\tline_separator: string,\n  \t*\t\tparagraph_separator: string,\n  \t*\t}} RenamedFieldKeys\n  \t* @property {string} empty\n  \t* @property {string} quote\n  \t* @property {string} backslash\n  \t* @property {string} newline\n  \t* @property {string} line_separator\n  \t* @property {string} paragraph_separator\n  \t*\n  \t* @typedef {never} RenamedVariantWithSkippedPayload\n  \t* @property {never} A\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} Second\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: Second,\n  \t*\t}} Seventh\n  \t* @property {First} a\n  \t* @property {Second} b\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\tb: string,\n  \t*\t\tc: [number, string, number],\n  \t*\t\td: string[],\n  \t*\t\te: string | null,\n  \t*\t}} SimpleStruct\n  \t* @property {number} a\n  \t* @property {string} b\n  \t* @property {[number, string, number]} c\n  \t* @property {string[]} d\n  \t* @property {string | null} e\n  \t*\n  \t*  Some single-line comment\n  \t*\n  \t* @typedef {\n  \t*\t/**  Some single-line comment */\n  \t* number | \n  \t*\t/**  Some single-line comment */\n  \t* { \n  \t*\t/**  Some single-line comment */\n  \t* a: number }} SingleLineComment\n  \t* @property {\n  \t* /**  Some single-line comment */\n  \t* number} A - Some single-line comment\n  \t* @property {\n  \t* /**  Some single-line comment */\n  \t* { \n  \t* /**  Some single-line comment */\n  \t* a: number }} B - Some single-line comment\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: First,\n  \t*\t}} Sixth\n  \t* @property {First} a\n  \t* @property {First} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: number,\n  \t*\t}} SkipField\n  \t* @property {number} b\n  \t*\n  \t* @typedef {Record<string, never> | { b: number }} SkipNamedFieldInVariant\n  \t* @property {Record<string, never>} A\n  \t* @property {{ b: number }} B\n  \t*\n  \t* @typedef {Record<string, never>} SkipOnlyField\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} SkipStructFields\n  \t* @property {number} a\n  \t*\n  \t* @typedef {never | [number]} SkipUnnamedFieldInVariant\n  \t* @property {never} A\n  \t* @property {[number]} B\n  \t*\n  \t* @typedef {string} SkipVariant\n  \t* @property {string} A\n  \t*\n  \t* @typedef {string} SkipVariant2\n  \t* @property {string} A\n  \t*\n  \t* @typedef {{ a: string }} SkipVariant3\n  \t* @property {{ a: string }} A\n  \t*\n  \t* @typedef {never | string} SkippedFieldWithinVariant\n  \t* @property {never} A\n  \t* @property {string} B\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} SpectaSkipNonTypeField\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t*\t\tstring_ident: string,\n  \t*\t\tu32_ident: number,\n  \t*\t\tpath: string,\n  \t*\t\ttuple: [string, number],\n  \t*\t}} SpectaTypeOverride\n  \t* @property {string} string_ident\n  \t* @property {number} u32_ident\n  \t* @property {string} path\n  \t* @property {[string, number]} tuple\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} Struct\n  \t* @property {string} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} Struct2\n  \t* @property {string} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\tb: number,\n  \t*\t}} StructRenameAllUppercase\n  \t* @property {number} a\n  \t* @property {number} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: string,\n  \t*\t}} StructWithAlias\n  \t* @property {string} field\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: string,\n  \t*\t}} StructWithAliasAndRename\n  \t* @property {string} field\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: string,\n  \t*\t}} StructWithMultipleAliases\n  \t* @property {string} field\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: {\n  \t*\t\t\ta: string,\n  \t*\t\t},\n  \t*\t}} TagOnStructWithInline\n  \t* @property {First} a\n  \t* @property {{\n  \t*\t\ta: string,\n  \t*\t}} b\n  \t*\n  \t* @typedef {string | \"B\" | {\n  \t* \ta: string,\n  \t* } | First} Tenth\n  \t* @property {string} A\n  \t* @property {\"B\"} B\n  \t* @property {{\n  \t* \ta: string,\n  \t* }} C\n  \t* @property {First} D\n  \t*\n  \t* @typedef {never} TestCollectionRegister\n  \t*\n  \t* @typedef {\"Unit\" | number | [number, number] | { a: number }} TestEnum\n  \t* @property {\"Unit\"} Unit\n  \t* @property {number} Single\n  \t* @property {[number, number]} Multiple\n  \t* @property {{ a: number }} Struct\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: { [key in string]: string },\n  \t*\t\tc: First,\n  \t*\t}} Third\n  \t* @property {First} a\n  \t* @property {{ [key in string]: string }} b\n  \t* @property {First} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} ToBeFlattened\n  \t* @property {string} a\n  \t*\n  \t* @typedef {string} TransparentStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {TransparentTypeInner} TransparentType\n  \t* @property {TransparentTypeInner} \"0\"\n  \t*\n  \t* @typedef {null} TransparentType2\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tinner: string,\n  \t*\t}} TransparentTypeInner\n  \t* @property {string} inner\n  \t*\n  \t* @typedef {string} TransparentTypeWithOverride\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {null} TransparentWithSkip\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {string} TransparentWithSkip2\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {string} TransparentWithSkip3\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n  \t* @property {number[]} \"0\"\n  \t* @property {[number[], number[]]} \"1\"\n  \t* @property {[number[], number[], number[]]} \"2\"\n  \t*\n  \t* @typedef {string} TupleStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {number} TupleStruct1\n  \t* @property {number} \"0\"\n  \t*\n  \t* @typedef {[number, boolean, string]} TupleStruct3\n  \t* @property {number} \"0\"\n  \t* @property {boolean} \"1\"\n  \t* @property {string} \"2\"\n  \t*\n  \t* @typedef {string} TupleStructWithRep\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {null} Unit1\n  \t*\n  \t* @typedef {Record<string, never>} Unit2\n  \t*\n  \t* @typedef {[]} Unit3\n  \t*\n  \t* @typedef {null} Unit4\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {\"A\"} Unit5\n  \t* @property {\"A\"} A\n  \t*\n  \t* @typedef {[]} Unit6\n  \t* @property {[]} A\n  \t*\n  \t* @typedef {Record<string, never>} Unit7\n  \t* @property {Record<string, never>} A\n  \t*\n  \t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t* @property {\"C\"} C\n  \t*\n  \t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n  \t* @property {string} A\n  \t* @property {number} B\n  \t* @property {number} C\n  \t* @property {{ id: string }} D\n  \t* @property {[string, boolean]} E\n  \t*\n  \t* @typedef {string | number} UntaggedVariantsKey\n  \t* @property {string} A\n  \t* @property {number} B\n  \t* @property {number} C\n  \t*\n  \t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n  \t* @property {null} A\n  \t* @property {number} B\n  \t* @property {null} C\n  \t*\n  \t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n  \t* @property {string} A\n  \t* @property {[number, string]} B\n  \t* @property {number} C\n  \t*\n  \t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n  \t* @property {{ field: string }} A\n  \t* @property {{ other: number }} B\n  \t*\n  \t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n  \t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n  \t*\n  \t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n  \t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n  \t*/\n  ════════════════════════════════════════\n\ntests/\n  tests/\n    types.js (29296 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    \n    /**\n     * @typedef {import(\"../../std/ops\")} std$ops\n     * @typedef {import(\"../../std/result\")} std$result\n     * @typedef {import(\"../../test/types\")} test$types\n     * @typedef {import(\"../../test/types/type_type\")} test$types$type_type\n     */\n    /**\n    \t* @typedef {{\n    \t*\t\ti8: number,\n    \t*\t\ti16: number,\n    \t*\t\ti32: number,\n    \t*\t\tu8: number,\n    \t*\t\tu16: number,\n    \t*\t\tu32: number,\n    \t*\t\tf32: number,\n    \t*\t\tf64: number,\n    \t*\t\tbool: boolean,\n    \t*\t\tchar: string,\n    \t*\t\t\"Range<i32>\": std$ops.Range<number>,\n    \t*\t\t\"RangeInclusive<i32>\": std$ops.RangeInclusive<number>,\n    \t*\t\t\"()\": null,\n    \t*\t\t\"(String, i32)\": [string, number],\n    \t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n    \t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n    \t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n    \t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n    \t*\t\tString: string,\n    \t*\t\tPathBuf: string,\n    \t*\t\tIpAddr: string,\n    \t*\t\tIpv4Addr: string,\n    \t*\t\tIpv6Addr: string,\n    \t*\t\tSocketAddr: string,\n    \t*\t\tSocketAddrV4: string,\n    \t*\t\tSocketAddrV6: string,\n    \t*\t\t\"Cow<'static, str>\": string,\n    \t*\t\t\"Cow<'static, i32>\": number,\n    \t*\t\t\"&'static str\": string,\n    \t*\t\t\"&'static bool\": boolean,\n    \t*\t\t\"&'static i32\": number,\n    \t*\t\t\"Vec<i32>\": number[],\n    \t*\t\t\"&'static [i32]\": number[],\n    \t*\t\t\"&'static [i32; 3]\": [number, number, number],\n    \t*\t\t\"[i32; 3]\": [number, number, number],\n    \t*\t\t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \t*\t\t\"&'static [MyEnum]\": test$types.MyEnum[],\n    \t*\t\t\"&'static [MyEnum; 6]\": [test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum],\n    \t*\t\t\"[MyEnum; 2]\": [test$types.MyEnum, test$types.MyEnum],\n    \t*\t\t\"&'static [i32; 1]\": [number],\n    \t*\t\t\"&'static [i32; 0]\": [],\n    \t*\t\t\"Option<i32>\": number | null,\n    \t*\t\t\"Option<()>\": null,\n    \t*\t\t\"Option<Vec<i32>>\": number[] | null,\n    \t*\t\t\"Result<String, i32>\": std$result.Result<string, number>,\n    \t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n    \t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n    \t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n    \t*\t\t\"Option<Option<String>>\": string | null,\n    \t*\t\t\"Option<Option<Option<String>>>\": string | null,\n    \t*\t\t\"PhantomData<()>\": null,\n    \t*\t\t\"PhantomData<String>\": null,\n    \t*\t\tInfallible: never,\n    \t*\t\tUnit1: test$types.Unit1,\n    \t*\t\tUnit2: test$types.Unit2,\n    \t*\t\tUnit3: test$types.Unit3,\n    \t*\t\tUnit4: test$types.Unit4,\n    \t*\t\tUnit5: test$types.Unit5,\n    \t*\t\tUnit6: test$types.Unit6,\n    \t*\t\tUnit7: test$types.Unit7,\n    \t*\t\tSimpleStruct: test$types.SimpleStruct,\n    \t*\t\tTupleStruct1: test$types.TupleStruct1,\n    \t*\t\tTupleStruct3: test$types.TupleStruct3,\n    \t*\t\tTestEnum: test$types.TestEnum,\n    \t*\t\tRefStruct: test$types.RefStruct,\n    \t*\t\tInlinerStruct: test$types.InlinerStruct,\n    \t*\t\t\"GenericStruct<i32>\": test$types.GenericStruct<number>,\n    \t*\t\t\"GenericStruct<String>\": test$types.GenericStruct<string>,\n    \t*\t\tFlattenEnumStruct: test$types.FlattenEnumStruct,\n    \t*\t\tOverridenStruct: test$types.OverridenStruct,\n    \t*\t\tHasGenericAlias: test$types.HasGenericAlias,\n    \t*\t\tEnumMacroAttributes: test$types.EnumMacroAttributes,\n    \t*\t\tInlineEnumField: test$types.InlineEnumField,\n    \t*\t\tInlineOptionalType: test$types.InlineOptionalType,\n    \t*\t\tRename: test$types.Rename,\n    \t*\t\tTransparentType: test$types.TransparentType,\n    \t*\t\tTransparentType2: test$types.TransparentType2,\n    \t*\t\tTransparentTypeWithOverride: test$types.TransparentTypeWithOverride,\n    \t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n    \t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test$types.BasicEnum]: null }>,\n    \t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test$types.BasicEnum]: number }>,\n    \t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n    \t*\t\t\"Vec<PlaceholderInnerField>\": test$types.PlaceholderInnerField[],\n    \t*\t\tEnumReferenceRecordKey: test$types.EnumReferenceRecordKey,\n    \t*\t\tFlattenOnNestedEnum: test$types.FlattenOnNestedEnum,\n    \t*\t\tMyEmptyInput: test$types.MyEmptyInput,\n    \t*\t\t\"(String)\": string,\n    \t*\t\t\"(String,)\": [string],\n    \t*\t\tExtraBracketsInTupleVariant: test$types.ExtraBracketsInTupleVariant,\n    \t*\t\tExtraBracketsInUnnamedStruct: test$types.ExtraBracketsInUnnamedStruct,\n    \t*\t\t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \t*\t\tInlineTuple: test$types.InlineTuple,\n    \t*\t\tInlineTuple2: test$types.InlineTuple2,\n    \t*\t\t\"Box<str>\": string,\n    \t*\t\t\"Box<String>\": string,\n    \t*\t\tSkippedFieldWithinVariant: test$types.SkippedFieldWithinVariant,\n    \t*\t\tKebabCase: test$types.KebabCase,\n    \t*\t\t\"&[&str]\": string[],\n    \t*\t\t\"Issue281<'_>\": test$types.Issue281,\n    \t*\t\t\"LifetimeGenericStruct<'_, i32>\": test$types.LifetimeGenericStruct<number>,\n    \t*\t\t\"LifetimeGenericEnum<'_, i32>\": test$types.LifetimeGenericEnum<number>,\n    \t*\t\tRenameWithWeirdCharsField: test$types.RenameWithWeirdCharsField,\n    \t*\t\tRenameWithWeirdCharsVariant: test$types.RenameWithWeirdCharsVariant,\n    \t*\t\tRenamedFieldKeys: test$types.RenamedFieldKeys,\n    \t*\t\tRenamedVariantWithSkippedPayload: test$types.RenamedVariantWithSkippedPayload,\n    \t*\t\t\"type_type::Type\": test$types$type_type.Type,\n    \t*\t\tActualType: test$types.ActualType,\n    \t*\t\tSpectaTypeOverride: test$types.SpectaTypeOverride,\n    \t*\t\tContainerTypeOverrideStruct: test$types.ContainerTypeOverrideStruct,\n    \t*\t\tContainerTypeOverrideEnum: test$types.ContainerTypeOverrideEnum,\n    \t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test$types.ContainerTypeOverrideGeneric,\n    \t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": test$types.ContainerTypeOverrideToGeneric<number>,\n    \t*\t\tContainerTypeOverrideTuple: test$types.ContainerTypeOverrideTuple,\n    \t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": test$types.ContainerTypeOverrideTupleGeneric<number>,\n    \t*\t\tInvalidToValidType: test$types.InvalidToValidType,\n    \t*\t\tTupleStruct: test$types.TupleStruct,\n    \t*\t\tTupleStructWithRep: test$types.TupleStructWithRep,\n    \t*\t\t\"GenericTupleStruct<String>\": test$types.GenericTupleStruct<string>,\n    \t*\t\tBracedStruct: test$types.BracedStruct,\n    \t*\t\tStruct: test$types.Struct,\n    \t*\t\tStruct2: test$types.Struct2,\n    \t*\t\tEnum: test$types.Enum,\n    \t*\t\tEnum2: test$types.Enum2,\n    \t*\t\tEnum3: test$types.Enum3,\n    \t*\t\tStructRenameAllUppercase: test$types.StructRenameAllUppercase,\n    \t*\t\tRenameSerdeSpecialChar: test$types.RenameSerdeSpecialChar,\n    \t*\t\tEnumRenameAllUppercase: test$types.EnumRenameAllUppercase,\n    \t*\t\tRecursive: test$types.Recursive,\n    \t*\t\tRecursiveMapValue: test$types.RecursiveMapValue,\n    \t*\t\tRecursiveTransparent: test$types.RecursiveTransparent,\n    \t*\t\tRecursiveInEnum: test$types.RecursiveInEnum,\n    \t*\t\tNonOptional: test$types.NonOptional,\n    \t*\t\tOptionalOnNamedField: test$types.OptionalOnNamedField,\n    \t*\t\tOptionalOnTransparentNamedField: test$types.OptionalOnTransparentNamedField,\n    \t*\t\tOptionalInEnum: test$types.OptionalInEnum,\n    \t*\t\tUntaggedVariants: test$types.UntaggedVariants,\n    \t*\t\tUntaggedVariantsWithoutValue: test$types.UntaggedVariantsWithoutValue,\n    \t*\t\tUntaggedVariantsWithDuplicateBranches: test$types.UntaggedVariantsWithDuplicateBranches,\n    \t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n    \t*\t\tRegular: test$types.Regular,\n    \t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n    \t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in test$types.TransparentStruct]: null },\n    \t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test$types.UnitVariants]: null }>,\n    \t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test$types.UntaggedVariantsKey]: null }>,\n    \t*\t\tValidMaybeValidKey: test$types.ValidMaybeValidKey,\n    \t*\t\tValidMaybeValidKeyNested: test$types.ValidMaybeValidKeyNested,\n    \t*\t\tMacroStruct: test$types.MacroStruct,\n    \t*\t\tMacroStruct2: test$types.MacroStruct2,\n    \t*\t\tMacroEnum: test$types.MacroEnum,\n    \t*\t\tDeprecatedType: test$types.DeprecatedType,\n    \t*\t\tDeprecatedTypeWithMsg: test$types.DeprecatedTypeWithMsg,\n    \t*\t\tDeprecatedTypeWithMsg2: test$types.DeprecatedTypeWithMsg2,\n    \t*\t\tDeprecatedFields: test$types.DeprecatedFields,\n    \t*\t\tDeprecatedTupleVariant: test$types.DeprecatedTupleVariant,\n    \t*\t\tDeprecatedEnumVariants: test$types.DeprecatedEnumVariants,\n    \t*\t\tCommentedStruct: test$types.CommentedStruct,\n    \t*\t\tCommentedEnum: test$types.CommentedEnum,\n    \t*\t\tSingleLineComment: test$types.SingleLineComment,\n    \t*\t\tNonGeneric: test$types.Demo<number, boolean>,\n    \t*\t\t\"HalfGenericA<u8>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"HalfGenericB<bool>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"FullGeneric<u8, bool>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"Another<bool>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"MapA<u32>\": { [key in string]: number },\n    \t*\t\t\"MapB<u32>\": { [key in number]: string },\n    \t*\t\t\"MapC<u32>\": { [key in string]: test$types.AGenericStruct<number> },\n    \t*\t\t\"AGenericStruct<u32>\": test$types.AGenericStruct<number>,\n    \t*\t\tA: test$types.A,\n    \t*\t\tDoubleFlattened: test$types.DoubleFlattened,\n    \t*\t\tFlattenedInner: test$types.FlattenedInner,\n    \t*\t\tBoxFlattened: test$types.BoxFlattened,\n    \t*\t\tBoxInline: test$types.BoxInline,\n    \t*\t\tFirst: test$types.First,\n    \t*\t\tSecond: test$types.Second,\n    \t*\t\tThird: test$types.Third,\n    \t*\t\tFourth: test$types.Fourth,\n    \t*\t\tTagOnStructWithInline: test$types.TagOnStructWithInline,\n    \t*\t\tSixth: test$types.Sixth,\n    \t*\t\tSeventh: test$types.Seventh,\n    \t*\t\tEight: test$types.Eight,\n    \t*\t\tNinth: test$types.Ninth,\n    \t*\t\tTenth: test$types.Tenth,\n    \t*\t\tMyEnumTagged: test$types.MyEnumTagged,\n    \t*\t\tMyEnumExternal: test$types.MyEnumExternal,\n    \t*\t\tMyEnumAdjacent: test$types.MyEnumAdjacent,\n    \t*\t\tMyEnumUntagged: test$types.MyEnumUntagged,\n    \t*\t\tEmptyStruct: test$types.EmptyStruct,\n    \t*\t\tEmptyStructWithTag: test$types.EmptyStructWithTag,\n    \t*\t\tAdjacentlyTagged: test$types.AdjacentlyTagged,\n    \t*\t\tLoadProjectEvent: test$types.LoadProjectEvent,\n    \t*\t\tExternallyTagged: test$types.ExternallyTagged,\n    \t*\t\tIssue221External: test$types.Issue221External,\n    \t*\t\tInternallyTaggedD: test$types.InternallyTaggedD,\n    \t*\t\tInternallyTaggedE: test$types.InternallyTaggedE,\n    \t*\t\tInternallyTaggedF: test$types.InternallyTaggedF,\n    \t*\t\tInternallyTaggedH: test$types.InternallyTaggedH,\n    \t*\t\tInternallyTaggedL: test$types.InternallyTaggedL,\n    \t*\t\tInternallyTaggedM: test$types.InternallyTaggedM,\n    \t*\t\tStructWithAlias: test$types.StructWithAlias,\n    \t*\t\tStructWithMultipleAliases: test$types.StructWithMultipleAliases,\n    \t*\t\tStructWithAliasAndRename: test$types.StructWithAliasAndRename,\n    \t*\t\tEnumWithVariantAlias: test$types.EnumWithVariantAlias,\n    \t*\t\tEnumWithMultipleVariantAliases: test$types.EnumWithMultipleVariantAliases,\n    \t*\t\tEnumWithVariantAliasAndRename: test$types.EnumWithVariantAliasAndRename,\n    \t*\t\tInternallyTaggedWithAlias: test$types.InternallyTaggedWithAlias,\n    \t*\t\tAdjacentlyTaggedWithAlias: test$types.AdjacentlyTaggedWithAlias,\n    \t*\t\tUntaggedWithAlias: test$types.UntaggedWithAlias,\n    \t*\t\tIssue221UntaggedSafe: test$types.Issue221UntaggedSafe,\n    \t*\t\tIssue221UntaggedMixed: test$types.Issue221UntaggedMixed,\n    \t*\t\tEmptyEnum: test$types.EmptyEnum,\n    \t*\t\tEmptyEnumTagged: test$types.EmptyEnumTagged,\n    \t*\t\tEmptyEnumTaggedWContent: test$types.EmptyEnumTaggedWContent,\n    \t*\t\tEmptyEnumUntagged: test$types.EmptyEnumUntagged,\n    \t*\t\tSkipOnlyField: test$types.SkipOnlyField,\n    \t*\t\tSkipField: test$types.SkipField,\n    \t*\t\tSkipVariant: test$types.SkipVariant,\n    \t*\t\tSkipUnnamedFieldInVariant: test$types.SkipUnnamedFieldInVariant,\n    \t*\t\tSkipNamedFieldInVariant: test$types.SkipNamedFieldInVariant,\n    \t*\t\tTransparentWithSkip: test$types.TransparentWithSkip,\n    \t*\t\tTransparentWithSkip2: test$types.TransparentWithSkip2,\n    \t*\t\tTransparentWithSkip3: test$types.TransparentWithSkip3,\n    \t*\t\tSkipVariant2: test$types.SkipVariant2,\n    \t*\t\tSkipVariant3: test$types.SkipVariant3,\n    \t*\t\tSkipStructFields: test$types.SkipStructFields,\n    \t*\t\tSpectaSkipNonTypeField: test$types.SpectaSkipNonTypeField,\n    \t*\t\tFlattenA: test$types.FlattenA,\n    \t*\t\tFlattenB: test$types.FlattenB,\n    \t*\t\tFlattenC: test$types.FlattenC,\n    \t*\t\tFlattenD: test$types.FlattenD,\n    \t*\t\tFlattenE: test$types.FlattenE,\n    \t*\t\tFlattenF: test$types.FlattenF,\n    \t*\t\tFlattenG: test$types.FlattenG,\n    \t*\t\tTupleNested: test$types.TupleNested,\n    \t*\t\t\"Generic1<()>\": test$types.Generic1<null>,\n    \t*\t\t\"GenericAutoBound<()>\": test$types.GenericAutoBound<null>,\n    \t*\t\t\"GenericAutoBound2<()>\": test$types.GenericAutoBound2<null>,\n    \t*\t\tContainer1: test$types.Container1,\n    \t*\t\t\"Generic2<(), String, i32>\": test$types.Generic2<null, string, number>,\n    \t*\t\t\"GenericNewType1<()>\": test$types.GenericNewType1<null>,\n    \t*\t\t\"GenericTuple<()>\": test$types.GenericTuple<null>,\n    \t*\t\t\"GenericStruct2<()>\": test$types.GenericStruct2<null>,\n    \t*\t\t\"InlineGenericNewtype<String>\": string,\n    \t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }],\n    \t*\t\t\"InlineFlattenGenericsG<()>\": test$types.InlineFlattenGenericsG<null>,\n    \t*\t\tInlineFlattenGenerics: test$types.InlineFlattenGenerics,\n    \t*\t\tGenericDefault: test$types.GenericDefault,\n    \t*\t\tChainedGenericDefault: test$types.ChainedGenericDefault,\n    \t*\t\t\"ChainedGenericDefault<String, String>\": test$types.ChainedGenericDefault,\n    \t*\t\t\"ChainedGenericDefault<i32>\": test$types.ChainedGenericDefault<number, number>,\n    \t*\t\t\"ChainedGenericDefault<String, i32>\": test$types.ChainedGenericDefault<string, number>,\n    \t*\t\tGenericDefaultSkipped: test$types.GenericDefaultSkipped<string>,\n    \t*\t\tGenericDefaultSkippedNonType: test$types.GenericDefaultSkippedNonType<unknown>,\n    \t*\t\tGenericParameterOrderPreserved: test$types.GenericParameterOrderPreserved,\n    \t*\t\tConstGenericInNonConstContainer: test$types.ConstGenericInNonConstContainer,\n    \t*\t\tConstGenericInConstContainer: test$types.ConstGenericInConstContainer,\n    \t*\t\tNamedConstGenericContainer: test$types.NamedConstGenericContainer,\n    \t*\t\tInlineConstGenericContainer: test$types.InlineConstGenericContainer,\n    \t*\t\tInlineRecursiveConstGenericContainer: test$types.InlineRecursiveConstGenericContainer,\n    \t*\t\tTestCollectionRegister: test$types.TestCollectionRegister,\n    \t*\t\tTestCollectionRegister: test$types.TestCollectionRegister,\n    \t*\t}} Primitives\n    \t* @property {number} i8\n    \t* @property {number} i16\n    \t* @property {number} i32\n    \t* @property {number} u8\n    \t* @property {number} u16\n    \t* @property {number} u32\n    \t* @property {number} f32\n    \t* @property {number} f64\n    \t* @property {boolean} bool\n    \t* @property {string} char\n    \t* @property {std$ops.Range<number>} \"Range<i32>\"\n    \t* @property {std$ops.RangeInclusive<number>} \"RangeInclusive<i32>\"\n    \t* @property {null} \"()\"\n    \t* @property {[string, number]} \"(String, i32)\"\n    \t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n    \t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n    \t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n    \t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n    \t* @property {string} String\n    \t* @property {string} PathBuf\n    \t* @property {string} IpAddr\n    \t* @property {string} Ipv4Addr\n    \t* @property {string} Ipv6Addr\n    \t* @property {string} SocketAddr\n    \t* @property {string} SocketAddrV4\n    \t* @property {string} SocketAddrV6\n    \t* @property {string} \"Cow<'static, str>\"\n    \t* @property {number} \"Cow<'static, i32>\"\n    \t* @property {string} \"&'static str\"\n    \t* @property {boolean} \"&'static bool\"\n    \t* @property {number} \"&'static i32\"\n    \t* @property {number[]} \"Vec<i32>\"\n    \t* @property {number[]} \"&'static [i32]\"\n    \t* @property {[number, number, number]} \"&'static [i32; 3]\"\n    \t* @property {[number, number, number]} \"[i32; 3]\"\n    \t* @property {test$types.MyEnum[]} \"Vec<MyEnum>\"\n    \t* @property {test$types.MyEnum[]} \"&'static [MyEnum]\"\n    \t* @property {[test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum]} \"&'static [MyEnum; 6]\"\n    \t* @property {[test$types.MyEnum, test$types.MyEnum]} \"[MyEnum; 2]\"\n    \t* @property {[number]} \"&'static [i32; 1]\"\n    \t* @property {[]} \"&'static [i32; 0]\"\n    \t* @property {number | null} \"Option<i32>\"\n    \t* @property {null} \"Option<()>\"\n    \t* @property {number[] | null} \"Option<Vec<i32>>\"\n    \t* @property {std$result.Result<string, number>} \"Result<String, i32>\"\n    \t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n    \t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n    \t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n    \t* @property {string | null} \"Option<Option<String>>\"\n    \t* @property {string | null} \"Option<Option<Option<String>>>\"\n    \t* @property {null} \"PhantomData<()>\"\n    \t* @property {null} \"PhantomData<String>\"\n    \t* @property {never} Infallible\n    \t* @property {test$types.Unit1} Unit1\n    \t* @property {test$types.Unit2} Unit2\n    \t* @property {test$types.Unit3} Unit3\n    \t* @property {test$types.Unit4} Unit4\n    \t* @property {test$types.Unit5} Unit5\n    \t* @property {test$types.Unit6} Unit6\n    \t* @property {test$types.Unit7} Unit7\n    \t* @property {test$types.SimpleStruct} SimpleStruct\n    \t* @property {test$types.TupleStruct1} TupleStruct1\n    \t* @property {test$types.TupleStruct3} TupleStruct3\n    \t* @property {test$types.TestEnum} TestEnum\n    \t* @property {test$types.RefStruct} RefStruct\n    \t* @property {test$types.InlinerStruct} InlinerStruct\n    \t* @property {test$types.GenericStruct<number>} \"GenericStruct<i32>\"\n    \t* @property {test$types.GenericStruct<string>} \"GenericStruct<String>\"\n    \t* @property {test$types.FlattenEnumStruct} FlattenEnumStruct\n    \t* @property {test$types.OverridenStruct} OverridenStruct\n    \t* @property {test$types.HasGenericAlias} HasGenericAlias\n    \t* @property {test$types.EnumMacroAttributes} EnumMacroAttributes\n    \t* @property {test$types.InlineEnumField} InlineEnumField\n    \t* @property {test$types.InlineOptionalType} InlineOptionalType\n    \t* @property {test$types.Rename} Rename\n    \t* @property {test$types.TransparentType} TransparentType\n    \t* @property {test$types.TransparentType2} TransparentType2\n    \t* @property {test$types.TransparentTypeWithOverride} TransparentTypeWithOverride\n    \t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n    \t* @property {Partial<{ [key in test$types.BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n    \t* @property {Partial<{ [key in test$types.BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n    \t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n    \t* @property {test$types.PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n    \t* @property {test$types.EnumReferenceRecordKey} EnumReferenceRecordKey\n    \t* @property {test$types.FlattenOnNestedEnum} FlattenOnNestedEnum\n    \t* @property {test$types.MyEmptyInput} MyEmptyInput\n    \t* @property {string} \"(String)\"\n    \t* @property {[string]} \"(String,)\"\n    \t* @property {test$types.ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n    \t* @property {test$types.ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n    \t* @property {test$types.MyEnum[]} \"Vec<MyEnum>\"\n    \t* @property {test$types.InlineTuple} InlineTuple\n    \t* @property {test$types.InlineTuple2} InlineTuple2\n    \t* @property {string} \"Box<str>\"\n    \t* @property {string} \"Box<String>\"\n    \t* @property {test$types.SkippedFieldWithinVariant} SkippedFieldWithinVariant\n    \t* @property {test$types.KebabCase} KebabCase\n    \t* @property {string[]} \"&[&str]\"\n    \t* @property {test$types.Issue281} \"Issue281<'_>\"\n    \t* @property {test$types.LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n    \t* @property {test$types.LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n    \t* @property {test$types.RenameWithWeirdCharsField} RenameWithWeirdCharsField\n    \t* @property {test$types.RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n    \t* @property {test$types.RenamedFieldKeys} RenamedFieldKeys\n    \t* @property {test$types.RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n    \t* @property {test$types$type_type.Type} \"type_type::Type\"\n    \t* @property {test$types.ActualType} ActualType\n    \t* @property {test$types.SpectaTypeOverride} SpectaTypeOverride\n    \t* @property {test$types.ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n    \t* @property {test$types.ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n    \t* @property {test$types.ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n    \t* @property {test$types.ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n    \t* @property {test$types.ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n    \t* @property {test$types.ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n    \t* @property {test$types.InvalidToValidType} InvalidToValidType\n    \t* @property {test$types.TupleStruct} TupleStruct\n    \t* @property {test$types.TupleStructWithRep} TupleStructWithRep\n    \t* @property {test$types.GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n    \t* @property {test$types.BracedStruct} BracedStruct\n    \t* @property {test$types.Struct} Struct\n    \t* @property {test$types.Struct2} Struct2\n    \t* @property {test$types.Enum} Enum\n    \t* @property {test$types.Enum2} Enum2\n    \t* @property {test$types.Enum3} Enum3\n    \t* @property {test$types.StructRenameAllUppercase} StructRenameAllUppercase\n    \t* @property {test$types.RenameSerdeSpecialChar} RenameSerdeSpecialChar\n    \t* @property {test$types.EnumRenameAllUppercase} EnumRenameAllUppercase\n    \t* @property {test$types.Recursive} Recursive\n    \t* @property {test$types.RecursiveMapValue} RecursiveMapValue\n    \t* @property {test$types.RecursiveTransparent} RecursiveTransparent\n    \t* @property {test$types.RecursiveInEnum} RecursiveInEnum\n    \t* @property {test$types.NonOptional} NonOptional\n    \t* @property {test$types.OptionalOnNamedField} OptionalOnNamedField\n    \t* @property {test$types.OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n    \t* @property {test$types.OptionalInEnum} OptionalInEnum\n    \t* @property {test$types.UntaggedVariants} UntaggedVariants\n    \t* @property {test$types.UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n    \t* @property {test$types.UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n    \t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n    \t* @property {test$types.Regular} Regular\n    \t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n    \t* @property {{ [key in test$types.TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n    \t* @property {Partial<{ [key in test$types.UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n    \t* @property {Partial<{ [key in test$types.UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n    \t* @property {test$types.ValidMaybeValidKey} ValidMaybeValidKey\n    \t* @property {test$types.ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n    \t* @property {test$types.MacroStruct} MacroStruct\n    \t* @property {test$types.MacroStruct2} MacroStruct2\n    \t* @property {test$types.MacroEnum} MacroEnum\n    \t* @property {test$types.DeprecatedType} DeprecatedType\n    \t* @property {test$types.DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n    \t* @property {test$types.DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n    \t* @property {test$types.DeprecatedFields} DeprecatedFields\n    \t* @property {test$types.DeprecatedTupleVariant} DeprecatedTupleVariant\n    \t* @property {test$types.DeprecatedEnumVariants} DeprecatedEnumVariants\n    \t* @property {test$types.CommentedStruct} CommentedStruct\n    \t* @property {test$types.CommentedEnum} CommentedEnum\n    \t* @property {test$types.SingleLineComment} SingleLineComment\n    \t* @property {test$types.Demo<number, boolean>} NonGeneric\n    \t* @property {test$types.Demo<number, boolean>} \"HalfGenericA<u8>\"\n    \t* @property {test$types.Demo<number, boolean>} \"HalfGenericB<bool>\"\n    \t* @property {test$types.Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n    \t* @property {test$types.Demo<number, boolean>} \"Another<bool>\"\n    \t* @property {{ [key in string]: number }} \"MapA<u32>\"\n    \t* @property {{ [key in number]: string }} \"MapB<u32>\"\n    \t* @property {{ [key in string]: test$types.AGenericStruct<number> }} \"MapC<u32>\"\n    \t* @property {test$types.AGenericStruct<number>} \"AGenericStruct<u32>\"\n    \t* @property {test$types.A} A\n    \t* @property {test$types.DoubleFlattened} DoubleFlattened\n    \t* @property {test$types.FlattenedInner} FlattenedInner\n    \t* @property {test$types.BoxFlattened} BoxFlattened\n    \t* @property {test$types.BoxInline} BoxInline\n    \t* @property {test$types.First} First\n    \t* @property {test$types.Second} Second\n    \t* @property {test$types.Third} Third\n    \t* @property {test$types.Fourth} Fourth\n    \t* @property {test$types.TagOnStructWithInline} TagOnStructWithInline\n    \t* @property {test$types.Sixth} Sixth\n    \t* @property {test$types.Seventh} Seventh\n    \t* @property {test$types.Eight} Eight\n    \t* @property {test$types.Ninth} Ninth\n    \t* @property {test$types.Tenth} Tenth\n    \t* @property {test$types.MyEnumTagged} MyEnumTagged\n    \t* @property {test$types.MyEnumExternal} MyEnumExternal\n    \t* @property {test$types.MyEnumAdjacent} MyEnumAdjacent\n    \t* @property {test$types.MyEnumUntagged} MyEnumUntagged\n    \t* @property {test$types.EmptyStruct} EmptyStruct\n    \t* @property {test$types.EmptyStructWithTag} EmptyStructWithTag\n    \t* @property {test$types.AdjacentlyTagged} AdjacentlyTagged\n    \t* @property {test$types.LoadProjectEvent} LoadProjectEvent\n    \t* @property {test$types.ExternallyTagged} ExternallyTagged\n    \t* @property {test$types.Issue221External} Issue221External\n    \t* @property {test$types.InternallyTaggedD} InternallyTaggedD\n    \t* @property {test$types.InternallyTaggedE} InternallyTaggedE\n    \t* @property {test$types.InternallyTaggedF} InternallyTaggedF\n    \t* @property {test$types.InternallyTaggedH} InternallyTaggedH\n    \t* @property {test$types.InternallyTaggedL} InternallyTaggedL\n    \t* @property {test$types.InternallyTaggedM} InternallyTaggedM\n    \t* @property {test$types.StructWithAlias} StructWithAlias\n    \t* @property {test$types.StructWithMultipleAliases} StructWithMultipleAliases\n    \t* @property {test$types.StructWithAliasAndRename} StructWithAliasAndRename\n    \t* @property {test$types.EnumWithVariantAlias} EnumWithVariantAlias\n    \t* @property {test$types.EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n    \t* @property {test$types.EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n    \t* @property {test$types.InternallyTaggedWithAlias} InternallyTaggedWithAlias\n    \t* @property {test$types.AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n    \t* @property {test$types.UntaggedWithAlias} UntaggedWithAlias\n    \t* @property {test$types.Issue221UntaggedSafe} Issue221UntaggedSafe\n    \t* @property {test$types.Issue221UntaggedMixed} Issue221UntaggedMixed\n    \t* @property {test$types.EmptyEnum} EmptyEnum\n    \t* @property {test$types.EmptyEnumTagged} EmptyEnumTagged\n    \t* @property {test$types.EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n    \t* @property {test$types.EmptyEnumUntagged} EmptyEnumUntagged\n    \t* @property {test$types.SkipOnlyField} SkipOnlyField\n    \t* @property {test$types.SkipField} SkipField\n    \t* @property {test$types.SkipVariant} SkipVariant\n    \t* @property {test$types.SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n    \t* @property {test$types.SkipNamedFieldInVariant} SkipNamedFieldInVariant\n    \t* @property {test$types.TransparentWithSkip} TransparentWithSkip\n    \t* @property {test$types.TransparentWithSkip2} TransparentWithSkip2\n    \t* @property {test$types.TransparentWithSkip3} TransparentWithSkip3\n    \t* @property {test$types.SkipVariant2} SkipVariant2\n    \t* @property {test$types.SkipVariant3} SkipVariant3\n    \t* @property {test$types.SkipStructFields} SkipStructFields\n    \t* @property {test$types.SpectaSkipNonTypeField} SpectaSkipNonTypeField\n    \t* @property {test$types.FlattenA} FlattenA\n    \t* @property {test$types.FlattenB} FlattenB\n    \t* @property {test$types.FlattenC} FlattenC\n    \t* @property {test$types.FlattenD} FlattenD\n    \t* @property {test$types.FlattenE} FlattenE\n    \t* @property {test$types.FlattenF} FlattenF\n    \t* @property {test$types.FlattenG} FlattenG\n    \t* @property {test$types.TupleNested} TupleNested\n    \t* @property {test$types.Generic1<null>} \"Generic1<()>\"\n    \t* @property {test$types.GenericAutoBound<null>} \"GenericAutoBound<()>\"\n    \t* @property {test$types.GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n    \t* @property {test$types.Container1} Container1\n    \t* @property {test$types.Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n    \t* @property {test$types.GenericNewType1<null>} \"GenericNewType1<()>\"\n    \t* @property {test$types.GenericTuple<null>} \"GenericTuple<()>\"\n    \t* @property {test$types.GenericStruct2<null>} \"GenericStruct2<()>\"\n    \t* @property {string} \"InlineGenericNewtype<String>\"\n    \t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }]} \"InlineGenericNested<String>\"\n    \t* @property {test$types.InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n    \t* @property {test$types.InlineFlattenGenerics} InlineFlattenGenerics\n    \t* @property {test$types.GenericDefault} GenericDefault\n    \t* @property {test$types.ChainedGenericDefault} ChainedGenericDefault\n    \t* @property {test$types.ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n    \t* @property {test$types.ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n    \t* @property {test$types.ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n    \t* @property {test$types.GenericDefaultSkipped<string>} GenericDefaultSkipped\n    \t* @property {test$types.GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n    \t* @property {test$types.GenericParameterOrderPreserved} GenericParameterOrderPreserved\n    \t* @property {test$types.ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n    \t* @property {test$types.ConstGenericInConstContainer} ConstGenericInConstContainer\n    \t* @property {test$types.NamedConstGenericContainer} NamedConstGenericContainer\n    \t* @property {test$types.InlineConstGenericContainer} InlineConstGenericContainer\n    \t* @property {test$types.InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n    \t* @property {test$types.TestCollectionRegister} TestCollectionRegister\n    \t* @property {test$types.TestCollectionRegister} TestCollectionRegister\n    \t*/\n    ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-files-serde.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nstd/\n  ops.js (295 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  /**\n  \t* @typedef {{\n  \t*\t\tstart: T,\n  \t*\t\tend: T,\n  \t*\t}} Range<T>\n  \t* @property {T} start\n  \t* @property {T} end\n  \t*\n  \t* @typedef {{\n  \t*\t\tstart: T,\n  \t*\t\tend: T,\n  \t*\t}} RangeInclusive<T>\n  \t* @property {T} start\n  \t* @property {T} end\n  \t*/\n  ════════════════════════════════════════\n\n  result.js (181 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  /**\n  \t* @typedef {{\n  \t*\t\tok: T,\n  \t*\t\terr: E,\n  \t*\t}} Result<T, E>\n  \t* @property {T} ok\n  \t* @property {E} err\n  \t*/\n  ════════════════════════════════════════\n\ntest/\n  types/\n    type_type.js (108 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    /**\n    \t* @typedef {never} Type\n    \t*/\n    ════════════════════════════════════════\n\n  types.js (30269 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  /**\n  \t* @typedef {{\n  \t*\t\ta: B,\n  \t*\t\tb: {\n  \t*\t\t\tb: number,\n  \t*\t\t},\n  \t*\t\tc: B,\n  \t*\t\td: {\n  \t*\t\t\tflattened: number,\n  \t*\t\t},\n  \t*\t\te: {\n  \t*\t\t\tgeneric_flattened: number,\n  \t*\t\t},\n  \t*\t}} A\n  \t* @property {B} a\n  \t* @property {{\n  \t*\t\tb: number,\n  \t*\t}} b\n  \t* @property {B} c\n  \t* @property {{\n  \t*\t\tflattened: number,\n  \t*\t}} d\n  \t* @property {{\n  \t*\t\tgeneric_flattened: number,\n  \t*\t}} e\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: Demo<T, boolean>,\n  \t*\t}} AGenericStruct<T>\n  \t* @property {Demo<T, boolean>} field\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: GenericType<string>,\n  \t*\t}} ActualType\n  \t* @property {GenericType<string>} a\n  \t*\n  \t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n  \t* \tid: string,\n  \t* \tmethod: string,\n  \t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n  \t* @property {{ t: \"A\" }} A\n  \t* @property {{ t: \"B\"; c: {\n  \t* \tid: string,\n  \t* \tmethod: string,\n  \t* } }} B\n  \t* @property {{ t: \"C\"; c: string }} C\n  \t*\n  \t* @typedef {{ type: \"A\"; data: {\n  \t* \tfield: string,\n  \t* } } | { type: \"B\"; data: {\n  \t* \tother: number,\n  \t* } }} AdjacentlyTaggedWithAlias\n  \t* @property {{ type: \"A\"; data: {\n  \t* \tfield: string,\n  \t* } }} A\n  \t* @property {{ type: \"B\"; data: {\n  \t* \tother: number,\n  \t* } }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: number,\n  \t*\t}} B\n  \t* @property {number} b\n  \t*\n  \t* @typedef {\"A\" | \"B\"} BasicEnum\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {BoxedInner} BoxFlattened\n  \t*\n  \t* @typedef {{\n  \t*\t\tc: {\n  \t*\t\t\ta: number,\n  \t*\t\t},\n  \t*\t}} BoxInline\n  \t* @property {{\n  \t*\t\ta: number,\n  \t*\t}} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} BoxedInner\n  \t* @property {number} a\n  \t*\n  \t* @typedef {string} BracedStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tfirst: T,\n  \t*\t\tsecond: U,\n  \t*\t}} ChainedGenericDefault<T = string, U = T>\n  \t* @property {T} first\n  \t* @property {U} second\n  \t*\n  \t*  Some triple-slash comment\n  \t*  Some more triple-slash comment\n  \t*\n  \t* @typedef {\n  \t*\t/**\n  \t*\t *  Some triple-slash comment\n  \t*\t *  Some more triple-slash comment\n  \t*\t */\n  \t* ({ A: number }) & { B?: never } | \n  \t*\t/**\n  \t*\t *  Some triple-slash comment\n  \t*\t *  Some more triple-slash comment\n  \t*\t */\n  \t* ({ B: {\n  \t* \t/**\n  \t* \t *  Some triple-slash comment\n  \t* \t *  Some more triple-slash comment\n  \t* \t */\n  \t* \ta: number,\n  \t* } }) & { A?: never }} CommentedEnum\n  \t* @property {\n  \t* /**\n  \t*  *  Some triple-slash comment\n  \t*  *  Some more triple-slash comment\n  \t*  */\n  \t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n  \t* @property {\n  \t* /**\n  \t*  *  Some triple-slash comment\n  \t*  *  Some more triple-slash comment\n  \t*  */\n  \t* { B: {\n  \t* \t/**\n  \t* \t *  Some triple-slash comment\n  \t* \t *  Some more triple-slash comment\n  \t* \t */\n  \t* \ta: number,\n  \t* } }} B - Some triple-slash comment Some more triple-slash comment\n  \t*\n  \t*  Some triple-slash comment\n  \t*  Some more triple-slash comment\n  \t*\n  \t* @typedef {{\n  \t*\t\t/**\n  \t*\t\t *  Some triple-slash comment\n  \t*\t\t *  Some more triple-slash comment\n  \t*\t\t */\n  \t*\t\ta: number,\n  \t*\t}} CommentedStruct\n  \t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: number[],\n  \t*\t\ta: number[],\n  \t*\t\td: [number, number],\n  \t*\t}} ConstGenericInConstContainer\n  \t* @property {number[]} data\n  \t* @property {number[]} a\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: [number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number],\n  \t*\t}} ConstGenericInNonConstContainer\n  \t* @property {[number]} data\n  \t* @property {[number, number]} a\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tfoo: Generic1<number>,\n  \t*\t\tbar: Generic1<number>[],\n  \t*\t\tbaz: { [key in string]: Generic1<string> },\n  \t*\t}} Container1\n  \t* @property {Generic1<number>} foo\n  \t* @property {Generic1<number>[]} bar\n  \t* @property {{ [key in string]: Generic1<string> }} baz\n  \t*\n  \t* @typedef {string} ContainerTypeOverrideEnum\n  \t*\n  \t* @typedef {string} ContainerTypeOverrideGeneric\n  \t*\n  \t* @typedef {string} ContainerTypeOverrideStruct\n  \t*\n  \t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n  \t*\n  \t* @typedef {[string, number]} ContainerTypeOverrideTuple\n  \t*\n  \t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n  \t*\n  \t* @typedef {{\n  \t*\t\tflattened: number,\n  \t*\t}} D\n  \t* @property {number} flattened\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: A,\n  \t*\t\tb: B,\n  \t*\t}} Demo<A, B>\n  \t* @property {A} a\n  \t* @property {B} b\n  \t*\n  \t* @typedef {\n  \t*\t/**\n  \t*\t * @deprecated\n  \t*\t */\n  \t* \"A\" | \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* \"B\" | \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* \"C\"} DeprecatedEnumVariants\n  \t* @property {\n  \t* /**\n  \t*  * @deprecated\n  \t*  */\n  \t* \"A\"} A - @deprecated\n  \t* @property {\n  \t* /**\n  \t*  * @deprecated Nope\n  \t*  */\n  \t* \"B\"} B - @deprecated Nope\n  \t* @property {\n  \t* /**\n  \t*  * @deprecated Nope\n  \t*  */\n  \t* \"C\"} C - @deprecated Nope\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\t/**\n  \t*\t\t * @deprecated\n  \t*\t\t */\n  \t*\t\tb: string,\n  \t*\t\t/**\n  \t*\t\t * @deprecated This field is cringe!\n  \t*\t\t */\n  \t*\t\tc: string,\n  \t*\t\t/**\n  \t*\t\t * @deprecated This field is cringe!\n  \t*\t\t */\n  \t*\t\td: string,\n  \t*\t}} DeprecatedFields\n  \t* @property {number} a\n  \t* @property {string} b - @deprecated\n  \t* @property {string} c - @deprecated This field is cringe!\n  \t* @property {string} d - @deprecated This field is cringe!\n  \t*\n  \t* @typedef {[\n  \t*\t/**\n  \t*\t * @deprecated\n  \t*\t */\n  \t* string, \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* string, \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* number]} DeprecatedTupleVariant\n  \t* @property {string} \"0\" - @deprecated\n  \t* @property {string} \"1\" - @deprecated Nope\n  \t* @property {number} \"2\" - @deprecated Nope\n  \t*\n  \t* @deprecated\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} DeprecatedType\n  \t* @property {number} a\n  \t*\n  \t* @deprecated Look at you big man using a deprecation message\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} DeprecatedTypeWithMsg\n  \t* @property {number} a\n  \t*\n  \t* @deprecated Look at you big man using a deprecation message\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} DeprecatedTypeWithMsg2\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: ToBeFlattened,\n  \t*\t\tb: ToBeFlattened,\n  \t*\t}} DoubleFlattened\n  \t* @property {ToBeFlattened} a\n  \t* @property {ToBeFlattened} b\n  \t*\n  \t* @typedef {{ A: string } | \"B\"} Eight\n  \t* @property {{ A: string }} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {never} EmptyEnum\n  \t*\n  \t* @typedef {never} EmptyEnumTagged\n  \t*\n  \t* @typedef {never} EmptyEnumTaggedWContent\n  \t*\n  \t* @typedef {never} EmptyEnumUntagged\n  \t*\n  \t* @typedef {Record<string, never>} EmptyStruct\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: \"EmptyStructWithTag\",\n  \t*\t}} EmptyStructWithTag\n  \t* @property {\"EmptyStructWithTag\"} a\n  \t*\n  \t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n  \t* @property {{ t: \"A\" }} A\n  \t* @property {{ t: \"B\" }} B\n  \t*\n  \t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n  \t* @property {{ t: \"C\" }} C\n  \t* @property {{ t: \"B\" }} B\n  \t* @property {{ t: \"D\"; enumField: null }} D\n  \t*\n  \t* @typedef {{ t: \"A\"; b: string }} Enum3\n  \t* @property {{ t: \"A\"; b: string }} A\n  \t*\n  \t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n  \t* \ta: string,\n  \t* \tbbbbbb: number,\n  \t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n  \t* @property {{ A: string }} A\n  \t* @property {{ bbb: number }} bbb\n  \t* @property {{ cccc: number }} cccc\n  \t* @property {{ D: {\n  \t* \ta: string,\n  \t* \tbbbbbb: number,\n  \t* } }} D\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n  \t*\t}} EnumReferenceRecordKey\n  \t* @property {Partial<{ [key in BasicEnum]: number }>} a\n  \t*\n  \t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n  \t* @property {\"HELLOWORLD\"} HELLOWORLD\n  \t* @property {\"VARIANTB\"} VARIANTB\n  \t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n  \t*\n  \t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n  \t* @property {\"Variant\"} Variant\n  \t* @property {\"Other\"} Other\n  \t*\n  \t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n  \t* @property {\"Variant\"} Variant\n  \t* @property {\"Other\"} Other\n  \t*\n  \t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n  \t* @property {\"renamed_variant\"} renamed_variant\n  \t* @property {\"Other\"} Other\n  \t*\n  \t* @typedef {\"A\" | ({ B: {\n  \t* \tid: string,\n  \t* \tmethod: string,\n  \t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n  \t* @property {\"A\"} A\n  \t* @property {{ B: {\n  \t* \tid: string,\n  \t* \tmethod: string,\n  \t* } }} B\n  \t* @property {{ C: string }} C\n  \t*\n  \t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n  \t* @property {{ A: string }} A\n  \t*\n  \t* @typedef {string} ExtraBracketsInUnnamedStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} First\n  \t* @property {string} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\tb: number,\n  \t*\t}} FlattenA\n  \t* @property {number} a\n  \t* @property {number} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tc: number,\n  \t*\t} & FlattenA} FlattenB\n  \t* @property {number} c\n  \t*\n  \t* @typedef {{\n  \t*\t\tc: number,\n  \t*\t} & FlattenA} FlattenC\n  \t* @property {number} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: FlattenA,\n  \t*\t\tc: number,\n  \t*\t}} FlattenD\n  \t* @property {FlattenA} a\n  \t* @property {number} c\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: ({\n  \t*\t\t\tc: number,\n  \t*\t\t}) & (FlattenA),\n  \t*\t\td: number,\n  \t*\t}} FlattenE\n  \t* @property {({\n  \t*\t\tc: number,\n  \t*\t}) & (FlattenA)} b\n  \t* @property {number} d\n  \t*\n  \t* @typedef {{ tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" }} FlattenEnum\n  \t* @property {{ tag: \"One\" }} One\n  \t* @property {{ tag: \"Two\" }} Two\n  \t* @property {{ tag: \"Three\" }} Three\n  \t*\n  \t* @typedef {{\n  \t*\t\touter: string,\n  \t*\t} & FlattenEnum} FlattenEnumStruct\n  \t* @property {string} outer\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: ({\n  \t*\t\t\tc: number,\n  \t*\t\t}) & (FlattenA),\n  \t*\t\td: number,\n  \t*\t}} FlattenF\n  \t* @property {({\n  \t*\t\tc: number,\n  \t*\t}) & (FlattenA)} b\n  \t* @property {number} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: FlattenB,\n  \t*\t\td: number,\n  \t*\t}} FlattenG\n  \t* @property {FlattenB} b\n  \t* @property {number} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tid: string,\n  \t*\t} & NestedEnum} FlattenOnNestedEnum\n  \t* @property {string} id\n  \t*\n  \t* @typedef {Inner} FlattenedInner\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: {\n  \t*\t\t\ta: string,\n  \t*\t\t},\n  \t*\t}} Fourth\n  \t* @property {First} a\n  \t* @property {{\n  \t*\t\ta: string,\n  \t*\t}} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t\tvalues: T[],\n  \t*\t}} Generic1<T>\n  \t* @property {T} value\n  \t* @property {T[]} values\n  \t*\n  \t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n  \t* \ta: A,\n  \t* \tb: B,\n  \t* \tc: C,\n  \t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n  \t* @property {{ A: A }} A\n  \t* @property {{ B: [B, B, B] }} B\n  \t* @property {{ C: C[] }} C\n  \t* @property {{ D: A[][][] }} D\n  \t* @property {{ E: {\n  \t* \ta: A,\n  \t* \tb: B,\n  \t* \tc: C,\n  \t* } }} E\n  \t* @property {{ X: number[] }} X\n  \t* @property {{ Y: number }} Y\n  \t* @property {{ Z: number[][] }} Z\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t\tvalues: T[],\n  \t*\t}} GenericAutoBound<T>\n  \t* @property {T} value\n  \t* @property {T[]} values\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t\tvalues: T[],\n  \t*\t}} GenericAutoBound2<T>\n  \t* @property {T} value\n  \t* @property {T[]} values\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t}} GenericDefault<T = string>\n  \t* @property {T} value\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t}} GenericDefaultSkipped<T>\n  \t* @property {T} value\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: number,\n  \t*\t}} GenericDefaultSkippedNonType<T>\n  \t* @property {number} value\n  \t*\n  \t* @typedef {{\n  \t*\t\tgeneric_flattened: T,\n  \t*\t}} GenericFlattened<T>\n  \t* @property {T} generic_flattened\n  \t*\n  \t* @typedef {T[][]} GenericNewType1<T>\n  \t* @property {T[][]} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tpair: Pair<number, string>,\n  \t*\t}} GenericParameterOrderPreserved\n  \t* @property {Pair<number, string>} pair\n  \t*\n  \t* @typedef {{\n  \t*\t\targ: T,\n  \t*\t}} GenericStruct<T>\n  \t* @property {T} arg\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: T,\n  \t*\t\tb: [T, T],\n  \t*\t\tc: [T, [T, T]],\n  \t*\t\td: [T, T, T],\n  \t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n  \t*\t\tf: T[],\n  \t*\t\tg: T[][],\n  \t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n  \t*\t}} GenericStruct2<T>\n  \t* @property {T} a\n  \t* @property {[T, T]} b\n  \t* @property {[T, [T, T]]} c\n  \t* @property {[T, T, T]} d\n  \t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n  \t* @property {T[]} f\n  \t* @property {T[][]} g\n  \t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n  \t*\n  \t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n  \t* @property {T} \"0\"\n  \t* @property {T[]} \"1\"\n  \t* @property {T[][]} \"2\"\n  \t*\n  \t* @typedef {T} GenericTupleStruct<T>\n  \t* @property {T} \"0\"\n  \t*\n  \t* @typedef {\"Undefined\" | T} GenericType<T>\n  \t* @property {\"Undefined\"} Undefined\n  \t* @property {T} Value\n  \t*\n  \t* @typedef {{ [key in number]: string }} HasGenericAlias\n  \t* @property {{ [key in number]: string }} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: {\n  \t*\t\t\tdata: [number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t},\n  \t*\t\tc: {\n  \t*\t\t\tdata: [number, number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t},\n  \t*\t\td: [number, number],\n  \t*\t}} InlineConstGenericContainer\n  \t* @property {{\n  \t*\t\tdata: [number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t}} b\n  \t* @property {{\n  \t*\t\tdata: [number, number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t}} c\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{ A: {\n  \t* \ta: string,\n  \t* } }} InlineEnumField\n  \t* @property {{ A: {\n  \t* \ta: string,\n  \t* } }} A\n  \t*\n  \t* @typedef {{\n  \t*\t\tg: InlineFlattenGenericsG<string>,\n  \t*\t\tgi: {\n  \t*\t\t\tt: string,\n  \t*\t\t},\n  \t*\t} & InlineFlattenGenericsG<string>} InlineFlattenGenerics\n  \t* @property {InlineFlattenGenericsG<string>} g\n  \t* @property {{\n  \t*\t\tt: string,\n  \t*\t}} gi\n  \t*\n  \t* @typedef {{\n  \t*\t\tt: T,\n  \t*\t}} InlineFlattenGenericsG<T>\n  \t* @property {T} t\n  \t*\n  \t* @typedef {{\n  \t*\t\toptional_field: {\n  \t* \ta: string,\n  \t* } | null,\n  \t*\t}} InlineOptionalType\n  \t* @property {{\n  \t* \ta: string,\n  \t* } | null} optional_field\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: number[],\n  \t*\t\ta: number[],\n  \t*\t\td: [number, number, number],\n  \t*\t\te: InlineRecursiveConstGeneric,\n  \t*\t}} InlineRecursiveConstGeneric\n  \t* @property {number[]} data\n  \t* @property {number[]} a\n  \t* @property {[number, number, number]} d\n  \t* @property {InlineRecursiveConstGeneric} e\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: {\n  \t*\t\t\tdata: [number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t\te: InlineRecursiveConstGeneric,\n  \t*\t\t},\n  \t*\t\tc: {\n  \t*\t\t\tdata: [number, number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t\te: InlineRecursiveConstGeneric,\n  \t*\t\t},\n  \t*\t\td: [number, number],\n  \t*\t}} InlineRecursiveConstGenericContainer\n  \t* @property {{\n  \t*\t\tdata: [number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t\te: InlineRecursiveConstGeneric,\n  \t*\t}} b\n  \t* @property {{\n  \t*\t\tdata: [number, number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t\te: InlineRecursiveConstGeneric,\n  \t*\t}} c\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tref_struct: SimpleStruct,\n  \t*\t\tval: number,\n  \t*\t}} InlineStruct\n  \t* @property {SimpleStruct} ref_struct\n  \t* @property {number} val\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: [string, boolean],\n  \t*\t}} InlineTuple\n  \t* @property {[string, boolean]} demo\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: [{\n  \t* \tdemo: [string, boolean],\n  \t* }, boolean],\n  \t*\t}} InlineTuple2\n  \t* @property {[{\n  \t* \tdemo: [string, boolean],\n  \t* }, boolean]} demo\n  \t*\n  \t* @typedef {{\n  \t*\t\tinline_this: {\n  \t*\t\t\tref_struct: SimpleStruct,\n  \t*\t\t\tval: number,\n  \t*\t\t},\n  \t*\t\tdont_inline_this: RefStruct,\n  \t*\t}} InlinerStruct\n  \t* @property {{\n  \t*\t\tref_struct: SimpleStruct,\n  \t*\t\tval: number,\n  \t*\t}} inline_this\n  \t* @property {RefStruct} dont_inline_this\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t} & FlattenedInner} Inner\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t* \ttype: \"A\",\n  \t* } & { [key in string]: string }} InternallyTaggedD\n  \t* @property {{\n  \t* \ttype: \"A\",\n  \t* } & { [key in string]: string }} A\n  \t*\n  \t* @typedef {{ type: \"A\" }} InternallyTaggedE\n  \t* @property {{ type: \"A\" }} A\n  \t*\n  \t* @typedef {{ type: \"A\" }} InternallyTaggedF\n  \t* @property {{ type: \"A\" }} A\n  \t*\n  \t* @typedef {null} InternallyTaggedFInner\n  \t* @property {null} A\n  \t*\n  \t* @typedef {{ type: \"A\" }} InternallyTaggedH\n  \t* @property {{ type: \"A\" }} A\n  \t*\n  \t* @typedef {null} InternallyTaggedHInner\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {{\n  \t* \ttype: \"A\",\n  \t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n  \t* @property {{\n  \t* \ttype: \"A\",\n  \t* } & { type: \"A\" } | { type: \"B\" }} A\n  \t*\n  \t* @typedef {{ type: \"A\" } | { type: \"B\" }} InternallyTaggedLInner\n  \t* @property {{ type: \"A\" }} A\n  \t* @property {{ type: \"B\" }} B\n  \t*\n  \t* @typedef {{ type: \"A\" }} InternallyTaggedM\n  \t* @property {{ type: \"A\" }} A\n  \t*\n  \t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n  \t* @property {{ type: \"A\"; field: string }} A\n  \t* @property {{ type: \"B\"; other: number }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tcause: null,\n  \t*\t}} InvalidToValidType\n  \t* @property {null} cause\n  \t*\n  \t* @typedef {({ A: {\n  \t* \ta: string,\n  \t* } }) & { B?: never } | ({ B: {\n  \t* \tb: string,\n  \t* } }) & { A?: never }} Issue221External\n  \t* @property {{ A: {\n  \t* \ta: string,\n  \t* } }} A\n  \t* @property {{ B: {\n  \t* \tb: string,\n  \t* } }} B\n  \t*\n  \t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n  \t* @property {{ a: string }} A\n  \t* @property {{ b: string }} B\n  \t* @property {{ values: { [key in string]: string } }} Unsafe\n  \t*\n  \t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n  \t* @property {{ a: string }} A\n  \t* @property {{ b: string }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tdefault_unity_arguments: string[],\n  \t*\t}} Issue281\n  \t* @property {string[]} default_unity_arguments\n  \t*\n  \t* @typedef {{\n  \t*\t\t\"test-ing\": string,\n  \t*\t}} KebabCase\n  \t* @property {string} \"test-ing\"\n  \t*\n  \t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n  \t* @property {{ Borrowed: T }} Borrowed\n  \t* @property {{ Owned: T }} Owned\n  \t*\n  \t* @typedef {{\n  \t*\t\tborrowed: T[],\n  \t*\t\towned: T[],\n  \t*\t}} LifetimeGenericStruct<T>\n  \t* @property {T[]} borrowed\n  \t* @property {T[]} owned\n  \t*\n  \t* @typedef {{ event: \"started\"; data: {\n  \t* \tprojectName: string,\n  \t* } } | { event: \"progressTest\"; data: {\n  \t* \tprojectName: string,\n  \t* \tstatus: string,\n  \t* \tprogress: number,\n  \t* } } | { event: \"finished\"; data: {\n  \t* \tprojectName: string,\n  \t* } }} LoadProjectEvent\n  \t* @property {{ event: \"started\"; data: {\n  \t* \tprojectName: string,\n  \t* } }} started\n  \t* @property {{ event: \"progressTest\"; data: {\n  \t* \tprojectName: string,\n  \t* \tstatus: string,\n  \t* \tprogress: number,\n  \t* } }} progressTest\n  \t* @property {{ event: \"finished\"; data: {\n  \t* \tprojectName: string,\n  \t* } }} finished\n  \t*\n  \t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n  \t* \tdemo2: string,\n  \t* } }) & { Demo?: never }} MacroEnum\n  \t* @property {{ Demo: string }} Demo\n  \t* @property {{ Demo2: {\n  \t* \tdemo2: string,\n  \t* } }} Demo2\n  \t*\n  \t* @typedef {string} MacroStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: string,\n  \t*\t}} MacroStruct2\n  \t* @property {string} demo\n  \t*\n  \t* @typedef {T} MaybeValidKey<T>\n  \t* @property {T} \"0\"\n  \t*\n  \t* @typedef {Record<string, never>} MyEmptyInput\n  \t*\n  \t* @typedef {({ A: string }) & { B?: never } | ({ B: number }) & { A?: never }} MyEnum\n  \t* @property {{ A: string }} A\n  \t* @property {{ B: number }} B\n  \t*\n  \t* @typedef {{ t: \"Variant\"; c: {\n  \t* \tinner: First,\n  \t* } }} MyEnumAdjacent\n  \t* @property {{ t: \"Variant\"; c: {\n  \t* \tinner: First,\n  \t* } }} Variant\n  \t*\n  \t* @typedef {{ Variant: {\n  \t* \tinner: First,\n  \t* } }} MyEnumExternal\n  \t* @property {{ Variant: {\n  \t* \tinner: First,\n  \t* } }} Variant\n  \t*\n  \t* @typedef {{ type: \"Variant\"; inner: First }} MyEnumTagged\n  \t* @property {{ type: \"Variant\"; inner: First }} Variant\n  \t*\n  \t* @typedef {{ inner: First }} MyEnumUntagged\n  \t* @property {{ inner: First }} Variant\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: number[],\n  \t*\t\ta: number[],\n  \t*\t\td: [number, number],\n  \t*\t}} NamedConstGeneric\n  \t* @property {number[]} data\n  \t* @property {number[]} a\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: NamedConstGeneric,\n  \t*\t\tb: NamedConstGeneric,\n  \t*\t\td: [number, number],\n  \t*\t}} NamedConstGenericContainer\n  \t* @property {NamedConstGeneric} a\n  \t* @property {NamedConstGeneric} b\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{ type: \"a\"; value: string } | { type: \"b\"; value: number }} NestedEnum\n  \t* @property {{ type: \"a\"; value: string }} a\n  \t* @property {{ type: \"b\"; value: number }} b\n  \t*\n  \t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n  \t* \ta: string,\n  \t* } } | { t: \"D\"; c: First }} Ninth\n  \t* @property {{ t: \"A\"; c: string }} A\n  \t* @property {{ t: \"B\" }} B\n  \t* @property {{ t: \"C\"; c: {\n  \t* \ta: string,\n  \t* } }} C\n  \t* @property {{ t: \"D\"; c: First }} D\n  \t*\n  \t* @typedef {string | null} NonOptional\n  \t* @property {string | null} \"0\"\n  \t*\n  \t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n  \t* \ta: string | null,\n  \t* } }) & { A?: never; C?: never } | ({ C: {\n  \t* \ta?: string | null,\n  \t* } }) & { A?: never; B?: never }} OptionalInEnum\n  \t* @property {{ A?: string | null }} A\n  \t* @property {{ B: {\n  \t* \ta: string | null,\n  \t* } }} B\n  \t* @property {{ C: {\n  \t* \ta?: string | null,\n  \t* } }} C\n  \t*\n  \t* @typedef {string | null} OptionalOnNamedField\n  \t* @property {string | null} [\"0\"]\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: string | null,\n  \t*\t}} OptionalOnTransparentNamedField\n  \t* @property {string | null} b\n  \t*\n  \t* @typedef {{\n  \t*\t\toverriden_field: string,\n  \t*\t}} OverridenStruct\n  \t* @property {string} overriden_field\n  \t*\n  \t* @typedef {{\n  \t*\t\tfirst: Z,\n  \t*\t\tsecond: A,\n  \t*\t}} Pair<Z, A>\n  \t* @property {Z} first\n  \t* @property {A} second\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} PlaceholderInnerField\n  \t* @property {string} a\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: Recursive,\n  \t*\t}} Recursive\n  \t* @property {Recursive} demo\n  \t*\n  \t* @typedef {{ A: {\n  \t* \tdemo: RecursiveInEnum,\n  \t* } }} RecursiveInEnum\n  \t* @property {{ A: {\n  \t* \tdemo: RecursiveInEnum,\n  \t* } }} A\n  \t*\n  \t* @typedef {RecursiveInline} RecursiveInline\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: { [key in string]: RecursiveMapValue },\n  \t*\t}} RecursiveMapValue\n  \t* @property {{ [key in string]: RecursiveMapValue }} demo\n  \t*\n  \t* @typedef {RecursiveInline} RecursiveTransparent\n  \t* @property {RecursiveInline} \"0\"\n  \t*\n  \t* @typedef {TestEnum} RefStruct\n  \t* @property {TestEnum} \"0\"\n  \t*\n  \t* @typedef {{ [key in string]: null }} Regular\n  \t* @property {{ [key in string]: null }} \"0\"\n  \t*\n  \t* @typedef {\"OneWord\" | \"Two words\"} Rename\n  \t* @property {\"OneWord\"} OneWord\n  \t* @property {\"Two words\"} \"Two words\"\n  \t*\n  \t* @typedef {{\n  \t*\t\t\"a/b\": number,\n  \t*\t}} RenameSerdeSpecialChar\n  \t* @property {number} \"a/b\"\n  \t*\n  \t* @typedef {{\n  \t*\t\t\"@odata.context\": string,\n  \t*\t}} RenameWithWeirdCharsField\n  \t* @property {string} \"@odata.context\"\n  \t*\n  \t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n  \t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n  \t*\n  \t* @typedef {{\n  \t*\t\t\"\": string,\n  \t*\t\t\"a\\\"b\": string,\n  \t*\t\t\"a\\\\b\": string,\n  \t*\t\t\"line\\nbreak\": string,\n  \t*\t\t\"line\\u2028break\": string,\n  \t*\t\t\"line\\u2029break\": string,\n  \t*\t}} RenamedFieldKeys\n  \t* @property {string} \"\"\n  \t* @property {string} \"a\\\"b\"\n  \t* @property {string} \"a\\\\b\"\n  \t* @property {string} \"line\\nbreak\"\n  \t* @property {string} \"line\\u2028break\"\n  \t* @property {string} \"line\\u2029break\"\n  \t*\n  \t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n  \t* @property {\"a-b\"} \"a-b\"\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} Second\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: Second,\n  \t*\t}} Seventh\n  \t* @property {First} a\n  \t* @property {Second} b\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\tb: string,\n  \t*\t\tc: [number, string, number],\n  \t*\t\td: string[],\n  \t*\t\te: string | null,\n  \t*\t}} SimpleStruct\n  \t* @property {number} a\n  \t* @property {string} b\n  \t* @property {[number, string, number]} c\n  \t* @property {string[]} d\n  \t* @property {string | null} e\n  \t*\n  \t*  Some single-line comment\n  \t*\n  \t* @typedef {\n  \t*\t/**  Some single-line comment */\n  \t* ({ A: number }) & { B?: never } | \n  \t*\t/**  Some single-line comment */\n  \t* ({ B: {\n  \t* \t/**  Some single-line comment */\n  \t* \ta: number,\n  \t* } }) & { A?: never }} SingleLineComment\n  \t* @property {\n  \t* /**  Some single-line comment */\n  \t* { A: number }} A - Some single-line comment\n  \t* @property {\n  \t* /**  Some single-line comment */\n  \t* { B: {\n  \t* \t/**  Some single-line comment */\n  \t* \ta: number,\n  \t* } }} B - Some single-line comment\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: First,\n  \t*\t}} Sixth\n  \t* @property {First} a\n  \t* @property {First} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: number,\n  \t*\t}} SkipField\n  \t* @property {number} b\n  \t*\n  \t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n  \t* \tb: number,\n  \t* } }) & { A?: never }} SkipNamedFieldInVariant\n  \t* @property {{ A: Record<string, never> }} A\n  \t* @property {{ B: {\n  \t* \tb: number,\n  \t* } }} B\n  \t*\n  \t* @typedef {Record<string, never>} SkipOnlyField\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} SkipStructFields\n  \t* @property {number} a\n  \t*\n  \t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n  \t* @property {\"A\"} A\n  \t* @property {{ B: [number] }} B\n  \t*\n  \t* @typedef {{ A: string }} SkipVariant\n  \t* @property {{ A: string }} A\n  \t*\n  \t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n  \t* @property {{ tag: \"A\"; data: string }} A\n  \t*\n  \t* @typedef {{ A: {\n  \t* \ta: string,\n  \t* } }} SkipVariant3\n  \t* @property {{ A: {\n  \t* \ta: string,\n  \t* } }} A\n  \t*\n  \t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n  \t* @property {{ type: \"A\" }} A\n  \t* @property {{ type: \"B\"; data: string }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} SpectaSkipNonTypeField\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t*\t\tstring_ident: string,\n  \t*\t\tu32_ident: number,\n  \t*\t\tpath: string,\n  \t*\t\ttuple: [string, number],\n  \t*\t}} SpectaTypeOverride\n  \t* @property {string} string_ident\n  \t* @property {number} u32_ident\n  \t* @property {string} path\n  \t* @property {[string, number]} tuple\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: string,\n  \t*\t}} Struct2\n  \t* @property {string} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tt: \"StructNew\",\n  \t*\t\ta: string,\n  \t*\t}} StructNew\n  \t* @property {\"StructNew\"} t\n  \t* @property {string} a\n  \t*\n  \t* @typedef {{\n  \t*\t\tA: number,\n  \t*\t\tB: number,\n  \t*\t}} StructRenameAllUppercase\n  \t* @property {number} A\n  \t* @property {number} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: string,\n  \t*\t}} StructWithAlias\n  \t* @property {string} field\n  \t*\n  \t* @typedef {{\n  \t*\t\trenamed_field: string,\n  \t*\t}} StructWithAliasAndRename\n  \t* @property {string} renamed_field\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: string,\n  \t*\t}} StructWithMultipleAliases\n  \t* @property {string} field\n  \t*\n  \t* @typedef {{\n  \t*\t\ttype: \"TagOnStructWithInline\",\n  \t*\t\ta: First,\n  \t*\t\tb: {\n  \t*\t\t\ta: string,\n  \t*\t\t},\n  \t*\t}} TagOnStructWithInline\n  \t* @property {\"TagOnStructWithInline\"} type\n  \t* @property {First} a\n  \t* @property {{\n  \t*\t\ta: string,\n  \t*\t}} b\n  \t*\n  \t* @typedef {string | \"B\" | {\n  \t* \ta: string,\n  \t* } | First} Tenth\n  \t* @property {string} A\n  \t* @property {\"B\"} B\n  \t* @property {{\n  \t* \ta: string,\n  \t* }} C\n  \t* @property {First} D\n  \t*\n  \t* @typedef {never} TestCollectionRegister\n  \t*\n  \t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n  \t* \ta: number,\n  \t* } }) & { Multiple?: never; Single?: never }} TestEnum\n  \t* @property {\"Unit\"} Unit\n  \t* @property {{ Single: number }} Single\n  \t* @property {{ Multiple: [number, number] }} Multiple\n  \t* @property {{ Struct: {\n  \t* \ta: number,\n  \t* } }} Struct\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: { [key in string]: string },\n  \t*\t\tc: First,\n  \t*\t} & First} Third\n  \t* @property {{ [key in string]: string }} b\n  \t* @property {First} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} ToBeFlattened\n  \t* @property {string} a\n  \t*\n  \t* @typedef {string} TransparentStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {TransparentTypeInner} TransparentType\n  \t* @property {TransparentTypeInner} \"0\"\n  \t*\n  \t* @typedef {null} TransparentType2\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tinner: string,\n  \t*\t}} TransparentTypeInner\n  \t* @property {string} inner\n  \t*\n  \t* @typedef {string} TransparentTypeWithOverride\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {null} TransparentWithSkip\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {string} TransparentWithSkip2\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {string} TransparentWithSkip3\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n  \t* @property {number[]} \"0\"\n  \t* @property {[number[], number[]]} \"1\"\n  \t* @property {[number[], number[], number[]]} \"2\"\n  \t*\n  \t* @typedef {string} TupleStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {number} TupleStruct1\n  \t* @property {number} \"0\"\n  \t*\n  \t* @typedef {[number, boolean, string]} TupleStruct3\n  \t* @property {number} \"0\"\n  \t* @property {boolean} \"1\"\n  \t* @property {string} \"2\"\n  \t*\n  \t* @typedef {string} TupleStructWithRep\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {null} Unit1\n  \t*\n  \t* @typedef {Record<string, never>} Unit2\n  \t*\n  \t* @typedef {[]} Unit3\n  \t*\n  \t* @typedef {null} Unit4\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {\"A\"} Unit5\n  \t* @property {\"A\"} A\n  \t*\n  \t* @typedef {{ A: null }} Unit6\n  \t* @property {{ A: null }} A\n  \t*\n  \t* @typedef {{ A: Record<string, never> }} Unit7\n  \t* @property {{ A: Record<string, never> }} A\n  \t*\n  \t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t* @property {\"C\"} C\n  \t*\n  \t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n  \t* @property {string} A\n  \t* @property {number} B\n  \t* @property {number} C\n  \t* @property {{ id: string }} D\n  \t* @property {[string, boolean]} E\n  \t*\n  \t* @typedef {string | number} UntaggedVariantsKey\n  \t* @property {string} A\n  \t* @property {number} B\n  \t* @property {number} C\n  \t*\n  \t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n  \t* @property {null} A\n  \t* @property {number} B\n  \t* @property {null} C\n  \t*\n  \t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n  \t* @property {string} A\n  \t* @property {[number, string]} B\n  \t* @property {number} C\n  \t*\n  \t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n  \t* @property {{ field: string }} A\n  \t* @property {{ other: number }} B\n  \t*\n  \t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n  \t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n  \t*\n  \t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n  \t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n  \t*/\n  ════════════════════════════════════════\n\ntests/\n  tests/\n    types.js (29458 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    \n    /**\n     * @typedef {import(\"../../std/ops\")} std$ops\n     * @typedef {import(\"../../std/result\")} std$result\n     * @typedef {import(\"../../test/types\")} test$types\n     * @typedef {import(\"../../test/types/type_type\")} test$types$type_type\n     */\n    /**\n    \t* @typedef {{\n    \t*\t\ti8: number,\n    \t*\t\ti16: number,\n    \t*\t\ti32: number,\n    \t*\t\tu8: number,\n    \t*\t\tu16: number,\n    \t*\t\tu32: number,\n    \t*\t\tf32: number,\n    \t*\t\tf64: number,\n    \t*\t\tbool: boolean,\n    \t*\t\tchar: string,\n    \t*\t\t\"Range<i32>\": std$ops.Range<number>,\n    \t*\t\t\"RangeInclusive<i32>\": std$ops.RangeInclusive<number>,\n    \t*\t\t\"()\": null,\n    \t*\t\t\"(String, i32)\": [string, number],\n    \t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n    \t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n    \t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n    \t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n    \t*\t\tString: string,\n    \t*\t\tPathBuf: string,\n    \t*\t\tIpAddr: string,\n    \t*\t\tIpv4Addr: string,\n    \t*\t\tIpv6Addr: string,\n    \t*\t\tSocketAddr: string,\n    \t*\t\tSocketAddrV4: string,\n    \t*\t\tSocketAddrV6: string,\n    \t*\t\t\"Cow<'static, str>\": string,\n    \t*\t\t\"Cow<'static, i32>\": number,\n    \t*\t\t\"&'static str\": string,\n    \t*\t\t\"&'static bool\": boolean,\n    \t*\t\t\"&'static i32\": number,\n    \t*\t\t\"Vec<i32>\": number[],\n    \t*\t\t\"&'static [i32]\": number[],\n    \t*\t\t\"&'static [i32; 3]\": [number, number, number],\n    \t*\t\t\"[i32; 3]\": [number, number, number],\n    \t*\t\t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \t*\t\t\"&'static [MyEnum]\": test$types.MyEnum[],\n    \t*\t\t\"&'static [MyEnum; 6]\": [test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum],\n    \t*\t\t\"[MyEnum; 2]\": [test$types.MyEnum, test$types.MyEnum],\n    \t*\t\t\"&'static [i32; 1]\": [number],\n    \t*\t\t\"&'static [i32; 0]\": [],\n    \t*\t\t\"Option<i32>\": number | null,\n    \t*\t\t\"Option<()>\": null,\n    \t*\t\t\"Option<Vec<i32>>\": number[] | null,\n    \t*\t\t\"Result<String, i32>\": std$result.Result<string, number>,\n    \t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n    \t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n    \t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n    \t*\t\t\"Option<Option<String>>\": string | null,\n    \t*\t\t\"Option<Option<Option<String>>>\": string | null,\n    \t*\t\t\"PhantomData<()>\": null,\n    \t*\t\t\"PhantomData<String>\": null,\n    \t*\t\tInfallible: never,\n    \t*\t\tUnit1: test$types.Unit1,\n    \t*\t\tUnit2: test$types.Unit2,\n    \t*\t\tUnit3: test$types.Unit3,\n    \t*\t\tUnit4: test$types.Unit4,\n    \t*\t\tUnit5: test$types.Unit5,\n    \t*\t\tUnit6: test$types.Unit6,\n    \t*\t\tUnit7: test$types.Unit7,\n    \t*\t\tSimpleStruct: test$types.SimpleStruct,\n    \t*\t\tTupleStruct1: test$types.TupleStruct1,\n    \t*\t\tTupleStruct3: test$types.TupleStruct3,\n    \t*\t\tTestEnum: test$types.TestEnum,\n    \t*\t\tRefStruct: test$types.RefStruct,\n    \t*\t\tInlinerStruct: test$types.InlinerStruct,\n    \t*\t\t\"GenericStruct<i32>\": test$types.GenericStruct<number>,\n    \t*\t\t\"GenericStruct<String>\": test$types.GenericStruct<string>,\n    \t*\t\tFlattenEnumStruct: test$types.FlattenEnumStruct,\n    \t*\t\tOverridenStruct: test$types.OverridenStruct,\n    \t*\t\tHasGenericAlias: test$types.HasGenericAlias,\n    \t*\t\tEnumMacroAttributes: test$types.EnumMacroAttributes,\n    \t*\t\tInlineEnumField: test$types.InlineEnumField,\n    \t*\t\tInlineOptionalType: test$types.InlineOptionalType,\n    \t*\t\tRename: test$types.Rename,\n    \t*\t\tTransparentType: test$types.TransparentType,\n    \t*\t\tTransparentType2: test$types.TransparentType2,\n    \t*\t\tTransparentTypeWithOverride: test$types.TransparentTypeWithOverride,\n    \t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n    \t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test$types.BasicEnum]: null }>,\n    \t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test$types.BasicEnum]: number }>,\n    \t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n    \t*\t\t\"Vec<PlaceholderInnerField>\": test$types.PlaceholderInnerField[],\n    \t*\t\tEnumReferenceRecordKey: test$types.EnumReferenceRecordKey,\n    \t*\t\tFlattenOnNestedEnum: test$types.FlattenOnNestedEnum,\n    \t*\t\tMyEmptyInput: test$types.MyEmptyInput,\n    \t*\t\t\"(String)\": string,\n    \t*\t\t\"(String,)\": [string],\n    \t*\t\tExtraBracketsInTupleVariant: test$types.ExtraBracketsInTupleVariant,\n    \t*\t\tExtraBracketsInUnnamedStruct: test$types.ExtraBracketsInUnnamedStruct,\n    \t*\t\t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \t*\t\tInlineTuple: test$types.InlineTuple,\n    \t*\t\tInlineTuple2: test$types.InlineTuple2,\n    \t*\t\t\"Box<str>\": string,\n    \t*\t\t\"Box<String>\": string,\n    \t*\t\tSkippedFieldWithinVariant: test$types.SkippedFieldWithinVariant,\n    \t*\t\tKebabCase: test$types.KebabCase,\n    \t*\t\t\"&[&str]\": string[],\n    \t*\t\t\"Issue281<'_>\": test$types.Issue281,\n    \t*\t\t\"LifetimeGenericStruct<'_, i32>\": test$types.LifetimeGenericStruct<number>,\n    \t*\t\t\"LifetimeGenericEnum<'_, i32>\": test$types.LifetimeGenericEnum<number>,\n    \t*\t\tRenameWithWeirdCharsField: test$types.RenameWithWeirdCharsField,\n    \t*\t\tRenameWithWeirdCharsVariant: test$types.RenameWithWeirdCharsVariant,\n    \t*\t\tRenamedFieldKeys: test$types.RenamedFieldKeys,\n    \t*\t\tRenamedVariantWithSkippedPayload: test$types.RenamedVariantWithSkippedPayload,\n    \t*\t\t\"type_type::Type\": test$types$type_type.Type,\n    \t*\t\tActualType: test$types.ActualType,\n    \t*\t\tSpectaTypeOverride: test$types.SpectaTypeOverride,\n    \t*\t\tContainerTypeOverrideStruct: test$types.ContainerTypeOverrideStruct,\n    \t*\t\tContainerTypeOverrideEnum: test$types.ContainerTypeOverrideEnum,\n    \t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test$types.ContainerTypeOverrideGeneric,\n    \t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": test$types.ContainerTypeOverrideToGeneric<number>,\n    \t*\t\tContainerTypeOverrideTuple: test$types.ContainerTypeOverrideTuple,\n    \t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": test$types.ContainerTypeOverrideTupleGeneric<number>,\n    \t*\t\tInvalidToValidType: test$types.InvalidToValidType,\n    \t*\t\tTupleStruct: test$types.TupleStruct,\n    \t*\t\tTupleStructWithRep: test$types.TupleStructWithRep,\n    \t*\t\t\"GenericTupleStruct<String>\": test$types.GenericTupleStruct<string>,\n    \t*\t\tBracedStruct: test$types.BracedStruct,\n    \t*\t\tStruct: test$types.StructNew,\n    \t*\t\tStruct2: test$types.Struct2,\n    \t*\t\tEnum: test$types.Enum,\n    \t*\t\tEnum2: test$types.Enum2,\n    \t*\t\tEnum3: test$types.Enum3,\n    \t*\t\tStructRenameAllUppercase: test$types.StructRenameAllUppercase,\n    \t*\t\tRenameSerdeSpecialChar: test$types.RenameSerdeSpecialChar,\n    \t*\t\tEnumRenameAllUppercase: test$types.EnumRenameAllUppercase,\n    \t*\t\tRecursive: test$types.Recursive,\n    \t*\t\tRecursiveMapValue: test$types.RecursiveMapValue,\n    \t*\t\tRecursiveTransparent: test$types.RecursiveTransparent,\n    \t*\t\tRecursiveInEnum: test$types.RecursiveInEnum,\n    \t*\t\tNonOptional: test$types.NonOptional,\n    \t*\t\tOptionalOnNamedField: test$types.OptionalOnNamedField,\n    \t*\t\tOptionalOnTransparentNamedField: test$types.OptionalOnTransparentNamedField,\n    \t*\t\tOptionalInEnum: test$types.OptionalInEnum,\n    \t*\t\tUntaggedVariants: test$types.UntaggedVariants,\n    \t*\t\tUntaggedVariantsWithoutValue: test$types.UntaggedVariantsWithoutValue,\n    \t*\t\tUntaggedVariantsWithDuplicateBranches: test$types.UntaggedVariantsWithDuplicateBranches,\n    \t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n    \t*\t\tRegular: test$types.Regular,\n    \t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n    \t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in test$types.TransparentStruct]: null },\n    \t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test$types.UnitVariants]: null }>,\n    \t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test$types.UntaggedVariantsKey]: null }>,\n    \t*\t\tValidMaybeValidKey: test$types.ValidMaybeValidKey,\n    \t*\t\tValidMaybeValidKeyNested: test$types.ValidMaybeValidKeyNested,\n    \t*\t\tMacroStruct: test$types.MacroStruct,\n    \t*\t\tMacroStruct2: test$types.MacroStruct2,\n    \t*\t\tMacroEnum: test$types.MacroEnum,\n    \t*\t\tDeprecatedType: test$types.DeprecatedType,\n    \t*\t\tDeprecatedTypeWithMsg: test$types.DeprecatedTypeWithMsg,\n    \t*\t\tDeprecatedTypeWithMsg2: test$types.DeprecatedTypeWithMsg2,\n    \t*\t\tDeprecatedFields: test$types.DeprecatedFields,\n    \t*\t\tDeprecatedTupleVariant: test$types.DeprecatedTupleVariant,\n    \t*\t\tDeprecatedEnumVariants: test$types.DeprecatedEnumVariants,\n    \t*\t\tCommentedStruct: test$types.CommentedStruct,\n    \t*\t\tCommentedEnum: test$types.CommentedEnum,\n    \t*\t\tSingleLineComment: test$types.SingleLineComment,\n    \t*\t\tNonGeneric: test$types.Demo<number, boolean>,\n    \t*\t\t\"HalfGenericA<u8>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"HalfGenericB<bool>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"FullGeneric<u8, bool>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"Another<bool>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"MapA<u32>\": { [key in string]: number },\n    \t*\t\t\"MapB<u32>\": { [key in number]: string },\n    \t*\t\t\"MapC<u32>\": { [key in string]: test$types.AGenericStruct<number> },\n    \t*\t\t\"AGenericStruct<u32>\": test$types.AGenericStruct<number>,\n    \t*\t\tA: test$types.A,\n    \t*\t\tDoubleFlattened: test$types.DoubleFlattened,\n    \t*\t\tFlattenedInner: test$types.FlattenedInner,\n    \t*\t\tBoxFlattened: test$types.BoxFlattened,\n    \t*\t\tBoxInline: test$types.BoxInline,\n    \t*\t\tFirst: test$types.First,\n    \t*\t\tSecond: test$types.Second,\n    \t*\t\tThird: test$types.Third,\n    \t*\t\tFourth: test$types.Fourth,\n    \t*\t\tTagOnStructWithInline: test$types.TagOnStructWithInline,\n    \t*\t\tSixth: test$types.Sixth,\n    \t*\t\tSeventh: test$types.Seventh,\n    \t*\t\tEight: test$types.Eight,\n    \t*\t\tNinth: test$types.Ninth,\n    \t*\t\tTenth: test$types.Tenth,\n    \t*\t\tMyEnumTagged: test$types.MyEnumTagged,\n    \t*\t\tMyEnumExternal: test$types.MyEnumExternal,\n    \t*\t\tMyEnumAdjacent: test$types.MyEnumAdjacent,\n    \t*\t\tMyEnumUntagged: test$types.MyEnumUntagged,\n    \t*\t\tEmptyStruct: test$types.EmptyStruct,\n    \t*\t\tEmptyStructWithTag: test$types.EmptyStructWithTag,\n    \t*\t\tAdjacentlyTagged: test$types.AdjacentlyTagged,\n    \t*\t\tLoadProjectEvent: test$types.LoadProjectEvent,\n    \t*\t\tExternallyTagged: test$types.ExternallyTagged,\n    \t*\t\tIssue221External: test$types.Issue221External,\n    \t*\t\tInternallyTaggedD: test$types.InternallyTaggedD,\n    \t*\t\tInternallyTaggedE: test$types.InternallyTaggedE,\n    \t*\t\tInternallyTaggedF: test$types.InternallyTaggedF,\n    \t*\t\tInternallyTaggedH: test$types.InternallyTaggedH,\n    \t*\t\tInternallyTaggedL: test$types.InternallyTaggedL,\n    \t*\t\tInternallyTaggedM: test$types.InternallyTaggedM,\n    \t*\t\tStructWithAlias: test$types.StructWithAlias,\n    \t*\t\tStructWithMultipleAliases: test$types.StructWithMultipleAliases,\n    \t*\t\tStructWithAliasAndRename: test$types.StructWithAliasAndRename,\n    \t*\t\tEnumWithVariantAlias: test$types.EnumWithVariantAlias,\n    \t*\t\tEnumWithMultipleVariantAliases: test$types.EnumWithMultipleVariantAliases,\n    \t*\t\tEnumWithVariantAliasAndRename: test$types.EnumWithVariantAliasAndRename,\n    \t*\t\tInternallyTaggedWithAlias: test$types.InternallyTaggedWithAlias,\n    \t*\t\tAdjacentlyTaggedWithAlias: test$types.AdjacentlyTaggedWithAlias,\n    \t*\t\tUntaggedWithAlias: test$types.UntaggedWithAlias,\n    \t*\t\tIssue221UntaggedSafe: test$types.Issue221UntaggedSafe,\n    \t*\t\tIssue221UntaggedMixed: test$types.Issue221UntaggedMixed,\n    \t*\t\tEmptyEnum: test$types.EmptyEnum,\n    \t*\t\tEmptyEnumTagged: test$types.EmptyEnumTagged,\n    \t*\t\tEmptyEnumTaggedWContent: test$types.EmptyEnumTaggedWContent,\n    \t*\t\tEmptyEnumUntagged: test$types.EmptyEnumUntagged,\n    \t*\t\tSkipOnlyField: test$types.SkipOnlyField,\n    \t*\t\tSkipField: test$types.SkipField,\n    \t*\t\tSkipVariant: test$types.SkipVariant,\n    \t*\t\tSkipUnnamedFieldInVariant: test$types.SkipUnnamedFieldInVariant,\n    \t*\t\tSkipNamedFieldInVariant: test$types.SkipNamedFieldInVariant,\n    \t*\t\tTransparentWithSkip: test$types.TransparentWithSkip,\n    \t*\t\tTransparentWithSkip2: test$types.TransparentWithSkip2,\n    \t*\t\tTransparentWithSkip3: test$types.TransparentWithSkip3,\n    \t*\t\tSkipVariant2: test$types.SkipVariant2,\n    \t*\t\tSkipVariant3: test$types.SkipVariant3,\n    \t*\t\tSkipStructFields: test$types.SkipStructFields,\n    \t*\t\tSpectaSkipNonTypeField: test$types.SpectaSkipNonTypeField,\n    \t*\t\tFlattenA: test$types.FlattenA,\n    \t*\t\tFlattenB: test$types.FlattenB,\n    \t*\t\tFlattenC: test$types.FlattenC,\n    \t*\t\tFlattenD: test$types.FlattenD,\n    \t*\t\tFlattenE: test$types.FlattenE,\n    \t*\t\tFlattenF: test$types.FlattenF,\n    \t*\t\tFlattenG: test$types.FlattenG,\n    \t*\t\tTupleNested: test$types.TupleNested,\n    \t*\t\t\"Generic1<()>\": test$types.Generic1<null>,\n    \t*\t\t\"GenericAutoBound<()>\": test$types.GenericAutoBound<null>,\n    \t*\t\t\"GenericAutoBound2<()>\": test$types.GenericAutoBound2<null>,\n    \t*\t\tContainer1: test$types.Container1,\n    \t*\t\t\"Generic2<(), String, i32>\": test$types.Generic2<null, string, number>,\n    \t*\t\t\"GenericNewType1<()>\": test$types.GenericNewType1<null>,\n    \t*\t\t\"GenericTuple<()>\": test$types.GenericTuple<null>,\n    \t*\t\t\"GenericStruct2<()>\": test$types.GenericStruct2<null>,\n    \t*\t\t\"InlineGenericNewtype<String>\": string,\n    \t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n    \t* \tvalue: string,\n    \t* } }) & { Unnamed?: never }],\n    \t*\t\t\"InlineFlattenGenericsG<()>\": test$types.InlineFlattenGenericsG<null>,\n    \t*\t\tInlineFlattenGenerics: test$types.InlineFlattenGenerics,\n    \t*\t\tGenericDefault: test$types.GenericDefault,\n    \t*\t\tChainedGenericDefault: test$types.ChainedGenericDefault,\n    \t*\t\t\"ChainedGenericDefault<String, String>\": test$types.ChainedGenericDefault,\n    \t*\t\t\"ChainedGenericDefault<i32>\": test$types.ChainedGenericDefault<number, number>,\n    \t*\t\t\"ChainedGenericDefault<String, i32>\": test$types.ChainedGenericDefault<string, number>,\n    \t*\t\tGenericDefaultSkipped: test$types.GenericDefaultSkipped<string>,\n    \t*\t\tGenericDefaultSkippedNonType: test$types.GenericDefaultSkippedNonType<unknown>,\n    \t*\t\tGenericParameterOrderPreserved: test$types.GenericParameterOrderPreserved,\n    \t*\t\tConstGenericInNonConstContainer: test$types.ConstGenericInNonConstContainer,\n    \t*\t\tConstGenericInConstContainer: test$types.ConstGenericInConstContainer,\n    \t*\t\tNamedConstGenericContainer: test$types.NamedConstGenericContainer,\n    \t*\t\tInlineConstGenericContainer: test$types.InlineConstGenericContainer,\n    \t*\t\tInlineRecursiveConstGenericContainer: test$types.InlineRecursiveConstGenericContainer,\n    \t*\t\tTestCollectionRegister: test$types.TestCollectionRegister,\n    \t*\t\tTestCollectionRegister: test$types.TestCollectionRegister,\n    \t*\t}} Primitives\n    \t* @property {number} i8\n    \t* @property {number} i16\n    \t* @property {number} i32\n    \t* @property {number} u8\n    \t* @property {number} u16\n    \t* @property {number} u32\n    \t* @property {number} f32\n    \t* @property {number} f64\n    \t* @property {boolean} bool\n    \t* @property {string} char\n    \t* @property {std$ops.Range<number>} \"Range<i32>\"\n    \t* @property {std$ops.RangeInclusive<number>} \"RangeInclusive<i32>\"\n    \t* @property {null} \"()\"\n    \t* @property {[string, number]} \"(String, i32)\"\n    \t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n    \t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n    \t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n    \t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n    \t* @property {string} String\n    \t* @property {string} PathBuf\n    \t* @property {string} IpAddr\n    \t* @property {string} Ipv4Addr\n    \t* @property {string} Ipv6Addr\n    \t* @property {string} SocketAddr\n    \t* @property {string} SocketAddrV4\n    \t* @property {string} SocketAddrV6\n    \t* @property {string} \"Cow<'static, str>\"\n    \t* @property {number} \"Cow<'static, i32>\"\n    \t* @property {string} \"&'static str\"\n    \t* @property {boolean} \"&'static bool\"\n    \t* @property {number} \"&'static i32\"\n    \t* @property {number[]} \"Vec<i32>\"\n    \t* @property {number[]} \"&'static [i32]\"\n    \t* @property {[number, number, number]} \"&'static [i32; 3]\"\n    \t* @property {[number, number, number]} \"[i32; 3]\"\n    \t* @property {test$types.MyEnum[]} \"Vec<MyEnum>\"\n    \t* @property {test$types.MyEnum[]} \"&'static [MyEnum]\"\n    \t* @property {[test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum]} \"&'static [MyEnum; 6]\"\n    \t* @property {[test$types.MyEnum, test$types.MyEnum]} \"[MyEnum; 2]\"\n    \t* @property {[number]} \"&'static [i32; 1]\"\n    \t* @property {[]} \"&'static [i32; 0]\"\n    \t* @property {number | null} \"Option<i32>\"\n    \t* @property {null} \"Option<()>\"\n    \t* @property {number[] | null} \"Option<Vec<i32>>\"\n    \t* @property {std$result.Result<string, number>} \"Result<String, i32>\"\n    \t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n    \t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n    \t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n    \t* @property {string | null} \"Option<Option<String>>\"\n    \t* @property {string | null} \"Option<Option<Option<String>>>\"\n    \t* @property {null} \"PhantomData<()>\"\n    \t* @property {null} \"PhantomData<String>\"\n    \t* @property {never} Infallible\n    \t* @property {test$types.Unit1} Unit1\n    \t* @property {test$types.Unit2} Unit2\n    \t* @property {test$types.Unit3} Unit3\n    \t* @property {test$types.Unit4} Unit4\n    \t* @property {test$types.Unit5} Unit5\n    \t* @property {test$types.Unit6} Unit6\n    \t* @property {test$types.Unit7} Unit7\n    \t* @property {test$types.SimpleStruct} SimpleStruct\n    \t* @property {test$types.TupleStruct1} TupleStruct1\n    \t* @property {test$types.TupleStruct3} TupleStruct3\n    \t* @property {test$types.TestEnum} TestEnum\n    \t* @property {test$types.RefStruct} RefStruct\n    \t* @property {test$types.InlinerStruct} InlinerStruct\n    \t* @property {test$types.GenericStruct<number>} \"GenericStruct<i32>\"\n    \t* @property {test$types.GenericStruct<string>} \"GenericStruct<String>\"\n    \t* @property {test$types.FlattenEnumStruct} FlattenEnumStruct\n    \t* @property {test$types.OverridenStruct} OverridenStruct\n    \t* @property {test$types.HasGenericAlias} HasGenericAlias\n    \t* @property {test$types.EnumMacroAttributes} EnumMacroAttributes\n    \t* @property {test$types.InlineEnumField} InlineEnumField\n    \t* @property {test$types.InlineOptionalType} InlineOptionalType\n    \t* @property {test$types.Rename} Rename\n    \t* @property {test$types.TransparentType} TransparentType\n    \t* @property {test$types.TransparentType2} TransparentType2\n    \t* @property {test$types.TransparentTypeWithOverride} TransparentTypeWithOverride\n    \t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n    \t* @property {Partial<{ [key in test$types.BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n    \t* @property {Partial<{ [key in test$types.BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n    \t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n    \t* @property {test$types.PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n    \t* @property {test$types.EnumReferenceRecordKey} EnumReferenceRecordKey\n    \t* @property {test$types.FlattenOnNestedEnum} FlattenOnNestedEnum\n    \t* @property {test$types.MyEmptyInput} MyEmptyInput\n    \t* @property {string} \"(String)\"\n    \t* @property {[string]} \"(String,)\"\n    \t* @property {test$types.ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n    \t* @property {test$types.ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n    \t* @property {test$types.MyEnum[]} \"Vec<MyEnum>\"\n    \t* @property {test$types.InlineTuple} InlineTuple\n    \t* @property {test$types.InlineTuple2} InlineTuple2\n    \t* @property {string} \"Box<str>\"\n    \t* @property {string} \"Box<String>\"\n    \t* @property {test$types.SkippedFieldWithinVariant} SkippedFieldWithinVariant\n    \t* @property {test$types.KebabCase} KebabCase\n    \t* @property {string[]} \"&[&str]\"\n    \t* @property {test$types.Issue281} \"Issue281<'_>\"\n    \t* @property {test$types.LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n    \t* @property {test$types.LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n    \t* @property {test$types.RenameWithWeirdCharsField} RenameWithWeirdCharsField\n    \t* @property {test$types.RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n    \t* @property {test$types.RenamedFieldKeys} RenamedFieldKeys\n    \t* @property {test$types.RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n    \t* @property {test$types$type_type.Type} \"type_type::Type\"\n    \t* @property {test$types.ActualType} ActualType\n    \t* @property {test$types.SpectaTypeOverride} SpectaTypeOverride\n    \t* @property {test$types.ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n    \t* @property {test$types.ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n    \t* @property {test$types.ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n    \t* @property {test$types.ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n    \t* @property {test$types.ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n    \t* @property {test$types.ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n    \t* @property {test$types.InvalidToValidType} InvalidToValidType\n    \t* @property {test$types.TupleStruct} TupleStruct\n    \t* @property {test$types.TupleStructWithRep} TupleStructWithRep\n    \t* @property {test$types.GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n    \t* @property {test$types.BracedStruct} BracedStruct\n    \t* @property {test$types.StructNew} Struct\n    \t* @property {test$types.Struct2} Struct2\n    \t* @property {test$types.Enum} Enum\n    \t* @property {test$types.Enum2} Enum2\n    \t* @property {test$types.Enum3} Enum3\n    \t* @property {test$types.StructRenameAllUppercase} StructRenameAllUppercase\n    \t* @property {test$types.RenameSerdeSpecialChar} RenameSerdeSpecialChar\n    \t* @property {test$types.EnumRenameAllUppercase} EnumRenameAllUppercase\n    \t* @property {test$types.Recursive} Recursive\n    \t* @property {test$types.RecursiveMapValue} RecursiveMapValue\n    \t* @property {test$types.RecursiveTransparent} RecursiveTransparent\n    \t* @property {test$types.RecursiveInEnum} RecursiveInEnum\n    \t* @property {test$types.NonOptional} NonOptional\n    \t* @property {test$types.OptionalOnNamedField} OptionalOnNamedField\n    \t* @property {test$types.OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n    \t* @property {test$types.OptionalInEnum} OptionalInEnum\n    \t* @property {test$types.UntaggedVariants} UntaggedVariants\n    \t* @property {test$types.UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n    \t* @property {test$types.UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n    \t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n    \t* @property {test$types.Regular} Regular\n    \t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n    \t* @property {{ [key in test$types.TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n    \t* @property {Partial<{ [key in test$types.UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n    \t* @property {Partial<{ [key in test$types.UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n    \t* @property {test$types.ValidMaybeValidKey} ValidMaybeValidKey\n    \t* @property {test$types.ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n    \t* @property {test$types.MacroStruct} MacroStruct\n    \t* @property {test$types.MacroStruct2} MacroStruct2\n    \t* @property {test$types.MacroEnum} MacroEnum\n    \t* @property {test$types.DeprecatedType} DeprecatedType\n    \t* @property {test$types.DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n    \t* @property {test$types.DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n    \t* @property {test$types.DeprecatedFields} DeprecatedFields\n    \t* @property {test$types.DeprecatedTupleVariant} DeprecatedTupleVariant\n    \t* @property {test$types.DeprecatedEnumVariants} DeprecatedEnumVariants\n    \t* @property {test$types.CommentedStruct} CommentedStruct\n    \t* @property {test$types.CommentedEnum} CommentedEnum\n    \t* @property {test$types.SingleLineComment} SingleLineComment\n    \t* @property {test$types.Demo<number, boolean>} NonGeneric\n    \t* @property {test$types.Demo<number, boolean>} \"HalfGenericA<u8>\"\n    \t* @property {test$types.Demo<number, boolean>} \"HalfGenericB<bool>\"\n    \t* @property {test$types.Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n    \t* @property {test$types.Demo<number, boolean>} \"Another<bool>\"\n    \t* @property {{ [key in string]: number }} \"MapA<u32>\"\n    \t* @property {{ [key in number]: string }} \"MapB<u32>\"\n    \t* @property {{ [key in string]: test$types.AGenericStruct<number> }} \"MapC<u32>\"\n    \t* @property {test$types.AGenericStruct<number>} \"AGenericStruct<u32>\"\n    \t* @property {test$types.A} A\n    \t* @property {test$types.DoubleFlattened} DoubleFlattened\n    \t* @property {test$types.FlattenedInner} FlattenedInner\n    \t* @property {test$types.BoxFlattened} BoxFlattened\n    \t* @property {test$types.BoxInline} BoxInline\n    \t* @property {test$types.First} First\n    \t* @property {test$types.Second} Second\n    \t* @property {test$types.Third} Third\n    \t* @property {test$types.Fourth} Fourth\n    \t* @property {test$types.TagOnStructWithInline} TagOnStructWithInline\n    \t* @property {test$types.Sixth} Sixth\n    \t* @property {test$types.Seventh} Seventh\n    \t* @property {test$types.Eight} Eight\n    \t* @property {test$types.Ninth} Ninth\n    \t* @property {test$types.Tenth} Tenth\n    \t* @property {test$types.MyEnumTagged} MyEnumTagged\n    \t* @property {test$types.MyEnumExternal} MyEnumExternal\n    \t* @property {test$types.MyEnumAdjacent} MyEnumAdjacent\n    \t* @property {test$types.MyEnumUntagged} MyEnumUntagged\n    \t* @property {test$types.EmptyStruct} EmptyStruct\n    \t* @property {test$types.EmptyStructWithTag} EmptyStructWithTag\n    \t* @property {test$types.AdjacentlyTagged} AdjacentlyTagged\n    \t* @property {test$types.LoadProjectEvent} LoadProjectEvent\n    \t* @property {test$types.ExternallyTagged} ExternallyTagged\n    \t* @property {test$types.Issue221External} Issue221External\n    \t* @property {test$types.InternallyTaggedD} InternallyTaggedD\n    \t* @property {test$types.InternallyTaggedE} InternallyTaggedE\n    \t* @property {test$types.InternallyTaggedF} InternallyTaggedF\n    \t* @property {test$types.InternallyTaggedH} InternallyTaggedH\n    \t* @property {test$types.InternallyTaggedL} InternallyTaggedL\n    \t* @property {test$types.InternallyTaggedM} InternallyTaggedM\n    \t* @property {test$types.StructWithAlias} StructWithAlias\n    \t* @property {test$types.StructWithMultipleAliases} StructWithMultipleAliases\n    \t* @property {test$types.StructWithAliasAndRename} StructWithAliasAndRename\n    \t* @property {test$types.EnumWithVariantAlias} EnumWithVariantAlias\n    \t* @property {test$types.EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n    \t* @property {test$types.EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n    \t* @property {test$types.InternallyTaggedWithAlias} InternallyTaggedWithAlias\n    \t* @property {test$types.AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n    \t* @property {test$types.UntaggedWithAlias} UntaggedWithAlias\n    \t* @property {test$types.Issue221UntaggedSafe} Issue221UntaggedSafe\n    \t* @property {test$types.Issue221UntaggedMixed} Issue221UntaggedMixed\n    \t* @property {test$types.EmptyEnum} EmptyEnum\n    \t* @property {test$types.EmptyEnumTagged} EmptyEnumTagged\n    \t* @property {test$types.EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n    \t* @property {test$types.EmptyEnumUntagged} EmptyEnumUntagged\n    \t* @property {test$types.SkipOnlyField} SkipOnlyField\n    \t* @property {test$types.SkipField} SkipField\n    \t* @property {test$types.SkipVariant} SkipVariant\n    \t* @property {test$types.SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n    \t* @property {test$types.SkipNamedFieldInVariant} SkipNamedFieldInVariant\n    \t* @property {test$types.TransparentWithSkip} TransparentWithSkip\n    \t* @property {test$types.TransparentWithSkip2} TransparentWithSkip2\n    \t* @property {test$types.TransparentWithSkip3} TransparentWithSkip3\n    \t* @property {test$types.SkipVariant2} SkipVariant2\n    \t* @property {test$types.SkipVariant3} SkipVariant3\n    \t* @property {test$types.SkipStructFields} SkipStructFields\n    \t* @property {test$types.SpectaSkipNonTypeField} SpectaSkipNonTypeField\n    \t* @property {test$types.FlattenA} FlattenA\n    \t* @property {test$types.FlattenB} FlattenB\n    \t* @property {test$types.FlattenC} FlattenC\n    \t* @property {test$types.FlattenD} FlattenD\n    \t* @property {test$types.FlattenE} FlattenE\n    \t* @property {test$types.FlattenF} FlattenF\n    \t* @property {test$types.FlattenG} FlattenG\n    \t* @property {test$types.TupleNested} TupleNested\n    \t* @property {test$types.Generic1<null>} \"Generic1<()>\"\n    \t* @property {test$types.GenericAutoBound<null>} \"GenericAutoBound<()>\"\n    \t* @property {test$types.GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n    \t* @property {test$types.Container1} Container1\n    \t* @property {test$types.Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n    \t* @property {test$types.GenericNewType1<null>} \"GenericNewType1<()>\"\n    \t* @property {test$types.GenericTuple<null>} \"GenericTuple<()>\"\n    \t* @property {test$types.GenericStruct2<null>} \"GenericStruct2<()>\"\n    \t* @property {string} \"InlineGenericNewtype<String>\"\n    \t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n    \t* \tvalue: string,\n    \t* } }) & { Unnamed?: never }]} \"InlineGenericNested<String>\"\n    \t* @property {test$types.InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n    \t* @property {test$types.InlineFlattenGenerics} InlineFlattenGenerics\n    \t* @property {test$types.GenericDefault} GenericDefault\n    \t* @property {test$types.ChainedGenericDefault} ChainedGenericDefault\n    \t* @property {test$types.ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n    \t* @property {test$types.ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n    \t* @property {test$types.ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n    \t* @property {test$types.GenericDefaultSkipped<string>} GenericDefaultSkipped\n    \t* @property {test$types.GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n    \t* @property {test$types.GenericParameterOrderPreserved} GenericParameterOrderPreserved\n    \t* @property {test$types.ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n    \t* @property {test$types.ConstGenericInConstContainer} ConstGenericInConstContainer\n    \t* @property {test$types.NamedConstGenericContainer} NamedConstGenericContainer\n    \t* @property {test$types.InlineConstGenericContainer} InlineConstGenericContainer\n    \t* @property {test$types.InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n    \t* @property {test$types.TestCollectionRegister} TestCollectionRegister\n    \t* @property {test$types.TestCollectionRegister} TestCollectionRegister\n    \t*/\n    ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-files-serde_phases.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nstd/\n  ops.js (295 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  /**\n  \t* @typedef {{\n  \t*\t\tstart: T,\n  \t*\t\tend: T,\n  \t*\t}} Range<T>\n  \t* @property {T} start\n  \t* @property {T} end\n  \t*\n  \t* @typedef {{\n  \t*\t\tstart: T,\n  \t*\t\tend: T,\n  \t*\t}} RangeInclusive<T>\n  \t* @property {T} start\n  \t* @property {T} end\n  \t*/\n  ════════════════════════════════════════\n\n  result.js (181 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  /**\n  \t* @typedef {{\n  \t*\t\tok: T,\n  \t*\t\terr: E,\n  \t*\t}} Result<T, E>\n  \t* @property {T} ok\n  \t* @property {E} err\n  \t*/\n  ════════════════════════════════════════\n\ntest/\n  types/\n    type_type.js (108 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    /**\n    \t* @typedef {never} Type\n    \t*/\n    ════════════════════════════════════════\n\n  types.js (32192 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  /**\n  \t* @typedef {{\n  \t*\t\ta: B,\n  \t*\t\tb: {\n  \t*\t\t\tb: number,\n  \t*\t\t},\n  \t*\t\tc: B,\n  \t*\t\td: {\n  \t*\t\t\tflattened: number,\n  \t*\t\t},\n  \t*\t\te: {\n  \t*\t\t\tgeneric_flattened: number,\n  \t*\t\t},\n  \t*\t}} A\n  \t* @property {B} a\n  \t* @property {{\n  \t*\t\tb: number,\n  \t*\t}} b\n  \t* @property {B} c\n  \t* @property {{\n  \t*\t\tflattened: number,\n  \t*\t}} d\n  \t* @property {{\n  \t*\t\tgeneric_flattened: number,\n  \t*\t}} e\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: Demo<T, boolean>,\n  \t*\t}} AGenericStruct<T>\n  \t* @property {Demo<T, boolean>} field\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: GenericType<string>,\n  \t*\t}} ActualType\n  \t* @property {GenericType<string>} a\n  \t*\n  \t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n  \t* \tid: string,\n  \t* \tmethod: string,\n  \t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n  \t* @property {{ t: \"A\" }} A\n  \t* @property {{ t: \"B\"; c: {\n  \t* \tid: string,\n  \t* \tmethod: string,\n  \t* } }} B\n  \t* @property {{ t: \"C\"; c: string }} C\n  \t*\n  \t* @typedef {{ type: \"A\"; data: {\n  \t* \tfield: string,\n  \t* } } | { type: \"B\"; data: {\n  \t* \tother: number,\n  \t* } }} AdjacentlyTaggedWithAlias\n  \t* @property {{ type: \"A\"; data: {\n  \t* \tfield: string,\n  \t* } }} A\n  \t* @property {{ type: \"B\"; data: {\n  \t* \tother: number,\n  \t* } }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: number,\n  \t*\t}} B\n  \t* @property {number} b\n  \t*\n  \t* @typedef {\"A\" | \"B\"} BasicEnum\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {BoxedInner} BoxFlattened\n  \t*\n  \t* @typedef {{\n  \t*\t\tc: {\n  \t*\t\t\ta: number,\n  \t*\t\t},\n  \t*\t}} BoxInline\n  \t* @property {{\n  \t*\t\ta: number,\n  \t*\t}} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} BoxedInner\n  \t* @property {number} a\n  \t*\n  \t* @typedef {string} BracedStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tfirst: T,\n  \t*\t\tsecond: U,\n  \t*\t}} ChainedGenericDefault<T = string, U = T>\n  \t* @property {T} first\n  \t* @property {U} second\n  \t*\n  \t*  Some triple-slash comment\n  \t*  Some more triple-slash comment\n  \t*\n  \t* @typedef {\n  \t*\t/**\n  \t*\t *  Some triple-slash comment\n  \t*\t *  Some more triple-slash comment\n  \t*\t */\n  \t* ({ A: number }) & { B?: never } | \n  \t*\t/**\n  \t*\t *  Some triple-slash comment\n  \t*\t *  Some more triple-slash comment\n  \t*\t */\n  \t* ({ B: {\n  \t* \t/**\n  \t* \t *  Some triple-slash comment\n  \t* \t *  Some more triple-slash comment\n  \t* \t */\n  \t* \ta: number,\n  \t* } }) & { A?: never }} CommentedEnum\n  \t* @property {\n  \t* /**\n  \t*  *  Some triple-slash comment\n  \t*  *  Some more triple-slash comment\n  \t*  */\n  \t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n  \t* @property {\n  \t* /**\n  \t*  *  Some triple-slash comment\n  \t*  *  Some more triple-slash comment\n  \t*  */\n  \t* { B: {\n  \t* \t/**\n  \t* \t *  Some triple-slash comment\n  \t* \t *  Some more triple-slash comment\n  \t* \t */\n  \t* \ta: number,\n  \t* } }} B - Some triple-slash comment Some more triple-slash comment\n  \t*\n  \t*  Some triple-slash comment\n  \t*  Some more triple-slash comment\n  \t*\n  \t* @typedef {{\n  \t*\t\t/**\n  \t*\t\t *  Some triple-slash comment\n  \t*\t\t *  Some more triple-slash comment\n  \t*\t\t */\n  \t*\t\ta: number,\n  \t*\t}} CommentedStruct\n  \t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: number[],\n  \t*\t\ta: number[],\n  \t*\t\td: [number, number],\n  \t*\t}} ConstGenericInConstContainer\n  \t* @property {number[]} data\n  \t* @property {number[]} a\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: [number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number],\n  \t*\t}} ConstGenericInNonConstContainer\n  \t* @property {[number]} data\n  \t* @property {[number, number]} a\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tfoo: Generic1<number>,\n  \t*\t\tbar: Generic1<number>[],\n  \t*\t\tbaz: { [key in string]: Generic1<string> },\n  \t*\t}} Container1\n  \t* @property {Generic1<number>} foo\n  \t* @property {Generic1<number>[]} bar\n  \t* @property {{ [key in string]: Generic1<string> }} baz\n  \t*\n  \t* @typedef {string} ContainerTypeOverrideEnum\n  \t*\n  \t* @typedef {string} ContainerTypeOverrideGeneric\n  \t*\n  \t* @typedef {string} ContainerTypeOverrideStruct\n  \t*\n  \t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n  \t*\n  \t* @typedef {[string, number]} ContainerTypeOverrideTuple\n  \t*\n  \t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n  \t*\n  \t* @typedef {{\n  \t*\t\tflattened: number,\n  \t*\t}} D\n  \t* @property {number} flattened\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: A,\n  \t*\t\tb: B,\n  \t*\t}} Demo<A, B>\n  \t* @property {A} a\n  \t* @property {B} b\n  \t*\n  \t* @typedef {\n  \t*\t/**\n  \t*\t * @deprecated\n  \t*\t */\n  \t* \"A\" | \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* \"B\" | \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* \"C\"} DeprecatedEnumVariants\n  \t* @property {\n  \t* /**\n  \t*  * @deprecated\n  \t*  */\n  \t* \"A\"} A - @deprecated\n  \t* @property {\n  \t* /**\n  \t*  * @deprecated Nope\n  \t*  */\n  \t* \"B\"} B - @deprecated Nope\n  \t* @property {\n  \t* /**\n  \t*  * @deprecated Nope\n  \t*  */\n  \t* \"C\"} C - @deprecated Nope\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\t/**\n  \t*\t\t * @deprecated\n  \t*\t\t */\n  \t*\t\tb: string,\n  \t*\t\t/**\n  \t*\t\t * @deprecated This field is cringe!\n  \t*\t\t */\n  \t*\t\tc: string,\n  \t*\t\t/**\n  \t*\t\t * @deprecated This field is cringe!\n  \t*\t\t */\n  \t*\t\td: string,\n  \t*\t}} DeprecatedFields\n  \t* @property {number} a\n  \t* @property {string} b - @deprecated\n  \t* @property {string} c - @deprecated This field is cringe!\n  \t* @property {string} d - @deprecated This field is cringe!\n  \t*\n  \t* @typedef {[\n  \t*\t/**\n  \t*\t * @deprecated\n  \t*\t */\n  \t* string, \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* string, \n  \t*\t/**\n  \t*\t * @deprecated Nope\n  \t*\t */\n  \t* number]} DeprecatedTupleVariant\n  \t* @property {string} \"0\" - @deprecated\n  \t* @property {string} \"1\" - @deprecated Nope\n  \t* @property {number} \"2\" - @deprecated Nope\n  \t*\n  \t* @deprecated\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} DeprecatedType\n  \t* @property {number} a\n  \t*\n  \t* @deprecated Look at you big man using a deprecation message\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} DeprecatedTypeWithMsg\n  \t* @property {number} a\n  \t*\n  \t* @deprecated Look at you big man using a deprecation message\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} DeprecatedTypeWithMsg2\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: ToBeFlattened,\n  \t*\t\tb: ToBeFlattened,\n  \t*\t}} DoubleFlattened\n  \t* @property {ToBeFlattened} a\n  \t* @property {ToBeFlattened} b\n  \t*\n  \t* @typedef {{ A: string } | \"B\"} Eight\n  \t* @property {{ A: string }} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {never} EmptyEnum\n  \t*\n  \t* @typedef {never} EmptyEnumTagged\n  \t*\n  \t* @typedef {never} EmptyEnumTaggedWContent\n  \t*\n  \t* @typedef {never} EmptyEnumUntagged\n  \t*\n  \t* @typedef {Record<string, never>} EmptyStruct\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: \"EmptyStructWithTag\",\n  \t*\t}} EmptyStructWithTag\n  \t* @property {\"EmptyStructWithTag\"} a\n  \t*\n  \t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n  \t* @property {{ t: \"A\" }} A\n  \t* @property {{ t: \"B\" }} B\n  \t*\n  \t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n  \t* @property {{ t: \"C\" }} C\n  \t* @property {{ t: \"B\" }} B\n  \t* @property {{ t: \"D\"; enumField: null }} D\n  \t*\n  \t* @typedef {{ t: \"A\"; b: string }} Enum3\n  \t* @property {{ t: \"A\"; b: string }} A\n  \t*\n  \t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n  \t* \ta: string,\n  \t* \tbbbbbb: number,\n  \t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n  \t* @property {{ A: string }} A\n  \t* @property {{ bbb: number }} bbb\n  \t* @property {{ cccc: number }} cccc\n  \t* @property {{ D: {\n  \t* \ta: string,\n  \t* \tbbbbbb: number,\n  \t* } }} D\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n  \t*\t}} EnumReferenceRecordKey\n  \t* @property {Partial<{ [key in BasicEnum]: number }>} a\n  \t*\n  \t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n  \t* @property {\"HELLOWORLD\"} HELLOWORLD\n  \t* @property {\"VARIANTB\"} VARIANTB\n  \t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n  \t*\n  \t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n  \t* @property {\"Variant\"} Variant\n  \t* @property {\"Other\"} Other\n  \t*\n  \t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n  \t* @property {\"Variant\"} Variant\n  \t* @property {\"Other\"} Other\n  \t*\n  \t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n  \t* @property {\"renamed_variant\"} renamed_variant\n  \t* @property {\"Other\"} Other\n  \t*\n  \t* @typedef {\"A\" | ({ B: {\n  \t* \tid: string,\n  \t* \tmethod: string,\n  \t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n  \t* @property {\"A\"} A\n  \t* @property {{ B: {\n  \t* \tid: string,\n  \t* \tmethod: string,\n  \t* } }} B\n  \t* @property {{ C: string }} C\n  \t*\n  \t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n  \t* @property {{ A: string }} A\n  \t*\n  \t* @typedef {string} ExtraBracketsInUnnamedStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} First\n  \t* @property {string} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\tb: number,\n  \t*\t}} FlattenA\n  \t* @property {number} a\n  \t* @property {number} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tc: number,\n  \t*\t} & FlattenA} FlattenB\n  \t* @property {number} c\n  \t*\n  \t* @typedef {{\n  \t*\t\tc: number,\n  \t*\t} & FlattenA} FlattenC\n  \t* @property {number} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: FlattenA,\n  \t*\t\tc: number,\n  \t*\t}} FlattenD\n  \t* @property {FlattenA} a\n  \t* @property {number} c\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: ({\n  \t*\t\t\tc: number,\n  \t*\t\t}) & (FlattenA),\n  \t*\t\td: number,\n  \t*\t}} FlattenE\n  \t* @property {({\n  \t*\t\tc: number,\n  \t*\t}) & (FlattenA)} b\n  \t* @property {number} d\n  \t*\n  \t* @typedef {{ tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" }} FlattenEnum\n  \t* @property {{ tag: \"One\" }} One\n  \t* @property {{ tag: \"Two\" }} Two\n  \t* @property {{ tag: \"Three\" }} Three\n  \t*\n  \t* @typedef {{\n  \t*\t\touter: string,\n  \t*\t} & FlattenEnum} FlattenEnumStruct\n  \t* @property {string} outer\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: ({\n  \t*\t\t\tc: number,\n  \t*\t\t}) & (FlattenA),\n  \t*\t\td: number,\n  \t*\t}} FlattenF\n  \t* @property {({\n  \t*\t\tc: number,\n  \t*\t}) & (FlattenA)} b\n  \t* @property {number} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: FlattenB,\n  \t*\t\td: number,\n  \t*\t}} FlattenG\n  \t* @property {FlattenB} b\n  \t* @property {number} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tid: string,\n  \t*\t} & NestedEnum} FlattenOnNestedEnum\n  \t* @property {string} id\n  \t*\n  \t* @typedef {Inner} FlattenedInner\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: {\n  \t*\t\t\ta: string,\n  \t*\t\t},\n  \t*\t}} Fourth\n  \t* @property {First} a\n  \t* @property {{\n  \t*\t\ta: string,\n  \t*\t}} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t\tvalues: T[],\n  \t*\t}} Generic1<T>\n  \t* @property {T} value\n  \t* @property {T[]} values\n  \t*\n  \t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n  \t* \ta: A,\n  \t* \tb: B,\n  \t* \tc: C,\n  \t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n  \t* @property {{ A: A }} A\n  \t* @property {{ B: [B, B, B] }} B\n  \t* @property {{ C: C[] }} C\n  \t* @property {{ D: A[][][] }} D\n  \t* @property {{ E: {\n  \t* \ta: A,\n  \t* \tb: B,\n  \t* \tc: C,\n  \t* } }} E\n  \t* @property {{ X: number[] }} X\n  \t* @property {{ Y: number }} Y\n  \t* @property {{ Z: number[][] }} Z\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t\tvalues: T[],\n  \t*\t}} GenericAutoBound<T>\n  \t* @property {T} value\n  \t* @property {T[]} values\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t\tvalues: T[],\n  \t*\t}} GenericAutoBound2<T>\n  \t* @property {T} value\n  \t* @property {T[]} values\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t}} GenericDefault<T = string>\n  \t* @property {T} value\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: T,\n  \t*\t}} GenericDefaultSkipped<T>\n  \t* @property {T} value\n  \t*\n  \t* @typedef {{\n  \t*\t\tvalue: number,\n  \t*\t}} GenericDefaultSkippedNonType<T>\n  \t* @property {number} value\n  \t*\n  \t* @typedef {{\n  \t*\t\tgeneric_flattened: T,\n  \t*\t}} GenericFlattened<T>\n  \t* @property {T} generic_flattened\n  \t*\n  \t* @typedef {T[][]} GenericNewType1<T>\n  \t* @property {T[][]} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tpair: Pair<number, string>,\n  \t*\t}} GenericParameterOrderPreserved\n  \t* @property {Pair<number, string>} pair\n  \t*\n  \t* @typedef {{\n  \t*\t\targ: T,\n  \t*\t}} GenericStruct<T>\n  \t* @property {T} arg\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: T,\n  \t*\t\tb: [T, T],\n  \t*\t\tc: [T, [T, T]],\n  \t*\t\td: [T, T, T],\n  \t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n  \t*\t\tf: T[],\n  \t*\t\tg: T[][],\n  \t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n  \t*\t}} GenericStruct2<T>\n  \t* @property {T} a\n  \t* @property {[T, T]} b\n  \t* @property {[T, [T, T]]} c\n  \t* @property {[T, T, T]} d\n  \t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n  \t* @property {T[]} f\n  \t* @property {T[][]} g\n  \t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n  \t*\n  \t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n  \t* @property {T} \"0\"\n  \t* @property {T[]} \"1\"\n  \t* @property {T[][]} \"2\"\n  \t*\n  \t* @typedef {T} GenericTupleStruct<T>\n  \t* @property {T} \"0\"\n  \t*\n  \t* @typedef {\"Undefined\" | T} GenericType<T>\n  \t* @property {\"Undefined\"} Undefined\n  \t* @property {T} Value\n  \t*\n  \t* @typedef {{ [key in number]: string }} HasGenericAlias\n  \t* @property {{ [key in number]: string }} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: {\n  \t*\t\t\tdata: [number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t},\n  \t*\t\tc: {\n  \t*\t\t\tdata: [number, number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t},\n  \t*\t\td: [number, number],\n  \t*\t}} InlineConstGenericContainer\n  \t* @property {{\n  \t*\t\tdata: [number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t}} b\n  \t* @property {{\n  \t*\t\tdata: [number, number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t}} c\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{ A: {\n  \t* \ta: string,\n  \t* } }} InlineEnumField\n  \t* @property {{ A: {\n  \t* \ta: string,\n  \t* } }} A\n  \t*\n  \t* @typedef {{\n  \t*\t\tg: InlineFlattenGenericsG<string>,\n  \t*\t\tgi: {\n  \t*\t\t\tt: string,\n  \t*\t\t},\n  \t*\t} & InlineFlattenGenericsG<string>} InlineFlattenGenerics\n  \t* @property {InlineFlattenGenericsG<string>} g\n  \t* @property {{\n  \t*\t\tt: string,\n  \t*\t}} gi\n  \t*\n  \t* @typedef {{\n  \t*\t\tt: T,\n  \t*\t}} InlineFlattenGenericsG<T>\n  \t* @property {T} t\n  \t*\n  \t* @typedef {{\n  \t*\t\toptional_field: {\n  \t* \ta: string,\n  \t* } | null,\n  \t*\t}} InlineOptionalType\n  \t* @property {{\n  \t* \ta: string,\n  \t* } | null} optional_field\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: number[],\n  \t*\t\ta: number[],\n  \t*\t\td: [number, number, number],\n  \t*\t\te: InlineRecursiveConstGeneric,\n  \t*\t}} InlineRecursiveConstGeneric\n  \t* @property {number[]} data\n  \t* @property {number[]} a\n  \t* @property {[number, number, number]} d\n  \t* @property {InlineRecursiveConstGeneric} e\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: {\n  \t*\t\t\tdata: [number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t\te: InlineRecursiveConstGeneric,\n  \t*\t\t},\n  \t*\t\tc: {\n  \t*\t\t\tdata: [number, number, number],\n  \t*\t\t\ta: [number, number],\n  \t*\t\t\td: [number, number, number],\n  \t*\t\t\te: InlineRecursiveConstGeneric,\n  \t*\t\t},\n  \t*\t\td: [number, number],\n  \t*\t}} InlineRecursiveConstGenericContainer\n  \t* @property {{\n  \t*\t\tdata: [number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t\te: InlineRecursiveConstGeneric,\n  \t*\t}} b\n  \t* @property {{\n  \t*\t\tdata: [number, number, number],\n  \t*\t\ta: [number, number],\n  \t*\t\td: [number, number, number],\n  \t*\t\te: InlineRecursiveConstGeneric,\n  \t*\t}} c\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\tref_struct: SimpleStruct,\n  \t*\t\tval: number,\n  \t*\t}} InlineStruct\n  \t* @property {SimpleStruct} ref_struct\n  \t* @property {number} val\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: [string, boolean],\n  \t*\t}} InlineTuple\n  \t* @property {[string, boolean]} demo\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: [{\n  \t* \tdemo: [string, boolean],\n  \t* }, boolean],\n  \t*\t}} InlineTuple2\n  \t* @property {[{\n  \t* \tdemo: [string, boolean],\n  \t* }, boolean]} demo\n  \t*\n  \t* @typedef {{\n  \t*\t\tinline_this: {\n  \t*\t\t\tref_struct: SimpleStruct,\n  \t*\t\t\tval: number,\n  \t*\t\t},\n  \t*\t\tdont_inline_this: RefStruct,\n  \t*\t}} InlinerStruct\n  \t* @property {{\n  \t*\t\tref_struct: SimpleStruct,\n  \t*\t\tval: number,\n  \t*\t}} inline_this\n  \t* @property {RefStruct} dont_inline_this\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t} & FlattenedInner} Inner\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t* \ttype: \"A\",\n  \t* } & { [key in string]: string }} InternallyTaggedD\n  \t* @property {{\n  \t* \ttype: \"A\",\n  \t* } & { [key in string]: string }} A\n  \t*\n  \t* @typedef {{ type: \"A\" }} InternallyTaggedE\n  \t* @property {{ type: \"A\" }} A\n  \t*\n  \t* @typedef {{ type: \"A\" }} InternallyTaggedF\n  \t* @property {{ type: \"A\" }} A\n  \t*\n  \t* @typedef {null} InternallyTaggedFInner\n  \t* @property {null} A\n  \t*\n  \t* @typedef {{ type: \"A\" }} InternallyTaggedH\n  \t* @property {{ type: \"A\" }} A\n  \t*\n  \t* @typedef {null} InternallyTaggedHInner\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {{\n  \t* \ttype: \"A\",\n  \t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n  \t* @property {{\n  \t* \ttype: \"A\",\n  \t* } & { type: \"A\" } | { type: \"B\" }} A\n  \t*\n  \t* @typedef {{ type: \"A\" } | { type: \"B\" }} InternallyTaggedLInner\n  \t* @property {{ type: \"A\" }} A\n  \t* @property {{ type: \"B\" }} B\n  \t*\n  \t* @typedef {{ type: \"A\" }} InternallyTaggedM\n  \t* @property {{ type: \"A\" }} A\n  \t*\n  \t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t*\n  \t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n  \t* @property {{ type: \"A\"; field: string }} A\n  \t* @property {{ type: \"B\"; other: number }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tcause: null,\n  \t*\t}} InvalidToValidType\n  \t* @property {null} cause\n  \t*\n  \t* @typedef {({ A: {\n  \t* \ta: string,\n  \t* } }) & { B?: never } | ({ B: {\n  \t* \tb: string,\n  \t* } }) & { A?: never }} Issue221External\n  \t* @property {{ A: {\n  \t* \ta: string,\n  \t* } }} A\n  \t* @property {{ B: {\n  \t* \tb: string,\n  \t* } }} B\n  \t*\n  \t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n  \t* @property {{ a: string }} A\n  \t* @property {{ b: string }} B\n  \t* @property {{ values: { [key in string]: string } }} Unsafe\n  \t*\n  \t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n  \t* @property {{ a: string }} A\n  \t* @property {{ b: string }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tdefault_unity_arguments: string[],\n  \t*\t}} Issue281\n  \t* @property {string[]} default_unity_arguments\n  \t*\n  \t*  https://github.com/specta-rs/specta/issues/374\n  \t*\n  \t* @typedef {Issue374_Serialize | Issue374_Deserialize} Issue374\n  \t* @property {Issue374_Serialize} Serialize\n  \t* @property {Issue374_Deserialize} Deserialize\n  \t*\n  \t*  https://github.com/specta-rs/specta/issues/374\n  \t*\n  \t* @typedef {{\n  \t*\t\tfoo?: boolean,\n  \t*\t\tbar?: boolean,\n  \t*\t}} Issue374_Deserialize\n  \t* @property {boolean} [foo]\n  \t* @property {boolean} [bar]\n  \t*\n  \t*  https://github.com/specta-rs/specta/issues/374\n  \t*\n  \t* @typedef {{\n  \t*\t\tfoo?: boolean,\n  \t*\t\tbar?: boolean,\n  \t*\t}} Issue374_Serialize\n  \t* @property {boolean} [foo]\n  \t* @property {boolean} [bar]\n  \t*\n  \t* @typedef {{\n  \t*\t\t\"test-ing\": string,\n  \t*\t}} KebabCase\n  \t* @property {string} \"test-ing\"\n  \t*\n  \t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n  \t* @property {{ Borrowed: T }} Borrowed\n  \t* @property {{ Owned: T }} Owned\n  \t*\n  \t* @typedef {{\n  \t*\t\tborrowed: T[],\n  \t*\t\towned: T[],\n  \t*\t}} LifetimeGenericStruct<T>\n  \t* @property {T[]} borrowed\n  \t* @property {T[]} owned\n  \t*\n  \t* @typedef {{ event: \"started\"; data: {\n  \t* \tprojectName: string,\n  \t* } } | { event: \"progressTest\"; data: {\n  \t* \tprojectName: string,\n  \t* \tstatus: string,\n  \t* \tprogress: number,\n  \t* } } | { event: \"finished\"; data: {\n  \t* \tprojectName: string,\n  \t* } }} LoadProjectEvent\n  \t* @property {{ event: \"started\"; data: {\n  \t* \tprojectName: string,\n  \t* } }} started\n  \t* @property {{ event: \"progressTest\"; data: {\n  \t* \tprojectName: string,\n  \t* \tstatus: string,\n  \t* \tprogress: number,\n  \t* } }} progressTest\n  \t* @property {{ event: \"finished\"; data: {\n  \t* \tprojectName: string,\n  \t* } }} finished\n  \t*\n  \t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n  \t* \tdemo2: string,\n  \t* } }) & { Demo?: never }} MacroEnum\n  \t* @property {{ Demo: string }} Demo\n  \t* @property {{ Demo2: {\n  \t* \tdemo2: string,\n  \t* } }} Demo2\n  \t*\n  \t* @typedef {string} MacroStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: string,\n  \t*\t}} MacroStruct2\n  \t* @property {string} demo\n  \t*\n  \t* @typedef {T} MaybeValidKey<T>\n  \t* @property {T} \"0\"\n  \t*\n  \t* @typedef {Record<string, never>} MyEmptyInput\n  \t*\n  \t* @typedef {({ A: string }) & { B?: never } | ({ B: number }) & { A?: never }} MyEnum\n  \t* @property {{ A: string }} A\n  \t* @property {{ B: number }} B\n  \t*\n  \t* @typedef {{ t: \"Variant\"; c: {\n  \t* \tinner: First,\n  \t* } }} MyEnumAdjacent\n  \t* @property {{ t: \"Variant\"; c: {\n  \t* \tinner: First,\n  \t* } }} Variant\n  \t*\n  \t* @typedef {{ Variant: {\n  \t* \tinner: First,\n  \t* } }} MyEnumExternal\n  \t* @property {{ Variant: {\n  \t* \tinner: First,\n  \t* } }} Variant\n  \t*\n  \t* @typedef {{ type: \"Variant\"; inner: First }} MyEnumTagged\n  \t* @property {{ type: \"Variant\"; inner: First }} Variant\n  \t*\n  \t* @typedef {{ inner: First }} MyEnumUntagged\n  \t* @property {{ inner: First }} Variant\n  \t*\n  \t* @typedef {{\n  \t*\t\tdata: number[],\n  \t*\t\ta: number[],\n  \t*\t\td: [number, number],\n  \t*\t}} NamedConstGeneric\n  \t* @property {number[]} data\n  \t* @property {number[]} a\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: NamedConstGeneric,\n  \t*\t\tb: NamedConstGeneric,\n  \t*\t\td: [number, number],\n  \t*\t}} NamedConstGenericContainer\n  \t* @property {NamedConstGeneric} a\n  \t* @property {NamedConstGeneric} b\n  \t* @property {[number, number]} d\n  \t*\n  \t* @typedef {{ type: \"a\"; value: string } | { type: \"b\"; value: number }} NestedEnum\n  \t* @property {{ type: \"a\"; value: string }} a\n  \t* @property {{ type: \"b\"; value: number }} b\n  \t*\n  \t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n  \t* \ta: string,\n  \t* } } | { t: \"D\"; c: First }} Ninth\n  \t* @property {{ t: \"A\"; c: string }} A\n  \t* @property {{ t: \"B\" }} B\n  \t* @property {{ t: \"C\"; c: {\n  \t* \ta: string,\n  \t* } }} C\n  \t* @property {{ t: \"D\"; c: First }} D\n  \t*\n  \t* @typedef {string | null} NonOptional\n  \t* @property {string | null} \"0\"\n  \t*\n  \t* @typedef {Optional_Serialize | Optional_Deserialize} Optional\n  \t* @property {Optional_Serialize} Serialize\n  \t* @property {Optional_Deserialize} Deserialize\n  \t*\n  \t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n  \t* \ta: string | null,\n  \t* } }) & { A?: never; C?: never } | ({ C: {\n  \t* \ta?: string | null,\n  \t* } }) & { A?: never; B?: never }} OptionalInEnum\n  \t* @property {{ A?: string | null }} A\n  \t* @property {{ B: {\n  \t* \ta: string | null,\n  \t* } }} B\n  \t* @property {{ C: {\n  \t* \ta?: string | null,\n  \t* } }} C\n  \t*\n  \t* @typedef {string | null} OptionalOnNamedField\n  \t* @property {string | null} [\"0\"]\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: string | null,\n  \t*\t}} OptionalOnTransparentNamedField\n  \t* @property {string | null} b\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number | null,\n  \t*\t\tb?: number | null,\n  \t*\t\tc: string | null,\n  \t*\t\td?: boolean,\n  \t*\t}} Optional_Deserialize\n  \t* @property {number | null} a\n  \t* @property {number | null} [b]\n  \t* @property {string | null} c\n  \t* @property {boolean} [d]\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number | null,\n  \t*\t\tb?: number | null,\n  \t*\t\tc?: string | null,\n  \t*\t\td: boolean,\n  \t*\t}} Optional_Serialize\n  \t* @property {number | null} a\n  \t* @property {number | null} [b]\n  \t* @property {string | null} [c]\n  \t* @property {boolean} d\n  \t*\n  \t* @typedef {{\n  \t*\t\toverriden_field: string,\n  \t*\t}} OverridenStruct\n  \t* @property {string} overriden_field\n  \t*\n  \t* @typedef {{\n  \t*\t\tfirst: Z,\n  \t*\t\tsecond: A,\n  \t*\t}} Pair<Z, A>\n  \t* @property {Z} first\n  \t* @property {A} second\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} PlaceholderInnerField\n  \t* @property {string} a\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: Recursive,\n  \t*\t}} Recursive\n  \t* @property {Recursive} demo\n  \t*\n  \t* @typedef {{ A: {\n  \t* \tdemo: RecursiveInEnum,\n  \t* } }} RecursiveInEnum\n  \t* @property {{ A: {\n  \t* \tdemo: RecursiveInEnum,\n  \t* } }} A\n  \t*\n  \t* @typedef {RecursiveInline} RecursiveInline\n  \t*\n  \t* @typedef {{\n  \t*\t\tdemo: { [key in string]: RecursiveMapValue },\n  \t*\t}} RecursiveMapValue\n  \t* @property {{ [key in string]: RecursiveMapValue }} demo\n  \t*\n  \t* @typedef {RecursiveInline} RecursiveTransparent\n  \t* @property {RecursiveInline} \"0\"\n  \t*\n  \t* @typedef {TestEnum} RefStruct\n  \t* @property {TestEnum} \"0\"\n  \t*\n  \t* @typedef {{ [key in string]: null }} Regular\n  \t* @property {{ [key in string]: null }} \"0\"\n  \t*\n  \t* @typedef {\"OneWord\" | \"Two words\"} Rename\n  \t* @property {\"OneWord\"} OneWord\n  \t* @property {\"Two words\"} \"Two words\"\n  \t*\n  \t* @typedef {{\n  \t*\t\t\"a/b\": number,\n  \t*\t}} RenameSerdeSpecialChar\n  \t* @property {number} \"a/b\"\n  \t*\n  \t* @typedef {{\n  \t*\t\t\"@odata.context\": string,\n  \t*\t}} RenameWithWeirdCharsField\n  \t* @property {string} \"@odata.context\"\n  \t*\n  \t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n  \t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n  \t*\n  \t* @typedef {{\n  \t*\t\t\"\": string,\n  \t*\t\t\"a\\\"b\": string,\n  \t*\t\t\"a\\\\b\": string,\n  \t*\t\t\"line\\nbreak\": string,\n  \t*\t\t\"line\\u2028break\": string,\n  \t*\t\t\"line\\u2029break\": string,\n  \t*\t}} RenamedFieldKeys\n  \t* @property {string} \"\"\n  \t* @property {string} \"a\\\"b\"\n  \t* @property {string} \"a\\\\b\"\n  \t* @property {string} \"line\\nbreak\"\n  \t* @property {string} \"line\\u2028break\"\n  \t* @property {string} \"line\\u2029break\"\n  \t*\n  \t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n  \t* @property {\"a-b\"} \"a-b\"\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} Second\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: Second,\n  \t*\t}} Seventh\n  \t* @property {First} a\n  \t* @property {Second} b\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t\tb: string,\n  \t*\t\tc: [number, string, number],\n  \t*\t\td: string[],\n  \t*\t\te: string | null,\n  \t*\t}} SimpleStruct\n  \t* @property {number} a\n  \t* @property {string} b\n  \t* @property {[number, string, number]} c\n  \t* @property {string[]} d\n  \t* @property {string | null} e\n  \t*\n  \t*  Some single-line comment\n  \t*\n  \t* @typedef {\n  \t*\t/**  Some single-line comment */\n  \t* ({ A: number }) & { B?: never } | \n  \t*\t/**  Some single-line comment */\n  \t* ({ B: {\n  \t* \t/**  Some single-line comment */\n  \t* \ta: number,\n  \t* } }) & { A?: never }} SingleLineComment\n  \t* @property {\n  \t* /**  Some single-line comment */\n  \t* { A: number }} A - Some single-line comment\n  \t* @property {\n  \t* /**  Some single-line comment */\n  \t* { B: {\n  \t* \t/**  Some single-line comment */\n  \t* \ta: number,\n  \t* } }} B - Some single-line comment\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: First,\n  \t*\t\tb: First,\n  \t*\t}} Sixth\n  \t* @property {First} a\n  \t* @property {First} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: number,\n  \t*\t}} SkipField\n  \t* @property {number} b\n  \t*\n  \t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n  \t* \tb: number,\n  \t* } }) & { A?: never }} SkipNamedFieldInVariant\n  \t* @property {{ A: Record<string, never> }} A\n  \t* @property {{ B: {\n  \t* \tb: number,\n  \t* } }} B\n  \t*\n  \t* @typedef {Record<string, never>} SkipOnlyField\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} SkipStructFields\n  \t* @property {number} a\n  \t*\n  \t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n  \t* @property {\"A\"} A\n  \t* @property {{ B: [number] }} B\n  \t*\n  \t* @typedef {{ A: string }} SkipVariant\n  \t* @property {{ A: string }} A\n  \t*\n  \t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n  \t* @property {{ tag: \"A\"; data: string }} A\n  \t*\n  \t* @typedef {{ A: {\n  \t* \ta: string,\n  \t* } }} SkipVariant3\n  \t* @property {{ A: {\n  \t* \ta: string,\n  \t* } }} A\n  \t*\n  \t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n  \t* @property {{ type: \"A\" }} A\n  \t* @property {{ type: \"B\"; data: string }} B\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: number,\n  \t*\t}} SpectaSkipNonTypeField\n  \t* @property {number} a\n  \t*\n  \t* @typedef {{\n  \t*\t\tstring_ident: string,\n  \t*\t\tu32_ident: number,\n  \t*\t\tpath: string,\n  \t*\t\ttuple: [string, number],\n  \t*\t}} SpectaTypeOverride\n  \t* @property {string} string_ident\n  \t* @property {number} u32_ident\n  \t* @property {string} path\n  \t* @property {[string, number]} tuple\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: string,\n  \t*\t}} Struct2\n  \t* @property {string} b\n  \t*\n  \t* @typedef {{\n  \t*\t\tt: \"StructNew\",\n  \t*\t\ta: string,\n  \t*\t}} StructNew\n  \t* @property {\"StructNew\"} t\n  \t* @property {string} a\n  \t*\n  \t* @typedef {StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize} StructPhaseSpecificRename\n  \t* @property {StructPhaseSpecificRenameSerialize} Serialize\n  \t* @property {StructPhaseSpecificRenameDeserialize} Deserialize\n  \t*\n  \t* @typedef {{\n  \t*\t\tkind: \"StructPhaseSpecificRenameDeserialize\",\n  \t*\t\tder: string,\n  \t*\t}} StructPhaseSpecificRenameDeserialize\n  \t* @property {\"StructPhaseSpecificRenameDeserialize\"} kind\n  \t* @property {string} der\n  \t*\n  \t* @typedef {{\n  \t*\t\tkind: \"StructPhaseSpecificRenameSerialize\",\n  \t*\t\tser: string,\n  \t*\t}} StructPhaseSpecificRenameSerialize\n  \t* @property {\"StructPhaseSpecificRenameSerialize\"} kind\n  \t* @property {string} ser\n  \t*\n  \t* @typedef {{\n  \t*\t\tA: number,\n  \t*\t\tB: number,\n  \t*\t}} StructRenameAllUppercase\n  \t* @property {number} A\n  \t* @property {number} B\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: string,\n  \t*\t}} StructWithAlias\n  \t* @property {string} field\n  \t*\n  \t* @typedef {{\n  \t*\t\trenamed_field: string,\n  \t*\t}} StructWithAliasAndRename\n  \t* @property {string} renamed_field\n  \t*\n  \t* @typedef {{\n  \t*\t\tfield: string,\n  \t*\t}} StructWithMultipleAliases\n  \t* @property {string} field\n  \t*\n  \t* @typedef {{\n  \t*\t\ttype: \"TagOnStructWithInline\",\n  \t*\t\ta: First,\n  \t*\t\tb: {\n  \t*\t\t\ta: string,\n  \t*\t\t},\n  \t*\t}} TagOnStructWithInline\n  \t* @property {\"TagOnStructWithInline\"} type\n  \t* @property {First} a\n  \t* @property {{\n  \t*\t\ta: string,\n  \t*\t}} b\n  \t*\n  \t* @typedef {string | \"B\" | {\n  \t* \ta: string,\n  \t* } | First} Tenth\n  \t* @property {string} A\n  \t* @property {\"B\"} B\n  \t* @property {{\n  \t* \ta: string,\n  \t* }} C\n  \t* @property {First} D\n  \t*\n  \t* @typedef {never} TestCollectionRegister\n  \t*\n  \t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n  \t* \ta: number,\n  \t* } }) & { Multiple?: never; Single?: never }} TestEnum\n  \t* @property {\"Unit\"} Unit\n  \t* @property {{ Single: number }} Single\n  \t* @property {{ Multiple: [number, number] }} Multiple\n  \t* @property {{ Struct: {\n  \t* \ta: number,\n  \t* } }} Struct\n  \t*\n  \t* @typedef {{\n  \t*\t\tb: { [key in string]: string },\n  \t*\t\tc: First,\n  \t*\t} & First} Third\n  \t* @property {{ [key in string]: string }} b\n  \t* @property {First} c\n  \t*\n  \t* @typedef {{\n  \t*\t\ta: string,\n  \t*\t}} ToBeFlattened\n  \t* @property {string} a\n  \t*\n  \t* @typedef {string} TransparentStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {TransparentTypeInner} TransparentType\n  \t* @property {TransparentTypeInner} \"0\"\n  \t*\n  \t* @typedef {null} TransparentType2\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {{\n  \t*\t\tinner: string,\n  \t*\t}} TransparentTypeInner\n  \t* @property {string} inner\n  \t*\n  \t* @typedef {string} TransparentTypeWithOverride\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {null} TransparentWithSkip\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {string} TransparentWithSkip2\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {string} TransparentWithSkip3\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n  \t* @property {number[]} \"0\"\n  \t* @property {[number[], number[]]} \"1\"\n  \t* @property {[number[], number[], number[]]} \"2\"\n  \t*\n  \t* @typedef {string} TupleStruct\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {number} TupleStruct1\n  \t* @property {number} \"0\"\n  \t*\n  \t* @typedef {[number, boolean, string]} TupleStruct3\n  \t* @property {number} \"0\"\n  \t* @property {boolean} \"1\"\n  \t* @property {string} \"2\"\n  \t*\n  \t* @typedef {string} TupleStructWithRep\n  \t* @property {string} \"0\"\n  \t*\n  \t* @typedef {null} Unit1\n  \t*\n  \t* @typedef {Record<string, never>} Unit2\n  \t*\n  \t* @typedef {[]} Unit3\n  \t*\n  \t* @typedef {null} Unit4\n  \t* @property {null} \"0\"\n  \t*\n  \t* @typedef {\"A\"} Unit5\n  \t* @property {\"A\"} A\n  \t*\n  \t* @typedef {{ A: null }} Unit6\n  \t* @property {{ A: null }} A\n  \t*\n  \t* @typedef {{ A: Record<string, never> }} Unit7\n  \t* @property {{ A: Record<string, never> }} A\n  \t*\n  \t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n  \t* @property {\"A\"} A\n  \t* @property {\"B\"} B\n  \t* @property {\"C\"} C\n  \t*\n  \t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n  \t* @property {string} A\n  \t* @property {number} B\n  \t* @property {number} C\n  \t* @property {{ id: string }} D\n  \t* @property {[string, boolean]} E\n  \t*\n  \t* @typedef {string | number} UntaggedVariantsKey\n  \t* @property {string} A\n  \t* @property {number} B\n  \t* @property {number} C\n  \t*\n  \t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n  \t* @property {null} A\n  \t* @property {number} B\n  \t* @property {null} C\n  \t*\n  \t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n  \t* @property {string} A\n  \t* @property {[number, string]} B\n  \t* @property {number} C\n  \t*\n  \t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n  \t* @property {{ field: string }} A\n  \t* @property {{ other: number }} B\n  \t*\n  \t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n  \t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n  \t*\n  \t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n  \t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n  \t*/\n  ════════════════════════════════════════\n\ntests/\n  tests/\n    types.js (29458 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    \n    /**\n     * @typedef {import(\"../../std/ops\")} std$ops\n     * @typedef {import(\"../../std/result\")} std$result\n     * @typedef {import(\"../../test/types\")} test$types\n     * @typedef {import(\"../../test/types/type_type\")} test$types$type_type\n     */\n    /**\n    \t* @typedef {{\n    \t*\t\ti8: number,\n    \t*\t\ti16: number,\n    \t*\t\ti32: number,\n    \t*\t\tu8: number,\n    \t*\t\tu16: number,\n    \t*\t\tu32: number,\n    \t*\t\tf32: number,\n    \t*\t\tf64: number,\n    \t*\t\tbool: boolean,\n    \t*\t\tchar: string,\n    \t*\t\t\"Range<i32>\": std$ops.Range<number>,\n    \t*\t\t\"RangeInclusive<i32>\": std$ops.RangeInclusive<number>,\n    \t*\t\t\"()\": null,\n    \t*\t\t\"(String, i32)\": [string, number],\n    \t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n    \t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n    \t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n    \t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n    \t*\t\tString: string,\n    \t*\t\tPathBuf: string,\n    \t*\t\tIpAddr: string,\n    \t*\t\tIpv4Addr: string,\n    \t*\t\tIpv6Addr: string,\n    \t*\t\tSocketAddr: string,\n    \t*\t\tSocketAddrV4: string,\n    \t*\t\tSocketAddrV6: string,\n    \t*\t\t\"Cow<'static, str>\": string,\n    \t*\t\t\"Cow<'static, i32>\": number,\n    \t*\t\t\"&'static str\": string,\n    \t*\t\t\"&'static bool\": boolean,\n    \t*\t\t\"&'static i32\": number,\n    \t*\t\t\"Vec<i32>\": number[],\n    \t*\t\t\"&'static [i32]\": number[],\n    \t*\t\t\"&'static [i32; 3]\": [number, number, number],\n    \t*\t\t\"[i32; 3]\": [number, number, number],\n    \t*\t\t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \t*\t\t\"&'static [MyEnum]\": test$types.MyEnum[],\n    \t*\t\t\"&'static [MyEnum; 6]\": [test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum],\n    \t*\t\t\"[MyEnum; 2]\": [test$types.MyEnum, test$types.MyEnum],\n    \t*\t\t\"&'static [i32; 1]\": [number],\n    \t*\t\t\"&'static [i32; 0]\": [],\n    \t*\t\t\"Option<i32>\": number | null,\n    \t*\t\t\"Option<()>\": null,\n    \t*\t\t\"Option<Vec<i32>>\": number[] | null,\n    \t*\t\t\"Result<String, i32>\": std$result.Result<string, number>,\n    \t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n    \t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n    \t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n    \t*\t\t\"Option<Option<String>>\": string | null,\n    \t*\t\t\"Option<Option<Option<String>>>\": string | null,\n    \t*\t\t\"PhantomData<()>\": null,\n    \t*\t\t\"PhantomData<String>\": null,\n    \t*\t\tInfallible: never,\n    \t*\t\tUnit1: test$types.Unit1,\n    \t*\t\tUnit2: test$types.Unit2,\n    \t*\t\tUnit3: test$types.Unit3,\n    \t*\t\tUnit4: test$types.Unit4,\n    \t*\t\tUnit5: test$types.Unit5,\n    \t*\t\tUnit6: test$types.Unit6,\n    \t*\t\tUnit7: test$types.Unit7,\n    \t*\t\tSimpleStruct: test$types.SimpleStruct,\n    \t*\t\tTupleStruct1: test$types.TupleStruct1,\n    \t*\t\tTupleStruct3: test$types.TupleStruct3,\n    \t*\t\tTestEnum: test$types.TestEnum,\n    \t*\t\tRefStruct: test$types.RefStruct,\n    \t*\t\tInlinerStruct: test$types.InlinerStruct,\n    \t*\t\t\"GenericStruct<i32>\": test$types.GenericStruct<number>,\n    \t*\t\t\"GenericStruct<String>\": test$types.GenericStruct<string>,\n    \t*\t\tFlattenEnumStruct: test$types.FlattenEnumStruct,\n    \t*\t\tOverridenStruct: test$types.OverridenStruct,\n    \t*\t\tHasGenericAlias: test$types.HasGenericAlias,\n    \t*\t\tEnumMacroAttributes: test$types.EnumMacroAttributes,\n    \t*\t\tInlineEnumField: test$types.InlineEnumField,\n    \t*\t\tInlineOptionalType: test$types.InlineOptionalType,\n    \t*\t\tRename: test$types.Rename,\n    \t*\t\tTransparentType: test$types.TransparentType,\n    \t*\t\tTransparentType2: test$types.TransparentType2,\n    \t*\t\tTransparentTypeWithOverride: test$types.TransparentTypeWithOverride,\n    \t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n    \t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test$types.BasicEnum]: null }>,\n    \t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test$types.BasicEnum]: number }>,\n    \t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n    \t*\t\t\"Vec<PlaceholderInnerField>\": test$types.PlaceholderInnerField[],\n    \t*\t\tEnumReferenceRecordKey: test$types.EnumReferenceRecordKey,\n    \t*\t\tFlattenOnNestedEnum: test$types.FlattenOnNestedEnum,\n    \t*\t\tMyEmptyInput: test$types.MyEmptyInput,\n    \t*\t\t\"(String)\": string,\n    \t*\t\t\"(String,)\": [string],\n    \t*\t\tExtraBracketsInTupleVariant: test$types.ExtraBracketsInTupleVariant,\n    \t*\t\tExtraBracketsInUnnamedStruct: test$types.ExtraBracketsInUnnamedStruct,\n    \t*\t\t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \t*\t\tInlineTuple: test$types.InlineTuple,\n    \t*\t\tInlineTuple2: test$types.InlineTuple2,\n    \t*\t\t\"Box<str>\": string,\n    \t*\t\t\"Box<String>\": string,\n    \t*\t\tSkippedFieldWithinVariant: test$types.SkippedFieldWithinVariant,\n    \t*\t\tKebabCase: test$types.KebabCase,\n    \t*\t\t\"&[&str]\": string[],\n    \t*\t\t\"Issue281<'_>\": test$types.Issue281,\n    \t*\t\t\"LifetimeGenericStruct<'_, i32>\": test$types.LifetimeGenericStruct<number>,\n    \t*\t\t\"LifetimeGenericEnum<'_, i32>\": test$types.LifetimeGenericEnum<number>,\n    \t*\t\tRenameWithWeirdCharsField: test$types.RenameWithWeirdCharsField,\n    \t*\t\tRenameWithWeirdCharsVariant: test$types.RenameWithWeirdCharsVariant,\n    \t*\t\tRenamedFieldKeys: test$types.RenamedFieldKeys,\n    \t*\t\tRenamedVariantWithSkippedPayload: test$types.RenamedVariantWithSkippedPayload,\n    \t*\t\t\"type_type::Type\": test$types$type_type.Type,\n    \t*\t\tActualType: test$types.ActualType,\n    \t*\t\tSpectaTypeOverride: test$types.SpectaTypeOverride,\n    \t*\t\tContainerTypeOverrideStruct: test$types.ContainerTypeOverrideStruct,\n    \t*\t\tContainerTypeOverrideEnum: test$types.ContainerTypeOverrideEnum,\n    \t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test$types.ContainerTypeOverrideGeneric,\n    \t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": test$types.ContainerTypeOverrideToGeneric<number>,\n    \t*\t\tContainerTypeOverrideTuple: test$types.ContainerTypeOverrideTuple,\n    \t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": test$types.ContainerTypeOverrideTupleGeneric<number>,\n    \t*\t\tInvalidToValidType: test$types.InvalidToValidType,\n    \t*\t\tTupleStruct: test$types.TupleStruct,\n    \t*\t\tTupleStructWithRep: test$types.TupleStructWithRep,\n    \t*\t\t\"GenericTupleStruct<String>\": test$types.GenericTupleStruct<string>,\n    \t*\t\tBracedStruct: test$types.BracedStruct,\n    \t*\t\tStruct: test$types.StructNew,\n    \t*\t\tStruct2: test$types.Struct2,\n    \t*\t\tEnum: test$types.Enum,\n    \t*\t\tEnum2: test$types.Enum2,\n    \t*\t\tEnum3: test$types.Enum3,\n    \t*\t\tStructRenameAllUppercase: test$types.StructRenameAllUppercase,\n    \t*\t\tRenameSerdeSpecialChar: test$types.RenameSerdeSpecialChar,\n    \t*\t\tEnumRenameAllUppercase: test$types.EnumRenameAllUppercase,\n    \t*\t\tRecursive: test$types.Recursive,\n    \t*\t\tRecursiveMapValue: test$types.RecursiveMapValue,\n    \t*\t\tRecursiveTransparent: test$types.RecursiveTransparent,\n    \t*\t\tRecursiveInEnum: test$types.RecursiveInEnum,\n    \t*\t\tNonOptional: test$types.NonOptional,\n    \t*\t\tOptionalOnNamedField: test$types.OptionalOnNamedField,\n    \t*\t\tOptionalOnTransparentNamedField: test$types.OptionalOnTransparentNamedField,\n    \t*\t\tOptionalInEnum: test$types.OptionalInEnum,\n    \t*\t\tUntaggedVariants: test$types.UntaggedVariants,\n    \t*\t\tUntaggedVariantsWithoutValue: test$types.UntaggedVariantsWithoutValue,\n    \t*\t\tUntaggedVariantsWithDuplicateBranches: test$types.UntaggedVariantsWithDuplicateBranches,\n    \t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n    \t*\t\tRegular: test$types.Regular,\n    \t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n    \t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in test$types.TransparentStruct]: null },\n    \t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test$types.UnitVariants]: null }>,\n    \t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test$types.UntaggedVariantsKey]: null }>,\n    \t*\t\tValidMaybeValidKey: test$types.ValidMaybeValidKey,\n    \t*\t\tValidMaybeValidKeyNested: test$types.ValidMaybeValidKeyNested,\n    \t*\t\tMacroStruct: test$types.MacroStruct,\n    \t*\t\tMacroStruct2: test$types.MacroStruct2,\n    \t*\t\tMacroEnum: test$types.MacroEnum,\n    \t*\t\tDeprecatedType: test$types.DeprecatedType,\n    \t*\t\tDeprecatedTypeWithMsg: test$types.DeprecatedTypeWithMsg,\n    \t*\t\tDeprecatedTypeWithMsg2: test$types.DeprecatedTypeWithMsg2,\n    \t*\t\tDeprecatedFields: test$types.DeprecatedFields,\n    \t*\t\tDeprecatedTupleVariant: test$types.DeprecatedTupleVariant,\n    \t*\t\tDeprecatedEnumVariants: test$types.DeprecatedEnumVariants,\n    \t*\t\tCommentedStruct: test$types.CommentedStruct,\n    \t*\t\tCommentedEnum: test$types.CommentedEnum,\n    \t*\t\tSingleLineComment: test$types.SingleLineComment,\n    \t*\t\tNonGeneric: test$types.Demo<number, boolean>,\n    \t*\t\t\"HalfGenericA<u8>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"HalfGenericB<bool>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"FullGeneric<u8, bool>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"Another<bool>\": test$types.Demo<number, boolean>,\n    \t*\t\t\"MapA<u32>\": { [key in string]: number },\n    \t*\t\t\"MapB<u32>\": { [key in number]: string },\n    \t*\t\t\"MapC<u32>\": { [key in string]: test$types.AGenericStruct<number> },\n    \t*\t\t\"AGenericStruct<u32>\": test$types.AGenericStruct<number>,\n    \t*\t\tA: test$types.A,\n    \t*\t\tDoubleFlattened: test$types.DoubleFlattened,\n    \t*\t\tFlattenedInner: test$types.FlattenedInner,\n    \t*\t\tBoxFlattened: test$types.BoxFlattened,\n    \t*\t\tBoxInline: test$types.BoxInline,\n    \t*\t\tFirst: test$types.First,\n    \t*\t\tSecond: test$types.Second,\n    \t*\t\tThird: test$types.Third,\n    \t*\t\tFourth: test$types.Fourth,\n    \t*\t\tTagOnStructWithInline: test$types.TagOnStructWithInline,\n    \t*\t\tSixth: test$types.Sixth,\n    \t*\t\tSeventh: test$types.Seventh,\n    \t*\t\tEight: test$types.Eight,\n    \t*\t\tNinth: test$types.Ninth,\n    \t*\t\tTenth: test$types.Tenth,\n    \t*\t\tMyEnumTagged: test$types.MyEnumTagged,\n    \t*\t\tMyEnumExternal: test$types.MyEnumExternal,\n    \t*\t\tMyEnumAdjacent: test$types.MyEnumAdjacent,\n    \t*\t\tMyEnumUntagged: test$types.MyEnumUntagged,\n    \t*\t\tEmptyStruct: test$types.EmptyStruct,\n    \t*\t\tEmptyStructWithTag: test$types.EmptyStructWithTag,\n    \t*\t\tAdjacentlyTagged: test$types.AdjacentlyTagged,\n    \t*\t\tLoadProjectEvent: test$types.LoadProjectEvent,\n    \t*\t\tExternallyTagged: test$types.ExternallyTagged,\n    \t*\t\tIssue221External: test$types.Issue221External,\n    \t*\t\tInternallyTaggedD: test$types.InternallyTaggedD,\n    \t*\t\tInternallyTaggedE: test$types.InternallyTaggedE,\n    \t*\t\tInternallyTaggedF: test$types.InternallyTaggedF,\n    \t*\t\tInternallyTaggedH: test$types.InternallyTaggedH,\n    \t*\t\tInternallyTaggedL: test$types.InternallyTaggedL,\n    \t*\t\tInternallyTaggedM: test$types.InternallyTaggedM,\n    \t*\t\tStructWithAlias: test$types.StructWithAlias,\n    \t*\t\tStructWithMultipleAliases: test$types.StructWithMultipleAliases,\n    \t*\t\tStructWithAliasAndRename: test$types.StructWithAliasAndRename,\n    \t*\t\tEnumWithVariantAlias: test$types.EnumWithVariantAlias,\n    \t*\t\tEnumWithMultipleVariantAliases: test$types.EnumWithMultipleVariantAliases,\n    \t*\t\tEnumWithVariantAliasAndRename: test$types.EnumWithVariantAliasAndRename,\n    \t*\t\tInternallyTaggedWithAlias: test$types.InternallyTaggedWithAlias,\n    \t*\t\tAdjacentlyTaggedWithAlias: test$types.AdjacentlyTaggedWithAlias,\n    \t*\t\tUntaggedWithAlias: test$types.UntaggedWithAlias,\n    \t*\t\tIssue221UntaggedSafe: test$types.Issue221UntaggedSafe,\n    \t*\t\tIssue221UntaggedMixed: test$types.Issue221UntaggedMixed,\n    \t*\t\tEmptyEnum: test$types.EmptyEnum,\n    \t*\t\tEmptyEnumTagged: test$types.EmptyEnumTagged,\n    \t*\t\tEmptyEnumTaggedWContent: test$types.EmptyEnumTaggedWContent,\n    \t*\t\tEmptyEnumUntagged: test$types.EmptyEnumUntagged,\n    \t*\t\tSkipOnlyField: test$types.SkipOnlyField,\n    \t*\t\tSkipField: test$types.SkipField,\n    \t*\t\tSkipVariant: test$types.SkipVariant,\n    \t*\t\tSkipUnnamedFieldInVariant: test$types.SkipUnnamedFieldInVariant,\n    \t*\t\tSkipNamedFieldInVariant: test$types.SkipNamedFieldInVariant,\n    \t*\t\tTransparentWithSkip: test$types.TransparentWithSkip,\n    \t*\t\tTransparentWithSkip2: test$types.TransparentWithSkip2,\n    \t*\t\tTransparentWithSkip3: test$types.TransparentWithSkip3,\n    \t*\t\tSkipVariant2: test$types.SkipVariant2,\n    \t*\t\tSkipVariant3: test$types.SkipVariant3,\n    \t*\t\tSkipStructFields: test$types.SkipStructFields,\n    \t*\t\tSpectaSkipNonTypeField: test$types.SpectaSkipNonTypeField,\n    \t*\t\tFlattenA: test$types.FlattenA,\n    \t*\t\tFlattenB: test$types.FlattenB,\n    \t*\t\tFlattenC: test$types.FlattenC,\n    \t*\t\tFlattenD: test$types.FlattenD,\n    \t*\t\tFlattenE: test$types.FlattenE,\n    \t*\t\tFlattenF: test$types.FlattenF,\n    \t*\t\tFlattenG: test$types.FlattenG,\n    \t*\t\tTupleNested: test$types.TupleNested,\n    \t*\t\t\"Generic1<()>\": test$types.Generic1<null>,\n    \t*\t\t\"GenericAutoBound<()>\": test$types.GenericAutoBound<null>,\n    \t*\t\t\"GenericAutoBound2<()>\": test$types.GenericAutoBound2<null>,\n    \t*\t\tContainer1: test$types.Container1,\n    \t*\t\t\"Generic2<(), String, i32>\": test$types.Generic2<null, string, number>,\n    \t*\t\t\"GenericNewType1<()>\": test$types.GenericNewType1<null>,\n    \t*\t\t\"GenericTuple<()>\": test$types.GenericTuple<null>,\n    \t*\t\t\"GenericStruct2<()>\": test$types.GenericStruct2<null>,\n    \t*\t\t\"InlineGenericNewtype<String>\": string,\n    \t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n    \t* \tvalue: string,\n    \t* } }) & { Unnamed?: never }],\n    \t*\t\t\"InlineFlattenGenericsG<()>\": test$types.InlineFlattenGenericsG<null>,\n    \t*\t\tInlineFlattenGenerics: test$types.InlineFlattenGenerics,\n    \t*\t\tGenericDefault: test$types.GenericDefault,\n    \t*\t\tChainedGenericDefault: test$types.ChainedGenericDefault,\n    \t*\t\t\"ChainedGenericDefault<String, String>\": test$types.ChainedGenericDefault,\n    \t*\t\t\"ChainedGenericDefault<i32>\": test$types.ChainedGenericDefault<number, number>,\n    \t*\t\t\"ChainedGenericDefault<String, i32>\": test$types.ChainedGenericDefault<string, number>,\n    \t*\t\tGenericDefaultSkipped: test$types.GenericDefaultSkipped<string>,\n    \t*\t\tGenericDefaultSkippedNonType: test$types.GenericDefaultSkippedNonType<unknown>,\n    \t*\t\tGenericParameterOrderPreserved: test$types.GenericParameterOrderPreserved,\n    \t*\t\tConstGenericInNonConstContainer: test$types.ConstGenericInNonConstContainer,\n    \t*\t\tConstGenericInConstContainer: test$types.ConstGenericInConstContainer,\n    \t*\t\tNamedConstGenericContainer: test$types.NamedConstGenericContainer,\n    \t*\t\tInlineConstGenericContainer: test$types.InlineConstGenericContainer,\n    \t*\t\tInlineRecursiveConstGenericContainer: test$types.InlineRecursiveConstGenericContainer,\n    \t*\t\tTestCollectionRegister: test$types.TestCollectionRegister,\n    \t*\t\tTestCollectionRegister: test$types.TestCollectionRegister,\n    \t*\t}} Primitives\n    \t* @property {number} i8\n    \t* @property {number} i16\n    \t* @property {number} i32\n    \t* @property {number} u8\n    \t* @property {number} u16\n    \t* @property {number} u32\n    \t* @property {number} f32\n    \t* @property {number} f64\n    \t* @property {boolean} bool\n    \t* @property {string} char\n    \t* @property {std$ops.Range<number>} \"Range<i32>\"\n    \t* @property {std$ops.RangeInclusive<number>} \"RangeInclusive<i32>\"\n    \t* @property {null} \"()\"\n    \t* @property {[string, number]} \"(String, i32)\"\n    \t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n    \t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n    \t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n    \t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n    \t* @property {string} String\n    \t* @property {string} PathBuf\n    \t* @property {string} IpAddr\n    \t* @property {string} Ipv4Addr\n    \t* @property {string} Ipv6Addr\n    \t* @property {string} SocketAddr\n    \t* @property {string} SocketAddrV4\n    \t* @property {string} SocketAddrV6\n    \t* @property {string} \"Cow<'static, str>\"\n    \t* @property {number} \"Cow<'static, i32>\"\n    \t* @property {string} \"&'static str\"\n    \t* @property {boolean} \"&'static bool\"\n    \t* @property {number} \"&'static i32\"\n    \t* @property {number[]} \"Vec<i32>\"\n    \t* @property {number[]} \"&'static [i32]\"\n    \t* @property {[number, number, number]} \"&'static [i32; 3]\"\n    \t* @property {[number, number, number]} \"[i32; 3]\"\n    \t* @property {test$types.MyEnum[]} \"Vec<MyEnum>\"\n    \t* @property {test$types.MyEnum[]} \"&'static [MyEnum]\"\n    \t* @property {[test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum]} \"&'static [MyEnum; 6]\"\n    \t* @property {[test$types.MyEnum, test$types.MyEnum]} \"[MyEnum; 2]\"\n    \t* @property {[number]} \"&'static [i32; 1]\"\n    \t* @property {[]} \"&'static [i32; 0]\"\n    \t* @property {number | null} \"Option<i32>\"\n    \t* @property {null} \"Option<()>\"\n    \t* @property {number[] | null} \"Option<Vec<i32>>\"\n    \t* @property {std$result.Result<string, number>} \"Result<String, i32>\"\n    \t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n    \t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n    \t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n    \t* @property {string | null} \"Option<Option<String>>\"\n    \t* @property {string | null} \"Option<Option<Option<String>>>\"\n    \t* @property {null} \"PhantomData<()>\"\n    \t* @property {null} \"PhantomData<String>\"\n    \t* @property {never} Infallible\n    \t* @property {test$types.Unit1} Unit1\n    \t* @property {test$types.Unit2} Unit2\n    \t* @property {test$types.Unit3} Unit3\n    \t* @property {test$types.Unit4} Unit4\n    \t* @property {test$types.Unit5} Unit5\n    \t* @property {test$types.Unit6} Unit6\n    \t* @property {test$types.Unit7} Unit7\n    \t* @property {test$types.SimpleStruct} SimpleStruct\n    \t* @property {test$types.TupleStruct1} TupleStruct1\n    \t* @property {test$types.TupleStruct3} TupleStruct3\n    \t* @property {test$types.TestEnum} TestEnum\n    \t* @property {test$types.RefStruct} RefStruct\n    \t* @property {test$types.InlinerStruct} InlinerStruct\n    \t* @property {test$types.GenericStruct<number>} \"GenericStruct<i32>\"\n    \t* @property {test$types.GenericStruct<string>} \"GenericStruct<String>\"\n    \t* @property {test$types.FlattenEnumStruct} FlattenEnumStruct\n    \t* @property {test$types.OverridenStruct} OverridenStruct\n    \t* @property {test$types.HasGenericAlias} HasGenericAlias\n    \t* @property {test$types.EnumMacroAttributes} EnumMacroAttributes\n    \t* @property {test$types.InlineEnumField} InlineEnumField\n    \t* @property {test$types.InlineOptionalType} InlineOptionalType\n    \t* @property {test$types.Rename} Rename\n    \t* @property {test$types.TransparentType} TransparentType\n    \t* @property {test$types.TransparentType2} TransparentType2\n    \t* @property {test$types.TransparentTypeWithOverride} TransparentTypeWithOverride\n    \t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n    \t* @property {Partial<{ [key in test$types.BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n    \t* @property {Partial<{ [key in test$types.BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n    \t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n    \t* @property {test$types.PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n    \t* @property {test$types.EnumReferenceRecordKey} EnumReferenceRecordKey\n    \t* @property {test$types.FlattenOnNestedEnum} FlattenOnNestedEnum\n    \t* @property {test$types.MyEmptyInput} MyEmptyInput\n    \t* @property {string} \"(String)\"\n    \t* @property {[string]} \"(String,)\"\n    \t* @property {test$types.ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n    \t* @property {test$types.ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n    \t* @property {test$types.MyEnum[]} \"Vec<MyEnum>\"\n    \t* @property {test$types.InlineTuple} InlineTuple\n    \t* @property {test$types.InlineTuple2} InlineTuple2\n    \t* @property {string} \"Box<str>\"\n    \t* @property {string} \"Box<String>\"\n    \t* @property {test$types.SkippedFieldWithinVariant} SkippedFieldWithinVariant\n    \t* @property {test$types.KebabCase} KebabCase\n    \t* @property {string[]} \"&[&str]\"\n    \t* @property {test$types.Issue281} \"Issue281<'_>\"\n    \t* @property {test$types.LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n    \t* @property {test$types.LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n    \t* @property {test$types.RenameWithWeirdCharsField} RenameWithWeirdCharsField\n    \t* @property {test$types.RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n    \t* @property {test$types.RenamedFieldKeys} RenamedFieldKeys\n    \t* @property {test$types.RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n    \t* @property {test$types$type_type.Type} \"type_type::Type\"\n    \t* @property {test$types.ActualType} ActualType\n    \t* @property {test$types.SpectaTypeOverride} SpectaTypeOverride\n    \t* @property {test$types.ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n    \t* @property {test$types.ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n    \t* @property {test$types.ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n    \t* @property {test$types.ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n    \t* @property {test$types.ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n    \t* @property {test$types.ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n    \t* @property {test$types.InvalidToValidType} InvalidToValidType\n    \t* @property {test$types.TupleStruct} TupleStruct\n    \t* @property {test$types.TupleStructWithRep} TupleStructWithRep\n    \t* @property {test$types.GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n    \t* @property {test$types.BracedStruct} BracedStruct\n    \t* @property {test$types.StructNew} Struct\n    \t* @property {test$types.Struct2} Struct2\n    \t* @property {test$types.Enum} Enum\n    \t* @property {test$types.Enum2} Enum2\n    \t* @property {test$types.Enum3} Enum3\n    \t* @property {test$types.StructRenameAllUppercase} StructRenameAllUppercase\n    \t* @property {test$types.RenameSerdeSpecialChar} RenameSerdeSpecialChar\n    \t* @property {test$types.EnumRenameAllUppercase} EnumRenameAllUppercase\n    \t* @property {test$types.Recursive} Recursive\n    \t* @property {test$types.RecursiveMapValue} RecursiveMapValue\n    \t* @property {test$types.RecursiveTransparent} RecursiveTransparent\n    \t* @property {test$types.RecursiveInEnum} RecursiveInEnum\n    \t* @property {test$types.NonOptional} NonOptional\n    \t* @property {test$types.OptionalOnNamedField} OptionalOnNamedField\n    \t* @property {test$types.OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n    \t* @property {test$types.OptionalInEnum} OptionalInEnum\n    \t* @property {test$types.UntaggedVariants} UntaggedVariants\n    \t* @property {test$types.UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n    \t* @property {test$types.UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n    \t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n    \t* @property {test$types.Regular} Regular\n    \t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n    \t* @property {{ [key in test$types.TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n    \t* @property {Partial<{ [key in test$types.UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n    \t* @property {Partial<{ [key in test$types.UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n    \t* @property {test$types.ValidMaybeValidKey} ValidMaybeValidKey\n    \t* @property {test$types.ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n    \t* @property {test$types.MacroStruct} MacroStruct\n    \t* @property {test$types.MacroStruct2} MacroStruct2\n    \t* @property {test$types.MacroEnum} MacroEnum\n    \t* @property {test$types.DeprecatedType} DeprecatedType\n    \t* @property {test$types.DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n    \t* @property {test$types.DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n    \t* @property {test$types.DeprecatedFields} DeprecatedFields\n    \t* @property {test$types.DeprecatedTupleVariant} DeprecatedTupleVariant\n    \t* @property {test$types.DeprecatedEnumVariants} DeprecatedEnumVariants\n    \t* @property {test$types.CommentedStruct} CommentedStruct\n    \t* @property {test$types.CommentedEnum} CommentedEnum\n    \t* @property {test$types.SingleLineComment} SingleLineComment\n    \t* @property {test$types.Demo<number, boolean>} NonGeneric\n    \t* @property {test$types.Demo<number, boolean>} \"HalfGenericA<u8>\"\n    \t* @property {test$types.Demo<number, boolean>} \"HalfGenericB<bool>\"\n    \t* @property {test$types.Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n    \t* @property {test$types.Demo<number, boolean>} \"Another<bool>\"\n    \t* @property {{ [key in string]: number }} \"MapA<u32>\"\n    \t* @property {{ [key in number]: string }} \"MapB<u32>\"\n    \t* @property {{ [key in string]: test$types.AGenericStruct<number> }} \"MapC<u32>\"\n    \t* @property {test$types.AGenericStruct<number>} \"AGenericStruct<u32>\"\n    \t* @property {test$types.A} A\n    \t* @property {test$types.DoubleFlattened} DoubleFlattened\n    \t* @property {test$types.FlattenedInner} FlattenedInner\n    \t* @property {test$types.BoxFlattened} BoxFlattened\n    \t* @property {test$types.BoxInline} BoxInline\n    \t* @property {test$types.First} First\n    \t* @property {test$types.Second} Second\n    \t* @property {test$types.Third} Third\n    \t* @property {test$types.Fourth} Fourth\n    \t* @property {test$types.TagOnStructWithInline} TagOnStructWithInline\n    \t* @property {test$types.Sixth} Sixth\n    \t* @property {test$types.Seventh} Seventh\n    \t* @property {test$types.Eight} Eight\n    \t* @property {test$types.Ninth} Ninth\n    \t* @property {test$types.Tenth} Tenth\n    \t* @property {test$types.MyEnumTagged} MyEnumTagged\n    \t* @property {test$types.MyEnumExternal} MyEnumExternal\n    \t* @property {test$types.MyEnumAdjacent} MyEnumAdjacent\n    \t* @property {test$types.MyEnumUntagged} MyEnumUntagged\n    \t* @property {test$types.EmptyStruct} EmptyStruct\n    \t* @property {test$types.EmptyStructWithTag} EmptyStructWithTag\n    \t* @property {test$types.AdjacentlyTagged} AdjacentlyTagged\n    \t* @property {test$types.LoadProjectEvent} LoadProjectEvent\n    \t* @property {test$types.ExternallyTagged} ExternallyTagged\n    \t* @property {test$types.Issue221External} Issue221External\n    \t* @property {test$types.InternallyTaggedD} InternallyTaggedD\n    \t* @property {test$types.InternallyTaggedE} InternallyTaggedE\n    \t* @property {test$types.InternallyTaggedF} InternallyTaggedF\n    \t* @property {test$types.InternallyTaggedH} InternallyTaggedH\n    \t* @property {test$types.InternallyTaggedL} InternallyTaggedL\n    \t* @property {test$types.InternallyTaggedM} InternallyTaggedM\n    \t* @property {test$types.StructWithAlias} StructWithAlias\n    \t* @property {test$types.StructWithMultipleAliases} StructWithMultipleAliases\n    \t* @property {test$types.StructWithAliasAndRename} StructWithAliasAndRename\n    \t* @property {test$types.EnumWithVariantAlias} EnumWithVariantAlias\n    \t* @property {test$types.EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n    \t* @property {test$types.EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n    \t* @property {test$types.InternallyTaggedWithAlias} InternallyTaggedWithAlias\n    \t* @property {test$types.AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n    \t* @property {test$types.UntaggedWithAlias} UntaggedWithAlias\n    \t* @property {test$types.Issue221UntaggedSafe} Issue221UntaggedSafe\n    \t* @property {test$types.Issue221UntaggedMixed} Issue221UntaggedMixed\n    \t* @property {test$types.EmptyEnum} EmptyEnum\n    \t* @property {test$types.EmptyEnumTagged} EmptyEnumTagged\n    \t* @property {test$types.EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n    \t* @property {test$types.EmptyEnumUntagged} EmptyEnumUntagged\n    \t* @property {test$types.SkipOnlyField} SkipOnlyField\n    \t* @property {test$types.SkipField} SkipField\n    \t* @property {test$types.SkipVariant} SkipVariant\n    \t* @property {test$types.SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n    \t* @property {test$types.SkipNamedFieldInVariant} SkipNamedFieldInVariant\n    \t* @property {test$types.TransparentWithSkip} TransparentWithSkip\n    \t* @property {test$types.TransparentWithSkip2} TransparentWithSkip2\n    \t* @property {test$types.TransparentWithSkip3} TransparentWithSkip3\n    \t* @property {test$types.SkipVariant2} SkipVariant2\n    \t* @property {test$types.SkipVariant3} SkipVariant3\n    \t* @property {test$types.SkipStructFields} SkipStructFields\n    \t* @property {test$types.SpectaSkipNonTypeField} SpectaSkipNonTypeField\n    \t* @property {test$types.FlattenA} FlattenA\n    \t* @property {test$types.FlattenB} FlattenB\n    \t* @property {test$types.FlattenC} FlattenC\n    \t* @property {test$types.FlattenD} FlattenD\n    \t* @property {test$types.FlattenE} FlattenE\n    \t* @property {test$types.FlattenF} FlattenF\n    \t* @property {test$types.FlattenG} FlattenG\n    \t* @property {test$types.TupleNested} TupleNested\n    \t* @property {test$types.Generic1<null>} \"Generic1<()>\"\n    \t* @property {test$types.GenericAutoBound<null>} \"GenericAutoBound<()>\"\n    \t* @property {test$types.GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n    \t* @property {test$types.Container1} Container1\n    \t* @property {test$types.Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n    \t* @property {test$types.GenericNewType1<null>} \"GenericNewType1<()>\"\n    \t* @property {test$types.GenericTuple<null>} \"GenericTuple<()>\"\n    \t* @property {test$types.GenericStruct2<null>} \"GenericStruct2<()>\"\n    \t* @property {string} \"InlineGenericNewtype<String>\"\n    \t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n    \t* \tvalue: string,\n    \t* } }) & { Unnamed?: never }]} \"InlineGenericNested<String>\"\n    \t* @property {test$types.InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n    \t* @property {test$types.InlineFlattenGenerics} InlineFlattenGenerics\n    \t* @property {test$types.GenericDefault} GenericDefault\n    \t* @property {test$types.ChainedGenericDefault} ChainedGenericDefault\n    \t* @property {test$types.ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n    \t* @property {test$types.ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n    \t* @property {test$types.ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n    \t* @property {test$types.GenericDefaultSkipped<string>} GenericDefaultSkipped\n    \t* @property {test$types.GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n    \t* @property {test$types.GenericParameterOrderPreserved} GenericParameterOrderPreserved\n    \t* @property {test$types.ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n    \t* @property {test$types.ConstGenericInConstContainer} ConstGenericInConstContainer\n    \t* @property {test$types.NamedConstGenericContainer} NamedConstGenericContainer\n    \t* @property {test$types.InlineConstGenericContainer} InlineConstGenericContainer\n    \t* @property {test$types.InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n    \t* @property {test$types.TestCollectionRegister} TestCollectionRegister\n    \t* @property {test$types.TestCollectionRegister} TestCollectionRegister\n    \t*/\n    ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-flatfile-raw.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\njsdoc-export-to-flatfile-raw (51729 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n/**\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*\n\t* @typedef {\"A\" | { id: string; method: string } | string} AdjacentlyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} AdjacentlyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} B\n\t* @property {number} b\n\t*\n\t* @typedef {\"A\" | \"B\"} BasicEnum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{\n\t*\t\tb: BoxedInner,\n\t*\t}} BoxFlattened\n\t* @property {BoxedInner} b\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} BoxedInner\n\t* @property {number} a\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* number | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* { \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* a: number }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* number} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { \n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* a: number }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tflattened: number,\n\t*\t}} D\n\t* @property {number} flattened\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*\n\t* @typedef {string | \"B\"} Eight\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {Record<string, never>} EmptyStructWithTag\n\t*\n\t* @typedef {\"A\" | \"B\"} Enum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {\"A\" | \"B\" | { enum_field: null }} Enum2\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {{ enum_field: null }} D\n\t*\n\t* @typedef {{ a: string }} Enum3\n\t* @property {{ a: string }} A\n\t*\n\t* @typedef {string | number | { a: string; b: number }} EnumMacroAttributes\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ a: string; b: number }} D\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*\n\t* @typedef {\"HelloWorld\" | \"VariantB\" | \"TestingWords\"} EnumRenameAllUppercase\n\t* @property {\"HelloWorld\"} HelloWorld\n\t* @property {\"VariantB\"} VariantB\n\t* @property {\"TestingWords\"} TestingWords\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"A\" | { id: string; method: string } | string} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*\n\t* @typedef {string} ExtraBracketsInTupleVariant\n\t* @property {string} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenB\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenC\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} b\n\t* @property {number} d\n\t*\n\t* @typedef {\"One\" | \"Two\" | \"Three\"} FlattenEnum\n\t* @property {\"One\"} One\n\t* @property {\"Two\"} Two\n\t* @property {\"Three\"} Three\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t\tinner: FlattenEnum,\n\t*\t}} FlattenEnumStruct\n\t* @property {string} outer\n\t* @property {FlattenEnum} inner\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t\tresult: NestedEnum,\n\t*\t}} FlattenOnNestedEnum\n\t* @property {string} id\n\t* @property {NestedEnum} result\n\t*\n\t* @typedef {{\n\t*\t\tc: Inner,\n\t*\t}} FlattenedInner\n\t* @property {Inner} c\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][]} Generic2<A, B, C>\n\t* @property {A} A\n\t* @property {[B, B, B]} B\n\t* @property {C[]} C\n\t* @property {A[][][]} D\n\t* @property {{ a: A; b: B; c: C }} E\n\t* @property {number[]} X\n\t* @property {number} Y\n\t* @property {number[][]} Z\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tgeneric_flattened: T,\n\t*\t}} GenericFlattened<T>\n\t* @property {T} generic_flattened\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {\"Undefined\" | T} GenericType<T>\n\t* @property {\"Undefined\"} Undefined\n\t* @property {T} Value\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t* \ta: string,\n\t* }} InlineEnumField\n\t* @property {{\n\t* \ta: string,\n\t* }} A\n\t*\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t\tt: InlineFlattenGenericsG<string>,\n\t*\t}} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t* @property {InlineFlattenGenericsG<string>} t\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} InlineRecursiveConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number, number]} d\n\t* @property {InlineRecursiveConstGeneric} e\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} InlineStruct\n\t* @property {SimpleStruct} ref_struct\n\t* @property {number} val\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: FlattenedInner,\n\t*\t}} Inner\n\t* @property {number} a\n\t* @property {FlattenedInner} b\n\t*\n\t* @typedef {{ [key in string]: string }} InternallyTaggedD\n\t* @property {{ [key in string]: string }} A\n\t*\n\t* @typedef {null} InternallyTaggedE\n\t* @property {null} A\n\t*\n\t* @typedef {InternallyTaggedFInner} InternallyTaggedF\n\t* @property {InternallyTaggedFInner} A\n\t*\n\t* @typedef {null} InternallyTaggedFInner\n\t* @property {null} A\n\t*\n\t* @typedef {InternallyTaggedHInner} InternallyTaggedH\n\t* @property {InternallyTaggedHInner} A\n\t*\n\t* @typedef {null} InternallyTaggedHInner\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedL\n\t* @property {\"A\" | \"B\"} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedLInner\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedM\n\t* @property {\"A\" | \"B\"} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} InternallyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221External\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\ttest_ing: string,\n\t*\t}} KebabCase\n\t* @property {string} test_ing\n\t*\n\t* @typedef {T} LifetimeGenericEnum<T>\n\t* @property {T} Borrowed\n\t* @property {T} Owned\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number }} LoadProjectEvent\n\t* @property {{ project_name: string }} Started\n\t* @property {{ project_name: string; status: string; progress: number }} ProgressTest\n\t* @property {{ project_name: string }} Finished\n\t*\n\t* @typedef {string | { demo2: string }} MacroEnum\n\t* @property {string} Demo\n\t* @property {{ demo2: string }} Demo2\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {T} MaybeValidKey<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {string | number} MyEnum\n\t* @property {string} A\n\t* @property {number} B\n\t*\n\t* @typedef {{ inner: First }} MyEnumAdjacent\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumExternal\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumTagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {string | number} NestedEnum\n\t* @property {string} A\n\t* @property {number} B\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Ninth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {string | null | { a: string | null } | { a?: string | null }} OptionalInEnum\n\t* @property {string | null} A\n\t* @property {{ a: string | null }} B\n\t* @property {{ a?: string | null }} C\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{\n\t*\t\tfirst: Z,\n\t*\t\tsecond: A,\n\t*\t}} Pair<Z, A>\n\t* @property {Z} first\n\t* @property {A} second\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} PlaceholderInnerField\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ti8: number,\n\t*\t\ti16: number,\n\t*\t\ti32: number,\n\t*\t\tu8: number,\n\t*\t\tu16: number,\n\t*\t\tu32: number,\n\t*\t\tf32: number,\n\t*\t\tf64: number,\n\t*\t\tbool: boolean,\n\t*\t\tchar: string,\n\t*\t\t\"Range<i32>\": Range<number>,\n\t*\t\t\"RangeInclusive<i32>\": RangeInclusive<number>,\n\t*\t\t\"()\": null,\n\t*\t\t\"(String, i32)\": [string, number],\n\t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t*\t\tString: string,\n\t*\t\tPathBuf: string,\n\t*\t\tIpAddr: string,\n\t*\t\tIpv4Addr: string,\n\t*\t\tIpv6Addr: string,\n\t*\t\tSocketAddr: string,\n\t*\t\tSocketAddrV4: string,\n\t*\t\tSocketAddrV6: string,\n\t*\t\t\"Cow<'static, str>\": string,\n\t*\t\t\"Cow<'static, i32>\": number,\n\t*\t\t\"&'static str\": string,\n\t*\t\t\"&'static bool\": boolean,\n\t*\t\t\"&'static i32\": number,\n\t*\t\t\"Vec<i32>\": number[],\n\t*\t\t\"&'static [i32]\": number[],\n\t*\t\t\"&'static [i32; 3]\": [number, number, number],\n\t*\t\t\"[i32; 3]\": [number, number, number],\n\t*\t\t\"Vec<MyEnum>\": MyEnum[],\n\t*\t\t\"&'static [MyEnum]\": MyEnum[],\n\t*\t\t\"&'static [MyEnum; 6]\": [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum],\n\t*\t\t\"[MyEnum; 2]\": [MyEnum, MyEnum],\n\t*\t\t\"&'static [i32; 1]\": [number],\n\t*\t\t\"&'static [i32; 0]\": [],\n\t*\t\t\"Option<i32>\": number | null,\n\t*\t\t\"Option<()>\": null,\n\t*\t\t\"Option<Vec<i32>>\": number[] | null,\n\t*\t\t\"Result<String, i32>\": Result<string, number>,\n\t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t*\t\t\"Option<Option<String>>\": string | null,\n\t*\t\t\"Option<Option<Option<String>>>\": string | null,\n\t*\t\t\"PhantomData<()>\": null,\n\t*\t\t\"PhantomData<String>\": null,\n\t*\t\tInfallible: never,\n\t*\t\tUnit1: Unit1,\n\t*\t\tUnit2: Unit2,\n\t*\t\tUnit3: Unit3,\n\t*\t\tUnit4: Unit4,\n\t*\t\tUnit5: Unit5,\n\t*\t\tUnit6: Unit6,\n\t*\t\tUnit7: Unit7,\n\t*\t\tSimpleStruct: SimpleStruct,\n\t*\t\tTupleStruct1: TupleStruct1,\n\t*\t\tTupleStruct3: TupleStruct3,\n\t*\t\tTestEnum: TestEnum,\n\t*\t\tRefStruct: RefStruct,\n\t*\t\tInlinerStruct: InlinerStruct,\n\t*\t\t\"GenericStruct<i32>\": GenericStruct<number>,\n\t*\t\t\"GenericStruct<String>\": GenericStruct<string>,\n\t*\t\tFlattenEnumStruct: FlattenEnumStruct,\n\t*\t\tOverridenStruct: OverridenStruct,\n\t*\t\tHasGenericAlias: HasGenericAlias,\n\t*\t\tEnumMacroAttributes: EnumMacroAttributes,\n\t*\t\tInlineEnumField: InlineEnumField,\n\t*\t\tInlineOptionalType: InlineOptionalType,\n\t*\t\tRename: Rename,\n\t*\t\tTransparentType: TransparentType,\n\t*\t\tTransparentType2: TransparentType2,\n\t*\t\tTransparentTypeWithOverride: TransparentTypeWithOverride,\n\t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in BasicEnum]: null }>,\n\t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in BasicEnum]: number }>,\n\t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t*\t\t\"Vec<PlaceholderInnerField>\": PlaceholderInnerField[],\n\t*\t\tEnumReferenceRecordKey: EnumReferenceRecordKey,\n\t*\t\tFlattenOnNestedEnum: FlattenOnNestedEnum,\n\t*\t\tMyEmptyInput: MyEmptyInput,\n\t*\t\t\"(String)\": string,\n\t*\t\t\"(String,)\": [string],\n\t*\t\tExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant,\n\t*\t\tExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct,\n\t*\t\t\"Vec<MyEnum>\": MyEnum[],\n\t*\t\tInlineTuple: InlineTuple,\n\t*\t\tInlineTuple2: InlineTuple2,\n\t*\t\t\"Box<str>\": string,\n\t*\t\t\"Box<String>\": string,\n\t*\t\tSkippedFieldWithinVariant: SkippedFieldWithinVariant,\n\t*\t\tKebabCase: KebabCase,\n\t*\t\t\"&[&str]\": string[],\n\t*\t\t\"Issue281<'_>\": Issue281,\n\t*\t\t\"LifetimeGenericStruct<'_, i32>\": LifetimeGenericStruct<number>,\n\t*\t\t\"LifetimeGenericEnum<'_, i32>\": LifetimeGenericEnum<number>,\n\t*\t\tRenameWithWeirdCharsField: RenameWithWeirdCharsField,\n\t*\t\tRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant,\n\t*\t\tRenamedFieldKeys: RenamedFieldKeys,\n\t*\t\tRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload,\n\t*\t\t\"type_type::Type\": Type,\n\t*\t\tActualType: ActualType,\n\t*\t\tSpectaTypeOverride: SpectaTypeOverride,\n\t*\t\tContainerTypeOverrideStruct: ContainerTypeOverrideStruct,\n\t*\t\tContainerTypeOverrideEnum: ContainerTypeOverrideEnum,\n\t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": ContainerTypeOverrideGeneric,\n\t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": ContainerTypeOverrideToGeneric<number>,\n\t*\t\tContainerTypeOverrideTuple: ContainerTypeOverrideTuple,\n\t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": ContainerTypeOverrideTupleGeneric<number>,\n\t*\t\tInvalidToValidType: InvalidToValidType,\n\t*\t\tTupleStruct: TupleStruct,\n\t*\t\tTupleStructWithRep: TupleStructWithRep,\n\t*\t\t\"GenericTupleStruct<String>\": GenericTupleStruct<string>,\n\t*\t\tBracedStruct: BracedStruct,\n\t*\t\tStruct: Struct,\n\t*\t\tStruct2: Struct2,\n\t*\t\tEnum: Enum,\n\t*\t\tEnum2: Enum2,\n\t*\t\tEnum3: Enum3,\n\t*\t\tStructRenameAllUppercase: StructRenameAllUppercase,\n\t*\t\tRenameSerdeSpecialChar: RenameSerdeSpecialChar,\n\t*\t\tEnumRenameAllUppercase: EnumRenameAllUppercase,\n\t*\t\tRecursive: Recursive,\n\t*\t\tRecursiveMapValue: RecursiveMapValue,\n\t*\t\tRecursiveTransparent: RecursiveTransparent,\n\t*\t\tRecursiveInEnum: RecursiveInEnum,\n\t*\t\tNonOptional: NonOptional,\n\t*\t\tOptionalOnNamedField: OptionalOnNamedField,\n\t*\t\tOptionalOnTransparentNamedField: OptionalOnTransparentNamedField,\n\t*\t\tOptionalInEnum: OptionalInEnum,\n\t*\t\tUntaggedVariants: UntaggedVariants,\n\t*\t\tUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue,\n\t*\t\tUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches,\n\t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t*\t\tRegular: Regular,\n\t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in TransparentStruct]: null },\n\t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in UnitVariants]: null }>,\n\t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in UntaggedVariantsKey]: null }>,\n\t*\t\tValidMaybeValidKey: ValidMaybeValidKey,\n\t*\t\tValidMaybeValidKeyNested: ValidMaybeValidKeyNested,\n\t*\t\tMacroStruct: MacroStruct,\n\t*\t\tMacroStruct2: MacroStruct2,\n\t*\t\tMacroEnum: MacroEnum,\n\t*\t\tDeprecatedType: DeprecatedType,\n\t*\t\tDeprecatedTypeWithMsg: DeprecatedTypeWithMsg,\n\t*\t\tDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2,\n\t*\t\tDeprecatedFields: DeprecatedFields,\n\t*\t\tDeprecatedTupleVariant: DeprecatedTupleVariant,\n\t*\t\tDeprecatedEnumVariants: DeprecatedEnumVariants,\n\t*\t\tCommentedStruct: CommentedStruct,\n\t*\t\tCommentedEnum: CommentedEnum,\n\t*\t\tSingleLineComment: SingleLineComment,\n\t*\t\tNonGeneric: Demo<number, boolean>,\n\t*\t\t\"HalfGenericA<u8>\": Demo<number, boolean>,\n\t*\t\t\"HalfGenericB<bool>\": Demo<number, boolean>,\n\t*\t\t\"FullGeneric<u8, bool>\": Demo<number, boolean>,\n\t*\t\t\"Another<bool>\": Demo<number, boolean>,\n\t*\t\t\"MapA<u32>\": { [key in string]: number },\n\t*\t\t\"MapB<u32>\": { [key in number]: string },\n\t*\t\t\"MapC<u32>\": { [key in string]: AGenericStruct<number> },\n\t*\t\t\"AGenericStruct<u32>\": AGenericStruct<number>,\n\t*\t\tA: A,\n\t*\t\tDoubleFlattened: DoubleFlattened,\n\t*\t\tFlattenedInner: FlattenedInner,\n\t*\t\tBoxFlattened: BoxFlattened,\n\t*\t\tBoxInline: BoxInline,\n\t*\t\tFirst: First,\n\t*\t\tSecond: Second,\n\t*\t\tThird: Third,\n\t*\t\tFourth: Fourth,\n\t*\t\tTagOnStructWithInline: TagOnStructWithInline,\n\t*\t\tSixth: Sixth,\n\t*\t\tSeventh: Seventh,\n\t*\t\tEight: Eight,\n\t*\t\tNinth: Ninth,\n\t*\t\tTenth: Tenth,\n\t*\t\tMyEnumTagged: MyEnumTagged,\n\t*\t\tMyEnumExternal: MyEnumExternal,\n\t*\t\tMyEnumAdjacent: MyEnumAdjacent,\n\t*\t\tMyEnumUntagged: MyEnumUntagged,\n\t*\t\tEmptyStruct: EmptyStruct,\n\t*\t\tEmptyStructWithTag: EmptyStructWithTag,\n\t*\t\tAdjacentlyTagged: AdjacentlyTagged,\n\t*\t\tLoadProjectEvent: LoadProjectEvent,\n\t*\t\tExternallyTagged: ExternallyTagged,\n\t*\t\tIssue221External: Issue221External,\n\t*\t\tInternallyTaggedD: InternallyTaggedD,\n\t*\t\tInternallyTaggedE: InternallyTaggedE,\n\t*\t\tInternallyTaggedF: InternallyTaggedF,\n\t*\t\tInternallyTaggedH: InternallyTaggedH,\n\t*\t\tInternallyTaggedL: InternallyTaggedL,\n\t*\t\tInternallyTaggedM: InternallyTaggedM,\n\t*\t\tStructWithAlias: StructWithAlias,\n\t*\t\tStructWithMultipleAliases: StructWithMultipleAliases,\n\t*\t\tStructWithAliasAndRename: StructWithAliasAndRename,\n\t*\t\tEnumWithVariantAlias: EnumWithVariantAlias,\n\t*\t\tEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases,\n\t*\t\tEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename,\n\t*\t\tInternallyTaggedWithAlias: InternallyTaggedWithAlias,\n\t*\t\tAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias,\n\t*\t\tUntaggedWithAlias: UntaggedWithAlias,\n\t*\t\tIssue221UntaggedSafe: Issue221UntaggedSafe,\n\t*\t\tIssue221UntaggedMixed: Issue221UntaggedMixed,\n\t*\t\tEmptyEnum: EmptyEnum,\n\t*\t\tEmptyEnumTagged: EmptyEnumTagged,\n\t*\t\tEmptyEnumTaggedWContent: EmptyEnumTaggedWContent,\n\t*\t\tEmptyEnumUntagged: EmptyEnumUntagged,\n\t*\t\tSkipOnlyField: SkipOnlyField,\n\t*\t\tSkipField: SkipField,\n\t*\t\tSkipVariant: SkipVariant,\n\t*\t\tSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant,\n\t*\t\tSkipNamedFieldInVariant: SkipNamedFieldInVariant,\n\t*\t\tTransparentWithSkip: TransparentWithSkip,\n\t*\t\tTransparentWithSkip2: TransparentWithSkip2,\n\t*\t\tTransparentWithSkip3: TransparentWithSkip3,\n\t*\t\tSkipVariant2: SkipVariant2,\n\t*\t\tSkipVariant3: SkipVariant3,\n\t*\t\tSkipStructFields: SkipStructFields,\n\t*\t\tSpectaSkipNonTypeField: SpectaSkipNonTypeField,\n\t*\t\tFlattenA: FlattenA,\n\t*\t\tFlattenB: FlattenB,\n\t*\t\tFlattenC: FlattenC,\n\t*\t\tFlattenD: FlattenD,\n\t*\t\tFlattenE: FlattenE,\n\t*\t\tFlattenF: FlattenF,\n\t*\t\tFlattenG: FlattenG,\n\t*\t\tTupleNested: TupleNested,\n\t*\t\t\"Generic1<()>\": Generic1<null>,\n\t*\t\t\"GenericAutoBound<()>\": GenericAutoBound<null>,\n\t*\t\t\"GenericAutoBound2<()>\": GenericAutoBound2<null>,\n\t*\t\tContainer1: Container1,\n\t*\t\t\"Generic2<(), String, i32>\": Generic2<null, string, number>,\n\t*\t\t\"GenericNewType1<()>\": GenericNewType1<null>,\n\t*\t\t\"GenericTuple<()>\": GenericTuple<null>,\n\t*\t\t\"GenericStruct2<()>\": GenericStruct2<null>,\n\t*\t\t\"InlineGenericNewtype<String>\": string,\n\t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }],\n\t*\t\t\"InlineFlattenGenericsG<()>\": InlineFlattenGenericsG<null>,\n\t*\t\tInlineFlattenGenerics: InlineFlattenGenerics,\n\t*\t\tGenericDefault: GenericDefault,\n\t*\t\tChainedGenericDefault: ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<String, String>\": ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<i32>\": ChainedGenericDefault<number, number>,\n\t*\t\t\"ChainedGenericDefault<String, i32>\": ChainedGenericDefault<string, number>,\n\t*\t\tGenericDefaultSkipped: GenericDefaultSkipped<string>,\n\t*\t\tGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>,\n\t*\t\tGenericParameterOrderPreserved: GenericParameterOrderPreserved,\n\t*\t\tConstGenericInNonConstContainer: ConstGenericInNonConstContainer,\n\t*\t\tConstGenericInConstContainer: ConstGenericInConstContainer,\n\t*\t\tNamedConstGenericContainer: NamedConstGenericContainer,\n\t*\t\tInlineConstGenericContainer: InlineConstGenericContainer,\n\t*\t\tInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer,\n\t*\t\tTestCollectionRegister: TestCollectionRegister,\n\t*\t\tTestCollectionRegister: TestCollectionRegister,\n\t*\t}} Primitives\n\t* @property {number} i8\n\t* @property {number} i16\n\t* @property {number} i32\n\t* @property {number} u8\n\t* @property {number} u16\n\t* @property {number} u32\n\t* @property {number} f32\n\t* @property {number} f64\n\t* @property {boolean} bool\n\t* @property {string} char\n\t* @property {Range<number>} \"Range<i32>\"\n\t* @property {RangeInclusive<number>} \"RangeInclusive<i32>\"\n\t* @property {null} \"()\"\n\t* @property {[string, number]} \"(String, i32)\"\n\t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n\t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n\t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n\t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n\t* @property {string} String\n\t* @property {string} PathBuf\n\t* @property {string} IpAddr\n\t* @property {string} Ipv4Addr\n\t* @property {string} Ipv6Addr\n\t* @property {string} SocketAddr\n\t* @property {string} SocketAddrV4\n\t* @property {string} SocketAddrV6\n\t* @property {string} \"Cow<'static, str>\"\n\t* @property {number} \"Cow<'static, i32>\"\n\t* @property {string} \"&'static str\"\n\t* @property {boolean} \"&'static bool\"\n\t* @property {number} \"&'static i32\"\n\t* @property {number[]} \"Vec<i32>\"\n\t* @property {number[]} \"&'static [i32]\"\n\t* @property {[number, number, number]} \"&'static [i32; 3]\"\n\t* @property {[number, number, number]} \"[i32; 3]\"\n\t* @property {MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {MyEnum[]} \"&'static [MyEnum]\"\n\t* @property {[MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum]} \"&'static [MyEnum; 6]\"\n\t* @property {[MyEnum, MyEnum]} \"[MyEnum; 2]\"\n\t* @property {[number]} \"&'static [i32; 1]\"\n\t* @property {[]} \"&'static [i32; 0]\"\n\t* @property {number | null} \"Option<i32>\"\n\t* @property {null} \"Option<()>\"\n\t* @property {number[] | null} \"Option<Vec<i32>>\"\n\t* @property {Result<string, number>} \"Result<String, i32>\"\n\t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n\t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n\t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n\t* @property {string | null} \"Option<Option<String>>\"\n\t* @property {string | null} \"Option<Option<Option<String>>>\"\n\t* @property {null} \"PhantomData<()>\"\n\t* @property {null} \"PhantomData<String>\"\n\t* @property {never} Infallible\n\t* @property {Unit1} Unit1\n\t* @property {Unit2} Unit2\n\t* @property {Unit3} Unit3\n\t* @property {Unit4} Unit4\n\t* @property {Unit5} Unit5\n\t* @property {Unit6} Unit6\n\t* @property {Unit7} Unit7\n\t* @property {SimpleStruct} SimpleStruct\n\t* @property {TupleStruct1} TupleStruct1\n\t* @property {TupleStruct3} TupleStruct3\n\t* @property {TestEnum} TestEnum\n\t* @property {RefStruct} RefStruct\n\t* @property {InlinerStruct} InlinerStruct\n\t* @property {GenericStruct<number>} \"GenericStruct<i32>\"\n\t* @property {GenericStruct<string>} \"GenericStruct<String>\"\n\t* @property {FlattenEnumStruct} FlattenEnumStruct\n\t* @property {OverridenStruct} OverridenStruct\n\t* @property {HasGenericAlias} HasGenericAlias\n\t* @property {EnumMacroAttributes} EnumMacroAttributes\n\t* @property {InlineEnumField} InlineEnumField\n\t* @property {InlineOptionalType} InlineOptionalType\n\t* @property {Rename} Rename\n\t* @property {TransparentType} TransparentType\n\t* @property {TransparentType2} TransparentType2\n\t* @property {TransparentTypeWithOverride} TransparentTypeWithOverride\n\t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n\t* @property {Partial<{ [key in BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n\t* @property {Partial<{ [key in BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n\t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n\t* @property {PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n\t* @property {EnumReferenceRecordKey} EnumReferenceRecordKey\n\t* @property {FlattenOnNestedEnum} FlattenOnNestedEnum\n\t* @property {MyEmptyInput} MyEmptyInput\n\t* @property {string} \"(String)\"\n\t* @property {[string]} \"(String,)\"\n\t* @property {ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n\t* @property {ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n\t* @property {MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {InlineTuple} InlineTuple\n\t* @property {InlineTuple2} InlineTuple2\n\t* @property {string} \"Box<str>\"\n\t* @property {string} \"Box<String>\"\n\t* @property {SkippedFieldWithinVariant} SkippedFieldWithinVariant\n\t* @property {KebabCase} KebabCase\n\t* @property {string[]} \"&[&str]\"\n\t* @property {Issue281} \"Issue281<'_>\"\n\t* @property {LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n\t* @property {LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n\t* @property {RenameWithWeirdCharsField} RenameWithWeirdCharsField\n\t* @property {RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n\t* @property {RenamedFieldKeys} RenamedFieldKeys\n\t* @property {RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n\t* @property {Type} \"type_type::Type\"\n\t* @property {ActualType} ActualType\n\t* @property {SpectaTypeOverride} SpectaTypeOverride\n\t* @property {ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n\t* @property {ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n\t* @property {ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n\t* @property {ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n\t* @property {ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n\t* @property {ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n\t* @property {InvalidToValidType} InvalidToValidType\n\t* @property {TupleStruct} TupleStruct\n\t* @property {TupleStructWithRep} TupleStructWithRep\n\t* @property {GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n\t* @property {BracedStruct} BracedStruct\n\t* @property {Struct} Struct\n\t* @property {Struct2} Struct2\n\t* @property {Enum} Enum\n\t* @property {Enum2} Enum2\n\t* @property {Enum3} Enum3\n\t* @property {StructRenameAllUppercase} StructRenameAllUppercase\n\t* @property {RenameSerdeSpecialChar} RenameSerdeSpecialChar\n\t* @property {EnumRenameAllUppercase} EnumRenameAllUppercase\n\t* @property {Recursive} Recursive\n\t* @property {RecursiveMapValue} RecursiveMapValue\n\t* @property {RecursiveTransparent} RecursiveTransparent\n\t* @property {RecursiveInEnum} RecursiveInEnum\n\t* @property {NonOptional} NonOptional\n\t* @property {OptionalOnNamedField} OptionalOnNamedField\n\t* @property {OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n\t* @property {OptionalInEnum} OptionalInEnum\n\t* @property {UntaggedVariants} UntaggedVariants\n\t* @property {UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n\t* @property {UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n\t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n\t* @property {Regular} Regular\n\t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n\t* @property {{ [key in TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n\t* @property {Partial<{ [key in UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n\t* @property {Partial<{ [key in UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n\t* @property {ValidMaybeValidKey} ValidMaybeValidKey\n\t* @property {ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n\t* @property {MacroStruct} MacroStruct\n\t* @property {MacroStruct2} MacroStruct2\n\t* @property {MacroEnum} MacroEnum\n\t* @property {DeprecatedType} DeprecatedType\n\t* @property {DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n\t* @property {DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n\t* @property {DeprecatedFields} DeprecatedFields\n\t* @property {DeprecatedTupleVariant} DeprecatedTupleVariant\n\t* @property {DeprecatedEnumVariants} DeprecatedEnumVariants\n\t* @property {CommentedStruct} CommentedStruct\n\t* @property {CommentedEnum} CommentedEnum\n\t* @property {SingleLineComment} SingleLineComment\n\t* @property {Demo<number, boolean>} NonGeneric\n\t* @property {Demo<number, boolean>} \"HalfGenericA<u8>\"\n\t* @property {Demo<number, boolean>} \"HalfGenericB<bool>\"\n\t* @property {Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n\t* @property {Demo<number, boolean>} \"Another<bool>\"\n\t* @property {{ [key in string]: number }} \"MapA<u32>\"\n\t* @property {{ [key in number]: string }} \"MapB<u32>\"\n\t* @property {{ [key in string]: AGenericStruct<number> }} \"MapC<u32>\"\n\t* @property {AGenericStruct<number>} \"AGenericStruct<u32>\"\n\t* @property {A} A\n\t* @property {DoubleFlattened} DoubleFlattened\n\t* @property {FlattenedInner} FlattenedInner\n\t* @property {BoxFlattened} BoxFlattened\n\t* @property {BoxInline} BoxInline\n\t* @property {First} First\n\t* @property {Second} Second\n\t* @property {Third} Third\n\t* @property {Fourth} Fourth\n\t* @property {TagOnStructWithInline} TagOnStructWithInline\n\t* @property {Sixth} Sixth\n\t* @property {Seventh} Seventh\n\t* @property {Eight} Eight\n\t* @property {Ninth} Ninth\n\t* @property {Tenth} Tenth\n\t* @property {MyEnumTagged} MyEnumTagged\n\t* @property {MyEnumExternal} MyEnumExternal\n\t* @property {MyEnumAdjacent} MyEnumAdjacent\n\t* @property {MyEnumUntagged} MyEnumUntagged\n\t* @property {EmptyStruct} EmptyStruct\n\t* @property {EmptyStructWithTag} EmptyStructWithTag\n\t* @property {AdjacentlyTagged} AdjacentlyTagged\n\t* @property {LoadProjectEvent} LoadProjectEvent\n\t* @property {ExternallyTagged} ExternallyTagged\n\t* @property {Issue221External} Issue221External\n\t* @property {InternallyTaggedD} InternallyTaggedD\n\t* @property {InternallyTaggedE} InternallyTaggedE\n\t* @property {InternallyTaggedF} InternallyTaggedF\n\t* @property {InternallyTaggedH} InternallyTaggedH\n\t* @property {InternallyTaggedL} InternallyTaggedL\n\t* @property {InternallyTaggedM} InternallyTaggedM\n\t* @property {StructWithAlias} StructWithAlias\n\t* @property {StructWithMultipleAliases} StructWithMultipleAliases\n\t* @property {StructWithAliasAndRename} StructWithAliasAndRename\n\t* @property {EnumWithVariantAlias} EnumWithVariantAlias\n\t* @property {EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n\t* @property {EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n\t* @property {InternallyTaggedWithAlias} InternallyTaggedWithAlias\n\t* @property {AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n\t* @property {UntaggedWithAlias} UntaggedWithAlias\n\t* @property {Issue221UntaggedSafe} Issue221UntaggedSafe\n\t* @property {Issue221UntaggedMixed} Issue221UntaggedMixed\n\t* @property {EmptyEnum} EmptyEnum\n\t* @property {EmptyEnumTagged} EmptyEnumTagged\n\t* @property {EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n\t* @property {EmptyEnumUntagged} EmptyEnumUntagged\n\t* @property {SkipOnlyField} SkipOnlyField\n\t* @property {SkipField} SkipField\n\t* @property {SkipVariant} SkipVariant\n\t* @property {SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n\t* @property {SkipNamedFieldInVariant} SkipNamedFieldInVariant\n\t* @property {TransparentWithSkip} TransparentWithSkip\n\t* @property {TransparentWithSkip2} TransparentWithSkip2\n\t* @property {TransparentWithSkip3} TransparentWithSkip3\n\t* @property {SkipVariant2} SkipVariant2\n\t* @property {SkipVariant3} SkipVariant3\n\t* @property {SkipStructFields} SkipStructFields\n\t* @property {SpectaSkipNonTypeField} SpectaSkipNonTypeField\n\t* @property {FlattenA} FlattenA\n\t* @property {FlattenB} FlattenB\n\t* @property {FlattenC} FlattenC\n\t* @property {FlattenD} FlattenD\n\t* @property {FlattenE} FlattenE\n\t* @property {FlattenF} FlattenF\n\t* @property {FlattenG} FlattenG\n\t* @property {TupleNested} TupleNested\n\t* @property {Generic1<null>} \"Generic1<()>\"\n\t* @property {GenericAutoBound<null>} \"GenericAutoBound<()>\"\n\t* @property {GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n\t* @property {Container1} Container1\n\t* @property {Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n\t* @property {GenericNewType1<null>} \"GenericNewType1<()>\"\n\t* @property {GenericTuple<null>} \"GenericTuple<()>\"\n\t* @property {GenericStruct2<null>} \"GenericStruct2<()>\"\n\t* @property {string} \"InlineGenericNewtype<String>\"\n\t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }]} \"InlineGenericNested<String>\"\n\t* @property {InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n\t* @property {InlineFlattenGenerics} InlineFlattenGenerics\n\t* @property {GenericDefault} GenericDefault\n\t* @property {ChainedGenericDefault} ChainedGenericDefault\n\t* @property {ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n\t* @property {ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n\t* @property {ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n\t* @property {GenericDefaultSkipped<string>} GenericDefaultSkipped\n\t* @property {GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n\t* @property {GenericParameterOrderPreserved} GenericParameterOrderPreserved\n\t* @property {ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n\t* @property {ConstGenericInConstContainer} ConstGenericInConstContainer\n\t* @property {NamedConstGenericContainer} NamedConstGenericContainer\n\t* @property {InlineConstGenericContainer} InlineConstGenericContainer\n\t* @property {InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n\t* @property {TestCollectionRegister} TestCollectionRegister\n\t* @property {TestCollectionRegister} TestCollectionRegister\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*\n\t* @typedef {{ demo: RecursiveInEnum }} RecursiveInEnum\n\t* @property {{ demo: RecursiveInEnum }} A\n\t*\n\t* @typedef {{\n\t*\t\tdemo: RecursiveInline,\n\t*\t}} RecursiveInline\n\t* @property {RecursiveInline} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {\"OneWord\" | \"TwoWords\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"TwoWords\"} TwoWords\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\todata_context: string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} odata_context\n\t*\n\t* @typedef {string} RenameWithWeirdCharsVariant\n\t* @property {string} A\n\t*\n\t* @typedef {{\n\t*\t\tempty: string,\n\t*\t\tquote: string,\n\t*\t\tbackslash: string,\n\t*\t\tnewline: string,\n\t*\t\tline_separator: string,\n\t*\t\tparagraph_separator: string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} empty\n\t* @property {string} quote\n\t* @property {string} backslash\n\t* @property {string} newline\n\t* @property {string} line_separator\n\t* @property {string} paragraph_separator\n\t*\n\t* @typedef {never} RenamedVariantWithSkippedPayload\n\t* @property {never} A\n\t*\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* number | \n\t*\t/**  Some single-line comment */\n\t* { \n\t*\t/**  Some single-line comment */\n\t* a: number }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* number} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { \n\t* /**  Some single-line comment */\n\t* a: number }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {Record<string, never> | { b: number }} SkipNamedFieldInVariant\n\t* @property {Record<string, never>} A\n\t* @property {{ b: number }} B\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {never | [number]} SkipUnnamedFieldInVariant\n\t* @property {never} A\n\t* @property {[number]} B\n\t*\n\t* @typedef {string} SkipVariant\n\t* @property {string} A\n\t*\n\t* @typedef {string} SkipVariant2\n\t* @property {string} A\n\t*\n\t* @typedef {{ a: string }} SkipVariant3\n\t* @property {{ a: string }} A\n\t*\n\t* @typedef {never | string} SkippedFieldWithinVariant\n\t* @property {never} A\n\t* @property {string} B\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct2\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {\"Unit\" | number | [number, number] | { a: number }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {number} Single\n\t* @property {[number, number]} Multiple\n\t* @property {{ a: number }} Struct\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t}} Third\n\t* @property {First} a\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} ToBeFlattened\n\t* @property {string} a\n\t*\n\t* @typedef {string} TransparentStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinner: string,\n\t*\t}} TransparentTypeInner\n\t* @property {string} inner\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {[]} Unit6\n\t* @property {[]} A\n\t*\n\t* @typedef {Record<string, never>} Unit7\n\t* @property {Record<string, never>} A\n\t*\n\t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {\"C\"} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | number} UntaggedVariantsKey\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*/\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-flatfile-serde.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\njsdoc-export-to-flatfile-serde (55198 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n/**\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} B\n\t* @property {number} b\n\t*\n\t* @typedef {\"A\" | \"B\"} BasicEnum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {BoxedInner} BoxFlattened\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} BoxedInner\n\t* @property {number} a\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tflattened: number,\n\t*\t}} D\n\t* @property {number} flattened\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenB\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenC\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{ tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" }} FlattenEnum\n\t* @property {{ tag: \"One\" }} One\n\t* @property {{ tag: \"Two\" }} Two\n\t* @property {{ tag: \"Three\" }} Three\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & FlattenEnum} FlattenEnumStruct\n\t* @property {string} outer\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & NestedEnum} FlattenOnNestedEnum\n\t* @property {string} id\n\t*\n\t* @typedef {Inner} FlattenedInner\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tgeneric_flattened: T,\n\t*\t}} GenericFlattened<T>\n\t* @property {T} generic_flattened\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {\"Undefined\" | T} GenericType<T>\n\t* @property {\"Undefined\"} Undefined\n\t* @property {T} Value\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} InlineRecursiveConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number, number]} d\n\t* @property {InlineRecursiveConstGeneric} e\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} InlineStruct\n\t* @property {SimpleStruct} ref_struct\n\t* @property {number} val\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t} & FlattenedInner} Inner\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} InternallyTaggedD\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {null} InternallyTaggedFInner\n\t* @property {null} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {null} InternallyTaggedHInner\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\" }} InternallyTaggedLInner\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\" }} B\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {T} MaybeValidKey<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {({ A: string }) & { B?: never } | ({ B: number }) & { A?: never }} MyEnum\n\t* @property {{ A: string }} A\n\t* @property {{ B: number }} B\n\t*\n\t* @typedef {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ Variant: {\n\t* \tinner: First,\n\t* } }} MyEnumExternal\n\t* @property {{ Variant: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ type: \"Variant\"; inner: First }} MyEnumTagged\n\t* @property {{ type: \"Variant\"; inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{ type: \"a\"; value: string } | { type: \"b\"; value: number }} NestedEnum\n\t* @property {{ type: \"a\"; value: string }} a\n\t* @property {{ type: \"b\"; value: number }} b\n\t*\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: First }} D\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{\n\t*\t\tfirst: Z,\n\t*\t\tsecond: A,\n\t*\t}} Pair<Z, A>\n\t* @property {Z} first\n\t* @property {A} second\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} PlaceholderInnerField\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ti8: number,\n\t*\t\ti16: number,\n\t*\t\ti32: number,\n\t*\t\tu8: number,\n\t*\t\tu16: number,\n\t*\t\tu32: number,\n\t*\t\tf32: number,\n\t*\t\tf64: number,\n\t*\t\tbool: boolean,\n\t*\t\tchar: string,\n\t*\t\t\"Range<i32>\": Range<number>,\n\t*\t\t\"RangeInclusive<i32>\": RangeInclusive<number>,\n\t*\t\t\"()\": null,\n\t*\t\t\"(String, i32)\": [string, number],\n\t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t*\t\tString: string,\n\t*\t\tPathBuf: string,\n\t*\t\tIpAddr: string,\n\t*\t\tIpv4Addr: string,\n\t*\t\tIpv6Addr: string,\n\t*\t\tSocketAddr: string,\n\t*\t\tSocketAddrV4: string,\n\t*\t\tSocketAddrV6: string,\n\t*\t\t\"Cow<'static, str>\": string,\n\t*\t\t\"Cow<'static, i32>\": number,\n\t*\t\t\"&'static str\": string,\n\t*\t\t\"&'static bool\": boolean,\n\t*\t\t\"&'static i32\": number,\n\t*\t\t\"Vec<i32>\": number[],\n\t*\t\t\"&'static [i32]\": number[],\n\t*\t\t\"&'static [i32; 3]\": [number, number, number],\n\t*\t\t\"[i32; 3]\": [number, number, number],\n\t*\t\t\"Vec<MyEnum>\": MyEnum[],\n\t*\t\t\"&'static [MyEnum]\": MyEnum[],\n\t*\t\t\"&'static [MyEnum; 6]\": [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum],\n\t*\t\t\"[MyEnum; 2]\": [MyEnum, MyEnum],\n\t*\t\t\"&'static [i32; 1]\": [number],\n\t*\t\t\"&'static [i32; 0]\": [],\n\t*\t\t\"Option<i32>\": number | null,\n\t*\t\t\"Option<()>\": null,\n\t*\t\t\"Option<Vec<i32>>\": number[] | null,\n\t*\t\t\"Result<String, i32>\": Result<string, number>,\n\t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t*\t\t\"Option<Option<String>>\": string | null,\n\t*\t\t\"Option<Option<Option<String>>>\": string | null,\n\t*\t\t\"PhantomData<()>\": null,\n\t*\t\t\"PhantomData<String>\": null,\n\t*\t\tInfallible: never,\n\t*\t\tUnit1: Unit1,\n\t*\t\tUnit2: Unit2,\n\t*\t\tUnit3: Unit3,\n\t*\t\tUnit4: Unit4,\n\t*\t\tUnit5: Unit5,\n\t*\t\tUnit6: Unit6,\n\t*\t\tUnit7: Unit7,\n\t*\t\tSimpleStruct: SimpleStruct,\n\t*\t\tTupleStruct1: TupleStruct1,\n\t*\t\tTupleStruct3: TupleStruct3,\n\t*\t\tTestEnum: TestEnum,\n\t*\t\tRefStruct: RefStruct,\n\t*\t\tInlinerStruct: InlinerStruct,\n\t*\t\t\"GenericStruct<i32>\": GenericStruct<number>,\n\t*\t\t\"GenericStruct<String>\": GenericStruct<string>,\n\t*\t\tFlattenEnumStruct: FlattenEnumStruct,\n\t*\t\tOverridenStruct: OverridenStruct,\n\t*\t\tHasGenericAlias: HasGenericAlias,\n\t*\t\tEnumMacroAttributes: EnumMacroAttributes,\n\t*\t\tInlineEnumField: InlineEnumField,\n\t*\t\tInlineOptionalType: InlineOptionalType,\n\t*\t\tRename: Rename,\n\t*\t\tTransparentType: TransparentType,\n\t*\t\tTransparentType2: TransparentType2,\n\t*\t\tTransparentTypeWithOverride: TransparentTypeWithOverride,\n\t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in BasicEnum]: null }>,\n\t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in BasicEnum]: number }>,\n\t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t*\t\t\"Vec<PlaceholderInnerField>\": PlaceholderInnerField[],\n\t*\t\tEnumReferenceRecordKey: EnumReferenceRecordKey,\n\t*\t\tFlattenOnNestedEnum: FlattenOnNestedEnum,\n\t*\t\tMyEmptyInput: MyEmptyInput,\n\t*\t\t\"(String)\": string,\n\t*\t\t\"(String,)\": [string],\n\t*\t\tExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant,\n\t*\t\tExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct,\n\t*\t\t\"Vec<MyEnum>\": MyEnum[],\n\t*\t\tInlineTuple: InlineTuple,\n\t*\t\tInlineTuple2: InlineTuple2,\n\t*\t\t\"Box<str>\": string,\n\t*\t\t\"Box<String>\": string,\n\t*\t\tSkippedFieldWithinVariant: SkippedFieldWithinVariant,\n\t*\t\tKebabCase: KebabCase,\n\t*\t\t\"&[&str]\": string[],\n\t*\t\t\"Issue281<'_>\": Issue281,\n\t*\t\t\"LifetimeGenericStruct<'_, i32>\": LifetimeGenericStruct<number>,\n\t*\t\t\"LifetimeGenericEnum<'_, i32>\": LifetimeGenericEnum<number>,\n\t*\t\tRenameWithWeirdCharsField: RenameWithWeirdCharsField,\n\t*\t\tRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant,\n\t*\t\tRenamedFieldKeys: RenamedFieldKeys,\n\t*\t\tRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload,\n\t*\t\t\"type_type::Type\": Type,\n\t*\t\tActualType: ActualType,\n\t*\t\tSpectaTypeOverride: SpectaTypeOverride,\n\t*\t\tContainerTypeOverrideStruct: ContainerTypeOverrideStruct,\n\t*\t\tContainerTypeOverrideEnum: ContainerTypeOverrideEnum,\n\t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": ContainerTypeOverrideGeneric,\n\t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": ContainerTypeOverrideToGeneric<number>,\n\t*\t\tContainerTypeOverrideTuple: ContainerTypeOverrideTuple,\n\t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": ContainerTypeOverrideTupleGeneric<number>,\n\t*\t\tInvalidToValidType: InvalidToValidType,\n\t*\t\tTupleStruct: TupleStruct,\n\t*\t\tTupleStructWithRep: TupleStructWithRep,\n\t*\t\t\"GenericTupleStruct<String>\": GenericTupleStruct<string>,\n\t*\t\tBracedStruct: BracedStruct,\n\t*\t\tStruct: StructNew,\n\t*\t\tStruct2: Struct2,\n\t*\t\tEnum: Enum,\n\t*\t\tEnum2: Enum2,\n\t*\t\tEnum3: Enum3,\n\t*\t\tStructRenameAllUppercase: StructRenameAllUppercase,\n\t*\t\tRenameSerdeSpecialChar: RenameSerdeSpecialChar,\n\t*\t\tEnumRenameAllUppercase: EnumRenameAllUppercase,\n\t*\t\tRecursive: Recursive,\n\t*\t\tRecursiveMapValue: RecursiveMapValue,\n\t*\t\tRecursiveTransparent: RecursiveTransparent,\n\t*\t\tRecursiveInEnum: RecursiveInEnum,\n\t*\t\tNonOptional: NonOptional,\n\t*\t\tOptionalOnNamedField: OptionalOnNamedField,\n\t*\t\tOptionalOnTransparentNamedField: OptionalOnTransparentNamedField,\n\t*\t\tOptionalInEnum: OptionalInEnum,\n\t*\t\tUntaggedVariants: UntaggedVariants,\n\t*\t\tUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue,\n\t*\t\tUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches,\n\t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t*\t\tRegular: Regular,\n\t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in TransparentStruct]: null },\n\t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in UnitVariants]: null }>,\n\t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in UntaggedVariantsKey]: null }>,\n\t*\t\tValidMaybeValidKey: ValidMaybeValidKey,\n\t*\t\tValidMaybeValidKeyNested: ValidMaybeValidKeyNested,\n\t*\t\tMacroStruct: MacroStruct,\n\t*\t\tMacroStruct2: MacroStruct2,\n\t*\t\tMacroEnum: MacroEnum,\n\t*\t\tDeprecatedType: DeprecatedType,\n\t*\t\tDeprecatedTypeWithMsg: DeprecatedTypeWithMsg,\n\t*\t\tDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2,\n\t*\t\tDeprecatedFields: DeprecatedFields,\n\t*\t\tDeprecatedTupleVariant: DeprecatedTupleVariant,\n\t*\t\tDeprecatedEnumVariants: DeprecatedEnumVariants,\n\t*\t\tCommentedStruct: CommentedStruct,\n\t*\t\tCommentedEnum: CommentedEnum,\n\t*\t\tSingleLineComment: SingleLineComment,\n\t*\t\tNonGeneric: Demo<number, boolean>,\n\t*\t\t\"HalfGenericA<u8>\": Demo<number, boolean>,\n\t*\t\t\"HalfGenericB<bool>\": Demo<number, boolean>,\n\t*\t\t\"FullGeneric<u8, bool>\": Demo<number, boolean>,\n\t*\t\t\"Another<bool>\": Demo<number, boolean>,\n\t*\t\t\"MapA<u32>\": { [key in string]: number },\n\t*\t\t\"MapB<u32>\": { [key in number]: string },\n\t*\t\t\"MapC<u32>\": { [key in string]: AGenericStruct<number> },\n\t*\t\t\"AGenericStruct<u32>\": AGenericStruct<number>,\n\t*\t\tA: A,\n\t*\t\tDoubleFlattened: DoubleFlattened,\n\t*\t\tFlattenedInner: FlattenedInner,\n\t*\t\tBoxFlattened: BoxFlattened,\n\t*\t\tBoxInline: BoxInline,\n\t*\t\tFirst: First,\n\t*\t\tSecond: Second,\n\t*\t\tThird: Third,\n\t*\t\tFourth: Fourth,\n\t*\t\tTagOnStructWithInline: TagOnStructWithInline,\n\t*\t\tSixth: Sixth,\n\t*\t\tSeventh: Seventh,\n\t*\t\tEight: Eight,\n\t*\t\tNinth: Ninth,\n\t*\t\tTenth: Tenth,\n\t*\t\tMyEnumTagged: MyEnumTagged,\n\t*\t\tMyEnumExternal: MyEnumExternal,\n\t*\t\tMyEnumAdjacent: MyEnumAdjacent,\n\t*\t\tMyEnumUntagged: MyEnumUntagged,\n\t*\t\tEmptyStruct: EmptyStruct,\n\t*\t\tEmptyStructWithTag: EmptyStructWithTag,\n\t*\t\tAdjacentlyTagged: AdjacentlyTagged,\n\t*\t\tLoadProjectEvent: LoadProjectEvent,\n\t*\t\tExternallyTagged: ExternallyTagged,\n\t*\t\tIssue221External: Issue221External,\n\t*\t\tInternallyTaggedD: InternallyTaggedD,\n\t*\t\tInternallyTaggedE: InternallyTaggedE,\n\t*\t\tInternallyTaggedF: InternallyTaggedF,\n\t*\t\tInternallyTaggedH: InternallyTaggedH,\n\t*\t\tInternallyTaggedL: InternallyTaggedL,\n\t*\t\tInternallyTaggedM: InternallyTaggedM,\n\t*\t\tStructWithAlias: StructWithAlias,\n\t*\t\tStructWithMultipleAliases: StructWithMultipleAliases,\n\t*\t\tStructWithAliasAndRename: StructWithAliasAndRename,\n\t*\t\tEnumWithVariantAlias: EnumWithVariantAlias,\n\t*\t\tEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases,\n\t*\t\tEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename,\n\t*\t\tInternallyTaggedWithAlias: InternallyTaggedWithAlias,\n\t*\t\tAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias,\n\t*\t\tUntaggedWithAlias: UntaggedWithAlias,\n\t*\t\tIssue221UntaggedSafe: Issue221UntaggedSafe,\n\t*\t\tIssue221UntaggedMixed: Issue221UntaggedMixed,\n\t*\t\tEmptyEnum: EmptyEnum,\n\t*\t\tEmptyEnumTagged: EmptyEnumTagged,\n\t*\t\tEmptyEnumTaggedWContent: EmptyEnumTaggedWContent,\n\t*\t\tEmptyEnumUntagged: EmptyEnumUntagged,\n\t*\t\tSkipOnlyField: SkipOnlyField,\n\t*\t\tSkipField: SkipField,\n\t*\t\tSkipVariant: SkipVariant,\n\t*\t\tSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant,\n\t*\t\tSkipNamedFieldInVariant: SkipNamedFieldInVariant,\n\t*\t\tTransparentWithSkip: TransparentWithSkip,\n\t*\t\tTransparentWithSkip2: TransparentWithSkip2,\n\t*\t\tTransparentWithSkip3: TransparentWithSkip3,\n\t*\t\tSkipVariant2: SkipVariant2,\n\t*\t\tSkipVariant3: SkipVariant3,\n\t*\t\tSkipStructFields: SkipStructFields,\n\t*\t\tSpectaSkipNonTypeField: SpectaSkipNonTypeField,\n\t*\t\tFlattenA: FlattenA,\n\t*\t\tFlattenB: FlattenB,\n\t*\t\tFlattenC: FlattenC,\n\t*\t\tFlattenD: FlattenD,\n\t*\t\tFlattenE: FlattenE,\n\t*\t\tFlattenF: FlattenF,\n\t*\t\tFlattenG: FlattenG,\n\t*\t\tTupleNested: TupleNested,\n\t*\t\t\"Generic1<()>\": Generic1<null>,\n\t*\t\t\"GenericAutoBound<()>\": GenericAutoBound<null>,\n\t*\t\t\"GenericAutoBound2<()>\": GenericAutoBound2<null>,\n\t*\t\tContainer1: Container1,\n\t*\t\t\"Generic2<(), String, i32>\": Generic2<null, string, number>,\n\t*\t\t\"GenericNewType1<()>\": GenericNewType1<null>,\n\t*\t\t\"GenericTuple<()>\": GenericTuple<null>,\n\t*\t\t\"GenericStruct2<()>\": GenericStruct2<null>,\n\t*\t\t\"InlineGenericNewtype<String>\": string,\n\t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t* \tvalue: string,\n\t* } }) & { Unnamed?: never }],\n\t*\t\t\"InlineFlattenGenericsG<()>\": InlineFlattenGenericsG<null>,\n\t*\t\tInlineFlattenGenerics: InlineFlattenGenerics,\n\t*\t\tGenericDefault: GenericDefault,\n\t*\t\tChainedGenericDefault: ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<String, String>\": ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<i32>\": ChainedGenericDefault<number, number>,\n\t*\t\t\"ChainedGenericDefault<String, i32>\": ChainedGenericDefault<string, number>,\n\t*\t\tGenericDefaultSkipped: GenericDefaultSkipped<string>,\n\t*\t\tGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>,\n\t*\t\tGenericParameterOrderPreserved: GenericParameterOrderPreserved,\n\t*\t\tConstGenericInNonConstContainer: ConstGenericInNonConstContainer,\n\t*\t\tConstGenericInConstContainer: ConstGenericInConstContainer,\n\t*\t\tNamedConstGenericContainer: NamedConstGenericContainer,\n\t*\t\tInlineConstGenericContainer: InlineConstGenericContainer,\n\t*\t\tInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer,\n\t*\t\tTestCollectionRegister: TestCollectionRegister,\n\t*\t\tTestCollectionRegister: TestCollectionRegister,\n\t*\t}} Primitives\n\t* @property {number} i8\n\t* @property {number} i16\n\t* @property {number} i32\n\t* @property {number} u8\n\t* @property {number} u16\n\t* @property {number} u32\n\t* @property {number} f32\n\t* @property {number} f64\n\t* @property {boolean} bool\n\t* @property {string} char\n\t* @property {Range<number>} \"Range<i32>\"\n\t* @property {RangeInclusive<number>} \"RangeInclusive<i32>\"\n\t* @property {null} \"()\"\n\t* @property {[string, number]} \"(String, i32)\"\n\t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n\t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n\t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n\t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n\t* @property {string} String\n\t* @property {string} PathBuf\n\t* @property {string} IpAddr\n\t* @property {string} Ipv4Addr\n\t* @property {string} Ipv6Addr\n\t* @property {string} SocketAddr\n\t* @property {string} SocketAddrV4\n\t* @property {string} SocketAddrV6\n\t* @property {string} \"Cow<'static, str>\"\n\t* @property {number} \"Cow<'static, i32>\"\n\t* @property {string} \"&'static str\"\n\t* @property {boolean} \"&'static bool\"\n\t* @property {number} \"&'static i32\"\n\t* @property {number[]} \"Vec<i32>\"\n\t* @property {number[]} \"&'static [i32]\"\n\t* @property {[number, number, number]} \"&'static [i32; 3]\"\n\t* @property {[number, number, number]} \"[i32; 3]\"\n\t* @property {MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {MyEnum[]} \"&'static [MyEnum]\"\n\t* @property {[MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum]} \"&'static [MyEnum; 6]\"\n\t* @property {[MyEnum, MyEnum]} \"[MyEnum; 2]\"\n\t* @property {[number]} \"&'static [i32; 1]\"\n\t* @property {[]} \"&'static [i32; 0]\"\n\t* @property {number | null} \"Option<i32>\"\n\t* @property {null} \"Option<()>\"\n\t* @property {number[] | null} \"Option<Vec<i32>>\"\n\t* @property {Result<string, number>} \"Result<String, i32>\"\n\t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n\t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n\t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n\t* @property {string | null} \"Option<Option<String>>\"\n\t* @property {string | null} \"Option<Option<Option<String>>>\"\n\t* @property {null} \"PhantomData<()>\"\n\t* @property {null} \"PhantomData<String>\"\n\t* @property {never} Infallible\n\t* @property {Unit1} Unit1\n\t* @property {Unit2} Unit2\n\t* @property {Unit3} Unit3\n\t* @property {Unit4} Unit4\n\t* @property {Unit5} Unit5\n\t* @property {Unit6} Unit6\n\t* @property {Unit7} Unit7\n\t* @property {SimpleStruct} SimpleStruct\n\t* @property {TupleStruct1} TupleStruct1\n\t* @property {TupleStruct3} TupleStruct3\n\t* @property {TestEnum} TestEnum\n\t* @property {RefStruct} RefStruct\n\t* @property {InlinerStruct} InlinerStruct\n\t* @property {GenericStruct<number>} \"GenericStruct<i32>\"\n\t* @property {GenericStruct<string>} \"GenericStruct<String>\"\n\t* @property {FlattenEnumStruct} FlattenEnumStruct\n\t* @property {OverridenStruct} OverridenStruct\n\t* @property {HasGenericAlias} HasGenericAlias\n\t* @property {EnumMacroAttributes} EnumMacroAttributes\n\t* @property {InlineEnumField} InlineEnumField\n\t* @property {InlineOptionalType} InlineOptionalType\n\t* @property {Rename} Rename\n\t* @property {TransparentType} TransparentType\n\t* @property {TransparentType2} TransparentType2\n\t* @property {TransparentTypeWithOverride} TransparentTypeWithOverride\n\t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n\t* @property {Partial<{ [key in BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n\t* @property {Partial<{ [key in BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n\t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n\t* @property {PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n\t* @property {EnumReferenceRecordKey} EnumReferenceRecordKey\n\t* @property {FlattenOnNestedEnum} FlattenOnNestedEnum\n\t* @property {MyEmptyInput} MyEmptyInput\n\t* @property {string} \"(String)\"\n\t* @property {[string]} \"(String,)\"\n\t* @property {ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n\t* @property {ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n\t* @property {MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {InlineTuple} InlineTuple\n\t* @property {InlineTuple2} InlineTuple2\n\t* @property {string} \"Box<str>\"\n\t* @property {string} \"Box<String>\"\n\t* @property {SkippedFieldWithinVariant} SkippedFieldWithinVariant\n\t* @property {KebabCase} KebabCase\n\t* @property {string[]} \"&[&str]\"\n\t* @property {Issue281} \"Issue281<'_>\"\n\t* @property {LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n\t* @property {LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n\t* @property {RenameWithWeirdCharsField} RenameWithWeirdCharsField\n\t* @property {RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n\t* @property {RenamedFieldKeys} RenamedFieldKeys\n\t* @property {RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n\t* @property {Type} \"type_type::Type\"\n\t* @property {ActualType} ActualType\n\t* @property {SpectaTypeOverride} SpectaTypeOverride\n\t* @property {ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n\t* @property {ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n\t* @property {ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n\t* @property {ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n\t* @property {ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n\t* @property {ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n\t* @property {InvalidToValidType} InvalidToValidType\n\t* @property {TupleStruct} TupleStruct\n\t* @property {TupleStructWithRep} TupleStructWithRep\n\t* @property {GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n\t* @property {BracedStruct} BracedStruct\n\t* @property {StructNew} Struct\n\t* @property {Struct2} Struct2\n\t* @property {Enum} Enum\n\t* @property {Enum2} Enum2\n\t* @property {Enum3} Enum3\n\t* @property {StructRenameAllUppercase} StructRenameAllUppercase\n\t* @property {RenameSerdeSpecialChar} RenameSerdeSpecialChar\n\t* @property {EnumRenameAllUppercase} EnumRenameAllUppercase\n\t* @property {Recursive} Recursive\n\t* @property {RecursiveMapValue} RecursiveMapValue\n\t* @property {RecursiveTransparent} RecursiveTransparent\n\t* @property {RecursiveInEnum} RecursiveInEnum\n\t* @property {NonOptional} NonOptional\n\t* @property {OptionalOnNamedField} OptionalOnNamedField\n\t* @property {OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n\t* @property {OptionalInEnum} OptionalInEnum\n\t* @property {UntaggedVariants} UntaggedVariants\n\t* @property {UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n\t* @property {UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n\t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n\t* @property {Regular} Regular\n\t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n\t* @property {{ [key in TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n\t* @property {Partial<{ [key in UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n\t* @property {Partial<{ [key in UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n\t* @property {ValidMaybeValidKey} ValidMaybeValidKey\n\t* @property {ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n\t* @property {MacroStruct} MacroStruct\n\t* @property {MacroStruct2} MacroStruct2\n\t* @property {MacroEnum} MacroEnum\n\t* @property {DeprecatedType} DeprecatedType\n\t* @property {DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n\t* @property {DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n\t* @property {DeprecatedFields} DeprecatedFields\n\t* @property {DeprecatedTupleVariant} DeprecatedTupleVariant\n\t* @property {DeprecatedEnumVariants} DeprecatedEnumVariants\n\t* @property {CommentedStruct} CommentedStruct\n\t* @property {CommentedEnum} CommentedEnum\n\t* @property {SingleLineComment} SingleLineComment\n\t* @property {Demo<number, boolean>} NonGeneric\n\t* @property {Demo<number, boolean>} \"HalfGenericA<u8>\"\n\t* @property {Demo<number, boolean>} \"HalfGenericB<bool>\"\n\t* @property {Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n\t* @property {Demo<number, boolean>} \"Another<bool>\"\n\t* @property {{ [key in string]: number }} \"MapA<u32>\"\n\t* @property {{ [key in number]: string }} \"MapB<u32>\"\n\t* @property {{ [key in string]: AGenericStruct<number> }} \"MapC<u32>\"\n\t* @property {AGenericStruct<number>} \"AGenericStruct<u32>\"\n\t* @property {A} A\n\t* @property {DoubleFlattened} DoubleFlattened\n\t* @property {FlattenedInner} FlattenedInner\n\t* @property {BoxFlattened} BoxFlattened\n\t* @property {BoxInline} BoxInline\n\t* @property {First} First\n\t* @property {Second} Second\n\t* @property {Third} Third\n\t* @property {Fourth} Fourth\n\t* @property {TagOnStructWithInline} TagOnStructWithInline\n\t* @property {Sixth} Sixth\n\t* @property {Seventh} Seventh\n\t* @property {Eight} Eight\n\t* @property {Ninth} Ninth\n\t* @property {Tenth} Tenth\n\t* @property {MyEnumTagged} MyEnumTagged\n\t* @property {MyEnumExternal} MyEnumExternal\n\t* @property {MyEnumAdjacent} MyEnumAdjacent\n\t* @property {MyEnumUntagged} MyEnumUntagged\n\t* @property {EmptyStruct} EmptyStruct\n\t* @property {EmptyStructWithTag} EmptyStructWithTag\n\t* @property {AdjacentlyTagged} AdjacentlyTagged\n\t* @property {LoadProjectEvent} LoadProjectEvent\n\t* @property {ExternallyTagged} ExternallyTagged\n\t* @property {Issue221External} Issue221External\n\t* @property {InternallyTaggedD} InternallyTaggedD\n\t* @property {InternallyTaggedE} InternallyTaggedE\n\t* @property {InternallyTaggedF} InternallyTaggedF\n\t* @property {InternallyTaggedH} InternallyTaggedH\n\t* @property {InternallyTaggedL} InternallyTaggedL\n\t* @property {InternallyTaggedM} InternallyTaggedM\n\t* @property {StructWithAlias} StructWithAlias\n\t* @property {StructWithMultipleAliases} StructWithMultipleAliases\n\t* @property {StructWithAliasAndRename} StructWithAliasAndRename\n\t* @property {EnumWithVariantAlias} EnumWithVariantAlias\n\t* @property {EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n\t* @property {EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n\t* @property {InternallyTaggedWithAlias} InternallyTaggedWithAlias\n\t* @property {AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n\t* @property {UntaggedWithAlias} UntaggedWithAlias\n\t* @property {Issue221UntaggedSafe} Issue221UntaggedSafe\n\t* @property {Issue221UntaggedMixed} Issue221UntaggedMixed\n\t* @property {EmptyEnum} EmptyEnum\n\t* @property {EmptyEnumTagged} EmptyEnumTagged\n\t* @property {EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n\t* @property {EmptyEnumUntagged} EmptyEnumUntagged\n\t* @property {SkipOnlyField} SkipOnlyField\n\t* @property {SkipField} SkipField\n\t* @property {SkipVariant} SkipVariant\n\t* @property {SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n\t* @property {SkipNamedFieldInVariant} SkipNamedFieldInVariant\n\t* @property {TransparentWithSkip} TransparentWithSkip\n\t* @property {TransparentWithSkip2} TransparentWithSkip2\n\t* @property {TransparentWithSkip3} TransparentWithSkip3\n\t* @property {SkipVariant2} SkipVariant2\n\t* @property {SkipVariant3} SkipVariant3\n\t* @property {SkipStructFields} SkipStructFields\n\t* @property {SpectaSkipNonTypeField} SpectaSkipNonTypeField\n\t* @property {FlattenA} FlattenA\n\t* @property {FlattenB} FlattenB\n\t* @property {FlattenC} FlattenC\n\t* @property {FlattenD} FlattenD\n\t* @property {FlattenE} FlattenE\n\t* @property {FlattenF} FlattenF\n\t* @property {FlattenG} FlattenG\n\t* @property {TupleNested} TupleNested\n\t* @property {Generic1<null>} \"Generic1<()>\"\n\t* @property {GenericAutoBound<null>} \"GenericAutoBound<()>\"\n\t* @property {GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n\t* @property {Container1} Container1\n\t* @property {Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n\t* @property {GenericNewType1<null>} \"GenericNewType1<()>\"\n\t* @property {GenericTuple<null>} \"GenericTuple<()>\"\n\t* @property {GenericStruct2<null>} \"GenericStruct2<()>\"\n\t* @property {string} \"InlineGenericNewtype<String>\"\n\t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t* \tvalue: string,\n\t* } }) & { Unnamed?: never }]} \"InlineGenericNested<String>\"\n\t* @property {InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n\t* @property {InlineFlattenGenerics} InlineFlattenGenerics\n\t* @property {GenericDefault} GenericDefault\n\t* @property {ChainedGenericDefault} ChainedGenericDefault\n\t* @property {ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n\t* @property {ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n\t* @property {ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n\t* @property {GenericDefaultSkipped<string>} GenericDefaultSkipped\n\t* @property {GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n\t* @property {GenericParameterOrderPreserved} GenericParameterOrderPreserved\n\t* @property {ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n\t* @property {ConstGenericInConstContainer} ConstGenericInConstContainer\n\t* @property {NamedConstGenericContainer} NamedConstGenericContainer\n\t* @property {InlineConstGenericContainer} InlineConstGenericContainer\n\t* @property {InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n\t* @property {TestCollectionRegister} TestCollectionRegister\n\t* @property {TestCollectionRegister} TestCollectionRegister\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*\n\t* @typedef {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} RecursiveInEnum\n\t* @property {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} A\n\t*\n\t* @typedef {RecursiveInline} RecursiveInline\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**  Some single-line comment */\n\t* ({ B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t} & First} Third\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} ToBeFlattened\n\t* @property {string} a\n\t*\n\t* @typedef {string} TransparentStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinner: string,\n\t*\t}} TransparentTypeInner\n\t* @property {string} inner\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*\n\t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {\"C\"} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | number} UntaggedVariantsKey\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*/\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-flatfile-serde_phases.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\njsdoc-export-to-flatfile-serde_phases (57121 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n/**\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} B\n\t* @property {number} b\n\t*\n\t* @typedef {\"A\" | \"B\"} BasicEnum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {BoxedInner} BoxFlattened\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} BoxedInner\n\t* @property {number} a\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tflattened: number,\n\t*\t}} D\n\t* @property {number} flattened\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenB\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & FlattenA} FlattenC\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{ tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" }} FlattenEnum\n\t* @property {{ tag: \"One\" }} One\n\t* @property {{ tag: \"Two\" }} Two\n\t* @property {{ tag: \"Three\" }} Three\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & FlattenEnum} FlattenEnumStruct\n\t* @property {string} outer\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & NestedEnum} FlattenOnNestedEnum\n\t* @property {string} id\n\t*\n\t* @typedef {Inner} FlattenedInner\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tgeneric_flattened: T,\n\t*\t}} GenericFlattened<T>\n\t* @property {T} generic_flattened\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {\"Undefined\" | T} GenericType<T>\n\t* @property {\"Undefined\"} Undefined\n\t* @property {T} Value\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} InlineRecursiveConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number, number]} d\n\t* @property {InlineRecursiveConstGeneric} e\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} InlineStruct\n\t* @property {SimpleStruct} ref_struct\n\t* @property {number} val\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t} & FlattenedInner} Inner\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} InternallyTaggedD\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {null} InternallyTaggedFInner\n\t* @property {null} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {null} InternallyTaggedHInner\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\" }} InternallyTaggedLInner\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\" }} B\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t*  https://github.com/specta-rs/specta/issues/374\n\t*\n\t* @typedef {Issue374_Serialize | Issue374_Deserialize} Issue374\n\t* @property {Issue374_Serialize} Serialize\n\t* @property {Issue374_Deserialize} Deserialize\n\t*\n\t*  https://github.com/specta-rs/specta/issues/374\n\t*\n\t* @typedef {{\n\t*\t\tfoo?: boolean,\n\t*\t\tbar?: boolean,\n\t*\t}} Issue374_Deserialize\n\t* @property {boolean} [foo]\n\t* @property {boolean} [bar]\n\t*\n\t*  https://github.com/specta-rs/specta/issues/374\n\t*\n\t* @typedef {{\n\t*\t\tfoo?: boolean,\n\t*\t\tbar?: boolean,\n\t*\t}} Issue374_Serialize\n\t* @property {boolean} [foo]\n\t* @property {boolean} [bar]\n\t*\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {T} MaybeValidKey<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {({ A: string }) & { B?: never } | ({ B: number }) & { A?: never }} MyEnum\n\t* @property {{ A: string }} A\n\t* @property {{ B: number }} B\n\t*\n\t* @typedef {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ Variant: {\n\t* \tinner: First,\n\t* } }} MyEnumExternal\n\t* @property {{ Variant: {\n\t* \tinner: First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ type: \"Variant\"; inner: First }} MyEnumTagged\n\t* @property {{ type: \"Variant\"; inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{ type: \"a\"; value: string } | { type: \"b\"; value: number }} NestedEnum\n\t* @property {{ type: \"a\"; value: string }} a\n\t* @property {{ type: \"b\"; value: number }} b\n\t*\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: First }} D\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {Optional_Serialize | Optional_Deserialize} Optional\n\t* @property {Optional_Serialize} Serialize\n\t* @property {Optional_Deserialize} Deserialize\n\t*\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {{\n\t*\t\ta: number | null,\n\t*\t\tb?: number | null,\n\t*\t\tc: string | null,\n\t*\t\td?: boolean,\n\t*\t}} Optional_Deserialize\n\t* @property {number | null} a\n\t* @property {number | null} [b]\n\t* @property {string | null} c\n\t* @property {boolean} [d]\n\t*\n\t* @typedef {{\n\t*\t\ta: number | null,\n\t*\t\tb?: number | null,\n\t*\t\tc?: string | null,\n\t*\t\td: boolean,\n\t*\t}} Optional_Serialize\n\t* @property {number | null} a\n\t* @property {number | null} [b]\n\t* @property {string | null} [c]\n\t* @property {boolean} d\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{\n\t*\t\tfirst: Z,\n\t*\t\tsecond: A,\n\t*\t}} Pair<Z, A>\n\t* @property {Z} first\n\t* @property {A} second\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} PlaceholderInnerField\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ti8: number,\n\t*\t\ti16: number,\n\t*\t\ti32: number,\n\t*\t\tu8: number,\n\t*\t\tu16: number,\n\t*\t\tu32: number,\n\t*\t\tf32: number,\n\t*\t\tf64: number,\n\t*\t\tbool: boolean,\n\t*\t\tchar: string,\n\t*\t\t\"Range<i32>\": Range<number>,\n\t*\t\t\"RangeInclusive<i32>\": RangeInclusive<number>,\n\t*\t\t\"()\": null,\n\t*\t\t\"(String, i32)\": [string, number],\n\t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t*\t\tString: string,\n\t*\t\tPathBuf: string,\n\t*\t\tIpAddr: string,\n\t*\t\tIpv4Addr: string,\n\t*\t\tIpv6Addr: string,\n\t*\t\tSocketAddr: string,\n\t*\t\tSocketAddrV4: string,\n\t*\t\tSocketAddrV6: string,\n\t*\t\t\"Cow<'static, str>\": string,\n\t*\t\t\"Cow<'static, i32>\": number,\n\t*\t\t\"&'static str\": string,\n\t*\t\t\"&'static bool\": boolean,\n\t*\t\t\"&'static i32\": number,\n\t*\t\t\"Vec<i32>\": number[],\n\t*\t\t\"&'static [i32]\": number[],\n\t*\t\t\"&'static [i32; 3]\": [number, number, number],\n\t*\t\t\"[i32; 3]\": [number, number, number],\n\t*\t\t\"Vec<MyEnum>\": MyEnum[],\n\t*\t\t\"&'static [MyEnum]\": MyEnum[],\n\t*\t\t\"&'static [MyEnum; 6]\": [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum],\n\t*\t\t\"[MyEnum; 2]\": [MyEnum, MyEnum],\n\t*\t\t\"&'static [i32; 1]\": [number],\n\t*\t\t\"&'static [i32; 0]\": [],\n\t*\t\t\"Option<i32>\": number | null,\n\t*\t\t\"Option<()>\": null,\n\t*\t\t\"Option<Vec<i32>>\": number[] | null,\n\t*\t\t\"Result<String, i32>\": Result<string, number>,\n\t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t*\t\t\"Option<Option<String>>\": string | null,\n\t*\t\t\"Option<Option<Option<String>>>\": string | null,\n\t*\t\t\"PhantomData<()>\": null,\n\t*\t\t\"PhantomData<String>\": null,\n\t*\t\tInfallible: never,\n\t*\t\tUnit1: Unit1,\n\t*\t\tUnit2: Unit2,\n\t*\t\tUnit3: Unit3,\n\t*\t\tUnit4: Unit4,\n\t*\t\tUnit5: Unit5,\n\t*\t\tUnit6: Unit6,\n\t*\t\tUnit7: Unit7,\n\t*\t\tSimpleStruct: SimpleStruct,\n\t*\t\tTupleStruct1: TupleStruct1,\n\t*\t\tTupleStruct3: TupleStruct3,\n\t*\t\tTestEnum: TestEnum,\n\t*\t\tRefStruct: RefStruct,\n\t*\t\tInlinerStruct: InlinerStruct,\n\t*\t\t\"GenericStruct<i32>\": GenericStruct<number>,\n\t*\t\t\"GenericStruct<String>\": GenericStruct<string>,\n\t*\t\tFlattenEnumStruct: FlattenEnumStruct,\n\t*\t\tOverridenStruct: OverridenStruct,\n\t*\t\tHasGenericAlias: HasGenericAlias,\n\t*\t\tEnumMacroAttributes: EnumMacroAttributes,\n\t*\t\tInlineEnumField: InlineEnumField,\n\t*\t\tInlineOptionalType: InlineOptionalType,\n\t*\t\tRename: Rename,\n\t*\t\tTransparentType: TransparentType,\n\t*\t\tTransparentType2: TransparentType2,\n\t*\t\tTransparentTypeWithOverride: TransparentTypeWithOverride,\n\t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in BasicEnum]: null }>,\n\t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in BasicEnum]: number }>,\n\t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t*\t\t\"Vec<PlaceholderInnerField>\": PlaceholderInnerField[],\n\t*\t\tEnumReferenceRecordKey: EnumReferenceRecordKey,\n\t*\t\tFlattenOnNestedEnum: FlattenOnNestedEnum,\n\t*\t\tMyEmptyInput: MyEmptyInput,\n\t*\t\t\"(String)\": string,\n\t*\t\t\"(String,)\": [string],\n\t*\t\tExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant,\n\t*\t\tExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct,\n\t*\t\t\"Vec<MyEnum>\": MyEnum[],\n\t*\t\tInlineTuple: InlineTuple,\n\t*\t\tInlineTuple2: InlineTuple2,\n\t*\t\t\"Box<str>\": string,\n\t*\t\t\"Box<String>\": string,\n\t*\t\tSkippedFieldWithinVariant: SkippedFieldWithinVariant,\n\t*\t\tKebabCase: KebabCase,\n\t*\t\t\"&[&str]\": string[],\n\t*\t\t\"Issue281<'_>\": Issue281,\n\t*\t\t\"LifetimeGenericStruct<'_, i32>\": LifetimeGenericStruct<number>,\n\t*\t\t\"LifetimeGenericEnum<'_, i32>\": LifetimeGenericEnum<number>,\n\t*\t\tRenameWithWeirdCharsField: RenameWithWeirdCharsField,\n\t*\t\tRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant,\n\t*\t\tRenamedFieldKeys: RenamedFieldKeys,\n\t*\t\tRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload,\n\t*\t\t\"type_type::Type\": Type,\n\t*\t\tActualType: ActualType,\n\t*\t\tSpectaTypeOverride: SpectaTypeOverride,\n\t*\t\tContainerTypeOverrideStruct: ContainerTypeOverrideStruct,\n\t*\t\tContainerTypeOverrideEnum: ContainerTypeOverrideEnum,\n\t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": ContainerTypeOverrideGeneric,\n\t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": ContainerTypeOverrideToGeneric<number>,\n\t*\t\tContainerTypeOverrideTuple: ContainerTypeOverrideTuple,\n\t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": ContainerTypeOverrideTupleGeneric<number>,\n\t*\t\tInvalidToValidType: InvalidToValidType,\n\t*\t\tTupleStruct: TupleStruct,\n\t*\t\tTupleStructWithRep: TupleStructWithRep,\n\t*\t\t\"GenericTupleStruct<String>\": GenericTupleStruct<string>,\n\t*\t\tBracedStruct: BracedStruct,\n\t*\t\tStruct: StructNew,\n\t*\t\tStruct2: Struct2,\n\t*\t\tEnum: Enum,\n\t*\t\tEnum2: Enum2,\n\t*\t\tEnum3: Enum3,\n\t*\t\tStructRenameAllUppercase: StructRenameAllUppercase,\n\t*\t\tRenameSerdeSpecialChar: RenameSerdeSpecialChar,\n\t*\t\tEnumRenameAllUppercase: EnumRenameAllUppercase,\n\t*\t\tRecursive: Recursive,\n\t*\t\tRecursiveMapValue: RecursiveMapValue,\n\t*\t\tRecursiveTransparent: RecursiveTransparent,\n\t*\t\tRecursiveInEnum: RecursiveInEnum,\n\t*\t\tNonOptional: NonOptional,\n\t*\t\tOptionalOnNamedField: OptionalOnNamedField,\n\t*\t\tOptionalOnTransparentNamedField: OptionalOnTransparentNamedField,\n\t*\t\tOptionalInEnum: OptionalInEnum,\n\t*\t\tUntaggedVariants: UntaggedVariants,\n\t*\t\tUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue,\n\t*\t\tUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches,\n\t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t*\t\tRegular: Regular,\n\t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in TransparentStruct]: null },\n\t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in UnitVariants]: null }>,\n\t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in UntaggedVariantsKey]: null }>,\n\t*\t\tValidMaybeValidKey: ValidMaybeValidKey,\n\t*\t\tValidMaybeValidKeyNested: ValidMaybeValidKeyNested,\n\t*\t\tMacroStruct: MacroStruct,\n\t*\t\tMacroStruct2: MacroStruct2,\n\t*\t\tMacroEnum: MacroEnum,\n\t*\t\tDeprecatedType: DeprecatedType,\n\t*\t\tDeprecatedTypeWithMsg: DeprecatedTypeWithMsg,\n\t*\t\tDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2,\n\t*\t\tDeprecatedFields: DeprecatedFields,\n\t*\t\tDeprecatedTupleVariant: DeprecatedTupleVariant,\n\t*\t\tDeprecatedEnumVariants: DeprecatedEnumVariants,\n\t*\t\tCommentedStruct: CommentedStruct,\n\t*\t\tCommentedEnum: CommentedEnum,\n\t*\t\tSingleLineComment: SingleLineComment,\n\t*\t\tNonGeneric: Demo<number, boolean>,\n\t*\t\t\"HalfGenericA<u8>\": Demo<number, boolean>,\n\t*\t\t\"HalfGenericB<bool>\": Demo<number, boolean>,\n\t*\t\t\"FullGeneric<u8, bool>\": Demo<number, boolean>,\n\t*\t\t\"Another<bool>\": Demo<number, boolean>,\n\t*\t\t\"MapA<u32>\": { [key in string]: number },\n\t*\t\t\"MapB<u32>\": { [key in number]: string },\n\t*\t\t\"MapC<u32>\": { [key in string]: AGenericStruct<number> },\n\t*\t\t\"AGenericStruct<u32>\": AGenericStruct<number>,\n\t*\t\tA: A,\n\t*\t\tDoubleFlattened: DoubleFlattened,\n\t*\t\tFlattenedInner: FlattenedInner,\n\t*\t\tBoxFlattened: BoxFlattened,\n\t*\t\tBoxInline: BoxInline,\n\t*\t\tFirst: First,\n\t*\t\tSecond: Second,\n\t*\t\tThird: Third,\n\t*\t\tFourth: Fourth,\n\t*\t\tTagOnStructWithInline: TagOnStructWithInline,\n\t*\t\tSixth: Sixth,\n\t*\t\tSeventh: Seventh,\n\t*\t\tEight: Eight,\n\t*\t\tNinth: Ninth,\n\t*\t\tTenth: Tenth,\n\t*\t\tMyEnumTagged: MyEnumTagged,\n\t*\t\tMyEnumExternal: MyEnumExternal,\n\t*\t\tMyEnumAdjacent: MyEnumAdjacent,\n\t*\t\tMyEnumUntagged: MyEnumUntagged,\n\t*\t\tEmptyStruct: EmptyStruct,\n\t*\t\tEmptyStructWithTag: EmptyStructWithTag,\n\t*\t\tAdjacentlyTagged: AdjacentlyTagged,\n\t*\t\tLoadProjectEvent: LoadProjectEvent,\n\t*\t\tExternallyTagged: ExternallyTagged,\n\t*\t\tIssue221External: Issue221External,\n\t*\t\tInternallyTaggedD: InternallyTaggedD,\n\t*\t\tInternallyTaggedE: InternallyTaggedE,\n\t*\t\tInternallyTaggedF: InternallyTaggedF,\n\t*\t\tInternallyTaggedH: InternallyTaggedH,\n\t*\t\tInternallyTaggedL: InternallyTaggedL,\n\t*\t\tInternallyTaggedM: InternallyTaggedM,\n\t*\t\tStructWithAlias: StructWithAlias,\n\t*\t\tStructWithMultipleAliases: StructWithMultipleAliases,\n\t*\t\tStructWithAliasAndRename: StructWithAliasAndRename,\n\t*\t\tEnumWithVariantAlias: EnumWithVariantAlias,\n\t*\t\tEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases,\n\t*\t\tEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename,\n\t*\t\tInternallyTaggedWithAlias: InternallyTaggedWithAlias,\n\t*\t\tAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias,\n\t*\t\tUntaggedWithAlias: UntaggedWithAlias,\n\t*\t\tIssue221UntaggedSafe: Issue221UntaggedSafe,\n\t*\t\tIssue221UntaggedMixed: Issue221UntaggedMixed,\n\t*\t\tEmptyEnum: EmptyEnum,\n\t*\t\tEmptyEnumTagged: EmptyEnumTagged,\n\t*\t\tEmptyEnumTaggedWContent: EmptyEnumTaggedWContent,\n\t*\t\tEmptyEnumUntagged: EmptyEnumUntagged,\n\t*\t\tSkipOnlyField: SkipOnlyField,\n\t*\t\tSkipField: SkipField,\n\t*\t\tSkipVariant: SkipVariant,\n\t*\t\tSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant,\n\t*\t\tSkipNamedFieldInVariant: SkipNamedFieldInVariant,\n\t*\t\tTransparentWithSkip: TransparentWithSkip,\n\t*\t\tTransparentWithSkip2: TransparentWithSkip2,\n\t*\t\tTransparentWithSkip3: TransparentWithSkip3,\n\t*\t\tSkipVariant2: SkipVariant2,\n\t*\t\tSkipVariant3: SkipVariant3,\n\t*\t\tSkipStructFields: SkipStructFields,\n\t*\t\tSpectaSkipNonTypeField: SpectaSkipNonTypeField,\n\t*\t\tFlattenA: FlattenA,\n\t*\t\tFlattenB: FlattenB,\n\t*\t\tFlattenC: FlattenC,\n\t*\t\tFlattenD: FlattenD,\n\t*\t\tFlattenE: FlattenE,\n\t*\t\tFlattenF: FlattenF,\n\t*\t\tFlattenG: FlattenG,\n\t*\t\tTupleNested: TupleNested,\n\t*\t\t\"Generic1<()>\": Generic1<null>,\n\t*\t\t\"GenericAutoBound<()>\": GenericAutoBound<null>,\n\t*\t\t\"GenericAutoBound2<()>\": GenericAutoBound2<null>,\n\t*\t\tContainer1: Container1,\n\t*\t\t\"Generic2<(), String, i32>\": Generic2<null, string, number>,\n\t*\t\t\"GenericNewType1<()>\": GenericNewType1<null>,\n\t*\t\t\"GenericTuple<()>\": GenericTuple<null>,\n\t*\t\t\"GenericStruct2<()>\": GenericStruct2<null>,\n\t*\t\t\"InlineGenericNewtype<String>\": string,\n\t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t* \tvalue: string,\n\t* } }) & { Unnamed?: never }],\n\t*\t\t\"InlineFlattenGenericsG<()>\": InlineFlattenGenericsG<null>,\n\t*\t\tInlineFlattenGenerics: InlineFlattenGenerics,\n\t*\t\tGenericDefault: GenericDefault,\n\t*\t\tChainedGenericDefault: ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<String, String>\": ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<i32>\": ChainedGenericDefault<number, number>,\n\t*\t\t\"ChainedGenericDefault<String, i32>\": ChainedGenericDefault<string, number>,\n\t*\t\tGenericDefaultSkipped: GenericDefaultSkipped<string>,\n\t*\t\tGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>,\n\t*\t\tGenericParameterOrderPreserved: GenericParameterOrderPreserved,\n\t*\t\tConstGenericInNonConstContainer: ConstGenericInNonConstContainer,\n\t*\t\tConstGenericInConstContainer: ConstGenericInConstContainer,\n\t*\t\tNamedConstGenericContainer: NamedConstGenericContainer,\n\t*\t\tInlineConstGenericContainer: InlineConstGenericContainer,\n\t*\t\tInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer,\n\t*\t\tTestCollectionRegister: TestCollectionRegister,\n\t*\t\tTestCollectionRegister: TestCollectionRegister,\n\t*\t}} Primitives\n\t* @property {number} i8\n\t* @property {number} i16\n\t* @property {number} i32\n\t* @property {number} u8\n\t* @property {number} u16\n\t* @property {number} u32\n\t* @property {number} f32\n\t* @property {number} f64\n\t* @property {boolean} bool\n\t* @property {string} char\n\t* @property {Range<number>} \"Range<i32>\"\n\t* @property {RangeInclusive<number>} \"RangeInclusive<i32>\"\n\t* @property {null} \"()\"\n\t* @property {[string, number]} \"(String, i32)\"\n\t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n\t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n\t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n\t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n\t* @property {string} String\n\t* @property {string} PathBuf\n\t* @property {string} IpAddr\n\t* @property {string} Ipv4Addr\n\t* @property {string} Ipv6Addr\n\t* @property {string} SocketAddr\n\t* @property {string} SocketAddrV4\n\t* @property {string} SocketAddrV6\n\t* @property {string} \"Cow<'static, str>\"\n\t* @property {number} \"Cow<'static, i32>\"\n\t* @property {string} \"&'static str\"\n\t* @property {boolean} \"&'static bool\"\n\t* @property {number} \"&'static i32\"\n\t* @property {number[]} \"Vec<i32>\"\n\t* @property {number[]} \"&'static [i32]\"\n\t* @property {[number, number, number]} \"&'static [i32; 3]\"\n\t* @property {[number, number, number]} \"[i32; 3]\"\n\t* @property {MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {MyEnum[]} \"&'static [MyEnum]\"\n\t* @property {[MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum]} \"&'static [MyEnum; 6]\"\n\t* @property {[MyEnum, MyEnum]} \"[MyEnum; 2]\"\n\t* @property {[number]} \"&'static [i32; 1]\"\n\t* @property {[]} \"&'static [i32; 0]\"\n\t* @property {number | null} \"Option<i32>\"\n\t* @property {null} \"Option<()>\"\n\t* @property {number[] | null} \"Option<Vec<i32>>\"\n\t* @property {Result<string, number>} \"Result<String, i32>\"\n\t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n\t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n\t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n\t* @property {string | null} \"Option<Option<String>>\"\n\t* @property {string | null} \"Option<Option<Option<String>>>\"\n\t* @property {null} \"PhantomData<()>\"\n\t* @property {null} \"PhantomData<String>\"\n\t* @property {never} Infallible\n\t* @property {Unit1} Unit1\n\t* @property {Unit2} Unit2\n\t* @property {Unit3} Unit3\n\t* @property {Unit4} Unit4\n\t* @property {Unit5} Unit5\n\t* @property {Unit6} Unit6\n\t* @property {Unit7} Unit7\n\t* @property {SimpleStruct} SimpleStruct\n\t* @property {TupleStruct1} TupleStruct1\n\t* @property {TupleStruct3} TupleStruct3\n\t* @property {TestEnum} TestEnum\n\t* @property {RefStruct} RefStruct\n\t* @property {InlinerStruct} InlinerStruct\n\t* @property {GenericStruct<number>} \"GenericStruct<i32>\"\n\t* @property {GenericStruct<string>} \"GenericStruct<String>\"\n\t* @property {FlattenEnumStruct} FlattenEnumStruct\n\t* @property {OverridenStruct} OverridenStruct\n\t* @property {HasGenericAlias} HasGenericAlias\n\t* @property {EnumMacroAttributes} EnumMacroAttributes\n\t* @property {InlineEnumField} InlineEnumField\n\t* @property {InlineOptionalType} InlineOptionalType\n\t* @property {Rename} Rename\n\t* @property {TransparentType} TransparentType\n\t* @property {TransparentType2} TransparentType2\n\t* @property {TransparentTypeWithOverride} TransparentTypeWithOverride\n\t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n\t* @property {Partial<{ [key in BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n\t* @property {Partial<{ [key in BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n\t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n\t* @property {PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n\t* @property {EnumReferenceRecordKey} EnumReferenceRecordKey\n\t* @property {FlattenOnNestedEnum} FlattenOnNestedEnum\n\t* @property {MyEmptyInput} MyEmptyInput\n\t* @property {string} \"(String)\"\n\t* @property {[string]} \"(String,)\"\n\t* @property {ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n\t* @property {ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n\t* @property {MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {InlineTuple} InlineTuple\n\t* @property {InlineTuple2} InlineTuple2\n\t* @property {string} \"Box<str>\"\n\t* @property {string} \"Box<String>\"\n\t* @property {SkippedFieldWithinVariant} SkippedFieldWithinVariant\n\t* @property {KebabCase} KebabCase\n\t* @property {string[]} \"&[&str]\"\n\t* @property {Issue281} \"Issue281<'_>\"\n\t* @property {LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n\t* @property {LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n\t* @property {RenameWithWeirdCharsField} RenameWithWeirdCharsField\n\t* @property {RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n\t* @property {RenamedFieldKeys} RenamedFieldKeys\n\t* @property {RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n\t* @property {Type} \"type_type::Type\"\n\t* @property {ActualType} ActualType\n\t* @property {SpectaTypeOverride} SpectaTypeOverride\n\t* @property {ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n\t* @property {ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n\t* @property {ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n\t* @property {ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n\t* @property {ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n\t* @property {ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n\t* @property {InvalidToValidType} InvalidToValidType\n\t* @property {TupleStruct} TupleStruct\n\t* @property {TupleStructWithRep} TupleStructWithRep\n\t* @property {GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n\t* @property {BracedStruct} BracedStruct\n\t* @property {StructNew} Struct\n\t* @property {Struct2} Struct2\n\t* @property {Enum} Enum\n\t* @property {Enum2} Enum2\n\t* @property {Enum3} Enum3\n\t* @property {StructRenameAllUppercase} StructRenameAllUppercase\n\t* @property {RenameSerdeSpecialChar} RenameSerdeSpecialChar\n\t* @property {EnumRenameAllUppercase} EnumRenameAllUppercase\n\t* @property {Recursive} Recursive\n\t* @property {RecursiveMapValue} RecursiveMapValue\n\t* @property {RecursiveTransparent} RecursiveTransparent\n\t* @property {RecursiveInEnum} RecursiveInEnum\n\t* @property {NonOptional} NonOptional\n\t* @property {OptionalOnNamedField} OptionalOnNamedField\n\t* @property {OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n\t* @property {OptionalInEnum} OptionalInEnum\n\t* @property {UntaggedVariants} UntaggedVariants\n\t* @property {UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n\t* @property {UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n\t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n\t* @property {Regular} Regular\n\t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n\t* @property {{ [key in TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n\t* @property {Partial<{ [key in UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n\t* @property {Partial<{ [key in UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n\t* @property {ValidMaybeValidKey} ValidMaybeValidKey\n\t* @property {ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n\t* @property {MacroStruct} MacroStruct\n\t* @property {MacroStruct2} MacroStruct2\n\t* @property {MacroEnum} MacroEnum\n\t* @property {DeprecatedType} DeprecatedType\n\t* @property {DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n\t* @property {DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n\t* @property {DeprecatedFields} DeprecatedFields\n\t* @property {DeprecatedTupleVariant} DeprecatedTupleVariant\n\t* @property {DeprecatedEnumVariants} DeprecatedEnumVariants\n\t* @property {CommentedStruct} CommentedStruct\n\t* @property {CommentedEnum} CommentedEnum\n\t* @property {SingleLineComment} SingleLineComment\n\t* @property {Demo<number, boolean>} NonGeneric\n\t* @property {Demo<number, boolean>} \"HalfGenericA<u8>\"\n\t* @property {Demo<number, boolean>} \"HalfGenericB<bool>\"\n\t* @property {Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n\t* @property {Demo<number, boolean>} \"Another<bool>\"\n\t* @property {{ [key in string]: number }} \"MapA<u32>\"\n\t* @property {{ [key in number]: string }} \"MapB<u32>\"\n\t* @property {{ [key in string]: AGenericStruct<number> }} \"MapC<u32>\"\n\t* @property {AGenericStruct<number>} \"AGenericStruct<u32>\"\n\t* @property {A} A\n\t* @property {DoubleFlattened} DoubleFlattened\n\t* @property {FlattenedInner} FlattenedInner\n\t* @property {BoxFlattened} BoxFlattened\n\t* @property {BoxInline} BoxInline\n\t* @property {First} First\n\t* @property {Second} Second\n\t* @property {Third} Third\n\t* @property {Fourth} Fourth\n\t* @property {TagOnStructWithInline} TagOnStructWithInline\n\t* @property {Sixth} Sixth\n\t* @property {Seventh} Seventh\n\t* @property {Eight} Eight\n\t* @property {Ninth} Ninth\n\t* @property {Tenth} Tenth\n\t* @property {MyEnumTagged} MyEnumTagged\n\t* @property {MyEnumExternal} MyEnumExternal\n\t* @property {MyEnumAdjacent} MyEnumAdjacent\n\t* @property {MyEnumUntagged} MyEnumUntagged\n\t* @property {EmptyStruct} EmptyStruct\n\t* @property {EmptyStructWithTag} EmptyStructWithTag\n\t* @property {AdjacentlyTagged} AdjacentlyTagged\n\t* @property {LoadProjectEvent} LoadProjectEvent\n\t* @property {ExternallyTagged} ExternallyTagged\n\t* @property {Issue221External} Issue221External\n\t* @property {InternallyTaggedD} InternallyTaggedD\n\t* @property {InternallyTaggedE} InternallyTaggedE\n\t* @property {InternallyTaggedF} InternallyTaggedF\n\t* @property {InternallyTaggedH} InternallyTaggedH\n\t* @property {InternallyTaggedL} InternallyTaggedL\n\t* @property {InternallyTaggedM} InternallyTaggedM\n\t* @property {StructWithAlias} StructWithAlias\n\t* @property {StructWithMultipleAliases} StructWithMultipleAliases\n\t* @property {StructWithAliasAndRename} StructWithAliasAndRename\n\t* @property {EnumWithVariantAlias} EnumWithVariantAlias\n\t* @property {EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n\t* @property {EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n\t* @property {InternallyTaggedWithAlias} InternallyTaggedWithAlias\n\t* @property {AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n\t* @property {UntaggedWithAlias} UntaggedWithAlias\n\t* @property {Issue221UntaggedSafe} Issue221UntaggedSafe\n\t* @property {Issue221UntaggedMixed} Issue221UntaggedMixed\n\t* @property {EmptyEnum} EmptyEnum\n\t* @property {EmptyEnumTagged} EmptyEnumTagged\n\t* @property {EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n\t* @property {EmptyEnumUntagged} EmptyEnumUntagged\n\t* @property {SkipOnlyField} SkipOnlyField\n\t* @property {SkipField} SkipField\n\t* @property {SkipVariant} SkipVariant\n\t* @property {SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n\t* @property {SkipNamedFieldInVariant} SkipNamedFieldInVariant\n\t* @property {TransparentWithSkip} TransparentWithSkip\n\t* @property {TransparentWithSkip2} TransparentWithSkip2\n\t* @property {TransparentWithSkip3} TransparentWithSkip3\n\t* @property {SkipVariant2} SkipVariant2\n\t* @property {SkipVariant3} SkipVariant3\n\t* @property {SkipStructFields} SkipStructFields\n\t* @property {SpectaSkipNonTypeField} SpectaSkipNonTypeField\n\t* @property {FlattenA} FlattenA\n\t* @property {FlattenB} FlattenB\n\t* @property {FlattenC} FlattenC\n\t* @property {FlattenD} FlattenD\n\t* @property {FlattenE} FlattenE\n\t* @property {FlattenF} FlattenF\n\t* @property {FlattenG} FlattenG\n\t* @property {TupleNested} TupleNested\n\t* @property {Generic1<null>} \"Generic1<()>\"\n\t* @property {GenericAutoBound<null>} \"GenericAutoBound<()>\"\n\t* @property {GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n\t* @property {Container1} Container1\n\t* @property {Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n\t* @property {GenericNewType1<null>} \"GenericNewType1<()>\"\n\t* @property {GenericTuple<null>} \"GenericTuple<()>\"\n\t* @property {GenericStruct2<null>} \"GenericStruct2<()>\"\n\t* @property {string} \"InlineGenericNewtype<String>\"\n\t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t* \tvalue: string,\n\t* } }) & { Unnamed?: never }]} \"InlineGenericNested<String>\"\n\t* @property {InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n\t* @property {InlineFlattenGenerics} InlineFlattenGenerics\n\t* @property {GenericDefault} GenericDefault\n\t* @property {ChainedGenericDefault} ChainedGenericDefault\n\t* @property {ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n\t* @property {ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n\t* @property {ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n\t* @property {GenericDefaultSkipped<string>} GenericDefaultSkipped\n\t* @property {GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n\t* @property {GenericParameterOrderPreserved} GenericParameterOrderPreserved\n\t* @property {ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n\t* @property {ConstGenericInConstContainer} ConstGenericInConstContainer\n\t* @property {NamedConstGenericContainer} NamedConstGenericContainer\n\t* @property {InlineConstGenericContainer} InlineConstGenericContainer\n\t* @property {InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n\t* @property {TestCollectionRegister} TestCollectionRegister\n\t* @property {TestCollectionRegister} TestCollectionRegister\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*\n\t* @typedef {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} RecursiveInEnum\n\t* @property {{ A: {\n\t* \tdemo: RecursiveInEnum,\n\t* } }} A\n\t*\n\t* @typedef {RecursiveInline} RecursiveInline\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**  Some single-line comment */\n\t* ({ B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*\n\t* @typedef {StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize} StructPhaseSpecificRename\n\t* @property {StructPhaseSpecificRenameSerialize} Serialize\n\t* @property {StructPhaseSpecificRenameDeserialize} Deserialize\n\t*\n\t* @typedef {{\n\t*\t\tkind: \"StructPhaseSpecificRenameDeserialize\",\n\t*\t\tder: string,\n\t*\t}} StructPhaseSpecificRenameDeserialize\n\t* @property {\"StructPhaseSpecificRenameDeserialize\"} kind\n\t* @property {string} der\n\t*\n\t* @typedef {{\n\t*\t\tkind: \"StructPhaseSpecificRenameSerialize\",\n\t*\t\tser: string,\n\t*\t}} StructPhaseSpecificRenameSerialize\n\t* @property {\"StructPhaseSpecificRenameSerialize\"} kind\n\t* @property {string} ser\n\t*\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t} & First} Third\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} ToBeFlattened\n\t* @property {string} a\n\t*\n\t* @typedef {string} TransparentStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinner: string,\n\t*\t}} TransparentTypeInner\n\t* @property {string} inner\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*\n\t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {\"C\"} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | number} UntaggedVariantsKey\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*/\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-moduleprefixedname-raw.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\njsdoc-export-to-moduleprefixedname-raw (57567 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n/**\n\t* @typedef {{\n\t*\t\ta: test_types_B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: test_types_B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {test_types_B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {test_types_B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*\n\t* @typedef {{\n\t*\t\tfield: test_types_Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {test_types_Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_GenericType<string>,\n\t*\t}} ActualType\n\t* @property {test_types_GenericType<string>} a\n\t*\n\t* @typedef {\"A\" | { id: string; method: string } | string} AdjacentlyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} AdjacentlyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} B\n\t* @property {number} b\n\t*\n\t* @typedef {\"A\" | \"B\"} BasicEnum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{\n\t*\t\tb: test_types_BoxedInner,\n\t*\t}} BoxFlattened\n\t* @property {test_types_BoxedInner} b\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} BoxedInner\n\t* @property {number} a\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* number | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* { \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* a: number }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* number} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { \n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* a: number }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tfoo: test_types_Generic1<number>,\n\t*\t\tbar: test_types_Generic1<number>[],\n\t*\t\tbaz: { [key in string]: test_types_Generic1<string> },\n\t*\t}} Container1\n\t* @property {test_types_Generic1<number>} foo\n\t* @property {test_types_Generic1<number>[]} bar\n\t* @property {{ [key in string]: test_types_Generic1<string> }} baz\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tflattened: number,\n\t*\t}} D\n\t* @property {number} flattened\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_ToBeFlattened,\n\t*\t\tb: test_types_ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {test_types_ToBeFlattened} a\n\t* @property {test_types_ToBeFlattened} b\n\t*\n\t* @typedef {string | \"B\"} Eight\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {Record<string, never>} EmptyStructWithTag\n\t*\n\t* @typedef {\"A\" | \"B\"} Enum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {\"A\" | \"B\" | { enum_field: null }} Enum2\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {{ enum_field: null }} D\n\t*\n\t* @typedef {{ a: string }} Enum3\n\t* @property {{ a: string }} A\n\t*\n\t* @typedef {string | number | { a: string; b: number }} EnumMacroAttributes\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ a: string; b: number }} D\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in test_types_BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in test_types_BasicEnum]: number }>} a\n\t*\n\t* @typedef {\"HelloWorld\" | \"VariantB\" | \"TestingWords\"} EnumRenameAllUppercase\n\t* @property {\"HelloWorld\"} HelloWorld\n\t* @property {\"VariantB\"} VariantB\n\t* @property {\"TestingWords\"} TestingWords\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"A\" | { id: string; method: string } | string} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*\n\t* @typedef {string} ExtraBracketsInTupleVariant\n\t* @property {string} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenB\n\t* @property {test_types_FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenC\n\t* @property {test_types_FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {test_types_FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: test_types_FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {{\n\t*\t\ta: test_types_FlattenA,\n\t*\t\tc: number,\n\t*\t}} b\n\t* @property {number} d\n\t*\n\t* @typedef {\"One\" | \"Two\" | \"Three\"} FlattenEnum\n\t* @property {\"One\"} One\n\t* @property {\"Two\"} Two\n\t* @property {\"Three\"} Three\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t\tinner: test_types_FlattenEnum,\n\t*\t}} FlattenEnumStruct\n\t* @property {string} outer\n\t* @property {test_types_FlattenEnum} inner\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: test_types_FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {{\n\t*\t\ta: test_types_FlattenA,\n\t*\t\tc: number,\n\t*\t}} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: test_types_FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {test_types_FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t\tresult: test_types_NestedEnum,\n\t*\t}} FlattenOnNestedEnum\n\t* @property {string} id\n\t* @property {test_types_NestedEnum} result\n\t*\n\t* @typedef {{\n\t*\t\tc: test_types_Inner,\n\t*\t}} FlattenedInner\n\t* @property {test_types_Inner} c\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {test_types_First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][]} Generic2<A, B, C>\n\t* @property {A} A\n\t* @property {[B, B, B]} B\n\t* @property {C[]} C\n\t* @property {A[][][]} D\n\t* @property {{ a: A; b: B; c: C }} E\n\t* @property {number[]} X\n\t* @property {number} Y\n\t* @property {number[][]} Z\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tgeneric_flattened: T,\n\t*\t}} GenericFlattened<T>\n\t* @property {T} generic_flattened\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tpair: test_types_Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {test_types_Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {\"Undefined\" | T} GenericType<T>\n\t* @property {\"Undefined\"} Undefined\n\t* @property {T} Value\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t* \ta: string,\n\t* }} InlineEnumField\n\t* @property {{\n\t* \ta: string,\n\t* }} A\n\t*\n\t* @typedef {{\n\t*\t\tg: test_types_InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t\tt: test_types_InlineFlattenGenericsG<string>,\n\t*\t}} InlineFlattenGenerics\n\t* @property {test_types_InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t* @property {test_types_InlineFlattenGenericsG<string>} t\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t}} InlineRecursiveConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number, number]} d\n\t* @property {test_types_InlineRecursiveConstGeneric} e\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tref_struct: test_types_SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} InlineStruct\n\t* @property {test_types_SimpleStruct} ref_struct\n\t* @property {number} val\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: test_types_SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: test_types_RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: test_types_SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {test_types_RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: test_types_FlattenedInner,\n\t*\t}} Inner\n\t* @property {number} a\n\t* @property {test_types_FlattenedInner} b\n\t*\n\t* @typedef {{ [key in string]: string }} InternallyTaggedD\n\t* @property {{ [key in string]: string }} A\n\t*\n\t* @typedef {null} InternallyTaggedE\n\t* @property {null} A\n\t*\n\t* @typedef {test_types_InternallyTaggedFInner} InternallyTaggedF\n\t* @property {test_types_InternallyTaggedFInner} A\n\t*\n\t* @typedef {null} InternallyTaggedFInner\n\t* @property {null} A\n\t*\n\t* @typedef {test_types_InternallyTaggedHInner} InternallyTaggedH\n\t* @property {test_types_InternallyTaggedHInner} A\n\t*\n\t* @typedef {null} InternallyTaggedHInner\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedL\n\t* @property {\"A\" | \"B\"} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedLInner\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedM\n\t* @property {\"A\" | \"B\"} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} InternallyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221External\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\ttest_ing: string,\n\t*\t}} KebabCase\n\t* @property {string} test_ing\n\t*\n\t* @typedef {T} LifetimeGenericEnum<T>\n\t* @property {T} Borrowed\n\t* @property {T} Owned\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number }} LoadProjectEvent\n\t* @property {{ project_name: string }} Started\n\t* @property {{ project_name: string; status: string; progress: number }} ProgressTest\n\t* @property {{ project_name: string }} Finished\n\t*\n\t* @typedef {string | { demo2: string }} MacroEnum\n\t* @property {string} Demo\n\t* @property {{ demo2: string }} Demo2\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {T} MaybeValidKey<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {string | number} MyEnum\n\t* @property {string} A\n\t* @property {number} B\n\t*\n\t* @typedef {{ inner: test_types_First }} MyEnumAdjacent\n\t* @property {{ inner: test_types_First }} Variant\n\t*\n\t* @typedef {{ inner: test_types_First }} MyEnumExternal\n\t* @property {{ inner: test_types_First }} Variant\n\t*\n\t* @typedef {{ inner: test_types_First }} MyEnumTagged\n\t* @property {{ inner: test_types_First }} Variant\n\t*\n\t* @typedef {{ inner: test_types_First }} MyEnumUntagged\n\t* @property {{ inner: test_types_First }} Variant\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_NamedConstGeneric,\n\t*\t\tb: test_types_NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {test_types_NamedConstGeneric} a\n\t* @property {test_types_NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {string | number} NestedEnum\n\t* @property {string} A\n\t* @property {number} B\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | test_types_First} Ninth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {test_types_First} D\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {string | null | { a: string | null } | { a?: string | null }} OptionalInEnum\n\t* @property {string | null} A\n\t* @property {{ a: string | null }} B\n\t* @property {{ a?: string | null }} C\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{\n\t*\t\tfirst: Z,\n\t*\t\tsecond: A,\n\t*\t}} Pair<Z, A>\n\t* @property {Z} first\n\t* @property {A} second\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} PlaceholderInnerField\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ti8: number,\n\t*\t\ti16: number,\n\t*\t\ti32: number,\n\t*\t\tu8: number,\n\t*\t\tu16: number,\n\t*\t\tu32: number,\n\t*\t\tf32: number,\n\t*\t\tf64: number,\n\t*\t\tbool: boolean,\n\t*\t\tchar: string,\n\t*\t\t\"Range<i32>\": std_ops_Range<number>,\n\t*\t\t\"RangeInclusive<i32>\": std_ops_RangeInclusive<number>,\n\t*\t\t\"()\": null,\n\t*\t\t\"(String, i32)\": [string, number],\n\t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t*\t\tString: string,\n\t*\t\tPathBuf: string,\n\t*\t\tIpAddr: string,\n\t*\t\tIpv4Addr: string,\n\t*\t\tIpv6Addr: string,\n\t*\t\tSocketAddr: string,\n\t*\t\tSocketAddrV4: string,\n\t*\t\tSocketAddrV6: string,\n\t*\t\t\"Cow<'static, str>\": string,\n\t*\t\t\"Cow<'static, i32>\": number,\n\t*\t\t\"&'static str\": string,\n\t*\t\t\"&'static bool\": boolean,\n\t*\t\t\"&'static i32\": number,\n\t*\t\t\"Vec<i32>\": number[],\n\t*\t\t\"&'static [i32]\": number[],\n\t*\t\t\"&'static [i32; 3]\": [number, number, number],\n\t*\t\t\"[i32; 3]\": [number, number, number],\n\t*\t\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\t*\t\t\"&'static [MyEnum]\": test_types_MyEnum[],\n\t*\t\t\"&'static [MyEnum; 6]\": [test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum],\n\t*\t\t\"[MyEnum; 2]\": [test_types_MyEnum, test_types_MyEnum],\n\t*\t\t\"&'static [i32; 1]\": [number],\n\t*\t\t\"&'static [i32; 0]\": [],\n\t*\t\t\"Option<i32>\": number | null,\n\t*\t\t\"Option<()>\": null,\n\t*\t\t\"Option<Vec<i32>>\": number[] | null,\n\t*\t\t\"Result<String, i32>\": std_result_Result<string, number>,\n\t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t*\t\t\"Option<Option<String>>\": string | null,\n\t*\t\t\"Option<Option<Option<String>>>\": string | null,\n\t*\t\t\"PhantomData<()>\": null,\n\t*\t\t\"PhantomData<String>\": null,\n\t*\t\tInfallible: never,\n\t*\t\tUnit1: test_types_Unit1,\n\t*\t\tUnit2: test_types_Unit2,\n\t*\t\tUnit3: test_types_Unit3,\n\t*\t\tUnit4: test_types_Unit4,\n\t*\t\tUnit5: test_types_Unit5,\n\t*\t\tUnit6: test_types_Unit6,\n\t*\t\tUnit7: test_types_Unit7,\n\t*\t\tSimpleStruct: test_types_SimpleStruct,\n\t*\t\tTupleStruct1: test_types_TupleStruct1,\n\t*\t\tTupleStruct3: test_types_TupleStruct3,\n\t*\t\tTestEnum: test_types_TestEnum,\n\t*\t\tRefStruct: test_types_RefStruct,\n\t*\t\tInlinerStruct: test_types_InlinerStruct,\n\t*\t\t\"GenericStruct<i32>\": test_types_GenericStruct<number>,\n\t*\t\t\"GenericStruct<String>\": test_types_GenericStruct<string>,\n\t*\t\tFlattenEnumStruct: test_types_FlattenEnumStruct,\n\t*\t\tOverridenStruct: test_types_OverridenStruct,\n\t*\t\tHasGenericAlias: test_types_HasGenericAlias,\n\t*\t\tEnumMacroAttributes: test_types_EnumMacroAttributes,\n\t*\t\tInlineEnumField: test_types_InlineEnumField,\n\t*\t\tInlineOptionalType: test_types_InlineOptionalType,\n\t*\t\tRename: test_types_Rename,\n\t*\t\tTransparentType: test_types_TransparentType,\n\t*\t\tTransparentType2: test_types_TransparentType2,\n\t*\t\tTransparentTypeWithOverride: test_types_TransparentTypeWithOverride,\n\t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test_types_BasicEnum]: null }>,\n\t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test_types_BasicEnum]: number }>,\n\t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t*\t\t\"Vec<PlaceholderInnerField>\": test_types_PlaceholderInnerField[],\n\t*\t\tEnumReferenceRecordKey: test_types_EnumReferenceRecordKey,\n\t*\t\tFlattenOnNestedEnum: test_types_FlattenOnNestedEnum,\n\t*\t\tMyEmptyInput: test_types_MyEmptyInput,\n\t*\t\t\"(String)\": string,\n\t*\t\t\"(String,)\": [string],\n\t*\t\tExtraBracketsInTupleVariant: test_types_ExtraBracketsInTupleVariant,\n\t*\t\tExtraBracketsInUnnamedStruct: test_types_ExtraBracketsInUnnamedStruct,\n\t*\t\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\t*\t\tInlineTuple: test_types_InlineTuple,\n\t*\t\tInlineTuple2: test_types_InlineTuple2,\n\t*\t\t\"Box<str>\": string,\n\t*\t\t\"Box<String>\": string,\n\t*\t\tSkippedFieldWithinVariant: test_types_SkippedFieldWithinVariant,\n\t*\t\tKebabCase: test_types_KebabCase,\n\t*\t\t\"&[&str]\": string[],\n\t*\t\t\"Issue281<'_>\": test_types_Issue281,\n\t*\t\t\"LifetimeGenericStruct<'_, i32>\": test_types_LifetimeGenericStruct<number>,\n\t*\t\t\"LifetimeGenericEnum<'_, i32>\": test_types_LifetimeGenericEnum<number>,\n\t*\t\tRenameWithWeirdCharsField: test_types_RenameWithWeirdCharsField,\n\t*\t\tRenameWithWeirdCharsVariant: test_types_RenameWithWeirdCharsVariant,\n\t*\t\tRenamedFieldKeys: test_types_RenamedFieldKeys,\n\t*\t\tRenamedVariantWithSkippedPayload: test_types_RenamedVariantWithSkippedPayload,\n\t*\t\t\"type_type::Type\": test_types_type_type_Type,\n\t*\t\tActualType: test_types_ActualType,\n\t*\t\tSpectaTypeOverride: test_types_SpectaTypeOverride,\n\t*\t\tContainerTypeOverrideStruct: test_types_ContainerTypeOverrideStruct,\n\t*\t\tContainerTypeOverrideEnum: test_types_ContainerTypeOverrideEnum,\n\t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test_types_ContainerTypeOverrideGeneric,\n\t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": test_types_ContainerTypeOverrideToGeneric<number>,\n\t*\t\tContainerTypeOverrideTuple: test_types_ContainerTypeOverrideTuple,\n\t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": test_types_ContainerTypeOverrideTupleGeneric<number>,\n\t*\t\tInvalidToValidType: test_types_InvalidToValidType,\n\t*\t\tTupleStruct: test_types_TupleStruct,\n\t*\t\tTupleStructWithRep: test_types_TupleStructWithRep,\n\t*\t\t\"GenericTupleStruct<String>\": test_types_GenericTupleStruct<string>,\n\t*\t\tBracedStruct: test_types_BracedStruct,\n\t*\t\tStruct: test_types_Struct,\n\t*\t\tStruct2: test_types_Struct2,\n\t*\t\tEnum: test_types_Enum,\n\t*\t\tEnum2: test_types_Enum2,\n\t*\t\tEnum3: test_types_Enum3,\n\t*\t\tStructRenameAllUppercase: test_types_StructRenameAllUppercase,\n\t*\t\tRenameSerdeSpecialChar: test_types_RenameSerdeSpecialChar,\n\t*\t\tEnumRenameAllUppercase: test_types_EnumRenameAllUppercase,\n\t*\t\tRecursive: test_types_Recursive,\n\t*\t\tRecursiveMapValue: test_types_RecursiveMapValue,\n\t*\t\tRecursiveTransparent: test_types_RecursiveTransparent,\n\t*\t\tRecursiveInEnum: test_types_RecursiveInEnum,\n\t*\t\tNonOptional: test_types_NonOptional,\n\t*\t\tOptionalOnNamedField: test_types_OptionalOnNamedField,\n\t*\t\tOptionalOnTransparentNamedField: test_types_OptionalOnTransparentNamedField,\n\t*\t\tOptionalInEnum: test_types_OptionalInEnum,\n\t*\t\tUntaggedVariants: test_types_UntaggedVariants,\n\t*\t\tUntaggedVariantsWithoutValue: test_types_UntaggedVariantsWithoutValue,\n\t*\t\tUntaggedVariantsWithDuplicateBranches: test_types_UntaggedVariantsWithDuplicateBranches,\n\t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t*\t\tRegular: test_types_Regular,\n\t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in test_types_TransparentStruct]: null },\n\t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test_types_UnitVariants]: null }>,\n\t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test_types_UntaggedVariantsKey]: null }>,\n\t*\t\tValidMaybeValidKey: test_types_ValidMaybeValidKey,\n\t*\t\tValidMaybeValidKeyNested: test_types_ValidMaybeValidKeyNested,\n\t*\t\tMacroStruct: test_types_MacroStruct,\n\t*\t\tMacroStruct2: test_types_MacroStruct2,\n\t*\t\tMacroEnum: test_types_MacroEnum,\n\t*\t\tDeprecatedType: test_types_DeprecatedType,\n\t*\t\tDeprecatedTypeWithMsg: test_types_DeprecatedTypeWithMsg,\n\t*\t\tDeprecatedTypeWithMsg2: test_types_DeprecatedTypeWithMsg2,\n\t*\t\tDeprecatedFields: test_types_DeprecatedFields,\n\t*\t\tDeprecatedTupleVariant: test_types_DeprecatedTupleVariant,\n\t*\t\tDeprecatedEnumVariants: test_types_DeprecatedEnumVariants,\n\t*\t\tCommentedStruct: test_types_CommentedStruct,\n\t*\t\tCommentedEnum: test_types_CommentedEnum,\n\t*\t\tSingleLineComment: test_types_SingleLineComment,\n\t*\t\tNonGeneric: test_types_Demo<number, boolean>,\n\t*\t\t\"HalfGenericA<u8>\": test_types_Demo<number, boolean>,\n\t*\t\t\"HalfGenericB<bool>\": test_types_Demo<number, boolean>,\n\t*\t\t\"FullGeneric<u8, bool>\": test_types_Demo<number, boolean>,\n\t*\t\t\"Another<bool>\": test_types_Demo<number, boolean>,\n\t*\t\t\"MapA<u32>\": { [key in string]: number },\n\t*\t\t\"MapB<u32>\": { [key in number]: string },\n\t*\t\t\"MapC<u32>\": { [key in string]: test_types_AGenericStruct<number> },\n\t*\t\t\"AGenericStruct<u32>\": test_types_AGenericStruct<number>,\n\t*\t\tA: test_types_A,\n\t*\t\tDoubleFlattened: test_types_DoubleFlattened,\n\t*\t\tFlattenedInner: test_types_FlattenedInner,\n\t*\t\tBoxFlattened: test_types_BoxFlattened,\n\t*\t\tBoxInline: test_types_BoxInline,\n\t*\t\tFirst: test_types_First,\n\t*\t\tSecond: test_types_Second,\n\t*\t\tThird: test_types_Third,\n\t*\t\tFourth: test_types_Fourth,\n\t*\t\tTagOnStructWithInline: test_types_TagOnStructWithInline,\n\t*\t\tSixth: test_types_Sixth,\n\t*\t\tSeventh: test_types_Seventh,\n\t*\t\tEight: test_types_Eight,\n\t*\t\tNinth: test_types_Ninth,\n\t*\t\tTenth: test_types_Tenth,\n\t*\t\tMyEnumTagged: test_types_MyEnumTagged,\n\t*\t\tMyEnumExternal: test_types_MyEnumExternal,\n\t*\t\tMyEnumAdjacent: test_types_MyEnumAdjacent,\n\t*\t\tMyEnumUntagged: test_types_MyEnumUntagged,\n\t*\t\tEmptyStruct: test_types_EmptyStruct,\n\t*\t\tEmptyStructWithTag: test_types_EmptyStructWithTag,\n\t*\t\tAdjacentlyTagged: test_types_AdjacentlyTagged,\n\t*\t\tLoadProjectEvent: test_types_LoadProjectEvent,\n\t*\t\tExternallyTagged: test_types_ExternallyTagged,\n\t*\t\tIssue221External: test_types_Issue221External,\n\t*\t\tInternallyTaggedD: test_types_InternallyTaggedD,\n\t*\t\tInternallyTaggedE: test_types_InternallyTaggedE,\n\t*\t\tInternallyTaggedF: test_types_InternallyTaggedF,\n\t*\t\tInternallyTaggedH: test_types_InternallyTaggedH,\n\t*\t\tInternallyTaggedL: test_types_InternallyTaggedL,\n\t*\t\tInternallyTaggedM: test_types_InternallyTaggedM,\n\t*\t\tStructWithAlias: test_types_StructWithAlias,\n\t*\t\tStructWithMultipleAliases: test_types_StructWithMultipleAliases,\n\t*\t\tStructWithAliasAndRename: test_types_StructWithAliasAndRename,\n\t*\t\tEnumWithVariantAlias: test_types_EnumWithVariantAlias,\n\t*\t\tEnumWithMultipleVariantAliases: test_types_EnumWithMultipleVariantAliases,\n\t*\t\tEnumWithVariantAliasAndRename: test_types_EnumWithVariantAliasAndRename,\n\t*\t\tInternallyTaggedWithAlias: test_types_InternallyTaggedWithAlias,\n\t*\t\tAdjacentlyTaggedWithAlias: test_types_AdjacentlyTaggedWithAlias,\n\t*\t\tUntaggedWithAlias: test_types_UntaggedWithAlias,\n\t*\t\tIssue221UntaggedSafe: test_types_Issue221UntaggedSafe,\n\t*\t\tIssue221UntaggedMixed: test_types_Issue221UntaggedMixed,\n\t*\t\tEmptyEnum: test_types_EmptyEnum,\n\t*\t\tEmptyEnumTagged: test_types_EmptyEnumTagged,\n\t*\t\tEmptyEnumTaggedWContent: test_types_EmptyEnumTaggedWContent,\n\t*\t\tEmptyEnumUntagged: test_types_EmptyEnumUntagged,\n\t*\t\tSkipOnlyField: test_types_SkipOnlyField,\n\t*\t\tSkipField: test_types_SkipField,\n\t*\t\tSkipVariant: test_types_SkipVariant,\n\t*\t\tSkipUnnamedFieldInVariant: test_types_SkipUnnamedFieldInVariant,\n\t*\t\tSkipNamedFieldInVariant: test_types_SkipNamedFieldInVariant,\n\t*\t\tTransparentWithSkip: test_types_TransparentWithSkip,\n\t*\t\tTransparentWithSkip2: test_types_TransparentWithSkip2,\n\t*\t\tTransparentWithSkip3: test_types_TransparentWithSkip3,\n\t*\t\tSkipVariant2: test_types_SkipVariant2,\n\t*\t\tSkipVariant3: test_types_SkipVariant3,\n\t*\t\tSkipStructFields: test_types_SkipStructFields,\n\t*\t\tSpectaSkipNonTypeField: test_types_SpectaSkipNonTypeField,\n\t*\t\tFlattenA: test_types_FlattenA,\n\t*\t\tFlattenB: test_types_FlattenB,\n\t*\t\tFlattenC: test_types_FlattenC,\n\t*\t\tFlattenD: test_types_FlattenD,\n\t*\t\tFlattenE: test_types_FlattenE,\n\t*\t\tFlattenF: test_types_FlattenF,\n\t*\t\tFlattenG: test_types_FlattenG,\n\t*\t\tTupleNested: test_types_TupleNested,\n\t*\t\t\"Generic1<()>\": test_types_Generic1<null>,\n\t*\t\t\"GenericAutoBound<()>\": test_types_GenericAutoBound<null>,\n\t*\t\t\"GenericAutoBound2<()>\": test_types_GenericAutoBound2<null>,\n\t*\t\tContainer1: test_types_Container1,\n\t*\t\t\"Generic2<(), String, i32>\": test_types_Generic2<null, string, number>,\n\t*\t\t\"GenericNewType1<()>\": test_types_GenericNewType1<null>,\n\t*\t\t\"GenericTuple<()>\": test_types_GenericTuple<null>,\n\t*\t\t\"GenericStruct2<()>\": test_types_GenericStruct2<null>,\n\t*\t\t\"InlineGenericNewtype<String>\": string,\n\t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }],\n\t*\t\t\"InlineFlattenGenericsG<()>\": test_types_InlineFlattenGenericsG<null>,\n\t*\t\tInlineFlattenGenerics: test_types_InlineFlattenGenerics,\n\t*\t\tGenericDefault: test_types_GenericDefault,\n\t*\t\tChainedGenericDefault: test_types_ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<String, String>\": test_types_ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<i32>\": test_types_ChainedGenericDefault<number, number>,\n\t*\t\t\"ChainedGenericDefault<String, i32>\": test_types_ChainedGenericDefault<string, number>,\n\t*\t\tGenericDefaultSkipped: test_types_GenericDefaultSkipped<string>,\n\t*\t\tGenericDefaultSkippedNonType: test_types_GenericDefaultSkippedNonType<unknown>,\n\t*\t\tGenericParameterOrderPreserved: test_types_GenericParameterOrderPreserved,\n\t*\t\tConstGenericInNonConstContainer: test_types_ConstGenericInNonConstContainer,\n\t*\t\tConstGenericInConstContainer: test_types_ConstGenericInConstContainer,\n\t*\t\tNamedConstGenericContainer: test_types_NamedConstGenericContainer,\n\t*\t\tInlineConstGenericContainer: test_types_InlineConstGenericContainer,\n\t*\t\tInlineRecursiveConstGenericContainer: test_types_InlineRecursiveConstGenericContainer,\n\t*\t\tTestCollectionRegister: test_types_TestCollectionRegister,\n\t*\t\tTestCollectionRegister: test_types_TestCollectionRegister,\n\t*\t}} Primitives\n\t* @property {number} i8\n\t* @property {number} i16\n\t* @property {number} i32\n\t* @property {number} u8\n\t* @property {number} u16\n\t* @property {number} u32\n\t* @property {number} f32\n\t* @property {number} f64\n\t* @property {boolean} bool\n\t* @property {string} char\n\t* @property {std_ops_Range<number>} \"Range<i32>\"\n\t* @property {std_ops_RangeInclusive<number>} \"RangeInclusive<i32>\"\n\t* @property {null} \"()\"\n\t* @property {[string, number]} \"(String, i32)\"\n\t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n\t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n\t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n\t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n\t* @property {string} String\n\t* @property {string} PathBuf\n\t* @property {string} IpAddr\n\t* @property {string} Ipv4Addr\n\t* @property {string} Ipv6Addr\n\t* @property {string} SocketAddr\n\t* @property {string} SocketAddrV4\n\t* @property {string} SocketAddrV6\n\t* @property {string} \"Cow<'static, str>\"\n\t* @property {number} \"Cow<'static, i32>\"\n\t* @property {string} \"&'static str\"\n\t* @property {boolean} \"&'static bool\"\n\t* @property {number} \"&'static i32\"\n\t* @property {number[]} \"Vec<i32>\"\n\t* @property {number[]} \"&'static [i32]\"\n\t* @property {[number, number, number]} \"&'static [i32; 3]\"\n\t* @property {[number, number, number]} \"[i32; 3]\"\n\t* @property {test_types_MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {test_types_MyEnum[]} \"&'static [MyEnum]\"\n\t* @property {[test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum]} \"&'static [MyEnum; 6]\"\n\t* @property {[test_types_MyEnum, test_types_MyEnum]} \"[MyEnum; 2]\"\n\t* @property {[number]} \"&'static [i32; 1]\"\n\t* @property {[]} \"&'static [i32; 0]\"\n\t* @property {number | null} \"Option<i32>\"\n\t* @property {null} \"Option<()>\"\n\t* @property {number[] | null} \"Option<Vec<i32>>\"\n\t* @property {std_result_Result<string, number>} \"Result<String, i32>\"\n\t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n\t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n\t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n\t* @property {string | null} \"Option<Option<String>>\"\n\t* @property {string | null} \"Option<Option<Option<String>>>\"\n\t* @property {null} \"PhantomData<()>\"\n\t* @property {null} \"PhantomData<String>\"\n\t* @property {never} Infallible\n\t* @property {test_types_Unit1} Unit1\n\t* @property {test_types_Unit2} Unit2\n\t* @property {test_types_Unit3} Unit3\n\t* @property {test_types_Unit4} Unit4\n\t* @property {test_types_Unit5} Unit5\n\t* @property {test_types_Unit6} Unit6\n\t* @property {test_types_Unit7} Unit7\n\t* @property {test_types_SimpleStruct} SimpleStruct\n\t* @property {test_types_TupleStruct1} TupleStruct1\n\t* @property {test_types_TupleStruct3} TupleStruct3\n\t* @property {test_types_TestEnum} TestEnum\n\t* @property {test_types_RefStruct} RefStruct\n\t* @property {test_types_InlinerStruct} InlinerStruct\n\t* @property {test_types_GenericStruct<number>} \"GenericStruct<i32>\"\n\t* @property {test_types_GenericStruct<string>} \"GenericStruct<String>\"\n\t* @property {test_types_FlattenEnumStruct} FlattenEnumStruct\n\t* @property {test_types_OverridenStruct} OverridenStruct\n\t* @property {test_types_HasGenericAlias} HasGenericAlias\n\t* @property {test_types_EnumMacroAttributes} EnumMacroAttributes\n\t* @property {test_types_InlineEnumField} InlineEnumField\n\t* @property {test_types_InlineOptionalType} InlineOptionalType\n\t* @property {test_types_Rename} Rename\n\t* @property {test_types_TransparentType} TransparentType\n\t* @property {test_types_TransparentType2} TransparentType2\n\t* @property {test_types_TransparentTypeWithOverride} TransparentTypeWithOverride\n\t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n\t* @property {Partial<{ [key in test_types_BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n\t* @property {Partial<{ [key in test_types_BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n\t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n\t* @property {test_types_PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n\t* @property {test_types_EnumReferenceRecordKey} EnumReferenceRecordKey\n\t* @property {test_types_FlattenOnNestedEnum} FlattenOnNestedEnum\n\t* @property {test_types_MyEmptyInput} MyEmptyInput\n\t* @property {string} \"(String)\"\n\t* @property {[string]} \"(String,)\"\n\t* @property {test_types_ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n\t* @property {test_types_ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n\t* @property {test_types_MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {test_types_InlineTuple} InlineTuple\n\t* @property {test_types_InlineTuple2} InlineTuple2\n\t* @property {string} \"Box<str>\"\n\t* @property {string} \"Box<String>\"\n\t* @property {test_types_SkippedFieldWithinVariant} SkippedFieldWithinVariant\n\t* @property {test_types_KebabCase} KebabCase\n\t* @property {string[]} \"&[&str]\"\n\t* @property {test_types_Issue281} \"Issue281<'_>\"\n\t* @property {test_types_LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n\t* @property {test_types_LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n\t* @property {test_types_RenameWithWeirdCharsField} RenameWithWeirdCharsField\n\t* @property {test_types_RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n\t* @property {test_types_RenamedFieldKeys} RenamedFieldKeys\n\t* @property {test_types_RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n\t* @property {test_types_type_type_Type} \"type_type::Type\"\n\t* @property {test_types_ActualType} ActualType\n\t* @property {test_types_SpectaTypeOverride} SpectaTypeOverride\n\t* @property {test_types_ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n\t* @property {test_types_ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n\t* @property {test_types_ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n\t* @property {test_types_ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n\t* @property {test_types_ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n\t* @property {test_types_ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n\t* @property {test_types_InvalidToValidType} InvalidToValidType\n\t* @property {test_types_TupleStruct} TupleStruct\n\t* @property {test_types_TupleStructWithRep} TupleStructWithRep\n\t* @property {test_types_GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n\t* @property {test_types_BracedStruct} BracedStruct\n\t* @property {test_types_Struct} Struct\n\t* @property {test_types_Struct2} Struct2\n\t* @property {test_types_Enum} Enum\n\t* @property {test_types_Enum2} Enum2\n\t* @property {test_types_Enum3} Enum3\n\t* @property {test_types_StructRenameAllUppercase} StructRenameAllUppercase\n\t* @property {test_types_RenameSerdeSpecialChar} RenameSerdeSpecialChar\n\t* @property {test_types_EnumRenameAllUppercase} EnumRenameAllUppercase\n\t* @property {test_types_Recursive} Recursive\n\t* @property {test_types_RecursiveMapValue} RecursiveMapValue\n\t* @property {test_types_RecursiveTransparent} RecursiveTransparent\n\t* @property {test_types_RecursiveInEnum} RecursiveInEnum\n\t* @property {test_types_NonOptional} NonOptional\n\t* @property {test_types_OptionalOnNamedField} OptionalOnNamedField\n\t* @property {test_types_OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n\t* @property {test_types_OptionalInEnum} OptionalInEnum\n\t* @property {test_types_UntaggedVariants} UntaggedVariants\n\t* @property {test_types_UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n\t* @property {test_types_UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n\t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n\t* @property {test_types_Regular} Regular\n\t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n\t* @property {{ [key in test_types_TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n\t* @property {Partial<{ [key in test_types_UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n\t* @property {Partial<{ [key in test_types_UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n\t* @property {test_types_ValidMaybeValidKey} ValidMaybeValidKey\n\t* @property {test_types_ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n\t* @property {test_types_MacroStruct} MacroStruct\n\t* @property {test_types_MacroStruct2} MacroStruct2\n\t* @property {test_types_MacroEnum} MacroEnum\n\t* @property {test_types_DeprecatedType} DeprecatedType\n\t* @property {test_types_DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n\t* @property {test_types_DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n\t* @property {test_types_DeprecatedFields} DeprecatedFields\n\t* @property {test_types_DeprecatedTupleVariant} DeprecatedTupleVariant\n\t* @property {test_types_DeprecatedEnumVariants} DeprecatedEnumVariants\n\t* @property {test_types_CommentedStruct} CommentedStruct\n\t* @property {test_types_CommentedEnum} CommentedEnum\n\t* @property {test_types_SingleLineComment} SingleLineComment\n\t* @property {test_types_Demo<number, boolean>} NonGeneric\n\t* @property {test_types_Demo<number, boolean>} \"HalfGenericA<u8>\"\n\t* @property {test_types_Demo<number, boolean>} \"HalfGenericB<bool>\"\n\t* @property {test_types_Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n\t* @property {test_types_Demo<number, boolean>} \"Another<bool>\"\n\t* @property {{ [key in string]: number }} \"MapA<u32>\"\n\t* @property {{ [key in number]: string }} \"MapB<u32>\"\n\t* @property {{ [key in string]: test_types_AGenericStruct<number> }} \"MapC<u32>\"\n\t* @property {test_types_AGenericStruct<number>} \"AGenericStruct<u32>\"\n\t* @property {test_types_A} A\n\t* @property {test_types_DoubleFlattened} DoubleFlattened\n\t* @property {test_types_FlattenedInner} FlattenedInner\n\t* @property {test_types_BoxFlattened} BoxFlattened\n\t* @property {test_types_BoxInline} BoxInline\n\t* @property {test_types_First} First\n\t* @property {test_types_Second} Second\n\t* @property {test_types_Third} Third\n\t* @property {test_types_Fourth} Fourth\n\t* @property {test_types_TagOnStructWithInline} TagOnStructWithInline\n\t* @property {test_types_Sixth} Sixth\n\t* @property {test_types_Seventh} Seventh\n\t* @property {test_types_Eight} Eight\n\t* @property {test_types_Ninth} Ninth\n\t* @property {test_types_Tenth} Tenth\n\t* @property {test_types_MyEnumTagged} MyEnumTagged\n\t* @property {test_types_MyEnumExternal} MyEnumExternal\n\t* @property {test_types_MyEnumAdjacent} MyEnumAdjacent\n\t* @property {test_types_MyEnumUntagged} MyEnumUntagged\n\t* @property {test_types_EmptyStruct} EmptyStruct\n\t* @property {test_types_EmptyStructWithTag} EmptyStructWithTag\n\t* @property {test_types_AdjacentlyTagged} AdjacentlyTagged\n\t* @property {test_types_LoadProjectEvent} LoadProjectEvent\n\t* @property {test_types_ExternallyTagged} ExternallyTagged\n\t* @property {test_types_Issue221External} Issue221External\n\t* @property {test_types_InternallyTaggedD} InternallyTaggedD\n\t* @property {test_types_InternallyTaggedE} InternallyTaggedE\n\t* @property {test_types_InternallyTaggedF} InternallyTaggedF\n\t* @property {test_types_InternallyTaggedH} InternallyTaggedH\n\t* @property {test_types_InternallyTaggedL} InternallyTaggedL\n\t* @property {test_types_InternallyTaggedM} InternallyTaggedM\n\t* @property {test_types_StructWithAlias} StructWithAlias\n\t* @property {test_types_StructWithMultipleAliases} StructWithMultipleAliases\n\t* @property {test_types_StructWithAliasAndRename} StructWithAliasAndRename\n\t* @property {test_types_EnumWithVariantAlias} EnumWithVariantAlias\n\t* @property {test_types_EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n\t* @property {test_types_EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n\t* @property {test_types_InternallyTaggedWithAlias} InternallyTaggedWithAlias\n\t* @property {test_types_AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n\t* @property {test_types_UntaggedWithAlias} UntaggedWithAlias\n\t* @property {test_types_Issue221UntaggedSafe} Issue221UntaggedSafe\n\t* @property {test_types_Issue221UntaggedMixed} Issue221UntaggedMixed\n\t* @property {test_types_EmptyEnum} EmptyEnum\n\t* @property {test_types_EmptyEnumTagged} EmptyEnumTagged\n\t* @property {test_types_EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n\t* @property {test_types_EmptyEnumUntagged} EmptyEnumUntagged\n\t* @property {test_types_SkipOnlyField} SkipOnlyField\n\t* @property {test_types_SkipField} SkipField\n\t* @property {test_types_SkipVariant} SkipVariant\n\t* @property {test_types_SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n\t* @property {test_types_SkipNamedFieldInVariant} SkipNamedFieldInVariant\n\t* @property {test_types_TransparentWithSkip} TransparentWithSkip\n\t* @property {test_types_TransparentWithSkip2} TransparentWithSkip2\n\t* @property {test_types_TransparentWithSkip3} TransparentWithSkip3\n\t* @property {test_types_SkipVariant2} SkipVariant2\n\t* @property {test_types_SkipVariant3} SkipVariant3\n\t* @property {test_types_SkipStructFields} SkipStructFields\n\t* @property {test_types_SpectaSkipNonTypeField} SpectaSkipNonTypeField\n\t* @property {test_types_FlattenA} FlattenA\n\t* @property {test_types_FlattenB} FlattenB\n\t* @property {test_types_FlattenC} FlattenC\n\t* @property {test_types_FlattenD} FlattenD\n\t* @property {test_types_FlattenE} FlattenE\n\t* @property {test_types_FlattenF} FlattenF\n\t* @property {test_types_FlattenG} FlattenG\n\t* @property {test_types_TupleNested} TupleNested\n\t* @property {test_types_Generic1<null>} \"Generic1<()>\"\n\t* @property {test_types_GenericAutoBound<null>} \"GenericAutoBound<()>\"\n\t* @property {test_types_GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n\t* @property {test_types_Container1} Container1\n\t* @property {test_types_Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n\t* @property {test_types_GenericNewType1<null>} \"GenericNewType1<()>\"\n\t* @property {test_types_GenericTuple<null>} \"GenericTuple<()>\"\n\t* @property {test_types_GenericStruct2<null>} \"GenericStruct2<()>\"\n\t* @property {string} \"InlineGenericNewtype<String>\"\n\t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }]} \"InlineGenericNested<String>\"\n\t* @property {test_types_InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n\t* @property {test_types_InlineFlattenGenerics} InlineFlattenGenerics\n\t* @property {test_types_GenericDefault} GenericDefault\n\t* @property {test_types_ChainedGenericDefault} ChainedGenericDefault\n\t* @property {test_types_ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n\t* @property {test_types_ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n\t* @property {test_types_ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n\t* @property {test_types_GenericDefaultSkipped<string>} GenericDefaultSkipped\n\t* @property {test_types_GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n\t* @property {test_types_GenericParameterOrderPreserved} GenericParameterOrderPreserved\n\t* @property {test_types_ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n\t* @property {test_types_ConstGenericInConstContainer} ConstGenericInConstContainer\n\t* @property {test_types_NamedConstGenericContainer} NamedConstGenericContainer\n\t* @property {test_types_InlineConstGenericContainer} InlineConstGenericContainer\n\t* @property {test_types_InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n\t* @property {test_types_TestCollectionRegister} TestCollectionRegister\n\t* @property {test_types_TestCollectionRegister} TestCollectionRegister\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tdemo: test_types_Recursive,\n\t*\t}} Recursive\n\t* @property {test_types_Recursive} demo\n\t*\n\t* @typedef {{ demo: test_types_RecursiveInEnum }} RecursiveInEnum\n\t* @property {{ demo: test_types_RecursiveInEnum }} A\n\t*\n\t* @typedef {{\n\t*\t\tdemo: test_types_RecursiveInline,\n\t*\t}} RecursiveInline\n\t* @property {test_types_RecursiveInline} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: test_types_RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: test_types_RecursiveMapValue }} demo\n\t*\n\t* @typedef {test_types_RecursiveInline} RecursiveTransparent\n\t* @property {test_types_RecursiveInline} \"0\"\n\t*\n\t* @typedef {test_types_TestEnum} RefStruct\n\t* @property {test_types_TestEnum} \"0\"\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {\"OneWord\" | \"TwoWords\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"TwoWords\"} TwoWords\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\todata_context: string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} odata_context\n\t*\n\t* @typedef {string} RenameWithWeirdCharsVariant\n\t* @property {string} A\n\t*\n\t* @typedef {{\n\t*\t\tempty: string,\n\t*\t\tquote: string,\n\t*\t\tbackslash: string,\n\t*\t\tnewline: string,\n\t*\t\tline_separator: string,\n\t*\t\tparagraph_separator: string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} empty\n\t* @property {string} quote\n\t* @property {string} backslash\n\t* @property {string} newline\n\t* @property {string} line_separator\n\t* @property {string} paragraph_separator\n\t*\n\t* @typedef {never} RenamedVariantWithSkippedPayload\n\t* @property {never} A\n\t*\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: test_types_Second,\n\t*\t}} Seventh\n\t* @property {test_types_First} a\n\t* @property {test_types_Second} b\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* number | \n\t*\t/**  Some single-line comment */\n\t* { \n\t*\t/**  Some single-line comment */\n\t* a: number }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* number} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { \n\t* /**  Some single-line comment */\n\t* a: number }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: test_types_First,\n\t*\t}} Sixth\n\t* @property {test_types_First} a\n\t* @property {test_types_First} b\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {Record<string, never> | { b: number }} SkipNamedFieldInVariant\n\t* @property {Record<string, never>} A\n\t* @property {{ b: number }} B\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {never | [number]} SkipUnnamedFieldInVariant\n\t* @property {never} A\n\t* @property {[number]} B\n\t*\n\t* @typedef {string} SkipVariant\n\t* @property {string} A\n\t*\n\t* @typedef {string} SkipVariant2\n\t* @property {string} A\n\t*\n\t* @typedef {{ a: string }} SkipVariant3\n\t* @property {{ a: string }} A\n\t*\n\t* @typedef {never | string} SkippedFieldWithinVariant\n\t* @property {never} A\n\t* @property {string} B\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct2\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {test_types_First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | test_types_First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {test_types_First} D\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {\"Unit\" | number | [number, number] | { a: number }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {number} Single\n\t* @property {[number, number]} Multiple\n\t* @property {{ a: number }} Struct\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: test_types_First,\n\t*\t}} Third\n\t* @property {test_types_First} a\n\t* @property {{ [key in string]: string }} b\n\t* @property {test_types_First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} ToBeFlattened\n\t* @property {string} a\n\t*\n\t* @typedef {string} TransparentStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {test_types_TransparentTypeInner} TransparentType\n\t* @property {test_types_TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinner: string,\n\t*\t}} TransparentTypeInner\n\t* @property {string} inner\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {[]} Unit6\n\t* @property {[]} A\n\t*\n\t* @typedef {Record<string, never>} Unit7\n\t* @property {Record<string, never>} A\n\t*\n\t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {\"C\"} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | number} UntaggedVariantsKey\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{ [key in test_types_MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in test_types_MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in test_types_MaybeValidKey<test_types_MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in test_types_MaybeValidKey<test_types_MaybeValidKey<string>>]: null }} \"0\"\n\t*/\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-moduleprefixedname-serde.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\njsdoc-export-to-moduleprefixedname-serde (60882 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n/**\n\t* @typedef {{\n\t*\t\ta: test_types_B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: test_types_B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {test_types_B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {test_types_B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*\n\t* @typedef {{\n\t*\t\tfield: test_types_Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {test_types_Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_GenericType<string>,\n\t*\t}} ActualType\n\t* @property {test_types_GenericType<string>} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} B\n\t* @property {number} b\n\t*\n\t* @typedef {\"A\" | \"B\"} BasicEnum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {test_types_BoxedInner} BoxFlattened\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} BoxedInner\n\t* @property {number} a\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tfoo: test_types_Generic1<number>,\n\t*\t\tbar: test_types_Generic1<number>[],\n\t*\t\tbaz: { [key in string]: test_types_Generic1<string> },\n\t*\t}} Container1\n\t* @property {test_types_Generic1<number>} foo\n\t* @property {test_types_Generic1<number>[]} bar\n\t* @property {{ [key in string]: test_types_Generic1<string> }} baz\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tflattened: number,\n\t*\t}} D\n\t* @property {number} flattened\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_ToBeFlattened,\n\t*\t\tb: test_types_ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {test_types_ToBeFlattened} a\n\t* @property {test_types_ToBeFlattened} b\n\t*\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in test_types_BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in test_types_BasicEnum]: number }>} a\n\t*\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & test_types_FlattenA} FlattenB\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & test_types_FlattenA} FlattenC\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {test_types_FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (test_types_FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (test_types_FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{ tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" }} FlattenEnum\n\t* @property {{ tag: \"One\" }} One\n\t* @property {{ tag: \"Two\" }} Two\n\t* @property {{ tag: \"Three\" }} Three\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & test_types_FlattenEnum} FlattenEnumStruct\n\t* @property {string} outer\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (test_types_FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (test_types_FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: test_types_FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {test_types_FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & test_types_NestedEnum} FlattenOnNestedEnum\n\t* @property {string} id\n\t*\n\t* @typedef {test_types_Inner} FlattenedInner\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {test_types_First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tgeneric_flattened: T,\n\t*\t}} GenericFlattened<T>\n\t* @property {T} generic_flattened\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tpair: test_types_Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {test_types_Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {\"Undefined\" | T} GenericType<T>\n\t* @property {\"Undefined\"} Undefined\n\t* @property {T} Value\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\tg: test_types_InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & test_types_InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t* @property {test_types_InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t}} InlineRecursiveConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number, number]} d\n\t* @property {test_types_InlineRecursiveConstGeneric} e\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tref_struct: test_types_SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} InlineStruct\n\t* @property {test_types_SimpleStruct} ref_struct\n\t* @property {number} val\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: test_types_SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: test_types_RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: test_types_SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {test_types_RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t} & test_types_FlattenedInner} Inner\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} InternallyTaggedD\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {null} InternallyTaggedFInner\n\t* @property {null} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {null} InternallyTaggedHInner\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\" }} InternallyTaggedLInner\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\" }} B\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {T} MaybeValidKey<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {({ A: string }) & { B?: never } | ({ B: number }) & { A?: never }} MyEnum\n\t* @property {{ A: string }} A\n\t* @property {{ B: number }} B\n\t*\n\t* @typedef {{ t: \"Variant\"; c: {\n\t* \tinner: test_types_First,\n\t* } }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: {\n\t* \tinner: test_types_First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ Variant: {\n\t* \tinner: test_types_First,\n\t* } }} MyEnumExternal\n\t* @property {{ Variant: {\n\t* \tinner: test_types_First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ type: \"Variant\"; inner: test_types_First }} MyEnumTagged\n\t* @property {{ type: \"Variant\"; inner: test_types_First }} Variant\n\t*\n\t* @typedef {{ inner: test_types_First }} MyEnumUntagged\n\t* @property {{ inner: test_types_First }} Variant\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_NamedConstGeneric,\n\t*\t\tb: test_types_NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {test_types_NamedConstGeneric} a\n\t* @property {test_types_NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{ type: \"a\"; value: string } | { type: \"b\"; value: number }} NestedEnum\n\t* @property {{ type: \"a\"; value: string }} a\n\t* @property {{ type: \"b\"; value: number }} b\n\t*\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: test_types_First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: test_types_First }} D\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{\n\t*\t\tfirst: Z,\n\t*\t\tsecond: A,\n\t*\t}} Pair<Z, A>\n\t* @property {Z} first\n\t* @property {A} second\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} PlaceholderInnerField\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ti8: number,\n\t*\t\ti16: number,\n\t*\t\ti32: number,\n\t*\t\tu8: number,\n\t*\t\tu16: number,\n\t*\t\tu32: number,\n\t*\t\tf32: number,\n\t*\t\tf64: number,\n\t*\t\tbool: boolean,\n\t*\t\tchar: string,\n\t*\t\t\"Range<i32>\": std_ops_Range<number>,\n\t*\t\t\"RangeInclusive<i32>\": std_ops_RangeInclusive<number>,\n\t*\t\t\"()\": null,\n\t*\t\t\"(String, i32)\": [string, number],\n\t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t*\t\tString: string,\n\t*\t\tPathBuf: string,\n\t*\t\tIpAddr: string,\n\t*\t\tIpv4Addr: string,\n\t*\t\tIpv6Addr: string,\n\t*\t\tSocketAddr: string,\n\t*\t\tSocketAddrV4: string,\n\t*\t\tSocketAddrV6: string,\n\t*\t\t\"Cow<'static, str>\": string,\n\t*\t\t\"Cow<'static, i32>\": number,\n\t*\t\t\"&'static str\": string,\n\t*\t\t\"&'static bool\": boolean,\n\t*\t\t\"&'static i32\": number,\n\t*\t\t\"Vec<i32>\": number[],\n\t*\t\t\"&'static [i32]\": number[],\n\t*\t\t\"&'static [i32; 3]\": [number, number, number],\n\t*\t\t\"[i32; 3]\": [number, number, number],\n\t*\t\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\t*\t\t\"&'static [MyEnum]\": test_types_MyEnum[],\n\t*\t\t\"&'static [MyEnum; 6]\": [test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum],\n\t*\t\t\"[MyEnum; 2]\": [test_types_MyEnum, test_types_MyEnum],\n\t*\t\t\"&'static [i32; 1]\": [number],\n\t*\t\t\"&'static [i32; 0]\": [],\n\t*\t\t\"Option<i32>\": number | null,\n\t*\t\t\"Option<()>\": null,\n\t*\t\t\"Option<Vec<i32>>\": number[] | null,\n\t*\t\t\"Result<String, i32>\": std_result_Result<string, number>,\n\t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t*\t\t\"Option<Option<String>>\": string | null,\n\t*\t\t\"Option<Option<Option<String>>>\": string | null,\n\t*\t\t\"PhantomData<()>\": null,\n\t*\t\t\"PhantomData<String>\": null,\n\t*\t\tInfallible: never,\n\t*\t\tUnit1: test_types_Unit1,\n\t*\t\tUnit2: test_types_Unit2,\n\t*\t\tUnit3: test_types_Unit3,\n\t*\t\tUnit4: test_types_Unit4,\n\t*\t\tUnit5: test_types_Unit5,\n\t*\t\tUnit6: test_types_Unit6,\n\t*\t\tUnit7: test_types_Unit7,\n\t*\t\tSimpleStruct: test_types_SimpleStruct,\n\t*\t\tTupleStruct1: test_types_TupleStruct1,\n\t*\t\tTupleStruct3: test_types_TupleStruct3,\n\t*\t\tTestEnum: test_types_TestEnum,\n\t*\t\tRefStruct: test_types_RefStruct,\n\t*\t\tInlinerStruct: test_types_InlinerStruct,\n\t*\t\t\"GenericStruct<i32>\": test_types_GenericStruct<number>,\n\t*\t\t\"GenericStruct<String>\": test_types_GenericStruct<string>,\n\t*\t\tFlattenEnumStruct: test_types_FlattenEnumStruct,\n\t*\t\tOverridenStruct: test_types_OverridenStruct,\n\t*\t\tHasGenericAlias: test_types_HasGenericAlias,\n\t*\t\tEnumMacroAttributes: test_types_EnumMacroAttributes,\n\t*\t\tInlineEnumField: test_types_InlineEnumField,\n\t*\t\tInlineOptionalType: test_types_InlineOptionalType,\n\t*\t\tRename: test_types_Rename,\n\t*\t\tTransparentType: test_types_TransparentType,\n\t*\t\tTransparentType2: test_types_TransparentType2,\n\t*\t\tTransparentTypeWithOverride: test_types_TransparentTypeWithOverride,\n\t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test_types_BasicEnum]: null }>,\n\t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test_types_BasicEnum]: number }>,\n\t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t*\t\t\"Vec<PlaceholderInnerField>\": test_types_PlaceholderInnerField[],\n\t*\t\tEnumReferenceRecordKey: test_types_EnumReferenceRecordKey,\n\t*\t\tFlattenOnNestedEnum: test_types_FlattenOnNestedEnum,\n\t*\t\tMyEmptyInput: test_types_MyEmptyInput,\n\t*\t\t\"(String)\": string,\n\t*\t\t\"(String,)\": [string],\n\t*\t\tExtraBracketsInTupleVariant: test_types_ExtraBracketsInTupleVariant,\n\t*\t\tExtraBracketsInUnnamedStruct: test_types_ExtraBracketsInUnnamedStruct,\n\t*\t\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\t*\t\tInlineTuple: test_types_InlineTuple,\n\t*\t\tInlineTuple2: test_types_InlineTuple2,\n\t*\t\t\"Box<str>\": string,\n\t*\t\t\"Box<String>\": string,\n\t*\t\tSkippedFieldWithinVariant: test_types_SkippedFieldWithinVariant,\n\t*\t\tKebabCase: test_types_KebabCase,\n\t*\t\t\"&[&str]\": string[],\n\t*\t\t\"Issue281<'_>\": test_types_Issue281,\n\t*\t\t\"LifetimeGenericStruct<'_, i32>\": test_types_LifetimeGenericStruct<number>,\n\t*\t\t\"LifetimeGenericEnum<'_, i32>\": test_types_LifetimeGenericEnum<number>,\n\t*\t\tRenameWithWeirdCharsField: test_types_RenameWithWeirdCharsField,\n\t*\t\tRenameWithWeirdCharsVariant: test_types_RenameWithWeirdCharsVariant,\n\t*\t\tRenamedFieldKeys: test_types_RenamedFieldKeys,\n\t*\t\tRenamedVariantWithSkippedPayload: test_types_RenamedVariantWithSkippedPayload,\n\t*\t\t\"type_type::Type\": test_types_type_type_Type,\n\t*\t\tActualType: test_types_ActualType,\n\t*\t\tSpectaTypeOverride: test_types_SpectaTypeOverride,\n\t*\t\tContainerTypeOverrideStruct: test_types_ContainerTypeOverrideStruct,\n\t*\t\tContainerTypeOverrideEnum: test_types_ContainerTypeOverrideEnum,\n\t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test_types_ContainerTypeOverrideGeneric,\n\t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": test_types_ContainerTypeOverrideToGeneric<number>,\n\t*\t\tContainerTypeOverrideTuple: test_types_ContainerTypeOverrideTuple,\n\t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": test_types_ContainerTypeOverrideTupleGeneric<number>,\n\t*\t\tInvalidToValidType: test_types_InvalidToValidType,\n\t*\t\tTupleStruct: test_types_TupleStruct,\n\t*\t\tTupleStructWithRep: test_types_TupleStructWithRep,\n\t*\t\t\"GenericTupleStruct<String>\": test_types_GenericTupleStruct<string>,\n\t*\t\tBracedStruct: test_types_BracedStruct,\n\t*\t\tStruct: test_types_StructNew,\n\t*\t\tStruct2: test_types_Struct2,\n\t*\t\tEnum: test_types_Enum,\n\t*\t\tEnum2: test_types_Enum2,\n\t*\t\tEnum3: test_types_Enum3,\n\t*\t\tStructRenameAllUppercase: test_types_StructRenameAllUppercase,\n\t*\t\tRenameSerdeSpecialChar: test_types_RenameSerdeSpecialChar,\n\t*\t\tEnumRenameAllUppercase: test_types_EnumRenameAllUppercase,\n\t*\t\tRecursive: test_types_Recursive,\n\t*\t\tRecursiveMapValue: test_types_RecursiveMapValue,\n\t*\t\tRecursiveTransparent: test_types_RecursiveTransparent,\n\t*\t\tRecursiveInEnum: test_types_RecursiveInEnum,\n\t*\t\tNonOptional: test_types_NonOptional,\n\t*\t\tOptionalOnNamedField: test_types_OptionalOnNamedField,\n\t*\t\tOptionalOnTransparentNamedField: test_types_OptionalOnTransparentNamedField,\n\t*\t\tOptionalInEnum: test_types_OptionalInEnum,\n\t*\t\tUntaggedVariants: test_types_UntaggedVariants,\n\t*\t\tUntaggedVariantsWithoutValue: test_types_UntaggedVariantsWithoutValue,\n\t*\t\tUntaggedVariantsWithDuplicateBranches: test_types_UntaggedVariantsWithDuplicateBranches,\n\t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t*\t\tRegular: test_types_Regular,\n\t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in test_types_TransparentStruct]: null },\n\t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test_types_UnitVariants]: null }>,\n\t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test_types_UntaggedVariantsKey]: null }>,\n\t*\t\tValidMaybeValidKey: test_types_ValidMaybeValidKey,\n\t*\t\tValidMaybeValidKeyNested: test_types_ValidMaybeValidKeyNested,\n\t*\t\tMacroStruct: test_types_MacroStruct,\n\t*\t\tMacroStruct2: test_types_MacroStruct2,\n\t*\t\tMacroEnum: test_types_MacroEnum,\n\t*\t\tDeprecatedType: test_types_DeprecatedType,\n\t*\t\tDeprecatedTypeWithMsg: test_types_DeprecatedTypeWithMsg,\n\t*\t\tDeprecatedTypeWithMsg2: test_types_DeprecatedTypeWithMsg2,\n\t*\t\tDeprecatedFields: test_types_DeprecatedFields,\n\t*\t\tDeprecatedTupleVariant: test_types_DeprecatedTupleVariant,\n\t*\t\tDeprecatedEnumVariants: test_types_DeprecatedEnumVariants,\n\t*\t\tCommentedStruct: test_types_CommentedStruct,\n\t*\t\tCommentedEnum: test_types_CommentedEnum,\n\t*\t\tSingleLineComment: test_types_SingleLineComment,\n\t*\t\tNonGeneric: test_types_Demo<number, boolean>,\n\t*\t\t\"HalfGenericA<u8>\": test_types_Demo<number, boolean>,\n\t*\t\t\"HalfGenericB<bool>\": test_types_Demo<number, boolean>,\n\t*\t\t\"FullGeneric<u8, bool>\": test_types_Demo<number, boolean>,\n\t*\t\t\"Another<bool>\": test_types_Demo<number, boolean>,\n\t*\t\t\"MapA<u32>\": { [key in string]: number },\n\t*\t\t\"MapB<u32>\": { [key in number]: string },\n\t*\t\t\"MapC<u32>\": { [key in string]: test_types_AGenericStruct<number> },\n\t*\t\t\"AGenericStruct<u32>\": test_types_AGenericStruct<number>,\n\t*\t\tA: test_types_A,\n\t*\t\tDoubleFlattened: test_types_DoubleFlattened,\n\t*\t\tFlattenedInner: test_types_FlattenedInner,\n\t*\t\tBoxFlattened: test_types_BoxFlattened,\n\t*\t\tBoxInline: test_types_BoxInline,\n\t*\t\tFirst: test_types_First,\n\t*\t\tSecond: test_types_Second,\n\t*\t\tThird: test_types_Third,\n\t*\t\tFourth: test_types_Fourth,\n\t*\t\tTagOnStructWithInline: test_types_TagOnStructWithInline,\n\t*\t\tSixth: test_types_Sixth,\n\t*\t\tSeventh: test_types_Seventh,\n\t*\t\tEight: test_types_Eight,\n\t*\t\tNinth: test_types_Ninth,\n\t*\t\tTenth: test_types_Tenth,\n\t*\t\tMyEnumTagged: test_types_MyEnumTagged,\n\t*\t\tMyEnumExternal: test_types_MyEnumExternal,\n\t*\t\tMyEnumAdjacent: test_types_MyEnumAdjacent,\n\t*\t\tMyEnumUntagged: test_types_MyEnumUntagged,\n\t*\t\tEmptyStruct: test_types_EmptyStruct,\n\t*\t\tEmptyStructWithTag: test_types_EmptyStructWithTag,\n\t*\t\tAdjacentlyTagged: test_types_AdjacentlyTagged,\n\t*\t\tLoadProjectEvent: test_types_LoadProjectEvent,\n\t*\t\tExternallyTagged: test_types_ExternallyTagged,\n\t*\t\tIssue221External: test_types_Issue221External,\n\t*\t\tInternallyTaggedD: test_types_InternallyTaggedD,\n\t*\t\tInternallyTaggedE: test_types_InternallyTaggedE,\n\t*\t\tInternallyTaggedF: test_types_InternallyTaggedF,\n\t*\t\tInternallyTaggedH: test_types_InternallyTaggedH,\n\t*\t\tInternallyTaggedL: test_types_InternallyTaggedL,\n\t*\t\tInternallyTaggedM: test_types_InternallyTaggedM,\n\t*\t\tStructWithAlias: test_types_StructWithAlias,\n\t*\t\tStructWithMultipleAliases: test_types_StructWithMultipleAliases,\n\t*\t\tStructWithAliasAndRename: test_types_StructWithAliasAndRename,\n\t*\t\tEnumWithVariantAlias: test_types_EnumWithVariantAlias,\n\t*\t\tEnumWithMultipleVariantAliases: test_types_EnumWithMultipleVariantAliases,\n\t*\t\tEnumWithVariantAliasAndRename: test_types_EnumWithVariantAliasAndRename,\n\t*\t\tInternallyTaggedWithAlias: test_types_InternallyTaggedWithAlias,\n\t*\t\tAdjacentlyTaggedWithAlias: test_types_AdjacentlyTaggedWithAlias,\n\t*\t\tUntaggedWithAlias: test_types_UntaggedWithAlias,\n\t*\t\tIssue221UntaggedSafe: test_types_Issue221UntaggedSafe,\n\t*\t\tIssue221UntaggedMixed: test_types_Issue221UntaggedMixed,\n\t*\t\tEmptyEnum: test_types_EmptyEnum,\n\t*\t\tEmptyEnumTagged: test_types_EmptyEnumTagged,\n\t*\t\tEmptyEnumTaggedWContent: test_types_EmptyEnumTaggedWContent,\n\t*\t\tEmptyEnumUntagged: test_types_EmptyEnumUntagged,\n\t*\t\tSkipOnlyField: test_types_SkipOnlyField,\n\t*\t\tSkipField: test_types_SkipField,\n\t*\t\tSkipVariant: test_types_SkipVariant,\n\t*\t\tSkipUnnamedFieldInVariant: test_types_SkipUnnamedFieldInVariant,\n\t*\t\tSkipNamedFieldInVariant: test_types_SkipNamedFieldInVariant,\n\t*\t\tTransparentWithSkip: test_types_TransparentWithSkip,\n\t*\t\tTransparentWithSkip2: test_types_TransparentWithSkip2,\n\t*\t\tTransparentWithSkip3: test_types_TransparentWithSkip3,\n\t*\t\tSkipVariant2: test_types_SkipVariant2,\n\t*\t\tSkipVariant3: test_types_SkipVariant3,\n\t*\t\tSkipStructFields: test_types_SkipStructFields,\n\t*\t\tSpectaSkipNonTypeField: test_types_SpectaSkipNonTypeField,\n\t*\t\tFlattenA: test_types_FlattenA,\n\t*\t\tFlattenB: test_types_FlattenB,\n\t*\t\tFlattenC: test_types_FlattenC,\n\t*\t\tFlattenD: test_types_FlattenD,\n\t*\t\tFlattenE: test_types_FlattenE,\n\t*\t\tFlattenF: test_types_FlattenF,\n\t*\t\tFlattenG: test_types_FlattenG,\n\t*\t\tTupleNested: test_types_TupleNested,\n\t*\t\t\"Generic1<()>\": test_types_Generic1<null>,\n\t*\t\t\"GenericAutoBound<()>\": test_types_GenericAutoBound<null>,\n\t*\t\t\"GenericAutoBound2<()>\": test_types_GenericAutoBound2<null>,\n\t*\t\tContainer1: test_types_Container1,\n\t*\t\t\"Generic2<(), String, i32>\": test_types_Generic2<null, string, number>,\n\t*\t\t\"GenericNewType1<()>\": test_types_GenericNewType1<null>,\n\t*\t\t\"GenericTuple<()>\": test_types_GenericTuple<null>,\n\t*\t\t\"GenericStruct2<()>\": test_types_GenericStruct2<null>,\n\t*\t\t\"InlineGenericNewtype<String>\": string,\n\t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t* \tvalue: string,\n\t* } }) & { Unnamed?: never }],\n\t*\t\t\"InlineFlattenGenericsG<()>\": test_types_InlineFlattenGenericsG<null>,\n\t*\t\tInlineFlattenGenerics: test_types_InlineFlattenGenerics,\n\t*\t\tGenericDefault: test_types_GenericDefault,\n\t*\t\tChainedGenericDefault: test_types_ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<String, String>\": test_types_ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<i32>\": test_types_ChainedGenericDefault<number, number>,\n\t*\t\t\"ChainedGenericDefault<String, i32>\": test_types_ChainedGenericDefault<string, number>,\n\t*\t\tGenericDefaultSkipped: test_types_GenericDefaultSkipped<string>,\n\t*\t\tGenericDefaultSkippedNonType: test_types_GenericDefaultSkippedNonType<unknown>,\n\t*\t\tGenericParameterOrderPreserved: test_types_GenericParameterOrderPreserved,\n\t*\t\tConstGenericInNonConstContainer: test_types_ConstGenericInNonConstContainer,\n\t*\t\tConstGenericInConstContainer: test_types_ConstGenericInConstContainer,\n\t*\t\tNamedConstGenericContainer: test_types_NamedConstGenericContainer,\n\t*\t\tInlineConstGenericContainer: test_types_InlineConstGenericContainer,\n\t*\t\tInlineRecursiveConstGenericContainer: test_types_InlineRecursiveConstGenericContainer,\n\t*\t\tTestCollectionRegister: test_types_TestCollectionRegister,\n\t*\t\tTestCollectionRegister: test_types_TestCollectionRegister,\n\t*\t}} Primitives\n\t* @property {number} i8\n\t* @property {number} i16\n\t* @property {number} i32\n\t* @property {number} u8\n\t* @property {number} u16\n\t* @property {number} u32\n\t* @property {number} f32\n\t* @property {number} f64\n\t* @property {boolean} bool\n\t* @property {string} char\n\t* @property {std_ops_Range<number>} \"Range<i32>\"\n\t* @property {std_ops_RangeInclusive<number>} \"RangeInclusive<i32>\"\n\t* @property {null} \"()\"\n\t* @property {[string, number]} \"(String, i32)\"\n\t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n\t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n\t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n\t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n\t* @property {string} String\n\t* @property {string} PathBuf\n\t* @property {string} IpAddr\n\t* @property {string} Ipv4Addr\n\t* @property {string} Ipv6Addr\n\t* @property {string} SocketAddr\n\t* @property {string} SocketAddrV4\n\t* @property {string} SocketAddrV6\n\t* @property {string} \"Cow<'static, str>\"\n\t* @property {number} \"Cow<'static, i32>\"\n\t* @property {string} \"&'static str\"\n\t* @property {boolean} \"&'static bool\"\n\t* @property {number} \"&'static i32\"\n\t* @property {number[]} \"Vec<i32>\"\n\t* @property {number[]} \"&'static [i32]\"\n\t* @property {[number, number, number]} \"&'static [i32; 3]\"\n\t* @property {[number, number, number]} \"[i32; 3]\"\n\t* @property {test_types_MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {test_types_MyEnum[]} \"&'static [MyEnum]\"\n\t* @property {[test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum]} \"&'static [MyEnum; 6]\"\n\t* @property {[test_types_MyEnum, test_types_MyEnum]} \"[MyEnum; 2]\"\n\t* @property {[number]} \"&'static [i32; 1]\"\n\t* @property {[]} \"&'static [i32; 0]\"\n\t* @property {number | null} \"Option<i32>\"\n\t* @property {null} \"Option<()>\"\n\t* @property {number[] | null} \"Option<Vec<i32>>\"\n\t* @property {std_result_Result<string, number>} \"Result<String, i32>\"\n\t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n\t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n\t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n\t* @property {string | null} \"Option<Option<String>>\"\n\t* @property {string | null} \"Option<Option<Option<String>>>\"\n\t* @property {null} \"PhantomData<()>\"\n\t* @property {null} \"PhantomData<String>\"\n\t* @property {never} Infallible\n\t* @property {test_types_Unit1} Unit1\n\t* @property {test_types_Unit2} Unit2\n\t* @property {test_types_Unit3} Unit3\n\t* @property {test_types_Unit4} Unit4\n\t* @property {test_types_Unit5} Unit5\n\t* @property {test_types_Unit6} Unit6\n\t* @property {test_types_Unit7} Unit7\n\t* @property {test_types_SimpleStruct} SimpleStruct\n\t* @property {test_types_TupleStruct1} TupleStruct1\n\t* @property {test_types_TupleStruct3} TupleStruct3\n\t* @property {test_types_TestEnum} TestEnum\n\t* @property {test_types_RefStruct} RefStruct\n\t* @property {test_types_InlinerStruct} InlinerStruct\n\t* @property {test_types_GenericStruct<number>} \"GenericStruct<i32>\"\n\t* @property {test_types_GenericStruct<string>} \"GenericStruct<String>\"\n\t* @property {test_types_FlattenEnumStruct} FlattenEnumStruct\n\t* @property {test_types_OverridenStruct} OverridenStruct\n\t* @property {test_types_HasGenericAlias} HasGenericAlias\n\t* @property {test_types_EnumMacroAttributes} EnumMacroAttributes\n\t* @property {test_types_InlineEnumField} InlineEnumField\n\t* @property {test_types_InlineOptionalType} InlineOptionalType\n\t* @property {test_types_Rename} Rename\n\t* @property {test_types_TransparentType} TransparentType\n\t* @property {test_types_TransparentType2} TransparentType2\n\t* @property {test_types_TransparentTypeWithOverride} TransparentTypeWithOverride\n\t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n\t* @property {Partial<{ [key in test_types_BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n\t* @property {Partial<{ [key in test_types_BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n\t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n\t* @property {test_types_PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n\t* @property {test_types_EnumReferenceRecordKey} EnumReferenceRecordKey\n\t* @property {test_types_FlattenOnNestedEnum} FlattenOnNestedEnum\n\t* @property {test_types_MyEmptyInput} MyEmptyInput\n\t* @property {string} \"(String)\"\n\t* @property {[string]} \"(String,)\"\n\t* @property {test_types_ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n\t* @property {test_types_ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n\t* @property {test_types_MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {test_types_InlineTuple} InlineTuple\n\t* @property {test_types_InlineTuple2} InlineTuple2\n\t* @property {string} \"Box<str>\"\n\t* @property {string} \"Box<String>\"\n\t* @property {test_types_SkippedFieldWithinVariant} SkippedFieldWithinVariant\n\t* @property {test_types_KebabCase} KebabCase\n\t* @property {string[]} \"&[&str]\"\n\t* @property {test_types_Issue281} \"Issue281<'_>\"\n\t* @property {test_types_LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n\t* @property {test_types_LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n\t* @property {test_types_RenameWithWeirdCharsField} RenameWithWeirdCharsField\n\t* @property {test_types_RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n\t* @property {test_types_RenamedFieldKeys} RenamedFieldKeys\n\t* @property {test_types_RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n\t* @property {test_types_type_type_Type} \"type_type::Type\"\n\t* @property {test_types_ActualType} ActualType\n\t* @property {test_types_SpectaTypeOverride} SpectaTypeOverride\n\t* @property {test_types_ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n\t* @property {test_types_ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n\t* @property {test_types_ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n\t* @property {test_types_ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n\t* @property {test_types_ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n\t* @property {test_types_ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n\t* @property {test_types_InvalidToValidType} InvalidToValidType\n\t* @property {test_types_TupleStruct} TupleStruct\n\t* @property {test_types_TupleStructWithRep} TupleStructWithRep\n\t* @property {test_types_GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n\t* @property {test_types_BracedStruct} BracedStruct\n\t* @property {test_types_StructNew} Struct\n\t* @property {test_types_Struct2} Struct2\n\t* @property {test_types_Enum} Enum\n\t* @property {test_types_Enum2} Enum2\n\t* @property {test_types_Enum3} Enum3\n\t* @property {test_types_StructRenameAllUppercase} StructRenameAllUppercase\n\t* @property {test_types_RenameSerdeSpecialChar} RenameSerdeSpecialChar\n\t* @property {test_types_EnumRenameAllUppercase} EnumRenameAllUppercase\n\t* @property {test_types_Recursive} Recursive\n\t* @property {test_types_RecursiveMapValue} RecursiveMapValue\n\t* @property {test_types_RecursiveTransparent} RecursiveTransparent\n\t* @property {test_types_RecursiveInEnum} RecursiveInEnum\n\t* @property {test_types_NonOptional} NonOptional\n\t* @property {test_types_OptionalOnNamedField} OptionalOnNamedField\n\t* @property {test_types_OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n\t* @property {test_types_OptionalInEnum} OptionalInEnum\n\t* @property {test_types_UntaggedVariants} UntaggedVariants\n\t* @property {test_types_UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n\t* @property {test_types_UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n\t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n\t* @property {test_types_Regular} Regular\n\t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n\t* @property {{ [key in test_types_TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n\t* @property {Partial<{ [key in test_types_UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n\t* @property {Partial<{ [key in test_types_UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n\t* @property {test_types_ValidMaybeValidKey} ValidMaybeValidKey\n\t* @property {test_types_ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n\t* @property {test_types_MacroStruct} MacroStruct\n\t* @property {test_types_MacroStruct2} MacroStruct2\n\t* @property {test_types_MacroEnum} MacroEnum\n\t* @property {test_types_DeprecatedType} DeprecatedType\n\t* @property {test_types_DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n\t* @property {test_types_DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n\t* @property {test_types_DeprecatedFields} DeprecatedFields\n\t* @property {test_types_DeprecatedTupleVariant} DeprecatedTupleVariant\n\t* @property {test_types_DeprecatedEnumVariants} DeprecatedEnumVariants\n\t* @property {test_types_CommentedStruct} CommentedStruct\n\t* @property {test_types_CommentedEnum} CommentedEnum\n\t* @property {test_types_SingleLineComment} SingleLineComment\n\t* @property {test_types_Demo<number, boolean>} NonGeneric\n\t* @property {test_types_Demo<number, boolean>} \"HalfGenericA<u8>\"\n\t* @property {test_types_Demo<number, boolean>} \"HalfGenericB<bool>\"\n\t* @property {test_types_Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n\t* @property {test_types_Demo<number, boolean>} \"Another<bool>\"\n\t* @property {{ [key in string]: number }} \"MapA<u32>\"\n\t* @property {{ [key in number]: string }} \"MapB<u32>\"\n\t* @property {{ [key in string]: test_types_AGenericStruct<number> }} \"MapC<u32>\"\n\t* @property {test_types_AGenericStruct<number>} \"AGenericStruct<u32>\"\n\t* @property {test_types_A} A\n\t* @property {test_types_DoubleFlattened} DoubleFlattened\n\t* @property {test_types_FlattenedInner} FlattenedInner\n\t* @property {test_types_BoxFlattened} BoxFlattened\n\t* @property {test_types_BoxInline} BoxInline\n\t* @property {test_types_First} First\n\t* @property {test_types_Second} Second\n\t* @property {test_types_Third} Third\n\t* @property {test_types_Fourth} Fourth\n\t* @property {test_types_TagOnStructWithInline} TagOnStructWithInline\n\t* @property {test_types_Sixth} Sixth\n\t* @property {test_types_Seventh} Seventh\n\t* @property {test_types_Eight} Eight\n\t* @property {test_types_Ninth} Ninth\n\t* @property {test_types_Tenth} Tenth\n\t* @property {test_types_MyEnumTagged} MyEnumTagged\n\t* @property {test_types_MyEnumExternal} MyEnumExternal\n\t* @property {test_types_MyEnumAdjacent} MyEnumAdjacent\n\t* @property {test_types_MyEnumUntagged} MyEnumUntagged\n\t* @property {test_types_EmptyStruct} EmptyStruct\n\t* @property {test_types_EmptyStructWithTag} EmptyStructWithTag\n\t* @property {test_types_AdjacentlyTagged} AdjacentlyTagged\n\t* @property {test_types_LoadProjectEvent} LoadProjectEvent\n\t* @property {test_types_ExternallyTagged} ExternallyTagged\n\t* @property {test_types_Issue221External} Issue221External\n\t* @property {test_types_InternallyTaggedD} InternallyTaggedD\n\t* @property {test_types_InternallyTaggedE} InternallyTaggedE\n\t* @property {test_types_InternallyTaggedF} InternallyTaggedF\n\t* @property {test_types_InternallyTaggedH} InternallyTaggedH\n\t* @property {test_types_InternallyTaggedL} InternallyTaggedL\n\t* @property {test_types_InternallyTaggedM} InternallyTaggedM\n\t* @property {test_types_StructWithAlias} StructWithAlias\n\t* @property {test_types_StructWithMultipleAliases} StructWithMultipleAliases\n\t* @property {test_types_StructWithAliasAndRename} StructWithAliasAndRename\n\t* @property {test_types_EnumWithVariantAlias} EnumWithVariantAlias\n\t* @property {test_types_EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n\t* @property {test_types_EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n\t* @property {test_types_InternallyTaggedWithAlias} InternallyTaggedWithAlias\n\t* @property {test_types_AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n\t* @property {test_types_UntaggedWithAlias} UntaggedWithAlias\n\t* @property {test_types_Issue221UntaggedSafe} Issue221UntaggedSafe\n\t* @property {test_types_Issue221UntaggedMixed} Issue221UntaggedMixed\n\t* @property {test_types_EmptyEnum} EmptyEnum\n\t* @property {test_types_EmptyEnumTagged} EmptyEnumTagged\n\t* @property {test_types_EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n\t* @property {test_types_EmptyEnumUntagged} EmptyEnumUntagged\n\t* @property {test_types_SkipOnlyField} SkipOnlyField\n\t* @property {test_types_SkipField} SkipField\n\t* @property {test_types_SkipVariant} SkipVariant\n\t* @property {test_types_SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n\t* @property {test_types_SkipNamedFieldInVariant} SkipNamedFieldInVariant\n\t* @property {test_types_TransparentWithSkip} TransparentWithSkip\n\t* @property {test_types_TransparentWithSkip2} TransparentWithSkip2\n\t* @property {test_types_TransparentWithSkip3} TransparentWithSkip3\n\t* @property {test_types_SkipVariant2} SkipVariant2\n\t* @property {test_types_SkipVariant3} SkipVariant3\n\t* @property {test_types_SkipStructFields} SkipStructFields\n\t* @property {test_types_SpectaSkipNonTypeField} SpectaSkipNonTypeField\n\t* @property {test_types_FlattenA} FlattenA\n\t* @property {test_types_FlattenB} FlattenB\n\t* @property {test_types_FlattenC} FlattenC\n\t* @property {test_types_FlattenD} FlattenD\n\t* @property {test_types_FlattenE} FlattenE\n\t* @property {test_types_FlattenF} FlattenF\n\t* @property {test_types_FlattenG} FlattenG\n\t* @property {test_types_TupleNested} TupleNested\n\t* @property {test_types_Generic1<null>} \"Generic1<()>\"\n\t* @property {test_types_GenericAutoBound<null>} \"GenericAutoBound<()>\"\n\t* @property {test_types_GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n\t* @property {test_types_Container1} Container1\n\t* @property {test_types_Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n\t* @property {test_types_GenericNewType1<null>} \"GenericNewType1<()>\"\n\t* @property {test_types_GenericTuple<null>} \"GenericTuple<()>\"\n\t* @property {test_types_GenericStruct2<null>} \"GenericStruct2<()>\"\n\t* @property {string} \"InlineGenericNewtype<String>\"\n\t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t* \tvalue: string,\n\t* } }) & { Unnamed?: never }]} \"InlineGenericNested<String>\"\n\t* @property {test_types_InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n\t* @property {test_types_InlineFlattenGenerics} InlineFlattenGenerics\n\t* @property {test_types_GenericDefault} GenericDefault\n\t* @property {test_types_ChainedGenericDefault} ChainedGenericDefault\n\t* @property {test_types_ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n\t* @property {test_types_ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n\t* @property {test_types_ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n\t* @property {test_types_GenericDefaultSkipped<string>} GenericDefaultSkipped\n\t* @property {test_types_GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n\t* @property {test_types_GenericParameterOrderPreserved} GenericParameterOrderPreserved\n\t* @property {test_types_ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n\t* @property {test_types_ConstGenericInConstContainer} ConstGenericInConstContainer\n\t* @property {test_types_NamedConstGenericContainer} NamedConstGenericContainer\n\t* @property {test_types_InlineConstGenericContainer} InlineConstGenericContainer\n\t* @property {test_types_InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n\t* @property {test_types_TestCollectionRegister} TestCollectionRegister\n\t* @property {test_types_TestCollectionRegister} TestCollectionRegister\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tdemo: test_types_Recursive,\n\t*\t}} Recursive\n\t* @property {test_types_Recursive} demo\n\t*\n\t* @typedef {{ A: {\n\t* \tdemo: test_types_RecursiveInEnum,\n\t* } }} RecursiveInEnum\n\t* @property {{ A: {\n\t* \tdemo: test_types_RecursiveInEnum,\n\t* } }} A\n\t*\n\t* @typedef {test_types_RecursiveInline} RecursiveInline\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: test_types_RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: test_types_RecursiveMapValue }} demo\n\t*\n\t* @typedef {test_types_RecursiveInline} RecursiveTransparent\n\t* @property {test_types_RecursiveInline} \"0\"\n\t*\n\t* @typedef {test_types_TestEnum} RefStruct\n\t* @property {test_types_TestEnum} \"0\"\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: test_types_Second,\n\t*\t}} Seventh\n\t* @property {test_types_First} a\n\t* @property {test_types_Second} b\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**  Some single-line comment */\n\t* ({ B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: test_types_First,\n\t*\t}} Sixth\n\t* @property {test_types_First} a\n\t* @property {test_types_First} b\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: test_types_First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {test_types_First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | test_types_First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {test_types_First} D\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: test_types_First,\n\t*\t} & test_types_First} Third\n\t* @property {{ [key in string]: string }} b\n\t* @property {test_types_First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} ToBeFlattened\n\t* @property {string} a\n\t*\n\t* @typedef {string} TransparentStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {test_types_TransparentTypeInner} TransparentType\n\t* @property {test_types_TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinner: string,\n\t*\t}} TransparentTypeInner\n\t* @property {string} inner\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*\n\t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {\"C\"} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | number} UntaggedVariantsKey\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{ [key in test_types_MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in test_types_MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in test_types_MaybeValidKey<test_types_MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in test_types_MaybeValidKey<test_types_MaybeValidKey<string>>]: null }} \"0\"\n\t*/\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-moduleprefixedname-serde_phases.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\njsdoc-export-to-moduleprefixedname-serde_phases (62937 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n/**\n\t* @typedef {{\n\t*\t\ta: test_types_B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: test_types_B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {test_types_B} a\n\t* @property {{\n\t*\t\tb: number,\n\t*\t}} b\n\t* @property {test_types_B} c\n\t* @property {{\n\t*\t\tflattened: number,\n\t*\t}} d\n\t* @property {{\n\t*\t\tgeneric_flattened: number,\n\t*\t}} e\n\t*\n\t* @typedef {{\n\t*\t\tfield: test_types_Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {test_types_Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_GenericType<string>,\n\t*\t}} ActualType\n\t* @property {test_types_GenericType<string>} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} B\n\t* @property {number} b\n\t*\n\t* @typedef {\"A\" | \"B\"} BasicEnum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {test_types_BoxedInner} BoxFlattened\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {{\n\t*\t\ta: number,\n\t*\t}} c\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} BoxedInner\n\t* @property {number} a\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tfoo: test_types_Generic1<number>,\n\t*\t\tbar: test_types_Generic1<number>[],\n\t*\t\tbaz: { [key in string]: test_types_Generic1<string> },\n\t*\t}} Container1\n\t* @property {test_types_Generic1<number>} foo\n\t* @property {test_types_Generic1<number>[]} bar\n\t* @property {{ [key in string]: test_types_Generic1<string> }} baz\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tflattened: number,\n\t*\t}} D\n\t* @property {number} flattened\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_ToBeFlattened,\n\t*\t\tb: test_types_ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {test_types_ToBeFlattened} a\n\t* @property {test_types_ToBeFlattened} b\n\t*\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in test_types_BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in test_types_BasicEnum]: number }>} a\n\t*\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & test_types_FlattenA} FlattenB\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & test_types_FlattenA} FlattenC\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {test_types_FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (test_types_FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (test_types_FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{ tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" }} FlattenEnum\n\t* @property {{ tag: \"One\" }} One\n\t* @property {{ tag: \"Two\" }} Two\n\t* @property {{ tag: \"Three\" }} Three\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & test_types_FlattenEnum} FlattenEnumStruct\n\t* @property {string} outer\n\t*\n\t* @typedef {{\n\t*\t\tb: ({\n\t*\t\t\tc: number,\n\t*\t\t}) & (test_types_FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {({\n\t*\t\tc: number,\n\t*\t}) & (test_types_FlattenA)} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: test_types_FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {test_types_FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & test_types_NestedEnum} FlattenOnNestedEnum\n\t* @property {string} id\n\t*\n\t* @typedef {test_types_Inner} FlattenedInner\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {test_types_First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tgeneric_flattened: T,\n\t*\t}} GenericFlattened<T>\n\t* @property {T} generic_flattened\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tpair: test_types_Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {test_types_Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {\"Undefined\" | T} GenericType<T>\n\t* @property {\"Undefined\"} Undefined\n\t* @property {T} Value\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\tg: test_types_InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & test_types_InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t* @property {test_types_InlineFlattenGenericsG<string>} g\n\t* @property {{\n\t*\t\tt: string,\n\t*\t}} gi\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t* \ta: string,\n\t* } | null,\n\t*\t}} InlineOptionalType\n\t* @property {{\n\t* \ta: string,\n\t* } | null} optional_field\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t}} InlineRecursiveConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number, number]} d\n\t* @property {test_types_InlineRecursiveConstGeneric} e\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {{\n\t*\t\tdata: [number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: [number, number, number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number, number],\n\t*\t\te: test_types_InlineRecursiveConstGeneric,\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tref_struct: test_types_SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} InlineStruct\n\t* @property {test_types_SimpleStruct} ref_struct\n\t* @property {number} val\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t* \tdemo: [string, boolean],\n\t* }, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[{\n\t* \tdemo: [string, boolean],\n\t* }, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: test_types_SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: test_types_RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {{\n\t*\t\tref_struct: test_types_SimpleStruct,\n\t*\t\tval: number,\n\t*\t}} inline_this\n\t* @property {test_types_RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t} & test_types_FlattenedInner} Inner\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} InternallyTaggedD\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { [key in string]: string }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {null} InternallyTaggedFInner\n\t* @property {null} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {null} InternallyTaggedHInner\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t* @property {{\n\t* \ttype: \"A\",\n\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\" }} InternallyTaggedLInner\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\" }} B\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t*  https://github.com/specta-rs/specta/issues/374\n\t*\n\t* @typedef {test_types_Issue374_Serialize | test_types_Issue374_Deserialize} Issue374\n\t* @property {test_types_Issue374_Serialize} Serialize\n\t* @property {test_types_Issue374_Deserialize} Deserialize\n\t*\n\t*  https://github.com/specta-rs/specta/issues/374\n\t*\n\t* @typedef {{\n\t*\t\tfoo?: boolean,\n\t*\t\tbar?: boolean,\n\t*\t}} Issue374_Deserialize\n\t* @property {boolean} [foo]\n\t* @property {boolean} [bar]\n\t*\n\t*  https://github.com/specta-rs/specta/issues/374\n\t*\n\t* @typedef {{\n\t*\t\tfoo?: boolean,\n\t*\t\tbar?: boolean,\n\t*\t}} Issue374_Serialize\n\t* @property {boolean} [foo]\n\t* @property {boolean} [bar]\n\t*\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {T} MaybeValidKey<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {({ A: string }) & { B?: never } | ({ B: number }) & { A?: never }} MyEnum\n\t* @property {{ A: string }} A\n\t* @property {{ B: number }} B\n\t*\n\t* @typedef {{ t: \"Variant\"; c: {\n\t* \tinner: test_types_First,\n\t* } }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: {\n\t* \tinner: test_types_First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ Variant: {\n\t* \tinner: test_types_First,\n\t* } }} MyEnumExternal\n\t* @property {{ Variant: {\n\t* \tinner: test_types_First,\n\t* } }} Variant\n\t*\n\t* @typedef {{ type: \"Variant\"; inner: test_types_First }} MyEnumTagged\n\t* @property {{ type: \"Variant\"; inner: test_types_First }} Variant\n\t*\n\t* @typedef {{ inner: test_types_First }} MyEnumUntagged\n\t* @property {{ inner: test_types_First }} Variant\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGeneric\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_NamedConstGeneric,\n\t*\t\tb: test_types_NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {test_types_NamedConstGeneric} a\n\t* @property {test_types_NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{ type: \"a\"; value: string } | { type: \"b\"; value: number }} NestedEnum\n\t* @property {{ type: \"a\"; value: string }} a\n\t* @property {{ type: \"b\"; value: number }} b\n\t*\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: test_types_First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: test_types_First }} D\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {test_types_Optional_Serialize | test_types_Optional_Deserialize} Optional\n\t* @property {test_types_Optional_Serialize} Serialize\n\t* @property {test_types_Optional_Deserialize} Deserialize\n\t*\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {{\n\t*\t\ta: number | null,\n\t*\t\tb?: number | null,\n\t*\t\tc: string | null,\n\t*\t\td?: boolean,\n\t*\t}} Optional_Deserialize\n\t* @property {number | null} a\n\t* @property {number | null} [b]\n\t* @property {string | null} c\n\t* @property {boolean} [d]\n\t*\n\t* @typedef {{\n\t*\t\ta: number | null,\n\t*\t\tb?: number | null,\n\t*\t\tc?: string | null,\n\t*\t\td: boolean,\n\t*\t}} Optional_Serialize\n\t* @property {number | null} a\n\t* @property {number | null} [b]\n\t* @property {string | null} [c]\n\t* @property {boolean} d\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{\n\t*\t\tfirst: Z,\n\t*\t\tsecond: A,\n\t*\t}} Pair<Z, A>\n\t* @property {Z} first\n\t* @property {A} second\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} PlaceholderInnerField\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ti8: number,\n\t*\t\ti16: number,\n\t*\t\ti32: number,\n\t*\t\tu8: number,\n\t*\t\tu16: number,\n\t*\t\tu32: number,\n\t*\t\tf32: number,\n\t*\t\tf64: number,\n\t*\t\tbool: boolean,\n\t*\t\tchar: string,\n\t*\t\t\"Range<i32>\": std_ops_Range<number>,\n\t*\t\t\"RangeInclusive<i32>\": std_ops_RangeInclusive<number>,\n\t*\t\t\"()\": null,\n\t*\t\t\"(String, i32)\": [string, number],\n\t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t*\t\tString: string,\n\t*\t\tPathBuf: string,\n\t*\t\tIpAddr: string,\n\t*\t\tIpv4Addr: string,\n\t*\t\tIpv6Addr: string,\n\t*\t\tSocketAddr: string,\n\t*\t\tSocketAddrV4: string,\n\t*\t\tSocketAddrV6: string,\n\t*\t\t\"Cow<'static, str>\": string,\n\t*\t\t\"Cow<'static, i32>\": number,\n\t*\t\t\"&'static str\": string,\n\t*\t\t\"&'static bool\": boolean,\n\t*\t\t\"&'static i32\": number,\n\t*\t\t\"Vec<i32>\": number[],\n\t*\t\t\"&'static [i32]\": number[],\n\t*\t\t\"&'static [i32; 3]\": [number, number, number],\n\t*\t\t\"[i32; 3]\": [number, number, number],\n\t*\t\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\t*\t\t\"&'static [MyEnum]\": test_types_MyEnum[],\n\t*\t\t\"&'static [MyEnum; 6]\": [test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum],\n\t*\t\t\"[MyEnum; 2]\": [test_types_MyEnum, test_types_MyEnum],\n\t*\t\t\"&'static [i32; 1]\": [number],\n\t*\t\t\"&'static [i32; 0]\": [],\n\t*\t\t\"Option<i32>\": number | null,\n\t*\t\t\"Option<()>\": null,\n\t*\t\t\"Option<Vec<i32>>\": number[] | null,\n\t*\t\t\"Result<String, i32>\": std_result_Result<string, number>,\n\t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t*\t\t\"Option<Option<String>>\": string | null,\n\t*\t\t\"Option<Option<Option<String>>>\": string | null,\n\t*\t\t\"PhantomData<()>\": null,\n\t*\t\t\"PhantomData<String>\": null,\n\t*\t\tInfallible: never,\n\t*\t\tUnit1: test_types_Unit1,\n\t*\t\tUnit2: test_types_Unit2,\n\t*\t\tUnit3: test_types_Unit3,\n\t*\t\tUnit4: test_types_Unit4,\n\t*\t\tUnit5: test_types_Unit5,\n\t*\t\tUnit6: test_types_Unit6,\n\t*\t\tUnit7: test_types_Unit7,\n\t*\t\tSimpleStruct: test_types_SimpleStruct,\n\t*\t\tTupleStruct1: test_types_TupleStruct1,\n\t*\t\tTupleStruct3: test_types_TupleStruct3,\n\t*\t\tTestEnum: test_types_TestEnum,\n\t*\t\tRefStruct: test_types_RefStruct,\n\t*\t\tInlinerStruct: test_types_InlinerStruct,\n\t*\t\t\"GenericStruct<i32>\": test_types_GenericStruct<number>,\n\t*\t\t\"GenericStruct<String>\": test_types_GenericStruct<string>,\n\t*\t\tFlattenEnumStruct: test_types_FlattenEnumStruct,\n\t*\t\tOverridenStruct: test_types_OverridenStruct,\n\t*\t\tHasGenericAlias: test_types_HasGenericAlias,\n\t*\t\tEnumMacroAttributes: test_types_EnumMacroAttributes,\n\t*\t\tInlineEnumField: test_types_InlineEnumField,\n\t*\t\tInlineOptionalType: test_types_InlineOptionalType,\n\t*\t\tRename: test_types_Rename,\n\t*\t\tTransparentType: test_types_TransparentType,\n\t*\t\tTransparentType2: test_types_TransparentType2,\n\t*\t\tTransparentTypeWithOverride: test_types_TransparentTypeWithOverride,\n\t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test_types_BasicEnum]: null }>,\n\t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test_types_BasicEnum]: number }>,\n\t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t*\t\t\"Vec<PlaceholderInnerField>\": test_types_PlaceholderInnerField[],\n\t*\t\tEnumReferenceRecordKey: test_types_EnumReferenceRecordKey,\n\t*\t\tFlattenOnNestedEnum: test_types_FlattenOnNestedEnum,\n\t*\t\tMyEmptyInput: test_types_MyEmptyInput,\n\t*\t\t\"(String)\": string,\n\t*\t\t\"(String,)\": [string],\n\t*\t\tExtraBracketsInTupleVariant: test_types_ExtraBracketsInTupleVariant,\n\t*\t\tExtraBracketsInUnnamedStruct: test_types_ExtraBracketsInUnnamedStruct,\n\t*\t\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\t*\t\tInlineTuple: test_types_InlineTuple,\n\t*\t\tInlineTuple2: test_types_InlineTuple2,\n\t*\t\t\"Box<str>\": string,\n\t*\t\t\"Box<String>\": string,\n\t*\t\tSkippedFieldWithinVariant: test_types_SkippedFieldWithinVariant,\n\t*\t\tKebabCase: test_types_KebabCase,\n\t*\t\t\"&[&str]\": string[],\n\t*\t\t\"Issue281<'_>\": test_types_Issue281,\n\t*\t\t\"LifetimeGenericStruct<'_, i32>\": test_types_LifetimeGenericStruct<number>,\n\t*\t\t\"LifetimeGenericEnum<'_, i32>\": test_types_LifetimeGenericEnum<number>,\n\t*\t\tRenameWithWeirdCharsField: test_types_RenameWithWeirdCharsField,\n\t*\t\tRenameWithWeirdCharsVariant: test_types_RenameWithWeirdCharsVariant,\n\t*\t\tRenamedFieldKeys: test_types_RenamedFieldKeys,\n\t*\t\tRenamedVariantWithSkippedPayload: test_types_RenamedVariantWithSkippedPayload,\n\t*\t\t\"type_type::Type\": test_types_type_type_Type,\n\t*\t\tActualType: test_types_ActualType,\n\t*\t\tSpectaTypeOverride: test_types_SpectaTypeOverride,\n\t*\t\tContainerTypeOverrideStruct: test_types_ContainerTypeOverrideStruct,\n\t*\t\tContainerTypeOverrideEnum: test_types_ContainerTypeOverrideEnum,\n\t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test_types_ContainerTypeOverrideGeneric,\n\t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": test_types_ContainerTypeOverrideToGeneric<number>,\n\t*\t\tContainerTypeOverrideTuple: test_types_ContainerTypeOverrideTuple,\n\t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": test_types_ContainerTypeOverrideTupleGeneric<number>,\n\t*\t\tInvalidToValidType: test_types_InvalidToValidType,\n\t*\t\tTupleStruct: test_types_TupleStruct,\n\t*\t\tTupleStructWithRep: test_types_TupleStructWithRep,\n\t*\t\t\"GenericTupleStruct<String>\": test_types_GenericTupleStruct<string>,\n\t*\t\tBracedStruct: test_types_BracedStruct,\n\t*\t\tStruct: test_types_StructNew,\n\t*\t\tStruct2: test_types_Struct2,\n\t*\t\tEnum: test_types_Enum,\n\t*\t\tEnum2: test_types_Enum2,\n\t*\t\tEnum3: test_types_Enum3,\n\t*\t\tStructRenameAllUppercase: test_types_StructRenameAllUppercase,\n\t*\t\tRenameSerdeSpecialChar: test_types_RenameSerdeSpecialChar,\n\t*\t\tEnumRenameAllUppercase: test_types_EnumRenameAllUppercase,\n\t*\t\tRecursive: test_types_Recursive,\n\t*\t\tRecursiveMapValue: test_types_RecursiveMapValue,\n\t*\t\tRecursiveTransparent: test_types_RecursiveTransparent,\n\t*\t\tRecursiveInEnum: test_types_RecursiveInEnum,\n\t*\t\tNonOptional: test_types_NonOptional,\n\t*\t\tOptionalOnNamedField: test_types_OptionalOnNamedField,\n\t*\t\tOptionalOnTransparentNamedField: test_types_OptionalOnTransparentNamedField,\n\t*\t\tOptionalInEnum: test_types_OptionalInEnum,\n\t*\t\tUntaggedVariants: test_types_UntaggedVariants,\n\t*\t\tUntaggedVariantsWithoutValue: test_types_UntaggedVariantsWithoutValue,\n\t*\t\tUntaggedVariantsWithDuplicateBranches: test_types_UntaggedVariantsWithDuplicateBranches,\n\t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t*\t\tRegular: test_types_Regular,\n\t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in test_types_TransparentStruct]: null },\n\t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test_types_UnitVariants]: null }>,\n\t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test_types_UntaggedVariantsKey]: null }>,\n\t*\t\tValidMaybeValidKey: test_types_ValidMaybeValidKey,\n\t*\t\tValidMaybeValidKeyNested: test_types_ValidMaybeValidKeyNested,\n\t*\t\tMacroStruct: test_types_MacroStruct,\n\t*\t\tMacroStruct2: test_types_MacroStruct2,\n\t*\t\tMacroEnum: test_types_MacroEnum,\n\t*\t\tDeprecatedType: test_types_DeprecatedType,\n\t*\t\tDeprecatedTypeWithMsg: test_types_DeprecatedTypeWithMsg,\n\t*\t\tDeprecatedTypeWithMsg2: test_types_DeprecatedTypeWithMsg2,\n\t*\t\tDeprecatedFields: test_types_DeprecatedFields,\n\t*\t\tDeprecatedTupleVariant: test_types_DeprecatedTupleVariant,\n\t*\t\tDeprecatedEnumVariants: test_types_DeprecatedEnumVariants,\n\t*\t\tCommentedStruct: test_types_CommentedStruct,\n\t*\t\tCommentedEnum: test_types_CommentedEnum,\n\t*\t\tSingleLineComment: test_types_SingleLineComment,\n\t*\t\tNonGeneric: test_types_Demo<number, boolean>,\n\t*\t\t\"HalfGenericA<u8>\": test_types_Demo<number, boolean>,\n\t*\t\t\"HalfGenericB<bool>\": test_types_Demo<number, boolean>,\n\t*\t\t\"FullGeneric<u8, bool>\": test_types_Demo<number, boolean>,\n\t*\t\t\"Another<bool>\": test_types_Demo<number, boolean>,\n\t*\t\t\"MapA<u32>\": { [key in string]: number },\n\t*\t\t\"MapB<u32>\": { [key in number]: string },\n\t*\t\t\"MapC<u32>\": { [key in string]: test_types_AGenericStruct<number> },\n\t*\t\t\"AGenericStruct<u32>\": test_types_AGenericStruct<number>,\n\t*\t\tA: test_types_A,\n\t*\t\tDoubleFlattened: test_types_DoubleFlattened,\n\t*\t\tFlattenedInner: test_types_FlattenedInner,\n\t*\t\tBoxFlattened: test_types_BoxFlattened,\n\t*\t\tBoxInline: test_types_BoxInline,\n\t*\t\tFirst: test_types_First,\n\t*\t\tSecond: test_types_Second,\n\t*\t\tThird: test_types_Third,\n\t*\t\tFourth: test_types_Fourth,\n\t*\t\tTagOnStructWithInline: test_types_TagOnStructWithInline,\n\t*\t\tSixth: test_types_Sixth,\n\t*\t\tSeventh: test_types_Seventh,\n\t*\t\tEight: test_types_Eight,\n\t*\t\tNinth: test_types_Ninth,\n\t*\t\tTenth: test_types_Tenth,\n\t*\t\tMyEnumTagged: test_types_MyEnumTagged,\n\t*\t\tMyEnumExternal: test_types_MyEnumExternal,\n\t*\t\tMyEnumAdjacent: test_types_MyEnumAdjacent,\n\t*\t\tMyEnumUntagged: test_types_MyEnumUntagged,\n\t*\t\tEmptyStruct: test_types_EmptyStruct,\n\t*\t\tEmptyStructWithTag: test_types_EmptyStructWithTag,\n\t*\t\tAdjacentlyTagged: test_types_AdjacentlyTagged,\n\t*\t\tLoadProjectEvent: test_types_LoadProjectEvent,\n\t*\t\tExternallyTagged: test_types_ExternallyTagged,\n\t*\t\tIssue221External: test_types_Issue221External,\n\t*\t\tInternallyTaggedD: test_types_InternallyTaggedD,\n\t*\t\tInternallyTaggedE: test_types_InternallyTaggedE,\n\t*\t\tInternallyTaggedF: test_types_InternallyTaggedF,\n\t*\t\tInternallyTaggedH: test_types_InternallyTaggedH,\n\t*\t\tInternallyTaggedL: test_types_InternallyTaggedL,\n\t*\t\tInternallyTaggedM: test_types_InternallyTaggedM,\n\t*\t\tStructWithAlias: test_types_StructWithAlias,\n\t*\t\tStructWithMultipleAliases: test_types_StructWithMultipleAliases,\n\t*\t\tStructWithAliasAndRename: test_types_StructWithAliasAndRename,\n\t*\t\tEnumWithVariantAlias: test_types_EnumWithVariantAlias,\n\t*\t\tEnumWithMultipleVariantAliases: test_types_EnumWithMultipleVariantAliases,\n\t*\t\tEnumWithVariantAliasAndRename: test_types_EnumWithVariantAliasAndRename,\n\t*\t\tInternallyTaggedWithAlias: test_types_InternallyTaggedWithAlias,\n\t*\t\tAdjacentlyTaggedWithAlias: test_types_AdjacentlyTaggedWithAlias,\n\t*\t\tUntaggedWithAlias: test_types_UntaggedWithAlias,\n\t*\t\tIssue221UntaggedSafe: test_types_Issue221UntaggedSafe,\n\t*\t\tIssue221UntaggedMixed: test_types_Issue221UntaggedMixed,\n\t*\t\tEmptyEnum: test_types_EmptyEnum,\n\t*\t\tEmptyEnumTagged: test_types_EmptyEnumTagged,\n\t*\t\tEmptyEnumTaggedWContent: test_types_EmptyEnumTaggedWContent,\n\t*\t\tEmptyEnumUntagged: test_types_EmptyEnumUntagged,\n\t*\t\tSkipOnlyField: test_types_SkipOnlyField,\n\t*\t\tSkipField: test_types_SkipField,\n\t*\t\tSkipVariant: test_types_SkipVariant,\n\t*\t\tSkipUnnamedFieldInVariant: test_types_SkipUnnamedFieldInVariant,\n\t*\t\tSkipNamedFieldInVariant: test_types_SkipNamedFieldInVariant,\n\t*\t\tTransparentWithSkip: test_types_TransparentWithSkip,\n\t*\t\tTransparentWithSkip2: test_types_TransparentWithSkip2,\n\t*\t\tTransparentWithSkip3: test_types_TransparentWithSkip3,\n\t*\t\tSkipVariant2: test_types_SkipVariant2,\n\t*\t\tSkipVariant3: test_types_SkipVariant3,\n\t*\t\tSkipStructFields: test_types_SkipStructFields,\n\t*\t\tSpectaSkipNonTypeField: test_types_SpectaSkipNonTypeField,\n\t*\t\tFlattenA: test_types_FlattenA,\n\t*\t\tFlattenB: test_types_FlattenB,\n\t*\t\tFlattenC: test_types_FlattenC,\n\t*\t\tFlattenD: test_types_FlattenD,\n\t*\t\tFlattenE: test_types_FlattenE,\n\t*\t\tFlattenF: test_types_FlattenF,\n\t*\t\tFlattenG: test_types_FlattenG,\n\t*\t\tTupleNested: test_types_TupleNested,\n\t*\t\t\"Generic1<()>\": test_types_Generic1<null>,\n\t*\t\t\"GenericAutoBound<()>\": test_types_GenericAutoBound<null>,\n\t*\t\t\"GenericAutoBound2<()>\": test_types_GenericAutoBound2<null>,\n\t*\t\tContainer1: test_types_Container1,\n\t*\t\t\"Generic2<(), String, i32>\": test_types_Generic2<null, string, number>,\n\t*\t\t\"GenericNewType1<()>\": test_types_GenericNewType1<null>,\n\t*\t\t\"GenericTuple<()>\": test_types_GenericTuple<null>,\n\t*\t\t\"GenericStruct2<()>\": test_types_GenericStruct2<null>,\n\t*\t\t\"InlineGenericNewtype<String>\": string,\n\t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t* \tvalue: string,\n\t* } }) & { Unnamed?: never }],\n\t*\t\t\"InlineFlattenGenericsG<()>\": test_types_InlineFlattenGenericsG<null>,\n\t*\t\tInlineFlattenGenerics: test_types_InlineFlattenGenerics,\n\t*\t\tGenericDefault: test_types_GenericDefault,\n\t*\t\tChainedGenericDefault: test_types_ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<String, String>\": test_types_ChainedGenericDefault,\n\t*\t\t\"ChainedGenericDefault<i32>\": test_types_ChainedGenericDefault<number, number>,\n\t*\t\t\"ChainedGenericDefault<String, i32>\": test_types_ChainedGenericDefault<string, number>,\n\t*\t\tGenericDefaultSkipped: test_types_GenericDefaultSkipped<string>,\n\t*\t\tGenericDefaultSkippedNonType: test_types_GenericDefaultSkippedNonType<unknown>,\n\t*\t\tGenericParameterOrderPreserved: test_types_GenericParameterOrderPreserved,\n\t*\t\tConstGenericInNonConstContainer: test_types_ConstGenericInNonConstContainer,\n\t*\t\tConstGenericInConstContainer: test_types_ConstGenericInConstContainer,\n\t*\t\tNamedConstGenericContainer: test_types_NamedConstGenericContainer,\n\t*\t\tInlineConstGenericContainer: test_types_InlineConstGenericContainer,\n\t*\t\tInlineRecursiveConstGenericContainer: test_types_InlineRecursiveConstGenericContainer,\n\t*\t\tTestCollectionRegister: test_types_TestCollectionRegister,\n\t*\t\tTestCollectionRegister: test_types_TestCollectionRegister,\n\t*\t}} Primitives\n\t* @property {number} i8\n\t* @property {number} i16\n\t* @property {number} i32\n\t* @property {number} u8\n\t* @property {number} u16\n\t* @property {number} u32\n\t* @property {number} f32\n\t* @property {number} f64\n\t* @property {boolean} bool\n\t* @property {string} char\n\t* @property {std_ops_Range<number>} \"Range<i32>\"\n\t* @property {std_ops_RangeInclusive<number>} \"RangeInclusive<i32>\"\n\t* @property {null} \"()\"\n\t* @property {[string, number]} \"(String, i32)\"\n\t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n\t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n\t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n\t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n\t* @property {string} String\n\t* @property {string} PathBuf\n\t* @property {string} IpAddr\n\t* @property {string} Ipv4Addr\n\t* @property {string} Ipv6Addr\n\t* @property {string} SocketAddr\n\t* @property {string} SocketAddrV4\n\t* @property {string} SocketAddrV6\n\t* @property {string} \"Cow<'static, str>\"\n\t* @property {number} \"Cow<'static, i32>\"\n\t* @property {string} \"&'static str\"\n\t* @property {boolean} \"&'static bool\"\n\t* @property {number} \"&'static i32\"\n\t* @property {number[]} \"Vec<i32>\"\n\t* @property {number[]} \"&'static [i32]\"\n\t* @property {[number, number, number]} \"&'static [i32; 3]\"\n\t* @property {[number, number, number]} \"[i32; 3]\"\n\t* @property {test_types_MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {test_types_MyEnum[]} \"&'static [MyEnum]\"\n\t* @property {[test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum]} \"&'static [MyEnum; 6]\"\n\t* @property {[test_types_MyEnum, test_types_MyEnum]} \"[MyEnum; 2]\"\n\t* @property {[number]} \"&'static [i32; 1]\"\n\t* @property {[]} \"&'static [i32; 0]\"\n\t* @property {number | null} \"Option<i32>\"\n\t* @property {null} \"Option<()>\"\n\t* @property {number[] | null} \"Option<Vec<i32>>\"\n\t* @property {std_result_Result<string, number>} \"Result<String, i32>\"\n\t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n\t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n\t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n\t* @property {string | null} \"Option<Option<String>>\"\n\t* @property {string | null} \"Option<Option<Option<String>>>\"\n\t* @property {null} \"PhantomData<()>\"\n\t* @property {null} \"PhantomData<String>\"\n\t* @property {never} Infallible\n\t* @property {test_types_Unit1} Unit1\n\t* @property {test_types_Unit2} Unit2\n\t* @property {test_types_Unit3} Unit3\n\t* @property {test_types_Unit4} Unit4\n\t* @property {test_types_Unit5} Unit5\n\t* @property {test_types_Unit6} Unit6\n\t* @property {test_types_Unit7} Unit7\n\t* @property {test_types_SimpleStruct} SimpleStruct\n\t* @property {test_types_TupleStruct1} TupleStruct1\n\t* @property {test_types_TupleStruct3} TupleStruct3\n\t* @property {test_types_TestEnum} TestEnum\n\t* @property {test_types_RefStruct} RefStruct\n\t* @property {test_types_InlinerStruct} InlinerStruct\n\t* @property {test_types_GenericStruct<number>} \"GenericStruct<i32>\"\n\t* @property {test_types_GenericStruct<string>} \"GenericStruct<String>\"\n\t* @property {test_types_FlattenEnumStruct} FlattenEnumStruct\n\t* @property {test_types_OverridenStruct} OverridenStruct\n\t* @property {test_types_HasGenericAlias} HasGenericAlias\n\t* @property {test_types_EnumMacroAttributes} EnumMacroAttributes\n\t* @property {test_types_InlineEnumField} InlineEnumField\n\t* @property {test_types_InlineOptionalType} InlineOptionalType\n\t* @property {test_types_Rename} Rename\n\t* @property {test_types_TransparentType} TransparentType\n\t* @property {test_types_TransparentType2} TransparentType2\n\t* @property {test_types_TransparentTypeWithOverride} TransparentTypeWithOverride\n\t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n\t* @property {Partial<{ [key in test_types_BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n\t* @property {Partial<{ [key in test_types_BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n\t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n\t* @property {test_types_PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n\t* @property {test_types_EnumReferenceRecordKey} EnumReferenceRecordKey\n\t* @property {test_types_FlattenOnNestedEnum} FlattenOnNestedEnum\n\t* @property {test_types_MyEmptyInput} MyEmptyInput\n\t* @property {string} \"(String)\"\n\t* @property {[string]} \"(String,)\"\n\t* @property {test_types_ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n\t* @property {test_types_ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n\t* @property {test_types_MyEnum[]} \"Vec<MyEnum>\"\n\t* @property {test_types_InlineTuple} InlineTuple\n\t* @property {test_types_InlineTuple2} InlineTuple2\n\t* @property {string} \"Box<str>\"\n\t* @property {string} \"Box<String>\"\n\t* @property {test_types_SkippedFieldWithinVariant} SkippedFieldWithinVariant\n\t* @property {test_types_KebabCase} KebabCase\n\t* @property {string[]} \"&[&str]\"\n\t* @property {test_types_Issue281} \"Issue281<'_>\"\n\t* @property {test_types_LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n\t* @property {test_types_LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n\t* @property {test_types_RenameWithWeirdCharsField} RenameWithWeirdCharsField\n\t* @property {test_types_RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n\t* @property {test_types_RenamedFieldKeys} RenamedFieldKeys\n\t* @property {test_types_RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n\t* @property {test_types_type_type_Type} \"type_type::Type\"\n\t* @property {test_types_ActualType} ActualType\n\t* @property {test_types_SpectaTypeOverride} SpectaTypeOverride\n\t* @property {test_types_ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n\t* @property {test_types_ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n\t* @property {test_types_ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n\t* @property {test_types_ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n\t* @property {test_types_ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n\t* @property {test_types_ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n\t* @property {test_types_InvalidToValidType} InvalidToValidType\n\t* @property {test_types_TupleStruct} TupleStruct\n\t* @property {test_types_TupleStructWithRep} TupleStructWithRep\n\t* @property {test_types_GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n\t* @property {test_types_BracedStruct} BracedStruct\n\t* @property {test_types_StructNew} Struct\n\t* @property {test_types_Struct2} Struct2\n\t* @property {test_types_Enum} Enum\n\t* @property {test_types_Enum2} Enum2\n\t* @property {test_types_Enum3} Enum3\n\t* @property {test_types_StructRenameAllUppercase} StructRenameAllUppercase\n\t* @property {test_types_RenameSerdeSpecialChar} RenameSerdeSpecialChar\n\t* @property {test_types_EnumRenameAllUppercase} EnumRenameAllUppercase\n\t* @property {test_types_Recursive} Recursive\n\t* @property {test_types_RecursiveMapValue} RecursiveMapValue\n\t* @property {test_types_RecursiveTransparent} RecursiveTransparent\n\t* @property {test_types_RecursiveInEnum} RecursiveInEnum\n\t* @property {test_types_NonOptional} NonOptional\n\t* @property {test_types_OptionalOnNamedField} OptionalOnNamedField\n\t* @property {test_types_OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n\t* @property {test_types_OptionalInEnum} OptionalInEnum\n\t* @property {test_types_UntaggedVariants} UntaggedVariants\n\t* @property {test_types_UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n\t* @property {test_types_UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n\t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n\t* @property {test_types_Regular} Regular\n\t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n\t* @property {{ [key in test_types_TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n\t* @property {Partial<{ [key in test_types_UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n\t* @property {Partial<{ [key in test_types_UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n\t* @property {test_types_ValidMaybeValidKey} ValidMaybeValidKey\n\t* @property {test_types_ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n\t* @property {test_types_MacroStruct} MacroStruct\n\t* @property {test_types_MacroStruct2} MacroStruct2\n\t* @property {test_types_MacroEnum} MacroEnum\n\t* @property {test_types_DeprecatedType} DeprecatedType\n\t* @property {test_types_DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n\t* @property {test_types_DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n\t* @property {test_types_DeprecatedFields} DeprecatedFields\n\t* @property {test_types_DeprecatedTupleVariant} DeprecatedTupleVariant\n\t* @property {test_types_DeprecatedEnumVariants} DeprecatedEnumVariants\n\t* @property {test_types_CommentedStruct} CommentedStruct\n\t* @property {test_types_CommentedEnum} CommentedEnum\n\t* @property {test_types_SingleLineComment} SingleLineComment\n\t* @property {test_types_Demo<number, boolean>} NonGeneric\n\t* @property {test_types_Demo<number, boolean>} \"HalfGenericA<u8>\"\n\t* @property {test_types_Demo<number, boolean>} \"HalfGenericB<bool>\"\n\t* @property {test_types_Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n\t* @property {test_types_Demo<number, boolean>} \"Another<bool>\"\n\t* @property {{ [key in string]: number }} \"MapA<u32>\"\n\t* @property {{ [key in number]: string }} \"MapB<u32>\"\n\t* @property {{ [key in string]: test_types_AGenericStruct<number> }} \"MapC<u32>\"\n\t* @property {test_types_AGenericStruct<number>} \"AGenericStruct<u32>\"\n\t* @property {test_types_A} A\n\t* @property {test_types_DoubleFlattened} DoubleFlattened\n\t* @property {test_types_FlattenedInner} FlattenedInner\n\t* @property {test_types_BoxFlattened} BoxFlattened\n\t* @property {test_types_BoxInline} BoxInline\n\t* @property {test_types_First} First\n\t* @property {test_types_Second} Second\n\t* @property {test_types_Third} Third\n\t* @property {test_types_Fourth} Fourth\n\t* @property {test_types_TagOnStructWithInline} TagOnStructWithInline\n\t* @property {test_types_Sixth} Sixth\n\t* @property {test_types_Seventh} Seventh\n\t* @property {test_types_Eight} Eight\n\t* @property {test_types_Ninth} Ninth\n\t* @property {test_types_Tenth} Tenth\n\t* @property {test_types_MyEnumTagged} MyEnumTagged\n\t* @property {test_types_MyEnumExternal} MyEnumExternal\n\t* @property {test_types_MyEnumAdjacent} MyEnumAdjacent\n\t* @property {test_types_MyEnumUntagged} MyEnumUntagged\n\t* @property {test_types_EmptyStruct} EmptyStruct\n\t* @property {test_types_EmptyStructWithTag} EmptyStructWithTag\n\t* @property {test_types_AdjacentlyTagged} AdjacentlyTagged\n\t* @property {test_types_LoadProjectEvent} LoadProjectEvent\n\t* @property {test_types_ExternallyTagged} ExternallyTagged\n\t* @property {test_types_Issue221External} Issue221External\n\t* @property {test_types_InternallyTaggedD} InternallyTaggedD\n\t* @property {test_types_InternallyTaggedE} InternallyTaggedE\n\t* @property {test_types_InternallyTaggedF} InternallyTaggedF\n\t* @property {test_types_InternallyTaggedH} InternallyTaggedH\n\t* @property {test_types_InternallyTaggedL} InternallyTaggedL\n\t* @property {test_types_InternallyTaggedM} InternallyTaggedM\n\t* @property {test_types_StructWithAlias} StructWithAlias\n\t* @property {test_types_StructWithMultipleAliases} StructWithMultipleAliases\n\t* @property {test_types_StructWithAliasAndRename} StructWithAliasAndRename\n\t* @property {test_types_EnumWithVariantAlias} EnumWithVariantAlias\n\t* @property {test_types_EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n\t* @property {test_types_EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n\t* @property {test_types_InternallyTaggedWithAlias} InternallyTaggedWithAlias\n\t* @property {test_types_AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n\t* @property {test_types_UntaggedWithAlias} UntaggedWithAlias\n\t* @property {test_types_Issue221UntaggedSafe} Issue221UntaggedSafe\n\t* @property {test_types_Issue221UntaggedMixed} Issue221UntaggedMixed\n\t* @property {test_types_EmptyEnum} EmptyEnum\n\t* @property {test_types_EmptyEnumTagged} EmptyEnumTagged\n\t* @property {test_types_EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n\t* @property {test_types_EmptyEnumUntagged} EmptyEnumUntagged\n\t* @property {test_types_SkipOnlyField} SkipOnlyField\n\t* @property {test_types_SkipField} SkipField\n\t* @property {test_types_SkipVariant} SkipVariant\n\t* @property {test_types_SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n\t* @property {test_types_SkipNamedFieldInVariant} SkipNamedFieldInVariant\n\t* @property {test_types_TransparentWithSkip} TransparentWithSkip\n\t* @property {test_types_TransparentWithSkip2} TransparentWithSkip2\n\t* @property {test_types_TransparentWithSkip3} TransparentWithSkip3\n\t* @property {test_types_SkipVariant2} SkipVariant2\n\t* @property {test_types_SkipVariant3} SkipVariant3\n\t* @property {test_types_SkipStructFields} SkipStructFields\n\t* @property {test_types_SpectaSkipNonTypeField} SpectaSkipNonTypeField\n\t* @property {test_types_FlattenA} FlattenA\n\t* @property {test_types_FlattenB} FlattenB\n\t* @property {test_types_FlattenC} FlattenC\n\t* @property {test_types_FlattenD} FlattenD\n\t* @property {test_types_FlattenE} FlattenE\n\t* @property {test_types_FlattenF} FlattenF\n\t* @property {test_types_FlattenG} FlattenG\n\t* @property {test_types_TupleNested} TupleNested\n\t* @property {test_types_Generic1<null>} \"Generic1<()>\"\n\t* @property {test_types_GenericAutoBound<null>} \"GenericAutoBound<()>\"\n\t* @property {test_types_GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n\t* @property {test_types_Container1} Container1\n\t* @property {test_types_Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n\t* @property {test_types_GenericNewType1<null>} \"GenericNewType1<()>\"\n\t* @property {test_types_GenericTuple<null>} \"GenericTuple<()>\"\n\t* @property {test_types_GenericStruct2<null>} \"GenericStruct2<()>\"\n\t* @property {string} \"InlineGenericNewtype<String>\"\n\t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t* \tvalue: string,\n\t* } }) & { Unnamed?: never }]} \"InlineGenericNested<String>\"\n\t* @property {test_types_InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n\t* @property {test_types_InlineFlattenGenerics} InlineFlattenGenerics\n\t* @property {test_types_GenericDefault} GenericDefault\n\t* @property {test_types_ChainedGenericDefault} ChainedGenericDefault\n\t* @property {test_types_ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n\t* @property {test_types_ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n\t* @property {test_types_ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n\t* @property {test_types_GenericDefaultSkipped<string>} GenericDefaultSkipped\n\t* @property {test_types_GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n\t* @property {test_types_GenericParameterOrderPreserved} GenericParameterOrderPreserved\n\t* @property {test_types_ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n\t* @property {test_types_ConstGenericInConstContainer} ConstGenericInConstContainer\n\t* @property {test_types_NamedConstGenericContainer} NamedConstGenericContainer\n\t* @property {test_types_InlineConstGenericContainer} InlineConstGenericContainer\n\t* @property {test_types_InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n\t* @property {test_types_TestCollectionRegister} TestCollectionRegister\n\t* @property {test_types_TestCollectionRegister} TestCollectionRegister\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tdemo: test_types_Recursive,\n\t*\t}} Recursive\n\t* @property {test_types_Recursive} demo\n\t*\n\t* @typedef {{ A: {\n\t* \tdemo: test_types_RecursiveInEnum,\n\t* } }} RecursiveInEnum\n\t* @property {{ A: {\n\t* \tdemo: test_types_RecursiveInEnum,\n\t* } }} A\n\t*\n\t* @typedef {test_types_RecursiveInline} RecursiveInline\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: test_types_RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: test_types_RecursiveMapValue }} demo\n\t*\n\t* @typedef {test_types_RecursiveInline} RecursiveTransparent\n\t* @property {test_types_RecursiveInline} \"0\"\n\t*\n\t* @typedef {test_types_TestEnum} RefStruct\n\t* @property {test_types_TestEnum} \"0\"\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*\n\t* @typedef {{\n\t*\t\tok: T,\n\t*\t\terr: E,\n\t*\t}} Result<T, E>\n\t* @property {T} ok\n\t* @property {E} err\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: test_types_Second,\n\t*\t}} Seventh\n\t* @property {test_types_First} a\n\t* @property {test_types_Second} b\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**  Some single-line comment */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**  Some single-line comment */\n\t* ({ B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**  Some single-line comment */\n\t* { B: {\n\t* \t/**  Some single-line comment */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: test_types_First,\n\t*\t\tb: test_types_First,\n\t*\t}} Sixth\n\t* @property {test_types_First} a\n\t* @property {test_types_First} b\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*\n\t* @typedef {test_types_StructPhaseSpecificRenameSerialize | test_types_StructPhaseSpecificRenameDeserialize} StructPhaseSpecificRename\n\t* @property {test_types_StructPhaseSpecificRenameSerialize} Serialize\n\t* @property {test_types_StructPhaseSpecificRenameDeserialize} Deserialize\n\t*\n\t* @typedef {{\n\t*\t\tkind: \"StructPhaseSpecificRenameDeserialize\",\n\t*\t\tder: string,\n\t*\t}} StructPhaseSpecificRenameDeserialize\n\t* @property {\"StructPhaseSpecificRenameDeserialize\"} kind\n\t* @property {string} der\n\t*\n\t* @typedef {{\n\t*\t\tkind: \"StructPhaseSpecificRenameSerialize\",\n\t*\t\tser: string,\n\t*\t}} StructPhaseSpecificRenameSerialize\n\t* @property {\"StructPhaseSpecificRenameSerialize\"} kind\n\t* @property {string} ser\n\t*\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: test_types_First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {test_types_First} a\n\t* @property {{\n\t*\t\ta: string,\n\t*\t}} b\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | test_types_First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {test_types_First} D\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: test_types_First,\n\t*\t} & test_types_First} Third\n\t* @property {{ [key in string]: string }} b\n\t* @property {test_types_First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} ToBeFlattened\n\t* @property {string} a\n\t*\n\t* @typedef {string} TransparentStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {test_types_TransparentTypeInner} TransparentType\n\t* @property {test_types_TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinner: string,\n\t*\t}} TransparentTypeInner\n\t* @property {string} inner\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*\n\t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {\"C\"} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | number} UntaggedVariantsKey\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {{ [key in test_types_MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in test_types_MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in test_types_MaybeValidKey<test_types_MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in test_types_MaybeValidKey<test_types_MaybeValidKey<string>>]: null }} \"0\"\n\t*/\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-namespaces-raw.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\njsdoc-export-to-namespaces-raw (65864 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n\nnamespace $s$ {\n\n\texport namespace std {\n\n\t\texport namespace ops {\n\t\t\t/**\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tstart: T,\n\t\t\t\t*\t\tend: T,\n\t\t\t\t*\t}} Range<T>\n\t\t\t\t* @property {T} start\n\t\t\t\t* @property {T} end\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tstart: T,\n\t\t\t\t*\t\tend: T,\n\t\t\t\t*\t}} RangeInclusive<T>\n\t\t\t\t* @property {T} start\n\t\t\t\t* @property {T} end\n\t\t\t\t*/\n\t\t}\n\n\t\texport namespace result {\n\t\t\t/**\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tok: T,\n\t\t\t\t*\t\terr: E,\n\t\t\t\t*\t}} Result<T, E>\n\t\t\t\t* @property {T} ok\n\t\t\t\t* @property {E} err\n\t\t\t\t*/\n\t\t}\n\t}\n\n\texport namespace test {\n\n\t\texport namespace types {\n\t\t\t/**\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.B,\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\tb: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tc: $s$.test.types.B,\n\t\t\t\t*\t\td: {\n\t\t\t\t*\t\t\tflattened: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\te: {\n\t\t\t\t*\t\t\tgeneric_flattened: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} A\n\t\t\t\t* @property {$s$.test.types.B} a\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {$s$.test.types.B} c\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tflattened: number,\n\t\t\t\t*\t}} d\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tgeneric_flattened: number,\n\t\t\t\t*\t}} e\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: $s$.test.types.Demo<T, boolean>,\n\t\t\t\t*\t}} AGenericStruct<T>\n\t\t\t\t* @property {$s$.test.types.Demo<T, boolean>} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.GenericType<string>,\n\t\t\t\t*\t}} ActualType\n\t\t\t\t* @property {$s$.test.types.GenericType<string>} a\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | { id: string; method: string } | string} AdjacentlyTagged\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {{ id: string; method: string }} B\n\t\t\t\t* @property {string} C\n\t\t\t\t*\n\t\t\t\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} AdjacentlyTaggedWithAlias\n\t\t\t\t* @property {{ field: string }} A\n\t\t\t\t* @property {{ other: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} B\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} BasicEnum\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: $s$.test.types.BoxedInner,\n\t\t\t\t*\t}} BoxFlattened\n\t\t\t\t* @property {$s$.test.types.BoxedInner} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tc: {\n\t\t\t\t*\t\t\ta: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} BoxInline\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} BoxedInner\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {string} BracedStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfirst: T,\n\t\t\t\t*\t\tsecond: U,\n\t\t\t\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t\t\t\t* @property {T} first\n\t\t\t\t* @property {U} second\n\t\t\t\t*\n\t\t\t\t*  Some triple-slash comment\n\t\t\t\t*  Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t* @typedef {\n\t\t\t\t*\t/**\n\t\t\t\t*\t *  Some triple-slash comment\n\t\t\t\t*\t *  Some more triple-slash comment\n\t\t\t\t*\t */\n\t\t\t\t* number | \n\t\t\t\t*\t/**\n\t\t\t\t*\t *  Some triple-slash comment\n\t\t\t\t*\t *  Some more triple-slash comment\n\t\t\t\t*\t */\n\t\t\t\t* { \n\t\t\t\t*\t/**\n\t\t\t\t*\t *  Some triple-slash comment\n\t\t\t\t*\t *  Some more triple-slash comment\n\t\t\t\t*\t */\n\t\t\t\t* a: number }} CommentedEnum\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  *  Some triple-slash comment\n\t\t\t\t*  *  Some more triple-slash comment\n\t\t\t\t*  */\n\t\t\t\t* number} A - Some triple-slash comment Some more triple-slash comment\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  *  Some triple-slash comment\n\t\t\t\t*  *  Some more triple-slash comment\n\t\t\t\t*  */\n\t\t\t\t* { \n\t\t\t\t* /**\n\t\t\t\t*  *  Some triple-slash comment\n\t\t\t\t*  *  Some more triple-slash comment\n\t\t\t\t*  */\n\t\t\t\t* a: number }} B - Some triple-slash comment Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t*  Some triple-slash comment\n\t\t\t\t*  Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t *  Some triple-slash comment\n\t\t\t\t*\t\t *  Some more triple-slash comment\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} CommentedStruct\n\t\t\t\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: number[],\n\t\t\t\t*\t\ta: number[],\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} ConstGenericInConstContainer\n\t\t\t\t* @property {number[]} data\n\t\t\t\t* @property {number[]} a\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: [number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} ConstGenericInNonConstContainer\n\t\t\t\t* @property {[number]} data\n\t\t\t\t* @property {[number, number]} a\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfoo: $s$.test.types.Generic1<number>,\n\t\t\t\t*\t\tbar: $s$.test.types.Generic1<number>[],\n\t\t\t\t*\t\tbaz: { [key in string]: $s$.test.types.Generic1<string> },\n\t\t\t\t*\t}} Container1\n\t\t\t\t* @property {$s$.test.types.Generic1<number>} foo\n\t\t\t\t* @property {$s$.test.types.Generic1<number>[]} bar\n\t\t\t\t* @property {{ [key in string]: $s$.test.types.Generic1<string> }} baz\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ContainerTypeOverrideEnum\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ContainerTypeOverrideGeneric\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ContainerTypeOverrideStruct\n\t\t\t\t*\n\t\t\t\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t\t\t\t*\n\t\t\t\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t\t\t\t*\n\t\t\t\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tflattened: number,\n\t\t\t\t*\t}} D\n\t\t\t\t* @property {number} flattened\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: A,\n\t\t\t\t*\t\tb: B,\n\t\t\t\t*\t}} Demo<A, B>\n\t\t\t\t* @property {A} a\n\t\t\t\t* @property {B} b\n\t\t\t\t*\n\t\t\t\t* @typedef {\n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated\n\t\t\t\t*\t */\n\t\t\t\t* \"A\" | \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* \"B\" | \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* \"C\"} DeprecatedEnumVariants\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  * @deprecated\n\t\t\t\t*  */\n\t\t\t\t* \"A\"} A - @deprecated\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  * @deprecated Nope\n\t\t\t\t*  */\n\t\t\t\t* \"B\"} B - @deprecated Nope\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  * @deprecated Nope\n\t\t\t\t*  */\n\t\t\t\t* \"C\"} C - @deprecated Nope\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t * @deprecated\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\tb: string,\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t * @deprecated This field is cringe!\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\tc: string,\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t * @deprecated This field is cringe!\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\td: string,\n\t\t\t\t*\t}} DeprecatedFields\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {string} b - @deprecated\n\t\t\t\t* @property {string} c - @deprecated This field is cringe!\n\t\t\t\t* @property {string} d - @deprecated This field is cringe!\n\t\t\t\t*\n\t\t\t\t* @typedef {[\n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated\n\t\t\t\t*\t */\n\t\t\t\t* string, \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* string, \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* number]} DeprecatedTupleVariant\n\t\t\t\t* @property {string} \"0\" - @deprecated\n\t\t\t\t* @property {string} \"1\" - @deprecated Nope\n\t\t\t\t* @property {number} \"2\" - @deprecated Nope\n\t\t\t\t*\n\t\t\t\t* @deprecated\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} DeprecatedType\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @deprecated Look at you big man using a deprecation message\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} DeprecatedTypeWithMsg\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @deprecated Look at you big man using a deprecation message\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} DeprecatedTypeWithMsg2\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.ToBeFlattened,\n\t\t\t\t*\t\tb: $s$.test.types.ToBeFlattened,\n\t\t\t\t*\t}} DoubleFlattened\n\t\t\t\t* @property {$s$.test.types.ToBeFlattened} a\n\t\t\t\t* @property {$s$.test.types.ToBeFlattened} b\n\t\t\t\t*\n\t\t\t\t* @typedef {string | \"B\"} Eight\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnum\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnumTagged\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnumTaggedWContent\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnumUntagged\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} EmptyStruct\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} EmptyStructWithTag\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} Enum\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\" | { enum_field: null }} Enum2\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t* @property {{ enum_field: null }} D\n\t\t\t\t*\n\t\t\t\t* @typedef {{ a: string }} Enum3\n\t\t\t\t* @property {{ a: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {string | number | { a: string; b: number }} EnumMacroAttributes\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {number} C\n\t\t\t\t* @property {{ a: string; b: number }} D\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t\t*\t}} EnumReferenceRecordKey\n\t\t\t\t* @property {Partial<{ [key in $s$.test.types.BasicEnum]: number }>} a\n\t\t\t\t*\n\t\t\t\t* @typedef {\"HelloWorld\" | \"VariantB\" | \"TestingWords\"} EnumRenameAllUppercase\n\t\t\t\t* @property {\"HelloWorld\"} HelloWorld\n\t\t\t\t* @property {\"VariantB\"} VariantB\n\t\t\t\t* @property {\"TestingWords\"} TestingWords\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t\t\t\t* @property {\"Variant\"} Variant\n\t\t\t\t* @property {\"Other\"} Other\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t\t\t\t* @property {\"Variant\"} Variant\n\t\t\t\t* @property {\"Other\"} Other\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t\t\t\t* @property {\"Variant\"} Variant\n\t\t\t\t* @property {\"Other\"} Other\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | { id: string; method: string } | string} ExternallyTagged\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {{ id: string; method: string }} B\n\t\t\t\t* @property {string} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ExtraBracketsInTupleVariant\n\t\t\t\t* @property {string} A\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} First\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} FlattenA\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}} FlattenB\n\t\t\t\t* @property {$s$.test.types.FlattenA} a\n\t\t\t\t* @property {number} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}} FlattenC\n\t\t\t\t* @property {$s$.test.types.FlattenA} a\n\t\t\t\t* @property {number} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}} FlattenD\n\t\t\t\t* @property {$s$.test.types.FlattenA} a\n\t\t\t\t* @property {number} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t*\t\t\tc: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\td: number,\n\t\t\t\t*\t}} FlattenE\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {number} d\n\t\t\t\t*\n\t\t\t\t* @typedef {\"One\" | \"Two\" | \"Three\"} FlattenEnum\n\t\t\t\t* @property {\"One\"} One\n\t\t\t\t* @property {\"Two\"} Two\n\t\t\t\t* @property {\"Three\"} Three\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\touter: string,\n\t\t\t\t*\t\tinner: $s$.test.types.FlattenEnum,\n\t\t\t\t*\t}} FlattenEnumStruct\n\t\t\t\t* @property {string} outer\n\t\t\t\t* @property {$s$.test.types.FlattenEnum} inner\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t*\t\t\tc: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\td: number,\n\t\t\t\t*\t}} FlattenF\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {number} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: $s$.test.types.FlattenB,\n\t\t\t\t*\t\td: number,\n\t\t\t\t*\t}} FlattenG\n\t\t\t\t* @property {$s$.test.types.FlattenB} b\n\t\t\t\t* @property {number} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tid: string,\n\t\t\t\t*\t\tresult: $s$.test.types.NestedEnum,\n\t\t\t\t*\t}} FlattenOnNestedEnum\n\t\t\t\t* @property {string} id\n\t\t\t\t* @property {$s$.test.types.NestedEnum} result\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tc: $s$.test.types.Inner,\n\t\t\t\t*\t}} FlattenedInner\n\t\t\t\t* @property {$s$.test.types.Inner} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\ta: string,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} Fourth\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t\tvalues: T[],\n\t\t\t\t*\t}} Generic1<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t* @property {T[]} values\n\t\t\t\t*\n\t\t\t\t* @typedef {A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][]} Generic2<A, B, C>\n\t\t\t\t* @property {A} A\n\t\t\t\t* @property {[B, B, B]} B\n\t\t\t\t* @property {C[]} C\n\t\t\t\t* @property {A[][][]} D\n\t\t\t\t* @property {{ a: A; b: B; c: C }} E\n\t\t\t\t* @property {number[]} X\n\t\t\t\t* @property {number} Y\n\t\t\t\t* @property {number[][]} Z\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t\tvalues: T[],\n\t\t\t\t*\t}} GenericAutoBound<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t* @property {T[]} values\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t\tvalues: T[],\n\t\t\t\t*\t}} GenericAutoBound2<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t* @property {T[]} values\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t}} GenericDefault<T = string>\n\t\t\t\t* @property {T} value\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t}} GenericDefaultSkipped<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: number,\n\t\t\t\t*\t}} GenericDefaultSkippedNonType<T>\n\t\t\t\t* @property {number} value\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tgeneric_flattened: T,\n\t\t\t\t*\t}} GenericFlattened<T>\n\t\t\t\t* @property {T} generic_flattened\n\t\t\t\t*\n\t\t\t\t* @typedef {T[][]} GenericNewType1<T>\n\t\t\t\t* @property {T[][]} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tpair: $s$.test.types.Pair<number, string>,\n\t\t\t\t*\t}} GenericParameterOrderPreserved\n\t\t\t\t* @property {$s$.test.types.Pair<number, string>} pair\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\targ: T,\n\t\t\t\t*\t}} GenericStruct<T>\n\t\t\t\t* @property {T} arg\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: T,\n\t\t\t\t*\t\tb: [T, T],\n\t\t\t\t*\t\tc: [T, [T, T]],\n\t\t\t\t*\t\td: [T, T, T],\n\t\t\t\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t\t\t\t*\t\tf: T[],\n\t\t\t\t*\t\tg: T[][],\n\t\t\t\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t\t\t\t*\t}} GenericStruct2<T>\n\t\t\t\t* @property {T} a\n\t\t\t\t* @property {[T, T]} b\n\t\t\t\t* @property {[T, [T, T]]} c\n\t\t\t\t* @property {[T, T, T]} d\n\t\t\t\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t\t\t\t* @property {T[]} f\n\t\t\t\t* @property {T[][]} g\n\t\t\t\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t\t\t\t*\n\t\t\t\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t\t\t\t* @property {T} \"0\"\n\t\t\t\t* @property {T[]} \"1\"\n\t\t\t\t* @property {T[][]} \"2\"\n\t\t\t\t*\n\t\t\t\t* @typedef {T} GenericTupleStruct<T>\n\t\t\t\t* @property {T} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Undefined\" | T} GenericType<T>\n\t\t\t\t* @property {\"Undefined\"} Undefined\n\t\t\t\t* @property {T} Value\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t\t\t\t* @property {{ [key in number]: string }} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\tdata: [number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tc: {\n\t\t\t\t*\t\t\tdata: [number, number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} InlineConstGenericContainer\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t}} c\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t* \ta: string,\n\t\t\t\t* }} InlineEnumField\n\t\t\t\t* @property {{\n\t\t\t\t* \ta: string,\n\t\t\t\t* }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tg: $s$.test.types.InlineFlattenGenericsG<string>,\n\t\t\t\t*\t\tgi: {\n\t\t\t\t*\t\t\tt: string,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tt: $s$.test.types.InlineFlattenGenericsG<string>,\n\t\t\t\t*\t}} InlineFlattenGenerics\n\t\t\t\t* @property {$s$.test.types.InlineFlattenGenericsG<string>} g\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tt: string,\n\t\t\t\t*\t}} gi\n\t\t\t\t* @property {$s$.test.types.InlineFlattenGenericsG<string>} t\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tt: T,\n\t\t\t\t*\t}} InlineFlattenGenericsG<T>\n\t\t\t\t* @property {T} t\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\toptional_field: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | null,\n\t\t\t\t*\t}} InlineOptionalType\n\t\t\t\t* @property {{\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | null} optional_field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: number[],\n\t\t\t\t*\t\ta: number[],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t}} InlineRecursiveConstGeneric\n\t\t\t\t* @property {number[]} data\n\t\t\t\t* @property {number[]} a\n\t\t\t\t* @property {[number, number, number]} d\n\t\t\t\t* @property {$s$.test.types.InlineRecursiveConstGeneric} e\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\tdata: [number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tc: {\n\t\t\t\t*\t\t\tdata: [number, number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} InlineRecursiveConstGenericContainer\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t}} c\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t*\t\tval: number,\n\t\t\t\t*\t}} InlineStruct\n\t\t\t\t* @property {$s$.test.types.SimpleStruct} ref_struct\n\t\t\t\t* @property {number} val\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: [string, boolean],\n\t\t\t\t*\t}} InlineTuple\n\t\t\t\t* @property {[string, boolean]} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: [{\n\t\t\t\t* \tdemo: [string, boolean],\n\t\t\t\t* }, boolean],\n\t\t\t\t*\t}} InlineTuple2\n\t\t\t\t* @property {[{\n\t\t\t\t* \tdemo: [string, boolean],\n\t\t\t\t* }, boolean]} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tinline_this: {\n\t\t\t\t*\t\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t*\t\t\tval: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tdont_inline_this: $s$.test.types.RefStruct,\n\t\t\t\t*\t}} InlinerStruct\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t*\t\tval: number,\n\t\t\t\t*\t}} inline_this\n\t\t\t\t* @property {$s$.test.types.RefStruct} dont_inline_this\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\tb: $s$.test.types.FlattenedInner,\n\t\t\t\t*\t}} Inner\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {$s$.test.types.FlattenedInner} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in string]: string }} InternallyTaggedD\n\t\t\t\t* @property {{ [key in string]: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {null} InternallyTaggedE\n\t\t\t\t* @property {null} A\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.InternallyTaggedFInner} InternallyTaggedF\n\t\t\t\t* @property {$s$.test.types.InternallyTaggedFInner} A\n\t\t\t\t*\n\t\t\t\t* @typedef {null} InternallyTaggedFInner\n\t\t\t\t* @property {null} A\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.InternallyTaggedHInner} InternallyTaggedH\n\t\t\t\t* @property {$s$.test.types.InternallyTaggedHInner} A\n\t\t\t\t*\n\t\t\t\t* @typedef {null} InternallyTaggedHInner\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} InternallyTaggedL\n\t\t\t\t* @property {\"A\" | \"B\"} A\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} InternallyTaggedLInner\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} InternallyTaggedM\n\t\t\t\t* @property {\"A\" | \"B\"} A\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} InternallyTaggedWithAlias\n\t\t\t\t* @property {{ field: string }} A\n\t\t\t\t* @property {{ other: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tcause: null,\n\t\t\t\t*\t}} InvalidToValidType\n\t\t\t\t* @property {null} cause\n\t\t\t\t*\n\t\t\t\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221External\n\t\t\t\t* @property {{ a: string }} A\n\t\t\t\t* @property {{ b: string }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t\t\t\t* @property {{ a: string }} A\n\t\t\t\t* @property {{ b: string }} B\n\t\t\t\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t\t\t\t*\n\t\t\t\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t\t\t\t* @property {{ a: string }} A\n\t\t\t\t* @property {{ b: string }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdefault_unity_arguments: string[],\n\t\t\t\t*\t}} Issue281\n\t\t\t\t* @property {string[]} default_unity_arguments\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ttest_ing: string,\n\t\t\t\t*\t}} KebabCase\n\t\t\t\t* @property {string} test_ing\n\t\t\t\t*\n\t\t\t\t* @typedef {T} LifetimeGenericEnum<T>\n\t\t\t\t* @property {T} Borrowed\n\t\t\t\t* @property {T} Owned\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tborrowed: T[],\n\t\t\t\t*\t\towned: T[],\n\t\t\t\t*\t}} LifetimeGenericStruct<T>\n\t\t\t\t* @property {T[]} borrowed\n\t\t\t\t* @property {T[]} owned\n\t\t\t\t*\n\t\t\t\t* @typedef {({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number }} LoadProjectEvent\n\t\t\t\t* @property {{ project_name: string }} Started\n\t\t\t\t* @property {{ project_name: string; status: string; progress: number }} ProgressTest\n\t\t\t\t* @property {{ project_name: string }} Finished\n\t\t\t\t*\n\t\t\t\t* @typedef {string | { demo2: string }} MacroEnum\n\t\t\t\t* @property {string} Demo\n\t\t\t\t* @property {{ demo2: string }} Demo2\n\t\t\t\t*\n\t\t\t\t* @typedef {string} MacroStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: string,\n\t\t\t\t*\t}} MacroStruct2\n\t\t\t\t* @property {string} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {T} MaybeValidKey<T>\n\t\t\t\t* @property {T} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} MyEmptyInput\n\t\t\t\t*\n\t\t\t\t* @typedef {string | number} MyEnum\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {number} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ inner: $s$.test.types.First }} MyEnumAdjacent\n\t\t\t\t* @property {{ inner: $s$.test.types.First }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{ inner: $s$.test.types.First }} MyEnumExternal\n\t\t\t\t* @property {{ inner: $s$.test.types.First }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{ inner: $s$.test.types.First }} MyEnumTagged\n\t\t\t\t* @property {{ inner: $s$.test.types.First }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{ inner: $s$.test.types.First }} MyEnumUntagged\n\t\t\t\t* @property {{ inner: $s$.test.types.First }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: number[],\n\t\t\t\t*\t\ta: number[],\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} NamedConstGeneric\n\t\t\t\t* @property {number[]} data\n\t\t\t\t* @property {number[]} a\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.NamedConstGeneric,\n\t\t\t\t*\t\tb: $s$.test.types.NamedConstGeneric,\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} NamedConstGenericContainer\n\t\t\t\t* @property {$s$.test.types.NamedConstGeneric} a\n\t\t\t\t* @property {$s$.test.types.NamedConstGeneric} b\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {string | number} NestedEnum\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {number} B\n\t\t\t\t*\n\t\t\t\t* @typedef {string | \"B\" | {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | $s$.test.types.First} Ninth\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t* @property {{\n\t\t\t\t* \ta: string,\n\t\t\t\t* }} C\n\t\t\t\t* @property {$s$.test.types.First} D\n\t\t\t\t*\n\t\t\t\t* @typedef {string | null} NonOptional\n\t\t\t\t* @property {string | null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string | null | { a: string | null } | { a?: string | null }} OptionalInEnum\n\t\t\t\t* @property {string | null} A\n\t\t\t\t* @property {{ a: string | null }} B\n\t\t\t\t* @property {{ a?: string | null }} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string | null} OptionalOnNamedField\n\t\t\t\t* @property {string | null} [\"0\"]\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: string | null,\n\t\t\t\t*\t}} OptionalOnTransparentNamedField\n\t\t\t\t* @property {string | null} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\toverriden_field: string,\n\t\t\t\t*\t}} OverridenStruct\n\t\t\t\t* @property {string} overriden_field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfirst: Z,\n\t\t\t\t*\t\tsecond: A,\n\t\t\t\t*\t}} Pair<Z, A>\n\t\t\t\t* @property {Z} first\n\t\t\t\t* @property {A} second\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} PlaceholderInnerField\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: $s$.test.types.Recursive,\n\t\t\t\t*\t}} Recursive\n\t\t\t\t* @property {$s$.test.types.Recursive} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{ demo: $s$.test.types.RecursiveInEnum }} RecursiveInEnum\n\t\t\t\t* @property {{ demo: $s$.test.types.RecursiveInEnum }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: $s$.test.types.RecursiveInline,\n\t\t\t\t*\t}} RecursiveInline\n\t\t\t\t* @property {$s$.test.types.RecursiveInline} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: { [key in string]: $s$.test.types.RecursiveMapValue },\n\t\t\t\t*\t}} RecursiveMapValue\n\t\t\t\t* @property {{ [key in string]: $s$.test.types.RecursiveMapValue }} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.RecursiveInline} RecursiveTransparent\n\t\t\t\t* @property {$s$.test.types.RecursiveInline} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.TestEnum} RefStruct\n\t\t\t\t* @property {$s$.test.types.TestEnum} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in string]: null }} Regular\n\t\t\t\t* @property {{ [key in string]: null }} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"OneWord\" | \"TwoWords\"} Rename\n\t\t\t\t* @property {\"OneWord\"} OneWord\n\t\t\t\t* @property {\"TwoWords\"} TwoWords\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} RenameSerdeSpecialChar\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\todata_context: string,\n\t\t\t\t*\t}} RenameWithWeirdCharsField\n\t\t\t\t* @property {string} odata_context\n\t\t\t\t*\n\t\t\t\t* @typedef {string} RenameWithWeirdCharsVariant\n\t\t\t\t* @property {string} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tempty: string,\n\t\t\t\t*\t\tquote: string,\n\t\t\t\t*\t\tbackslash: string,\n\t\t\t\t*\t\tnewline: string,\n\t\t\t\t*\t\tline_separator: string,\n\t\t\t\t*\t\tparagraph_separator: string,\n\t\t\t\t*\t}} RenamedFieldKeys\n\t\t\t\t* @property {string} empty\n\t\t\t\t* @property {string} quote\n\t\t\t\t* @property {string} backslash\n\t\t\t\t* @property {string} newline\n\t\t\t\t* @property {string} line_separator\n\t\t\t\t* @property {string} paragraph_separator\n\t\t\t\t*\n\t\t\t\t* @typedef {never} RenamedVariantWithSkippedPayload\n\t\t\t\t* @property {never} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} Second\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: $s$.test.types.Second,\n\t\t\t\t*\t}} Seventh\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {$s$.test.types.Second} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\tb: string,\n\t\t\t\t*\t\tc: [number, string, number],\n\t\t\t\t*\t\td: string[],\n\t\t\t\t*\t\te: string | null,\n\t\t\t\t*\t}} SimpleStruct\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {string} b\n\t\t\t\t* @property {[number, string, number]} c\n\t\t\t\t* @property {string[]} d\n\t\t\t\t* @property {string | null} e\n\t\t\t\t*\n\t\t\t\t*  Some single-line comment\n\t\t\t\t*\n\t\t\t\t* @typedef {\n\t\t\t\t*\t/**  Some single-line comment */\n\t\t\t\t* number | \n\t\t\t\t*\t/**  Some single-line comment */\n\t\t\t\t* { \n\t\t\t\t*\t/**  Some single-line comment */\n\t\t\t\t* a: number }} SingleLineComment\n\t\t\t\t* @property {\n\t\t\t\t* /**  Some single-line comment */\n\t\t\t\t* number} A - Some single-line comment\n\t\t\t\t* @property {\n\t\t\t\t* /**  Some single-line comment */\n\t\t\t\t* { \n\t\t\t\t* /**  Some single-line comment */\n\t\t\t\t* a: number }} B - Some single-line comment\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: $s$.test.types.First,\n\t\t\t\t*\t}} Sixth\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {$s$.test.types.First} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} SkipField\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never> | { b: number }} SkipNamedFieldInVariant\n\t\t\t\t* @property {Record<string, never>} A\n\t\t\t\t* @property {{ b: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} SkipOnlyField\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} SkipStructFields\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {never | [number]} SkipUnnamedFieldInVariant\n\t\t\t\t* @property {never} A\n\t\t\t\t* @property {[number]} B\n\t\t\t\t*\n\t\t\t\t* @typedef {string} SkipVariant\n\t\t\t\t* @property {string} A\n\t\t\t\t*\n\t\t\t\t* @typedef {string} SkipVariant2\n\t\t\t\t* @property {string} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ a: string }} SkipVariant3\n\t\t\t\t* @property {{ a: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {never | string} SkippedFieldWithinVariant\n\t\t\t\t* @property {never} A\n\t\t\t\t* @property {string} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} SpectaSkipNonTypeField\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tstring_ident: string,\n\t\t\t\t*\t\tu32_ident: number,\n\t\t\t\t*\t\tpath: string,\n\t\t\t\t*\t\ttuple: [string, number],\n\t\t\t\t*\t}} SpectaTypeOverride\n\t\t\t\t* @property {string} string_ident\n\t\t\t\t* @property {number} u32_ident\n\t\t\t\t* @property {string} path\n\t\t\t\t* @property {[string, number]} tuple\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} Struct\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} Struct2\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} StructRenameAllUppercase\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: string,\n\t\t\t\t*\t}} StructWithAlias\n\t\t\t\t* @property {string} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: string,\n\t\t\t\t*\t}} StructWithAliasAndRename\n\t\t\t\t* @property {string} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: string,\n\t\t\t\t*\t}} StructWithMultipleAliases\n\t\t\t\t* @property {string} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\ta: string,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} TagOnStructWithInline\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} b\n\t\t\t\t*\n\t\t\t\t* @typedef {string | \"B\" | {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | $s$.test.types.First} Tenth\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t* @property {{\n\t\t\t\t* \ta: string,\n\t\t\t\t* }} C\n\t\t\t\t* @property {$s$.test.types.First} D\n\t\t\t\t*\n\t\t\t\t* @typedef {never} TestCollectionRegister\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Unit\" | number | [number, number] | { a: number }} TestEnum\n\t\t\t\t* @property {\"Unit\"} Unit\n\t\t\t\t* @property {number} Single\n\t\t\t\t* @property {[number, number]} Multiple\n\t\t\t\t* @property {{ a: number }} Struct\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: { [key in string]: string },\n\t\t\t\t*\t\tc: $s$.test.types.First,\n\t\t\t\t*\t}} Third\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {{ [key in string]: string }} b\n\t\t\t\t* @property {$s$.test.types.First} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} ToBeFlattened\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.TransparentTypeInner} TransparentType\n\t\t\t\t* @property {$s$.test.types.TransparentTypeInner} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {null} TransparentType2\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tinner: string,\n\t\t\t\t*\t}} TransparentTypeInner\n\t\t\t\t* @property {string} inner\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentTypeWithOverride\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {null} TransparentWithSkip\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentWithSkip2\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentWithSkip3\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t\t\t\t* @property {number[]} \"0\"\n\t\t\t\t* @property {[number[], number[]]} \"1\"\n\t\t\t\t* @property {[number[], number[], number[]]} \"2\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TupleStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {number} TupleStruct1\n\t\t\t\t* @property {number} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {[number, boolean, string]} TupleStruct3\n\t\t\t\t* @property {number} \"0\"\n\t\t\t\t* @property {boolean} \"1\"\n\t\t\t\t* @property {string} \"2\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TupleStructWithRep\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {null} Unit1\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} Unit2\n\t\t\t\t*\n\t\t\t\t* @typedef {[]} Unit3\n\t\t\t\t*\n\t\t\t\t* @typedef {null} Unit4\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\"} Unit5\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t*\n\t\t\t\t* @typedef {[]} Unit6\n\t\t\t\t* @property {[]} A\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} Unit7\n\t\t\t\t* @property {Record<string, never>} A\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t* @property {\"C\"} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {number} C\n\t\t\t\t* @property {{ id: string }} D\n\t\t\t\t* @property {[string, boolean]} E\n\t\t\t\t*\n\t\t\t\t* @typedef {string | number} UntaggedVariantsKey\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {number} C\n\t\t\t\t*\n\t\t\t\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t\t\t\t* @property {null} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {null} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {[number, string]} B\n\t\t\t\t* @property {number} C\n\t\t\t\t*\n\t\t\t\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t\t\t\t* @property {{ field: string }} A\n\t\t\t\t* @property {{ other: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in $s$.test.types.MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t\t\t\t* @property {{ [key in $s$.test.types.MaybeValidKey<string>]: null }} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in $s$.test.types.MaybeValidKey<$s$.test.types.MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t\t\t\t* @property {{ [key in $s$.test.types.MaybeValidKey<$s$.test.types.MaybeValidKey<string>>]: null }} \"0\"\n\t\t\t\t*/\n\n\t\t\texport namespace type_type {\n\t\t\t\t/**\n\t\t\t\t\t* @typedef {never} Type\n\t\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\texport namespace tests {\n\n\t\texport namespace tests {\n\n\t\t\texport namespace types {\n\t\t\t\t/**\n\t\t\t\t\t* @typedef {{\n\t\t\t\t\t*\t\ti8: number,\n\t\t\t\t\t*\t\ti16: number,\n\t\t\t\t\t*\t\ti32: number,\n\t\t\t\t\t*\t\tu8: number,\n\t\t\t\t\t*\t\tu16: number,\n\t\t\t\t\t*\t\tu32: number,\n\t\t\t\t\t*\t\tf32: number,\n\t\t\t\t\t*\t\tf64: number,\n\t\t\t\t\t*\t\tbool: boolean,\n\t\t\t\t\t*\t\tchar: string,\n\t\t\t\t\t*\t\t\"Range<i32>\": $s$.std.ops.Range<number>,\n\t\t\t\t\t*\t\t\"RangeInclusive<i32>\": $s$.std.ops.RangeInclusive<number>,\n\t\t\t\t\t*\t\t\"()\": null,\n\t\t\t\t\t*\t\t\"(String, i32)\": [string, number],\n\t\t\t\t\t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t\t\t\t\t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\t\t\t\t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\t\t\t\t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t\t\t\t\t*\t\tString: string,\n\t\t\t\t\t*\t\tPathBuf: string,\n\t\t\t\t\t*\t\tIpAddr: string,\n\t\t\t\t\t*\t\tIpv4Addr: string,\n\t\t\t\t\t*\t\tIpv6Addr: string,\n\t\t\t\t\t*\t\tSocketAddr: string,\n\t\t\t\t\t*\t\tSocketAddrV4: string,\n\t\t\t\t\t*\t\tSocketAddrV6: string,\n\t\t\t\t\t*\t\t\"Cow<'static, str>\": string,\n\t\t\t\t\t*\t\t\"Cow<'static, i32>\": number,\n\t\t\t\t\t*\t\t\"&'static str\": string,\n\t\t\t\t\t*\t\t\"&'static bool\": boolean,\n\t\t\t\t\t*\t\t\"&'static i32\": number,\n\t\t\t\t\t*\t\t\"Vec<i32>\": number[],\n\t\t\t\t\t*\t\t\"&'static [i32]\": number[],\n\t\t\t\t\t*\t\t\"&'static [i32; 3]\": [number, number, number],\n\t\t\t\t\t*\t\t\"[i32; 3]\": [number, number, number],\n\t\t\t\t\t*\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\t*\t\t\"&'static [MyEnum]\": $s$.test.types.MyEnum[],\n\t\t\t\t\t*\t\t\"&'static [MyEnum; 6]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t*\t\t\"[MyEnum; 2]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t*\t\t\"&'static [i32; 1]\": [number],\n\t\t\t\t\t*\t\t\"&'static [i32; 0]\": [],\n\t\t\t\t\t*\t\t\"Option<i32>\": number | null,\n\t\t\t\t\t*\t\t\"Option<()>\": null,\n\t\t\t\t\t*\t\t\"Option<Vec<i32>>\": number[] | null,\n\t\t\t\t\t*\t\t\"Result<String, i32>\": $s$.std.result.Result<string, number>,\n\t\t\t\t\t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\t\t\t\t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\t\t\t\t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\t\t\t\t*\t\t\"Option<Option<String>>\": string | null,\n\t\t\t\t\t*\t\t\"Option<Option<Option<String>>>\": string | null,\n\t\t\t\t\t*\t\t\"PhantomData<()>\": null,\n\t\t\t\t\t*\t\t\"PhantomData<String>\": null,\n\t\t\t\t\t*\t\tInfallible: never,\n\t\t\t\t\t*\t\tUnit1: $s$.test.types.Unit1,\n\t\t\t\t\t*\t\tUnit2: $s$.test.types.Unit2,\n\t\t\t\t\t*\t\tUnit3: $s$.test.types.Unit3,\n\t\t\t\t\t*\t\tUnit4: $s$.test.types.Unit4,\n\t\t\t\t\t*\t\tUnit5: $s$.test.types.Unit5,\n\t\t\t\t\t*\t\tUnit6: $s$.test.types.Unit6,\n\t\t\t\t\t*\t\tUnit7: $s$.test.types.Unit7,\n\t\t\t\t\t*\t\tSimpleStruct: $s$.test.types.SimpleStruct,\n\t\t\t\t\t*\t\tTupleStruct1: $s$.test.types.TupleStruct1,\n\t\t\t\t\t*\t\tTupleStruct3: $s$.test.types.TupleStruct3,\n\t\t\t\t\t*\t\tTestEnum: $s$.test.types.TestEnum,\n\t\t\t\t\t*\t\tRefStruct: $s$.test.types.RefStruct,\n\t\t\t\t\t*\t\tInlinerStruct: $s$.test.types.InlinerStruct,\n\t\t\t\t\t*\t\t\"GenericStruct<i32>\": $s$.test.types.GenericStruct<number>,\n\t\t\t\t\t*\t\t\"GenericStruct<String>\": $s$.test.types.GenericStruct<string>,\n\t\t\t\t\t*\t\tFlattenEnumStruct: $s$.test.types.FlattenEnumStruct,\n\t\t\t\t\t*\t\tOverridenStruct: $s$.test.types.OverridenStruct,\n\t\t\t\t\t*\t\tHasGenericAlias: $s$.test.types.HasGenericAlias,\n\t\t\t\t\t*\t\tEnumMacroAttributes: $s$.test.types.EnumMacroAttributes,\n\t\t\t\t\t*\t\tInlineEnumField: $s$.test.types.InlineEnumField,\n\t\t\t\t\t*\t\tInlineOptionalType: $s$.test.types.InlineOptionalType,\n\t\t\t\t\t*\t\tRename: $s$.test.types.Rename,\n\t\t\t\t\t*\t\tTransparentType: $s$.test.types.TransparentType,\n\t\t\t\t\t*\t\tTransparentType2: $s$.test.types.TransparentType2,\n\t\t\t\t\t*\t\tTransparentTypeWithOverride: $s$.test.types.TransparentTypeWithOverride,\n\t\t\t\t\t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\t\t\t\t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in $s$.test.types.BasicEnum]: null }>,\n\t\t\t\t\t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t\t\t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\t\t\t\t*\t\t\"Vec<PlaceholderInnerField>\": $s$.test.types.PlaceholderInnerField[],\n\t\t\t\t\t*\t\tEnumReferenceRecordKey: $s$.test.types.EnumReferenceRecordKey,\n\t\t\t\t\t*\t\tFlattenOnNestedEnum: $s$.test.types.FlattenOnNestedEnum,\n\t\t\t\t\t*\t\tMyEmptyInput: $s$.test.types.MyEmptyInput,\n\t\t\t\t\t*\t\t\"(String)\": string,\n\t\t\t\t\t*\t\t\"(String,)\": [string],\n\t\t\t\t\t*\t\tExtraBracketsInTupleVariant: $s$.test.types.ExtraBracketsInTupleVariant,\n\t\t\t\t\t*\t\tExtraBracketsInUnnamedStruct: $s$.test.types.ExtraBracketsInUnnamedStruct,\n\t\t\t\t\t*\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\t*\t\tInlineTuple: $s$.test.types.InlineTuple,\n\t\t\t\t\t*\t\tInlineTuple2: $s$.test.types.InlineTuple2,\n\t\t\t\t\t*\t\t\"Box<str>\": string,\n\t\t\t\t\t*\t\t\"Box<String>\": string,\n\t\t\t\t\t*\t\tSkippedFieldWithinVariant: $s$.test.types.SkippedFieldWithinVariant,\n\t\t\t\t\t*\t\tKebabCase: $s$.test.types.KebabCase,\n\t\t\t\t\t*\t\t\"&[&str]\": string[],\n\t\t\t\t\t*\t\t\"Issue281<'_>\": $s$.test.types.Issue281,\n\t\t\t\t\t*\t\t\"LifetimeGenericStruct<'_, i32>\": $s$.test.types.LifetimeGenericStruct<number>,\n\t\t\t\t\t*\t\t\"LifetimeGenericEnum<'_, i32>\": $s$.test.types.LifetimeGenericEnum<number>,\n\t\t\t\t\t*\t\tRenameWithWeirdCharsField: $s$.test.types.RenameWithWeirdCharsField,\n\t\t\t\t\t*\t\tRenameWithWeirdCharsVariant: $s$.test.types.RenameWithWeirdCharsVariant,\n\t\t\t\t\t*\t\tRenamedFieldKeys: $s$.test.types.RenamedFieldKeys,\n\t\t\t\t\t*\t\tRenamedVariantWithSkippedPayload: $s$.test.types.RenamedVariantWithSkippedPayload,\n\t\t\t\t\t*\t\t\"type_type::Type\": $s$.test.types.type_type.Type,\n\t\t\t\t\t*\t\tActualType: $s$.test.types.ActualType,\n\t\t\t\t\t*\t\tSpectaTypeOverride: $s$.test.types.SpectaTypeOverride,\n\t\t\t\t\t*\t\tContainerTypeOverrideStruct: $s$.test.types.ContainerTypeOverrideStruct,\n\t\t\t\t\t*\t\tContainerTypeOverrideEnum: $s$.test.types.ContainerTypeOverrideEnum,\n\t\t\t\t\t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": $s$.test.types.ContainerTypeOverrideGeneric,\n\t\t\t\t\t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": $s$.test.types.ContainerTypeOverrideToGeneric<number>,\n\t\t\t\t\t*\t\tContainerTypeOverrideTuple: $s$.test.types.ContainerTypeOverrideTuple,\n\t\t\t\t\t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": $s$.test.types.ContainerTypeOverrideTupleGeneric<number>,\n\t\t\t\t\t*\t\tInvalidToValidType: $s$.test.types.InvalidToValidType,\n\t\t\t\t\t*\t\tTupleStruct: $s$.test.types.TupleStruct,\n\t\t\t\t\t*\t\tTupleStructWithRep: $s$.test.types.TupleStructWithRep,\n\t\t\t\t\t*\t\t\"GenericTupleStruct<String>\": $s$.test.types.GenericTupleStruct<string>,\n\t\t\t\t\t*\t\tBracedStruct: $s$.test.types.BracedStruct,\n\t\t\t\t\t*\t\tStruct: $s$.test.types.Struct,\n\t\t\t\t\t*\t\tStruct2: $s$.test.types.Struct2,\n\t\t\t\t\t*\t\tEnum: $s$.test.types.Enum,\n\t\t\t\t\t*\t\tEnum2: $s$.test.types.Enum2,\n\t\t\t\t\t*\t\tEnum3: $s$.test.types.Enum3,\n\t\t\t\t\t*\t\tStructRenameAllUppercase: $s$.test.types.StructRenameAllUppercase,\n\t\t\t\t\t*\t\tRenameSerdeSpecialChar: $s$.test.types.RenameSerdeSpecialChar,\n\t\t\t\t\t*\t\tEnumRenameAllUppercase: $s$.test.types.EnumRenameAllUppercase,\n\t\t\t\t\t*\t\tRecursive: $s$.test.types.Recursive,\n\t\t\t\t\t*\t\tRecursiveMapValue: $s$.test.types.RecursiveMapValue,\n\t\t\t\t\t*\t\tRecursiveTransparent: $s$.test.types.RecursiveTransparent,\n\t\t\t\t\t*\t\tRecursiveInEnum: $s$.test.types.RecursiveInEnum,\n\t\t\t\t\t*\t\tNonOptional: $s$.test.types.NonOptional,\n\t\t\t\t\t*\t\tOptionalOnNamedField: $s$.test.types.OptionalOnNamedField,\n\t\t\t\t\t*\t\tOptionalOnTransparentNamedField: $s$.test.types.OptionalOnTransparentNamedField,\n\t\t\t\t\t*\t\tOptionalInEnum: $s$.test.types.OptionalInEnum,\n\t\t\t\t\t*\t\tUntaggedVariants: $s$.test.types.UntaggedVariants,\n\t\t\t\t\t*\t\tUntaggedVariantsWithoutValue: $s$.test.types.UntaggedVariantsWithoutValue,\n\t\t\t\t\t*\t\tUntaggedVariantsWithDuplicateBranches: $s$.test.types.UntaggedVariantsWithDuplicateBranches,\n\t\t\t\t\t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t\t\t\t\t*\t\tRegular: $s$.test.types.Regular,\n\t\t\t\t\t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\t\t\t\t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in $s$.test.types.TransparentStruct]: null },\n\t\t\t\t\t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in $s$.test.types.UnitVariants]: null }>,\n\t\t\t\t\t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in $s$.test.types.UntaggedVariantsKey]: null }>,\n\t\t\t\t\t*\t\tValidMaybeValidKey: $s$.test.types.ValidMaybeValidKey,\n\t\t\t\t\t*\t\tValidMaybeValidKeyNested: $s$.test.types.ValidMaybeValidKeyNested,\n\t\t\t\t\t*\t\tMacroStruct: $s$.test.types.MacroStruct,\n\t\t\t\t\t*\t\tMacroStruct2: $s$.test.types.MacroStruct2,\n\t\t\t\t\t*\t\tMacroEnum: $s$.test.types.MacroEnum,\n\t\t\t\t\t*\t\tDeprecatedType: $s$.test.types.DeprecatedType,\n\t\t\t\t\t*\t\tDeprecatedTypeWithMsg: $s$.test.types.DeprecatedTypeWithMsg,\n\t\t\t\t\t*\t\tDeprecatedTypeWithMsg2: $s$.test.types.DeprecatedTypeWithMsg2,\n\t\t\t\t\t*\t\tDeprecatedFields: $s$.test.types.DeprecatedFields,\n\t\t\t\t\t*\t\tDeprecatedTupleVariant: $s$.test.types.DeprecatedTupleVariant,\n\t\t\t\t\t*\t\tDeprecatedEnumVariants: $s$.test.types.DeprecatedEnumVariants,\n\t\t\t\t\t*\t\tCommentedStruct: $s$.test.types.CommentedStruct,\n\t\t\t\t\t*\t\tCommentedEnum: $s$.test.types.CommentedEnum,\n\t\t\t\t\t*\t\tSingleLineComment: $s$.test.types.SingleLineComment,\n\t\t\t\t\t*\t\tNonGeneric: $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"HalfGenericA<u8>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"HalfGenericB<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"FullGeneric<u8, bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"Another<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"MapA<u32>\": { [key in string]: number },\n\t\t\t\t\t*\t\t\"MapB<u32>\": { [key in number]: string },\n\t\t\t\t\t*\t\t\"MapC<u32>\": { [key in string]: $s$.test.types.AGenericStruct<number> },\n\t\t\t\t\t*\t\t\"AGenericStruct<u32>\": $s$.test.types.AGenericStruct<number>,\n\t\t\t\t\t*\t\tA: $s$.test.types.A,\n\t\t\t\t\t*\t\tDoubleFlattened: $s$.test.types.DoubleFlattened,\n\t\t\t\t\t*\t\tFlattenedInner: $s$.test.types.FlattenedInner,\n\t\t\t\t\t*\t\tBoxFlattened: $s$.test.types.BoxFlattened,\n\t\t\t\t\t*\t\tBoxInline: $s$.test.types.BoxInline,\n\t\t\t\t\t*\t\tFirst: $s$.test.types.First,\n\t\t\t\t\t*\t\tSecond: $s$.test.types.Second,\n\t\t\t\t\t*\t\tThird: $s$.test.types.Third,\n\t\t\t\t\t*\t\tFourth: $s$.test.types.Fourth,\n\t\t\t\t\t*\t\tTagOnStructWithInline: $s$.test.types.TagOnStructWithInline,\n\t\t\t\t\t*\t\tSixth: $s$.test.types.Sixth,\n\t\t\t\t\t*\t\tSeventh: $s$.test.types.Seventh,\n\t\t\t\t\t*\t\tEight: $s$.test.types.Eight,\n\t\t\t\t\t*\t\tNinth: $s$.test.types.Ninth,\n\t\t\t\t\t*\t\tTenth: $s$.test.types.Tenth,\n\t\t\t\t\t*\t\tMyEnumTagged: $s$.test.types.MyEnumTagged,\n\t\t\t\t\t*\t\tMyEnumExternal: $s$.test.types.MyEnumExternal,\n\t\t\t\t\t*\t\tMyEnumAdjacent: $s$.test.types.MyEnumAdjacent,\n\t\t\t\t\t*\t\tMyEnumUntagged: $s$.test.types.MyEnumUntagged,\n\t\t\t\t\t*\t\tEmptyStruct: $s$.test.types.EmptyStruct,\n\t\t\t\t\t*\t\tEmptyStructWithTag: $s$.test.types.EmptyStructWithTag,\n\t\t\t\t\t*\t\tAdjacentlyTagged: $s$.test.types.AdjacentlyTagged,\n\t\t\t\t\t*\t\tLoadProjectEvent: $s$.test.types.LoadProjectEvent,\n\t\t\t\t\t*\t\tExternallyTagged: $s$.test.types.ExternallyTagged,\n\t\t\t\t\t*\t\tIssue221External: $s$.test.types.Issue221External,\n\t\t\t\t\t*\t\tInternallyTaggedD: $s$.test.types.InternallyTaggedD,\n\t\t\t\t\t*\t\tInternallyTaggedE: $s$.test.types.InternallyTaggedE,\n\t\t\t\t\t*\t\tInternallyTaggedF: $s$.test.types.InternallyTaggedF,\n\t\t\t\t\t*\t\tInternallyTaggedH: $s$.test.types.InternallyTaggedH,\n\t\t\t\t\t*\t\tInternallyTaggedL: $s$.test.types.InternallyTaggedL,\n\t\t\t\t\t*\t\tInternallyTaggedM: $s$.test.types.InternallyTaggedM,\n\t\t\t\t\t*\t\tStructWithAlias: $s$.test.types.StructWithAlias,\n\t\t\t\t\t*\t\tStructWithMultipleAliases: $s$.test.types.StructWithMultipleAliases,\n\t\t\t\t\t*\t\tStructWithAliasAndRename: $s$.test.types.StructWithAliasAndRename,\n\t\t\t\t\t*\t\tEnumWithVariantAlias: $s$.test.types.EnumWithVariantAlias,\n\t\t\t\t\t*\t\tEnumWithMultipleVariantAliases: $s$.test.types.EnumWithMultipleVariantAliases,\n\t\t\t\t\t*\t\tEnumWithVariantAliasAndRename: $s$.test.types.EnumWithVariantAliasAndRename,\n\t\t\t\t\t*\t\tInternallyTaggedWithAlias: $s$.test.types.InternallyTaggedWithAlias,\n\t\t\t\t\t*\t\tAdjacentlyTaggedWithAlias: $s$.test.types.AdjacentlyTaggedWithAlias,\n\t\t\t\t\t*\t\tUntaggedWithAlias: $s$.test.types.UntaggedWithAlias,\n\t\t\t\t\t*\t\tIssue221UntaggedSafe: $s$.test.types.Issue221UntaggedSafe,\n\t\t\t\t\t*\t\tIssue221UntaggedMixed: $s$.test.types.Issue221UntaggedMixed,\n\t\t\t\t\t*\t\tEmptyEnum: $s$.test.types.EmptyEnum,\n\t\t\t\t\t*\t\tEmptyEnumTagged: $s$.test.types.EmptyEnumTagged,\n\t\t\t\t\t*\t\tEmptyEnumTaggedWContent: $s$.test.types.EmptyEnumTaggedWContent,\n\t\t\t\t\t*\t\tEmptyEnumUntagged: $s$.test.types.EmptyEnumUntagged,\n\t\t\t\t\t*\t\tSkipOnlyField: $s$.test.types.SkipOnlyField,\n\t\t\t\t\t*\t\tSkipField: $s$.test.types.SkipField,\n\t\t\t\t\t*\t\tSkipVariant: $s$.test.types.SkipVariant,\n\t\t\t\t\t*\t\tSkipUnnamedFieldInVariant: $s$.test.types.SkipUnnamedFieldInVariant,\n\t\t\t\t\t*\t\tSkipNamedFieldInVariant: $s$.test.types.SkipNamedFieldInVariant,\n\t\t\t\t\t*\t\tTransparentWithSkip: $s$.test.types.TransparentWithSkip,\n\t\t\t\t\t*\t\tTransparentWithSkip2: $s$.test.types.TransparentWithSkip2,\n\t\t\t\t\t*\t\tTransparentWithSkip3: $s$.test.types.TransparentWithSkip3,\n\t\t\t\t\t*\t\tSkipVariant2: $s$.test.types.SkipVariant2,\n\t\t\t\t\t*\t\tSkipVariant3: $s$.test.types.SkipVariant3,\n\t\t\t\t\t*\t\tSkipStructFields: $s$.test.types.SkipStructFields,\n\t\t\t\t\t*\t\tSpectaSkipNonTypeField: $s$.test.types.SpectaSkipNonTypeField,\n\t\t\t\t\t*\t\tFlattenA: $s$.test.types.FlattenA,\n\t\t\t\t\t*\t\tFlattenB: $s$.test.types.FlattenB,\n\t\t\t\t\t*\t\tFlattenC: $s$.test.types.FlattenC,\n\t\t\t\t\t*\t\tFlattenD: $s$.test.types.FlattenD,\n\t\t\t\t\t*\t\tFlattenE: $s$.test.types.FlattenE,\n\t\t\t\t\t*\t\tFlattenF: $s$.test.types.FlattenF,\n\t\t\t\t\t*\t\tFlattenG: $s$.test.types.FlattenG,\n\t\t\t\t\t*\t\tTupleNested: $s$.test.types.TupleNested,\n\t\t\t\t\t*\t\t\"Generic1<()>\": $s$.test.types.Generic1<null>,\n\t\t\t\t\t*\t\t\"GenericAutoBound<()>\": $s$.test.types.GenericAutoBound<null>,\n\t\t\t\t\t*\t\t\"GenericAutoBound2<()>\": $s$.test.types.GenericAutoBound2<null>,\n\t\t\t\t\t*\t\tContainer1: $s$.test.types.Container1,\n\t\t\t\t\t*\t\t\"Generic2<(), String, i32>\": $s$.test.types.Generic2<null, string, number>,\n\t\t\t\t\t*\t\t\"GenericNewType1<()>\": $s$.test.types.GenericNewType1<null>,\n\t\t\t\t\t*\t\t\"GenericTuple<()>\": $s$.test.types.GenericTuple<null>,\n\t\t\t\t\t*\t\t\"GenericStruct2<()>\": $s$.test.types.GenericStruct2<null>,\n\t\t\t\t\t*\t\t\"InlineGenericNewtype<String>\": string,\n\t\t\t\t\t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }],\n\t\t\t\t\t*\t\t\"InlineFlattenGenericsG<()>\": $s$.test.types.InlineFlattenGenericsG<null>,\n\t\t\t\t\t*\t\tInlineFlattenGenerics: $s$.test.types.InlineFlattenGenerics,\n\t\t\t\t\t*\t\tGenericDefault: $s$.test.types.GenericDefault,\n\t\t\t\t\t*\t\tChainedGenericDefault: $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t*\t\t\"ChainedGenericDefault<String, String>\": $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t*\t\t\"ChainedGenericDefault<i32>\": $s$.test.types.ChainedGenericDefault<number, number>,\n\t\t\t\t\t*\t\t\"ChainedGenericDefault<String, i32>\": $s$.test.types.ChainedGenericDefault<string, number>,\n\t\t\t\t\t*\t\tGenericDefaultSkipped: $s$.test.types.GenericDefaultSkipped<string>,\n\t\t\t\t\t*\t\tGenericDefaultSkippedNonType: $s$.test.types.GenericDefaultSkippedNonType<unknown>,\n\t\t\t\t\t*\t\tGenericParameterOrderPreserved: $s$.test.types.GenericParameterOrderPreserved,\n\t\t\t\t\t*\t\tConstGenericInNonConstContainer: $s$.test.types.ConstGenericInNonConstContainer,\n\t\t\t\t\t*\t\tConstGenericInConstContainer: $s$.test.types.ConstGenericInConstContainer,\n\t\t\t\t\t*\t\tNamedConstGenericContainer: $s$.test.types.NamedConstGenericContainer,\n\t\t\t\t\t*\t\tInlineConstGenericContainer: $s$.test.types.InlineConstGenericContainer,\n\t\t\t\t\t*\t\tInlineRecursiveConstGenericContainer: $s$.test.types.InlineRecursiveConstGenericContainer,\n\t\t\t\t\t*\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t\t*\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t\t*\t}} Primitives\n\t\t\t\t\t* @property {number} i8\n\t\t\t\t\t* @property {number} i16\n\t\t\t\t\t* @property {number} i32\n\t\t\t\t\t* @property {number} u8\n\t\t\t\t\t* @property {number} u16\n\t\t\t\t\t* @property {number} u32\n\t\t\t\t\t* @property {number} f32\n\t\t\t\t\t* @property {number} f64\n\t\t\t\t\t* @property {boolean} bool\n\t\t\t\t\t* @property {string} char\n\t\t\t\t\t* @property {$s$.std.ops.Range<number>} \"Range<i32>\"\n\t\t\t\t\t* @property {$s$.std.ops.RangeInclusive<number>} \"RangeInclusive<i32>\"\n\t\t\t\t\t* @property {null} \"()\"\n\t\t\t\t\t* @property {[string, number]} \"(String, i32)\"\n\t\t\t\t\t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n\t\t\t\t\t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n\t\t\t\t\t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n\t\t\t\t\t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n\t\t\t\t\t* @property {string} String\n\t\t\t\t\t* @property {string} PathBuf\n\t\t\t\t\t* @property {string} IpAddr\n\t\t\t\t\t* @property {string} Ipv4Addr\n\t\t\t\t\t* @property {string} Ipv6Addr\n\t\t\t\t\t* @property {string} SocketAddr\n\t\t\t\t\t* @property {string} SocketAddrV4\n\t\t\t\t\t* @property {string} SocketAddrV6\n\t\t\t\t\t* @property {string} \"Cow<'static, str>\"\n\t\t\t\t\t* @property {number} \"Cow<'static, i32>\"\n\t\t\t\t\t* @property {string} \"&'static str\"\n\t\t\t\t\t* @property {boolean} \"&'static bool\"\n\t\t\t\t\t* @property {number} \"&'static i32\"\n\t\t\t\t\t* @property {number[]} \"Vec<i32>\"\n\t\t\t\t\t* @property {number[]} \"&'static [i32]\"\n\t\t\t\t\t* @property {[number, number, number]} \"&'static [i32; 3]\"\n\t\t\t\t\t* @property {[number, number, number]} \"[i32; 3]\"\n\t\t\t\t\t* @property {$s$.test.types.MyEnum[]} \"Vec<MyEnum>\"\n\t\t\t\t\t* @property {$s$.test.types.MyEnum[]} \"&'static [MyEnum]\"\n\t\t\t\t\t* @property {[$s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum]} \"&'static [MyEnum; 6]\"\n\t\t\t\t\t* @property {[$s$.test.types.MyEnum, $s$.test.types.MyEnum]} \"[MyEnum; 2]\"\n\t\t\t\t\t* @property {[number]} \"&'static [i32; 1]\"\n\t\t\t\t\t* @property {[]} \"&'static [i32; 0]\"\n\t\t\t\t\t* @property {number | null} \"Option<i32>\"\n\t\t\t\t\t* @property {null} \"Option<()>\"\n\t\t\t\t\t* @property {number[] | null} \"Option<Vec<i32>>\"\n\t\t\t\t\t* @property {$s$.std.result.Result<string, number>} \"Result<String, i32>\"\n\t\t\t\t\t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n\t\t\t\t\t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n\t\t\t\t\t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n\t\t\t\t\t* @property {string | null} \"Option<Option<String>>\"\n\t\t\t\t\t* @property {string | null} \"Option<Option<Option<String>>>\"\n\t\t\t\t\t* @property {null} \"PhantomData<()>\"\n\t\t\t\t\t* @property {null} \"PhantomData<String>\"\n\t\t\t\t\t* @property {never} Infallible\n\t\t\t\t\t* @property {$s$.test.types.Unit1} Unit1\n\t\t\t\t\t* @property {$s$.test.types.Unit2} Unit2\n\t\t\t\t\t* @property {$s$.test.types.Unit3} Unit3\n\t\t\t\t\t* @property {$s$.test.types.Unit4} Unit4\n\t\t\t\t\t* @property {$s$.test.types.Unit5} Unit5\n\t\t\t\t\t* @property {$s$.test.types.Unit6} Unit6\n\t\t\t\t\t* @property {$s$.test.types.Unit7} Unit7\n\t\t\t\t\t* @property {$s$.test.types.SimpleStruct} SimpleStruct\n\t\t\t\t\t* @property {$s$.test.types.TupleStruct1} TupleStruct1\n\t\t\t\t\t* @property {$s$.test.types.TupleStruct3} TupleStruct3\n\t\t\t\t\t* @property {$s$.test.types.TestEnum} TestEnum\n\t\t\t\t\t* @property {$s$.test.types.RefStruct} RefStruct\n\t\t\t\t\t* @property {$s$.test.types.InlinerStruct} InlinerStruct\n\t\t\t\t\t* @property {$s$.test.types.GenericStruct<number>} \"GenericStruct<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericStruct<string>} \"GenericStruct<String>\"\n\t\t\t\t\t* @property {$s$.test.types.FlattenEnumStruct} FlattenEnumStruct\n\t\t\t\t\t* @property {$s$.test.types.OverridenStruct} OverridenStruct\n\t\t\t\t\t* @property {$s$.test.types.HasGenericAlias} HasGenericAlias\n\t\t\t\t\t* @property {$s$.test.types.EnumMacroAttributes} EnumMacroAttributes\n\t\t\t\t\t* @property {$s$.test.types.InlineEnumField} InlineEnumField\n\t\t\t\t\t* @property {$s$.test.types.InlineOptionalType} InlineOptionalType\n\t\t\t\t\t* @property {$s$.test.types.Rename} Rename\n\t\t\t\t\t* @property {$s$.test.types.TransparentType} TransparentType\n\t\t\t\t\t* @property {$s$.test.types.TransparentType2} TransparentType2\n\t\t\t\t\t* @property {$s$.test.types.TransparentTypeWithOverride} TransparentTypeWithOverride\n\t\t\t\t\t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n\t\t\t\t\t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n\t\t\t\t\t* @property {$s$.test.types.PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n\t\t\t\t\t* @property {$s$.test.types.EnumReferenceRecordKey} EnumReferenceRecordKey\n\t\t\t\t\t* @property {$s$.test.types.FlattenOnNestedEnum} FlattenOnNestedEnum\n\t\t\t\t\t* @property {$s$.test.types.MyEmptyInput} MyEmptyInput\n\t\t\t\t\t* @property {string} \"(String)\"\n\t\t\t\t\t* @property {[string]} \"(String,)\"\n\t\t\t\t\t* @property {$s$.test.types.ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n\t\t\t\t\t* @property {$s$.test.types.ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n\t\t\t\t\t* @property {$s$.test.types.MyEnum[]} \"Vec<MyEnum>\"\n\t\t\t\t\t* @property {$s$.test.types.InlineTuple} InlineTuple\n\t\t\t\t\t* @property {$s$.test.types.InlineTuple2} InlineTuple2\n\t\t\t\t\t* @property {string} \"Box<str>\"\n\t\t\t\t\t* @property {string} \"Box<String>\"\n\t\t\t\t\t* @property {$s$.test.types.SkippedFieldWithinVariant} SkippedFieldWithinVariant\n\t\t\t\t\t* @property {$s$.test.types.KebabCase} KebabCase\n\t\t\t\t\t* @property {string[]} \"&[&str]\"\n\t\t\t\t\t* @property {$s$.test.types.Issue281} \"Issue281<'_>\"\n\t\t\t\t\t* @property {$s$.test.types.LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.RenameWithWeirdCharsField} RenameWithWeirdCharsField\n\t\t\t\t\t* @property {$s$.test.types.RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n\t\t\t\t\t* @property {$s$.test.types.RenamedFieldKeys} RenamedFieldKeys\n\t\t\t\t\t* @property {$s$.test.types.RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n\t\t\t\t\t* @property {$s$.test.types.type_type.Type} \"type_type::Type\"\n\t\t\t\t\t* @property {$s$.test.types.ActualType} ActualType\n\t\t\t\t\t* @property {$s$.test.types.SpectaTypeOverride} SpectaTypeOverride\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.InvalidToValidType} InvalidToValidType\n\t\t\t\t\t* @property {$s$.test.types.TupleStruct} TupleStruct\n\t\t\t\t\t* @property {$s$.test.types.TupleStructWithRep} TupleStructWithRep\n\t\t\t\t\t* @property {$s$.test.types.GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n\t\t\t\t\t* @property {$s$.test.types.BracedStruct} BracedStruct\n\t\t\t\t\t* @property {$s$.test.types.Struct} Struct\n\t\t\t\t\t* @property {$s$.test.types.Struct2} Struct2\n\t\t\t\t\t* @property {$s$.test.types.Enum} Enum\n\t\t\t\t\t* @property {$s$.test.types.Enum2} Enum2\n\t\t\t\t\t* @property {$s$.test.types.Enum3} Enum3\n\t\t\t\t\t* @property {$s$.test.types.StructRenameAllUppercase} StructRenameAllUppercase\n\t\t\t\t\t* @property {$s$.test.types.RenameSerdeSpecialChar} RenameSerdeSpecialChar\n\t\t\t\t\t* @property {$s$.test.types.EnumRenameAllUppercase} EnumRenameAllUppercase\n\t\t\t\t\t* @property {$s$.test.types.Recursive} Recursive\n\t\t\t\t\t* @property {$s$.test.types.RecursiveMapValue} RecursiveMapValue\n\t\t\t\t\t* @property {$s$.test.types.RecursiveTransparent} RecursiveTransparent\n\t\t\t\t\t* @property {$s$.test.types.RecursiveInEnum} RecursiveInEnum\n\t\t\t\t\t* @property {$s$.test.types.NonOptional} NonOptional\n\t\t\t\t\t* @property {$s$.test.types.OptionalOnNamedField} OptionalOnNamedField\n\t\t\t\t\t* @property {$s$.test.types.OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n\t\t\t\t\t* @property {$s$.test.types.OptionalInEnum} OptionalInEnum\n\t\t\t\t\t* @property {$s$.test.types.UntaggedVariants} UntaggedVariants\n\t\t\t\t\t* @property {$s$.test.types.UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n\t\t\t\t\t* @property {$s$.test.types.UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n\t\t\t\t\t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n\t\t\t\t\t* @property {$s$.test.types.Regular} Regular\n\t\t\t\t\t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n\t\t\t\t\t* @property {{ [key in $s$.test.types.TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n\t\t\t\t\t* @property {$s$.test.types.ValidMaybeValidKey} ValidMaybeValidKey\n\t\t\t\t\t* @property {$s$.test.types.ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n\t\t\t\t\t* @property {$s$.test.types.MacroStruct} MacroStruct\n\t\t\t\t\t* @property {$s$.test.types.MacroStruct2} MacroStruct2\n\t\t\t\t\t* @property {$s$.test.types.MacroEnum} MacroEnum\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedType} DeprecatedType\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedFields} DeprecatedFields\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedTupleVariant} DeprecatedTupleVariant\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedEnumVariants} DeprecatedEnumVariants\n\t\t\t\t\t* @property {$s$.test.types.CommentedStruct} CommentedStruct\n\t\t\t\t\t* @property {$s$.test.types.CommentedEnum} CommentedEnum\n\t\t\t\t\t* @property {$s$.test.types.SingleLineComment} SingleLineComment\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} NonGeneric\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"HalfGenericA<u8>\"\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"HalfGenericB<bool>\"\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"Another<bool>\"\n\t\t\t\t\t* @property {{ [key in string]: number }} \"MapA<u32>\"\n\t\t\t\t\t* @property {{ [key in number]: string }} \"MapB<u32>\"\n\t\t\t\t\t* @property {{ [key in string]: $s$.test.types.AGenericStruct<number> }} \"MapC<u32>\"\n\t\t\t\t\t* @property {$s$.test.types.AGenericStruct<number>} \"AGenericStruct<u32>\"\n\t\t\t\t\t* @property {$s$.test.types.A} A\n\t\t\t\t\t* @property {$s$.test.types.DoubleFlattened} DoubleFlattened\n\t\t\t\t\t* @property {$s$.test.types.FlattenedInner} FlattenedInner\n\t\t\t\t\t* @property {$s$.test.types.BoxFlattened} BoxFlattened\n\t\t\t\t\t* @property {$s$.test.types.BoxInline} BoxInline\n\t\t\t\t\t* @property {$s$.test.types.First} First\n\t\t\t\t\t* @property {$s$.test.types.Second} Second\n\t\t\t\t\t* @property {$s$.test.types.Third} Third\n\t\t\t\t\t* @property {$s$.test.types.Fourth} Fourth\n\t\t\t\t\t* @property {$s$.test.types.TagOnStructWithInline} TagOnStructWithInline\n\t\t\t\t\t* @property {$s$.test.types.Sixth} Sixth\n\t\t\t\t\t* @property {$s$.test.types.Seventh} Seventh\n\t\t\t\t\t* @property {$s$.test.types.Eight} Eight\n\t\t\t\t\t* @property {$s$.test.types.Ninth} Ninth\n\t\t\t\t\t* @property {$s$.test.types.Tenth} Tenth\n\t\t\t\t\t* @property {$s$.test.types.MyEnumTagged} MyEnumTagged\n\t\t\t\t\t* @property {$s$.test.types.MyEnumExternal} MyEnumExternal\n\t\t\t\t\t* @property {$s$.test.types.MyEnumAdjacent} MyEnumAdjacent\n\t\t\t\t\t* @property {$s$.test.types.MyEnumUntagged} MyEnumUntagged\n\t\t\t\t\t* @property {$s$.test.types.EmptyStruct} EmptyStruct\n\t\t\t\t\t* @property {$s$.test.types.EmptyStructWithTag} EmptyStructWithTag\n\t\t\t\t\t* @property {$s$.test.types.AdjacentlyTagged} AdjacentlyTagged\n\t\t\t\t\t* @property {$s$.test.types.LoadProjectEvent} LoadProjectEvent\n\t\t\t\t\t* @property {$s$.test.types.ExternallyTagged} ExternallyTagged\n\t\t\t\t\t* @property {$s$.test.types.Issue221External} Issue221External\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedD} InternallyTaggedD\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedE} InternallyTaggedE\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedF} InternallyTaggedF\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedH} InternallyTaggedH\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedL} InternallyTaggedL\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedM} InternallyTaggedM\n\t\t\t\t\t* @property {$s$.test.types.StructWithAlias} StructWithAlias\n\t\t\t\t\t* @property {$s$.test.types.StructWithMultipleAliases} StructWithMultipleAliases\n\t\t\t\t\t* @property {$s$.test.types.StructWithAliasAndRename} StructWithAliasAndRename\n\t\t\t\t\t* @property {$s$.test.types.EnumWithVariantAlias} EnumWithVariantAlias\n\t\t\t\t\t* @property {$s$.test.types.EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n\t\t\t\t\t* @property {$s$.test.types.EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedWithAlias} InternallyTaggedWithAlias\n\t\t\t\t\t* @property {$s$.test.types.AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n\t\t\t\t\t* @property {$s$.test.types.UntaggedWithAlias} UntaggedWithAlias\n\t\t\t\t\t* @property {$s$.test.types.Issue221UntaggedSafe} Issue221UntaggedSafe\n\t\t\t\t\t* @property {$s$.test.types.Issue221UntaggedMixed} Issue221UntaggedMixed\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnum} EmptyEnum\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnumTagged} EmptyEnumTagged\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnumUntagged} EmptyEnumUntagged\n\t\t\t\t\t* @property {$s$.test.types.SkipOnlyField} SkipOnlyField\n\t\t\t\t\t* @property {$s$.test.types.SkipField} SkipField\n\t\t\t\t\t* @property {$s$.test.types.SkipVariant} SkipVariant\n\t\t\t\t\t* @property {$s$.test.types.SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n\t\t\t\t\t* @property {$s$.test.types.SkipNamedFieldInVariant} SkipNamedFieldInVariant\n\t\t\t\t\t* @property {$s$.test.types.TransparentWithSkip} TransparentWithSkip\n\t\t\t\t\t* @property {$s$.test.types.TransparentWithSkip2} TransparentWithSkip2\n\t\t\t\t\t* @property {$s$.test.types.TransparentWithSkip3} TransparentWithSkip3\n\t\t\t\t\t* @property {$s$.test.types.SkipVariant2} SkipVariant2\n\t\t\t\t\t* @property {$s$.test.types.SkipVariant3} SkipVariant3\n\t\t\t\t\t* @property {$s$.test.types.SkipStructFields} SkipStructFields\n\t\t\t\t\t* @property {$s$.test.types.SpectaSkipNonTypeField} SpectaSkipNonTypeField\n\t\t\t\t\t* @property {$s$.test.types.FlattenA} FlattenA\n\t\t\t\t\t* @property {$s$.test.types.FlattenB} FlattenB\n\t\t\t\t\t* @property {$s$.test.types.FlattenC} FlattenC\n\t\t\t\t\t* @property {$s$.test.types.FlattenD} FlattenD\n\t\t\t\t\t* @property {$s$.test.types.FlattenE} FlattenE\n\t\t\t\t\t* @property {$s$.test.types.FlattenF} FlattenF\n\t\t\t\t\t* @property {$s$.test.types.FlattenG} FlattenG\n\t\t\t\t\t* @property {$s$.test.types.TupleNested} TupleNested\n\t\t\t\t\t* @property {$s$.test.types.Generic1<null>} \"Generic1<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericAutoBound<null>} \"GenericAutoBound<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n\t\t\t\t\t* @property {$s$.test.types.Container1} Container1\n\t\t\t\t\t* @property {$s$.test.types.Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericNewType1<null>} \"GenericNewType1<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericTuple<null>} \"GenericTuple<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericStruct2<null>} \"GenericStruct2<()>\"\n\t\t\t\t\t* @property {string} \"InlineGenericNewtype<String>\"\n\t\t\t\t\t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }]} \"InlineGenericNested<String>\"\n\t\t\t\t\t* @property {$s$.test.types.InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n\t\t\t\t\t* @property {$s$.test.types.InlineFlattenGenerics} InlineFlattenGenerics\n\t\t\t\t\t* @property {$s$.test.types.GenericDefault} GenericDefault\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault} ChainedGenericDefault\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericDefaultSkipped<string>} GenericDefaultSkipped\n\t\t\t\t\t* @property {$s$.test.types.GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n\t\t\t\t\t* @property {$s$.test.types.GenericParameterOrderPreserved} GenericParameterOrderPreserved\n\t\t\t\t\t* @property {$s$.test.types.ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n\t\t\t\t\t* @property {$s$.test.types.ConstGenericInConstContainer} ConstGenericInConstContainer\n\t\t\t\t\t* @property {$s$.test.types.NamedConstGenericContainer} NamedConstGenericContainer\n\t\t\t\t\t* @property {$s$.test.types.InlineConstGenericContainer} InlineConstGenericContainer\n\t\t\t\t\t* @property {$s$.test.types.InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n\t\t\t\t\t* @property {$s$.test.types.TestCollectionRegister} TestCollectionRegister\n\t\t\t\t\t* @property {$s$.test.types.TestCollectionRegister} TestCollectionRegister\n\t\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n}\nexport import std = $s$.std;\nexport import test = $s$.test;\nexport import tests = $s$.tests;\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-namespaces-serde.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\njsdoc-export-to-namespaces-serde (69397 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n\nnamespace $s$ {\n\n\texport namespace std {\n\n\t\texport namespace ops {\n\t\t\t/**\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tstart: T,\n\t\t\t\t*\t\tend: T,\n\t\t\t\t*\t}} Range<T>\n\t\t\t\t* @property {T} start\n\t\t\t\t* @property {T} end\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tstart: T,\n\t\t\t\t*\t\tend: T,\n\t\t\t\t*\t}} RangeInclusive<T>\n\t\t\t\t* @property {T} start\n\t\t\t\t* @property {T} end\n\t\t\t\t*/\n\t\t}\n\n\t\texport namespace result {\n\t\t\t/**\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tok: T,\n\t\t\t\t*\t\terr: E,\n\t\t\t\t*\t}} Result<T, E>\n\t\t\t\t* @property {T} ok\n\t\t\t\t* @property {E} err\n\t\t\t\t*/\n\t\t}\n\t}\n\n\texport namespace test {\n\n\t\texport namespace types {\n\t\t\t/**\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.B,\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\tb: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tc: $s$.test.types.B,\n\t\t\t\t*\t\td: {\n\t\t\t\t*\t\t\tflattened: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\te: {\n\t\t\t\t*\t\t\tgeneric_flattened: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} A\n\t\t\t\t* @property {$s$.test.types.B} a\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {$s$.test.types.B} c\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tflattened: number,\n\t\t\t\t*\t}} d\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tgeneric_flattened: number,\n\t\t\t\t*\t}} e\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: $s$.test.types.Demo<T, boolean>,\n\t\t\t\t*\t}} AGenericStruct<T>\n\t\t\t\t* @property {$s$.test.types.Demo<T, boolean>} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.GenericType<string>,\n\t\t\t\t*\t}} ActualType\n\t\t\t\t* @property {$s$.test.types.GenericType<string>} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t\t\t\t* \tid: string,\n\t\t\t\t* \tmethod: string,\n\t\t\t\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t\t\t\t* @property {{ t: \"A\" }} A\n\t\t\t\t* @property {{ t: \"B\"; c: {\n\t\t\t\t* \tid: string,\n\t\t\t\t* \tmethod: string,\n\t\t\t\t* } }} B\n\t\t\t\t* @property {{ t: \"C\"; c: string }} C\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\"; data: {\n\t\t\t\t* \tfield: string,\n\t\t\t\t* } } | { type: \"B\"; data: {\n\t\t\t\t* \tother: number,\n\t\t\t\t* } }} AdjacentlyTaggedWithAlias\n\t\t\t\t* @property {{ type: \"A\"; data: {\n\t\t\t\t* \tfield: string,\n\t\t\t\t* } }} A\n\t\t\t\t* @property {{ type: \"B\"; data: {\n\t\t\t\t* \tother: number,\n\t\t\t\t* } }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} B\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} BasicEnum\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.BoxedInner} BoxFlattened\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tc: {\n\t\t\t\t*\t\t\ta: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} BoxInline\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} BoxedInner\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {string} BracedStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfirst: T,\n\t\t\t\t*\t\tsecond: U,\n\t\t\t\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t\t\t\t* @property {T} first\n\t\t\t\t* @property {U} second\n\t\t\t\t*\n\t\t\t\t*  Some triple-slash comment\n\t\t\t\t*  Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t* @typedef {\n\t\t\t\t*\t/**\n\t\t\t\t*\t *  Some triple-slash comment\n\t\t\t\t*\t *  Some more triple-slash comment\n\t\t\t\t*\t */\n\t\t\t\t* ({ A: number }) & { B?: never } | \n\t\t\t\t*\t/**\n\t\t\t\t*\t *  Some triple-slash comment\n\t\t\t\t*\t *  Some more triple-slash comment\n\t\t\t\t*\t */\n\t\t\t\t* ({ B: {\n\t\t\t\t* \t/**\n\t\t\t\t* \t *  Some triple-slash comment\n\t\t\t\t* \t *  Some more triple-slash comment\n\t\t\t\t* \t */\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }) & { A?: never }} CommentedEnum\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  *  Some triple-slash comment\n\t\t\t\t*  *  Some more triple-slash comment\n\t\t\t\t*  */\n\t\t\t\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  *  Some triple-slash comment\n\t\t\t\t*  *  Some more triple-slash comment\n\t\t\t\t*  */\n\t\t\t\t* { B: {\n\t\t\t\t* \t/**\n\t\t\t\t* \t *  Some triple-slash comment\n\t\t\t\t* \t *  Some more triple-slash comment\n\t\t\t\t* \t */\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t*  Some triple-slash comment\n\t\t\t\t*  Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t *  Some triple-slash comment\n\t\t\t\t*\t\t *  Some more triple-slash comment\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} CommentedStruct\n\t\t\t\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: number[],\n\t\t\t\t*\t\ta: number[],\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} ConstGenericInConstContainer\n\t\t\t\t* @property {number[]} data\n\t\t\t\t* @property {number[]} a\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: [number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} ConstGenericInNonConstContainer\n\t\t\t\t* @property {[number]} data\n\t\t\t\t* @property {[number, number]} a\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfoo: $s$.test.types.Generic1<number>,\n\t\t\t\t*\t\tbar: $s$.test.types.Generic1<number>[],\n\t\t\t\t*\t\tbaz: { [key in string]: $s$.test.types.Generic1<string> },\n\t\t\t\t*\t}} Container1\n\t\t\t\t* @property {$s$.test.types.Generic1<number>} foo\n\t\t\t\t* @property {$s$.test.types.Generic1<number>[]} bar\n\t\t\t\t* @property {{ [key in string]: $s$.test.types.Generic1<string> }} baz\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ContainerTypeOverrideEnum\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ContainerTypeOverrideGeneric\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ContainerTypeOverrideStruct\n\t\t\t\t*\n\t\t\t\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t\t\t\t*\n\t\t\t\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t\t\t\t*\n\t\t\t\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tflattened: number,\n\t\t\t\t*\t}} D\n\t\t\t\t* @property {number} flattened\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: A,\n\t\t\t\t*\t\tb: B,\n\t\t\t\t*\t}} Demo<A, B>\n\t\t\t\t* @property {A} a\n\t\t\t\t* @property {B} b\n\t\t\t\t*\n\t\t\t\t* @typedef {\n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated\n\t\t\t\t*\t */\n\t\t\t\t* \"A\" | \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* \"B\" | \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* \"C\"} DeprecatedEnumVariants\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  * @deprecated\n\t\t\t\t*  */\n\t\t\t\t* \"A\"} A - @deprecated\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  * @deprecated Nope\n\t\t\t\t*  */\n\t\t\t\t* \"B\"} B - @deprecated Nope\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  * @deprecated Nope\n\t\t\t\t*  */\n\t\t\t\t* \"C\"} C - @deprecated Nope\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t * @deprecated\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\tb: string,\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t * @deprecated This field is cringe!\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\tc: string,\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t * @deprecated This field is cringe!\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\td: string,\n\t\t\t\t*\t}} DeprecatedFields\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {string} b - @deprecated\n\t\t\t\t* @property {string} c - @deprecated This field is cringe!\n\t\t\t\t* @property {string} d - @deprecated This field is cringe!\n\t\t\t\t*\n\t\t\t\t* @typedef {[\n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated\n\t\t\t\t*\t */\n\t\t\t\t* string, \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* string, \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* number]} DeprecatedTupleVariant\n\t\t\t\t* @property {string} \"0\" - @deprecated\n\t\t\t\t* @property {string} \"1\" - @deprecated Nope\n\t\t\t\t* @property {number} \"2\" - @deprecated Nope\n\t\t\t\t*\n\t\t\t\t* @deprecated\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} DeprecatedType\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @deprecated Look at you big man using a deprecation message\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} DeprecatedTypeWithMsg\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @deprecated Look at you big man using a deprecation message\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} DeprecatedTypeWithMsg2\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.ToBeFlattened,\n\t\t\t\t*\t\tb: $s$.test.types.ToBeFlattened,\n\t\t\t\t*\t}} DoubleFlattened\n\t\t\t\t* @property {$s$.test.types.ToBeFlattened} a\n\t\t\t\t* @property {$s$.test.types.ToBeFlattened} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: string } | \"B\"} Eight\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnum\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnumTagged\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnumTaggedWContent\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnumUntagged\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} EmptyStruct\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: \"EmptyStructWithTag\",\n\t\t\t\t*\t}} EmptyStructWithTag\n\t\t\t\t* @property {\"EmptyStructWithTag\"} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t\t\t\t* @property {{ t: \"A\" }} A\n\t\t\t\t* @property {{ t: \"B\" }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t\t\t\t* @property {{ t: \"C\" }} C\n\t\t\t\t* @property {{ t: \"B\" }} B\n\t\t\t\t* @property {{ t: \"D\"; enumField: null }} D\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t\t\t\t* @property {{ t: \"A\"; b: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* \tbbbbbb: number,\n\t\t\t\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t* @property {{ bbb: number }} bbb\n\t\t\t\t* @property {{ cccc: number }} cccc\n\t\t\t\t* @property {{ D: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* \tbbbbbb: number,\n\t\t\t\t* } }} D\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t\t*\t}} EnumReferenceRecordKey\n\t\t\t\t* @property {Partial<{ [key in $s$.test.types.BasicEnum]: number }>} a\n\t\t\t\t*\n\t\t\t\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t\t\t\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t\t\t\t* @property {\"VARIANTB\"} VARIANTB\n\t\t\t\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t\t\t\t* @property {\"Variant\"} Variant\n\t\t\t\t* @property {\"Other\"} Other\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t\t\t\t* @property {\"Variant\"} Variant\n\t\t\t\t* @property {\"Other\"} Other\n\t\t\t\t*\n\t\t\t\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t\t\t\t* @property {\"renamed_variant\"} renamed_variant\n\t\t\t\t* @property {\"Other\"} Other\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | ({ B: {\n\t\t\t\t* \tid: string,\n\t\t\t\t* \tmethod: string,\n\t\t\t\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {{ B: {\n\t\t\t\t* \tid: string,\n\t\t\t\t* \tmethod: string,\n\t\t\t\t* } }} B\n\t\t\t\t* @property {{ C: string }} C\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} First\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} FlattenA\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t} & $s$.test.types.FlattenA} FlattenB\n\t\t\t\t* @property {number} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t} & $s$.test.types.FlattenA} FlattenC\n\t\t\t\t* @property {number} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}} FlattenD\n\t\t\t\t* @property {$s$.test.types.FlattenA} a\n\t\t\t\t* @property {number} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: ({\n\t\t\t\t*\t\t\tc: number,\n\t\t\t\t*\t\t}) & ($s$.test.types.FlattenA),\n\t\t\t\t*\t\td: number,\n\t\t\t\t*\t}} FlattenE\n\t\t\t\t* @property {({\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}) & ($s$.test.types.FlattenA)} b\n\t\t\t\t* @property {number} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{ tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" }} FlattenEnum\n\t\t\t\t* @property {{ tag: \"One\" }} One\n\t\t\t\t* @property {{ tag: \"Two\" }} Two\n\t\t\t\t* @property {{ tag: \"Three\" }} Three\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\touter: string,\n\t\t\t\t*\t} & $s$.test.types.FlattenEnum} FlattenEnumStruct\n\t\t\t\t* @property {string} outer\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: ({\n\t\t\t\t*\t\t\tc: number,\n\t\t\t\t*\t\t}) & ($s$.test.types.FlattenA),\n\t\t\t\t*\t\td: number,\n\t\t\t\t*\t}} FlattenF\n\t\t\t\t* @property {({\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}) & ($s$.test.types.FlattenA)} b\n\t\t\t\t* @property {number} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: $s$.test.types.FlattenB,\n\t\t\t\t*\t\td: number,\n\t\t\t\t*\t}} FlattenG\n\t\t\t\t* @property {$s$.test.types.FlattenB} b\n\t\t\t\t* @property {number} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tid: string,\n\t\t\t\t*\t} & $s$.test.types.NestedEnum} FlattenOnNestedEnum\n\t\t\t\t* @property {string} id\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.Inner} FlattenedInner\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\ta: string,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} Fourth\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t\tvalues: T[],\n\t\t\t\t*\t}} Generic1<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t* @property {T[]} values\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t\t\t\t* \ta: A,\n\t\t\t\t* \tb: B,\n\t\t\t\t* \tc: C,\n\t\t\t\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t\t\t\t* @property {{ A: A }} A\n\t\t\t\t* @property {{ B: [B, B, B] }} B\n\t\t\t\t* @property {{ C: C[] }} C\n\t\t\t\t* @property {{ D: A[][][] }} D\n\t\t\t\t* @property {{ E: {\n\t\t\t\t* \ta: A,\n\t\t\t\t* \tb: B,\n\t\t\t\t* \tc: C,\n\t\t\t\t* } }} E\n\t\t\t\t* @property {{ X: number[] }} X\n\t\t\t\t* @property {{ Y: number }} Y\n\t\t\t\t* @property {{ Z: number[][] }} Z\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t\tvalues: T[],\n\t\t\t\t*\t}} GenericAutoBound<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t* @property {T[]} values\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t\tvalues: T[],\n\t\t\t\t*\t}} GenericAutoBound2<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t* @property {T[]} values\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t}} GenericDefault<T = string>\n\t\t\t\t* @property {T} value\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t}} GenericDefaultSkipped<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: number,\n\t\t\t\t*\t}} GenericDefaultSkippedNonType<T>\n\t\t\t\t* @property {number} value\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tgeneric_flattened: T,\n\t\t\t\t*\t}} GenericFlattened<T>\n\t\t\t\t* @property {T} generic_flattened\n\t\t\t\t*\n\t\t\t\t* @typedef {T[][]} GenericNewType1<T>\n\t\t\t\t* @property {T[][]} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tpair: $s$.test.types.Pair<number, string>,\n\t\t\t\t*\t}} GenericParameterOrderPreserved\n\t\t\t\t* @property {$s$.test.types.Pair<number, string>} pair\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\targ: T,\n\t\t\t\t*\t}} GenericStruct<T>\n\t\t\t\t* @property {T} arg\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: T,\n\t\t\t\t*\t\tb: [T, T],\n\t\t\t\t*\t\tc: [T, [T, T]],\n\t\t\t\t*\t\td: [T, T, T],\n\t\t\t\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t\t\t\t*\t\tf: T[],\n\t\t\t\t*\t\tg: T[][],\n\t\t\t\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t\t\t\t*\t}} GenericStruct2<T>\n\t\t\t\t* @property {T} a\n\t\t\t\t* @property {[T, T]} b\n\t\t\t\t* @property {[T, [T, T]]} c\n\t\t\t\t* @property {[T, T, T]} d\n\t\t\t\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t\t\t\t* @property {T[]} f\n\t\t\t\t* @property {T[][]} g\n\t\t\t\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t\t\t\t*\n\t\t\t\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t\t\t\t* @property {T} \"0\"\n\t\t\t\t* @property {T[]} \"1\"\n\t\t\t\t* @property {T[][]} \"2\"\n\t\t\t\t*\n\t\t\t\t* @typedef {T} GenericTupleStruct<T>\n\t\t\t\t* @property {T} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Undefined\" | T} GenericType<T>\n\t\t\t\t* @property {\"Undefined\"} Undefined\n\t\t\t\t* @property {T} Value\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t\t\t\t* @property {{ [key in number]: string }} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\tdata: [number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tc: {\n\t\t\t\t*\t\t\tdata: [number, number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} InlineConstGenericContainer\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t}} c\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} InlineEnumField\n\t\t\t\t* @property {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tg: $s$.test.types.InlineFlattenGenericsG<string>,\n\t\t\t\t*\t\tgi: {\n\t\t\t\t*\t\t\tt: string,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t} & $s$.test.types.InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t\t\t\t* @property {$s$.test.types.InlineFlattenGenericsG<string>} g\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tt: string,\n\t\t\t\t*\t}} gi\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tt: T,\n\t\t\t\t*\t}} InlineFlattenGenericsG<T>\n\t\t\t\t* @property {T} t\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\toptional_field: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | null,\n\t\t\t\t*\t}} InlineOptionalType\n\t\t\t\t* @property {{\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | null} optional_field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: number[],\n\t\t\t\t*\t\ta: number[],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t}} InlineRecursiveConstGeneric\n\t\t\t\t* @property {number[]} data\n\t\t\t\t* @property {number[]} a\n\t\t\t\t* @property {[number, number, number]} d\n\t\t\t\t* @property {$s$.test.types.InlineRecursiveConstGeneric} e\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\tdata: [number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tc: {\n\t\t\t\t*\t\t\tdata: [number, number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} InlineRecursiveConstGenericContainer\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t}} c\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t*\t\tval: number,\n\t\t\t\t*\t}} InlineStruct\n\t\t\t\t* @property {$s$.test.types.SimpleStruct} ref_struct\n\t\t\t\t* @property {number} val\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: [string, boolean],\n\t\t\t\t*\t}} InlineTuple\n\t\t\t\t* @property {[string, boolean]} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: [{\n\t\t\t\t* \tdemo: [string, boolean],\n\t\t\t\t* }, boolean],\n\t\t\t\t*\t}} InlineTuple2\n\t\t\t\t* @property {[{\n\t\t\t\t* \tdemo: [string, boolean],\n\t\t\t\t* }, boolean]} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tinline_this: {\n\t\t\t\t*\t\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t*\t\t\tval: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tdont_inline_this: $s$.test.types.RefStruct,\n\t\t\t\t*\t}} InlinerStruct\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t*\t\tval: number,\n\t\t\t\t*\t}} inline_this\n\t\t\t\t* @property {$s$.test.types.RefStruct} dont_inline_this\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t} & $s$.test.types.FlattenedInner} Inner\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t* \ttype: \"A\",\n\t\t\t\t* } & { [key in string]: string }} InternallyTaggedD\n\t\t\t\t* @property {{\n\t\t\t\t* \ttype: \"A\",\n\t\t\t\t* } & { [key in string]: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {null} InternallyTaggedFInner\n\t\t\t\t* @property {null} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {null} InternallyTaggedHInner\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t* \ttype: \"A\",\n\t\t\t\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t\t\t\t* @property {{\n\t\t\t\t* \ttype: \"A\",\n\t\t\t\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" } | { type: \"B\" }} InternallyTaggedLInner\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t* @property {{ type: \"B\" }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t\t\t\t* @property {{ type: \"A\"; field: string }} A\n\t\t\t\t* @property {{ type: \"B\"; other: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tcause: null,\n\t\t\t\t*\t}} InvalidToValidType\n\t\t\t\t* @property {null} cause\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }) & { B?: never } | ({ B: {\n\t\t\t\t* \tb: string,\n\t\t\t\t* } }) & { A?: never }} Issue221External\n\t\t\t\t* @property {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} A\n\t\t\t\t* @property {{ B: {\n\t\t\t\t* \tb: string,\n\t\t\t\t* } }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t\t\t\t* @property {{ a: string }} A\n\t\t\t\t* @property {{ b: string }} B\n\t\t\t\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t\t\t\t*\n\t\t\t\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t\t\t\t* @property {{ a: string }} A\n\t\t\t\t* @property {{ b: string }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdefault_unity_arguments: string[],\n\t\t\t\t*\t}} Issue281\n\t\t\t\t* @property {string[]} default_unity_arguments\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t\"test-ing\": string,\n\t\t\t\t*\t}} KebabCase\n\t\t\t\t* @property {string} \"test-ing\"\n\t\t\t\t*\n\t\t\t\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t\t\t\t* @property {{ Borrowed: T }} Borrowed\n\t\t\t\t* @property {{ Owned: T }} Owned\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tborrowed: T[],\n\t\t\t\t*\t\towned: T[],\n\t\t\t\t*\t}} LifetimeGenericStruct<T>\n\t\t\t\t* @property {T[]} borrowed\n\t\t\t\t* @property {T[]} owned\n\t\t\t\t*\n\t\t\t\t* @typedef {{ event: \"started\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* } } | { event: \"progressTest\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* \tstatus: string,\n\t\t\t\t* \tprogress: number,\n\t\t\t\t* } } | { event: \"finished\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* } }} LoadProjectEvent\n\t\t\t\t* @property {{ event: \"started\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* } }} started\n\t\t\t\t* @property {{ event: \"progressTest\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* \tstatus: string,\n\t\t\t\t* \tprogress: number,\n\t\t\t\t* } }} progressTest\n\t\t\t\t* @property {{ event: \"finished\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* } }} finished\n\t\t\t\t*\n\t\t\t\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t\t\t\t* \tdemo2: string,\n\t\t\t\t* } }) & { Demo?: never }} MacroEnum\n\t\t\t\t* @property {{ Demo: string }} Demo\n\t\t\t\t* @property {{ Demo2: {\n\t\t\t\t* \tdemo2: string,\n\t\t\t\t* } }} Demo2\n\t\t\t\t*\n\t\t\t\t* @typedef {string} MacroStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: string,\n\t\t\t\t*\t}} MacroStruct2\n\t\t\t\t* @property {string} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {T} MaybeValidKey<T>\n\t\t\t\t* @property {T} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} MyEmptyInput\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: string }) & { B?: never } | ({ B: number }) & { A?: never }} MyEnum\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t* @property {{ B: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"Variant\"; c: {\n\t\t\t\t* \tinner: $s$.test.types.First,\n\t\t\t\t* } }} MyEnumAdjacent\n\t\t\t\t* @property {{ t: \"Variant\"; c: {\n\t\t\t\t* \tinner: $s$.test.types.First,\n\t\t\t\t* } }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{ Variant: {\n\t\t\t\t* \tinner: $s$.test.types.First,\n\t\t\t\t* } }} MyEnumExternal\n\t\t\t\t* @property {{ Variant: {\n\t\t\t\t* \tinner: $s$.test.types.First,\n\t\t\t\t* } }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"Variant\"; inner: $s$.test.types.First }} MyEnumTagged\n\t\t\t\t* @property {{ type: \"Variant\"; inner: $s$.test.types.First }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{ inner: $s$.test.types.First }} MyEnumUntagged\n\t\t\t\t* @property {{ inner: $s$.test.types.First }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: number[],\n\t\t\t\t*\t\ta: number[],\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} NamedConstGeneric\n\t\t\t\t* @property {number[]} data\n\t\t\t\t* @property {number[]} a\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.NamedConstGeneric,\n\t\t\t\t*\t\tb: $s$.test.types.NamedConstGeneric,\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} NamedConstGenericContainer\n\t\t\t\t* @property {$s$.test.types.NamedConstGeneric} a\n\t\t\t\t* @property {$s$.test.types.NamedConstGeneric} b\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"a\"; value: string } | { type: \"b\"; value: number }} NestedEnum\n\t\t\t\t* @property {{ type: \"a\"; value: string }} a\n\t\t\t\t* @property {{ type: \"b\"; value: number }} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } } | { t: \"D\"; c: $s$.test.types.First }} Ninth\n\t\t\t\t* @property {{ t: \"A\"; c: string }} A\n\t\t\t\t* @property {{ t: \"B\" }} B\n\t\t\t\t* @property {{ t: \"C\"; c: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} C\n\t\t\t\t* @property {{ t: \"D\"; c: $s$.test.types.First }} D\n\t\t\t\t*\n\t\t\t\t* @typedef {string | null} NonOptional\n\t\t\t\t* @property {string | null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t\t\t\t* \ta: string | null,\n\t\t\t\t* } }) & { A?: never; C?: never } | ({ C: {\n\t\t\t\t* \ta?: string | null,\n\t\t\t\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t\t\t\t* @property {{ A?: string | null }} A\n\t\t\t\t* @property {{ B: {\n\t\t\t\t* \ta: string | null,\n\t\t\t\t* } }} B\n\t\t\t\t* @property {{ C: {\n\t\t\t\t* \ta?: string | null,\n\t\t\t\t* } }} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string | null} OptionalOnNamedField\n\t\t\t\t* @property {string | null} [\"0\"]\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: string | null,\n\t\t\t\t*\t}} OptionalOnTransparentNamedField\n\t\t\t\t* @property {string | null} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\toverriden_field: string,\n\t\t\t\t*\t}} OverridenStruct\n\t\t\t\t* @property {string} overriden_field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfirst: Z,\n\t\t\t\t*\t\tsecond: A,\n\t\t\t\t*\t}} Pair<Z, A>\n\t\t\t\t* @property {Z} first\n\t\t\t\t* @property {A} second\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} PlaceholderInnerField\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: $s$.test.types.Recursive,\n\t\t\t\t*\t}} Recursive\n\t\t\t\t* @property {$s$.test.types.Recursive} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: {\n\t\t\t\t* \tdemo: $s$.test.types.RecursiveInEnum,\n\t\t\t\t* } }} RecursiveInEnum\n\t\t\t\t* @property {{ A: {\n\t\t\t\t* \tdemo: $s$.test.types.RecursiveInEnum,\n\t\t\t\t* } }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.RecursiveInline} RecursiveInline\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: { [key in string]: $s$.test.types.RecursiveMapValue },\n\t\t\t\t*\t}} RecursiveMapValue\n\t\t\t\t* @property {{ [key in string]: $s$.test.types.RecursiveMapValue }} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.RecursiveInline} RecursiveTransparent\n\t\t\t\t* @property {$s$.test.types.RecursiveInline} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.TestEnum} RefStruct\n\t\t\t\t* @property {$s$.test.types.TestEnum} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in string]: null }} Regular\n\t\t\t\t* @property {{ [key in string]: null }} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t\t\t\t* @property {\"OneWord\"} OneWord\n\t\t\t\t* @property {\"Two words\"} \"Two words\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t\"a/b\": number,\n\t\t\t\t*\t}} RenameSerdeSpecialChar\n\t\t\t\t* @property {number} \"a/b\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t\"@odata.context\": string,\n\t\t\t\t*\t}} RenameWithWeirdCharsField\n\t\t\t\t* @property {string} \"@odata.context\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t\t\t\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t\"\": string,\n\t\t\t\t*\t\t\"a\\\"b\": string,\n\t\t\t\t*\t\t\"a\\\\b\": string,\n\t\t\t\t*\t\t\"line\\nbreak\": string,\n\t\t\t\t*\t\t\"line\\u2028break\": string,\n\t\t\t\t*\t\t\"line\\u2029break\": string,\n\t\t\t\t*\t}} RenamedFieldKeys\n\t\t\t\t* @property {string} \"\"\n\t\t\t\t* @property {string} \"a\\\"b\"\n\t\t\t\t* @property {string} \"a\\\\b\"\n\t\t\t\t* @property {string} \"line\\nbreak\"\n\t\t\t\t* @property {string} \"line\\u2028break\"\n\t\t\t\t* @property {string} \"line\\u2029break\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t\t\t\t* @property {\"a-b\"} \"a-b\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} Second\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: $s$.test.types.Second,\n\t\t\t\t*\t}} Seventh\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {$s$.test.types.Second} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\tb: string,\n\t\t\t\t*\t\tc: [number, string, number],\n\t\t\t\t*\t\td: string[],\n\t\t\t\t*\t\te: string | null,\n\t\t\t\t*\t}} SimpleStruct\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {string} b\n\t\t\t\t* @property {[number, string, number]} c\n\t\t\t\t* @property {string[]} d\n\t\t\t\t* @property {string | null} e\n\t\t\t\t*\n\t\t\t\t*  Some single-line comment\n\t\t\t\t*\n\t\t\t\t* @typedef {\n\t\t\t\t*\t/**  Some single-line comment */\n\t\t\t\t* ({ A: number }) & { B?: never } | \n\t\t\t\t*\t/**  Some single-line comment */\n\t\t\t\t* ({ B: {\n\t\t\t\t* \t/**  Some single-line comment */\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }) & { A?: never }} SingleLineComment\n\t\t\t\t* @property {\n\t\t\t\t* /**  Some single-line comment */\n\t\t\t\t* { A: number }} A - Some single-line comment\n\t\t\t\t* @property {\n\t\t\t\t* /**  Some single-line comment */\n\t\t\t\t* { B: {\n\t\t\t\t* \t/**  Some single-line comment */\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }} B - Some single-line comment\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: $s$.test.types.First,\n\t\t\t\t*\t}} Sixth\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {$s$.test.types.First} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} SkipField\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t\t\t\t* \tb: number,\n\t\t\t\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t\t\t\t* @property {{ A: Record<string, never> }} A\n\t\t\t\t* @property {{ B: {\n\t\t\t\t* \tb: number,\n\t\t\t\t* } }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} SkipOnlyField\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} SkipStructFields\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {{ B: [number] }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: string }} SkipVariant\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t\t\t\t* @property {{ tag: \"A\"; data: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} SkipVariant3\n\t\t\t\t* @property {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t* @property {{ type: \"B\"; data: string }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} SpectaSkipNonTypeField\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tstring_ident: string,\n\t\t\t\t*\t\tu32_ident: number,\n\t\t\t\t*\t\tpath: string,\n\t\t\t\t*\t\ttuple: [string, number],\n\t\t\t\t*\t}} SpectaTypeOverride\n\t\t\t\t* @property {string} string_ident\n\t\t\t\t* @property {number} u32_ident\n\t\t\t\t* @property {string} path\n\t\t\t\t* @property {[string, number]} tuple\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: string,\n\t\t\t\t*\t}} Struct2\n\t\t\t\t* @property {string} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tt: \"StructNew\",\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} StructNew\n\t\t\t\t* @property {\"StructNew\"} t\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tA: number,\n\t\t\t\t*\t\tB: number,\n\t\t\t\t*\t}} StructRenameAllUppercase\n\t\t\t\t* @property {number} A\n\t\t\t\t* @property {number} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: string,\n\t\t\t\t*\t}} StructWithAlias\n\t\t\t\t* @property {string} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\trenamed_field: string,\n\t\t\t\t*\t}} StructWithAliasAndRename\n\t\t\t\t* @property {string} renamed_field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: string,\n\t\t\t\t*\t}} StructWithMultipleAliases\n\t\t\t\t* @property {string} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ttype: \"TagOnStructWithInline\",\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\ta: string,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} TagOnStructWithInline\n\t\t\t\t* @property {\"TagOnStructWithInline\"} type\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} b\n\t\t\t\t*\n\t\t\t\t* @typedef {string | \"B\" | {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | $s$.test.types.First} Tenth\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t* @property {{\n\t\t\t\t* \ta: string,\n\t\t\t\t* }} C\n\t\t\t\t* @property {$s$.test.types.First} D\n\t\t\t\t*\n\t\t\t\t* @typedef {never} TestCollectionRegister\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t\t\t\t* @property {\"Unit\"} Unit\n\t\t\t\t* @property {{ Single: number }} Single\n\t\t\t\t* @property {{ Multiple: [number, number] }} Multiple\n\t\t\t\t* @property {{ Struct: {\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }} Struct\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: { [key in string]: string },\n\t\t\t\t*\t\tc: $s$.test.types.First,\n\t\t\t\t*\t} & $s$.test.types.First} Third\n\t\t\t\t* @property {{ [key in string]: string }} b\n\t\t\t\t* @property {$s$.test.types.First} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} ToBeFlattened\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.TransparentTypeInner} TransparentType\n\t\t\t\t* @property {$s$.test.types.TransparentTypeInner} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {null} TransparentType2\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tinner: string,\n\t\t\t\t*\t}} TransparentTypeInner\n\t\t\t\t* @property {string} inner\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentTypeWithOverride\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {null} TransparentWithSkip\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentWithSkip2\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentWithSkip3\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t\t\t\t* @property {number[]} \"0\"\n\t\t\t\t* @property {[number[], number[]]} \"1\"\n\t\t\t\t* @property {[number[], number[], number[]]} \"2\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TupleStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {number} TupleStruct1\n\t\t\t\t* @property {number} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {[number, boolean, string]} TupleStruct3\n\t\t\t\t* @property {number} \"0\"\n\t\t\t\t* @property {boolean} \"1\"\n\t\t\t\t* @property {string} \"2\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TupleStructWithRep\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {null} Unit1\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} Unit2\n\t\t\t\t*\n\t\t\t\t* @typedef {[]} Unit3\n\t\t\t\t*\n\t\t\t\t* @typedef {null} Unit4\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\"} Unit5\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: null }} Unit6\n\t\t\t\t* @property {{ A: null }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: Record<string, never> }} Unit7\n\t\t\t\t* @property {{ A: Record<string, never> }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t* @property {\"C\"} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {number} C\n\t\t\t\t* @property {{ id: string }} D\n\t\t\t\t* @property {[string, boolean]} E\n\t\t\t\t*\n\t\t\t\t* @typedef {string | number} UntaggedVariantsKey\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {number} C\n\t\t\t\t*\n\t\t\t\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t\t\t\t* @property {null} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {null} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {[number, string]} B\n\t\t\t\t* @property {number} C\n\t\t\t\t*\n\t\t\t\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t\t\t\t* @property {{ field: string }} A\n\t\t\t\t* @property {{ other: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in $s$.test.types.MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t\t\t\t* @property {{ [key in $s$.test.types.MaybeValidKey<string>]: null }} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in $s$.test.types.MaybeValidKey<$s$.test.types.MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t\t\t\t* @property {{ [key in $s$.test.types.MaybeValidKey<$s$.test.types.MaybeValidKey<string>>]: null }} \"0\"\n\t\t\t\t*/\n\n\t\t\texport namespace type_type {\n\t\t\t\t/**\n\t\t\t\t\t* @typedef {never} Type\n\t\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\texport namespace tests {\n\n\t\texport namespace tests {\n\n\t\t\texport namespace types {\n\t\t\t\t/**\n\t\t\t\t\t* @typedef {{\n\t\t\t\t\t*\t\ti8: number,\n\t\t\t\t\t*\t\ti16: number,\n\t\t\t\t\t*\t\ti32: number,\n\t\t\t\t\t*\t\tu8: number,\n\t\t\t\t\t*\t\tu16: number,\n\t\t\t\t\t*\t\tu32: number,\n\t\t\t\t\t*\t\tf32: number,\n\t\t\t\t\t*\t\tf64: number,\n\t\t\t\t\t*\t\tbool: boolean,\n\t\t\t\t\t*\t\tchar: string,\n\t\t\t\t\t*\t\t\"Range<i32>\": $s$.std.ops.Range<number>,\n\t\t\t\t\t*\t\t\"RangeInclusive<i32>\": $s$.std.ops.RangeInclusive<number>,\n\t\t\t\t\t*\t\t\"()\": null,\n\t\t\t\t\t*\t\t\"(String, i32)\": [string, number],\n\t\t\t\t\t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t\t\t\t\t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\t\t\t\t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\t\t\t\t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t\t\t\t\t*\t\tString: string,\n\t\t\t\t\t*\t\tPathBuf: string,\n\t\t\t\t\t*\t\tIpAddr: string,\n\t\t\t\t\t*\t\tIpv4Addr: string,\n\t\t\t\t\t*\t\tIpv6Addr: string,\n\t\t\t\t\t*\t\tSocketAddr: string,\n\t\t\t\t\t*\t\tSocketAddrV4: string,\n\t\t\t\t\t*\t\tSocketAddrV6: string,\n\t\t\t\t\t*\t\t\"Cow<'static, str>\": string,\n\t\t\t\t\t*\t\t\"Cow<'static, i32>\": number,\n\t\t\t\t\t*\t\t\"&'static str\": string,\n\t\t\t\t\t*\t\t\"&'static bool\": boolean,\n\t\t\t\t\t*\t\t\"&'static i32\": number,\n\t\t\t\t\t*\t\t\"Vec<i32>\": number[],\n\t\t\t\t\t*\t\t\"&'static [i32]\": number[],\n\t\t\t\t\t*\t\t\"&'static [i32; 3]\": [number, number, number],\n\t\t\t\t\t*\t\t\"[i32; 3]\": [number, number, number],\n\t\t\t\t\t*\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\t*\t\t\"&'static [MyEnum]\": $s$.test.types.MyEnum[],\n\t\t\t\t\t*\t\t\"&'static [MyEnum; 6]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t*\t\t\"[MyEnum; 2]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t*\t\t\"&'static [i32; 1]\": [number],\n\t\t\t\t\t*\t\t\"&'static [i32; 0]\": [],\n\t\t\t\t\t*\t\t\"Option<i32>\": number | null,\n\t\t\t\t\t*\t\t\"Option<()>\": null,\n\t\t\t\t\t*\t\t\"Option<Vec<i32>>\": number[] | null,\n\t\t\t\t\t*\t\t\"Result<String, i32>\": $s$.std.result.Result<string, number>,\n\t\t\t\t\t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\t\t\t\t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\t\t\t\t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\t\t\t\t*\t\t\"Option<Option<String>>\": string | null,\n\t\t\t\t\t*\t\t\"Option<Option<Option<String>>>\": string | null,\n\t\t\t\t\t*\t\t\"PhantomData<()>\": null,\n\t\t\t\t\t*\t\t\"PhantomData<String>\": null,\n\t\t\t\t\t*\t\tInfallible: never,\n\t\t\t\t\t*\t\tUnit1: $s$.test.types.Unit1,\n\t\t\t\t\t*\t\tUnit2: $s$.test.types.Unit2,\n\t\t\t\t\t*\t\tUnit3: $s$.test.types.Unit3,\n\t\t\t\t\t*\t\tUnit4: $s$.test.types.Unit4,\n\t\t\t\t\t*\t\tUnit5: $s$.test.types.Unit5,\n\t\t\t\t\t*\t\tUnit6: $s$.test.types.Unit6,\n\t\t\t\t\t*\t\tUnit7: $s$.test.types.Unit7,\n\t\t\t\t\t*\t\tSimpleStruct: $s$.test.types.SimpleStruct,\n\t\t\t\t\t*\t\tTupleStruct1: $s$.test.types.TupleStruct1,\n\t\t\t\t\t*\t\tTupleStruct3: $s$.test.types.TupleStruct3,\n\t\t\t\t\t*\t\tTestEnum: $s$.test.types.TestEnum,\n\t\t\t\t\t*\t\tRefStruct: $s$.test.types.RefStruct,\n\t\t\t\t\t*\t\tInlinerStruct: $s$.test.types.InlinerStruct,\n\t\t\t\t\t*\t\t\"GenericStruct<i32>\": $s$.test.types.GenericStruct<number>,\n\t\t\t\t\t*\t\t\"GenericStruct<String>\": $s$.test.types.GenericStruct<string>,\n\t\t\t\t\t*\t\tFlattenEnumStruct: $s$.test.types.FlattenEnumStruct,\n\t\t\t\t\t*\t\tOverridenStruct: $s$.test.types.OverridenStruct,\n\t\t\t\t\t*\t\tHasGenericAlias: $s$.test.types.HasGenericAlias,\n\t\t\t\t\t*\t\tEnumMacroAttributes: $s$.test.types.EnumMacroAttributes,\n\t\t\t\t\t*\t\tInlineEnumField: $s$.test.types.InlineEnumField,\n\t\t\t\t\t*\t\tInlineOptionalType: $s$.test.types.InlineOptionalType,\n\t\t\t\t\t*\t\tRename: $s$.test.types.Rename,\n\t\t\t\t\t*\t\tTransparentType: $s$.test.types.TransparentType,\n\t\t\t\t\t*\t\tTransparentType2: $s$.test.types.TransparentType2,\n\t\t\t\t\t*\t\tTransparentTypeWithOverride: $s$.test.types.TransparentTypeWithOverride,\n\t\t\t\t\t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\t\t\t\t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in $s$.test.types.BasicEnum]: null }>,\n\t\t\t\t\t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t\t\t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\t\t\t\t*\t\t\"Vec<PlaceholderInnerField>\": $s$.test.types.PlaceholderInnerField[],\n\t\t\t\t\t*\t\tEnumReferenceRecordKey: $s$.test.types.EnumReferenceRecordKey,\n\t\t\t\t\t*\t\tFlattenOnNestedEnum: $s$.test.types.FlattenOnNestedEnum,\n\t\t\t\t\t*\t\tMyEmptyInput: $s$.test.types.MyEmptyInput,\n\t\t\t\t\t*\t\t\"(String)\": string,\n\t\t\t\t\t*\t\t\"(String,)\": [string],\n\t\t\t\t\t*\t\tExtraBracketsInTupleVariant: $s$.test.types.ExtraBracketsInTupleVariant,\n\t\t\t\t\t*\t\tExtraBracketsInUnnamedStruct: $s$.test.types.ExtraBracketsInUnnamedStruct,\n\t\t\t\t\t*\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\t*\t\tInlineTuple: $s$.test.types.InlineTuple,\n\t\t\t\t\t*\t\tInlineTuple2: $s$.test.types.InlineTuple2,\n\t\t\t\t\t*\t\t\"Box<str>\": string,\n\t\t\t\t\t*\t\t\"Box<String>\": string,\n\t\t\t\t\t*\t\tSkippedFieldWithinVariant: $s$.test.types.SkippedFieldWithinVariant,\n\t\t\t\t\t*\t\tKebabCase: $s$.test.types.KebabCase,\n\t\t\t\t\t*\t\t\"&[&str]\": string[],\n\t\t\t\t\t*\t\t\"Issue281<'_>\": $s$.test.types.Issue281,\n\t\t\t\t\t*\t\t\"LifetimeGenericStruct<'_, i32>\": $s$.test.types.LifetimeGenericStruct<number>,\n\t\t\t\t\t*\t\t\"LifetimeGenericEnum<'_, i32>\": $s$.test.types.LifetimeGenericEnum<number>,\n\t\t\t\t\t*\t\tRenameWithWeirdCharsField: $s$.test.types.RenameWithWeirdCharsField,\n\t\t\t\t\t*\t\tRenameWithWeirdCharsVariant: $s$.test.types.RenameWithWeirdCharsVariant,\n\t\t\t\t\t*\t\tRenamedFieldKeys: $s$.test.types.RenamedFieldKeys,\n\t\t\t\t\t*\t\tRenamedVariantWithSkippedPayload: $s$.test.types.RenamedVariantWithSkippedPayload,\n\t\t\t\t\t*\t\t\"type_type::Type\": $s$.test.types.type_type.Type,\n\t\t\t\t\t*\t\tActualType: $s$.test.types.ActualType,\n\t\t\t\t\t*\t\tSpectaTypeOverride: $s$.test.types.SpectaTypeOverride,\n\t\t\t\t\t*\t\tContainerTypeOverrideStruct: $s$.test.types.ContainerTypeOverrideStruct,\n\t\t\t\t\t*\t\tContainerTypeOverrideEnum: $s$.test.types.ContainerTypeOverrideEnum,\n\t\t\t\t\t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": $s$.test.types.ContainerTypeOverrideGeneric,\n\t\t\t\t\t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": $s$.test.types.ContainerTypeOverrideToGeneric<number>,\n\t\t\t\t\t*\t\tContainerTypeOverrideTuple: $s$.test.types.ContainerTypeOverrideTuple,\n\t\t\t\t\t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": $s$.test.types.ContainerTypeOverrideTupleGeneric<number>,\n\t\t\t\t\t*\t\tInvalidToValidType: $s$.test.types.InvalidToValidType,\n\t\t\t\t\t*\t\tTupleStruct: $s$.test.types.TupleStruct,\n\t\t\t\t\t*\t\tTupleStructWithRep: $s$.test.types.TupleStructWithRep,\n\t\t\t\t\t*\t\t\"GenericTupleStruct<String>\": $s$.test.types.GenericTupleStruct<string>,\n\t\t\t\t\t*\t\tBracedStruct: $s$.test.types.BracedStruct,\n\t\t\t\t\t*\t\tStruct: $s$.test.types.StructNew,\n\t\t\t\t\t*\t\tStruct2: $s$.test.types.Struct2,\n\t\t\t\t\t*\t\tEnum: $s$.test.types.Enum,\n\t\t\t\t\t*\t\tEnum2: $s$.test.types.Enum2,\n\t\t\t\t\t*\t\tEnum3: $s$.test.types.Enum3,\n\t\t\t\t\t*\t\tStructRenameAllUppercase: $s$.test.types.StructRenameAllUppercase,\n\t\t\t\t\t*\t\tRenameSerdeSpecialChar: $s$.test.types.RenameSerdeSpecialChar,\n\t\t\t\t\t*\t\tEnumRenameAllUppercase: $s$.test.types.EnumRenameAllUppercase,\n\t\t\t\t\t*\t\tRecursive: $s$.test.types.Recursive,\n\t\t\t\t\t*\t\tRecursiveMapValue: $s$.test.types.RecursiveMapValue,\n\t\t\t\t\t*\t\tRecursiveTransparent: $s$.test.types.RecursiveTransparent,\n\t\t\t\t\t*\t\tRecursiveInEnum: $s$.test.types.RecursiveInEnum,\n\t\t\t\t\t*\t\tNonOptional: $s$.test.types.NonOptional,\n\t\t\t\t\t*\t\tOptionalOnNamedField: $s$.test.types.OptionalOnNamedField,\n\t\t\t\t\t*\t\tOptionalOnTransparentNamedField: $s$.test.types.OptionalOnTransparentNamedField,\n\t\t\t\t\t*\t\tOptionalInEnum: $s$.test.types.OptionalInEnum,\n\t\t\t\t\t*\t\tUntaggedVariants: $s$.test.types.UntaggedVariants,\n\t\t\t\t\t*\t\tUntaggedVariantsWithoutValue: $s$.test.types.UntaggedVariantsWithoutValue,\n\t\t\t\t\t*\t\tUntaggedVariantsWithDuplicateBranches: $s$.test.types.UntaggedVariantsWithDuplicateBranches,\n\t\t\t\t\t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t\t\t\t\t*\t\tRegular: $s$.test.types.Regular,\n\t\t\t\t\t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\t\t\t\t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in $s$.test.types.TransparentStruct]: null },\n\t\t\t\t\t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in $s$.test.types.UnitVariants]: null }>,\n\t\t\t\t\t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in $s$.test.types.UntaggedVariantsKey]: null }>,\n\t\t\t\t\t*\t\tValidMaybeValidKey: $s$.test.types.ValidMaybeValidKey,\n\t\t\t\t\t*\t\tValidMaybeValidKeyNested: $s$.test.types.ValidMaybeValidKeyNested,\n\t\t\t\t\t*\t\tMacroStruct: $s$.test.types.MacroStruct,\n\t\t\t\t\t*\t\tMacroStruct2: $s$.test.types.MacroStruct2,\n\t\t\t\t\t*\t\tMacroEnum: $s$.test.types.MacroEnum,\n\t\t\t\t\t*\t\tDeprecatedType: $s$.test.types.DeprecatedType,\n\t\t\t\t\t*\t\tDeprecatedTypeWithMsg: $s$.test.types.DeprecatedTypeWithMsg,\n\t\t\t\t\t*\t\tDeprecatedTypeWithMsg2: $s$.test.types.DeprecatedTypeWithMsg2,\n\t\t\t\t\t*\t\tDeprecatedFields: $s$.test.types.DeprecatedFields,\n\t\t\t\t\t*\t\tDeprecatedTupleVariant: $s$.test.types.DeprecatedTupleVariant,\n\t\t\t\t\t*\t\tDeprecatedEnumVariants: $s$.test.types.DeprecatedEnumVariants,\n\t\t\t\t\t*\t\tCommentedStruct: $s$.test.types.CommentedStruct,\n\t\t\t\t\t*\t\tCommentedEnum: $s$.test.types.CommentedEnum,\n\t\t\t\t\t*\t\tSingleLineComment: $s$.test.types.SingleLineComment,\n\t\t\t\t\t*\t\tNonGeneric: $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"HalfGenericA<u8>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"HalfGenericB<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"FullGeneric<u8, bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"Another<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"MapA<u32>\": { [key in string]: number },\n\t\t\t\t\t*\t\t\"MapB<u32>\": { [key in number]: string },\n\t\t\t\t\t*\t\t\"MapC<u32>\": { [key in string]: $s$.test.types.AGenericStruct<number> },\n\t\t\t\t\t*\t\t\"AGenericStruct<u32>\": $s$.test.types.AGenericStruct<number>,\n\t\t\t\t\t*\t\tA: $s$.test.types.A,\n\t\t\t\t\t*\t\tDoubleFlattened: $s$.test.types.DoubleFlattened,\n\t\t\t\t\t*\t\tFlattenedInner: $s$.test.types.FlattenedInner,\n\t\t\t\t\t*\t\tBoxFlattened: $s$.test.types.BoxFlattened,\n\t\t\t\t\t*\t\tBoxInline: $s$.test.types.BoxInline,\n\t\t\t\t\t*\t\tFirst: $s$.test.types.First,\n\t\t\t\t\t*\t\tSecond: $s$.test.types.Second,\n\t\t\t\t\t*\t\tThird: $s$.test.types.Third,\n\t\t\t\t\t*\t\tFourth: $s$.test.types.Fourth,\n\t\t\t\t\t*\t\tTagOnStructWithInline: $s$.test.types.TagOnStructWithInline,\n\t\t\t\t\t*\t\tSixth: $s$.test.types.Sixth,\n\t\t\t\t\t*\t\tSeventh: $s$.test.types.Seventh,\n\t\t\t\t\t*\t\tEight: $s$.test.types.Eight,\n\t\t\t\t\t*\t\tNinth: $s$.test.types.Ninth,\n\t\t\t\t\t*\t\tTenth: $s$.test.types.Tenth,\n\t\t\t\t\t*\t\tMyEnumTagged: $s$.test.types.MyEnumTagged,\n\t\t\t\t\t*\t\tMyEnumExternal: $s$.test.types.MyEnumExternal,\n\t\t\t\t\t*\t\tMyEnumAdjacent: $s$.test.types.MyEnumAdjacent,\n\t\t\t\t\t*\t\tMyEnumUntagged: $s$.test.types.MyEnumUntagged,\n\t\t\t\t\t*\t\tEmptyStruct: $s$.test.types.EmptyStruct,\n\t\t\t\t\t*\t\tEmptyStructWithTag: $s$.test.types.EmptyStructWithTag,\n\t\t\t\t\t*\t\tAdjacentlyTagged: $s$.test.types.AdjacentlyTagged,\n\t\t\t\t\t*\t\tLoadProjectEvent: $s$.test.types.LoadProjectEvent,\n\t\t\t\t\t*\t\tExternallyTagged: $s$.test.types.ExternallyTagged,\n\t\t\t\t\t*\t\tIssue221External: $s$.test.types.Issue221External,\n\t\t\t\t\t*\t\tInternallyTaggedD: $s$.test.types.InternallyTaggedD,\n\t\t\t\t\t*\t\tInternallyTaggedE: $s$.test.types.InternallyTaggedE,\n\t\t\t\t\t*\t\tInternallyTaggedF: $s$.test.types.InternallyTaggedF,\n\t\t\t\t\t*\t\tInternallyTaggedH: $s$.test.types.InternallyTaggedH,\n\t\t\t\t\t*\t\tInternallyTaggedL: $s$.test.types.InternallyTaggedL,\n\t\t\t\t\t*\t\tInternallyTaggedM: $s$.test.types.InternallyTaggedM,\n\t\t\t\t\t*\t\tStructWithAlias: $s$.test.types.StructWithAlias,\n\t\t\t\t\t*\t\tStructWithMultipleAliases: $s$.test.types.StructWithMultipleAliases,\n\t\t\t\t\t*\t\tStructWithAliasAndRename: $s$.test.types.StructWithAliasAndRename,\n\t\t\t\t\t*\t\tEnumWithVariantAlias: $s$.test.types.EnumWithVariantAlias,\n\t\t\t\t\t*\t\tEnumWithMultipleVariantAliases: $s$.test.types.EnumWithMultipleVariantAliases,\n\t\t\t\t\t*\t\tEnumWithVariantAliasAndRename: $s$.test.types.EnumWithVariantAliasAndRename,\n\t\t\t\t\t*\t\tInternallyTaggedWithAlias: $s$.test.types.InternallyTaggedWithAlias,\n\t\t\t\t\t*\t\tAdjacentlyTaggedWithAlias: $s$.test.types.AdjacentlyTaggedWithAlias,\n\t\t\t\t\t*\t\tUntaggedWithAlias: $s$.test.types.UntaggedWithAlias,\n\t\t\t\t\t*\t\tIssue221UntaggedSafe: $s$.test.types.Issue221UntaggedSafe,\n\t\t\t\t\t*\t\tIssue221UntaggedMixed: $s$.test.types.Issue221UntaggedMixed,\n\t\t\t\t\t*\t\tEmptyEnum: $s$.test.types.EmptyEnum,\n\t\t\t\t\t*\t\tEmptyEnumTagged: $s$.test.types.EmptyEnumTagged,\n\t\t\t\t\t*\t\tEmptyEnumTaggedWContent: $s$.test.types.EmptyEnumTaggedWContent,\n\t\t\t\t\t*\t\tEmptyEnumUntagged: $s$.test.types.EmptyEnumUntagged,\n\t\t\t\t\t*\t\tSkipOnlyField: $s$.test.types.SkipOnlyField,\n\t\t\t\t\t*\t\tSkipField: $s$.test.types.SkipField,\n\t\t\t\t\t*\t\tSkipVariant: $s$.test.types.SkipVariant,\n\t\t\t\t\t*\t\tSkipUnnamedFieldInVariant: $s$.test.types.SkipUnnamedFieldInVariant,\n\t\t\t\t\t*\t\tSkipNamedFieldInVariant: $s$.test.types.SkipNamedFieldInVariant,\n\t\t\t\t\t*\t\tTransparentWithSkip: $s$.test.types.TransparentWithSkip,\n\t\t\t\t\t*\t\tTransparentWithSkip2: $s$.test.types.TransparentWithSkip2,\n\t\t\t\t\t*\t\tTransparentWithSkip3: $s$.test.types.TransparentWithSkip3,\n\t\t\t\t\t*\t\tSkipVariant2: $s$.test.types.SkipVariant2,\n\t\t\t\t\t*\t\tSkipVariant3: $s$.test.types.SkipVariant3,\n\t\t\t\t\t*\t\tSkipStructFields: $s$.test.types.SkipStructFields,\n\t\t\t\t\t*\t\tSpectaSkipNonTypeField: $s$.test.types.SpectaSkipNonTypeField,\n\t\t\t\t\t*\t\tFlattenA: $s$.test.types.FlattenA,\n\t\t\t\t\t*\t\tFlattenB: $s$.test.types.FlattenB,\n\t\t\t\t\t*\t\tFlattenC: $s$.test.types.FlattenC,\n\t\t\t\t\t*\t\tFlattenD: $s$.test.types.FlattenD,\n\t\t\t\t\t*\t\tFlattenE: $s$.test.types.FlattenE,\n\t\t\t\t\t*\t\tFlattenF: $s$.test.types.FlattenF,\n\t\t\t\t\t*\t\tFlattenG: $s$.test.types.FlattenG,\n\t\t\t\t\t*\t\tTupleNested: $s$.test.types.TupleNested,\n\t\t\t\t\t*\t\t\"Generic1<()>\": $s$.test.types.Generic1<null>,\n\t\t\t\t\t*\t\t\"GenericAutoBound<()>\": $s$.test.types.GenericAutoBound<null>,\n\t\t\t\t\t*\t\t\"GenericAutoBound2<()>\": $s$.test.types.GenericAutoBound2<null>,\n\t\t\t\t\t*\t\tContainer1: $s$.test.types.Container1,\n\t\t\t\t\t*\t\t\"Generic2<(), String, i32>\": $s$.test.types.Generic2<null, string, number>,\n\t\t\t\t\t*\t\t\"GenericNewType1<()>\": $s$.test.types.GenericNewType1<null>,\n\t\t\t\t\t*\t\t\"GenericTuple<()>\": $s$.test.types.GenericTuple<null>,\n\t\t\t\t\t*\t\t\"GenericStruct2<()>\": $s$.test.types.GenericStruct2<null>,\n\t\t\t\t\t*\t\t\"InlineGenericNewtype<String>\": string,\n\t\t\t\t\t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t\t\t\t\t* \tvalue: string,\n\t\t\t\t\t* } }) & { Unnamed?: never }],\n\t\t\t\t\t*\t\t\"InlineFlattenGenericsG<()>\": $s$.test.types.InlineFlattenGenericsG<null>,\n\t\t\t\t\t*\t\tInlineFlattenGenerics: $s$.test.types.InlineFlattenGenerics,\n\t\t\t\t\t*\t\tGenericDefault: $s$.test.types.GenericDefault,\n\t\t\t\t\t*\t\tChainedGenericDefault: $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t*\t\t\"ChainedGenericDefault<String, String>\": $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t*\t\t\"ChainedGenericDefault<i32>\": $s$.test.types.ChainedGenericDefault<number, number>,\n\t\t\t\t\t*\t\t\"ChainedGenericDefault<String, i32>\": $s$.test.types.ChainedGenericDefault<string, number>,\n\t\t\t\t\t*\t\tGenericDefaultSkipped: $s$.test.types.GenericDefaultSkipped<string>,\n\t\t\t\t\t*\t\tGenericDefaultSkippedNonType: $s$.test.types.GenericDefaultSkippedNonType<unknown>,\n\t\t\t\t\t*\t\tGenericParameterOrderPreserved: $s$.test.types.GenericParameterOrderPreserved,\n\t\t\t\t\t*\t\tConstGenericInNonConstContainer: $s$.test.types.ConstGenericInNonConstContainer,\n\t\t\t\t\t*\t\tConstGenericInConstContainer: $s$.test.types.ConstGenericInConstContainer,\n\t\t\t\t\t*\t\tNamedConstGenericContainer: $s$.test.types.NamedConstGenericContainer,\n\t\t\t\t\t*\t\tInlineConstGenericContainer: $s$.test.types.InlineConstGenericContainer,\n\t\t\t\t\t*\t\tInlineRecursiveConstGenericContainer: $s$.test.types.InlineRecursiveConstGenericContainer,\n\t\t\t\t\t*\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t\t*\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t\t*\t}} Primitives\n\t\t\t\t\t* @property {number} i8\n\t\t\t\t\t* @property {number} i16\n\t\t\t\t\t* @property {number} i32\n\t\t\t\t\t* @property {number} u8\n\t\t\t\t\t* @property {number} u16\n\t\t\t\t\t* @property {number} u32\n\t\t\t\t\t* @property {number} f32\n\t\t\t\t\t* @property {number} f64\n\t\t\t\t\t* @property {boolean} bool\n\t\t\t\t\t* @property {string} char\n\t\t\t\t\t* @property {$s$.std.ops.Range<number>} \"Range<i32>\"\n\t\t\t\t\t* @property {$s$.std.ops.RangeInclusive<number>} \"RangeInclusive<i32>\"\n\t\t\t\t\t* @property {null} \"()\"\n\t\t\t\t\t* @property {[string, number]} \"(String, i32)\"\n\t\t\t\t\t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n\t\t\t\t\t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n\t\t\t\t\t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n\t\t\t\t\t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n\t\t\t\t\t* @property {string} String\n\t\t\t\t\t* @property {string} PathBuf\n\t\t\t\t\t* @property {string} IpAddr\n\t\t\t\t\t* @property {string} Ipv4Addr\n\t\t\t\t\t* @property {string} Ipv6Addr\n\t\t\t\t\t* @property {string} SocketAddr\n\t\t\t\t\t* @property {string} SocketAddrV4\n\t\t\t\t\t* @property {string} SocketAddrV6\n\t\t\t\t\t* @property {string} \"Cow<'static, str>\"\n\t\t\t\t\t* @property {number} \"Cow<'static, i32>\"\n\t\t\t\t\t* @property {string} \"&'static str\"\n\t\t\t\t\t* @property {boolean} \"&'static bool\"\n\t\t\t\t\t* @property {number} \"&'static i32\"\n\t\t\t\t\t* @property {number[]} \"Vec<i32>\"\n\t\t\t\t\t* @property {number[]} \"&'static [i32]\"\n\t\t\t\t\t* @property {[number, number, number]} \"&'static [i32; 3]\"\n\t\t\t\t\t* @property {[number, number, number]} \"[i32; 3]\"\n\t\t\t\t\t* @property {$s$.test.types.MyEnum[]} \"Vec<MyEnum>\"\n\t\t\t\t\t* @property {$s$.test.types.MyEnum[]} \"&'static [MyEnum]\"\n\t\t\t\t\t* @property {[$s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum]} \"&'static [MyEnum; 6]\"\n\t\t\t\t\t* @property {[$s$.test.types.MyEnum, $s$.test.types.MyEnum]} \"[MyEnum; 2]\"\n\t\t\t\t\t* @property {[number]} \"&'static [i32; 1]\"\n\t\t\t\t\t* @property {[]} \"&'static [i32; 0]\"\n\t\t\t\t\t* @property {number | null} \"Option<i32>\"\n\t\t\t\t\t* @property {null} \"Option<()>\"\n\t\t\t\t\t* @property {number[] | null} \"Option<Vec<i32>>\"\n\t\t\t\t\t* @property {$s$.std.result.Result<string, number>} \"Result<String, i32>\"\n\t\t\t\t\t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n\t\t\t\t\t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n\t\t\t\t\t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n\t\t\t\t\t* @property {string | null} \"Option<Option<String>>\"\n\t\t\t\t\t* @property {string | null} \"Option<Option<Option<String>>>\"\n\t\t\t\t\t* @property {null} \"PhantomData<()>\"\n\t\t\t\t\t* @property {null} \"PhantomData<String>\"\n\t\t\t\t\t* @property {never} Infallible\n\t\t\t\t\t* @property {$s$.test.types.Unit1} Unit1\n\t\t\t\t\t* @property {$s$.test.types.Unit2} Unit2\n\t\t\t\t\t* @property {$s$.test.types.Unit3} Unit3\n\t\t\t\t\t* @property {$s$.test.types.Unit4} Unit4\n\t\t\t\t\t* @property {$s$.test.types.Unit5} Unit5\n\t\t\t\t\t* @property {$s$.test.types.Unit6} Unit6\n\t\t\t\t\t* @property {$s$.test.types.Unit7} Unit7\n\t\t\t\t\t* @property {$s$.test.types.SimpleStruct} SimpleStruct\n\t\t\t\t\t* @property {$s$.test.types.TupleStruct1} TupleStruct1\n\t\t\t\t\t* @property {$s$.test.types.TupleStruct3} TupleStruct3\n\t\t\t\t\t* @property {$s$.test.types.TestEnum} TestEnum\n\t\t\t\t\t* @property {$s$.test.types.RefStruct} RefStruct\n\t\t\t\t\t* @property {$s$.test.types.InlinerStruct} InlinerStruct\n\t\t\t\t\t* @property {$s$.test.types.GenericStruct<number>} \"GenericStruct<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericStruct<string>} \"GenericStruct<String>\"\n\t\t\t\t\t* @property {$s$.test.types.FlattenEnumStruct} FlattenEnumStruct\n\t\t\t\t\t* @property {$s$.test.types.OverridenStruct} OverridenStruct\n\t\t\t\t\t* @property {$s$.test.types.HasGenericAlias} HasGenericAlias\n\t\t\t\t\t* @property {$s$.test.types.EnumMacroAttributes} EnumMacroAttributes\n\t\t\t\t\t* @property {$s$.test.types.InlineEnumField} InlineEnumField\n\t\t\t\t\t* @property {$s$.test.types.InlineOptionalType} InlineOptionalType\n\t\t\t\t\t* @property {$s$.test.types.Rename} Rename\n\t\t\t\t\t* @property {$s$.test.types.TransparentType} TransparentType\n\t\t\t\t\t* @property {$s$.test.types.TransparentType2} TransparentType2\n\t\t\t\t\t* @property {$s$.test.types.TransparentTypeWithOverride} TransparentTypeWithOverride\n\t\t\t\t\t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n\t\t\t\t\t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n\t\t\t\t\t* @property {$s$.test.types.PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n\t\t\t\t\t* @property {$s$.test.types.EnumReferenceRecordKey} EnumReferenceRecordKey\n\t\t\t\t\t* @property {$s$.test.types.FlattenOnNestedEnum} FlattenOnNestedEnum\n\t\t\t\t\t* @property {$s$.test.types.MyEmptyInput} MyEmptyInput\n\t\t\t\t\t* @property {string} \"(String)\"\n\t\t\t\t\t* @property {[string]} \"(String,)\"\n\t\t\t\t\t* @property {$s$.test.types.ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n\t\t\t\t\t* @property {$s$.test.types.ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n\t\t\t\t\t* @property {$s$.test.types.MyEnum[]} \"Vec<MyEnum>\"\n\t\t\t\t\t* @property {$s$.test.types.InlineTuple} InlineTuple\n\t\t\t\t\t* @property {$s$.test.types.InlineTuple2} InlineTuple2\n\t\t\t\t\t* @property {string} \"Box<str>\"\n\t\t\t\t\t* @property {string} \"Box<String>\"\n\t\t\t\t\t* @property {$s$.test.types.SkippedFieldWithinVariant} SkippedFieldWithinVariant\n\t\t\t\t\t* @property {$s$.test.types.KebabCase} KebabCase\n\t\t\t\t\t* @property {string[]} \"&[&str]\"\n\t\t\t\t\t* @property {$s$.test.types.Issue281} \"Issue281<'_>\"\n\t\t\t\t\t* @property {$s$.test.types.LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.RenameWithWeirdCharsField} RenameWithWeirdCharsField\n\t\t\t\t\t* @property {$s$.test.types.RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n\t\t\t\t\t* @property {$s$.test.types.RenamedFieldKeys} RenamedFieldKeys\n\t\t\t\t\t* @property {$s$.test.types.RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n\t\t\t\t\t* @property {$s$.test.types.type_type.Type} \"type_type::Type\"\n\t\t\t\t\t* @property {$s$.test.types.ActualType} ActualType\n\t\t\t\t\t* @property {$s$.test.types.SpectaTypeOverride} SpectaTypeOverride\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.InvalidToValidType} InvalidToValidType\n\t\t\t\t\t* @property {$s$.test.types.TupleStruct} TupleStruct\n\t\t\t\t\t* @property {$s$.test.types.TupleStructWithRep} TupleStructWithRep\n\t\t\t\t\t* @property {$s$.test.types.GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n\t\t\t\t\t* @property {$s$.test.types.BracedStruct} BracedStruct\n\t\t\t\t\t* @property {$s$.test.types.StructNew} Struct\n\t\t\t\t\t* @property {$s$.test.types.Struct2} Struct2\n\t\t\t\t\t* @property {$s$.test.types.Enum} Enum\n\t\t\t\t\t* @property {$s$.test.types.Enum2} Enum2\n\t\t\t\t\t* @property {$s$.test.types.Enum3} Enum3\n\t\t\t\t\t* @property {$s$.test.types.StructRenameAllUppercase} StructRenameAllUppercase\n\t\t\t\t\t* @property {$s$.test.types.RenameSerdeSpecialChar} RenameSerdeSpecialChar\n\t\t\t\t\t* @property {$s$.test.types.EnumRenameAllUppercase} EnumRenameAllUppercase\n\t\t\t\t\t* @property {$s$.test.types.Recursive} Recursive\n\t\t\t\t\t* @property {$s$.test.types.RecursiveMapValue} RecursiveMapValue\n\t\t\t\t\t* @property {$s$.test.types.RecursiveTransparent} RecursiveTransparent\n\t\t\t\t\t* @property {$s$.test.types.RecursiveInEnum} RecursiveInEnum\n\t\t\t\t\t* @property {$s$.test.types.NonOptional} NonOptional\n\t\t\t\t\t* @property {$s$.test.types.OptionalOnNamedField} OptionalOnNamedField\n\t\t\t\t\t* @property {$s$.test.types.OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n\t\t\t\t\t* @property {$s$.test.types.OptionalInEnum} OptionalInEnum\n\t\t\t\t\t* @property {$s$.test.types.UntaggedVariants} UntaggedVariants\n\t\t\t\t\t* @property {$s$.test.types.UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n\t\t\t\t\t* @property {$s$.test.types.UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n\t\t\t\t\t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n\t\t\t\t\t* @property {$s$.test.types.Regular} Regular\n\t\t\t\t\t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n\t\t\t\t\t* @property {{ [key in $s$.test.types.TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n\t\t\t\t\t* @property {$s$.test.types.ValidMaybeValidKey} ValidMaybeValidKey\n\t\t\t\t\t* @property {$s$.test.types.ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n\t\t\t\t\t* @property {$s$.test.types.MacroStruct} MacroStruct\n\t\t\t\t\t* @property {$s$.test.types.MacroStruct2} MacroStruct2\n\t\t\t\t\t* @property {$s$.test.types.MacroEnum} MacroEnum\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedType} DeprecatedType\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedFields} DeprecatedFields\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedTupleVariant} DeprecatedTupleVariant\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedEnumVariants} DeprecatedEnumVariants\n\t\t\t\t\t* @property {$s$.test.types.CommentedStruct} CommentedStruct\n\t\t\t\t\t* @property {$s$.test.types.CommentedEnum} CommentedEnum\n\t\t\t\t\t* @property {$s$.test.types.SingleLineComment} SingleLineComment\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} NonGeneric\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"HalfGenericA<u8>\"\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"HalfGenericB<bool>\"\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"Another<bool>\"\n\t\t\t\t\t* @property {{ [key in string]: number }} \"MapA<u32>\"\n\t\t\t\t\t* @property {{ [key in number]: string }} \"MapB<u32>\"\n\t\t\t\t\t* @property {{ [key in string]: $s$.test.types.AGenericStruct<number> }} \"MapC<u32>\"\n\t\t\t\t\t* @property {$s$.test.types.AGenericStruct<number>} \"AGenericStruct<u32>\"\n\t\t\t\t\t* @property {$s$.test.types.A} A\n\t\t\t\t\t* @property {$s$.test.types.DoubleFlattened} DoubleFlattened\n\t\t\t\t\t* @property {$s$.test.types.FlattenedInner} FlattenedInner\n\t\t\t\t\t* @property {$s$.test.types.BoxFlattened} BoxFlattened\n\t\t\t\t\t* @property {$s$.test.types.BoxInline} BoxInline\n\t\t\t\t\t* @property {$s$.test.types.First} First\n\t\t\t\t\t* @property {$s$.test.types.Second} Second\n\t\t\t\t\t* @property {$s$.test.types.Third} Third\n\t\t\t\t\t* @property {$s$.test.types.Fourth} Fourth\n\t\t\t\t\t* @property {$s$.test.types.TagOnStructWithInline} TagOnStructWithInline\n\t\t\t\t\t* @property {$s$.test.types.Sixth} Sixth\n\t\t\t\t\t* @property {$s$.test.types.Seventh} Seventh\n\t\t\t\t\t* @property {$s$.test.types.Eight} Eight\n\t\t\t\t\t* @property {$s$.test.types.Ninth} Ninth\n\t\t\t\t\t* @property {$s$.test.types.Tenth} Tenth\n\t\t\t\t\t* @property {$s$.test.types.MyEnumTagged} MyEnumTagged\n\t\t\t\t\t* @property {$s$.test.types.MyEnumExternal} MyEnumExternal\n\t\t\t\t\t* @property {$s$.test.types.MyEnumAdjacent} MyEnumAdjacent\n\t\t\t\t\t* @property {$s$.test.types.MyEnumUntagged} MyEnumUntagged\n\t\t\t\t\t* @property {$s$.test.types.EmptyStruct} EmptyStruct\n\t\t\t\t\t* @property {$s$.test.types.EmptyStructWithTag} EmptyStructWithTag\n\t\t\t\t\t* @property {$s$.test.types.AdjacentlyTagged} AdjacentlyTagged\n\t\t\t\t\t* @property {$s$.test.types.LoadProjectEvent} LoadProjectEvent\n\t\t\t\t\t* @property {$s$.test.types.ExternallyTagged} ExternallyTagged\n\t\t\t\t\t* @property {$s$.test.types.Issue221External} Issue221External\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedD} InternallyTaggedD\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedE} InternallyTaggedE\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedF} InternallyTaggedF\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedH} InternallyTaggedH\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedL} InternallyTaggedL\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedM} InternallyTaggedM\n\t\t\t\t\t* @property {$s$.test.types.StructWithAlias} StructWithAlias\n\t\t\t\t\t* @property {$s$.test.types.StructWithMultipleAliases} StructWithMultipleAliases\n\t\t\t\t\t* @property {$s$.test.types.StructWithAliasAndRename} StructWithAliasAndRename\n\t\t\t\t\t* @property {$s$.test.types.EnumWithVariantAlias} EnumWithVariantAlias\n\t\t\t\t\t* @property {$s$.test.types.EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n\t\t\t\t\t* @property {$s$.test.types.EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedWithAlias} InternallyTaggedWithAlias\n\t\t\t\t\t* @property {$s$.test.types.AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n\t\t\t\t\t* @property {$s$.test.types.UntaggedWithAlias} UntaggedWithAlias\n\t\t\t\t\t* @property {$s$.test.types.Issue221UntaggedSafe} Issue221UntaggedSafe\n\t\t\t\t\t* @property {$s$.test.types.Issue221UntaggedMixed} Issue221UntaggedMixed\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnum} EmptyEnum\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnumTagged} EmptyEnumTagged\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnumUntagged} EmptyEnumUntagged\n\t\t\t\t\t* @property {$s$.test.types.SkipOnlyField} SkipOnlyField\n\t\t\t\t\t* @property {$s$.test.types.SkipField} SkipField\n\t\t\t\t\t* @property {$s$.test.types.SkipVariant} SkipVariant\n\t\t\t\t\t* @property {$s$.test.types.SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n\t\t\t\t\t* @property {$s$.test.types.SkipNamedFieldInVariant} SkipNamedFieldInVariant\n\t\t\t\t\t* @property {$s$.test.types.TransparentWithSkip} TransparentWithSkip\n\t\t\t\t\t* @property {$s$.test.types.TransparentWithSkip2} TransparentWithSkip2\n\t\t\t\t\t* @property {$s$.test.types.TransparentWithSkip3} TransparentWithSkip3\n\t\t\t\t\t* @property {$s$.test.types.SkipVariant2} SkipVariant2\n\t\t\t\t\t* @property {$s$.test.types.SkipVariant3} SkipVariant3\n\t\t\t\t\t* @property {$s$.test.types.SkipStructFields} SkipStructFields\n\t\t\t\t\t* @property {$s$.test.types.SpectaSkipNonTypeField} SpectaSkipNonTypeField\n\t\t\t\t\t* @property {$s$.test.types.FlattenA} FlattenA\n\t\t\t\t\t* @property {$s$.test.types.FlattenB} FlattenB\n\t\t\t\t\t* @property {$s$.test.types.FlattenC} FlattenC\n\t\t\t\t\t* @property {$s$.test.types.FlattenD} FlattenD\n\t\t\t\t\t* @property {$s$.test.types.FlattenE} FlattenE\n\t\t\t\t\t* @property {$s$.test.types.FlattenF} FlattenF\n\t\t\t\t\t* @property {$s$.test.types.FlattenG} FlattenG\n\t\t\t\t\t* @property {$s$.test.types.TupleNested} TupleNested\n\t\t\t\t\t* @property {$s$.test.types.Generic1<null>} \"Generic1<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericAutoBound<null>} \"GenericAutoBound<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n\t\t\t\t\t* @property {$s$.test.types.Container1} Container1\n\t\t\t\t\t* @property {$s$.test.types.Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericNewType1<null>} \"GenericNewType1<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericTuple<null>} \"GenericTuple<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericStruct2<null>} \"GenericStruct2<()>\"\n\t\t\t\t\t* @property {string} \"InlineGenericNewtype<String>\"\n\t\t\t\t\t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t\t\t\t\t* \tvalue: string,\n\t\t\t\t\t* } }) & { Unnamed?: never }]} \"InlineGenericNested<String>\"\n\t\t\t\t\t* @property {$s$.test.types.InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n\t\t\t\t\t* @property {$s$.test.types.InlineFlattenGenerics} InlineFlattenGenerics\n\t\t\t\t\t* @property {$s$.test.types.GenericDefault} GenericDefault\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault} ChainedGenericDefault\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericDefaultSkipped<string>} GenericDefaultSkipped\n\t\t\t\t\t* @property {$s$.test.types.GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n\t\t\t\t\t* @property {$s$.test.types.GenericParameterOrderPreserved} GenericParameterOrderPreserved\n\t\t\t\t\t* @property {$s$.test.types.ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n\t\t\t\t\t* @property {$s$.test.types.ConstGenericInConstContainer} ConstGenericInConstContainer\n\t\t\t\t\t* @property {$s$.test.types.NamedConstGenericContainer} NamedConstGenericContainer\n\t\t\t\t\t* @property {$s$.test.types.InlineConstGenericContainer} InlineConstGenericContainer\n\t\t\t\t\t* @property {$s$.test.types.InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n\t\t\t\t\t* @property {$s$.test.types.TestCollectionRegister} TestCollectionRegister\n\t\t\t\t\t* @property {$s$.test.types.TestCollectionRegister} TestCollectionRegister\n\t\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n}\nexport import std = $s$.std;\nexport import test = $s$.test;\nexport import tests = $s$.tests;\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__jsdoc-export-to-namespaces-serde_phases.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\njsdoc-export-to-namespaces-serde_phases (71704 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n\nnamespace $s$ {\n\n\texport namespace std {\n\n\t\texport namespace ops {\n\t\t\t/**\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tstart: T,\n\t\t\t\t*\t\tend: T,\n\t\t\t\t*\t}} Range<T>\n\t\t\t\t* @property {T} start\n\t\t\t\t* @property {T} end\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tstart: T,\n\t\t\t\t*\t\tend: T,\n\t\t\t\t*\t}} RangeInclusive<T>\n\t\t\t\t* @property {T} start\n\t\t\t\t* @property {T} end\n\t\t\t\t*/\n\t\t}\n\n\t\texport namespace result {\n\t\t\t/**\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tok: T,\n\t\t\t\t*\t\terr: E,\n\t\t\t\t*\t}} Result<T, E>\n\t\t\t\t* @property {T} ok\n\t\t\t\t* @property {E} err\n\t\t\t\t*/\n\t\t}\n\t}\n\n\texport namespace test {\n\n\t\texport namespace types {\n\t\t\t/**\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.B,\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\tb: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tc: $s$.test.types.B,\n\t\t\t\t*\t\td: {\n\t\t\t\t*\t\t\tflattened: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\te: {\n\t\t\t\t*\t\t\tgeneric_flattened: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} A\n\t\t\t\t* @property {$s$.test.types.B} a\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {$s$.test.types.B} c\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tflattened: number,\n\t\t\t\t*\t}} d\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tgeneric_flattened: number,\n\t\t\t\t*\t}} e\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: $s$.test.types.Demo<T, boolean>,\n\t\t\t\t*\t}} AGenericStruct<T>\n\t\t\t\t* @property {$s$.test.types.Demo<T, boolean>} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.GenericType<string>,\n\t\t\t\t*\t}} ActualType\n\t\t\t\t* @property {$s$.test.types.GenericType<string>} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t\t\t\t* \tid: string,\n\t\t\t\t* \tmethod: string,\n\t\t\t\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t\t\t\t* @property {{ t: \"A\" }} A\n\t\t\t\t* @property {{ t: \"B\"; c: {\n\t\t\t\t* \tid: string,\n\t\t\t\t* \tmethod: string,\n\t\t\t\t* } }} B\n\t\t\t\t* @property {{ t: \"C\"; c: string }} C\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\"; data: {\n\t\t\t\t* \tfield: string,\n\t\t\t\t* } } | { type: \"B\"; data: {\n\t\t\t\t* \tother: number,\n\t\t\t\t* } }} AdjacentlyTaggedWithAlias\n\t\t\t\t* @property {{ type: \"A\"; data: {\n\t\t\t\t* \tfield: string,\n\t\t\t\t* } }} A\n\t\t\t\t* @property {{ type: \"B\"; data: {\n\t\t\t\t* \tother: number,\n\t\t\t\t* } }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} B\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} BasicEnum\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.BoxedInner} BoxFlattened\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tc: {\n\t\t\t\t*\t\t\ta: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} BoxInline\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} BoxedInner\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {string} BracedStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfirst: T,\n\t\t\t\t*\t\tsecond: U,\n\t\t\t\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t\t\t\t* @property {T} first\n\t\t\t\t* @property {U} second\n\t\t\t\t*\n\t\t\t\t*  Some triple-slash comment\n\t\t\t\t*  Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t* @typedef {\n\t\t\t\t*\t/**\n\t\t\t\t*\t *  Some triple-slash comment\n\t\t\t\t*\t *  Some more triple-slash comment\n\t\t\t\t*\t */\n\t\t\t\t* ({ A: number }) & { B?: never } | \n\t\t\t\t*\t/**\n\t\t\t\t*\t *  Some triple-slash comment\n\t\t\t\t*\t *  Some more triple-slash comment\n\t\t\t\t*\t */\n\t\t\t\t* ({ B: {\n\t\t\t\t* \t/**\n\t\t\t\t* \t *  Some triple-slash comment\n\t\t\t\t* \t *  Some more triple-slash comment\n\t\t\t\t* \t */\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }) & { A?: never }} CommentedEnum\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  *  Some triple-slash comment\n\t\t\t\t*  *  Some more triple-slash comment\n\t\t\t\t*  */\n\t\t\t\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  *  Some triple-slash comment\n\t\t\t\t*  *  Some more triple-slash comment\n\t\t\t\t*  */\n\t\t\t\t* { B: {\n\t\t\t\t* \t/**\n\t\t\t\t* \t *  Some triple-slash comment\n\t\t\t\t* \t *  Some more triple-slash comment\n\t\t\t\t* \t */\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t*  Some triple-slash comment\n\t\t\t\t*  Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t *  Some triple-slash comment\n\t\t\t\t*\t\t *  Some more triple-slash comment\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} CommentedStruct\n\t\t\t\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: number[],\n\t\t\t\t*\t\ta: number[],\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} ConstGenericInConstContainer\n\t\t\t\t* @property {number[]} data\n\t\t\t\t* @property {number[]} a\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: [number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} ConstGenericInNonConstContainer\n\t\t\t\t* @property {[number]} data\n\t\t\t\t* @property {[number, number]} a\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfoo: $s$.test.types.Generic1<number>,\n\t\t\t\t*\t\tbar: $s$.test.types.Generic1<number>[],\n\t\t\t\t*\t\tbaz: { [key in string]: $s$.test.types.Generic1<string> },\n\t\t\t\t*\t}} Container1\n\t\t\t\t* @property {$s$.test.types.Generic1<number>} foo\n\t\t\t\t* @property {$s$.test.types.Generic1<number>[]} bar\n\t\t\t\t* @property {{ [key in string]: $s$.test.types.Generic1<string> }} baz\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ContainerTypeOverrideEnum\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ContainerTypeOverrideGeneric\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ContainerTypeOverrideStruct\n\t\t\t\t*\n\t\t\t\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t\t\t\t*\n\t\t\t\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t\t\t\t*\n\t\t\t\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tflattened: number,\n\t\t\t\t*\t}} D\n\t\t\t\t* @property {number} flattened\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: A,\n\t\t\t\t*\t\tb: B,\n\t\t\t\t*\t}} Demo<A, B>\n\t\t\t\t* @property {A} a\n\t\t\t\t* @property {B} b\n\t\t\t\t*\n\t\t\t\t* @typedef {\n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated\n\t\t\t\t*\t */\n\t\t\t\t* \"A\" | \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* \"B\" | \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* \"C\"} DeprecatedEnumVariants\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  * @deprecated\n\t\t\t\t*  */\n\t\t\t\t* \"A\"} A - @deprecated\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  * @deprecated Nope\n\t\t\t\t*  */\n\t\t\t\t* \"B\"} B - @deprecated Nope\n\t\t\t\t* @property {\n\t\t\t\t* /**\n\t\t\t\t*  * @deprecated Nope\n\t\t\t\t*  */\n\t\t\t\t* \"C\"} C - @deprecated Nope\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t * @deprecated\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\tb: string,\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t * @deprecated This field is cringe!\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\tc: string,\n\t\t\t\t*\t\t/**\n\t\t\t\t*\t\t * @deprecated This field is cringe!\n\t\t\t\t*\t\t */\n\t\t\t\t*\t\td: string,\n\t\t\t\t*\t}} DeprecatedFields\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {string} b - @deprecated\n\t\t\t\t* @property {string} c - @deprecated This field is cringe!\n\t\t\t\t* @property {string} d - @deprecated This field is cringe!\n\t\t\t\t*\n\t\t\t\t* @typedef {[\n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated\n\t\t\t\t*\t */\n\t\t\t\t* string, \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* string, \n\t\t\t\t*\t/**\n\t\t\t\t*\t * @deprecated Nope\n\t\t\t\t*\t */\n\t\t\t\t* number]} DeprecatedTupleVariant\n\t\t\t\t* @property {string} \"0\" - @deprecated\n\t\t\t\t* @property {string} \"1\" - @deprecated Nope\n\t\t\t\t* @property {number} \"2\" - @deprecated Nope\n\t\t\t\t*\n\t\t\t\t* @deprecated\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} DeprecatedType\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @deprecated Look at you big man using a deprecation message\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} DeprecatedTypeWithMsg\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @deprecated Look at you big man using a deprecation message\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} DeprecatedTypeWithMsg2\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.ToBeFlattened,\n\t\t\t\t*\t\tb: $s$.test.types.ToBeFlattened,\n\t\t\t\t*\t}} DoubleFlattened\n\t\t\t\t* @property {$s$.test.types.ToBeFlattened} a\n\t\t\t\t* @property {$s$.test.types.ToBeFlattened} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: string } | \"B\"} Eight\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnum\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnumTagged\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnumTaggedWContent\n\t\t\t\t*\n\t\t\t\t* @typedef {never} EmptyEnumUntagged\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} EmptyStruct\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: \"EmptyStructWithTag\",\n\t\t\t\t*\t}} EmptyStructWithTag\n\t\t\t\t* @property {\"EmptyStructWithTag\"} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t\t\t\t* @property {{ t: \"A\" }} A\n\t\t\t\t* @property {{ t: \"B\" }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t\t\t\t* @property {{ t: \"C\" }} C\n\t\t\t\t* @property {{ t: \"B\" }} B\n\t\t\t\t* @property {{ t: \"D\"; enumField: null }} D\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t\t\t\t* @property {{ t: \"A\"; b: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* \tbbbbbb: number,\n\t\t\t\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t* @property {{ bbb: number }} bbb\n\t\t\t\t* @property {{ cccc: number }} cccc\n\t\t\t\t* @property {{ D: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* \tbbbbbb: number,\n\t\t\t\t* } }} D\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t\t*\t}} EnumReferenceRecordKey\n\t\t\t\t* @property {Partial<{ [key in $s$.test.types.BasicEnum]: number }>} a\n\t\t\t\t*\n\t\t\t\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t\t\t\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t\t\t\t* @property {\"VARIANTB\"} VARIANTB\n\t\t\t\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t\t\t\t* @property {\"Variant\"} Variant\n\t\t\t\t* @property {\"Other\"} Other\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t\t\t\t* @property {\"Variant\"} Variant\n\t\t\t\t* @property {\"Other\"} Other\n\t\t\t\t*\n\t\t\t\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t\t\t\t* @property {\"renamed_variant\"} renamed_variant\n\t\t\t\t* @property {\"Other\"} Other\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | ({ B: {\n\t\t\t\t* \tid: string,\n\t\t\t\t* \tmethod: string,\n\t\t\t\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {{ B: {\n\t\t\t\t* \tid: string,\n\t\t\t\t* \tmethod: string,\n\t\t\t\t* } }} B\n\t\t\t\t* @property {{ C: string }} C\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} First\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} FlattenA\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t} & $s$.test.types.FlattenA} FlattenB\n\t\t\t\t* @property {number} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t} & $s$.test.types.FlattenA} FlattenC\n\t\t\t\t* @property {number} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}} FlattenD\n\t\t\t\t* @property {$s$.test.types.FlattenA} a\n\t\t\t\t* @property {number} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: ({\n\t\t\t\t*\t\t\tc: number,\n\t\t\t\t*\t\t}) & ($s$.test.types.FlattenA),\n\t\t\t\t*\t\td: number,\n\t\t\t\t*\t}} FlattenE\n\t\t\t\t* @property {({\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}) & ($s$.test.types.FlattenA)} b\n\t\t\t\t* @property {number} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{ tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" }} FlattenEnum\n\t\t\t\t* @property {{ tag: \"One\" }} One\n\t\t\t\t* @property {{ tag: \"Two\" }} Two\n\t\t\t\t* @property {{ tag: \"Three\" }} Three\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\touter: string,\n\t\t\t\t*\t} & $s$.test.types.FlattenEnum} FlattenEnumStruct\n\t\t\t\t* @property {string} outer\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: ({\n\t\t\t\t*\t\t\tc: number,\n\t\t\t\t*\t\t}) & ($s$.test.types.FlattenA),\n\t\t\t\t*\t\td: number,\n\t\t\t\t*\t}} FlattenF\n\t\t\t\t* @property {({\n\t\t\t\t*\t\tc: number,\n\t\t\t\t*\t}) & ($s$.test.types.FlattenA)} b\n\t\t\t\t* @property {number} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: $s$.test.types.FlattenB,\n\t\t\t\t*\t\td: number,\n\t\t\t\t*\t}} FlattenG\n\t\t\t\t* @property {$s$.test.types.FlattenB} b\n\t\t\t\t* @property {number} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tid: string,\n\t\t\t\t*\t} & $s$.test.types.NestedEnum} FlattenOnNestedEnum\n\t\t\t\t* @property {string} id\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.Inner} FlattenedInner\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\ta: string,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} Fourth\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t\tvalues: T[],\n\t\t\t\t*\t}} Generic1<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t* @property {T[]} values\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t\t\t\t* \ta: A,\n\t\t\t\t* \tb: B,\n\t\t\t\t* \tc: C,\n\t\t\t\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t\t\t\t* @property {{ A: A }} A\n\t\t\t\t* @property {{ B: [B, B, B] }} B\n\t\t\t\t* @property {{ C: C[] }} C\n\t\t\t\t* @property {{ D: A[][][] }} D\n\t\t\t\t* @property {{ E: {\n\t\t\t\t* \ta: A,\n\t\t\t\t* \tb: B,\n\t\t\t\t* \tc: C,\n\t\t\t\t* } }} E\n\t\t\t\t* @property {{ X: number[] }} X\n\t\t\t\t* @property {{ Y: number }} Y\n\t\t\t\t* @property {{ Z: number[][] }} Z\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t\tvalues: T[],\n\t\t\t\t*\t}} GenericAutoBound<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t* @property {T[]} values\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t\tvalues: T[],\n\t\t\t\t*\t}} GenericAutoBound2<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t* @property {T[]} values\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t}} GenericDefault<T = string>\n\t\t\t\t* @property {T} value\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: T,\n\t\t\t\t*\t}} GenericDefaultSkipped<T>\n\t\t\t\t* @property {T} value\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tvalue: number,\n\t\t\t\t*\t}} GenericDefaultSkippedNonType<T>\n\t\t\t\t* @property {number} value\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tgeneric_flattened: T,\n\t\t\t\t*\t}} GenericFlattened<T>\n\t\t\t\t* @property {T} generic_flattened\n\t\t\t\t*\n\t\t\t\t* @typedef {T[][]} GenericNewType1<T>\n\t\t\t\t* @property {T[][]} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tpair: $s$.test.types.Pair<number, string>,\n\t\t\t\t*\t}} GenericParameterOrderPreserved\n\t\t\t\t* @property {$s$.test.types.Pair<number, string>} pair\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\targ: T,\n\t\t\t\t*\t}} GenericStruct<T>\n\t\t\t\t* @property {T} arg\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: T,\n\t\t\t\t*\t\tb: [T, T],\n\t\t\t\t*\t\tc: [T, [T, T]],\n\t\t\t\t*\t\td: [T, T, T],\n\t\t\t\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t\t\t\t*\t\tf: T[],\n\t\t\t\t*\t\tg: T[][],\n\t\t\t\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t\t\t\t*\t}} GenericStruct2<T>\n\t\t\t\t* @property {T} a\n\t\t\t\t* @property {[T, T]} b\n\t\t\t\t* @property {[T, [T, T]]} c\n\t\t\t\t* @property {[T, T, T]} d\n\t\t\t\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t\t\t\t* @property {T[]} f\n\t\t\t\t* @property {T[][]} g\n\t\t\t\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t\t\t\t*\n\t\t\t\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t\t\t\t* @property {T} \"0\"\n\t\t\t\t* @property {T[]} \"1\"\n\t\t\t\t* @property {T[][]} \"2\"\n\t\t\t\t*\n\t\t\t\t* @typedef {T} GenericTupleStruct<T>\n\t\t\t\t* @property {T} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Undefined\" | T} GenericType<T>\n\t\t\t\t* @property {\"Undefined\"} Undefined\n\t\t\t\t* @property {T} Value\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t\t\t\t* @property {{ [key in number]: string }} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\tdata: [number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tc: {\n\t\t\t\t*\t\t\tdata: [number, number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} InlineConstGenericContainer\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t}} c\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} InlineEnumField\n\t\t\t\t* @property {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tg: $s$.test.types.InlineFlattenGenericsG<string>,\n\t\t\t\t*\t\tgi: {\n\t\t\t\t*\t\t\tt: string,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t} & $s$.test.types.InlineFlattenGenericsG<string>} InlineFlattenGenerics\n\t\t\t\t* @property {$s$.test.types.InlineFlattenGenericsG<string>} g\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tt: string,\n\t\t\t\t*\t}} gi\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tt: T,\n\t\t\t\t*\t}} InlineFlattenGenericsG<T>\n\t\t\t\t* @property {T} t\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\toptional_field: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | null,\n\t\t\t\t*\t}} InlineOptionalType\n\t\t\t\t* @property {{\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | null} optional_field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: number[],\n\t\t\t\t*\t\ta: number[],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t}} InlineRecursiveConstGeneric\n\t\t\t\t* @property {number[]} data\n\t\t\t\t* @property {number[]} a\n\t\t\t\t* @property {[number, number, number]} d\n\t\t\t\t* @property {$s$.test.types.InlineRecursiveConstGeneric} e\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\tdata: [number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tc: {\n\t\t\t\t*\t\t\tdata: [number, number, number],\n\t\t\t\t*\t\t\ta: [number, number],\n\t\t\t\t*\t\t\td: [number, number, number],\n\t\t\t\t*\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} InlineRecursiveConstGenericContainer\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t}} b\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tdata: [number, number, number],\n\t\t\t\t*\t\ta: [number, number],\n\t\t\t\t*\t\td: [number, number, number],\n\t\t\t\t*\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t*\t}} c\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t*\t\tval: number,\n\t\t\t\t*\t}} InlineStruct\n\t\t\t\t* @property {$s$.test.types.SimpleStruct} ref_struct\n\t\t\t\t* @property {number} val\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: [string, boolean],\n\t\t\t\t*\t}} InlineTuple\n\t\t\t\t* @property {[string, boolean]} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: [{\n\t\t\t\t* \tdemo: [string, boolean],\n\t\t\t\t* }, boolean],\n\t\t\t\t*\t}} InlineTuple2\n\t\t\t\t* @property {[{\n\t\t\t\t* \tdemo: [string, boolean],\n\t\t\t\t* }, boolean]} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tinline_this: {\n\t\t\t\t*\t\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t*\t\t\tval: number,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t\tdont_inline_this: $s$.test.types.RefStruct,\n\t\t\t\t*\t}} InlinerStruct\n\t\t\t\t* @property {{\n\t\t\t\t*\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t*\t\tval: number,\n\t\t\t\t*\t}} inline_this\n\t\t\t\t* @property {$s$.test.types.RefStruct} dont_inline_this\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t} & $s$.test.types.FlattenedInner} Inner\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t* \ttype: \"A\",\n\t\t\t\t* } & { [key in string]: string }} InternallyTaggedD\n\t\t\t\t* @property {{\n\t\t\t\t* \ttype: \"A\",\n\t\t\t\t* } & { [key in string]: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {null} InternallyTaggedFInner\n\t\t\t\t* @property {null} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {null} InternallyTaggedHInner\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t* \ttype: \"A\",\n\t\t\t\t* } & { type: \"A\" } | { type: \"B\" }} InternallyTaggedL\n\t\t\t\t* @property {{\n\t\t\t\t* \ttype: \"A\",\n\t\t\t\t* } & { type: \"A\" } | { type: \"B\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" } | { type: \"B\" }} InternallyTaggedLInner\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t* @property {{ type: \"B\" }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\"} InternallyTaggedMInner\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t\t\t\t* @property {{ type: \"A\"; field: string }} A\n\t\t\t\t* @property {{ type: \"B\"; other: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tcause: null,\n\t\t\t\t*\t}} InvalidToValidType\n\t\t\t\t* @property {null} cause\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }) & { B?: never } | ({ B: {\n\t\t\t\t* \tb: string,\n\t\t\t\t* } }) & { A?: never }} Issue221External\n\t\t\t\t* @property {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} A\n\t\t\t\t* @property {{ B: {\n\t\t\t\t* \tb: string,\n\t\t\t\t* } }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t\t\t\t* @property {{ a: string }} A\n\t\t\t\t* @property {{ b: string }} B\n\t\t\t\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t\t\t\t*\n\t\t\t\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t\t\t\t* @property {{ a: string }} A\n\t\t\t\t* @property {{ b: string }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdefault_unity_arguments: string[],\n\t\t\t\t*\t}} Issue281\n\t\t\t\t* @property {string[]} default_unity_arguments\n\t\t\t\t*\n\t\t\t\t*  https://github.com/specta-rs/specta/issues/374\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.Issue374_Serialize | $s$.test.types.Issue374_Deserialize} Issue374\n\t\t\t\t* @property {$s$.test.types.Issue374_Serialize} Serialize\n\t\t\t\t* @property {$s$.test.types.Issue374_Deserialize} Deserialize\n\t\t\t\t*\n\t\t\t\t*  https://github.com/specta-rs/specta/issues/374\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfoo?: boolean,\n\t\t\t\t*\t\tbar?: boolean,\n\t\t\t\t*\t}} Issue374_Deserialize\n\t\t\t\t* @property {boolean} [foo]\n\t\t\t\t* @property {boolean} [bar]\n\t\t\t\t*\n\t\t\t\t*  https://github.com/specta-rs/specta/issues/374\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfoo?: boolean,\n\t\t\t\t*\t\tbar?: boolean,\n\t\t\t\t*\t}} Issue374_Serialize\n\t\t\t\t* @property {boolean} [foo]\n\t\t\t\t* @property {boolean} [bar]\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t\"test-ing\": string,\n\t\t\t\t*\t}} KebabCase\n\t\t\t\t* @property {string} \"test-ing\"\n\t\t\t\t*\n\t\t\t\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t\t\t\t* @property {{ Borrowed: T }} Borrowed\n\t\t\t\t* @property {{ Owned: T }} Owned\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tborrowed: T[],\n\t\t\t\t*\t\towned: T[],\n\t\t\t\t*\t}} LifetimeGenericStruct<T>\n\t\t\t\t* @property {T[]} borrowed\n\t\t\t\t* @property {T[]} owned\n\t\t\t\t*\n\t\t\t\t* @typedef {{ event: \"started\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* } } | { event: \"progressTest\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* \tstatus: string,\n\t\t\t\t* \tprogress: number,\n\t\t\t\t* } } | { event: \"finished\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* } }} LoadProjectEvent\n\t\t\t\t* @property {{ event: \"started\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* } }} started\n\t\t\t\t* @property {{ event: \"progressTest\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* \tstatus: string,\n\t\t\t\t* \tprogress: number,\n\t\t\t\t* } }} progressTest\n\t\t\t\t* @property {{ event: \"finished\"; data: {\n\t\t\t\t* \tprojectName: string,\n\t\t\t\t* } }} finished\n\t\t\t\t*\n\t\t\t\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t\t\t\t* \tdemo2: string,\n\t\t\t\t* } }) & { Demo?: never }} MacroEnum\n\t\t\t\t* @property {{ Demo: string }} Demo\n\t\t\t\t* @property {{ Demo2: {\n\t\t\t\t* \tdemo2: string,\n\t\t\t\t* } }} Demo2\n\t\t\t\t*\n\t\t\t\t* @typedef {string} MacroStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: string,\n\t\t\t\t*\t}} MacroStruct2\n\t\t\t\t* @property {string} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {T} MaybeValidKey<T>\n\t\t\t\t* @property {T} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} MyEmptyInput\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: string }) & { B?: never } | ({ B: number }) & { A?: never }} MyEnum\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t* @property {{ B: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"Variant\"; c: {\n\t\t\t\t* \tinner: $s$.test.types.First,\n\t\t\t\t* } }} MyEnumAdjacent\n\t\t\t\t* @property {{ t: \"Variant\"; c: {\n\t\t\t\t* \tinner: $s$.test.types.First,\n\t\t\t\t* } }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{ Variant: {\n\t\t\t\t* \tinner: $s$.test.types.First,\n\t\t\t\t* } }} MyEnumExternal\n\t\t\t\t* @property {{ Variant: {\n\t\t\t\t* \tinner: $s$.test.types.First,\n\t\t\t\t* } }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"Variant\"; inner: $s$.test.types.First }} MyEnumTagged\n\t\t\t\t* @property {{ type: \"Variant\"; inner: $s$.test.types.First }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{ inner: $s$.test.types.First }} MyEnumUntagged\n\t\t\t\t* @property {{ inner: $s$.test.types.First }} Variant\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdata: number[],\n\t\t\t\t*\t\ta: number[],\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} NamedConstGeneric\n\t\t\t\t* @property {number[]} data\n\t\t\t\t* @property {number[]} a\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.NamedConstGeneric,\n\t\t\t\t*\t\tb: $s$.test.types.NamedConstGeneric,\n\t\t\t\t*\t\td: [number, number],\n\t\t\t\t*\t}} NamedConstGenericContainer\n\t\t\t\t* @property {$s$.test.types.NamedConstGeneric} a\n\t\t\t\t* @property {$s$.test.types.NamedConstGeneric} b\n\t\t\t\t* @property {[number, number]} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"a\"; value: string } | { type: \"b\"; value: number }} NestedEnum\n\t\t\t\t* @property {{ type: \"a\"; value: string }} a\n\t\t\t\t* @property {{ type: \"b\"; value: number }} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } } | { t: \"D\"; c: $s$.test.types.First }} Ninth\n\t\t\t\t* @property {{ t: \"A\"; c: string }} A\n\t\t\t\t* @property {{ t: \"B\" }} B\n\t\t\t\t* @property {{ t: \"C\"; c: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} C\n\t\t\t\t* @property {{ t: \"D\"; c: $s$.test.types.First }} D\n\t\t\t\t*\n\t\t\t\t* @typedef {string | null} NonOptional\n\t\t\t\t* @property {string | null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.Optional_Serialize | $s$.test.types.Optional_Deserialize} Optional\n\t\t\t\t* @property {$s$.test.types.Optional_Serialize} Serialize\n\t\t\t\t* @property {$s$.test.types.Optional_Deserialize} Deserialize\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t\t\t\t* \ta: string | null,\n\t\t\t\t* } }) & { A?: never; C?: never } | ({ C: {\n\t\t\t\t* \ta?: string | null,\n\t\t\t\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t\t\t\t* @property {{ A?: string | null }} A\n\t\t\t\t* @property {{ B: {\n\t\t\t\t* \ta: string | null,\n\t\t\t\t* } }} B\n\t\t\t\t* @property {{ C: {\n\t\t\t\t* \ta?: string | null,\n\t\t\t\t* } }} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string | null} OptionalOnNamedField\n\t\t\t\t* @property {string | null} [\"0\"]\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: string | null,\n\t\t\t\t*\t}} OptionalOnTransparentNamedField\n\t\t\t\t* @property {string | null} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number | null,\n\t\t\t\t*\t\tb?: number | null,\n\t\t\t\t*\t\tc: string | null,\n\t\t\t\t*\t\td?: boolean,\n\t\t\t\t*\t}} Optional_Deserialize\n\t\t\t\t* @property {number | null} a\n\t\t\t\t* @property {number | null} [b]\n\t\t\t\t* @property {string | null} c\n\t\t\t\t* @property {boolean} [d]\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number | null,\n\t\t\t\t*\t\tb?: number | null,\n\t\t\t\t*\t\tc?: string | null,\n\t\t\t\t*\t\td: boolean,\n\t\t\t\t*\t}} Optional_Serialize\n\t\t\t\t* @property {number | null} a\n\t\t\t\t* @property {number | null} [b]\n\t\t\t\t* @property {string | null} [c]\n\t\t\t\t* @property {boolean} d\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\toverriden_field: string,\n\t\t\t\t*\t}} OverridenStruct\n\t\t\t\t* @property {string} overriden_field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfirst: Z,\n\t\t\t\t*\t\tsecond: A,\n\t\t\t\t*\t}} Pair<Z, A>\n\t\t\t\t* @property {Z} first\n\t\t\t\t* @property {A} second\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} PlaceholderInnerField\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: $s$.test.types.Recursive,\n\t\t\t\t*\t}} Recursive\n\t\t\t\t* @property {$s$.test.types.Recursive} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: {\n\t\t\t\t* \tdemo: $s$.test.types.RecursiveInEnum,\n\t\t\t\t* } }} RecursiveInEnum\n\t\t\t\t* @property {{ A: {\n\t\t\t\t* \tdemo: $s$.test.types.RecursiveInEnum,\n\t\t\t\t* } }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.RecursiveInline} RecursiveInline\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tdemo: { [key in string]: $s$.test.types.RecursiveMapValue },\n\t\t\t\t*\t}} RecursiveMapValue\n\t\t\t\t* @property {{ [key in string]: $s$.test.types.RecursiveMapValue }} demo\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.RecursiveInline} RecursiveTransparent\n\t\t\t\t* @property {$s$.test.types.RecursiveInline} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.TestEnum} RefStruct\n\t\t\t\t* @property {$s$.test.types.TestEnum} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in string]: null }} Regular\n\t\t\t\t* @property {{ [key in string]: null }} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t\t\t\t* @property {\"OneWord\"} OneWord\n\t\t\t\t* @property {\"Two words\"} \"Two words\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t\"a/b\": number,\n\t\t\t\t*\t}} RenameSerdeSpecialChar\n\t\t\t\t* @property {number} \"a/b\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t\"@odata.context\": string,\n\t\t\t\t*\t}} RenameWithWeirdCharsField\n\t\t\t\t* @property {string} \"@odata.context\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t\t\t\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\t\"\": string,\n\t\t\t\t*\t\t\"a\\\"b\": string,\n\t\t\t\t*\t\t\"a\\\\b\": string,\n\t\t\t\t*\t\t\"line\\nbreak\": string,\n\t\t\t\t*\t\t\"line\\u2028break\": string,\n\t\t\t\t*\t\t\"line\\u2029break\": string,\n\t\t\t\t*\t}} RenamedFieldKeys\n\t\t\t\t* @property {string} \"\"\n\t\t\t\t* @property {string} \"a\\\"b\"\n\t\t\t\t* @property {string} \"a\\\\b\"\n\t\t\t\t* @property {string} \"line\\nbreak\"\n\t\t\t\t* @property {string} \"line\\u2028break\"\n\t\t\t\t* @property {string} \"line\\u2029break\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t\t\t\t* @property {\"a-b\"} \"a-b\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} Second\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: $s$.test.types.Second,\n\t\t\t\t*\t}} Seventh\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {$s$.test.types.Second} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t\tb: string,\n\t\t\t\t*\t\tc: [number, string, number],\n\t\t\t\t*\t\td: string[],\n\t\t\t\t*\t\te: string | null,\n\t\t\t\t*\t}} SimpleStruct\n\t\t\t\t* @property {number} a\n\t\t\t\t* @property {string} b\n\t\t\t\t* @property {[number, string, number]} c\n\t\t\t\t* @property {string[]} d\n\t\t\t\t* @property {string | null} e\n\t\t\t\t*\n\t\t\t\t*  Some single-line comment\n\t\t\t\t*\n\t\t\t\t* @typedef {\n\t\t\t\t*\t/**  Some single-line comment */\n\t\t\t\t* ({ A: number }) & { B?: never } | \n\t\t\t\t*\t/**  Some single-line comment */\n\t\t\t\t* ({ B: {\n\t\t\t\t* \t/**  Some single-line comment */\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }) & { A?: never }} SingleLineComment\n\t\t\t\t* @property {\n\t\t\t\t* /**  Some single-line comment */\n\t\t\t\t* { A: number }} A - Some single-line comment\n\t\t\t\t* @property {\n\t\t\t\t* /**  Some single-line comment */\n\t\t\t\t* { B: {\n\t\t\t\t* \t/**  Some single-line comment */\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }} B - Some single-line comment\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: $s$.test.types.First,\n\t\t\t\t*\t}} Sixth\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {$s$.test.types.First} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: number,\n\t\t\t\t*\t}} SkipField\n\t\t\t\t* @property {number} b\n\t\t\t\t*\n\t\t\t\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t\t\t\t* \tb: number,\n\t\t\t\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t\t\t\t* @property {{ A: Record<string, never> }} A\n\t\t\t\t* @property {{ B: {\n\t\t\t\t* \tb: number,\n\t\t\t\t* } }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} SkipOnlyField\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} SkipStructFields\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {{ B: [number] }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: string }} SkipVariant\n\t\t\t\t* @property {{ A: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t\t\t\t* @property {{ tag: \"A\"; data: string }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} SkipVariant3\n\t\t\t\t* @property {{ A: {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t\t\t\t* @property {{ type: \"A\" }} A\n\t\t\t\t* @property {{ type: \"B\"; data: string }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: number,\n\t\t\t\t*\t}} SpectaSkipNonTypeField\n\t\t\t\t* @property {number} a\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tstring_ident: string,\n\t\t\t\t*\t\tu32_ident: number,\n\t\t\t\t*\t\tpath: string,\n\t\t\t\t*\t\ttuple: [string, number],\n\t\t\t\t*\t}} SpectaTypeOverride\n\t\t\t\t* @property {string} string_ident\n\t\t\t\t* @property {number} u32_ident\n\t\t\t\t* @property {string} path\n\t\t\t\t* @property {[string, number]} tuple\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: string,\n\t\t\t\t*\t}} Struct2\n\t\t\t\t* @property {string} b\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tt: \"StructNew\",\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} StructNew\n\t\t\t\t* @property {\"StructNew\"} t\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.StructPhaseSpecificRenameSerialize | $s$.test.types.StructPhaseSpecificRenameDeserialize} StructPhaseSpecificRename\n\t\t\t\t* @property {$s$.test.types.StructPhaseSpecificRenameSerialize} Serialize\n\t\t\t\t* @property {$s$.test.types.StructPhaseSpecificRenameDeserialize} Deserialize\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tkind: \"StructPhaseSpecificRenameDeserialize\",\n\t\t\t\t*\t\tder: string,\n\t\t\t\t*\t}} StructPhaseSpecificRenameDeserialize\n\t\t\t\t* @property {\"StructPhaseSpecificRenameDeserialize\"} kind\n\t\t\t\t* @property {string} der\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tkind: \"StructPhaseSpecificRenameSerialize\",\n\t\t\t\t*\t\tser: string,\n\t\t\t\t*\t}} StructPhaseSpecificRenameSerialize\n\t\t\t\t* @property {\"StructPhaseSpecificRenameSerialize\"} kind\n\t\t\t\t* @property {string} ser\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tA: number,\n\t\t\t\t*\t\tB: number,\n\t\t\t\t*\t}} StructRenameAllUppercase\n\t\t\t\t* @property {number} A\n\t\t\t\t* @property {number} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: string,\n\t\t\t\t*\t}} StructWithAlias\n\t\t\t\t* @property {string} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\trenamed_field: string,\n\t\t\t\t*\t}} StructWithAliasAndRename\n\t\t\t\t* @property {string} renamed_field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tfield: string,\n\t\t\t\t*\t}} StructWithMultipleAliases\n\t\t\t\t* @property {string} field\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ttype: \"TagOnStructWithInline\",\n\t\t\t\t*\t\ta: $s$.test.types.First,\n\t\t\t\t*\t\tb: {\n\t\t\t\t*\t\t\ta: string,\n\t\t\t\t*\t\t},\n\t\t\t\t*\t}} TagOnStructWithInline\n\t\t\t\t* @property {\"TagOnStructWithInline\"} type\n\t\t\t\t* @property {$s$.test.types.First} a\n\t\t\t\t* @property {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} b\n\t\t\t\t*\n\t\t\t\t* @typedef {string | \"B\" | {\n\t\t\t\t* \ta: string,\n\t\t\t\t* } | $s$.test.types.First} Tenth\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t* @property {{\n\t\t\t\t* \ta: string,\n\t\t\t\t* }} C\n\t\t\t\t* @property {$s$.test.types.First} D\n\t\t\t\t*\n\t\t\t\t* @typedef {never} TestCollectionRegister\n\t\t\t\t*\n\t\t\t\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t\t\t\t* @property {\"Unit\"} Unit\n\t\t\t\t* @property {{ Single: number }} Single\n\t\t\t\t* @property {{ Multiple: [number, number] }} Multiple\n\t\t\t\t* @property {{ Struct: {\n\t\t\t\t* \ta: number,\n\t\t\t\t* } }} Struct\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tb: { [key in string]: string },\n\t\t\t\t*\t\tc: $s$.test.types.First,\n\t\t\t\t*\t} & $s$.test.types.First} Third\n\t\t\t\t* @property {{ [key in string]: string }} b\n\t\t\t\t* @property {$s$.test.types.First} c\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\ta: string,\n\t\t\t\t*\t}} ToBeFlattened\n\t\t\t\t* @property {string} a\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {$s$.test.types.TransparentTypeInner} TransparentType\n\t\t\t\t* @property {$s$.test.types.TransparentTypeInner} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {null} TransparentType2\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{\n\t\t\t\t*\t\tinner: string,\n\t\t\t\t*\t}} TransparentTypeInner\n\t\t\t\t* @property {string} inner\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentTypeWithOverride\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {null} TransparentWithSkip\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentWithSkip2\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TransparentWithSkip3\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t\t\t\t* @property {number[]} \"0\"\n\t\t\t\t* @property {[number[], number[]]} \"1\"\n\t\t\t\t* @property {[number[], number[], number[]]} \"2\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TupleStruct\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {number} TupleStruct1\n\t\t\t\t* @property {number} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {[number, boolean, string]} TupleStruct3\n\t\t\t\t* @property {number} \"0\"\n\t\t\t\t* @property {boolean} \"1\"\n\t\t\t\t* @property {string} \"2\"\n\t\t\t\t*\n\t\t\t\t* @typedef {string} TupleStructWithRep\n\t\t\t\t* @property {string} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {null} Unit1\n\t\t\t\t*\n\t\t\t\t* @typedef {Record<string, never>} Unit2\n\t\t\t\t*\n\t\t\t\t* @typedef {[]} Unit3\n\t\t\t\t*\n\t\t\t\t* @typedef {null} Unit4\n\t\t\t\t* @property {null} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\"} Unit5\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: null }} Unit6\n\t\t\t\t* @property {{ A: null }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {{ A: Record<string, never> }} Unit7\n\t\t\t\t* @property {{ A: Record<string, never> }} A\n\t\t\t\t*\n\t\t\t\t* @typedef {\"A\" | \"B\" | \"C\"} UnitVariants\n\t\t\t\t* @property {\"A\"} A\n\t\t\t\t* @property {\"B\"} B\n\t\t\t\t* @property {\"C\"} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {number} C\n\t\t\t\t* @property {{ id: string }} D\n\t\t\t\t* @property {[string, boolean]} E\n\t\t\t\t*\n\t\t\t\t* @typedef {string | number} UntaggedVariantsKey\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {number} C\n\t\t\t\t*\n\t\t\t\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t\t\t\t* @property {null} A\n\t\t\t\t* @property {number} B\n\t\t\t\t* @property {null} C\n\t\t\t\t*\n\t\t\t\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t\t\t\t* @property {string} A\n\t\t\t\t* @property {[number, string]} B\n\t\t\t\t* @property {number} C\n\t\t\t\t*\n\t\t\t\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t\t\t\t* @property {{ field: string }} A\n\t\t\t\t* @property {{ other: number }} B\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in $s$.test.types.MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t\t\t\t* @property {{ [key in $s$.test.types.MaybeValidKey<string>]: null }} \"0\"\n\t\t\t\t*\n\t\t\t\t* @typedef {{ [key in $s$.test.types.MaybeValidKey<$s$.test.types.MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t\t\t\t* @property {{ [key in $s$.test.types.MaybeValidKey<$s$.test.types.MaybeValidKey<string>>]: null }} \"0\"\n\t\t\t\t*/\n\n\t\t\texport namespace type_type {\n\t\t\t\t/**\n\t\t\t\t\t* @typedef {never} Type\n\t\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\texport namespace tests {\n\n\t\texport namespace tests {\n\n\t\t\texport namespace types {\n\t\t\t\t/**\n\t\t\t\t\t* @typedef {{\n\t\t\t\t\t*\t\ti8: number,\n\t\t\t\t\t*\t\ti16: number,\n\t\t\t\t\t*\t\ti32: number,\n\t\t\t\t\t*\t\tu8: number,\n\t\t\t\t\t*\t\tu16: number,\n\t\t\t\t\t*\t\tu32: number,\n\t\t\t\t\t*\t\tf32: number,\n\t\t\t\t\t*\t\tf64: number,\n\t\t\t\t\t*\t\tbool: boolean,\n\t\t\t\t\t*\t\tchar: string,\n\t\t\t\t\t*\t\t\"Range<i32>\": $s$.std.ops.Range<number>,\n\t\t\t\t\t*\t\t\"RangeInclusive<i32>\": $s$.std.ops.RangeInclusive<number>,\n\t\t\t\t\t*\t\t\"()\": null,\n\t\t\t\t\t*\t\t\"(String, i32)\": [string, number],\n\t\t\t\t\t*\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t\t\t\t\t*\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\t\t\t\t*\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\t\t\t\t*\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t\t\t\t\t*\t\tString: string,\n\t\t\t\t\t*\t\tPathBuf: string,\n\t\t\t\t\t*\t\tIpAddr: string,\n\t\t\t\t\t*\t\tIpv4Addr: string,\n\t\t\t\t\t*\t\tIpv6Addr: string,\n\t\t\t\t\t*\t\tSocketAddr: string,\n\t\t\t\t\t*\t\tSocketAddrV4: string,\n\t\t\t\t\t*\t\tSocketAddrV6: string,\n\t\t\t\t\t*\t\t\"Cow<'static, str>\": string,\n\t\t\t\t\t*\t\t\"Cow<'static, i32>\": number,\n\t\t\t\t\t*\t\t\"&'static str\": string,\n\t\t\t\t\t*\t\t\"&'static bool\": boolean,\n\t\t\t\t\t*\t\t\"&'static i32\": number,\n\t\t\t\t\t*\t\t\"Vec<i32>\": number[],\n\t\t\t\t\t*\t\t\"&'static [i32]\": number[],\n\t\t\t\t\t*\t\t\"&'static [i32; 3]\": [number, number, number],\n\t\t\t\t\t*\t\t\"[i32; 3]\": [number, number, number],\n\t\t\t\t\t*\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\t*\t\t\"&'static [MyEnum]\": $s$.test.types.MyEnum[],\n\t\t\t\t\t*\t\t\"&'static [MyEnum; 6]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t*\t\t\"[MyEnum; 2]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t*\t\t\"&'static [i32; 1]\": [number],\n\t\t\t\t\t*\t\t\"&'static [i32; 0]\": [],\n\t\t\t\t\t*\t\t\"Option<i32>\": number | null,\n\t\t\t\t\t*\t\t\"Option<()>\": null,\n\t\t\t\t\t*\t\t\"Option<Vec<i32>>\": number[] | null,\n\t\t\t\t\t*\t\t\"Result<String, i32>\": $s$.std.result.Result<string, number>,\n\t\t\t\t\t*\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\t\t\t\t*\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\t\t\t\t*\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\t\t\t\t*\t\t\"Option<Option<String>>\": string | null,\n\t\t\t\t\t*\t\t\"Option<Option<Option<String>>>\": string | null,\n\t\t\t\t\t*\t\t\"PhantomData<()>\": null,\n\t\t\t\t\t*\t\t\"PhantomData<String>\": null,\n\t\t\t\t\t*\t\tInfallible: never,\n\t\t\t\t\t*\t\tUnit1: $s$.test.types.Unit1,\n\t\t\t\t\t*\t\tUnit2: $s$.test.types.Unit2,\n\t\t\t\t\t*\t\tUnit3: $s$.test.types.Unit3,\n\t\t\t\t\t*\t\tUnit4: $s$.test.types.Unit4,\n\t\t\t\t\t*\t\tUnit5: $s$.test.types.Unit5,\n\t\t\t\t\t*\t\tUnit6: $s$.test.types.Unit6,\n\t\t\t\t\t*\t\tUnit7: $s$.test.types.Unit7,\n\t\t\t\t\t*\t\tSimpleStruct: $s$.test.types.SimpleStruct,\n\t\t\t\t\t*\t\tTupleStruct1: $s$.test.types.TupleStruct1,\n\t\t\t\t\t*\t\tTupleStruct3: $s$.test.types.TupleStruct3,\n\t\t\t\t\t*\t\tTestEnum: $s$.test.types.TestEnum,\n\t\t\t\t\t*\t\tRefStruct: $s$.test.types.RefStruct,\n\t\t\t\t\t*\t\tInlinerStruct: $s$.test.types.InlinerStruct,\n\t\t\t\t\t*\t\t\"GenericStruct<i32>\": $s$.test.types.GenericStruct<number>,\n\t\t\t\t\t*\t\t\"GenericStruct<String>\": $s$.test.types.GenericStruct<string>,\n\t\t\t\t\t*\t\tFlattenEnumStruct: $s$.test.types.FlattenEnumStruct,\n\t\t\t\t\t*\t\tOverridenStruct: $s$.test.types.OverridenStruct,\n\t\t\t\t\t*\t\tHasGenericAlias: $s$.test.types.HasGenericAlias,\n\t\t\t\t\t*\t\tEnumMacroAttributes: $s$.test.types.EnumMacroAttributes,\n\t\t\t\t\t*\t\tInlineEnumField: $s$.test.types.InlineEnumField,\n\t\t\t\t\t*\t\tInlineOptionalType: $s$.test.types.InlineOptionalType,\n\t\t\t\t\t*\t\tRename: $s$.test.types.Rename,\n\t\t\t\t\t*\t\tTransparentType: $s$.test.types.TransparentType,\n\t\t\t\t\t*\t\tTransparentType2: $s$.test.types.TransparentType2,\n\t\t\t\t\t*\t\tTransparentTypeWithOverride: $s$.test.types.TransparentTypeWithOverride,\n\t\t\t\t\t*\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\t\t\t\t*\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in $s$.test.types.BasicEnum]: null }>,\n\t\t\t\t\t*\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t\t\t*\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\t\t\t\t*\t\t\"Vec<PlaceholderInnerField>\": $s$.test.types.PlaceholderInnerField[],\n\t\t\t\t\t*\t\tEnumReferenceRecordKey: $s$.test.types.EnumReferenceRecordKey,\n\t\t\t\t\t*\t\tFlattenOnNestedEnum: $s$.test.types.FlattenOnNestedEnum,\n\t\t\t\t\t*\t\tMyEmptyInput: $s$.test.types.MyEmptyInput,\n\t\t\t\t\t*\t\t\"(String)\": string,\n\t\t\t\t\t*\t\t\"(String,)\": [string],\n\t\t\t\t\t*\t\tExtraBracketsInTupleVariant: $s$.test.types.ExtraBracketsInTupleVariant,\n\t\t\t\t\t*\t\tExtraBracketsInUnnamedStruct: $s$.test.types.ExtraBracketsInUnnamedStruct,\n\t\t\t\t\t*\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\t*\t\tInlineTuple: $s$.test.types.InlineTuple,\n\t\t\t\t\t*\t\tInlineTuple2: $s$.test.types.InlineTuple2,\n\t\t\t\t\t*\t\t\"Box<str>\": string,\n\t\t\t\t\t*\t\t\"Box<String>\": string,\n\t\t\t\t\t*\t\tSkippedFieldWithinVariant: $s$.test.types.SkippedFieldWithinVariant,\n\t\t\t\t\t*\t\tKebabCase: $s$.test.types.KebabCase,\n\t\t\t\t\t*\t\t\"&[&str]\": string[],\n\t\t\t\t\t*\t\t\"Issue281<'_>\": $s$.test.types.Issue281,\n\t\t\t\t\t*\t\t\"LifetimeGenericStruct<'_, i32>\": $s$.test.types.LifetimeGenericStruct<number>,\n\t\t\t\t\t*\t\t\"LifetimeGenericEnum<'_, i32>\": $s$.test.types.LifetimeGenericEnum<number>,\n\t\t\t\t\t*\t\tRenameWithWeirdCharsField: $s$.test.types.RenameWithWeirdCharsField,\n\t\t\t\t\t*\t\tRenameWithWeirdCharsVariant: $s$.test.types.RenameWithWeirdCharsVariant,\n\t\t\t\t\t*\t\tRenamedFieldKeys: $s$.test.types.RenamedFieldKeys,\n\t\t\t\t\t*\t\tRenamedVariantWithSkippedPayload: $s$.test.types.RenamedVariantWithSkippedPayload,\n\t\t\t\t\t*\t\t\"type_type::Type\": $s$.test.types.type_type.Type,\n\t\t\t\t\t*\t\tActualType: $s$.test.types.ActualType,\n\t\t\t\t\t*\t\tSpectaTypeOverride: $s$.test.types.SpectaTypeOverride,\n\t\t\t\t\t*\t\tContainerTypeOverrideStruct: $s$.test.types.ContainerTypeOverrideStruct,\n\t\t\t\t\t*\t\tContainerTypeOverrideEnum: $s$.test.types.ContainerTypeOverrideEnum,\n\t\t\t\t\t*\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": $s$.test.types.ContainerTypeOverrideGeneric,\n\t\t\t\t\t*\t\t\"ContainerTypeOverrideToGeneric<i32>\": $s$.test.types.ContainerTypeOverrideToGeneric<number>,\n\t\t\t\t\t*\t\tContainerTypeOverrideTuple: $s$.test.types.ContainerTypeOverrideTuple,\n\t\t\t\t\t*\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": $s$.test.types.ContainerTypeOverrideTupleGeneric<number>,\n\t\t\t\t\t*\t\tInvalidToValidType: $s$.test.types.InvalidToValidType,\n\t\t\t\t\t*\t\tTupleStruct: $s$.test.types.TupleStruct,\n\t\t\t\t\t*\t\tTupleStructWithRep: $s$.test.types.TupleStructWithRep,\n\t\t\t\t\t*\t\t\"GenericTupleStruct<String>\": $s$.test.types.GenericTupleStruct<string>,\n\t\t\t\t\t*\t\tBracedStruct: $s$.test.types.BracedStruct,\n\t\t\t\t\t*\t\tStruct: $s$.test.types.StructNew,\n\t\t\t\t\t*\t\tStruct2: $s$.test.types.Struct2,\n\t\t\t\t\t*\t\tEnum: $s$.test.types.Enum,\n\t\t\t\t\t*\t\tEnum2: $s$.test.types.Enum2,\n\t\t\t\t\t*\t\tEnum3: $s$.test.types.Enum3,\n\t\t\t\t\t*\t\tStructRenameAllUppercase: $s$.test.types.StructRenameAllUppercase,\n\t\t\t\t\t*\t\tRenameSerdeSpecialChar: $s$.test.types.RenameSerdeSpecialChar,\n\t\t\t\t\t*\t\tEnumRenameAllUppercase: $s$.test.types.EnumRenameAllUppercase,\n\t\t\t\t\t*\t\tRecursive: $s$.test.types.Recursive,\n\t\t\t\t\t*\t\tRecursiveMapValue: $s$.test.types.RecursiveMapValue,\n\t\t\t\t\t*\t\tRecursiveTransparent: $s$.test.types.RecursiveTransparent,\n\t\t\t\t\t*\t\tRecursiveInEnum: $s$.test.types.RecursiveInEnum,\n\t\t\t\t\t*\t\tNonOptional: $s$.test.types.NonOptional,\n\t\t\t\t\t*\t\tOptionalOnNamedField: $s$.test.types.OptionalOnNamedField,\n\t\t\t\t\t*\t\tOptionalOnTransparentNamedField: $s$.test.types.OptionalOnTransparentNamedField,\n\t\t\t\t\t*\t\tOptionalInEnum: $s$.test.types.OptionalInEnum,\n\t\t\t\t\t*\t\tUntaggedVariants: $s$.test.types.UntaggedVariants,\n\t\t\t\t\t*\t\tUntaggedVariantsWithoutValue: $s$.test.types.UntaggedVariantsWithoutValue,\n\t\t\t\t\t*\t\tUntaggedVariantsWithDuplicateBranches: $s$.test.types.UntaggedVariantsWithDuplicateBranches,\n\t\t\t\t\t*\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t\t\t\t\t*\t\tRegular: $s$.test.types.Regular,\n\t\t\t\t\t*\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\t\t\t\t*\t\t\"HashMap<TransparentStruct, ()>\": { [key in $s$.test.types.TransparentStruct]: null },\n\t\t\t\t\t*\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in $s$.test.types.UnitVariants]: null }>,\n\t\t\t\t\t*\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in $s$.test.types.UntaggedVariantsKey]: null }>,\n\t\t\t\t\t*\t\tValidMaybeValidKey: $s$.test.types.ValidMaybeValidKey,\n\t\t\t\t\t*\t\tValidMaybeValidKeyNested: $s$.test.types.ValidMaybeValidKeyNested,\n\t\t\t\t\t*\t\tMacroStruct: $s$.test.types.MacroStruct,\n\t\t\t\t\t*\t\tMacroStruct2: $s$.test.types.MacroStruct2,\n\t\t\t\t\t*\t\tMacroEnum: $s$.test.types.MacroEnum,\n\t\t\t\t\t*\t\tDeprecatedType: $s$.test.types.DeprecatedType,\n\t\t\t\t\t*\t\tDeprecatedTypeWithMsg: $s$.test.types.DeprecatedTypeWithMsg,\n\t\t\t\t\t*\t\tDeprecatedTypeWithMsg2: $s$.test.types.DeprecatedTypeWithMsg2,\n\t\t\t\t\t*\t\tDeprecatedFields: $s$.test.types.DeprecatedFields,\n\t\t\t\t\t*\t\tDeprecatedTupleVariant: $s$.test.types.DeprecatedTupleVariant,\n\t\t\t\t\t*\t\tDeprecatedEnumVariants: $s$.test.types.DeprecatedEnumVariants,\n\t\t\t\t\t*\t\tCommentedStruct: $s$.test.types.CommentedStruct,\n\t\t\t\t\t*\t\tCommentedEnum: $s$.test.types.CommentedEnum,\n\t\t\t\t\t*\t\tSingleLineComment: $s$.test.types.SingleLineComment,\n\t\t\t\t\t*\t\tNonGeneric: $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"HalfGenericA<u8>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"HalfGenericB<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"FullGeneric<u8, bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"Another<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t*\t\t\"MapA<u32>\": { [key in string]: number },\n\t\t\t\t\t*\t\t\"MapB<u32>\": { [key in number]: string },\n\t\t\t\t\t*\t\t\"MapC<u32>\": { [key in string]: $s$.test.types.AGenericStruct<number> },\n\t\t\t\t\t*\t\t\"AGenericStruct<u32>\": $s$.test.types.AGenericStruct<number>,\n\t\t\t\t\t*\t\tA: $s$.test.types.A,\n\t\t\t\t\t*\t\tDoubleFlattened: $s$.test.types.DoubleFlattened,\n\t\t\t\t\t*\t\tFlattenedInner: $s$.test.types.FlattenedInner,\n\t\t\t\t\t*\t\tBoxFlattened: $s$.test.types.BoxFlattened,\n\t\t\t\t\t*\t\tBoxInline: $s$.test.types.BoxInline,\n\t\t\t\t\t*\t\tFirst: $s$.test.types.First,\n\t\t\t\t\t*\t\tSecond: $s$.test.types.Second,\n\t\t\t\t\t*\t\tThird: $s$.test.types.Third,\n\t\t\t\t\t*\t\tFourth: $s$.test.types.Fourth,\n\t\t\t\t\t*\t\tTagOnStructWithInline: $s$.test.types.TagOnStructWithInline,\n\t\t\t\t\t*\t\tSixth: $s$.test.types.Sixth,\n\t\t\t\t\t*\t\tSeventh: $s$.test.types.Seventh,\n\t\t\t\t\t*\t\tEight: $s$.test.types.Eight,\n\t\t\t\t\t*\t\tNinth: $s$.test.types.Ninth,\n\t\t\t\t\t*\t\tTenth: $s$.test.types.Tenth,\n\t\t\t\t\t*\t\tMyEnumTagged: $s$.test.types.MyEnumTagged,\n\t\t\t\t\t*\t\tMyEnumExternal: $s$.test.types.MyEnumExternal,\n\t\t\t\t\t*\t\tMyEnumAdjacent: $s$.test.types.MyEnumAdjacent,\n\t\t\t\t\t*\t\tMyEnumUntagged: $s$.test.types.MyEnumUntagged,\n\t\t\t\t\t*\t\tEmptyStruct: $s$.test.types.EmptyStruct,\n\t\t\t\t\t*\t\tEmptyStructWithTag: $s$.test.types.EmptyStructWithTag,\n\t\t\t\t\t*\t\tAdjacentlyTagged: $s$.test.types.AdjacentlyTagged,\n\t\t\t\t\t*\t\tLoadProjectEvent: $s$.test.types.LoadProjectEvent,\n\t\t\t\t\t*\t\tExternallyTagged: $s$.test.types.ExternallyTagged,\n\t\t\t\t\t*\t\tIssue221External: $s$.test.types.Issue221External,\n\t\t\t\t\t*\t\tInternallyTaggedD: $s$.test.types.InternallyTaggedD,\n\t\t\t\t\t*\t\tInternallyTaggedE: $s$.test.types.InternallyTaggedE,\n\t\t\t\t\t*\t\tInternallyTaggedF: $s$.test.types.InternallyTaggedF,\n\t\t\t\t\t*\t\tInternallyTaggedH: $s$.test.types.InternallyTaggedH,\n\t\t\t\t\t*\t\tInternallyTaggedL: $s$.test.types.InternallyTaggedL,\n\t\t\t\t\t*\t\tInternallyTaggedM: $s$.test.types.InternallyTaggedM,\n\t\t\t\t\t*\t\tStructWithAlias: $s$.test.types.StructWithAlias,\n\t\t\t\t\t*\t\tStructWithMultipleAliases: $s$.test.types.StructWithMultipleAliases,\n\t\t\t\t\t*\t\tStructWithAliasAndRename: $s$.test.types.StructWithAliasAndRename,\n\t\t\t\t\t*\t\tEnumWithVariantAlias: $s$.test.types.EnumWithVariantAlias,\n\t\t\t\t\t*\t\tEnumWithMultipleVariantAliases: $s$.test.types.EnumWithMultipleVariantAliases,\n\t\t\t\t\t*\t\tEnumWithVariantAliasAndRename: $s$.test.types.EnumWithVariantAliasAndRename,\n\t\t\t\t\t*\t\tInternallyTaggedWithAlias: $s$.test.types.InternallyTaggedWithAlias,\n\t\t\t\t\t*\t\tAdjacentlyTaggedWithAlias: $s$.test.types.AdjacentlyTaggedWithAlias,\n\t\t\t\t\t*\t\tUntaggedWithAlias: $s$.test.types.UntaggedWithAlias,\n\t\t\t\t\t*\t\tIssue221UntaggedSafe: $s$.test.types.Issue221UntaggedSafe,\n\t\t\t\t\t*\t\tIssue221UntaggedMixed: $s$.test.types.Issue221UntaggedMixed,\n\t\t\t\t\t*\t\tEmptyEnum: $s$.test.types.EmptyEnum,\n\t\t\t\t\t*\t\tEmptyEnumTagged: $s$.test.types.EmptyEnumTagged,\n\t\t\t\t\t*\t\tEmptyEnumTaggedWContent: $s$.test.types.EmptyEnumTaggedWContent,\n\t\t\t\t\t*\t\tEmptyEnumUntagged: $s$.test.types.EmptyEnumUntagged,\n\t\t\t\t\t*\t\tSkipOnlyField: $s$.test.types.SkipOnlyField,\n\t\t\t\t\t*\t\tSkipField: $s$.test.types.SkipField,\n\t\t\t\t\t*\t\tSkipVariant: $s$.test.types.SkipVariant,\n\t\t\t\t\t*\t\tSkipUnnamedFieldInVariant: $s$.test.types.SkipUnnamedFieldInVariant,\n\t\t\t\t\t*\t\tSkipNamedFieldInVariant: $s$.test.types.SkipNamedFieldInVariant,\n\t\t\t\t\t*\t\tTransparentWithSkip: $s$.test.types.TransparentWithSkip,\n\t\t\t\t\t*\t\tTransparentWithSkip2: $s$.test.types.TransparentWithSkip2,\n\t\t\t\t\t*\t\tTransparentWithSkip3: $s$.test.types.TransparentWithSkip3,\n\t\t\t\t\t*\t\tSkipVariant2: $s$.test.types.SkipVariant2,\n\t\t\t\t\t*\t\tSkipVariant3: $s$.test.types.SkipVariant3,\n\t\t\t\t\t*\t\tSkipStructFields: $s$.test.types.SkipStructFields,\n\t\t\t\t\t*\t\tSpectaSkipNonTypeField: $s$.test.types.SpectaSkipNonTypeField,\n\t\t\t\t\t*\t\tFlattenA: $s$.test.types.FlattenA,\n\t\t\t\t\t*\t\tFlattenB: $s$.test.types.FlattenB,\n\t\t\t\t\t*\t\tFlattenC: $s$.test.types.FlattenC,\n\t\t\t\t\t*\t\tFlattenD: $s$.test.types.FlattenD,\n\t\t\t\t\t*\t\tFlattenE: $s$.test.types.FlattenE,\n\t\t\t\t\t*\t\tFlattenF: $s$.test.types.FlattenF,\n\t\t\t\t\t*\t\tFlattenG: $s$.test.types.FlattenG,\n\t\t\t\t\t*\t\tTupleNested: $s$.test.types.TupleNested,\n\t\t\t\t\t*\t\t\"Generic1<()>\": $s$.test.types.Generic1<null>,\n\t\t\t\t\t*\t\t\"GenericAutoBound<()>\": $s$.test.types.GenericAutoBound<null>,\n\t\t\t\t\t*\t\t\"GenericAutoBound2<()>\": $s$.test.types.GenericAutoBound2<null>,\n\t\t\t\t\t*\t\tContainer1: $s$.test.types.Container1,\n\t\t\t\t\t*\t\t\"Generic2<(), String, i32>\": $s$.test.types.Generic2<null, string, number>,\n\t\t\t\t\t*\t\t\"GenericNewType1<()>\": $s$.test.types.GenericNewType1<null>,\n\t\t\t\t\t*\t\t\"GenericTuple<()>\": $s$.test.types.GenericTuple<null>,\n\t\t\t\t\t*\t\t\"GenericStruct2<()>\": $s$.test.types.GenericStruct2<null>,\n\t\t\t\t\t*\t\t\"InlineGenericNewtype<String>\": string,\n\t\t\t\t\t*\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t\t\t\t\t* \tvalue: string,\n\t\t\t\t\t* } }) & { Unnamed?: never }],\n\t\t\t\t\t*\t\t\"InlineFlattenGenericsG<()>\": $s$.test.types.InlineFlattenGenericsG<null>,\n\t\t\t\t\t*\t\tInlineFlattenGenerics: $s$.test.types.InlineFlattenGenerics,\n\t\t\t\t\t*\t\tGenericDefault: $s$.test.types.GenericDefault,\n\t\t\t\t\t*\t\tChainedGenericDefault: $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t*\t\t\"ChainedGenericDefault<String, String>\": $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t*\t\t\"ChainedGenericDefault<i32>\": $s$.test.types.ChainedGenericDefault<number, number>,\n\t\t\t\t\t*\t\t\"ChainedGenericDefault<String, i32>\": $s$.test.types.ChainedGenericDefault<string, number>,\n\t\t\t\t\t*\t\tGenericDefaultSkipped: $s$.test.types.GenericDefaultSkipped<string>,\n\t\t\t\t\t*\t\tGenericDefaultSkippedNonType: $s$.test.types.GenericDefaultSkippedNonType<unknown>,\n\t\t\t\t\t*\t\tGenericParameterOrderPreserved: $s$.test.types.GenericParameterOrderPreserved,\n\t\t\t\t\t*\t\tConstGenericInNonConstContainer: $s$.test.types.ConstGenericInNonConstContainer,\n\t\t\t\t\t*\t\tConstGenericInConstContainer: $s$.test.types.ConstGenericInConstContainer,\n\t\t\t\t\t*\t\tNamedConstGenericContainer: $s$.test.types.NamedConstGenericContainer,\n\t\t\t\t\t*\t\tInlineConstGenericContainer: $s$.test.types.InlineConstGenericContainer,\n\t\t\t\t\t*\t\tInlineRecursiveConstGenericContainer: $s$.test.types.InlineRecursiveConstGenericContainer,\n\t\t\t\t\t*\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t\t*\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t\t*\t}} Primitives\n\t\t\t\t\t* @property {number} i8\n\t\t\t\t\t* @property {number} i16\n\t\t\t\t\t* @property {number} i32\n\t\t\t\t\t* @property {number} u8\n\t\t\t\t\t* @property {number} u16\n\t\t\t\t\t* @property {number} u32\n\t\t\t\t\t* @property {number} f32\n\t\t\t\t\t* @property {number} f64\n\t\t\t\t\t* @property {boolean} bool\n\t\t\t\t\t* @property {string} char\n\t\t\t\t\t* @property {$s$.std.ops.Range<number>} \"Range<i32>\"\n\t\t\t\t\t* @property {$s$.std.ops.RangeInclusive<number>} \"RangeInclusive<i32>\"\n\t\t\t\t\t* @property {null} \"()\"\n\t\t\t\t\t* @property {[string, number]} \"(String, i32)\"\n\t\t\t\t\t* @property {[string, number, boolean]} \"(String, i32, bool)\"\n\t\t\t\t\t* @property {[[string, number], [boolean, string, boolean], null]} \"((String, i32), (bool, char, bool), ())\"\n\t\t\t\t\t* @property {[boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]} \"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\"\n\t\t\t\t\t* @property {[number[], boolean[]]} \"(Vec<i32>, Vec<bool>)\"\n\t\t\t\t\t* @property {string} String\n\t\t\t\t\t* @property {string} PathBuf\n\t\t\t\t\t* @property {string} IpAddr\n\t\t\t\t\t* @property {string} Ipv4Addr\n\t\t\t\t\t* @property {string} Ipv6Addr\n\t\t\t\t\t* @property {string} SocketAddr\n\t\t\t\t\t* @property {string} SocketAddrV4\n\t\t\t\t\t* @property {string} SocketAddrV6\n\t\t\t\t\t* @property {string} \"Cow<'static, str>\"\n\t\t\t\t\t* @property {number} \"Cow<'static, i32>\"\n\t\t\t\t\t* @property {string} \"&'static str\"\n\t\t\t\t\t* @property {boolean} \"&'static bool\"\n\t\t\t\t\t* @property {number} \"&'static i32\"\n\t\t\t\t\t* @property {number[]} \"Vec<i32>\"\n\t\t\t\t\t* @property {number[]} \"&'static [i32]\"\n\t\t\t\t\t* @property {[number, number, number]} \"&'static [i32; 3]\"\n\t\t\t\t\t* @property {[number, number, number]} \"[i32; 3]\"\n\t\t\t\t\t* @property {$s$.test.types.MyEnum[]} \"Vec<MyEnum>\"\n\t\t\t\t\t* @property {$s$.test.types.MyEnum[]} \"&'static [MyEnum]\"\n\t\t\t\t\t* @property {[$s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum]} \"&'static [MyEnum; 6]\"\n\t\t\t\t\t* @property {[$s$.test.types.MyEnum, $s$.test.types.MyEnum]} \"[MyEnum; 2]\"\n\t\t\t\t\t* @property {[number]} \"&'static [i32; 1]\"\n\t\t\t\t\t* @property {[]} \"&'static [i32; 0]\"\n\t\t\t\t\t* @property {number | null} \"Option<i32>\"\n\t\t\t\t\t* @property {null} \"Option<()>\"\n\t\t\t\t\t* @property {number[] | null} \"Option<Vec<i32>>\"\n\t\t\t\t\t* @property {$s$.std.result.Result<string, number>} \"Result<String, i32>\"\n\t\t\t\t\t* @property {(number | null)[]} \"Vec<Option<Cow<'static, i32>>>\"\n\t\t\t\t\t* @property {number[] | null} \"Option<Vec<Cow<'static, i32>>>\"\n\t\t\t\t\t* @property {[string[], string[], string[]]} \"[Vec<String>; 3]\"\n\t\t\t\t\t* @property {string | null} \"Option<Option<String>>\"\n\t\t\t\t\t* @property {string | null} \"Option<Option<Option<String>>>\"\n\t\t\t\t\t* @property {null} \"PhantomData<()>\"\n\t\t\t\t\t* @property {null} \"PhantomData<String>\"\n\t\t\t\t\t* @property {never} Infallible\n\t\t\t\t\t* @property {$s$.test.types.Unit1} Unit1\n\t\t\t\t\t* @property {$s$.test.types.Unit2} Unit2\n\t\t\t\t\t* @property {$s$.test.types.Unit3} Unit3\n\t\t\t\t\t* @property {$s$.test.types.Unit4} Unit4\n\t\t\t\t\t* @property {$s$.test.types.Unit5} Unit5\n\t\t\t\t\t* @property {$s$.test.types.Unit6} Unit6\n\t\t\t\t\t* @property {$s$.test.types.Unit7} Unit7\n\t\t\t\t\t* @property {$s$.test.types.SimpleStruct} SimpleStruct\n\t\t\t\t\t* @property {$s$.test.types.TupleStruct1} TupleStruct1\n\t\t\t\t\t* @property {$s$.test.types.TupleStruct3} TupleStruct3\n\t\t\t\t\t* @property {$s$.test.types.TestEnum} TestEnum\n\t\t\t\t\t* @property {$s$.test.types.RefStruct} RefStruct\n\t\t\t\t\t* @property {$s$.test.types.InlinerStruct} InlinerStruct\n\t\t\t\t\t* @property {$s$.test.types.GenericStruct<number>} \"GenericStruct<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericStruct<string>} \"GenericStruct<String>\"\n\t\t\t\t\t* @property {$s$.test.types.FlattenEnumStruct} FlattenEnumStruct\n\t\t\t\t\t* @property {$s$.test.types.OverridenStruct} OverridenStruct\n\t\t\t\t\t* @property {$s$.test.types.HasGenericAlias} HasGenericAlias\n\t\t\t\t\t* @property {$s$.test.types.EnumMacroAttributes} EnumMacroAttributes\n\t\t\t\t\t* @property {$s$.test.types.InlineEnumField} InlineEnumField\n\t\t\t\t\t* @property {$s$.test.types.InlineOptionalType} InlineOptionalType\n\t\t\t\t\t* @property {$s$.test.types.Rename} Rename\n\t\t\t\t\t* @property {$s$.test.types.TransparentType} TransparentType\n\t\t\t\t\t* @property {$s$.test.types.TransparentType2} TransparentType2\n\t\t\t\t\t* @property {$s$.test.types.TransparentTypeWithOverride} TransparentTypeWithOverride\n\t\t\t\t\t* @property {[(number | null), (number | null), (number | null)]} \"[Option<u8>; 3]\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.BasicEnum]: null }>} \"HashMap<BasicEnum, ()>\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.BasicEnum]: number }>} \"HashMap<BasicEnum, i32>\"\n\t\t\t\t\t* @property {number | null} \"Option<Option<Option<Option<i32>>>>\"\n\t\t\t\t\t* @property {$s$.test.types.PlaceholderInnerField[]} \"Vec<PlaceholderInnerField>\"\n\t\t\t\t\t* @property {$s$.test.types.EnumReferenceRecordKey} EnumReferenceRecordKey\n\t\t\t\t\t* @property {$s$.test.types.FlattenOnNestedEnum} FlattenOnNestedEnum\n\t\t\t\t\t* @property {$s$.test.types.MyEmptyInput} MyEmptyInput\n\t\t\t\t\t* @property {string} \"(String)\"\n\t\t\t\t\t* @property {[string]} \"(String,)\"\n\t\t\t\t\t* @property {$s$.test.types.ExtraBracketsInTupleVariant} ExtraBracketsInTupleVariant\n\t\t\t\t\t* @property {$s$.test.types.ExtraBracketsInUnnamedStruct} ExtraBracketsInUnnamedStruct\n\t\t\t\t\t* @property {$s$.test.types.MyEnum[]} \"Vec<MyEnum>\"\n\t\t\t\t\t* @property {$s$.test.types.InlineTuple} InlineTuple\n\t\t\t\t\t* @property {$s$.test.types.InlineTuple2} InlineTuple2\n\t\t\t\t\t* @property {string} \"Box<str>\"\n\t\t\t\t\t* @property {string} \"Box<String>\"\n\t\t\t\t\t* @property {$s$.test.types.SkippedFieldWithinVariant} SkippedFieldWithinVariant\n\t\t\t\t\t* @property {$s$.test.types.KebabCase} KebabCase\n\t\t\t\t\t* @property {string[]} \"&[&str]\"\n\t\t\t\t\t* @property {$s$.test.types.Issue281} \"Issue281<'_>\"\n\t\t\t\t\t* @property {$s$.test.types.LifetimeGenericStruct<number>} \"LifetimeGenericStruct<'_, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.LifetimeGenericEnum<number>} \"LifetimeGenericEnum<'_, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.RenameWithWeirdCharsField} RenameWithWeirdCharsField\n\t\t\t\t\t* @property {$s$.test.types.RenameWithWeirdCharsVariant} RenameWithWeirdCharsVariant\n\t\t\t\t\t* @property {$s$.test.types.RenamedFieldKeys} RenamedFieldKeys\n\t\t\t\t\t* @property {$s$.test.types.RenamedVariantWithSkippedPayload} RenamedVariantWithSkippedPayload\n\t\t\t\t\t* @property {$s$.test.types.type_type.Type} \"type_type::Type\"\n\t\t\t\t\t* @property {$s$.test.types.ActualType} ActualType\n\t\t\t\t\t* @property {$s$.test.types.SpectaTypeOverride} SpectaTypeOverride\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideStruct} ContainerTypeOverrideStruct\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideEnum} ContainerTypeOverrideEnum\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideGeneric} \"ContainerTypeOverrideGeneric<Box<dyn Any>>\"\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideToGeneric<number>} \"ContainerTypeOverrideToGeneric<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideTuple} ContainerTypeOverrideTuple\n\t\t\t\t\t* @property {$s$.test.types.ContainerTypeOverrideTupleGeneric<number>} \"ContainerTypeOverrideTupleGeneric<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.InvalidToValidType} InvalidToValidType\n\t\t\t\t\t* @property {$s$.test.types.TupleStruct} TupleStruct\n\t\t\t\t\t* @property {$s$.test.types.TupleStructWithRep} TupleStructWithRep\n\t\t\t\t\t* @property {$s$.test.types.GenericTupleStruct<string>} \"GenericTupleStruct<String>\"\n\t\t\t\t\t* @property {$s$.test.types.BracedStruct} BracedStruct\n\t\t\t\t\t* @property {$s$.test.types.StructNew} Struct\n\t\t\t\t\t* @property {$s$.test.types.Struct2} Struct2\n\t\t\t\t\t* @property {$s$.test.types.Enum} Enum\n\t\t\t\t\t* @property {$s$.test.types.Enum2} Enum2\n\t\t\t\t\t* @property {$s$.test.types.Enum3} Enum3\n\t\t\t\t\t* @property {$s$.test.types.StructRenameAllUppercase} StructRenameAllUppercase\n\t\t\t\t\t* @property {$s$.test.types.RenameSerdeSpecialChar} RenameSerdeSpecialChar\n\t\t\t\t\t* @property {$s$.test.types.EnumRenameAllUppercase} EnumRenameAllUppercase\n\t\t\t\t\t* @property {$s$.test.types.Recursive} Recursive\n\t\t\t\t\t* @property {$s$.test.types.RecursiveMapValue} RecursiveMapValue\n\t\t\t\t\t* @property {$s$.test.types.RecursiveTransparent} RecursiveTransparent\n\t\t\t\t\t* @property {$s$.test.types.RecursiveInEnum} RecursiveInEnum\n\t\t\t\t\t* @property {$s$.test.types.NonOptional} NonOptional\n\t\t\t\t\t* @property {$s$.test.types.OptionalOnNamedField} OptionalOnNamedField\n\t\t\t\t\t* @property {$s$.test.types.OptionalOnTransparentNamedField} OptionalOnTransparentNamedField\n\t\t\t\t\t* @property {$s$.test.types.OptionalInEnum} OptionalInEnum\n\t\t\t\t\t* @property {$s$.test.types.UntaggedVariants} UntaggedVariants\n\t\t\t\t\t* @property {$s$.test.types.UntaggedVariantsWithoutValue} UntaggedVariantsWithoutValue\n\t\t\t\t\t* @property {$s$.test.types.UntaggedVariantsWithDuplicateBranches} UntaggedVariantsWithDuplicateBranches\n\t\t\t\t\t* @property {{ [key in string]: null }} \"HashMap<String, ()>\"\n\t\t\t\t\t* @property {$s$.test.types.Regular} Regular\n\t\t\t\t\t* @property {{ [key in never]: null }} \"HashMap<Infallible, ()>\"\n\t\t\t\t\t* @property {{ [key in $s$.test.types.TransparentStruct]: null }} \"HashMap<TransparentStruct, ()>\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.UnitVariants]: null }>} \"HashMap<UnitVariants, ()>\"\n\t\t\t\t\t* @property {Partial<{ [key in $s$.test.types.UntaggedVariantsKey]: null }>} \"HashMap<UntaggedVariantsKey, ()>\"\n\t\t\t\t\t* @property {$s$.test.types.ValidMaybeValidKey} ValidMaybeValidKey\n\t\t\t\t\t* @property {$s$.test.types.ValidMaybeValidKeyNested} ValidMaybeValidKeyNested\n\t\t\t\t\t* @property {$s$.test.types.MacroStruct} MacroStruct\n\t\t\t\t\t* @property {$s$.test.types.MacroStruct2} MacroStruct2\n\t\t\t\t\t* @property {$s$.test.types.MacroEnum} MacroEnum\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedType} DeprecatedType\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedTypeWithMsg} DeprecatedTypeWithMsg\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedTypeWithMsg2} DeprecatedTypeWithMsg2\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedFields} DeprecatedFields\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedTupleVariant} DeprecatedTupleVariant\n\t\t\t\t\t* @property {$s$.test.types.DeprecatedEnumVariants} DeprecatedEnumVariants\n\t\t\t\t\t* @property {$s$.test.types.CommentedStruct} CommentedStruct\n\t\t\t\t\t* @property {$s$.test.types.CommentedEnum} CommentedEnum\n\t\t\t\t\t* @property {$s$.test.types.SingleLineComment} SingleLineComment\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} NonGeneric\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"HalfGenericA<u8>\"\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"HalfGenericB<bool>\"\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"FullGeneric<u8, bool>\"\n\t\t\t\t\t* @property {$s$.test.types.Demo<number, boolean>} \"Another<bool>\"\n\t\t\t\t\t* @property {{ [key in string]: number }} \"MapA<u32>\"\n\t\t\t\t\t* @property {{ [key in number]: string }} \"MapB<u32>\"\n\t\t\t\t\t* @property {{ [key in string]: $s$.test.types.AGenericStruct<number> }} \"MapC<u32>\"\n\t\t\t\t\t* @property {$s$.test.types.AGenericStruct<number>} \"AGenericStruct<u32>\"\n\t\t\t\t\t* @property {$s$.test.types.A} A\n\t\t\t\t\t* @property {$s$.test.types.DoubleFlattened} DoubleFlattened\n\t\t\t\t\t* @property {$s$.test.types.FlattenedInner} FlattenedInner\n\t\t\t\t\t* @property {$s$.test.types.BoxFlattened} BoxFlattened\n\t\t\t\t\t* @property {$s$.test.types.BoxInline} BoxInline\n\t\t\t\t\t* @property {$s$.test.types.First} First\n\t\t\t\t\t* @property {$s$.test.types.Second} Second\n\t\t\t\t\t* @property {$s$.test.types.Third} Third\n\t\t\t\t\t* @property {$s$.test.types.Fourth} Fourth\n\t\t\t\t\t* @property {$s$.test.types.TagOnStructWithInline} TagOnStructWithInline\n\t\t\t\t\t* @property {$s$.test.types.Sixth} Sixth\n\t\t\t\t\t* @property {$s$.test.types.Seventh} Seventh\n\t\t\t\t\t* @property {$s$.test.types.Eight} Eight\n\t\t\t\t\t* @property {$s$.test.types.Ninth} Ninth\n\t\t\t\t\t* @property {$s$.test.types.Tenth} Tenth\n\t\t\t\t\t* @property {$s$.test.types.MyEnumTagged} MyEnumTagged\n\t\t\t\t\t* @property {$s$.test.types.MyEnumExternal} MyEnumExternal\n\t\t\t\t\t* @property {$s$.test.types.MyEnumAdjacent} MyEnumAdjacent\n\t\t\t\t\t* @property {$s$.test.types.MyEnumUntagged} MyEnumUntagged\n\t\t\t\t\t* @property {$s$.test.types.EmptyStruct} EmptyStruct\n\t\t\t\t\t* @property {$s$.test.types.EmptyStructWithTag} EmptyStructWithTag\n\t\t\t\t\t* @property {$s$.test.types.AdjacentlyTagged} AdjacentlyTagged\n\t\t\t\t\t* @property {$s$.test.types.LoadProjectEvent} LoadProjectEvent\n\t\t\t\t\t* @property {$s$.test.types.ExternallyTagged} ExternallyTagged\n\t\t\t\t\t* @property {$s$.test.types.Issue221External} Issue221External\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedD} InternallyTaggedD\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedE} InternallyTaggedE\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedF} InternallyTaggedF\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedH} InternallyTaggedH\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedL} InternallyTaggedL\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedM} InternallyTaggedM\n\t\t\t\t\t* @property {$s$.test.types.StructWithAlias} StructWithAlias\n\t\t\t\t\t* @property {$s$.test.types.StructWithMultipleAliases} StructWithMultipleAliases\n\t\t\t\t\t* @property {$s$.test.types.StructWithAliasAndRename} StructWithAliasAndRename\n\t\t\t\t\t* @property {$s$.test.types.EnumWithVariantAlias} EnumWithVariantAlias\n\t\t\t\t\t* @property {$s$.test.types.EnumWithMultipleVariantAliases} EnumWithMultipleVariantAliases\n\t\t\t\t\t* @property {$s$.test.types.EnumWithVariantAliasAndRename} EnumWithVariantAliasAndRename\n\t\t\t\t\t* @property {$s$.test.types.InternallyTaggedWithAlias} InternallyTaggedWithAlias\n\t\t\t\t\t* @property {$s$.test.types.AdjacentlyTaggedWithAlias} AdjacentlyTaggedWithAlias\n\t\t\t\t\t* @property {$s$.test.types.UntaggedWithAlias} UntaggedWithAlias\n\t\t\t\t\t* @property {$s$.test.types.Issue221UntaggedSafe} Issue221UntaggedSafe\n\t\t\t\t\t* @property {$s$.test.types.Issue221UntaggedMixed} Issue221UntaggedMixed\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnum} EmptyEnum\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnumTagged} EmptyEnumTagged\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnumTaggedWContent} EmptyEnumTaggedWContent\n\t\t\t\t\t* @property {$s$.test.types.EmptyEnumUntagged} EmptyEnumUntagged\n\t\t\t\t\t* @property {$s$.test.types.SkipOnlyField} SkipOnlyField\n\t\t\t\t\t* @property {$s$.test.types.SkipField} SkipField\n\t\t\t\t\t* @property {$s$.test.types.SkipVariant} SkipVariant\n\t\t\t\t\t* @property {$s$.test.types.SkipUnnamedFieldInVariant} SkipUnnamedFieldInVariant\n\t\t\t\t\t* @property {$s$.test.types.SkipNamedFieldInVariant} SkipNamedFieldInVariant\n\t\t\t\t\t* @property {$s$.test.types.TransparentWithSkip} TransparentWithSkip\n\t\t\t\t\t* @property {$s$.test.types.TransparentWithSkip2} TransparentWithSkip2\n\t\t\t\t\t* @property {$s$.test.types.TransparentWithSkip3} TransparentWithSkip3\n\t\t\t\t\t* @property {$s$.test.types.SkipVariant2} SkipVariant2\n\t\t\t\t\t* @property {$s$.test.types.SkipVariant3} SkipVariant3\n\t\t\t\t\t* @property {$s$.test.types.SkipStructFields} SkipStructFields\n\t\t\t\t\t* @property {$s$.test.types.SpectaSkipNonTypeField} SpectaSkipNonTypeField\n\t\t\t\t\t* @property {$s$.test.types.FlattenA} FlattenA\n\t\t\t\t\t* @property {$s$.test.types.FlattenB} FlattenB\n\t\t\t\t\t* @property {$s$.test.types.FlattenC} FlattenC\n\t\t\t\t\t* @property {$s$.test.types.FlattenD} FlattenD\n\t\t\t\t\t* @property {$s$.test.types.FlattenE} FlattenE\n\t\t\t\t\t* @property {$s$.test.types.FlattenF} FlattenF\n\t\t\t\t\t* @property {$s$.test.types.FlattenG} FlattenG\n\t\t\t\t\t* @property {$s$.test.types.TupleNested} TupleNested\n\t\t\t\t\t* @property {$s$.test.types.Generic1<null>} \"Generic1<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericAutoBound<null>} \"GenericAutoBound<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericAutoBound2<null>} \"GenericAutoBound2<()>\"\n\t\t\t\t\t* @property {$s$.test.types.Container1} Container1\n\t\t\t\t\t* @property {$s$.test.types.Generic2<null, string, number>} \"Generic2<(), String, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericNewType1<null>} \"GenericNewType1<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericTuple<null>} \"GenericTuple<()>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericStruct2<null>} \"GenericStruct2<()>\"\n\t\t\t\t\t* @property {string} \"InlineGenericNewtype<String>\"\n\t\t\t\t\t* @property {[string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\t\t\t\t\t* \tvalue: string,\n\t\t\t\t\t* } }) & { Unnamed?: never }]} \"InlineGenericNested<String>\"\n\t\t\t\t\t* @property {$s$.test.types.InlineFlattenGenericsG<null>} \"InlineFlattenGenericsG<()>\"\n\t\t\t\t\t* @property {$s$.test.types.InlineFlattenGenerics} InlineFlattenGenerics\n\t\t\t\t\t* @property {$s$.test.types.GenericDefault} GenericDefault\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault} ChainedGenericDefault\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault} \"ChainedGenericDefault<String, String>\"\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault<number, number>} \"ChainedGenericDefault<i32>\"\n\t\t\t\t\t* @property {$s$.test.types.ChainedGenericDefault<string, number>} \"ChainedGenericDefault<String, i32>\"\n\t\t\t\t\t* @property {$s$.test.types.GenericDefaultSkipped<string>} GenericDefaultSkipped\n\t\t\t\t\t* @property {$s$.test.types.GenericDefaultSkippedNonType<unknown>} GenericDefaultSkippedNonType\n\t\t\t\t\t* @property {$s$.test.types.GenericParameterOrderPreserved} GenericParameterOrderPreserved\n\t\t\t\t\t* @property {$s$.test.types.ConstGenericInNonConstContainer} ConstGenericInNonConstContainer\n\t\t\t\t\t* @property {$s$.test.types.ConstGenericInConstContainer} ConstGenericInConstContainer\n\t\t\t\t\t* @property {$s$.test.types.NamedConstGenericContainer} NamedConstGenericContainer\n\t\t\t\t\t* @property {$s$.test.types.InlineConstGenericContainer} InlineConstGenericContainer\n\t\t\t\t\t* @property {$s$.test.types.InlineRecursiveConstGenericContainer} InlineRecursiveConstGenericContainer\n\t\t\t\t\t* @property {$s$.test.types.TestCollectionRegister} TestCollectionRegister\n\t\t\t\t\t* @property {$s$.test.types.TestCollectionRegister} TestCollectionRegister\n\t\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n}\nexport import std = $s$.std;\nexport import test = $s$.test;\nexport import tests = $s$.tests;\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__primitives-many-inline-raw.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\n/**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {string} String\n\t*\n\t* @typedef {string} PathBuf\n\t*\n\t* @typedef {string} IpAddr\n\t*\n\t* @typedef {string} Ipv4Addr\n\t*\n\t* @typedef {string} Ipv6Addr\n\t*\n\t* @typedef {string} SocketAddr\n\t*\n\t* @typedef {string} SocketAddrV4\n\t*\n\t* @typedef {string} SocketAddrV6\n\t*\n\t* @typedef {T} Cow<T>\n\t*\n\t* @typedef {T} Cow<T>\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {T | E} Result<T, E>\n\t* @property {T} Ok\n\t* @property {E} Err\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {null} PhantomData<T>\n\t*\n\t* @typedef {null} PhantomData<T>\n\t*\n\t* @typedef {never} Infallible\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {[]} Unit6\n\t* @property {[]} A\n\t*\n\t* @typedef {Record<string, never>} Unit7\n\t* @property {Record<string, never>} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {\"Unit\" | number | [number, number] | { a: number }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {number} Single\n\t* @property {[number, number]} Multiple\n\t* @property {{ a: number }} Struct\n\t*\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {InlineStruct} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t\tinner: FlattenEnum,\n\t*\t}} FlattenEnumStruct\n\t* @property {string} outer\n\t* @property {FlattenEnum} inner\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {string | number | { a: string; b: number }} EnumMacroAttributes\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ a: string; b: number }} D\n\t*\n\t* @typedef {{\n\t* \ta: string,\n\t* }} InlineEnumField\n\t* @property {{\n\t* \ta: string,\n\t* }} A\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t*\t\t\ta: string,\n\t*\t\t} | null,\n\t*\t}} InlineOptionalType\n\t* @property {PlaceholderInnerField | null} optional_field\n\t*\n\t* @typedef {\"OneWord\" | \"TwoWords\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"TwoWords\"} TwoWords\n\t*\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t\tresult: NestedEnum,\n\t*\t}} FlattenOnNestedEnum\n\t* @property {string} id\n\t* @property {NestedEnum} result\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {string} String\n\t*\n\t* @typedef {string} ExtraBracketsInTupleVariant\n\t* @property {string} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t*\t\t\tdemo: [string, boolean],\n\t*\t\t}, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[InlineTuple, boolean]} demo\n\t*\n\t* @typedef {T} Box<T>\n\t*\n\t* @typedef {T} Box<T>\n\t*\n\t* @typedef {never | string} SkippedFieldWithinVariant\n\t* @property {never} A\n\t* @property {string} B\n\t*\n\t* @typedef {{\n\t*\t\ttest_ing: string,\n\t*\t}} KebabCase\n\t* @property {string} test_ing\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {T} LifetimeGenericEnum<T>\n\t* @property {T} Borrowed\n\t* @property {T} Owned\n\t*\n\t* @typedef {{\n\t*\t\todata_context: string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} odata_context\n\t*\n\t* @typedef {string} RenameWithWeirdCharsVariant\n\t* @property {string} A\n\t*\n\t* @typedef {{\n\t*\t\tempty: string,\n\t*\t\tquote: string,\n\t*\t\tbackslash: string,\n\t*\t\tnewline: string,\n\t*\t\tline_separator: string,\n\t*\t\tparagraph_separator: string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} empty\n\t* @property {string} quote\n\t* @property {string} backslash\n\t* @property {string} newline\n\t* @property {string} line_separator\n\t* @property {string} paragraph_separator\n\t*\n\t* @typedef {never} RenamedVariantWithSkippedPayload\n\t* @property {never} A\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} Struct2\n\t* @property {string} a\n\t*\n\t* @typedef {\"A\" | \"B\"} Enum\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {\"A\" | \"B\" | { enum_field: null }} Enum2\n\t* @property {\"A\"} A\n\t* @property {\"B\"} B\n\t* @property {{ enum_field: null }} D\n\t*\n\t* @typedef {{ a: string }} Enum3\n\t* @property {{ a: string }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} b\n\t*\n\t* @typedef {\"HelloWorld\" | \"VariantB\" | \"TestingWords\"} EnumRenameAllUppercase\n\t* @property {\"HelloWorld\"} HelloWorld\n\t* @property {\"VariantB\"} VariantB\n\t* @property {\"TestingWords\"} TestingWords\n\t*\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*\n\t* @typedef {{ demo: RecursiveInEnum }} RecursiveInEnum\n\t* @property {{ demo: RecursiveInEnum }} A\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {string | null | { a: string | null } | { a?: string | null }} OptionalInEnum\n\t* @property {string | null} A\n\t* @property {{ a: string | null }} B\n\t* @property {{ a?: string | null }} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {string | { demo2: string }} MacroEnum\n\t* @property {string} Demo\n\t* @property {{ demo2: string }} Demo2\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* number | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* { \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* a: number }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* number} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { \n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* a: number }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some single-line comment\n\t*\t */\n\t* number | \n\t*\t/**\n\t*\t *  Some single-line comment\n\t*\t */\n\t* { \n\t*\t/**\n\t*\t *  Some single-line comment\n\t*\t */\n\t* a: number }} SingleLineComment\n\t* @property {\n\t* /**\n\t*  *  Some single-line comment\n\t*  */\n\t* number} A - Some single-line comment\n\t* @property {\n\t* /**\n\t*  *  Some single-line comment\n\t*  */\n\t* { \n\t* /**\n\t*  *  Some single-line comment\n\t*  */\n\t* a: number }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {B} b\n\t* @property {B} c\n\t* @property {D} d\n\t* @property {GenericFlattened<number>} e\n\t*\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*\n\t* @typedef {{\n\t*\t\tc: Inner,\n\t*\t}} FlattenedInner\n\t* @property {Inner} c\n\t*\n\t* @typedef {{\n\t*\t\tb: BoxedInner,\n\t*\t}} BoxFlattened\n\t* @property {BoxedInner} b\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {BoxedInner} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t}} Third\n\t* @property {First} a\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*\n\t* @typedef {string | \"B\"} Eight\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Ninth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {{ inner: First }} MyEnumTagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumExternal\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumAdjacent\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {{ inner: First }} MyEnumUntagged\n\t* @property {{ inner: First }} Variant\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {Record<string, never>} EmptyStructWithTag\n\t*\n\t* @typedef {\"A\" | { id: string; method: string } | string} AdjacentlyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*\n\t* @typedef {({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number }} LoadProjectEvent\n\t* @property {{ project_name: string }} Started\n\t* @property {{ project_name: string; status: string; progress: number }} ProgressTest\n\t* @property {{ project_name: string }} Finished\n\t*\n\t* @typedef {\"A\" | { id: string; method: string } | string} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ id: string; method: string }} B\n\t* @property {string} C\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221External\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {{ [key in string]: string }} InternallyTaggedD\n\t* @property {{ [key in string]: string }} A\n\t*\n\t* @typedef {null} InternallyTaggedE\n\t* @property {null} A\n\t*\n\t* @typedef {InternallyTaggedFInner} InternallyTaggedF\n\t* @property {InternallyTaggedFInner} A\n\t*\n\t* @typedef {InternallyTaggedHInner} InternallyTaggedH\n\t* @property {InternallyTaggedHInner} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedL\n\t* @property {\"A\" | \"B\"} A\n\t*\n\t* @typedef {\"A\" | \"B\"} InternallyTaggedM\n\t* @property {\"A\" | \"B\"} A\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} field\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} InternallyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} AdjacentlyTaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {{ values: { [key in string]: string } }} Unsafe\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {string} SkipVariant\n\t* @property {string} A\n\t*\n\t* @typedef {never | [number]} SkipUnnamedFieldInVariant\n\t* @property {never} A\n\t* @property {[number]} B\n\t*\n\t* @typedef {Record<string, never> | { b: number }} SkipNamedFieldInVariant\n\t* @property {Record<string, never>} A\n\t* @property {{ b: number }} B\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} SkipVariant2\n\t* @property {string} A\n\t*\n\t* @typedef {{ a: string }} SkipVariant3\n\t* @property {{ a: string }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenB\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenC\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\ta: FlattenA,\n\t*\t\t\tc: number,\n\t*\t\t},\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*\n\t* @typedef {A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][]} Generic2<A, B, C>\n\t* @property {A} A\n\t* @property {[B, B, B]} B\n\t* @property {C[]} C\n\t* @property {A[][][]} D\n\t* @property {{ a: A; b: B; c: C }} E\n\t* @property {number[]} X\n\t* @property {number} Y\n\t* @property {number[][]} Z\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {T} InlineGenericNewtype<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {[T, T[], [T, T], { [key in string]: T }, T | null, \"Unit\" | T | { value: T }]} InlineGenericNested<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {[T, T]} \"2\"\n\t* @property {{ [key in string]: T }} \"3\"\n\t* @property {T | null} \"4\"\n\t* @property {\"Unit\" | T | { value: T }} \"5\"\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t\tt: InlineFlattenGenericsG<string>,\n\t*\t}} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {InlineFlattenGenericsG<string>} gi\n\t* @property {InlineFlattenGenericsG<string>} t\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {InlineRecursiveConstGeneric} b\n\t* @property {InlineRecursiveConstGeneric} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*/\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__primitives-many-inline-serde.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\n/**\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {string} String\n\t*\n\t* @typedef {string} PathBuf\n\t*\n\t* @typedef {string} IpAddr\n\t*\n\t* @typedef {string} Ipv4Addr\n\t*\n\t* @typedef {string} Ipv6Addr\n\t*\n\t* @typedef {string} SocketAddr\n\t*\n\t* @typedef {string} SocketAddrV4\n\t*\n\t* @typedef {string} SocketAddrV6\n\t*\n\t* @typedef {T} Cow<T>\n\t*\n\t* @typedef {T} Cow<T>\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {({ Ok: T }) & { Err?: never } | ({ Err: E }) & { Ok?: never }} Result<T, E>\n\t* @property {{ Ok: T }} Ok\n\t* @property {{ Err: E }} Err\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {null} PhantomData<T>\n\t*\n\t* @typedef {null} PhantomData<T>\n\t*\n\t* @typedef {never} Infallible\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {InlineStruct} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & (FlattenEnum)} FlattenEnumStruct\n\t* @property {string} outer\n\t* @property {FlattenEnum} inner\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t*\t\t\ta: string,\n\t*\t\t} | null,\n\t*\t}} InlineOptionalType\n\t* @property {PlaceholderInnerField | null} optional_field\n\t*\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & (NestedEnum)} FlattenOnNestedEnum\n\t* @property {string} id\n\t* @property {NestedEnum} result\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {string} String\n\t*\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t*\t\t\tdemo: [string, boolean],\n\t*\t\t}, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[InlineTuple, boolean]} demo\n\t*\n\t* @typedef {T} Box<T>\n\t*\n\t* @typedef {T} Box<T>\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*\n\t* @typedef {{ A: (RecursiveInEnum) }} RecursiveInEnum\n\t* @property {{ A: (RecursiveInEnum) }} A\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some single-line comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some single-line comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some single-line comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**\n\t*  *  Some single-line comment\n\t*  */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**\n\t*  *  Some single-line comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some single-line comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {B} b\n\t* @property {B} c\n\t* @property {D} d\n\t* @property {GenericFlattened<number>} e\n\t*\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*\n\t* @typedef {(Inner)} FlattenedInner\n\t* @property {Inner} c\n\t*\n\t* @typedef {(BoxedInner)} BoxFlattened\n\t* @property {BoxedInner} b\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {BoxedInner} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t} & (First)} Third\n\t* @property {First} a\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: First }} D\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {{ type: \"Variant\" } & (First)} MyEnumTagged\n\t* @property {{ type: \"Variant\" } & (First)} Variant\n\t*\n\t* @typedef {{ Variant: (First) }} MyEnumExternal\n\t* @property {{ Variant: (First) }} Variant\n\t*\n\t* @typedef {{ t: \"Variant\"; c: (First) }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: (First) }} Variant\n\t*\n\t* @typedef {(First)} MyEnumUntagged\n\t* @property {(First)} Variant\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*\n\t* @typedef {{ type: \"A\" } & ({ [key in string]: string })} InternallyTaggedD\n\t* @property {{ type: \"A\" } & ({ [key in string]: string })} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" } & ({ type: \"A\" } | { type: \"B\" })} InternallyTaggedL\n\t* @property {{ type: \"A\" } & ({ type: \"A\" } | { type: \"B\" })} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never } | ({ [key in string]: string })} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {({ [key in string]: string })} Unsafe\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & (FlattenA)} FlattenB\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & (FlattenA)} FlattenC\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tc: number,\n\t*\t\t} & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tc: number,\n\t*\t\t} & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {T} InlineGenericNewtype<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {[T, T[], [T, T], { [key in string]: T }, T | null, \"Unit\" | ({ Unnamed: T }) & { Named?: never } | ({ Named: {\n\t* \tvalue: T,\n\t* } }) & { Unnamed?: never }]} InlineGenericNested<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {[T, T]} \"2\"\n\t* @property {{ [key in string]: T }} \"3\"\n\t* @property {T | null} \"4\"\n\t* @property {\"Unit\" | ({ Unnamed: T }) & { Named?: never } | ({ Named: {\n\t* \tvalue: T,\n\t* } }) & { Unnamed?: never }} \"5\"\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & (InlineFlattenGenericsG<string>)} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {InlineFlattenGenericsG<string>} gi\n\t* @property {InlineFlattenGenericsG<string>} t\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {InlineRecursiveConstGeneric} b\n\t* @property {InlineRecursiveConstGeneric} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*/\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__primitives-many-inline-serde_phases.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\n/**\n\t*  https://github.com/specta-rs/specta/issues/374\n\t*\n\t* @typedef {Issue374_Serialize | Issue374_Deserialize} Issue374\n\t* @property {Issue374_Serialize} Serialize\n\t* @property {Issue374_Deserialize} Deserialize\n\t*\n\t* @typedef {Optional_Serialize | Optional_Deserialize} Optional\n\t* @property {Optional_Serialize} Serialize\n\t* @property {Optional_Deserialize} Deserialize\n\t*\n\t* @typedef {StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize} StructPhaseSpecificRename\n\t* @property {StructPhaseSpecificRenameSerialize} Serialize\n\t* @property {StructPhaseSpecificRenameDeserialize} Deserialize\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} Range<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {{\n\t*\t\tstart: T,\n\t*\t\tend: T,\n\t*\t}} RangeInclusive<T>\n\t* @property {T} start\n\t* @property {T} end\n\t*\n\t* @typedef {string} String\n\t*\n\t* @typedef {string} PathBuf\n\t*\n\t* @typedef {string} IpAddr\n\t*\n\t* @typedef {string} Ipv4Addr\n\t*\n\t* @typedef {string} Ipv6Addr\n\t*\n\t* @typedef {string} SocketAddr\n\t*\n\t* @typedef {string} SocketAddrV4\n\t*\n\t* @typedef {string} SocketAddrV6\n\t*\n\t* @typedef {T} Cow<T>\n\t*\n\t* @typedef {T} Cow<T>\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {({ Ok: T }) & { Err?: never } | ({ Err: E }) & { Ok?: never }} Result<T, E>\n\t* @property {{ Ok: T }} Ok\n\t* @property {{ Err: E }} Err\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {null} PhantomData<T>\n\t*\n\t* @typedef {null} PhantomData<T>\n\t*\n\t* @typedef {never} Infallible\n\t*\n\t* @typedef {null} Unit1\n\t*\n\t* @typedef {Record<string, never>} Unit2\n\t*\n\t* @typedef {[]} Unit3\n\t*\n\t* @typedef {null} Unit4\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {\"A\"} Unit5\n\t* @property {\"A\"} A\n\t*\n\t* @typedef {{ A: null }} Unit6\n\t* @property {{ A: null }} A\n\t*\n\t* @typedef {{ A: Record<string, never> }} Unit7\n\t* @property {{ A: Record<string, never> }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: string,\n\t*\t\tc: [number, string, number],\n\t*\t\td: string[],\n\t*\t\te: string | null,\n\t*\t}} SimpleStruct\n\t* @property {number} a\n\t* @property {string} b\n\t* @property {[number, string, number]} c\n\t* @property {string[]} d\n\t* @property {string | null} e\n\t*\n\t* @typedef {number} TupleStruct1\n\t* @property {number} \"0\"\n\t*\n\t* @typedef {[number, boolean, string]} TupleStruct3\n\t* @property {number} \"0\"\n\t* @property {boolean} \"1\"\n\t* @property {string} \"2\"\n\t*\n\t* @typedef {\"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\t* \ta: number,\n\t* } }) & { Multiple?: never; Single?: never }} TestEnum\n\t* @property {\"Unit\"} Unit\n\t* @property {{ Single: number }} Single\n\t* @property {{ Multiple: [number, number] }} Multiple\n\t* @property {{ Struct: {\n\t* \ta: number,\n\t* } }} Struct\n\t*\n\t* @typedef {TestEnum} RefStruct\n\t* @property {TestEnum} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tinline_this: {\n\t*\t\t\tref_struct: SimpleStruct,\n\t*\t\t\tval: number,\n\t*\t\t},\n\t*\t\tdont_inline_this: RefStruct,\n\t*\t}} InlinerStruct\n\t* @property {InlineStruct} inline_this\n\t* @property {RefStruct} dont_inline_this\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\targ: T,\n\t*\t}} GenericStruct<T>\n\t* @property {T} arg\n\t*\n\t* @typedef {{\n\t*\t\touter: string,\n\t*\t} & (FlattenEnum)} FlattenEnumStruct\n\t* @property {string} outer\n\t* @property {FlattenEnum} inner\n\t*\n\t* @typedef {{\n\t*\t\toverriden_field: string,\n\t*\t}} OverridenStruct\n\t* @property {string} overriden_field\n\t*\n\t* @typedef {{ [key in number]: string }} HasGenericAlias\n\t* @property {{ [key in number]: string }} \"0\"\n\t*\n\t* @typedef {({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }) & { A?: never; bbb?: never; cccc?: never }} EnumMacroAttributes\n\t* @property {{ A: string }} A\n\t* @property {{ bbb: number }} bbb\n\t* @property {{ cccc: number }} cccc\n\t* @property {{ D: {\n\t* \ta: string,\n\t* \tbbbbbb: number,\n\t* } }} D\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} InlineEnumField\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\toptional_field: {\n\t*\t\t\ta: string,\n\t*\t\t} | null,\n\t*\t}} InlineOptionalType\n\t* @property {PlaceholderInnerField | null} optional_field\n\t*\n\t* @typedef {\"OneWord\" | \"Two words\"} Rename\n\t* @property {\"OneWord\"} OneWord\n\t* @property {\"Two words\"} \"Two words\"\n\t*\n\t* @typedef {TransparentTypeInner} TransparentType\n\t* @property {TransparentTypeInner} \"0\"\n\t*\n\t* @typedef {null} TransparentType2\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentTypeWithOverride\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {{\n\t*\t\ta: Partial<{ [key in BasicEnum]: number }>,\n\t*\t}} EnumReferenceRecordKey\n\t* @property {Partial<{ [key in BasicEnum]: number }>} a\n\t*\n\t* @typedef {{\n\t*\t\tid: string,\n\t*\t} & (NestedEnum)} FlattenOnNestedEnum\n\t* @property {string} id\n\t* @property {NestedEnum} result\n\t*\n\t* @typedef {Record<string, never>} MyEmptyInput\n\t*\n\t* @typedef {string} String\n\t*\n\t* @typedef {{ A: string }} ExtraBracketsInTupleVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {string} ExtraBracketsInUnnamedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {T[]} Vec<T>\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [string, boolean],\n\t*\t}} InlineTuple\n\t* @property {[string, boolean]} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: [{\n\t*\t\t\tdemo: [string, boolean],\n\t*\t\t}, boolean],\n\t*\t}} InlineTuple2\n\t* @property {[InlineTuple, boolean]} demo\n\t*\n\t* @typedef {T} Box<T>\n\t*\n\t* @typedef {T} Box<T>\n\t*\n\t* @typedef {{ type: \"A\" } | { type: \"B\"; data: string }} SkippedFieldWithinVariant\n\t* @property {{ type: \"A\" }} A\n\t* @property {{ type: \"B\"; data: string }} B\n\t*\n\t* @typedef {{\n\t*\t\t\"test-ing\": string,\n\t*\t}} KebabCase\n\t* @property {string} \"test-ing\"\n\t*\n\t* @typedef {{\n\t*\t\tdefault_unity_arguments: string[],\n\t*\t}} Issue281\n\t* @property {string[]} default_unity_arguments\n\t*\n\t* @typedef {{\n\t*\t\tborrowed: T[],\n\t*\t\towned: T[],\n\t*\t}} LifetimeGenericStruct<T>\n\t* @property {T[]} borrowed\n\t* @property {T[]} owned\n\t*\n\t* @typedef {({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }} LifetimeGenericEnum<T>\n\t* @property {{ Borrowed: T }} Borrowed\n\t* @property {{ Owned: T }} Owned\n\t*\n\t* @typedef {{\n\t*\t\t\"@odata.context\": string,\n\t*\t}} RenameWithWeirdCharsField\n\t* @property {string} \"@odata.context\"\n\t*\n\t* @typedef {{ \"@odata.context\": string }} RenameWithWeirdCharsVariant\n\t* @property {{ \"@odata.context\": string }} \"@odata.context\"\n\t*\n\t* @typedef {{\n\t*\t\t\"\": string,\n\t*\t\t\"a\\\"b\": string,\n\t*\t\t\"a\\\\b\": string,\n\t*\t\t\"line\\nbreak\": string,\n\t*\t\t\"line\\u2028break\": string,\n\t*\t\t\"line\\u2029break\": string,\n\t*\t}} RenamedFieldKeys\n\t* @property {string} \"\"\n\t* @property {string} \"a\\\"b\"\n\t* @property {string} \"a\\\\b\"\n\t* @property {string} \"line\\nbreak\"\n\t* @property {string} \"line\\u2028break\"\n\t* @property {string} \"line\\u2029break\"\n\t*\n\t* @typedef {\"a-b\"} RenamedVariantWithSkippedPayload\n\t* @property {\"a-b\"} \"a-b\"\n\t*\n\t* @typedef {never} Type\n\t*\n\t* @typedef {{\n\t*\t\ta: GenericType<string>,\n\t*\t}} ActualType\n\t* @property {GenericType<string>} a\n\t*\n\t* @typedef {{\n\t*\t\tstring_ident: string,\n\t*\t\tu32_ident: number,\n\t*\t\tpath: string,\n\t*\t\ttuple: [string, number],\n\t*\t}} SpectaTypeOverride\n\t* @property {string} string_ident\n\t* @property {number} u32_ident\n\t* @property {string} path\n\t* @property {[string, number]} tuple\n\t*\n\t* @typedef {string} ContainerTypeOverrideStruct\n\t*\n\t* @typedef {string} ContainerTypeOverrideEnum\n\t*\n\t* @typedef {string} ContainerTypeOverrideGeneric\n\t*\n\t* @typedef {T} ContainerTypeOverrideToGeneric<T>\n\t*\n\t* @typedef {[string, number]} ContainerTypeOverrideTuple\n\t*\n\t* @typedef {[T, string]} ContainerTypeOverrideTupleGeneric<T>\n\t*\n\t* @typedef {{\n\t*\t\tcause: null,\n\t*\t}} InvalidToValidType\n\t* @property {null} cause\n\t*\n\t* @typedef {string} TupleStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TupleStructWithRep\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {T} GenericTupleStruct<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {string} BracedStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tt: \"StructNew\",\n\t*\t\ta: string,\n\t*\t}} StructNew\n\t* @property {\"StructNew\"} t\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\tb: string,\n\t*\t}} Struct2\n\t* @property {string} b\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\" }} Enum\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\" }} B\n\t*\n\t* @typedef {{ t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }} Enum2\n\t* @property {{ t: \"C\" }} C\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"D\"; enumField: null }} D\n\t*\n\t* @typedef {{ t: \"A\"; b: string }} Enum3\n\t* @property {{ t: \"A\"; b: string }} A\n\t*\n\t* @typedef {{\n\t*\t\tA: number,\n\t*\t\tB: number,\n\t*\t}} StructRenameAllUppercase\n\t* @property {number} A\n\t* @property {number} B\n\t*\n\t* @typedef {{\n\t*\t\t\"a/b\": number,\n\t*\t}} RenameSerdeSpecialChar\n\t* @property {number} \"a/b\"\n\t*\n\t* @typedef {\"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"} EnumRenameAllUppercase\n\t* @property {\"HELLOWORLD\"} HELLOWORLD\n\t* @property {\"VARIANTB\"} VARIANTB\n\t* @property {\"TESTINGWORDS\"} TESTINGWORDS\n\t*\n\t* @typedef {{\n\t*\t\tdemo: Recursive,\n\t*\t}} Recursive\n\t* @property {Recursive} demo\n\t*\n\t* @typedef {{\n\t*\t\tdemo: { [key in string]: RecursiveMapValue },\n\t*\t}} RecursiveMapValue\n\t* @property {{ [key in string]: RecursiveMapValue }} demo\n\t*\n\t* @typedef {RecursiveInline} RecursiveTransparent\n\t* @property {RecursiveInline} \"0\"\n\t*\n\t* @typedef {{ A: (RecursiveInEnum) }} RecursiveInEnum\n\t* @property {{ A: (RecursiveInEnum) }} A\n\t*\n\t* @typedef {string | null} NonOptional\n\t* @property {string | null} \"0\"\n\t*\n\t* @typedef {string | null} OptionalOnNamedField\n\t* @property {string | null} [\"0\"]\n\t*\n\t* @typedef {{\n\t*\t\tb: string | null,\n\t*\t}} OptionalOnTransparentNamedField\n\t* @property {string | null} b\n\t*\n\t* @typedef {({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\t* \ta: string | null,\n\t* } }) & { A?: never; C?: never } | ({ C: {\n\t* \ta?: string | null,\n\t* } }) & { A?: never; B?: never }} OptionalInEnum\n\t* @property {{ A?: string | null }} A\n\t* @property {{ B: {\n\t* \ta: string | null,\n\t* } }} B\n\t* @property {{ C: {\n\t* \ta?: string | null,\n\t* } }} C\n\t*\n\t* @typedef {string | number | { id: string } | [string, boolean]} UntaggedVariants\n\t* @property {string} A\n\t* @property {number} B\n\t* @property {number} C\n\t* @property {{ id: string }} D\n\t* @property {[string, boolean]} E\n\t*\n\t* @typedef {string | [number, string] | number} UntaggedVariantsWithoutValue\n\t* @property {string} A\n\t* @property {[number, string]} B\n\t* @property {number} C\n\t*\n\t* @typedef {null | number} UntaggedVariantsWithDuplicateBranches\n\t* @property {null} A\n\t* @property {number} B\n\t* @property {null} C\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in string]: null }} Regular\n\t* @property {{ [key in string]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in MaybeValidKey<string>]: null }} ValidMaybeValidKey\n\t* @property {{ [key in MaybeValidKey<string>]: null }} \"0\"\n\t*\n\t* @typedef {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} ValidMaybeValidKeyNested\n\t* @property {{ [key in MaybeValidKey<MaybeValidKey<string>>]: null }} \"0\"\n\t*\n\t* @typedef {string} MacroStruct\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{\n\t*\t\tdemo: string,\n\t*\t}} MacroStruct2\n\t* @property {string} demo\n\t*\n\t* @typedef {({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\t* \tdemo2: string,\n\t* } }) & { Demo?: never }} MacroEnum\n\t* @property {{ Demo: string }} Demo\n\t* @property {{ Demo2: {\n\t* \tdemo2: string,\n\t* } }} Demo2\n\t*\n\t* @deprecated\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedType\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg\n\t* @property {number} a\n\t*\n\t* @deprecated Look at you big man using a deprecation message\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} DeprecatedTypeWithMsg2\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\t/**\n\t*\t\t * @deprecated\n\t*\t\t */\n\t*\t\tb: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\tc: string,\n\t*\t\t/**\n\t*\t\t * @deprecated This field is cringe!\n\t*\t\t */\n\t*\t\td: string,\n\t*\t}} DeprecatedFields\n\t* @property {number} a\n\t* @property {string} b - @deprecated\n\t* @property {string} c - @deprecated This field is cringe!\n\t* @property {string} d - @deprecated This field is cringe!\n\t*\n\t* @typedef {[\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* string, \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* number]} DeprecatedTupleVariant\n\t* @property {string} \"0\" - @deprecated\n\t* @property {string} \"1\" - @deprecated Nope\n\t* @property {number} \"2\" - @deprecated Nope\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t * @deprecated\n\t*\t */\n\t* \"A\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"B\" | \n\t*\t/**\n\t*\t * @deprecated Nope\n\t*\t */\n\t* \"C\"} DeprecatedEnumVariants\n\t* @property {\n\t* /**\n\t*  * @deprecated\n\t*  */\n\t* \"A\"} A - @deprecated\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"B\"} B - @deprecated Nope\n\t* @property {\n\t* /**\n\t*  * @deprecated Nope\n\t*  */\n\t* \"C\"} C - @deprecated Nope\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {{\n\t*\t\t/**\n\t*\t\t *  Some triple-slash comment\n\t*\t\t *  Some more triple-slash comment\n\t*\t\t */\n\t*\t\ta: number,\n\t*\t}} CommentedStruct\n\t* @property {number} a - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some triple-slash comment\n\t*  Some more triple-slash comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some triple-slash comment\n\t*\t *  Some more triple-slash comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} CommentedEnum\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { A: number }} A - Some triple-slash comment Some more triple-slash comment\n\t* @property {\n\t* /**\n\t*  *  Some triple-slash comment\n\t*  *  Some more triple-slash comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some triple-slash comment\n\t* \t *  Some more triple-slash comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some triple-slash comment Some more triple-slash comment\n\t*\n\t*  Some single-line comment\n\t*\n\t* @typedef {\n\t*\t/**\n\t*\t *  Some single-line comment\n\t*\t */\n\t* ({ A: number }) & { B?: never } | \n\t*\t/**\n\t*\t *  Some single-line comment\n\t*\t */\n\t* ({ B: {\n\t* \t/**\n\t* \t *  Some single-line comment\n\t* \t */\n\t* \ta: number,\n\t* } }) & { A?: never }} SingleLineComment\n\t* @property {\n\t* /**\n\t*  *  Some single-line comment\n\t*  */\n\t* { A: number }} A - Some single-line comment\n\t* @property {\n\t* /**\n\t*  *  Some single-line comment\n\t*  */\n\t* { B: {\n\t* \t/**\n\t* \t *  Some single-line comment\n\t* \t */\n\t* \ta: number,\n\t* } }} B - Some single-line comment\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{\n\t*\t\ta: A,\n\t*\t\tb: B,\n\t*\t}} Demo<A, B>\n\t* @property {A} a\n\t* @property {B} b\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{ [key in K]: V }} HashMap<K, V>\n\t*\n\t* @typedef {{\n\t*\t\tfield: Demo<T, boolean>,\n\t*\t}} AGenericStruct<T>\n\t* @property {Demo<T, boolean>} field\n\t*\n\t* @typedef {{\n\t*\t\ta: B,\n\t*\t\tb: {\n\t*\t\t\tb: number,\n\t*\t\t},\n\t*\t\tc: B,\n\t*\t\td: {\n\t*\t\t\tflattened: number,\n\t*\t\t},\n\t*\t\te: {\n\t*\t\t\tgeneric_flattened: number,\n\t*\t\t},\n\t*\t}} A\n\t* @property {B} a\n\t* @property {B} b\n\t* @property {B} c\n\t* @property {D} d\n\t* @property {GenericFlattened<number>} e\n\t*\n\t* @typedef {{\n\t*\t\ta: ToBeFlattened,\n\t*\t\tb: ToBeFlattened,\n\t*\t}} DoubleFlattened\n\t* @property {ToBeFlattened} a\n\t* @property {ToBeFlattened} b\n\t*\n\t* @typedef {(Inner)} FlattenedInner\n\t* @property {Inner} c\n\t*\n\t* @typedef {(BoxedInner)} BoxFlattened\n\t* @property {BoxedInner} b\n\t*\n\t* @typedef {{\n\t*\t\tc: {\n\t*\t\t\ta: number,\n\t*\t\t},\n\t*\t}} BoxInline\n\t* @property {BoxedInner} c\n\t*\n\t* @typedef {{\n\t*\t\ta: string,\n\t*\t}} First\n\t* @property {string} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} Second\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\tb: { [key in string]: string },\n\t*\t\tc: First,\n\t*\t} & (First)} Third\n\t* @property {First} a\n\t* @property {{ [key in string]: string }} b\n\t* @property {First} c\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} Fourth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ttype: \"TagOnStructWithInline\",\n\t*\t\ta: First,\n\t*\t\tb: {\n\t*\t\t\ta: string,\n\t*\t\t},\n\t*\t}} TagOnStructWithInline\n\t* @property {\"TagOnStructWithInline\"} type\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: First,\n\t*\t}} Sixth\n\t* @property {First} a\n\t* @property {First} b\n\t*\n\t* @typedef {{\n\t*\t\ta: First,\n\t*\t\tb: Second,\n\t*\t}} Seventh\n\t* @property {First} a\n\t* @property {Second} b\n\t*\n\t* @typedef {{ A: string } | \"B\"} Eight\n\t* @property {{ A: string }} A\n\t* @property {\"B\"} B\n\t*\n\t* @typedef {{ t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\t* \ta: string,\n\t* } } | { t: \"D\"; c: First }} Ninth\n\t* @property {{ t: \"A\"; c: string }} A\n\t* @property {{ t: \"B\" }} B\n\t* @property {{ t: \"C\"; c: {\n\t* \ta: string,\n\t* } }} C\n\t* @property {{ t: \"D\"; c: First }} D\n\t*\n\t* @typedef {string | \"B\" | {\n\t* \ta: string,\n\t* } | First} Tenth\n\t* @property {string} A\n\t* @property {\"B\"} B\n\t* @property {{\n\t* \ta: string,\n\t* }} C\n\t* @property {First} D\n\t*\n\t* @typedef {{ type: \"Variant\" } & (First)} MyEnumTagged\n\t* @property {{ type: \"Variant\" } & (First)} Variant\n\t*\n\t* @typedef {{ Variant: (First) }} MyEnumExternal\n\t* @property {{ Variant: (First) }} Variant\n\t*\n\t* @typedef {{ t: \"Variant\"; c: (First) }} MyEnumAdjacent\n\t* @property {{ t: \"Variant\"; c: (First) }} Variant\n\t*\n\t* @typedef {(First)} MyEnumUntagged\n\t* @property {(First)} Variant\n\t*\n\t* @typedef {Record<string, never>} EmptyStruct\n\t*\n\t* @typedef {{\n\t*\t\ta: \"EmptyStructWithTag\",\n\t*\t}} EmptyStructWithTag\n\t* @property {\"EmptyStructWithTag\"} a\n\t*\n\t* @typedef {{ t: \"A\" } | { t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } } | { t: \"C\"; c: string }} AdjacentlyTagged\n\t* @property {{ t: \"A\" }} A\n\t* @property {{ t: \"B\"; c: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ t: \"C\"; c: string }} C\n\t*\n\t* @typedef {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } } | { event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } } | { event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} LoadProjectEvent\n\t* @property {{ event: \"started\"; data: {\n\t* \tprojectName: string,\n\t* } }} started\n\t* @property {{ event: \"progressTest\"; data: {\n\t* \tprojectName: string,\n\t* \tstatus: string,\n\t* \tprogress: number,\n\t* } }} progressTest\n\t* @property {{ event: \"finished\"; data: {\n\t* \tprojectName: string,\n\t* } }} finished\n\t*\n\t* @typedef {\"A\" | ({ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }) & { C?: never } | ({ C: string }) & { B?: never }} ExternallyTagged\n\t* @property {\"A\"} A\n\t* @property {{ B: {\n\t* \tid: string,\n\t* \tmethod: string,\n\t* } }} B\n\t* @property {{ C: string }} C\n\t*\n\t* @typedef {({ A: {\n\t* \ta: string,\n\t* } }) & { B?: never } | ({ B: {\n\t* \tb: string,\n\t* } }) & { A?: never }} Issue221External\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t* @property {{ B: {\n\t* \tb: string,\n\t* } }} B\n\t*\n\t* @typedef {{ type: \"A\" } & ({ [key in string]: string })} InternallyTaggedD\n\t* @property {{ type: \"A\" } & ({ [key in string]: string })} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedE\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedF\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedH\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{ type: \"A\" } & ({ type: \"A\" } | { type: \"B\" })} InternallyTaggedL\n\t* @property {{ type: \"A\" } & ({ type: \"A\" } | { type: \"B\" })} A\n\t*\n\t* @typedef {{ type: \"A\" }} InternallyTaggedM\n\t* @property {{ type: \"A\" }} A\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithAlias\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\tfield: string,\n\t*\t}} StructWithMultipleAliases\n\t* @property {string} field\n\t*\n\t* @typedef {{\n\t*\t\trenamed_field: string,\n\t*\t}} StructWithAliasAndRename\n\t* @property {string} renamed_field\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithVariantAlias\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"Variant\" | \"Other\"} EnumWithMultipleVariantAliases\n\t* @property {\"Variant\"} Variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {\"renamed_variant\" | \"Other\"} EnumWithVariantAliasAndRename\n\t* @property {\"renamed_variant\"} renamed_variant\n\t* @property {\"Other\"} Other\n\t*\n\t* @typedef {{ type: \"A\"; field: string } | { type: \"B\"; other: number }} InternallyTaggedWithAlias\n\t* @property {{ type: \"A\"; field: string }} A\n\t* @property {{ type: \"B\"; other: number }} B\n\t*\n\t* @typedef {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } } | { type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} AdjacentlyTaggedWithAlias\n\t* @property {{ type: \"A\"; data: {\n\t* \tfield: string,\n\t* } }} A\n\t* @property {{ type: \"B\"; data: {\n\t* \tother: number,\n\t* } }} B\n\t*\n\t* @typedef {({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }} UntaggedWithAlias\n\t* @property {{ field: string }} A\n\t* @property {{ other: number }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }} Issue221UntaggedSafe\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t*\n\t* @typedef {({ a: string }) & { b?: never } | ({ b: string }) & { a?: never } | ({ [key in string]: string })} Issue221UntaggedMixed\n\t* @property {{ a: string }} A\n\t* @property {{ b: string }} B\n\t* @property {({ [key in string]: string })} Unsafe\n\t*\n\t* @typedef {never} EmptyEnum\n\t*\n\t* @typedef {never} EmptyEnumTagged\n\t*\n\t* @typedef {never} EmptyEnumTaggedWContent\n\t*\n\t* @typedef {never} EmptyEnumUntagged\n\t*\n\t* @typedef {Record<string, never>} SkipOnlyField\n\t*\n\t* @typedef {{\n\t*\t\tb: number,\n\t*\t}} SkipField\n\t* @property {number} b\n\t*\n\t* @typedef {{ A: string }} SkipVariant\n\t* @property {{ A: string }} A\n\t*\n\t* @typedef {\"A\" | { B: [number] }} SkipUnnamedFieldInVariant\n\t* @property {\"A\"} A\n\t* @property {{ B: [number] }} B\n\t*\n\t* @typedef {({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\t* \tb: number,\n\t* } }) & { A?: never }} SkipNamedFieldInVariant\n\t* @property {{ A: Record<string, never> }} A\n\t* @property {{ B: {\n\t* \tb: number,\n\t* } }} B\n\t*\n\t* @typedef {null} TransparentWithSkip\n\t* @property {null} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip2\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {string} TransparentWithSkip3\n\t* @property {string} \"0\"\n\t*\n\t* @typedef {{ tag: \"A\"; data: string }} SkipVariant2\n\t* @property {{ tag: \"A\"; data: string }} A\n\t*\n\t* @typedef {{ A: {\n\t* \ta: string,\n\t* } }} SkipVariant3\n\t* @property {{ A: {\n\t* \ta: string,\n\t* } }} A\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SkipStructFields\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t}} SpectaSkipNonTypeField\n\t* @property {number} a\n\t*\n\t* @typedef {{\n\t*\t\ta: number,\n\t*\t\tb: number,\n\t*\t}} FlattenA\n\t* @property {number} a\n\t* @property {number} b\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & (FlattenA)} FlattenB\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tc: number,\n\t*\t} & (FlattenA)} FlattenC\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\ta: FlattenA,\n\t*\t\tc: number,\n\t*\t}} FlattenD\n\t* @property {FlattenA} a\n\t* @property {number} c\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tc: number,\n\t*\t\t} & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenE\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tc: number,\n\t*\t\t} & (FlattenA),\n\t*\t\td: number,\n\t*\t}} FlattenF\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {{\n\t*\t\tb: FlattenB,\n\t*\t\td: number,\n\t*\t}} FlattenG\n\t* @property {FlattenB} b\n\t* @property {number} d\n\t*\n\t* @typedef {[number[], [number[], number[]], [number[], number[], number[]]]} TupleNested\n\t* @property {number[]} \"0\"\n\t* @property {[number[], number[]]} \"1\"\n\t* @property {[number[], number[], number[]]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} Generic1<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t\tvalues: T[],\n\t*\t}} GenericAutoBound2<T>\n\t* @property {T} value\n\t* @property {T[]} values\n\t*\n\t* @typedef {{\n\t*\t\tfoo: Generic1<number>,\n\t*\t\tbar: Generic1<number>[],\n\t*\t\tbaz: { [key in string]: Generic1<string> },\n\t*\t}} Container1\n\t* @property {Generic1<number>} foo\n\t* @property {Generic1<number>[]} bar\n\t* @property {{ [key in string]: Generic1<string> }} baz\n\t*\n\t* @typedef {({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }} Generic2<A, B, C>\n\t* @property {{ A: A }} A\n\t* @property {{ B: [B, B, B] }} B\n\t* @property {{ C: C[] }} C\n\t* @property {{ D: A[][][] }} D\n\t* @property {{ E: {\n\t* \ta: A,\n\t* \tb: B,\n\t* \tc: C,\n\t* } }} E\n\t* @property {{ X: number[] }} X\n\t* @property {{ Y: number }} Y\n\t* @property {{ Z: number[][] }} Z\n\t*\n\t* @typedef {T[][]} GenericNewType1<T>\n\t* @property {T[][]} \"0\"\n\t*\n\t* @typedef {[T, T[], T[][]]} GenericTuple<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {T[][]} \"2\"\n\t*\n\t* @typedef {{\n\t*\t\ta: T,\n\t*\t\tb: [T, T],\n\t*\t\tc: [T, [T, T]],\n\t*\t\td: [T, T, T],\n\t*\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t*\t\tf: T[],\n\t*\t\tg: T[][],\n\t*\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t*\t}} GenericStruct2<T>\n\t* @property {T} a\n\t* @property {[T, T]} b\n\t* @property {[T, [T, T]]} c\n\t* @property {[T, T, T]} d\n\t* @property {[([T, T]), ([T, T]), ([T, T])]} e\n\t* @property {T[]} f\n\t* @property {T[][]} g\n\t* @property {([([T, T]), ([T, T]), ([T, T])])[]} h\n\t*\n\t* @typedef {T} InlineGenericNewtype<T>\n\t* @property {T} \"0\"\n\t*\n\t* @typedef {[T, T[], [T, T], { [key in string]: T }, T | null, \"Unit\" | ({ Unnamed: T }) & { Named?: never } | ({ Named: {\n\t* \tvalue: T,\n\t* } }) & { Unnamed?: never }]} InlineGenericNested<T>\n\t* @property {T} \"0\"\n\t* @property {T[]} \"1\"\n\t* @property {[T, T]} \"2\"\n\t* @property {{ [key in string]: T }} \"3\"\n\t* @property {T | null} \"4\"\n\t* @property {\"Unit\" | ({ Unnamed: T }) & { Named?: never } | ({ Named: {\n\t* \tvalue: T,\n\t* } }) & { Unnamed?: never }} \"5\"\n\t*\n\t* @typedef {{\n\t*\t\tt: T,\n\t*\t}} InlineFlattenGenericsG<T>\n\t* @property {T} t\n\t*\n\t* @typedef {{\n\t*\t\tg: InlineFlattenGenericsG<string>,\n\t*\t\tgi: {\n\t*\t\t\tt: string,\n\t*\t\t},\n\t*\t} & (InlineFlattenGenericsG<string>)} InlineFlattenGenerics\n\t* @property {InlineFlattenGenericsG<string>} g\n\t* @property {InlineFlattenGenericsG<string>} gi\n\t* @property {InlineFlattenGenericsG<string>} t\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefault<T = string>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tfirst: T,\n\t*\t\tsecond: U,\n\t*\t}} ChainedGenericDefault<T = string, U = T>\n\t* @property {T} first\n\t* @property {U} second\n\t*\n\t* @typedef {{\n\t*\t\tvalue: T,\n\t*\t}} GenericDefaultSkipped<T>\n\t* @property {T} value\n\t*\n\t* @typedef {{\n\t*\t\tvalue: number,\n\t*\t}} GenericDefaultSkippedNonType<T>\n\t* @property {number} value\n\t*\n\t* @typedef {{\n\t*\t\tpair: Pair<number, string>,\n\t*\t}} GenericParameterOrderPreserved\n\t* @property {Pair<number, string>} pair\n\t*\n\t* @typedef {{\n\t*\t\tdata: [number],\n\t*\t\ta: [number, number],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInNonConstContainer\n\t* @property {[number]} data\n\t* @property {[number, number]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number],\n\t*\t}} ConstGenericInConstContainer\n\t* @property {number[]} data\n\t* @property {number[]} a\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\ta: NamedConstGeneric,\n\t*\t\tb: NamedConstGeneric,\n\t*\t\td: [number, number],\n\t*\t}} NamedConstGenericContainer\n\t* @property {NamedConstGeneric} a\n\t* @property {NamedConstGeneric} b\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineConstGenericContainer\n\t* @property {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t}} b\n\t* @property {{\n\t*\t\tdata: number[],\n\t*\t\ta: number[],\n\t*\t\td: [number, number, number],\n\t*\t}} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {{\n\t*\t\tb: {\n\t*\t\t\tdata: [number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\tc: {\n\t*\t\t\tdata: [number, number, number],\n\t*\t\t\ta: [number, number],\n\t*\t\t\td: [number, number, number],\n\t*\t\t\te: InlineRecursiveConstGeneric,\n\t*\t\t},\n\t*\t\td: [number, number],\n\t*\t}} InlineRecursiveConstGenericContainer\n\t* @property {InlineRecursiveConstGeneric} b\n\t* @property {InlineRecursiveConstGeneric} c\n\t* @property {[number, number]} d\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*\n\t* @typedef {never} TestCollectionRegister\n\t*/\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__reference-raw.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nRange<i32>: Range<number>\nRangeInclusive<i32>: RangeInclusive<number>\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\nVec<i32>: number[]\nVec<MyEnum>: MyEnum[]\nResult<String, i32>: Result<string, number>\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: Unit1\nUnit2: Unit2\nUnit3: Unit3\nUnit4: Unit4\nUnit5: Unit5\nUnit6: Unit6\nUnit7: Unit7\nSimpleStruct: SimpleStruct\nTupleStruct1: TupleStruct1\nTupleStruct3: TupleStruct3\nTestEnum: TestEnum\nRefStruct: RefStruct\nInlinerStruct: InlinerStruct\nGenericStruct<i32>: GenericStruct<number>\nGenericStruct<String>: GenericStruct<string>\nFlattenEnumStruct: FlattenEnumStruct\nOverridenStruct: OverridenStruct\nHasGenericAlias: HasGenericAlias\nEnumMacroAttributes: EnumMacroAttributes\nInlineEnumField: InlineEnumField\nInlineOptionalType: InlineOptionalType\nRename: Rename\nTransparentType: TransparentType\nTransparentType2: TransparentType2\nTransparentTypeWithOverride: TransparentTypeWithOverride\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: EnumReferenceRecordKey\nFlattenOnNestedEnum: FlattenOnNestedEnum\nMyEmptyInput: MyEmptyInput\n(String): string\nExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant\nExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct\nVec<MyEnum>: MyEnum[]\nInlineTuple: InlineTuple\nInlineTuple2: InlineTuple2\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: SkippedFieldWithinVariant\nKebabCase: KebabCase\nIssue281<'_>: Issue281\nLifetimeGenericStruct<'_, i32>: LifetimeGenericStruct<number>\nLifetimeGenericEnum<'_, i32>: LifetimeGenericEnum<number>\nRenameWithWeirdCharsField: RenameWithWeirdCharsField\nRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant\nRenamedFieldKeys: RenamedFieldKeys\nRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload\ntype_type::Type: Type\nActualType: ActualType\nSpectaTypeOverride: SpectaTypeOverride\nContainerTypeOverrideStruct: ContainerTypeOverrideStruct\nContainerTypeOverrideEnum: ContainerTypeOverrideEnum\nContainerTypeOverrideGeneric<Box<dyn Any>>: ContainerTypeOverrideGeneric\nContainerTypeOverrideToGeneric<i32>: ContainerTypeOverrideToGeneric<number>\nContainerTypeOverrideTuple: ContainerTypeOverrideTuple\nContainerTypeOverrideTupleGeneric<i32>: ContainerTypeOverrideTupleGeneric<number>\nInvalidToValidType: InvalidToValidType\nTupleStruct: TupleStruct\nTupleStructWithRep: TupleStructWithRep\nGenericTupleStruct<String>: GenericTupleStruct<string>\nBracedStruct: BracedStruct\nStruct: Struct\nStruct2: Struct2\nEnum: Enum\nEnum2: Enum2\nEnum3: Enum3\nStructRenameAllUppercase: StructRenameAllUppercase\nRenameSerdeSpecialChar: RenameSerdeSpecialChar\nEnumRenameAllUppercase: EnumRenameAllUppercase\nRecursive: Recursive\nRecursiveMapValue: RecursiveMapValue\nRecursiveTransparent: RecursiveTransparent\nRecursiveInEnum: RecursiveInEnum\nNonOptional: NonOptional\nOptionalOnNamedField: OptionalOnNamedField\nOptionalOnTransparentNamedField: OptionalOnTransparentNamedField\nOptionalInEnum: OptionalInEnum\nUntaggedVariants: UntaggedVariants\nUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue\nUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches\nHashMap<String, ()>: { [key in string]: null }\nRegular: Regular\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: ValidMaybeValidKey\nValidMaybeValidKeyNested: ValidMaybeValidKeyNested\nMacroStruct: MacroStruct\nMacroStruct2: MacroStruct2\nMacroEnum: MacroEnum\nDeprecatedType: DeprecatedType\nDeprecatedTypeWithMsg: DeprecatedTypeWithMsg\nDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2\nDeprecatedFields: DeprecatedFields\nDeprecatedTupleVariant: DeprecatedTupleVariant\nDeprecatedEnumVariants: DeprecatedEnumVariants\nCommentedStruct: CommentedStruct\nCommentedEnum: CommentedEnum\nSingleLineComment: SingleLineComment\nNonGeneric: Demo<number, boolean>\nHalfGenericA<u8>: Demo<number, boolean>\nHalfGenericB<bool>: Demo<number, boolean>\nFullGeneric<u8, bool>: Demo<number, boolean>\nAnother<bool>: Demo<number, boolean>\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: AGenericStruct<number>\nA: A\nDoubleFlattened: DoubleFlattened\nFlattenedInner: FlattenedInner\nBoxFlattened: BoxFlattened\nBoxInline: BoxInline\nFirst: First\nSecond: Second\nThird: Third\nFourth: Fourth\nTagOnStructWithInline: TagOnStructWithInline\nSixth: Sixth\nSeventh: Seventh\nEight: Eight\nNinth: Ninth\nTenth: Tenth\nMyEnumTagged: MyEnumTagged\nMyEnumExternal: MyEnumExternal\nMyEnumAdjacent: MyEnumAdjacent\nMyEnumUntagged: MyEnumUntagged\nEmptyStruct: EmptyStruct\nEmptyStructWithTag: EmptyStructWithTag\nAdjacentlyTagged: AdjacentlyTagged\nLoadProjectEvent: LoadProjectEvent\nExternallyTagged: ExternallyTagged\nIssue221External: Issue221External\nInternallyTaggedD: InternallyTaggedD\nInternallyTaggedE: InternallyTaggedE\nInternallyTaggedF: InternallyTaggedF\nInternallyTaggedH: InternallyTaggedH\nInternallyTaggedL: InternallyTaggedL\nInternallyTaggedM: InternallyTaggedM\nStructWithAlias: StructWithAlias\nStructWithMultipleAliases: StructWithMultipleAliases\nStructWithAliasAndRename: StructWithAliasAndRename\nEnumWithVariantAlias: EnumWithVariantAlias\nEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases\nEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename\nInternallyTaggedWithAlias: InternallyTaggedWithAlias\nAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias\nUntaggedWithAlias: UntaggedWithAlias\nIssue221UntaggedSafe: Issue221UntaggedSafe\nIssue221UntaggedMixed: Issue221UntaggedMixed\nEmptyEnum: EmptyEnum\nEmptyEnumTagged: EmptyEnumTagged\nEmptyEnumTaggedWContent: EmptyEnumTaggedWContent\nEmptyEnumUntagged: EmptyEnumUntagged\nSkipOnlyField: SkipOnlyField\nSkipField: SkipField\nSkipVariant: SkipVariant\nSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant\nSkipNamedFieldInVariant: SkipNamedFieldInVariant\nTransparentWithSkip: TransparentWithSkip\nTransparentWithSkip2: TransparentWithSkip2\nTransparentWithSkip3: TransparentWithSkip3\nSkipVariant2: SkipVariant2\nSkipVariant3: SkipVariant3\nSkipStructFields: SkipStructFields\nSpectaSkipNonTypeField: SpectaSkipNonTypeField\nFlattenA: FlattenA\nFlattenB: FlattenB\nFlattenC: FlattenC\nFlattenD: FlattenD\nFlattenE: FlattenE\nFlattenF: FlattenF\nFlattenG: FlattenG\nTupleNested: TupleNested\nGeneric1<()>: Generic1<null>\nGenericAutoBound<()>: GenericAutoBound<null>\nGenericAutoBound2<()>: GenericAutoBound2<null>\nContainer1: Container1\nGeneric2<(), String, i32>: Generic2<null, string, number>\nGenericNewType1<()>: GenericNewType1<null>\nGenericTuple<()>: GenericTuple<null>\nGenericStruct2<()>: GenericStruct2<null>\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }]\nInlineFlattenGenericsG<()>: InlineFlattenGenericsG<null>\nInlineFlattenGenerics: InlineFlattenGenerics\nGenericDefault: GenericDefault\nChainedGenericDefault: ChainedGenericDefault\nChainedGenericDefault<String, String>: ChainedGenericDefault\nChainedGenericDefault<i32>: ChainedGenericDefault<number, number>\nChainedGenericDefault<String, i32>: ChainedGenericDefault<string, number>\nGenericDefaultSkipped: GenericDefaultSkipped<string>\nGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>\nGenericParameterOrderPreserved: GenericParameterOrderPreserved\nConstGenericInNonConstContainer: ConstGenericInNonConstContainer\nConstGenericInConstContainer: ConstGenericInConstContainer\nNamedConstGenericContainer: NamedConstGenericContainer\nInlineConstGenericContainer: InlineConstGenericContainer\nInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer\nTestCollectionRegister: TestCollectionRegister\nTestCollectionRegister: TestCollectionRegister\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__reference-serde.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nRange<i32>: Range<number>\nRangeInclusive<i32>: RangeInclusive<number>\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\nVec<i32>: number[]\nVec<MyEnum>: MyEnum[]\nResult<String, i32>: Result<string, number>\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: Unit1\nUnit2: Unit2\nUnit3: Unit3\nUnit4: Unit4\nUnit5: Unit5\nUnit6: Unit6\nUnit7: Unit7\nSimpleStruct: SimpleStruct\nTupleStruct1: TupleStruct1\nTupleStruct3: TupleStruct3\nTestEnum: TestEnum\nRefStruct: RefStruct\nInlinerStruct: InlinerStruct\nGenericStruct<i32>: GenericStruct<number>\nGenericStruct<String>: GenericStruct<string>\nFlattenEnumStruct: FlattenEnumStruct\nOverridenStruct: OverridenStruct\nHasGenericAlias: HasGenericAlias\nEnumMacroAttributes: EnumMacroAttributes\nInlineEnumField: InlineEnumField\nInlineOptionalType: InlineOptionalType\nRename: Rename\nTransparentType: TransparentType\nTransparentType2: TransparentType2\nTransparentTypeWithOverride: TransparentTypeWithOverride\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: EnumReferenceRecordKey\nFlattenOnNestedEnum: FlattenOnNestedEnum\nMyEmptyInput: MyEmptyInput\n(String): string\nExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant\nExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct\nVec<MyEnum>: MyEnum[]\nInlineTuple: InlineTuple\nInlineTuple2: InlineTuple2\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: SkippedFieldWithinVariant\nKebabCase: KebabCase\nIssue281<'_>: Issue281\nLifetimeGenericStruct<'_, i32>: LifetimeGenericStruct<number>\nLifetimeGenericEnum<'_, i32>: LifetimeGenericEnum<number>\nRenameWithWeirdCharsField: RenameWithWeirdCharsField\nRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant\nRenamedFieldKeys: RenamedFieldKeys\nRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload\ntype_type::Type: Type\nActualType: ActualType\nSpectaTypeOverride: SpectaTypeOverride\nContainerTypeOverrideStruct: ContainerTypeOverrideStruct\nContainerTypeOverrideEnum: ContainerTypeOverrideEnum\nContainerTypeOverrideGeneric<Box<dyn Any>>: ContainerTypeOverrideGeneric\nContainerTypeOverrideToGeneric<i32>: ContainerTypeOverrideToGeneric<number>\nContainerTypeOverrideTuple: ContainerTypeOverrideTuple\nContainerTypeOverrideTupleGeneric<i32>: ContainerTypeOverrideTupleGeneric<number>\nInvalidToValidType: InvalidToValidType\nTupleStruct: TupleStruct\nTupleStructWithRep: TupleStructWithRep\nGenericTupleStruct<String>: GenericTupleStruct<string>\nBracedStruct: BracedStruct\nStruct: StructNew\nStruct2: Struct2\nEnum: Enum\nEnum2: Enum2\nEnum3: Enum3\nStructRenameAllUppercase: StructRenameAllUppercase\nRenameSerdeSpecialChar: RenameSerdeSpecialChar\nEnumRenameAllUppercase: EnumRenameAllUppercase\nRecursive: Recursive\nRecursiveMapValue: RecursiveMapValue\nRecursiveTransparent: RecursiveTransparent\nRecursiveInEnum: RecursiveInEnum\nNonOptional: NonOptional\nOptionalOnNamedField: OptionalOnNamedField\nOptionalOnTransparentNamedField: OptionalOnTransparentNamedField\nOptionalInEnum: OptionalInEnum\nUntaggedVariants: UntaggedVariants\nUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue\nUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches\nHashMap<String, ()>: { [key in string]: null }\nRegular: Regular\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: ValidMaybeValidKey\nValidMaybeValidKeyNested: ValidMaybeValidKeyNested\nMacroStruct: MacroStruct\nMacroStruct2: MacroStruct2\nMacroEnum: MacroEnum\nDeprecatedType: DeprecatedType\nDeprecatedTypeWithMsg: DeprecatedTypeWithMsg\nDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2\nDeprecatedFields: DeprecatedFields\nDeprecatedTupleVariant: DeprecatedTupleVariant\nDeprecatedEnumVariants: DeprecatedEnumVariants\nCommentedStruct: CommentedStruct\nCommentedEnum: CommentedEnum\nSingleLineComment: SingleLineComment\nNonGeneric: Demo<number, boolean>\nHalfGenericA<u8>: Demo<number, boolean>\nHalfGenericB<bool>: Demo<number, boolean>\nFullGeneric<u8, bool>: Demo<number, boolean>\nAnother<bool>: Demo<number, boolean>\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: AGenericStruct<number>\nA: A\nDoubleFlattened: DoubleFlattened\nFlattenedInner: FlattenedInner\nBoxFlattened: BoxFlattened\nBoxInline: BoxInline\nFirst: First\nSecond: Second\nThird: Third\nFourth: Fourth\nTagOnStructWithInline: TagOnStructWithInline\nSixth: Sixth\nSeventh: Seventh\nEight: Eight\nNinth: Ninth\nTenth: Tenth\nMyEnumTagged: MyEnumTagged\nMyEnumExternal: MyEnumExternal\nMyEnumAdjacent: MyEnumAdjacent\nMyEnumUntagged: MyEnumUntagged\nEmptyStruct: EmptyStruct\nEmptyStructWithTag: EmptyStructWithTag\nAdjacentlyTagged: AdjacentlyTagged\nLoadProjectEvent: LoadProjectEvent\nExternallyTagged: ExternallyTagged\nIssue221External: Issue221External\nInternallyTaggedD: InternallyTaggedD\nInternallyTaggedE: InternallyTaggedE\nInternallyTaggedF: InternallyTaggedF\nInternallyTaggedH: InternallyTaggedH\nInternallyTaggedL: InternallyTaggedL\nInternallyTaggedM: InternallyTaggedM\nStructWithAlias: StructWithAlias\nStructWithMultipleAliases: StructWithMultipleAliases\nStructWithAliasAndRename: StructWithAliasAndRename\nEnumWithVariantAlias: EnumWithVariantAlias\nEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases\nEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename\nInternallyTaggedWithAlias: InternallyTaggedWithAlias\nAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias\nUntaggedWithAlias: UntaggedWithAlias\nIssue221UntaggedSafe: Issue221UntaggedSafe\nIssue221UntaggedMixed: Issue221UntaggedMixed\nEmptyEnum: EmptyEnum\nEmptyEnumTagged: EmptyEnumTagged\nEmptyEnumTaggedWContent: EmptyEnumTaggedWContent\nEmptyEnumUntagged: EmptyEnumUntagged\nSkipOnlyField: SkipOnlyField\nSkipField: SkipField\nSkipVariant: SkipVariant\nSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant\nSkipNamedFieldInVariant: SkipNamedFieldInVariant\nTransparentWithSkip: TransparentWithSkip\nTransparentWithSkip2: TransparentWithSkip2\nTransparentWithSkip3: TransparentWithSkip3\nSkipVariant2: SkipVariant2\nSkipVariant3: SkipVariant3\nSkipStructFields: SkipStructFields\nSpectaSkipNonTypeField: SpectaSkipNonTypeField\nFlattenA: FlattenA\nFlattenB: FlattenB\nFlattenC: FlattenC\nFlattenD: FlattenD\nFlattenE: FlattenE\nFlattenF: FlattenF\nFlattenG: FlattenG\nTupleNested: TupleNested\nGeneric1<()>: Generic1<null>\nGenericAutoBound<()>: GenericAutoBound<null>\nGenericAutoBound2<()>: GenericAutoBound2<null>\nContainer1: Container1\nGeneric2<(), String, i32>: Generic2<null, string, number>\nGenericNewType1<()>: GenericNewType1<null>\nGenericTuple<()>: GenericTuple<null>\nGenericStruct2<()>: GenericStruct2<null>\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }]\nInlineFlattenGenericsG<()>: InlineFlattenGenericsG<null>\nInlineFlattenGenerics: InlineFlattenGenerics\nGenericDefault: GenericDefault\nChainedGenericDefault: ChainedGenericDefault\nChainedGenericDefault<String, String>: ChainedGenericDefault\nChainedGenericDefault<i32>: ChainedGenericDefault<number, number>\nChainedGenericDefault<String, i32>: ChainedGenericDefault<string, number>\nGenericDefaultSkipped: GenericDefaultSkipped<string>\nGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>\nGenericParameterOrderPreserved: GenericParameterOrderPreserved\nConstGenericInNonConstContainer: ConstGenericInNonConstContainer\nConstGenericInConstContainer: ConstGenericInConstContainer\nNamedConstGenericContainer: NamedConstGenericContainer\nInlineConstGenericContainer: InlineConstGenericContainer\nInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer\nTestCollectionRegister: TestCollectionRegister\nTestCollectionRegister: TestCollectionRegister\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__jsdoc__reference-serde_phases.snap",
    "content": "---\nsource: tests/tests/jsdoc.rs\nexpression: output\n---\nIssue374: Issue374_Serialize\nOptional: Optional_Serialize\nStructPhaseSpecificRename: StructPhaseSpecificRenameSerialize\nRange<i32>: Range<number>\nRangeInclusive<i32>: RangeInclusive<number>\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\nVec<i32>: number[]\nVec<MyEnum>: MyEnum[]\nResult<String, i32>: Result<string, number>\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: Unit1\nUnit2: Unit2\nUnit3: Unit3\nUnit4: Unit4\nUnit5: Unit5\nUnit6: Unit6\nUnit7: Unit7\nSimpleStruct: SimpleStruct\nTupleStruct1: TupleStruct1\nTupleStruct3: TupleStruct3\nTestEnum: TestEnum\nRefStruct: RefStruct\nInlinerStruct: InlinerStruct\nGenericStruct<i32>: GenericStruct<number>\nGenericStruct<String>: GenericStruct<string>\nFlattenEnumStruct: FlattenEnumStruct\nOverridenStruct: OverridenStruct\nHasGenericAlias: HasGenericAlias\nEnumMacroAttributes: EnumMacroAttributes\nInlineEnumField: InlineEnumField\nInlineOptionalType: InlineOptionalType\nRename: Rename\nTransparentType: TransparentType\nTransparentType2: TransparentType2\nTransparentTypeWithOverride: TransparentTypeWithOverride\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: EnumReferenceRecordKey\nFlattenOnNestedEnum: FlattenOnNestedEnum\nMyEmptyInput: MyEmptyInput\n(String): string\nExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant\nExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct\nVec<MyEnum>: MyEnum[]\nInlineTuple: InlineTuple\nInlineTuple2: InlineTuple2\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: SkippedFieldWithinVariant\nKebabCase: KebabCase\nIssue281<'_>: Issue281\nLifetimeGenericStruct<'_, i32>: LifetimeGenericStruct<number>\nLifetimeGenericEnum<'_, i32>: LifetimeGenericEnum<number>\nRenameWithWeirdCharsField: RenameWithWeirdCharsField\nRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant\nRenamedFieldKeys: RenamedFieldKeys\nRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload\ntype_type::Type: Type\nActualType: ActualType\nSpectaTypeOverride: SpectaTypeOverride\nContainerTypeOverrideStruct: ContainerTypeOverrideStruct\nContainerTypeOverrideEnum: ContainerTypeOverrideEnum\nContainerTypeOverrideGeneric<Box<dyn Any>>: ContainerTypeOverrideGeneric\nContainerTypeOverrideToGeneric<i32>: ContainerTypeOverrideToGeneric<number>\nContainerTypeOverrideTuple: ContainerTypeOverrideTuple\nContainerTypeOverrideTupleGeneric<i32>: ContainerTypeOverrideTupleGeneric<number>\nInvalidToValidType: InvalidToValidType\nTupleStruct: TupleStruct\nTupleStructWithRep: TupleStructWithRep\nGenericTupleStruct<String>: GenericTupleStruct<string>\nBracedStruct: BracedStruct\nStruct: StructNew\nStruct2: Struct2\nEnum: Enum\nEnum2: Enum2\nEnum3: Enum3\nStructRenameAllUppercase: StructRenameAllUppercase\nRenameSerdeSpecialChar: RenameSerdeSpecialChar\nEnumRenameAllUppercase: EnumRenameAllUppercase\nRecursive: Recursive\nRecursiveMapValue: RecursiveMapValue\nRecursiveTransparent: RecursiveTransparent\nRecursiveInEnum: RecursiveInEnum\nNonOptional: NonOptional\nOptionalOnNamedField: OptionalOnNamedField\nOptionalOnTransparentNamedField: OptionalOnTransparentNamedField\nOptionalInEnum: OptionalInEnum\nUntaggedVariants: UntaggedVariants\nUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue\nUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches\nHashMap<String, ()>: { [key in string]: null }\nRegular: Regular\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: ValidMaybeValidKey\nValidMaybeValidKeyNested: ValidMaybeValidKeyNested\nMacroStruct: MacroStruct\nMacroStruct2: MacroStruct2\nMacroEnum: MacroEnum\nDeprecatedType: DeprecatedType\nDeprecatedTypeWithMsg: DeprecatedTypeWithMsg\nDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2\nDeprecatedFields: DeprecatedFields\nDeprecatedTupleVariant: DeprecatedTupleVariant\nDeprecatedEnumVariants: DeprecatedEnumVariants\nCommentedStruct: CommentedStruct\nCommentedEnum: CommentedEnum\nSingleLineComment: SingleLineComment\nNonGeneric: Demo<number, boolean>\nHalfGenericA<u8>: Demo<number, boolean>\nHalfGenericB<bool>: Demo<number, boolean>\nFullGeneric<u8, bool>: Demo<number, boolean>\nAnother<bool>: Demo<number, boolean>\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: AGenericStruct<number>\nA: A\nDoubleFlattened: DoubleFlattened\nFlattenedInner: FlattenedInner\nBoxFlattened: BoxFlattened\nBoxInline: BoxInline\nFirst: First\nSecond: Second\nThird: Third\nFourth: Fourth\nTagOnStructWithInline: TagOnStructWithInline\nSixth: Sixth\nSeventh: Seventh\nEight: Eight\nNinth: Ninth\nTenth: Tenth\nMyEnumTagged: MyEnumTagged\nMyEnumExternal: MyEnumExternal\nMyEnumAdjacent: MyEnumAdjacent\nMyEnumUntagged: MyEnumUntagged\nEmptyStruct: EmptyStruct\nEmptyStructWithTag: EmptyStructWithTag\nAdjacentlyTagged: AdjacentlyTagged\nLoadProjectEvent: LoadProjectEvent\nExternallyTagged: ExternallyTagged\nIssue221External: Issue221External\nInternallyTaggedD: InternallyTaggedD\nInternallyTaggedE: InternallyTaggedE\nInternallyTaggedF: InternallyTaggedF\nInternallyTaggedH: InternallyTaggedH\nInternallyTaggedL: InternallyTaggedL\nInternallyTaggedM: InternallyTaggedM\nStructWithAlias: StructWithAlias\nStructWithMultipleAliases: StructWithMultipleAliases\nStructWithAliasAndRename: StructWithAliasAndRename\nEnumWithVariantAlias: EnumWithVariantAlias\nEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases\nEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename\nInternallyTaggedWithAlias: InternallyTaggedWithAlias\nAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias\nUntaggedWithAlias: UntaggedWithAlias\nIssue221UntaggedSafe: Issue221UntaggedSafe\nIssue221UntaggedMixed: Issue221UntaggedMixed\nEmptyEnum: EmptyEnum\nEmptyEnumTagged: EmptyEnumTagged\nEmptyEnumTaggedWContent: EmptyEnumTaggedWContent\nEmptyEnumUntagged: EmptyEnumUntagged\nSkipOnlyField: SkipOnlyField\nSkipField: SkipField\nSkipVariant: SkipVariant\nSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant\nSkipNamedFieldInVariant: SkipNamedFieldInVariant\nTransparentWithSkip: TransparentWithSkip\nTransparentWithSkip2: TransparentWithSkip2\nTransparentWithSkip3: TransparentWithSkip3\nSkipVariant2: SkipVariant2\nSkipVariant3: SkipVariant3\nSkipStructFields: SkipStructFields\nSpectaSkipNonTypeField: SpectaSkipNonTypeField\nFlattenA: FlattenA\nFlattenB: FlattenB\nFlattenC: FlattenC\nFlattenD: FlattenD\nFlattenE: FlattenE\nFlattenF: FlattenF\nFlattenG: FlattenG\nTupleNested: TupleNested\nGeneric1<()>: Generic1<null>\nGenericAutoBound<()>: GenericAutoBound<null>\nGenericAutoBound2<()>: GenericAutoBound2<null>\nContainer1: Container1\nGeneric2<(), String, i32>: Generic2<null, string, number>\nGenericNewType1<()>: GenericNewType1<null>\nGenericTuple<()>: GenericTuple<null>\nGenericStruct2<()>: GenericStruct2<null>\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }]\nInlineFlattenGenericsG<()>: InlineFlattenGenericsG<null>\nInlineFlattenGenerics: InlineFlattenGenerics\nGenericDefault: GenericDefault\nChainedGenericDefault: ChainedGenericDefault\nChainedGenericDefault<String, String>: ChainedGenericDefault\nChainedGenericDefault<i32>: ChainedGenericDefault<number, number>\nChainedGenericDefault<String, i32>: ChainedGenericDefault<string, number>\nGenericDefaultSkipped: GenericDefaultSkipped<string>\nGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>\nGenericParameterOrderPreserved: GenericParameterOrderPreserved\nConstGenericInNonConstContainer: ConstGenericInNonConstContainer\nConstGenericInConstContainer: ConstGenericInConstContainer\nNamedConstGenericContainer: NamedConstGenericContainer\nInlineConstGenericContainer: InlineConstGenericContainer\nInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer\nTestCollectionRegister: TestCollectionRegister\nTestCollectionRegister: TestCollectionRegister\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-duplicate-files.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: output\n---\ntest/\n  layouts/\n    testing/\n      testing2.ts (114 bytes)\n      ────────────────────────────────────────\n      // This file has been generated by Specta. Do not edit this file manually.\n      export type Testing = {\n      \tc: string,\n      };\n      ════════════════════════════════════════\n\n    testing.ts (220 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    \n    import type * as test$layouts$testing$testing2 from \"./testing/testing2\";\n    export type Testing = {\n    \tb: test$layouts$testing$testing2.Testing,\n    };\n    ════════════════════════════════════════\n\n  layouts.ts (285 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  \n  import type * as test$layouts$testing from \"./layouts/testing\";\n  export type Another = {\n  \tbruh: string,\n  };\n  \n  export type MoreType = {\n  \tu: string,\n  };\n  \n  export type Testing = {\n  \ta: test$layouts$testing.Testing,\n  };\n  ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-duplicate-module-prefixed.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: module_prefixed\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type test_layouts_Another = {\n\tbruh: string,\n};\n\nexport type test_layouts_MoreType = {\n\tu: string,\n};\n\nexport type test_layouts_Testing = {\n\ta: test_layouts_testing_Testing,\n};\n\nexport type test_layouts_testing_Testing = {\n\tb: test_layouts_testing_testing2_Testing,\n};\n\nexport type test_layouts_testing_testing2_Testing = {\n\tc: string,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-duplicate-namespaces.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: namespaces\n---\n// This file has been generated by Specta. Do not edit this file manually.\n\nnamespace $s$ {\n\n\texport namespace test {\n\n\t\texport namespace layouts {\n\t\t\texport type Another = {\n\t\t\t\tbruh: string,\n\t\t\t};\n\n\t\t\texport type MoreType = {\n\t\t\t\tu: string,\n\t\t\t};\n\n\t\t\texport type Testing = {\n\t\t\t\ta: $s$.test.layouts.testing.Testing,\n\t\t\t};\n\n\t\t\texport namespace testing {\n\t\t\t\texport type Testing = {\n\t\t\t\t\tb: $s$.test.layouts.testing.testing2.Testing,\n\t\t\t\t};\n\n\t\t\t\texport namespace testing2 {\n\t\t\t\t\texport type Testing = {\n\t\t\t\t\t\tc: string,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\nexport import test = $s$.test;\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-empty-module-path-files.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: output\n---\ntests/\n  tests/\n    layouts.ts (105 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    export type testing = number;\n    ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-empty-module-path-flat.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: flat\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type testing = number;\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-empty-module-path-module-prefixed.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: module_prefixed\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type tests_tests_layouts_testing = number;\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-empty-module-path-namespaces.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: namespaces\n---\n// This file has been generated by Specta. Do not edit this file manually.\n\nnamespace $s$ {\n\n\texport namespace tests {\n\n\t\texport namespace tests {\n\n\t\t\texport namespace layouts {\n\t\t\t\texport type testing = number;\n\t\t\t}\n\t\t}\n\t}\n}\nexport import tests = $s$.tests;\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-non-duplicate-default.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: default_output\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type Another = {\n\tbruh: string,\n};\n\nexport type MoreType = {\n\tu: string,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-non-duplicate-files.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: output\n---\ntest/\n  layouts.ts (158 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type Another = {\n  \tbruh: string,\n  };\n  \n  export type MoreType = {\n  \tu: string,\n  };\n  ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-non-duplicate-flat.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: flat\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type Another = {\n\tbruh: string,\n};\n\nexport type MoreType = {\n\tu: string,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-non-duplicate-module-prefixed.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: module_prefixed\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type test_layouts_Another = {\n\tbruh: string,\n};\n\nexport type test_layouts_MoreType = {\n\tu: string,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__layouts__layouts-non-duplicate-namespaces.snap",
    "content": "---\nsource: tests/tests/layouts.rs\nexpression: namespaces\n---\n// This file has been generated by Specta. Do not edit this file manually.\n\nnamespace $s$ {\n\n\texport namespace test {\n\n\t\texport namespace layouts {\n\t\t\texport type Another = {\n\t\t\t\tbruh: string,\n\t\t\t};\n\n\t\t\texport type MoreType = {\n\t\t\t\tu: string,\n\t\t\t};\n\t\t}\n\t}\n}\nexport import test = $s$.test;\n"
  },
  {
    "path": "tests/tests/snapshots/test__legacy_impls__legacy_impls.snap",
    "content": "---\nsource: tests/tests/legacy_impls.rs\nexpression: \"Typescript::default().export(&Types::default().register::<LegacyImpls>(),\\nspecta_serde::Format).unwrap()\"\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type ErrorStackContext = {\n\tcontext: string,\n\tattachments: string[],\n\tsources: ErrorStackContext[],\n};\n\nexport type LegacyImpls = {\n\tordered_f32: number,\n\tordered_f64: number,\n\theapless_vec: [number, number, number, number, number, number, number, number],\n\tsemver: string,\n\tsmol: string,\n\tarray_vec: [number, number, number, number, number, number, number, number],\n\tarray_string: string,\n\tsmallvec: ([number, number, number, number, number, number, number, number])[],\n\ttoml_datetime: {\n\t\tv: string,\n\t},\n\tulid: string,\n\tchrono_naive_datetime: string,\n\tchrono_naive_date: string,\n\tchrono_naive_time: string,\n\tchrono_duration: string,\n\tchrono_date: string,\n\tchrono_datetime: string,\n\tchrono_fixed_offset: string,\n\tchrono_utc: string,\n\tchrono_local: string,\n\teither: ({ Left: number }) & { Right?: never } | ({ Right: string }) & { Left?: never },\n\terror_stack_report: Report,\n\terror_stack_multi_report: Report,\n\tglam_affine2: [number, number, number, number, number, number],\n\tglam_affine3a: [number, number, number, number, number, number, number, number, number, number, number, number],\n\tglam_mat2: [number, number, number, number],\n\tglam_mat3: [number, number, number, number, number, number, number, number, number],\n\tglam_mat3a: [number, number, number, number, number, number, number, number, number],\n\tglam_mat4: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],\n\tglam_quat: [number, number, number, number],\n\tglam_vec2: [number, number],\n\tglam_vec3: [number, number, number],\n\tglam_vec3a: [number, number, number],\n\tglam_vec4: [number, number, number, number],\n\tglam_daffine2: [number, number, number, number, number, number],\n\tglam_daffine3: [number, number, number, number, number, number, number, number, number, number, number, number],\n\tglam_dmat2: [number, number, number, number],\n\tglam_dmat3: [number, number, number, number, number, number, number, number, number],\n\tglam_dmat4: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],\n\tglam_dquat: [number, number, number, number],\n\tglam_dvec2: [number, number],\n\tglam_dvec3: [number, number, number],\n\tglam_dvec4: [number, number, number, number],\n\tglam_i8vec2: [number, number],\n\tglam_i8vec3: [number, number, number],\n\tglam_i8vec4: [number, number, number, number],\n\tglam_u8vec2: [number, number],\n\tglam_u8vec3: [number, number, number],\n\tglam_u8vec4: [number, number, number, number],\n\tglam_i16vec2: [number, number],\n\tglam_i16vec3: [number, number, number],\n\tglam_i16vec4: [number, number, number, number],\n\tglam_u16vec2: [number, number],\n\tglam_u16vec3: [number, number, number],\n\tglam_u16vec4: [number, number, number, number],\n\tglam_ivec2: [number, number],\n\tglam_ivec3: [number, number, number],\n\tglam_ivec4: [number, number, number, number],\n\tglam_uvec2: [number, number],\n\tglam_uvec3: [number, number, number],\n\tglam_uvec4: [number, number, number, number],\n\tglam_bvec2: [boolean, boolean],\n\tglam_bvec3: [boolean, boolean, boolean],\n\tglam_bvec4: [boolean, boolean, boolean, boolean],\n};\n\nexport type Report = ErrorStackContext[];\n"
  },
  {
    "path": "tests/tests/snapshots/test__serde_conversions__serde-conversions-format-phases-exports-field-only-phased-override.snap",
    "content": "---\nsource: tests/tests/serde_conversions.rs\nexpression: rendered\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type FieldOnlyPhasedOverride = FieldOnlyPhasedOverride_Serialize | FieldOnlyPhasedOverride_Deserialize;\n\nexport type FieldOnlyPhasedOverride_Deserialize = {\n\tvalue: number,\n};\n\nexport type FieldOnlyPhasedOverride_Serialize = {\n\tvalue: string,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__serde_conversions__serde-conversions-format-phases-splits-container-and-dependents.snap",
    "content": "---\nsource: tests/tests/serde_conversions.rs\nexpression: rendered\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type IntoOnly = IntoOnly_Serialize | IntoOnly_Deserialize;\n\nexport type IntoOnly_Deserialize = {\n\tvalue: number,\n};\n\nexport type IntoOnly_Serialize = Wire;\n\nexport type Parent = Parent_Serialize | Parent_Deserialize;\n\nexport type Parent_Deserialize = {\n\tchild: IntoOnly_Deserialize,\n};\n\nexport type Parent_Serialize = {\n\tchild: IntoOnly_Serialize,\n};\n\nexport type Wire = {\n\tvalue: number,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__serde_identifiers__serde-identifiers-field-typescript.snap",
    "content": "---\nsource: tests/tests/serde_identifiers.rs\nexpression: field_ts\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type FieldIdentifier = FieldIdentifier_Serialize | FieldIdentifier_Deserialize;\n\nexport type FieldIdentifier_Deserialize = \"first_name\" | \"last_name\" | \"other\" | number | boolean;\n\nexport type FieldIdentifier_Serialize = \"first_name\" | \"last_name\" | { other: boolean };\n"
  },
  {
    "path": "tests/tests/snapshots/test__serde_identifiers__serde-identifiers-variant-typescript.snap",
    "content": "---\nsource: tests/tests/serde_identifiers.rs\nexpression: variant_ts\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type VariantIdentifier = VariantIdentifier_Serialize | VariantIdentifier_Deserialize;\n\nexport type VariantIdentifier_Deserialize = \"http_status\" | \"legacy_name\" | \"legacy\" | number;\n\nexport type VariantIdentifier_Serialize = \"http_status\" | \"legacy_name\";\n"
  },
  {
    "path": "tests/tests/snapshots/test__serde_other__serde-other-adjacent-tag-typescript.snap",
    "content": "---\nsource: tests/tests/serde_other.rs\nexpression: ts\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type AdjacentOther = AdjacentOther_Serialize | AdjacentOther_Deserialize;\n\nexport type AdjacentOther_Deserialize = ({ known: {\n\tkind: \"known\",\n\tdata: string,\n} }) & { Other?: never } | ({ Other: {\n\tkind: string,\n} }) & { known?: never };\n\nexport type AdjacentOther_Serialize = { kind: \"known\"; data: string } | ({ kind: \"Other\" }) & { data?: never };\n"
  },
  {
    "path": "tests/tests/snapshots/test__serde_other__serde-other-internal-tag-typescript.snap",
    "content": "---\nsource: tests/tests/serde_other.rs\nexpression: ts\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type InternalOther = InternalOther_Serialize | InternalOther_Deserialize;\n\nexport type InternalOther_Deserialize = ({ known: {\n\tkind: \"known\",\n} }) & { Other?: never } | ({ Other: {\n\tkind: string,\n} }) & { known?: never };\n\nexport type InternalOther_Serialize = { kind: \"known\" } | { kind: \"Other\" };\n"
  },
  {
    "path": "tests/tests/snapshots/test__swift__swift-export-raw.snap",
    "content": "---\nsource: tests/tests/swift.rs\nexpression: \"phase_output(&types, format)\"\n---\n// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum JobStatus: Codable {\n    case queued\n    case pendingApproval\n}\n\npublic enum MixedEnum: Codable {\n    case unit\n    case withData(String)\n}\n\npublic enum RegularEnum: Codable {\n    case variantOne\n    case variantTwo\n}\n"
  },
  {
    "path": "tests/tests/snapshots/test__swift__swift-export-serde.snap",
    "content": "---\nsource: tests/tests/swift.rs\nexpression: \"phase_output(&types, format)\"\n---\n// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum JobStatus: String, Codable {\n    case queued = \"queued\"\n    case pendingApproval = \"pending_approval\"\n}\n\npublic enum MixedEnum {\n    case unit\n    case withData(String)\n}\n// MARK: - MixedEnum Codable Implementation\nextension MixedEnum: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case unit = \"unit\"\n        case withData = \"with_data\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .unit:\n            self = .unit\n        case .withData:\n            let data = try container.decode(String.self, forKey: .withData)\n            self = .withData(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .unit:\n            try container.encodeNil(forKey: .unit)\n        case .withData(let data):\n            try container.encode(data, forKey: .withData)\n        }\n    }\n}\n\n\npublic enum RegularEnum: String, Codable {\n    case variantOne = \"VariantOne\"\n    case variantTwo = \"VariantTwo\"\n}\n"
  },
  {
    "path": "tests/tests/snapshots/test__swift__swift-export-serde_phases.snap",
    "content": "---\nsource: tests/tests/swift.rs\nexpression: \"phase_output(&types, format)\"\n---\n// This file has been generated by Specta. DO NOT EDIT.\nimport Foundation\n\npublic enum JobStatus: String, Codable {\n    case queued = \"queued\"\n    case pendingApproval = \"pending_approval\"\n}\n\npublic enum MixedEnum {\n    case unit\n    case withData(String)\n}\n// MARK: - MixedEnum Codable Implementation\nextension MixedEnum: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case unit = \"unit\"\n        case withData = \"with_data\"\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        if container.allKeys.count != 1 {\n            throw DecodingError.dataCorrupted(\n                DecodingError.Context(codingPath: decoder.codingPath, debugDescription: \"Invalid number of keys found, expected one.\")\n            )\n        }\n\n        let key = container.allKeys.first!\n        switch key {\n        case .unit:\n            self = .unit\n        case .withData:\n            let data = try container.decode(String.self, forKey: .withData)\n            self = .withData(data)\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        switch self {\n        case .unit:\n            try container.encodeNil(forKey: .unit)\n        case .withData(let data):\n            try container.encode(data, forKey: .withData)\n        }\n    }\n}\n\n\npublic enum RegularEnum: String, Codable {\n    case variantOne = \"VariantOne\"\n    case variantTwo = \"VariantTwo\"\n}\n"
  },
  {
    "path": "tests/tests/snapshots/test__types__serde-default-container-typescript.snap",
    "content": "---\nsource: tests/tests/types.rs\nexpression: ts\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type ContainerDefault = {\n\tvalue?: string,\n\tflag?: boolean,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__types__serde-default-field-typescript.snap",
    "content": "---\nsource: tests/tests/types.rs\nexpression: ts\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type FieldDefault = {\n\tname: string,\n\tenabled?: boolean,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__types__serde-mixed-untagged-phased-typescript.snap",
    "content": "---\nsource: tests/tests/types.rs\nexpression: ts\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type MixedTaggedAndUntaggedPhased = MixedTaggedAndUntaggedPhased_Serialize | MixedTaggedAndUntaggedPhased_Deserialize;\n\nexport type MixedTaggedAndUntaggedPhased_Deserialize = { Tagged: {\n\tkind: \"Tagged\",\n\tvalue: string,\n} } | string;\n\nexport type MixedTaggedAndUntaggedPhased_Serialize = { Tagged: {\n\tkind: \"Tagged\",\n\tvalue: string,\n} } | boolean;\n"
  },
  {
    "path": "tests/tests/snapshots/test__types__serde-mixed-untagged-struct-typescript.snap",
    "content": "---\nsource: tests/tests/types.rs\nexpression: ts\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type MixedTaggedAndUntaggedStruct = { kind: \"Tagged\"; value: string } | {\n\traw_value: string,\n};\n"
  },
  {
    "path": "tests/tests/snapshots/test__types__serde-mixed-untagged-typescript.snap",
    "content": "---\nsource: tests/tests/types.rs\nexpression: ts\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type MixedTaggedAndUntagged = { kind: \"Tagged\"; value: string } | string | null;\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__export-many-raw.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nexport type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type Unit1 = null;\n\nexport type Unit2 = Record<string, never>;\n\nexport type Unit3 = [];\n\nexport type Unit4 = null;\n\nexport type Unit5 = \"A\";\n\nexport type Unit6 = [];\n\nexport type Unit7 = Record<string, never>;\n\nexport type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\nexport type TupleStruct1 = number;\n\nexport type TupleStruct3 = [number, boolean, string];\n\nexport type TestEnum = \"Unit\" | number | [number, number] | { a: number };\n\nexport type RefStruct = TestEnum;\n\nexport type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type FlattenEnumStruct = {\n\touter: string,\n\tinner: FlattenEnum,\n};\n\nexport type OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type HasGenericAlias = { [key in number]: string };\n\nexport type EnumMacroAttributes = string | number | { a: string; b: number };\n\nexport type InlineEnumField = {\n\ta: string,\n};\n\nexport type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type Rename = \"OneWord\" | \"TwoWords\";\n\nexport type TransparentType = TransparentTypeInner;\n\nexport type TransparentType2 = null;\n\nexport type TransparentTypeWithOverride = string;\n\nexport type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nexport type FlattenOnNestedEnum = {\n\tid: string,\n\tresult: NestedEnum,\n};\n\nexport type MyEmptyInput = Record<string, never>;\n\nexport type ExtraBracketsInTupleVariant = string;\n\nexport type ExtraBracketsInUnnamedStruct = string;\n\nexport type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type SkippedFieldWithinVariant = never | string;\n\nexport type KebabCase = {\n\ttest_ing: string,\n};\n\nexport type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nexport type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type LifetimeGenericEnum<T> = T;\n\nexport type RenameWithWeirdCharsField = {\n\todata_context: string,\n};\n\nexport type RenameWithWeirdCharsVariant = string;\n\nexport type RenamedFieldKeys = {\n\tempty: string,\n\tquote: string,\n\tbackslash: string,\n\tnewline: string,\n\tline_separator: string,\n\tparagraph_separator: string,\n};\n\nexport type RenamedVariantWithSkippedPayload = never;\n\nexport type Type = never;\n\nexport type ActualType = {\n\ta: GenericType<string>,\n};\n\nexport type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type ContainerTypeOverrideStruct = string;\n\nexport type ContainerTypeOverrideEnum = string;\n\nexport type ContainerTypeOverrideGeneric = string;\n\nexport type ContainerTypeOverrideToGeneric<T> = T;\n\nexport type ContainerTypeOverrideTuple = [string, number];\n\nexport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type InvalidToValidType = {\n\tcause: null,\n};\n\nexport type TupleStruct = string;\n\nexport type TupleStructWithRep = string;\n\nexport type GenericTupleStruct<T> = T;\n\nexport type BracedStruct = string;\n\nexport type Struct = {\n\ta: string,\n};\n\nexport type Struct2 = {\n\ta: string,\n};\n\nexport type Enum = \"A\" | \"B\";\n\nexport type Enum2 = \"A\" | \"B\" | { enum_field: null };\n\nexport type Enum3 = { a: string };\n\nexport type StructRenameAllUppercase = {\n\ta: number,\n\tb: number,\n};\n\nexport type RenameSerdeSpecialChar = {\n\tb: number,\n};\n\nexport type EnumRenameAllUppercase = \"HelloWorld\" | \"VariantB\" | \"TestingWords\";\n\nexport type Recursive = {\n\tdemo: Recursive,\n};\n\nexport type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nexport type RecursiveTransparent = RecursiveInline;\n\nexport type RecursiveInEnum = { demo: RecursiveInEnum };\n\nexport type NonOptional = string | null;\n\nexport type OptionalOnNamedField = string | null;\n\nexport type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type OptionalInEnum = string | null | { a: string | null } | { a?: string | null };\n\nexport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type Regular = { [key in string]: null };\n\nexport type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nexport type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n\nexport type MacroStruct = string;\n\nexport type MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type MacroEnum = string | { demo2: string };\n\n/**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\nexport type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nnumber | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n{ \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\na: number };\n\n/**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\nnumber | \n/**  Some single-line comment */\n{ \n/**  Some single-line comment */\na: number };\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nexport type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nexport type FlattenedInner = {\n\tc: Inner,\n};\n\nexport type BoxFlattened = {\n\tb: BoxedInner,\n};\n\nexport type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type First = {\n\ta: string,\n};\n\nexport type Second = {\n\ta: number,\n};\n\nexport type Third = {\n\ta: First,\n\tb: { [key in string]: string },\n\tc: First,\n};\n\nexport type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type TagOnStructWithInline = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nexport type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nexport type Eight = string | \"B\";\n\nexport type Ninth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type MyEnumTagged = { inner: First };\n\nexport type MyEnumExternal = { inner: First };\n\nexport type MyEnumAdjacent = { inner: First };\n\nexport type MyEnumUntagged = { inner: First };\n\nexport type EmptyStruct = Record<string, never>;\n\nexport type EmptyStructWithTag = Record<string, never>;\n\nexport type AdjacentlyTagged = \"A\" | { id: string; method: string } | string;\n\nexport type LoadProjectEvent = ({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number };\n\nexport type ExternallyTagged = \"A\" | { id: string; method: string } | string;\n\nexport type Issue221External = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type InternallyTaggedD = { [key in string]: string };\n\nexport type InternallyTaggedE = null;\n\nexport type InternallyTaggedF = InternallyTaggedFInner;\n\nexport type InternallyTaggedH = InternallyTaggedHInner;\n\nexport type InternallyTaggedL = \"A\" | \"B\";\n\nexport type InternallyTaggedM = \"A\" | \"B\";\n\nexport type StructWithAlias = {\n\tfield: string,\n};\n\nexport type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type StructWithAliasAndRename = {\n\tfield: string,\n};\n\nexport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAliasAndRename = \"Variant\" | \"Other\";\n\nexport type InternallyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type AdjacentlyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type EmptyEnum = never;\n\nexport type EmptyEnumTagged = never;\n\nexport type EmptyEnumTaggedWContent = never;\n\nexport type EmptyEnumUntagged = never;\n\nexport type SkipOnlyField = Record<string, never>;\n\nexport type SkipField = {\n\tb: number,\n};\n\nexport type SkipVariant = string;\n\nexport type SkipUnnamedFieldInVariant = never | [number];\n\nexport type SkipNamedFieldInVariant = Record<string, never> | { b: number };\n\nexport type TransparentWithSkip = null;\n\nexport type TransparentWithSkip2 = string;\n\nexport type TransparentWithSkip3 = string;\n\nexport type SkipVariant2 = string;\n\nexport type SkipVariant3 = { a: string };\n\nexport type SkipStructFields = {\n\ta: number,\n};\n\nexport type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type FlattenB = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenC = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenE = {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nexport type FlattenF = {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nexport type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nexport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nexport type Generic2<A, B, C> = A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][];\n\nexport type GenericNewType1<T> = T[][];\n\nexport type GenericTuple<T> = [T, T[], T[][]];\n\nexport type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n\tt: InlineFlattenGenericsG<string>,\n};\n\nexport type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nexport type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type TestCollectionRegister = never;\n\nexport type TestCollectionRegister = never;\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__export-many-serde.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nexport type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type Unit1 = null;\n\nexport type Unit2 = Record<string, never>;\n\nexport type Unit3 = [];\n\nexport type Unit4 = null;\n\nexport type Unit5 = \"A\";\n\nexport type Unit6 = { A: null };\n\nexport type Unit7 = { A: Record<string, never> };\n\nexport type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\nexport type TupleStruct1 = number;\n\nexport type TupleStruct3 = [number, boolean, string];\n\nexport type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nexport type RefStruct = TestEnum;\n\nexport type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type FlattenEnumStruct = {\n\touter: string,\n} & FlattenEnum;\n\nexport type OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type HasGenericAlias = { [key in number]: string };\n\nexport type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nexport type InlineEnumField = { A: {\n\ta: string,\n} };\n\nexport type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type Rename = \"OneWord\" | \"Two words\";\n\nexport type TransparentType = TransparentTypeInner;\n\nexport type TransparentType2 = null;\n\nexport type TransparentTypeWithOverride = string;\n\nexport type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nexport type FlattenOnNestedEnum = {\n\tid: string,\n} & NestedEnum;\n\nexport type MyEmptyInput = Record<string, never>;\n\nexport type ExtraBracketsInTupleVariant = { A: string };\n\nexport type ExtraBracketsInUnnamedStruct = string;\n\nexport type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nexport type KebabCase = {\n\t\"test-ing\": string,\n};\n\nexport type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nexport type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nexport type RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nexport type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nexport type RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nexport type RenamedVariantWithSkippedPayload = \"a-b\";\n\nexport type Type = never;\n\nexport type ActualType = {\n\ta: GenericType<string>,\n};\n\nexport type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type ContainerTypeOverrideStruct = string;\n\nexport type ContainerTypeOverrideEnum = string;\n\nexport type ContainerTypeOverrideGeneric = string;\n\nexport type ContainerTypeOverrideToGeneric<T> = T;\n\nexport type ContainerTypeOverrideTuple = [string, number];\n\nexport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type InvalidToValidType = {\n\tcause: null,\n};\n\nexport type TupleStruct = string;\n\nexport type TupleStructWithRep = string;\n\nexport type GenericTupleStruct<T> = T;\n\nexport type BracedStruct = string;\n\nexport type StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nexport type Struct2 = {\n\tb: string,\n};\n\nexport type Enum = { t: \"A\" } | { t: \"B\" };\n\nexport type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nexport type Enum3 = { t: \"A\"; b: string };\n\nexport type StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nexport type RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nexport type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nexport type Recursive = {\n\tdemo: Recursive,\n};\n\nexport type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nexport type RecursiveTransparent = RecursiveInline;\n\nexport type RecursiveInEnum = { A: {\n\tdemo: RecursiveInEnum,\n} };\n\nexport type NonOptional = string | null;\n\nexport type OptionalOnNamedField = string | null;\n\nexport type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nexport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type Regular = { [key in string]: null };\n\nexport type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nexport type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n\nexport type MacroStruct = string;\n\nexport type MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\n/**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\nexport type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n/**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nexport type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nexport type FlattenedInner = Inner;\n\nexport type BoxFlattened = BoxedInner;\n\nexport type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type First = {\n\ta: string,\n};\n\nexport type Second = {\n\ta: number,\n};\n\nexport type Third = {\n\tb: { [key in string]: string },\n\tc: First,\n} & First;\n\nexport type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nexport type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nexport type Eight = { A: string } | \"B\";\n\nexport type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First };\n\nexport type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type MyEnumTagged = { type: \"Variant\"; inner: First };\n\nexport type MyEnumExternal = { Variant: {\n\tinner: First,\n} };\n\nexport type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: First,\n} };\n\nexport type MyEnumUntagged = { inner: First };\n\nexport type EmptyStruct = Record<string, never>;\n\nexport type EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nexport type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nexport type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nexport type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nexport type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nexport type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nexport type InternallyTaggedE = { type: \"A\" };\n\nexport type InternallyTaggedF = { type: \"A\" };\n\nexport type InternallyTaggedH = { type: \"A\" };\n\nexport type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedM = { type: \"A\" };\n\nexport type StructWithAlias = {\n\tfield: string,\n};\n\nexport type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nexport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nexport type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nexport type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nexport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type EmptyEnum = never;\n\nexport type EmptyEnumTagged = never;\n\nexport type EmptyEnumTaggedWContent = never;\n\nexport type EmptyEnumUntagged = never;\n\nexport type SkipOnlyField = Record<string, never>;\n\nexport type SkipField = {\n\tb: number,\n};\n\nexport type SkipVariant = { A: string };\n\nexport type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nexport type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nexport type TransparentWithSkip = null;\n\nexport type TransparentWithSkip2 = string;\n\nexport type TransparentWithSkip3 = string;\n\nexport type SkipVariant2 = { tag: \"A\"; data: string };\n\nexport type SkipVariant3 = { A: {\n\ta: string,\n} };\n\nexport type SkipStructFields = {\n\ta: number,\n};\n\nexport type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type FlattenB = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenC = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nexport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nexport type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nexport type GenericNewType1<T> = T[][];\n\nexport type GenericTuple<T> = [T, T[], T[][]];\n\nexport type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & InlineFlattenGenericsG<string>;\n\nexport type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nexport type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type TestCollectionRegister = never;\n\nexport type TestCollectionRegister = never;\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__export-many-serde_phases.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type Issue374 = Issue374_Serialize | Issue374_Deserialize;\n\nexport type Optional = Optional_Serialize | Optional_Deserialize;\n\nexport type StructPhaseSpecificRename = StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize;\n\nexport type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type Unit1 = null;\n\nexport type Unit2 = Record<string, never>;\n\nexport type Unit3 = [];\n\nexport type Unit4 = null;\n\nexport type Unit5 = \"A\";\n\nexport type Unit6 = { A: null };\n\nexport type Unit7 = { A: Record<string, never> };\n\nexport type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\nexport type TupleStruct1 = number;\n\nexport type TupleStruct3 = [number, boolean, string];\n\nexport type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nexport type RefStruct = TestEnum;\n\nexport type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type FlattenEnumStruct = {\n\touter: string,\n} & FlattenEnum;\n\nexport type OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type HasGenericAlias = { [key in number]: string };\n\nexport type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nexport type InlineEnumField = { A: {\n\ta: string,\n} };\n\nexport type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type Rename = \"OneWord\" | \"Two words\";\n\nexport type TransparentType = TransparentTypeInner;\n\nexport type TransparentType2 = null;\n\nexport type TransparentTypeWithOverride = string;\n\nexport type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nexport type FlattenOnNestedEnum = {\n\tid: string,\n} & NestedEnum;\n\nexport type MyEmptyInput = Record<string, never>;\n\nexport type ExtraBracketsInTupleVariant = { A: string };\n\nexport type ExtraBracketsInUnnamedStruct = string;\n\nexport type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nexport type KebabCase = {\n\t\"test-ing\": string,\n};\n\nexport type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nexport type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nexport type RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nexport type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nexport type RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nexport type RenamedVariantWithSkippedPayload = \"a-b\";\n\nexport type Type = never;\n\nexport type ActualType = {\n\ta: GenericType<string>,\n};\n\nexport type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type ContainerTypeOverrideStruct = string;\n\nexport type ContainerTypeOverrideEnum = string;\n\nexport type ContainerTypeOverrideGeneric = string;\n\nexport type ContainerTypeOverrideToGeneric<T> = T;\n\nexport type ContainerTypeOverrideTuple = [string, number];\n\nexport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type InvalidToValidType = {\n\tcause: null,\n};\n\nexport type TupleStruct = string;\n\nexport type TupleStructWithRep = string;\n\nexport type GenericTupleStruct<T> = T;\n\nexport type BracedStruct = string;\n\nexport type StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nexport type Struct2 = {\n\tb: string,\n};\n\nexport type Enum = { t: \"A\" } | { t: \"B\" };\n\nexport type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nexport type Enum3 = { t: \"A\"; b: string };\n\nexport type StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nexport type RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nexport type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nexport type Recursive = {\n\tdemo: Recursive,\n};\n\nexport type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nexport type RecursiveTransparent = RecursiveInline;\n\nexport type RecursiveInEnum = { A: {\n\tdemo: RecursiveInEnum,\n} };\n\nexport type NonOptional = string | null;\n\nexport type OptionalOnNamedField = string | null;\n\nexport type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nexport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type Regular = { [key in string]: null };\n\nexport type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nexport type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n\nexport type MacroStruct = string;\n\nexport type MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\n/**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\nexport type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n/**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nexport type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nexport type FlattenedInner = Inner;\n\nexport type BoxFlattened = BoxedInner;\n\nexport type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type First = {\n\ta: string,\n};\n\nexport type Second = {\n\ta: number,\n};\n\nexport type Third = {\n\tb: { [key in string]: string },\n\tc: First,\n} & First;\n\nexport type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nexport type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nexport type Eight = { A: string } | \"B\";\n\nexport type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First };\n\nexport type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type MyEnumTagged = { type: \"Variant\"; inner: First };\n\nexport type MyEnumExternal = { Variant: {\n\tinner: First,\n} };\n\nexport type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: First,\n} };\n\nexport type MyEnumUntagged = { inner: First };\n\nexport type EmptyStruct = Record<string, never>;\n\nexport type EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nexport type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nexport type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nexport type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nexport type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nexport type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nexport type InternallyTaggedE = { type: \"A\" };\n\nexport type InternallyTaggedF = { type: \"A\" };\n\nexport type InternallyTaggedH = { type: \"A\" };\n\nexport type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedM = { type: \"A\" };\n\nexport type StructWithAlias = {\n\tfield: string,\n};\n\nexport type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nexport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nexport type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nexport type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nexport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type EmptyEnum = never;\n\nexport type EmptyEnumTagged = never;\n\nexport type EmptyEnumTaggedWContent = never;\n\nexport type EmptyEnumUntagged = never;\n\nexport type SkipOnlyField = Record<string, never>;\n\nexport type SkipField = {\n\tb: number,\n};\n\nexport type SkipVariant = { A: string };\n\nexport type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nexport type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nexport type TransparentWithSkip = null;\n\nexport type TransparentWithSkip2 = string;\n\nexport type TransparentWithSkip3 = string;\n\nexport type SkipVariant2 = { tag: \"A\"; data: string };\n\nexport type SkipVariant3 = { A: {\n\ta: string,\n} };\n\nexport type SkipStructFields = {\n\ta: number,\n};\n\nexport type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type FlattenB = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenC = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nexport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nexport type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nexport type GenericNewType1<T> = T[][];\n\nexport type GenericTuple<T> = [T, T[], T[][]];\n\nexport type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & InlineFlattenGenericsG<string>;\n\nexport type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nexport type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nexport type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type TestCollectionRegister = never;\n\nexport type TestCollectionRegister = never;\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__export-raw.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nRange<i32>: export type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nRangeInclusive<i32>: export type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nString: \nPathBuf: \nIpAddr: \nIpv4Addr: \nIpv6Addr: \nSocketAddr: \nSocketAddrV4: \nSocketAddrV6: \nCow<'static, str>: \nCow<'static, i32>: \nVec<i32>: \nVec<MyEnum>: \nResult<String, i32>: export type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nVec<Option<Cow<'static, i32>>>: \nPhantomData<()>: \nPhantomData<String>: \nInfallible: \nUnit1: export type Unit1 = null;\n\nUnit2: export type Unit2 = Record<string, never>;\n\nUnit3: export type Unit3 = [];\n\nUnit4: export type Unit4 = null;\n\nUnit5: export type Unit5 = \"A\";\n\nUnit6: export type Unit6 = [];\n\nUnit7: export type Unit7 = Record<string, never>;\n\nSimpleStruct: export type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\nTupleStruct1: export type TupleStruct1 = number;\n\nTupleStruct3: export type TupleStruct3 = [number, boolean, string];\n\nTestEnum: export type TestEnum = \"Unit\" | number | [number, number] | { a: number };\n\nRefStruct: export type RefStruct = TestEnum;\n\nInlinerStruct: export type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nGenericStruct<i32>: export type GenericStruct<T> = {\n\targ: T,\n};\n\nGenericStruct<String>: export type GenericStruct<T> = {\n\targ: T,\n};\n\nFlattenEnumStruct: export type FlattenEnumStruct = {\n\touter: string,\n\tinner: FlattenEnum,\n};\n\nOverridenStruct: export type OverridenStruct = {\n\toverriden_field: string,\n};\n\nHasGenericAlias: export type HasGenericAlias = { [key in number]: string };\n\nEnumMacroAttributes: export type EnumMacroAttributes = string | number | { a: string; b: number };\n\nInlineEnumField: export type InlineEnumField = {\n\ta: string,\n};\n\nInlineOptionalType: export type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nRename: export type Rename = \"OneWord\" | \"TwoWords\";\n\nTransparentType: export type TransparentType = TransparentTypeInner;\n\nTransparentType2: export type TransparentType2 = null;\n\nTransparentTypeWithOverride: export type TransparentTypeWithOverride = string;\n\nHashMap<BasicEnum, ()>: \nHashMap<BasicEnum, i32>: \nVec<PlaceholderInnerField>: \nEnumReferenceRecordKey: export type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nFlattenOnNestedEnum: export type FlattenOnNestedEnum = {\n\tid: string,\n\tresult: NestedEnum,\n};\n\nMyEmptyInput: export type MyEmptyInput = Record<string, never>;\n\n(String): \nExtraBracketsInTupleVariant: export type ExtraBracketsInTupleVariant = string;\n\nExtraBracketsInUnnamedStruct: export type ExtraBracketsInUnnamedStruct = string;\n\nVec<MyEnum>: \nInlineTuple: export type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nInlineTuple2: export type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nBox<str>: \nBox<String>: \nSkippedFieldWithinVariant: export type SkippedFieldWithinVariant = never | string;\n\nKebabCase: export type KebabCase = {\n\ttest_ing: string,\n};\n\nIssue281<'_>: export type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nLifetimeGenericStruct<'_, i32>: export type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nLifetimeGenericEnum<'_, i32>: export type LifetimeGenericEnum<T> = T;\n\nRenameWithWeirdCharsField: export type RenameWithWeirdCharsField = {\n\todata_context: string,\n};\n\nRenameWithWeirdCharsVariant: export type RenameWithWeirdCharsVariant = string;\n\nRenamedFieldKeys: export type RenamedFieldKeys = {\n\tempty: string,\n\tquote: string,\n\tbackslash: string,\n\tnewline: string,\n\tline_separator: string,\n\tparagraph_separator: string,\n};\n\nRenamedVariantWithSkippedPayload: export type RenamedVariantWithSkippedPayload = never;\n\ntype_type::Type: export type Type = never;\n\nActualType: export type ActualType = {\n\ta: GenericType<string>,\n};\n\nSpectaTypeOverride: export type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nContainerTypeOverrideStruct: export type ContainerTypeOverrideStruct = string;\n\nContainerTypeOverrideEnum: export type ContainerTypeOverrideEnum = string;\n\nContainerTypeOverrideGeneric<Box<dyn Any>>: export type ContainerTypeOverrideGeneric = string;\n\nContainerTypeOverrideToGeneric<i32>: export type ContainerTypeOverrideToGeneric<T> = T;\n\nContainerTypeOverrideTuple: export type ContainerTypeOverrideTuple = [string, number];\n\nContainerTypeOverrideTupleGeneric<i32>: export type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nInvalidToValidType: export type InvalidToValidType = {\n\tcause: null,\n};\n\nTupleStruct: export type TupleStruct = string;\n\nTupleStructWithRep: export type TupleStructWithRep = string;\n\nGenericTupleStruct<String>: export type GenericTupleStruct<T> = T;\n\nBracedStruct: export type BracedStruct = string;\n\nStruct: export type Struct = {\n\ta: string,\n};\n\nStruct2: export type Struct2 = {\n\ta: string,\n};\n\nEnum: export type Enum = \"A\" | \"B\";\n\nEnum2: export type Enum2 = \"A\" | \"B\" | { enum_field: null };\n\nEnum3: export type Enum3 = { a: string };\n\nStructRenameAllUppercase: export type StructRenameAllUppercase = {\n\ta: number,\n\tb: number,\n};\n\nRenameSerdeSpecialChar: export type RenameSerdeSpecialChar = {\n\tb: number,\n};\n\nEnumRenameAllUppercase: export type EnumRenameAllUppercase = \"HelloWorld\" | \"VariantB\" | \"TestingWords\";\n\nRecursive: export type Recursive = {\n\tdemo: Recursive,\n};\n\nRecursiveMapValue: export type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nRecursiveTransparent: export type RecursiveTransparent = RecursiveInline;\n\nRecursiveInEnum: export type RecursiveInEnum = { demo: RecursiveInEnum };\n\nNonOptional: export type NonOptional = string | null;\n\nOptionalOnNamedField: export type OptionalOnNamedField = string | null;\n\nOptionalOnTransparentNamedField: export type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nOptionalInEnum: export type OptionalInEnum = string | null | { a: string | null } | { a?: string | null };\n\nUntaggedVariants: export type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nUntaggedVariantsWithoutValue: export type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nUntaggedVariantsWithDuplicateBranches: export type UntaggedVariantsWithDuplicateBranches = null | number;\n\nHashMap<String, ()>: \nRegular: export type Regular = { [key in string]: null };\n\nHashMap<Infallible, ()>: \nHashMap<TransparentStruct, ()>: \nHashMap<UnitVariants, ()>: \nHashMap<UntaggedVariantsKey, ()>: \nValidMaybeValidKey: export type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nValidMaybeValidKeyNested: export type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n\nMacroStruct: export type MacroStruct = string;\n\nMacroStruct2: export type MacroStruct2 = {\n\tdemo: string,\n};\n\nMacroEnum: export type MacroEnum = string | { demo2: string };\n\nDeprecatedType: /**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\nDeprecatedTypeWithMsg: /**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\nDeprecatedTypeWithMsg2: /**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nDeprecatedFields: export type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nDeprecatedTupleVariant: export type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\nDeprecatedEnumVariants: export type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nCommentedStruct: /**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nCommentedEnum: /**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nnumber | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n{ \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\na: number };\n\nSingleLineComment: /**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\nnumber | \n/**  Some single-line comment */\n{ \n/**  Some single-line comment */\na: number };\n\nNonGeneric: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nHalfGenericA<u8>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nHalfGenericB<bool>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nFullGeneric<u8, bool>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nAnother<bool>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nMapA<u32>: \nMapB<u32>: \nMapC<u32>: \nAGenericStruct<u32>: export type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nA: export type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nDoubleFlattened: export type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nFlattenedInner: export type FlattenedInner = {\n\tc: Inner,\n};\n\nBoxFlattened: export type BoxFlattened = {\n\tb: BoxedInner,\n};\n\nBoxInline: export type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nFirst: export type First = {\n\ta: string,\n};\n\nSecond: export type Second = {\n\ta: number,\n};\n\nThird: export type Third = {\n\ta: First,\n\tb: { [key in string]: string },\n\tc: First,\n};\n\nFourth: export type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nTagOnStructWithInline: export type TagOnStructWithInline = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nSixth: export type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nSeventh: export type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nEight: export type Eight = string | \"B\";\n\nNinth: export type Ninth = string | \"B\" | {\n\ta: string,\n} | First;\n\nTenth: export type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nMyEnumTagged: export type MyEnumTagged = { inner: First };\n\nMyEnumExternal: export type MyEnumExternal = { inner: First };\n\nMyEnumAdjacent: export type MyEnumAdjacent = { inner: First };\n\nMyEnumUntagged: export type MyEnumUntagged = { inner: First };\n\nEmptyStruct: export type EmptyStruct = Record<string, never>;\n\nEmptyStructWithTag: export type EmptyStructWithTag = Record<string, never>;\n\nAdjacentlyTagged: export type AdjacentlyTagged = \"A\" | { id: string; method: string } | string;\n\nLoadProjectEvent: export type LoadProjectEvent = ({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number };\n\nExternallyTagged: export type ExternallyTagged = \"A\" | { id: string; method: string } | string;\n\nIssue221External: export type Issue221External = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nInternallyTaggedD: export type InternallyTaggedD = { [key in string]: string };\n\nInternallyTaggedE: export type InternallyTaggedE = null;\n\nInternallyTaggedF: export type InternallyTaggedF = InternallyTaggedFInner;\n\nInternallyTaggedH: export type InternallyTaggedH = InternallyTaggedHInner;\n\nInternallyTaggedL: export type InternallyTaggedL = \"A\" | \"B\";\n\nInternallyTaggedM: export type InternallyTaggedM = \"A\" | \"B\";\n\nStructWithAlias: export type StructWithAlias = {\n\tfield: string,\n};\n\nStructWithMultipleAliases: export type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nStructWithAliasAndRename: export type StructWithAliasAndRename = {\n\tfield: string,\n};\n\nEnumWithVariantAlias: export type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nEnumWithMultipleVariantAliases: export type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nEnumWithVariantAliasAndRename: export type EnumWithVariantAliasAndRename = \"Variant\" | \"Other\";\n\nInternallyTaggedWithAlias: export type InternallyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nAdjacentlyTaggedWithAlias: export type AdjacentlyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nUntaggedWithAlias: export type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nIssue221UntaggedSafe: export type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nIssue221UntaggedMixed: export type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nEmptyEnum: export type EmptyEnum = never;\n\nEmptyEnumTagged: export type EmptyEnumTagged = never;\n\nEmptyEnumTaggedWContent: export type EmptyEnumTaggedWContent = never;\n\nEmptyEnumUntagged: export type EmptyEnumUntagged = never;\n\nSkipOnlyField: export type SkipOnlyField = Record<string, never>;\n\nSkipField: export type SkipField = {\n\tb: number,\n};\n\nSkipVariant: export type SkipVariant = string;\n\nSkipUnnamedFieldInVariant: export type SkipUnnamedFieldInVariant = never | [number];\n\nSkipNamedFieldInVariant: export type SkipNamedFieldInVariant = Record<string, never> | { b: number };\n\nTransparentWithSkip: export type TransparentWithSkip = null;\n\nTransparentWithSkip2: export type TransparentWithSkip2 = string;\n\nTransparentWithSkip3: export type TransparentWithSkip3 = string;\n\nSkipVariant2: export type SkipVariant2 = string;\n\nSkipVariant3: export type SkipVariant3 = { a: string };\n\nSkipStructFields: export type SkipStructFields = {\n\ta: number,\n};\n\nSpectaSkipNonTypeField: export type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nFlattenA: export type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nFlattenB: export type FlattenB = {\n\ta: FlattenA,\n\tc: number,\n};\n\nFlattenC: export type FlattenC = {\n\ta: FlattenA,\n\tc: number,\n};\n\nFlattenD: export type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nFlattenE: export type FlattenE = {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nFlattenF: export type FlattenF = {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nFlattenG: export type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nTupleNested: export type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nGeneric1<()>: export type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nGenericAutoBound<()>: export type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nGenericAutoBound2<()>: export type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nContainer1: export type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nGeneric2<(), String, i32>: export type Generic2<A, B, C> = A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][];\n\nGenericNewType1<()>: export type GenericNewType1<T> = T[][];\n\nGenericTuple<()>: export type GenericTuple<T> = [T, T[], T[][]];\n\nGenericStruct2<()>: export type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nInlineGenericNewtype<String>: \nInlineGenericNested<String>: \nInlineFlattenGenericsG<()>: export type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nInlineFlattenGenerics: export type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n\tt: InlineFlattenGenericsG<string>,\n};\n\nGenericDefault: export type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nChainedGenericDefault: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nChainedGenericDefault<String, String>: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nChainedGenericDefault<i32>: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nChainedGenericDefault<String, i32>: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nGenericDefaultSkipped: export type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nGenericDefaultSkippedNonType: export type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nGenericParameterOrderPreserved: export type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nConstGenericInNonConstContainer: export type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nConstGenericInConstContainer: export type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nNamedConstGenericContainer: export type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nInlineConstGenericContainer: export type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nInlineRecursiveConstGenericContainer: export type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nTestCollectionRegister: export type TestCollectionRegister = never;\n\nTestCollectionRegister: export type TestCollectionRegister = never;\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__export-serde.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nRange<i32>: export type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nRangeInclusive<i32>: export type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nString: \nPathBuf: \nIpAddr: \nIpv4Addr: \nIpv6Addr: \nSocketAddr: \nSocketAddrV4: \nSocketAddrV6: \nCow<'static, str>: \nCow<'static, i32>: \nVec<i32>: \nVec<MyEnum>: \nResult<String, i32>: export type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nVec<Option<Cow<'static, i32>>>: \nPhantomData<()>: \nPhantomData<String>: \nInfallible: \nUnit1: export type Unit1 = null;\n\nUnit2: export type Unit2 = Record<string, never>;\n\nUnit3: export type Unit3 = [];\n\nUnit4: export type Unit4 = null;\n\nUnit5: export type Unit5 = \"A\";\n\nUnit6: export type Unit6 = { A: null };\n\nUnit7: export type Unit7 = { A: Record<string, never> };\n\nSimpleStruct: export type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\nTupleStruct1: export type TupleStruct1 = number;\n\nTupleStruct3: export type TupleStruct3 = [number, boolean, string];\n\nTestEnum: export type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nRefStruct: export type RefStruct = TestEnum;\n\nInlinerStruct: export type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nGenericStruct<i32>: export type GenericStruct<T> = {\n\targ: T,\n};\n\nGenericStruct<String>: export type GenericStruct<T> = {\n\targ: T,\n};\n\nFlattenEnumStruct: export type FlattenEnumStruct = {\n\touter: string,\n} & FlattenEnum;\n\nOverridenStruct: export type OverridenStruct = {\n\toverriden_field: string,\n};\n\nHasGenericAlias: export type HasGenericAlias = { [key in number]: string };\n\nEnumMacroAttributes: export type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nInlineEnumField: export type InlineEnumField = { A: {\n\ta: string,\n} };\n\nInlineOptionalType: export type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nRename: export type Rename = \"OneWord\" | \"Two words\";\n\nTransparentType: export type TransparentType = TransparentTypeInner;\n\nTransparentType2: export type TransparentType2 = null;\n\nTransparentTypeWithOverride: export type TransparentTypeWithOverride = string;\n\nHashMap<BasicEnum, ()>: \nHashMap<BasicEnum, i32>: \nVec<PlaceholderInnerField>: \nEnumReferenceRecordKey: export type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nFlattenOnNestedEnum: export type FlattenOnNestedEnum = {\n\tid: string,\n} & NestedEnum;\n\nMyEmptyInput: export type MyEmptyInput = Record<string, never>;\n\n(String): \nExtraBracketsInTupleVariant: export type ExtraBracketsInTupleVariant = { A: string };\n\nExtraBracketsInUnnamedStruct: export type ExtraBracketsInUnnamedStruct = string;\n\nVec<MyEnum>: \nInlineTuple: export type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nInlineTuple2: export type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nBox<str>: \nBox<String>: \nSkippedFieldWithinVariant: export type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nKebabCase: export type KebabCase = {\n\t\"test-ing\": string,\n};\n\nIssue281<'_>: export type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nLifetimeGenericStruct<'_, i32>: export type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nLifetimeGenericEnum<'_, i32>: export type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nRenameWithWeirdCharsField: export type RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nRenameWithWeirdCharsVariant: export type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nRenamedFieldKeys: export type RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nRenamedVariantWithSkippedPayload: export type RenamedVariantWithSkippedPayload = \"a-b\";\n\ntype_type::Type: export type Type = never;\n\nActualType: export type ActualType = {\n\ta: GenericType<string>,\n};\n\nSpectaTypeOverride: export type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nContainerTypeOverrideStruct: export type ContainerTypeOverrideStruct = string;\n\nContainerTypeOverrideEnum: export type ContainerTypeOverrideEnum = string;\n\nContainerTypeOverrideGeneric<Box<dyn Any>>: export type ContainerTypeOverrideGeneric = string;\n\nContainerTypeOverrideToGeneric<i32>: export type ContainerTypeOverrideToGeneric<T> = T;\n\nContainerTypeOverrideTuple: export type ContainerTypeOverrideTuple = [string, number];\n\nContainerTypeOverrideTupleGeneric<i32>: export type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nInvalidToValidType: export type InvalidToValidType = {\n\tcause: null,\n};\n\nTupleStruct: export type TupleStruct = string;\n\nTupleStructWithRep: export type TupleStructWithRep = string;\n\nGenericTupleStruct<String>: export type GenericTupleStruct<T> = T;\n\nBracedStruct: export type BracedStruct = string;\n\nStruct: export type StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nStruct2: export type Struct2 = {\n\tb: string,\n};\n\nEnum: export type Enum = { t: \"A\" } | { t: \"B\" };\n\nEnum2: export type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nEnum3: export type Enum3 = { t: \"A\"; b: string };\n\nStructRenameAllUppercase: export type StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nRenameSerdeSpecialChar: export type RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nEnumRenameAllUppercase: export type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nRecursive: export type Recursive = {\n\tdemo: Recursive,\n};\n\nRecursiveMapValue: export type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nRecursiveTransparent: export type RecursiveTransparent = RecursiveInline;\n\nRecursiveInEnum: export type RecursiveInEnum = { A: {\n\tdemo: RecursiveInEnum,\n} };\n\nNonOptional: export type NonOptional = string | null;\n\nOptionalOnNamedField: export type OptionalOnNamedField = string | null;\n\nOptionalOnTransparentNamedField: export type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nOptionalInEnum: export type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nUntaggedVariants: export type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nUntaggedVariantsWithoutValue: export type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nUntaggedVariantsWithDuplicateBranches: export type UntaggedVariantsWithDuplicateBranches = null | number;\n\nHashMap<String, ()>: \nRegular: export type Regular = { [key in string]: null };\n\nHashMap<Infallible, ()>: \nHashMap<TransparentStruct, ()>: \nHashMap<UnitVariants, ()>: \nHashMap<UntaggedVariantsKey, ()>: \nValidMaybeValidKey: export type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nValidMaybeValidKeyNested: export type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n\nMacroStruct: export type MacroStruct = string;\n\nMacroStruct2: export type MacroStruct2 = {\n\tdemo: string,\n};\n\nMacroEnum: export type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\nDeprecatedType: /**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\nDeprecatedTypeWithMsg: /**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\nDeprecatedTypeWithMsg2: /**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nDeprecatedFields: export type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nDeprecatedTupleVariant: export type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\nDeprecatedEnumVariants: export type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nCommentedStruct: /**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nCommentedEnum: /**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\nSingleLineComment: /**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nNonGeneric: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nHalfGenericA<u8>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nHalfGenericB<bool>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nFullGeneric<u8, bool>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nAnother<bool>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nMapA<u32>: \nMapB<u32>: \nMapC<u32>: \nAGenericStruct<u32>: export type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nA: export type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nDoubleFlattened: export type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nFlattenedInner: export type FlattenedInner = Inner;\n\nBoxFlattened: export type BoxFlattened = BoxedInner;\n\nBoxInline: export type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nFirst: export type First = {\n\ta: string,\n};\n\nSecond: export type Second = {\n\ta: number,\n};\n\nThird: export type Third = {\n\tb: { [key in string]: string },\n\tc: First,\n} & First;\n\nFourth: export type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nTagOnStructWithInline: export type TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nSixth: export type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nSeventh: export type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nEight: export type Eight = { A: string } | \"B\";\n\nNinth: export type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First };\n\nTenth: export type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nMyEnumTagged: export type MyEnumTagged = { type: \"Variant\"; inner: First };\n\nMyEnumExternal: export type MyEnumExternal = { Variant: {\n\tinner: First,\n} };\n\nMyEnumAdjacent: export type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: First,\n} };\n\nMyEnumUntagged: export type MyEnumUntagged = { inner: First };\n\nEmptyStruct: export type EmptyStruct = Record<string, never>;\n\nEmptyStructWithTag: export type EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nAdjacentlyTagged: export type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nLoadProjectEvent: export type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nExternallyTagged: export type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nIssue221External: export type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nInternallyTaggedD: export type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nInternallyTaggedE: export type InternallyTaggedE = { type: \"A\" };\n\nInternallyTaggedF: export type InternallyTaggedF = { type: \"A\" };\n\nInternallyTaggedH: export type InternallyTaggedH = { type: \"A\" };\n\nInternallyTaggedL: export type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nInternallyTaggedM: export type InternallyTaggedM = { type: \"A\" };\n\nStructWithAlias: export type StructWithAlias = {\n\tfield: string,\n};\n\nStructWithMultipleAliases: export type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nStructWithAliasAndRename: export type StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nEnumWithVariantAlias: export type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nEnumWithMultipleVariantAliases: export type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nEnumWithVariantAliasAndRename: export type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nInternallyTaggedWithAlias: export type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nAdjacentlyTaggedWithAlias: export type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nUntaggedWithAlias: export type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nIssue221UntaggedSafe: export type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nIssue221UntaggedMixed: export type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nEmptyEnum: export type EmptyEnum = never;\n\nEmptyEnumTagged: export type EmptyEnumTagged = never;\n\nEmptyEnumTaggedWContent: export type EmptyEnumTaggedWContent = never;\n\nEmptyEnumUntagged: export type EmptyEnumUntagged = never;\n\nSkipOnlyField: export type SkipOnlyField = Record<string, never>;\n\nSkipField: export type SkipField = {\n\tb: number,\n};\n\nSkipVariant: export type SkipVariant = { A: string };\n\nSkipUnnamedFieldInVariant: export type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nSkipNamedFieldInVariant: export type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nTransparentWithSkip: export type TransparentWithSkip = null;\n\nTransparentWithSkip2: export type TransparentWithSkip2 = string;\n\nTransparentWithSkip3: export type TransparentWithSkip3 = string;\n\nSkipVariant2: export type SkipVariant2 = { tag: \"A\"; data: string };\n\nSkipVariant3: export type SkipVariant3 = { A: {\n\ta: string,\n} };\n\nSkipStructFields: export type SkipStructFields = {\n\ta: number,\n};\n\nSpectaSkipNonTypeField: export type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nFlattenA: export type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nFlattenB: export type FlattenB = {\n\tc: number,\n} & FlattenA;\n\nFlattenC: export type FlattenC = {\n\tc: number,\n} & FlattenA;\n\nFlattenD: export type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nFlattenE: export type FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nFlattenF: export type FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nFlattenG: export type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nTupleNested: export type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nGeneric1<()>: export type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nGenericAutoBound<()>: export type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nGenericAutoBound2<()>: export type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nContainer1: export type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nGeneric2<(), String, i32>: export type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nGenericNewType1<()>: export type GenericNewType1<T> = T[][];\n\nGenericTuple<()>: export type GenericTuple<T> = [T, T[], T[][]];\n\nGenericStruct2<()>: export type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nInlineGenericNewtype<String>: \nInlineGenericNested<String>: \nInlineFlattenGenericsG<()>: export type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nInlineFlattenGenerics: export type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & InlineFlattenGenericsG<string>;\n\nGenericDefault: export type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nChainedGenericDefault: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nChainedGenericDefault<String, String>: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nChainedGenericDefault<i32>: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nChainedGenericDefault<String, i32>: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nGenericDefaultSkipped: export type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nGenericDefaultSkippedNonType: export type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nGenericParameterOrderPreserved: export type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nConstGenericInNonConstContainer: export type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nConstGenericInConstContainer: export type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nNamedConstGenericContainer: export type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nInlineConstGenericContainer: export type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nInlineRecursiveConstGenericContainer: export type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nTestCollectionRegister: export type TestCollectionRegister = never;\n\nTestCollectionRegister: export type TestCollectionRegister = never;\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__export-serde_phases.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nIssue374: /**  https://github.com/specta-rs/specta/issues/374 */\nexport type Issue374 = Issue374_Serialize | Issue374_Deserialize;\n\nOptional: export type Optional = Optional_Serialize | Optional_Deserialize;\n\nStructPhaseSpecificRename: export type StructPhaseSpecificRename = StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize;\n\nRange<i32>: export type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nRangeInclusive<i32>: export type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nString: \nPathBuf: \nIpAddr: \nIpv4Addr: \nIpv6Addr: \nSocketAddr: \nSocketAddrV4: \nSocketAddrV6: \nCow<'static, str>: \nCow<'static, i32>: \nVec<i32>: \nVec<MyEnum>: \nResult<String, i32>: export type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nVec<Option<Cow<'static, i32>>>: \nPhantomData<()>: \nPhantomData<String>: \nInfallible: \nUnit1: export type Unit1 = null;\n\nUnit2: export type Unit2 = Record<string, never>;\n\nUnit3: export type Unit3 = [];\n\nUnit4: export type Unit4 = null;\n\nUnit5: export type Unit5 = \"A\";\n\nUnit6: export type Unit6 = { A: null };\n\nUnit7: export type Unit7 = { A: Record<string, never> };\n\nSimpleStruct: export type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\nTupleStruct1: export type TupleStruct1 = number;\n\nTupleStruct3: export type TupleStruct3 = [number, boolean, string];\n\nTestEnum: export type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nRefStruct: export type RefStruct = TestEnum;\n\nInlinerStruct: export type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nGenericStruct<i32>: export type GenericStruct<T> = {\n\targ: T,\n};\n\nGenericStruct<String>: export type GenericStruct<T> = {\n\targ: T,\n};\n\nFlattenEnumStruct: export type FlattenEnumStruct = {\n\touter: string,\n} & FlattenEnum;\n\nOverridenStruct: export type OverridenStruct = {\n\toverriden_field: string,\n};\n\nHasGenericAlias: export type HasGenericAlias = { [key in number]: string };\n\nEnumMacroAttributes: export type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nInlineEnumField: export type InlineEnumField = { A: {\n\ta: string,\n} };\n\nInlineOptionalType: export type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nRename: export type Rename = \"OneWord\" | \"Two words\";\n\nTransparentType: export type TransparentType = TransparentTypeInner;\n\nTransparentType2: export type TransparentType2 = null;\n\nTransparentTypeWithOverride: export type TransparentTypeWithOverride = string;\n\nHashMap<BasicEnum, ()>: \nHashMap<BasicEnum, i32>: \nVec<PlaceholderInnerField>: \nEnumReferenceRecordKey: export type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nFlattenOnNestedEnum: export type FlattenOnNestedEnum = {\n\tid: string,\n} & NestedEnum;\n\nMyEmptyInput: export type MyEmptyInput = Record<string, never>;\n\n(String): \nExtraBracketsInTupleVariant: export type ExtraBracketsInTupleVariant = { A: string };\n\nExtraBracketsInUnnamedStruct: export type ExtraBracketsInUnnamedStruct = string;\n\nVec<MyEnum>: \nInlineTuple: export type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nInlineTuple2: export type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nBox<str>: \nBox<String>: \nSkippedFieldWithinVariant: export type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nKebabCase: export type KebabCase = {\n\t\"test-ing\": string,\n};\n\nIssue281<'_>: export type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nLifetimeGenericStruct<'_, i32>: export type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nLifetimeGenericEnum<'_, i32>: export type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nRenameWithWeirdCharsField: export type RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nRenameWithWeirdCharsVariant: export type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nRenamedFieldKeys: export type RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nRenamedVariantWithSkippedPayload: export type RenamedVariantWithSkippedPayload = \"a-b\";\n\ntype_type::Type: export type Type = never;\n\nActualType: export type ActualType = {\n\ta: GenericType<string>,\n};\n\nSpectaTypeOverride: export type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nContainerTypeOverrideStruct: export type ContainerTypeOverrideStruct = string;\n\nContainerTypeOverrideEnum: export type ContainerTypeOverrideEnum = string;\n\nContainerTypeOverrideGeneric<Box<dyn Any>>: export type ContainerTypeOverrideGeneric = string;\n\nContainerTypeOverrideToGeneric<i32>: export type ContainerTypeOverrideToGeneric<T> = T;\n\nContainerTypeOverrideTuple: export type ContainerTypeOverrideTuple = [string, number];\n\nContainerTypeOverrideTupleGeneric<i32>: export type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nInvalidToValidType: export type InvalidToValidType = {\n\tcause: null,\n};\n\nTupleStruct: export type TupleStruct = string;\n\nTupleStructWithRep: export type TupleStructWithRep = string;\n\nGenericTupleStruct<String>: export type GenericTupleStruct<T> = T;\n\nBracedStruct: export type BracedStruct = string;\n\nStruct: export type StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nStruct2: export type Struct2 = {\n\tb: string,\n};\n\nEnum: export type Enum = { t: \"A\" } | { t: \"B\" };\n\nEnum2: export type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nEnum3: export type Enum3 = { t: \"A\"; b: string };\n\nStructRenameAllUppercase: export type StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nRenameSerdeSpecialChar: export type RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nEnumRenameAllUppercase: export type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nRecursive: export type Recursive = {\n\tdemo: Recursive,\n};\n\nRecursiveMapValue: export type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nRecursiveTransparent: export type RecursiveTransparent = RecursiveInline;\n\nRecursiveInEnum: export type RecursiveInEnum = { A: {\n\tdemo: RecursiveInEnum,\n} };\n\nNonOptional: export type NonOptional = string | null;\n\nOptionalOnNamedField: export type OptionalOnNamedField = string | null;\n\nOptionalOnTransparentNamedField: export type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nOptionalInEnum: export type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nUntaggedVariants: export type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nUntaggedVariantsWithoutValue: export type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nUntaggedVariantsWithDuplicateBranches: export type UntaggedVariantsWithDuplicateBranches = null | number;\n\nHashMap<String, ()>: \nRegular: export type Regular = { [key in string]: null };\n\nHashMap<Infallible, ()>: \nHashMap<TransparentStruct, ()>: \nHashMap<UnitVariants, ()>: \nHashMap<UntaggedVariantsKey, ()>: \nValidMaybeValidKey: export type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nValidMaybeValidKeyNested: export type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n\nMacroStruct: export type MacroStruct = string;\n\nMacroStruct2: export type MacroStruct2 = {\n\tdemo: string,\n};\n\nMacroEnum: export type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\nDeprecatedType: /**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\nDeprecatedTypeWithMsg: /**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\nDeprecatedTypeWithMsg2: /**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nDeprecatedFields: export type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nDeprecatedTupleVariant: export type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\nDeprecatedEnumVariants: export type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nCommentedStruct: /**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nCommentedEnum: /**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\nSingleLineComment: /**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nNonGeneric: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nHalfGenericA<u8>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nHalfGenericB<bool>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nFullGeneric<u8, bool>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nAnother<bool>: export type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nMapA<u32>: \nMapB<u32>: \nMapC<u32>: \nAGenericStruct<u32>: export type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nA: export type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nDoubleFlattened: export type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nFlattenedInner: export type FlattenedInner = Inner;\n\nBoxFlattened: export type BoxFlattened = BoxedInner;\n\nBoxInline: export type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nFirst: export type First = {\n\ta: string,\n};\n\nSecond: export type Second = {\n\ta: number,\n};\n\nThird: export type Third = {\n\tb: { [key in string]: string },\n\tc: First,\n} & First;\n\nFourth: export type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nTagOnStructWithInline: export type TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nSixth: export type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nSeventh: export type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nEight: export type Eight = { A: string } | \"B\";\n\nNinth: export type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First };\n\nTenth: export type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nMyEnumTagged: export type MyEnumTagged = { type: \"Variant\"; inner: First };\n\nMyEnumExternal: export type MyEnumExternal = { Variant: {\n\tinner: First,\n} };\n\nMyEnumAdjacent: export type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: First,\n} };\n\nMyEnumUntagged: export type MyEnumUntagged = { inner: First };\n\nEmptyStruct: export type EmptyStruct = Record<string, never>;\n\nEmptyStructWithTag: export type EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nAdjacentlyTagged: export type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nLoadProjectEvent: export type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nExternallyTagged: export type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nIssue221External: export type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nInternallyTaggedD: export type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nInternallyTaggedE: export type InternallyTaggedE = { type: \"A\" };\n\nInternallyTaggedF: export type InternallyTaggedF = { type: \"A\" };\n\nInternallyTaggedH: export type InternallyTaggedH = { type: \"A\" };\n\nInternallyTaggedL: export type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nInternallyTaggedM: export type InternallyTaggedM = { type: \"A\" };\n\nStructWithAlias: export type StructWithAlias = {\n\tfield: string,\n};\n\nStructWithMultipleAliases: export type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nStructWithAliasAndRename: export type StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nEnumWithVariantAlias: export type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nEnumWithMultipleVariantAliases: export type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nEnumWithVariantAliasAndRename: export type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nInternallyTaggedWithAlias: export type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nAdjacentlyTaggedWithAlias: export type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nUntaggedWithAlias: export type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nIssue221UntaggedSafe: export type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nIssue221UntaggedMixed: export type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nEmptyEnum: export type EmptyEnum = never;\n\nEmptyEnumTagged: export type EmptyEnumTagged = never;\n\nEmptyEnumTaggedWContent: export type EmptyEnumTaggedWContent = never;\n\nEmptyEnumUntagged: export type EmptyEnumUntagged = never;\n\nSkipOnlyField: export type SkipOnlyField = Record<string, never>;\n\nSkipField: export type SkipField = {\n\tb: number,\n};\n\nSkipVariant: export type SkipVariant = { A: string };\n\nSkipUnnamedFieldInVariant: export type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nSkipNamedFieldInVariant: export type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nTransparentWithSkip: export type TransparentWithSkip = null;\n\nTransparentWithSkip2: export type TransparentWithSkip2 = string;\n\nTransparentWithSkip3: export type TransparentWithSkip3 = string;\n\nSkipVariant2: export type SkipVariant2 = { tag: \"A\"; data: string };\n\nSkipVariant3: export type SkipVariant3 = { A: {\n\ta: string,\n} };\n\nSkipStructFields: export type SkipStructFields = {\n\ta: number,\n};\n\nSpectaSkipNonTypeField: export type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nFlattenA: export type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nFlattenB: export type FlattenB = {\n\tc: number,\n} & FlattenA;\n\nFlattenC: export type FlattenC = {\n\tc: number,\n} & FlattenA;\n\nFlattenD: export type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nFlattenE: export type FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nFlattenF: export type FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nFlattenG: export type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nTupleNested: export type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nGeneric1<()>: export type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nGenericAutoBound<()>: export type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nGenericAutoBound2<()>: export type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nContainer1: export type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nGeneric2<(), String, i32>: export type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nGenericNewType1<()>: export type GenericNewType1<T> = T[][];\n\nGenericTuple<()>: export type GenericTuple<T> = [T, T[], T[][]];\n\nGenericStruct2<()>: export type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nInlineGenericNewtype<String>: \nInlineGenericNested<String>: \nInlineFlattenGenericsG<()>: export type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nInlineFlattenGenerics: export type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & InlineFlattenGenericsG<string>;\n\nGenericDefault: export type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nChainedGenericDefault: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nChainedGenericDefault<String, String>: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nChainedGenericDefault<i32>: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nChainedGenericDefault<String, i32>: export type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\nGenericDefaultSkipped: export type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nGenericDefaultSkippedNonType: export type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nGenericParameterOrderPreserved: export type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nConstGenericInNonConstContainer: export type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nConstGenericInConstContainer: export type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nNamedConstGenericContainer: export type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nInlineConstGenericContainer: export type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nInlineRecursiveConstGenericContainer: export type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nTestCollectionRegister: export type TestCollectionRegister = never;\n\nTestCollectionRegister: export type TestCollectionRegister = never;\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__inline-raw.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\ni8: number\ni16: number\ni32: number\nu8: number\nu16: number\nu32: number\nf32: number\nf64: number\nbool: boolean\nchar: string\nRange<i32>: {\n\tstart: T,\n\tend: T,\n}\nRangeInclusive<i32>: {\n\tstart: T,\n\tend: T,\n}\n(): null\n(String, i32): [string, number]\n(String, i32, bool): [string, number, boolean]\n((String, i32), (bool, char, bool), ()): [[string, number], [boolean, string, boolean], null]\n(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool): [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]\n(Vec<i32>, Vec<bool>): [number[], boolean[]]\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\n&'static str: string\n&'static bool: boolean\n&'static i32: number\nVec<i32>: number[]\n&'static [i32]: number[]\n&'static [i32; 3]: [number, number, number]\n[i32; 3]: [number, number, number]\nVec<MyEnum>: MyEnum[]\n&'static [MyEnum]: MyEnum[]\n&'static [MyEnum; 6]: [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum]\n[MyEnum; 2]: [MyEnum, MyEnum]\n&'static [i32; 1]: [number]\n&'static [i32; 0]: []\nOption<i32>: number | null\nOption<()>: null\nOption<Vec<i32>>: number[] | null\nResult<String, i32>: {\n\tok: T,\n\terr: E,\n}\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nOption<Vec<Cow<'static, i32>>>: number[] | null\n[Vec<String>; 3]: [string[], string[], string[]]\nOption<Option<String>>: string | null\nOption<Option<Option<String>>>: string | null\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: null\nUnit2: Record<string, never>\nUnit3: []\nUnit4: null\nUnit5: \"A\"\nUnit6: []\nUnit7: Record<string, never>\nSimpleStruct: {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n}\nTupleStruct1: number\nTupleStruct3: [number, boolean, string]\nTestEnum: \"Unit\" | number | [number, number] | { a: number }\nRefStruct: TestEnum\nInlinerStruct: {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n}\nGenericStruct<i32>: {\n\targ: T,\n}\nGenericStruct<String>: {\n\targ: T,\n}\nFlattenEnumStruct: {\n\touter: string,\n\tinner: FlattenEnum,\n}\nOverridenStruct: {\n\toverriden_field: string,\n}\nHasGenericAlias: { [key in number]: string }\nEnumMacroAttributes: string | number | { a: string; b: number }\nInlineEnumField: {\n\ta: string,\n}\nInlineOptionalType: {\n\toptional_field: {\n\ta: string,\n} | null,\n}\nRename: \"OneWord\" | \"TwoWords\"\nTransparentType: TransparentTypeInner\nTransparentType2: null\nTransparentTypeWithOverride: string\n[Option<u8>; 3]: [(number | null), (number | null), (number | null)]\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nOption<Option<Option<Option<i32>>>>: number | null\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n}\nFlattenOnNestedEnum: {\n\tid: string,\n\tresult: NestedEnum,\n}\nMyEmptyInput: Record<string, never>\n(String): string\n(String,): [string]\nExtraBracketsInTupleVariant: string\nExtraBracketsInUnnamedStruct: string\nVec<MyEnum>: MyEnum[]\nInlineTuple: {\n\tdemo: [string, boolean],\n}\nInlineTuple2: {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n}\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: never | string\nKebabCase: {\n\ttest_ing: string,\n}\n&[&str]: string[]\nIssue281<'_>: {\n\tdefault_unity_arguments: string[],\n}\nLifetimeGenericStruct<'_, i32>: {\n\tborrowed: T[],\n\towned: T[],\n}\nLifetimeGenericEnum<'_, i32>: T\nRenameWithWeirdCharsField: {\n\todata_context: string,\n}\nRenameWithWeirdCharsVariant: string\nRenamedFieldKeys: {\n\tempty: string,\n\tquote: string,\n\tbackslash: string,\n\tnewline: string,\n\tline_separator: string,\n\tparagraph_separator: string,\n}\nRenamedVariantWithSkippedPayload: never\ntype_type::Type: never\nActualType: {\n\ta: GenericType<string>,\n}\nSpectaTypeOverride: {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n}\nContainerTypeOverrideStruct: string\nContainerTypeOverrideEnum: string\nContainerTypeOverrideGeneric<Box<dyn Any>>: string\nContainerTypeOverrideToGeneric<i32>: T\nContainerTypeOverrideTuple: [string, number]\nContainerTypeOverrideTupleGeneric<i32>: [T, string]\nInvalidToValidType: {\n\tcause: null,\n}\nTupleStruct: string\nTupleStructWithRep: string\nGenericTupleStruct<String>: T\nBracedStruct: string\nStruct: {\n\ta: string,\n}\nStruct2: {\n\ta: string,\n}\nEnum: \"A\" | \"B\"\nEnum2: \"A\" | \"B\" | { enum_field: null }\nEnum3: { a: string }\nStructRenameAllUppercase: {\n\ta: number,\n\tb: number,\n}\nRenameSerdeSpecialChar: {\n\tb: number,\n}\nEnumRenameAllUppercase: \"HelloWorld\" | \"VariantB\" | \"TestingWords\"\nRecursive: {\n\tdemo: Recursive,\n}\nRecursiveMapValue: {\n\tdemo: { [key in string]: RecursiveMapValue },\n}\nRecursiveTransparent: RecursiveInline\nRecursiveInEnum: { demo: RecursiveInEnum }\nNonOptional: string | null\nOptionalOnNamedField: string | null\nOptionalOnTransparentNamedField: {\n\tb: string | null,\n}\nOptionalInEnum: string | null | { a: string | null } | { a?: string | null }\nUntaggedVariants: string | number | { id: string } | [string, boolean]\nUntaggedVariantsWithoutValue: string | [number, string] | number\nUntaggedVariantsWithDuplicateBranches: null | number\nHashMap<String, ()>: { [key in string]: null }\nRegular: { [key in string]: null }\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: { [key in MaybeValidKey<string>]: null }\nValidMaybeValidKeyNested: { [key in MaybeValidKey<MaybeValidKey<string>>]: null }\nMacroStruct: string\nMacroStruct2: {\n\tdemo: string,\n}\nMacroEnum: string | { demo2: string }\nDeprecatedType: {\n\ta: number,\n}\nDeprecatedTypeWithMsg: {\n\ta: number,\n}\nDeprecatedTypeWithMsg2: {\n\ta: number,\n}\nDeprecatedFields: {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n}\nDeprecatedTupleVariant: [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber]\nDeprecatedEnumVariants: \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\"\nCommentedStruct: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n}\nCommentedEnum: \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nnumber | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n{ \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\na: number }\nSingleLineComment: \n/**  Some single-line comment */\nnumber | \n/**  Some single-line comment */\n{ \n/**  Some single-line comment */\na: number }\nNonGeneric: {\n\ta: A,\n\tb: B,\n}\nHalfGenericA<u8>: {\n\ta: A,\n\tb: B,\n}\nHalfGenericB<bool>: {\n\ta: A,\n\tb: B,\n}\nFullGeneric<u8, bool>: {\n\ta: A,\n\tb: B,\n}\nAnother<bool>: {\n\ta: A,\n\tb: B,\n}\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: {\n\tfield: {\n\ta: A,\n\tb: B,\n},\n}\nA: {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n}\nDoubleFlattened: {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n}\nFlattenedInner: {\n\tc: Inner,\n}\nBoxFlattened: {\n\tb: BoxedInner,\n}\nBoxInline: {\n\tc: {\n\t\ta: number,\n\t},\n}\nFirst: {\n\ta: string,\n}\nSecond: {\n\ta: number,\n}\nThird: {\n\ta: First,\n\tb: { [key in string]: string },\n\tc: First,\n}\nFourth: {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nTagOnStructWithInline: {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nSixth: {\n\ta: First,\n\tb: First,\n}\nSeventh: {\n\ta: First,\n\tb: Second,\n}\nEight: string | \"B\"\nNinth: string | \"B\" | {\n\ta: string,\n} | First\nTenth: string | \"B\" | {\n\ta: string,\n} | First\nMyEnumTagged: { inner: First }\nMyEnumExternal: { inner: First }\nMyEnumAdjacent: { inner: First }\nMyEnumUntagged: { inner: First }\nEmptyStruct: Record<string, never>\nEmptyStructWithTag: Record<string, never>\nAdjacentlyTagged: \"A\" | { id: string; method: string } | string\nLoadProjectEvent: ({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number }\nExternallyTagged: \"A\" | { id: string; method: string } | string\nIssue221External: ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }\nInternallyTaggedD: { [key in string]: string }\nInternallyTaggedE: null\nInternallyTaggedF: InternallyTaggedFInner\nInternallyTaggedH: InternallyTaggedHInner\nInternallyTaggedL: \"A\" | \"B\"\nInternallyTaggedM: \"A\" | \"B\"\nStructWithAlias: {\n\tfield: string,\n}\nStructWithMultipleAliases: {\n\tfield: string,\n}\nStructWithAliasAndRename: {\n\tfield: string,\n}\nEnumWithVariantAlias: \"Variant\" | \"Other\"\nEnumWithMultipleVariantAliases: \"Variant\" | \"Other\"\nEnumWithVariantAliasAndRename: \"Variant\" | \"Other\"\nInternallyTaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nAdjacentlyTaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nUntaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nIssue221UntaggedSafe: ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }\nIssue221UntaggedMixed: ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }\nEmptyEnum: never\nEmptyEnumTagged: never\nEmptyEnumTaggedWContent: never\nEmptyEnumUntagged: never\nSkipOnlyField: Record<string, never>\nSkipField: {\n\tb: number,\n}\nSkipVariant: string\nSkipUnnamedFieldInVariant: never | [number]\nSkipNamedFieldInVariant: Record<string, never> | { b: number }\nTransparentWithSkip: null\nTransparentWithSkip2: string\nTransparentWithSkip3: string\nSkipVariant2: string\nSkipVariant3: { a: string }\nSkipStructFields: {\n\ta: number,\n}\nSpectaSkipNonTypeField: {\n\ta: number,\n}\nFlattenA: {\n\ta: number,\n\tb: number,\n}\nFlattenB: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenC: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenD: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenE: {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n}\nFlattenF: {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n}\nFlattenG: {\n\tb: FlattenB,\n\td: number,\n}\nTupleNested: [number[], [number[], number[]], [number[], number[], number[]]]\nGeneric1<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound2<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nContainer1: {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n}\nGeneric2<(), String, i32>: A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][]\nGenericNewType1<()>: T[][]\nGenericTuple<()>: [T, T[], T[][]]\nGenericStruct2<()>: {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n}\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }]\nInlineFlattenGenericsG<()>: {\n\tt: T,\n}\nInlineFlattenGenerics: {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n\tt: InlineFlattenGenericsG<string>,\n}\nGenericDefault: {\n\tvalue: T,\n}\nChainedGenericDefault: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, String>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nGenericDefaultSkipped: {\n\tvalue: T,\n}\nGenericDefaultSkippedNonType: {\n\tvalue: number,\n}\nGenericParameterOrderPreserved: {\n\tpair: Pair<number, string>,\n}\nConstGenericInNonConstContainer: {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n}\nConstGenericInConstContainer: {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n}\nNamedConstGenericContainer: {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n}\nInlineConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n}\nInlineRecursiveConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n}\nTestCollectionRegister: never\nTestCollectionRegister: never\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__inline-serde.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\ni8: number\ni16: number\ni32: number\nu8: number\nu16: number\nu32: number\nf32: number\nf64: number\nbool: boolean\nchar: string\nRange<i32>: {\n\tstart: T,\n\tend: T,\n}\nRangeInclusive<i32>: {\n\tstart: T,\n\tend: T,\n}\n(): null\n(String, i32): [string, number]\n(String, i32, bool): [string, number, boolean]\n((String, i32), (bool, char, bool), ()): [[string, number], [boolean, string, boolean], null]\n(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool): [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]\n(Vec<i32>, Vec<bool>): [number[], boolean[]]\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\n&'static str: string\n&'static bool: boolean\n&'static i32: number\nVec<i32>: number[]\n&'static [i32]: number[]\n&'static [i32; 3]: [number, number, number]\n[i32; 3]: [number, number, number]\nVec<MyEnum>: MyEnum[]\n&'static [MyEnum]: MyEnum[]\n&'static [MyEnum; 6]: [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum]\n[MyEnum; 2]: [MyEnum, MyEnum]\n&'static [i32; 1]: [number]\n&'static [i32; 0]: []\nOption<i32>: number | null\nOption<()>: null\nOption<Vec<i32>>: number[] | null\nResult<String, i32>: {\n\tok: T,\n\terr: E,\n}\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nOption<Vec<Cow<'static, i32>>>: number[] | null\n[Vec<String>; 3]: [string[], string[], string[]]\nOption<Option<String>>: string | null\nOption<Option<Option<String>>>: string | null\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: null\nUnit2: Record<string, never>\nUnit3: []\nUnit4: null\nUnit5: \"A\"\nUnit6: { A: null }\nUnit7: { A: Record<string, never> }\nSimpleStruct: {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n}\nTupleStruct1: number\nTupleStruct3: [number, boolean, string]\nTestEnum: \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never }\nRefStruct: TestEnum\nInlinerStruct: {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n}\nGenericStruct<i32>: {\n\targ: T,\n}\nGenericStruct<String>: {\n\targ: T,\n}\nFlattenEnumStruct: ({\n\touter: string,\n}) & (FlattenEnum)\nOverridenStruct: {\n\toverriden_field: string,\n}\nHasGenericAlias: { [key in number]: string }\nEnumMacroAttributes: ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never }\nInlineEnumField: { A: {\n\ta: string,\n} }\nInlineOptionalType: {\n\toptional_field: {\n\ta: string,\n} | null,\n}\nRename: \"OneWord\" | \"Two words\"\nTransparentType: TransparentTypeInner\nTransparentType2: null\nTransparentTypeWithOverride: string\n[Option<u8>; 3]: [(number | null), (number | null), (number | null)]\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nOption<Option<Option<Option<i32>>>>: number | null\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n}\nFlattenOnNestedEnum: ({\n\tid: string,\n}) & (NestedEnum)\nMyEmptyInput: Record<string, never>\n(String): string\n(String,): [string]\nExtraBracketsInTupleVariant: { A: string }\nExtraBracketsInUnnamedStruct: string\nVec<MyEnum>: MyEnum[]\nInlineTuple: {\n\tdemo: [string, boolean],\n}\nInlineTuple2: {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n}\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: { type: \"A\" } | { type: \"B\"; data: string }\nKebabCase: {\n\t\"test-ing\": string,\n}\n&[&str]: string[]\nIssue281<'_>: {\n\tdefault_unity_arguments: string[],\n}\nLifetimeGenericStruct<'_, i32>: {\n\tborrowed: T[],\n\towned: T[],\n}\nLifetimeGenericEnum<'_, i32>: ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }\nRenameWithWeirdCharsField: {\n\t\"@odata.context\": string,\n}\nRenameWithWeirdCharsVariant: { \"@odata.context\": string }\nRenamedFieldKeys: {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n}\nRenamedVariantWithSkippedPayload: \"a-b\"\ntype_type::Type: never\nActualType: {\n\ta: GenericType<string>,\n}\nSpectaTypeOverride: {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n}\nContainerTypeOverrideStruct: string\nContainerTypeOverrideEnum: string\nContainerTypeOverrideGeneric<Box<dyn Any>>: string\nContainerTypeOverrideToGeneric<i32>: T\nContainerTypeOverrideTuple: [string, number]\nContainerTypeOverrideTupleGeneric<i32>: [T, string]\nInvalidToValidType: {\n\tcause: null,\n}\nTupleStruct: string\nTupleStructWithRep: string\nGenericTupleStruct<String>: T\nBracedStruct: string\nStruct: {\n\tt: \"StructNew\",\n\ta: string,\n}\nStruct2: {\n\tb: string,\n}\nEnum: { t: \"A\" } | { t: \"B\" }\nEnum2: { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }\nEnum3: { t: \"A\"; b: string }\nStructRenameAllUppercase: {\n\tA: number,\n\tB: number,\n}\nRenameSerdeSpecialChar: {\n\t\"a/b\": number,\n}\nEnumRenameAllUppercase: \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"\nRecursive: {\n\tdemo: Recursive,\n}\nRecursiveMapValue: {\n\tdemo: { [key in string]: RecursiveMapValue },\n}\nRecursiveTransparent: RecursiveInline\nRecursiveInEnum: { A: {\n\tdemo: RecursiveInEnum,\n} }\nNonOptional: string | null\nOptionalOnNamedField: string | null\nOptionalOnTransparentNamedField: {\n\tb: string | null,\n}\nOptionalInEnum: ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never }\nUntaggedVariants: string | number | { id: string } | [string, boolean]\nUntaggedVariantsWithoutValue: string | [number, string] | number\nUntaggedVariantsWithDuplicateBranches: null | number\nHashMap<String, ()>: { [key in string]: null }\nRegular: { [key in string]: null }\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: { [key in MaybeValidKey<string>]: null }\nValidMaybeValidKeyNested: { [key in MaybeValidKey<MaybeValidKey<string>>]: null }\nMacroStruct: string\nMacroStruct2: {\n\tdemo: string,\n}\nMacroEnum: ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never }\nDeprecatedType: {\n\ta: number,\n}\nDeprecatedTypeWithMsg: {\n\ta: number,\n}\nDeprecatedTypeWithMsg2: {\n\ta: number,\n}\nDeprecatedFields: {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n}\nDeprecatedTupleVariant: [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber]\nDeprecatedEnumVariants: \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\"\nCommentedStruct: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n}\nCommentedEnum: \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never }\nSingleLineComment: \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never }\nNonGeneric: {\n\ta: A,\n\tb: B,\n}\nHalfGenericA<u8>: {\n\ta: A,\n\tb: B,\n}\nHalfGenericB<bool>: {\n\ta: A,\n\tb: B,\n}\nFullGeneric<u8, bool>: {\n\ta: A,\n\tb: B,\n}\nAnother<bool>: {\n\ta: A,\n\tb: B,\n}\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: {\n\tfield: {\n\ta: A,\n\tb: B,\n},\n}\nA: {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n}\nDoubleFlattened: {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n}\nFlattenedInner: (Inner)\nBoxFlattened: (BoxedInner)\nBoxInline: {\n\tc: {\n\t\ta: number,\n\t},\n}\nFirst: {\n\ta: string,\n}\nSecond: {\n\ta: number,\n}\nThird: ({\n\tb: { [key in string]: string },\n\tc: First,\n}) & (First)\nFourth: {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nTagOnStructWithInline: {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nSixth: {\n\ta: First,\n\tb: First,\n}\nSeventh: {\n\ta: First,\n\tb: Second,\n}\nEight: { A: string } | \"B\"\nNinth: { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First }\nTenth: string | \"B\" | {\n\ta: string,\n} | First\nMyEnumTagged: { type: \"Variant\"; inner: First }\nMyEnumExternal: { Variant: {\n\tinner: First,\n} }\nMyEnumAdjacent: { t: \"Variant\"; c: {\n\tinner: First,\n} }\nMyEnumUntagged: { inner: First }\nEmptyStruct: Record<string, never>\nEmptyStructWithTag: {\n\ta: \"EmptyStructWithTag\",\n}\nAdjacentlyTagged: { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string }\nLoadProjectEvent: { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} }\nExternallyTagged: \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never }\nIssue221External: ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never }\nInternallyTaggedD: {\n\ttype: \"A\",\n} & { [key in string]: string }\nInternallyTaggedE: { type: \"A\" }\nInternallyTaggedF: { type: \"A\" }\nInternallyTaggedH: { type: \"A\" }\nInternallyTaggedL: {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" }\nInternallyTaggedM: { type: \"A\" }\nStructWithAlias: {\n\tfield: string,\n}\nStructWithMultipleAliases: {\n\tfield: string,\n}\nStructWithAliasAndRename: {\n\trenamed_field: string,\n}\nEnumWithVariantAlias: \"Variant\" | \"Other\"\nEnumWithMultipleVariantAliases: \"Variant\" | \"Other\"\nEnumWithVariantAliasAndRename: \"renamed_variant\" | \"Other\"\nInternallyTaggedWithAlias: { type: \"A\"; field: string } | { type: \"B\"; other: number }\nAdjacentlyTaggedWithAlias: { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} }\nUntaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nIssue221UntaggedSafe: ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }\nIssue221UntaggedMixed: ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }\nEmptyEnum: never\nEmptyEnumTagged: never\nEmptyEnumTaggedWContent: never\nEmptyEnumUntagged: never\nSkipOnlyField: Record<string, never>\nSkipField: {\n\tb: number,\n}\nSkipVariant: { A: string }\nSkipUnnamedFieldInVariant: \"A\" | { B: [number] }\nSkipNamedFieldInVariant: ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never }\nTransparentWithSkip: null\nTransparentWithSkip2: string\nTransparentWithSkip3: string\nSkipVariant2: { tag: \"A\"; data: string }\nSkipVariant3: { A: {\n\ta: string,\n} }\nSkipStructFields: {\n\ta: number,\n}\nSpectaSkipNonTypeField: {\n\ta: number,\n}\nFlattenA: {\n\ta: number,\n\tb: number,\n}\nFlattenB: ({\n\tc: number,\n}) & (FlattenA)\nFlattenC: ({\n\tc: number,\n}) & (FlattenA)\nFlattenD: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenE: {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n}\nFlattenF: {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n}\nFlattenG: {\n\tb: FlattenB,\n\td: number,\n}\nTupleNested: [number[], [number[], number[]], [number[], number[], number[]]]\nGeneric1<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound2<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nContainer1: {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n}\nGeneric2<(), String, i32>: ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }\nGenericNewType1<()>: T[][]\nGenericTuple<()>: [T, T[], T[][]]\nGenericStruct2<()>: {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n}\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }]\nInlineFlattenGenericsG<()>: {\n\tt: T,\n}\nInlineFlattenGenerics: ({\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n}) & (InlineFlattenGenericsG<string>)\nGenericDefault: {\n\tvalue: T,\n}\nChainedGenericDefault: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, String>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nGenericDefaultSkipped: {\n\tvalue: T,\n}\nGenericDefaultSkippedNonType: {\n\tvalue: number,\n}\nGenericParameterOrderPreserved: {\n\tpair: Pair<number, string>,\n}\nConstGenericInNonConstContainer: {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n}\nConstGenericInConstContainer: {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n}\nNamedConstGenericContainer: {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n}\nInlineConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n}\nInlineRecursiveConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n}\nTestCollectionRegister: never\nTestCollectionRegister: never\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__inline-serde_phases.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nIssue374: {\n\tfoo?: boolean,\n\tbar?: boolean,\n}\nOptional: {\n\ta: number | null,\n\tb?: number | null,\n\tc?: string | null,\n\td: boolean,\n}\nStructPhaseSpecificRename: {\n\tkind: \"StructPhaseSpecificRenameSerialize\",\n\tser: string,\n}\ni8: number\ni16: number\ni32: number\nu8: number\nu16: number\nu32: number\nf32: number\nf64: number\nbool: boolean\nchar: string\nRange<i32>: {\n\tstart: T,\n\tend: T,\n}\nRangeInclusive<i32>: {\n\tstart: T,\n\tend: T,\n}\n(): null\n(String, i32): [string, number]\n(String, i32, bool): [string, number, boolean]\n((String, i32), (bool, char, bool), ()): [[string, number], [boolean, string, boolean], null]\n(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool): [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean]\n(Vec<i32>, Vec<bool>): [number[], boolean[]]\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\n&'static str: string\n&'static bool: boolean\n&'static i32: number\nVec<i32>: number[]\n&'static [i32]: number[]\n&'static [i32; 3]: [number, number, number]\n[i32; 3]: [number, number, number]\nVec<MyEnum>: MyEnum[]\n&'static [MyEnum]: MyEnum[]\n&'static [MyEnum; 6]: [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum]\n[MyEnum; 2]: [MyEnum, MyEnum]\n&'static [i32; 1]: [number]\n&'static [i32; 0]: []\nOption<i32>: number | null\nOption<()>: null\nOption<Vec<i32>>: number[] | null\nResult<String, i32>: {\n\tok: T,\n\terr: E,\n}\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nOption<Vec<Cow<'static, i32>>>: number[] | null\n[Vec<String>; 3]: [string[], string[], string[]]\nOption<Option<String>>: string | null\nOption<Option<Option<String>>>: string | null\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: null\nUnit2: Record<string, never>\nUnit3: []\nUnit4: null\nUnit5: \"A\"\nUnit6: { A: null }\nUnit7: { A: Record<string, never> }\nSimpleStruct: {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n}\nTupleStruct1: number\nTupleStruct3: [number, boolean, string]\nTestEnum: \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never }\nRefStruct: TestEnum\nInlinerStruct: {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n}\nGenericStruct<i32>: {\n\targ: T,\n}\nGenericStruct<String>: {\n\targ: T,\n}\nFlattenEnumStruct: ({\n\touter: string,\n}) & (FlattenEnum)\nOverridenStruct: {\n\toverriden_field: string,\n}\nHasGenericAlias: { [key in number]: string }\nEnumMacroAttributes: ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never }\nInlineEnumField: { A: {\n\ta: string,\n} }\nInlineOptionalType: {\n\toptional_field: {\n\ta: string,\n} | null,\n}\nRename: \"OneWord\" | \"Two words\"\nTransparentType: TransparentTypeInner\nTransparentType2: null\nTransparentTypeWithOverride: string\n[Option<u8>; 3]: [(number | null), (number | null), (number | null)]\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nOption<Option<Option<Option<i32>>>>: number | null\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n}\nFlattenOnNestedEnum: ({\n\tid: string,\n}) & (NestedEnum)\nMyEmptyInput: Record<string, never>\n(String): string\n(String,): [string]\nExtraBracketsInTupleVariant: { A: string }\nExtraBracketsInUnnamedStruct: string\nVec<MyEnum>: MyEnum[]\nInlineTuple: {\n\tdemo: [string, boolean],\n}\nInlineTuple2: {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n}\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: { type: \"A\" } | { type: \"B\"; data: string }\nKebabCase: {\n\t\"test-ing\": string,\n}\n&[&str]: string[]\nIssue281<'_>: {\n\tdefault_unity_arguments: string[],\n}\nLifetimeGenericStruct<'_, i32>: {\n\tborrowed: T[],\n\towned: T[],\n}\nLifetimeGenericEnum<'_, i32>: ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never }\nRenameWithWeirdCharsField: {\n\t\"@odata.context\": string,\n}\nRenameWithWeirdCharsVariant: { \"@odata.context\": string }\nRenamedFieldKeys: {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n}\nRenamedVariantWithSkippedPayload: \"a-b\"\ntype_type::Type: never\nActualType: {\n\ta: GenericType<string>,\n}\nSpectaTypeOverride: {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n}\nContainerTypeOverrideStruct: string\nContainerTypeOverrideEnum: string\nContainerTypeOverrideGeneric<Box<dyn Any>>: string\nContainerTypeOverrideToGeneric<i32>: T\nContainerTypeOverrideTuple: [string, number]\nContainerTypeOverrideTupleGeneric<i32>: [T, string]\nInvalidToValidType: {\n\tcause: null,\n}\nTupleStruct: string\nTupleStructWithRep: string\nGenericTupleStruct<String>: T\nBracedStruct: string\nStruct: {\n\tt: \"StructNew\",\n\ta: string,\n}\nStruct2: {\n\tb: string,\n}\nEnum: { t: \"A\" } | { t: \"B\" }\nEnum2: { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null }\nEnum3: { t: \"A\"; b: string }\nStructRenameAllUppercase: {\n\tA: number,\n\tB: number,\n}\nRenameSerdeSpecialChar: {\n\t\"a/b\": number,\n}\nEnumRenameAllUppercase: \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\"\nRecursive: {\n\tdemo: Recursive,\n}\nRecursiveMapValue: {\n\tdemo: { [key in string]: RecursiveMapValue },\n}\nRecursiveTransparent: RecursiveInline\nRecursiveInEnum: { A: {\n\tdemo: RecursiveInEnum,\n} }\nNonOptional: string | null\nOptionalOnNamedField: string | null\nOptionalOnTransparentNamedField: {\n\tb: string | null,\n}\nOptionalInEnum: ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never }\nUntaggedVariants: string | number | { id: string } | [string, boolean]\nUntaggedVariantsWithoutValue: string | [number, string] | number\nUntaggedVariantsWithDuplicateBranches: null | number\nHashMap<String, ()>: { [key in string]: null }\nRegular: { [key in string]: null }\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: { [key in MaybeValidKey<string>]: null }\nValidMaybeValidKeyNested: { [key in MaybeValidKey<MaybeValidKey<string>>]: null }\nMacroStruct: string\nMacroStruct2: {\n\tdemo: string,\n}\nMacroEnum: ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never }\nDeprecatedType: {\n\ta: number,\n}\nDeprecatedTypeWithMsg: {\n\ta: number,\n}\nDeprecatedTypeWithMsg2: {\n\ta: number,\n}\nDeprecatedFields: {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n}\nDeprecatedTupleVariant: [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber]\nDeprecatedEnumVariants: \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\"\nCommentedStruct: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n}\nCommentedEnum: \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never }\nSingleLineComment: \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never }\nNonGeneric: {\n\ta: A,\n\tb: B,\n}\nHalfGenericA<u8>: {\n\ta: A,\n\tb: B,\n}\nHalfGenericB<bool>: {\n\ta: A,\n\tb: B,\n}\nFullGeneric<u8, bool>: {\n\ta: A,\n\tb: B,\n}\nAnother<bool>: {\n\ta: A,\n\tb: B,\n}\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: {\n\tfield: {\n\ta: A,\n\tb: B,\n},\n}\nA: {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n}\nDoubleFlattened: {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n}\nFlattenedInner: (Inner)\nBoxFlattened: (BoxedInner)\nBoxInline: {\n\tc: {\n\t\ta: number,\n\t},\n}\nFirst: {\n\ta: string,\n}\nSecond: {\n\ta: number,\n}\nThird: ({\n\tb: { [key in string]: string },\n\tc: First,\n}) & (First)\nFourth: {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nTagOnStructWithInline: {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n}\nSixth: {\n\ta: First,\n\tb: First,\n}\nSeventh: {\n\ta: First,\n\tb: Second,\n}\nEight: { A: string } | \"B\"\nNinth: { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First }\nTenth: string | \"B\" | {\n\ta: string,\n} | First\nMyEnumTagged: { type: \"Variant\"; inner: First }\nMyEnumExternal: { Variant: {\n\tinner: First,\n} }\nMyEnumAdjacent: { t: \"Variant\"; c: {\n\tinner: First,\n} }\nMyEnumUntagged: { inner: First }\nEmptyStruct: Record<string, never>\nEmptyStructWithTag: {\n\ta: \"EmptyStructWithTag\",\n}\nAdjacentlyTagged: { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string }\nLoadProjectEvent: { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} }\nExternallyTagged: \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never }\nIssue221External: ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never }\nInternallyTaggedD: {\n\ttype: \"A\",\n} & { [key in string]: string }\nInternallyTaggedE: { type: \"A\" }\nInternallyTaggedF: { type: \"A\" }\nInternallyTaggedH: { type: \"A\" }\nInternallyTaggedL: {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" }\nInternallyTaggedM: { type: \"A\" }\nStructWithAlias: {\n\tfield: string,\n}\nStructWithMultipleAliases: {\n\tfield: string,\n}\nStructWithAliasAndRename: {\n\trenamed_field: string,\n}\nEnumWithVariantAlias: \"Variant\" | \"Other\"\nEnumWithMultipleVariantAliases: \"Variant\" | \"Other\"\nEnumWithVariantAliasAndRename: \"renamed_variant\" | \"Other\"\nInternallyTaggedWithAlias: { type: \"A\"; field: string } | { type: \"B\"; other: number }\nAdjacentlyTaggedWithAlias: { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} }\nUntaggedWithAlias: ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never }\nIssue221UntaggedSafe: ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never }\nIssue221UntaggedMixed: ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never }\nEmptyEnum: never\nEmptyEnumTagged: never\nEmptyEnumTaggedWContent: never\nEmptyEnumUntagged: never\nSkipOnlyField: Record<string, never>\nSkipField: {\n\tb: number,\n}\nSkipVariant: { A: string }\nSkipUnnamedFieldInVariant: \"A\" | { B: [number] }\nSkipNamedFieldInVariant: ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never }\nTransparentWithSkip: null\nTransparentWithSkip2: string\nTransparentWithSkip3: string\nSkipVariant2: { tag: \"A\"; data: string }\nSkipVariant3: { A: {\n\ta: string,\n} }\nSkipStructFields: {\n\ta: number,\n}\nSpectaSkipNonTypeField: {\n\ta: number,\n}\nFlattenA: {\n\ta: number,\n\tb: number,\n}\nFlattenB: ({\n\tc: number,\n}) & (FlattenA)\nFlattenC: ({\n\tc: number,\n}) & (FlattenA)\nFlattenD: {\n\ta: FlattenA,\n\tc: number,\n}\nFlattenE: {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n}\nFlattenF: {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n}\nFlattenG: {\n\tb: FlattenB,\n\td: number,\n}\nTupleNested: [number[], [number[], number[]], [number[], number[], number[]]]\nGeneric1<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nGenericAutoBound2<()>: {\n\tvalue: T,\n\tvalues: T[],\n}\nContainer1: {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n}\nGeneric2<(), String, i32>: ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never }\nGenericNewType1<()>: T[][]\nGenericTuple<()>: [T, T[], T[][]]\nGenericStruct2<()>: {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n}\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }]\nInlineFlattenGenericsG<()>: {\n\tt: T,\n}\nInlineFlattenGenerics: ({\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n}) & (InlineFlattenGenericsG<string>)\nGenericDefault: {\n\tvalue: T,\n}\nChainedGenericDefault: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, String>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nChainedGenericDefault<String, i32>: {\n\tfirst: T,\n\tsecond: U,\n}\nGenericDefaultSkipped: {\n\tvalue: T,\n}\nGenericDefaultSkippedNonType: {\n\tvalue: number,\n}\nGenericParameterOrderPreserved: {\n\tpair: Pair<number, string>,\n}\nConstGenericInNonConstContainer: {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n}\nConstGenericInConstContainer: {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n}\nNamedConstGenericContainer: {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n}\nInlineConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n}\nInlineRecursiveConstGenericContainer: {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n}\nTestCollectionRegister: never\nTestCollectionRegister: never\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__reference-raw.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nRange<i32>: Range<number>\nRangeInclusive<i32>: RangeInclusive<number>\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\nVec<i32>: number[]\nVec<MyEnum>: MyEnum[]\nResult<String, i32>: Result<string, number>\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: Unit1\nUnit2: Unit2\nUnit3: Unit3\nUnit4: Unit4\nUnit5: Unit5\nUnit6: Unit6\nUnit7: Unit7\nSimpleStruct: SimpleStruct\nTupleStruct1: TupleStruct1\nTupleStruct3: TupleStruct3\nTestEnum: TestEnum\nRefStruct: RefStruct\nInlinerStruct: InlinerStruct\nGenericStruct<i32>: GenericStruct<number>\nGenericStruct<String>: GenericStruct<string>\nFlattenEnumStruct: FlattenEnumStruct\nOverridenStruct: OverridenStruct\nHasGenericAlias: HasGenericAlias\nEnumMacroAttributes: EnumMacroAttributes\nInlineEnumField: InlineEnumField\nInlineOptionalType: InlineOptionalType\nRename: Rename\nTransparentType: TransparentType\nTransparentType2: TransparentType2\nTransparentTypeWithOverride: TransparentTypeWithOverride\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: EnumReferenceRecordKey\nFlattenOnNestedEnum: FlattenOnNestedEnum\nMyEmptyInput: MyEmptyInput\n(String): string\nExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant\nExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct\nVec<MyEnum>: MyEnum[]\nInlineTuple: InlineTuple\nInlineTuple2: InlineTuple2\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: SkippedFieldWithinVariant\nKebabCase: KebabCase\nIssue281<'_>: Issue281\nLifetimeGenericStruct<'_, i32>: LifetimeGenericStruct<number>\nLifetimeGenericEnum<'_, i32>: LifetimeGenericEnum<number>\nRenameWithWeirdCharsField: RenameWithWeirdCharsField\nRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant\nRenamedFieldKeys: RenamedFieldKeys\nRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload\ntype_type::Type: Type\nActualType: ActualType\nSpectaTypeOverride: SpectaTypeOverride\nContainerTypeOverrideStruct: ContainerTypeOverrideStruct\nContainerTypeOverrideEnum: ContainerTypeOverrideEnum\nContainerTypeOverrideGeneric<Box<dyn Any>>: ContainerTypeOverrideGeneric\nContainerTypeOverrideToGeneric<i32>: ContainerTypeOverrideToGeneric<number>\nContainerTypeOverrideTuple: ContainerTypeOverrideTuple\nContainerTypeOverrideTupleGeneric<i32>: ContainerTypeOverrideTupleGeneric<number>\nInvalidToValidType: InvalidToValidType\nTupleStruct: TupleStruct\nTupleStructWithRep: TupleStructWithRep\nGenericTupleStruct<String>: GenericTupleStruct<string>\nBracedStruct: BracedStruct\nStruct: Struct\nStruct2: Struct2\nEnum: Enum\nEnum2: Enum2\nEnum3: Enum3\nStructRenameAllUppercase: StructRenameAllUppercase\nRenameSerdeSpecialChar: RenameSerdeSpecialChar\nEnumRenameAllUppercase: EnumRenameAllUppercase\nRecursive: Recursive\nRecursiveMapValue: RecursiveMapValue\nRecursiveTransparent: RecursiveTransparent\nRecursiveInEnum: RecursiveInEnum\nNonOptional: NonOptional\nOptionalOnNamedField: OptionalOnNamedField\nOptionalOnTransparentNamedField: OptionalOnTransparentNamedField\nOptionalInEnum: OptionalInEnum\nUntaggedVariants: UntaggedVariants\nUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue\nUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches\nHashMap<String, ()>: { [key in string]: null }\nRegular: Regular\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: ValidMaybeValidKey\nValidMaybeValidKeyNested: ValidMaybeValidKeyNested\nMacroStruct: MacroStruct\nMacroStruct2: MacroStruct2\nMacroEnum: MacroEnum\nDeprecatedType: DeprecatedType\nDeprecatedTypeWithMsg: DeprecatedTypeWithMsg\nDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2\nDeprecatedFields: DeprecatedFields\nDeprecatedTupleVariant: DeprecatedTupleVariant\nDeprecatedEnumVariants: DeprecatedEnumVariants\nCommentedStruct: CommentedStruct\nCommentedEnum: CommentedEnum\nSingleLineComment: SingleLineComment\nNonGeneric: Demo<number, boolean>\nHalfGenericA<u8>: Demo<number, boolean>\nHalfGenericB<bool>: Demo<number, boolean>\nFullGeneric<u8, bool>: Demo<number, boolean>\nAnother<bool>: Demo<number, boolean>\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: AGenericStruct<number>\nA: A\nDoubleFlattened: DoubleFlattened\nFlattenedInner: FlattenedInner\nBoxFlattened: BoxFlattened\nBoxInline: BoxInline\nFirst: First\nSecond: Second\nThird: Third\nFourth: Fourth\nTagOnStructWithInline: TagOnStructWithInline\nSixth: Sixth\nSeventh: Seventh\nEight: Eight\nNinth: Ninth\nTenth: Tenth\nMyEnumTagged: MyEnumTagged\nMyEnumExternal: MyEnumExternal\nMyEnumAdjacent: MyEnumAdjacent\nMyEnumUntagged: MyEnumUntagged\nEmptyStruct: EmptyStruct\nEmptyStructWithTag: EmptyStructWithTag\nAdjacentlyTagged: AdjacentlyTagged\nLoadProjectEvent: LoadProjectEvent\nExternallyTagged: ExternallyTagged\nIssue221External: Issue221External\nInternallyTaggedD: InternallyTaggedD\nInternallyTaggedE: InternallyTaggedE\nInternallyTaggedF: InternallyTaggedF\nInternallyTaggedH: InternallyTaggedH\nInternallyTaggedL: InternallyTaggedL\nInternallyTaggedM: InternallyTaggedM\nStructWithAlias: StructWithAlias\nStructWithMultipleAliases: StructWithMultipleAliases\nStructWithAliasAndRename: StructWithAliasAndRename\nEnumWithVariantAlias: EnumWithVariantAlias\nEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases\nEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename\nInternallyTaggedWithAlias: InternallyTaggedWithAlias\nAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias\nUntaggedWithAlias: UntaggedWithAlias\nIssue221UntaggedSafe: Issue221UntaggedSafe\nIssue221UntaggedMixed: Issue221UntaggedMixed\nEmptyEnum: EmptyEnum\nEmptyEnumTagged: EmptyEnumTagged\nEmptyEnumTaggedWContent: EmptyEnumTaggedWContent\nEmptyEnumUntagged: EmptyEnumUntagged\nSkipOnlyField: SkipOnlyField\nSkipField: SkipField\nSkipVariant: SkipVariant\nSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant\nSkipNamedFieldInVariant: SkipNamedFieldInVariant\nTransparentWithSkip: TransparentWithSkip\nTransparentWithSkip2: TransparentWithSkip2\nTransparentWithSkip3: TransparentWithSkip3\nSkipVariant2: SkipVariant2\nSkipVariant3: SkipVariant3\nSkipStructFields: SkipStructFields\nSpectaSkipNonTypeField: SpectaSkipNonTypeField\nFlattenA: FlattenA\nFlattenB: FlattenB\nFlattenC: FlattenC\nFlattenD: FlattenD\nFlattenE: FlattenE\nFlattenF: FlattenF\nFlattenG: FlattenG\nTupleNested: TupleNested\nGeneric1<()>: Generic1<null>\nGenericAutoBound<()>: GenericAutoBound<null>\nGenericAutoBound2<()>: GenericAutoBound2<null>\nContainer1: Container1\nGeneric2<(), String, i32>: Generic2<null, string, number>\nGenericNewType1<()>: GenericNewType1<null>\nGenericTuple<()>: GenericTuple<null>\nGenericStruct2<()>: GenericStruct2<null>\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }]\nInlineFlattenGenericsG<()>: InlineFlattenGenericsG<null>\nInlineFlattenGenerics: InlineFlattenGenerics\nGenericDefault: GenericDefault\nChainedGenericDefault: ChainedGenericDefault\nChainedGenericDefault<String, String>: ChainedGenericDefault\nChainedGenericDefault<i32>: ChainedGenericDefault<number, number>\nChainedGenericDefault<String, i32>: ChainedGenericDefault<string, number>\nGenericDefaultSkipped: GenericDefaultSkipped<string>\nGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>\nGenericParameterOrderPreserved: GenericParameterOrderPreserved\nConstGenericInNonConstContainer: ConstGenericInNonConstContainer\nConstGenericInConstContainer: ConstGenericInConstContainer\nNamedConstGenericContainer: NamedConstGenericContainer\nInlineConstGenericContainer: InlineConstGenericContainer\nInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer\nTestCollectionRegister: TestCollectionRegister\nTestCollectionRegister: TestCollectionRegister\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__reference-serde.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nRange<i32>: Range<number>\nRangeInclusive<i32>: RangeInclusive<number>\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\nVec<i32>: number[]\nVec<MyEnum>: MyEnum[]\nResult<String, i32>: Result<string, number>\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: Unit1\nUnit2: Unit2\nUnit3: Unit3\nUnit4: Unit4\nUnit5: Unit5\nUnit6: Unit6\nUnit7: Unit7\nSimpleStruct: SimpleStruct\nTupleStruct1: TupleStruct1\nTupleStruct3: TupleStruct3\nTestEnum: TestEnum\nRefStruct: RefStruct\nInlinerStruct: InlinerStruct\nGenericStruct<i32>: GenericStruct<number>\nGenericStruct<String>: GenericStruct<string>\nFlattenEnumStruct: FlattenEnumStruct\nOverridenStruct: OverridenStruct\nHasGenericAlias: HasGenericAlias\nEnumMacroAttributes: EnumMacroAttributes\nInlineEnumField: InlineEnumField\nInlineOptionalType: InlineOptionalType\nRename: Rename\nTransparentType: TransparentType\nTransparentType2: TransparentType2\nTransparentTypeWithOverride: TransparentTypeWithOverride\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: EnumReferenceRecordKey\nFlattenOnNestedEnum: FlattenOnNestedEnum\nMyEmptyInput: MyEmptyInput\n(String): string\nExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant\nExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct\nVec<MyEnum>: MyEnum[]\nInlineTuple: InlineTuple\nInlineTuple2: InlineTuple2\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: SkippedFieldWithinVariant\nKebabCase: KebabCase\nIssue281<'_>: Issue281\nLifetimeGenericStruct<'_, i32>: LifetimeGenericStruct<number>\nLifetimeGenericEnum<'_, i32>: LifetimeGenericEnum<number>\nRenameWithWeirdCharsField: RenameWithWeirdCharsField\nRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant\nRenamedFieldKeys: RenamedFieldKeys\nRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload\ntype_type::Type: Type\nActualType: ActualType\nSpectaTypeOverride: SpectaTypeOverride\nContainerTypeOverrideStruct: ContainerTypeOverrideStruct\nContainerTypeOverrideEnum: ContainerTypeOverrideEnum\nContainerTypeOverrideGeneric<Box<dyn Any>>: ContainerTypeOverrideGeneric\nContainerTypeOverrideToGeneric<i32>: ContainerTypeOverrideToGeneric<number>\nContainerTypeOverrideTuple: ContainerTypeOverrideTuple\nContainerTypeOverrideTupleGeneric<i32>: ContainerTypeOverrideTupleGeneric<number>\nInvalidToValidType: InvalidToValidType\nTupleStruct: TupleStruct\nTupleStructWithRep: TupleStructWithRep\nGenericTupleStruct<String>: GenericTupleStruct<string>\nBracedStruct: BracedStruct\nStruct: StructNew\nStruct2: Struct2\nEnum: Enum\nEnum2: Enum2\nEnum3: Enum3\nStructRenameAllUppercase: StructRenameAllUppercase\nRenameSerdeSpecialChar: RenameSerdeSpecialChar\nEnumRenameAllUppercase: EnumRenameAllUppercase\nRecursive: Recursive\nRecursiveMapValue: RecursiveMapValue\nRecursiveTransparent: RecursiveTransparent\nRecursiveInEnum: RecursiveInEnum\nNonOptional: NonOptional\nOptionalOnNamedField: OptionalOnNamedField\nOptionalOnTransparentNamedField: OptionalOnTransparentNamedField\nOptionalInEnum: OptionalInEnum\nUntaggedVariants: UntaggedVariants\nUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue\nUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches\nHashMap<String, ()>: { [key in string]: null }\nRegular: Regular\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: ValidMaybeValidKey\nValidMaybeValidKeyNested: ValidMaybeValidKeyNested\nMacroStruct: MacroStruct\nMacroStruct2: MacroStruct2\nMacroEnum: MacroEnum\nDeprecatedType: DeprecatedType\nDeprecatedTypeWithMsg: DeprecatedTypeWithMsg\nDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2\nDeprecatedFields: DeprecatedFields\nDeprecatedTupleVariant: DeprecatedTupleVariant\nDeprecatedEnumVariants: DeprecatedEnumVariants\nCommentedStruct: CommentedStruct\nCommentedEnum: CommentedEnum\nSingleLineComment: SingleLineComment\nNonGeneric: Demo<number, boolean>\nHalfGenericA<u8>: Demo<number, boolean>\nHalfGenericB<bool>: Demo<number, boolean>\nFullGeneric<u8, bool>: Demo<number, boolean>\nAnother<bool>: Demo<number, boolean>\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: AGenericStruct<number>\nA: A\nDoubleFlattened: DoubleFlattened\nFlattenedInner: FlattenedInner\nBoxFlattened: BoxFlattened\nBoxInline: BoxInline\nFirst: First\nSecond: Second\nThird: Third\nFourth: Fourth\nTagOnStructWithInline: TagOnStructWithInline\nSixth: Sixth\nSeventh: Seventh\nEight: Eight\nNinth: Ninth\nTenth: Tenth\nMyEnumTagged: MyEnumTagged\nMyEnumExternal: MyEnumExternal\nMyEnumAdjacent: MyEnumAdjacent\nMyEnumUntagged: MyEnumUntagged\nEmptyStruct: EmptyStruct\nEmptyStructWithTag: EmptyStructWithTag\nAdjacentlyTagged: AdjacentlyTagged\nLoadProjectEvent: LoadProjectEvent\nExternallyTagged: ExternallyTagged\nIssue221External: Issue221External\nInternallyTaggedD: InternallyTaggedD\nInternallyTaggedE: InternallyTaggedE\nInternallyTaggedF: InternallyTaggedF\nInternallyTaggedH: InternallyTaggedH\nInternallyTaggedL: InternallyTaggedL\nInternallyTaggedM: InternallyTaggedM\nStructWithAlias: StructWithAlias\nStructWithMultipleAliases: StructWithMultipleAliases\nStructWithAliasAndRename: StructWithAliasAndRename\nEnumWithVariantAlias: EnumWithVariantAlias\nEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases\nEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename\nInternallyTaggedWithAlias: InternallyTaggedWithAlias\nAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias\nUntaggedWithAlias: UntaggedWithAlias\nIssue221UntaggedSafe: Issue221UntaggedSafe\nIssue221UntaggedMixed: Issue221UntaggedMixed\nEmptyEnum: EmptyEnum\nEmptyEnumTagged: EmptyEnumTagged\nEmptyEnumTaggedWContent: EmptyEnumTaggedWContent\nEmptyEnumUntagged: EmptyEnumUntagged\nSkipOnlyField: SkipOnlyField\nSkipField: SkipField\nSkipVariant: SkipVariant\nSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant\nSkipNamedFieldInVariant: SkipNamedFieldInVariant\nTransparentWithSkip: TransparentWithSkip\nTransparentWithSkip2: TransparentWithSkip2\nTransparentWithSkip3: TransparentWithSkip3\nSkipVariant2: SkipVariant2\nSkipVariant3: SkipVariant3\nSkipStructFields: SkipStructFields\nSpectaSkipNonTypeField: SpectaSkipNonTypeField\nFlattenA: FlattenA\nFlattenB: FlattenB\nFlattenC: FlattenC\nFlattenD: FlattenD\nFlattenE: FlattenE\nFlattenF: FlattenF\nFlattenG: FlattenG\nTupleNested: TupleNested\nGeneric1<()>: Generic1<null>\nGenericAutoBound<()>: GenericAutoBound<null>\nGenericAutoBound2<()>: GenericAutoBound2<null>\nContainer1: Container1\nGeneric2<(), String, i32>: Generic2<null, string, number>\nGenericNewType1<()>: GenericNewType1<null>\nGenericTuple<()>: GenericTuple<null>\nGenericStruct2<()>: GenericStruct2<null>\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }]\nInlineFlattenGenericsG<()>: InlineFlattenGenericsG<null>\nInlineFlattenGenerics: InlineFlattenGenerics\nGenericDefault: GenericDefault\nChainedGenericDefault: ChainedGenericDefault\nChainedGenericDefault<String, String>: ChainedGenericDefault\nChainedGenericDefault<i32>: ChainedGenericDefault<number, number>\nChainedGenericDefault<String, i32>: ChainedGenericDefault<string, number>\nGenericDefaultSkipped: GenericDefaultSkipped<string>\nGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>\nGenericParameterOrderPreserved: GenericParameterOrderPreserved\nConstGenericInNonConstContainer: ConstGenericInNonConstContainer\nConstGenericInConstContainer: ConstGenericInConstContainer\nNamedConstGenericContainer: NamedConstGenericContainer\nInlineConstGenericContainer: InlineConstGenericContainer\nInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer\nTestCollectionRegister: TestCollectionRegister\nTestCollectionRegister: TestCollectionRegister\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__reference-serde_phases.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nIssue374: Issue374_Serialize\nOptional: Optional_Serialize\nStructPhaseSpecificRename: StructPhaseSpecificRenameSerialize\nRange<i32>: Range<number>\nRangeInclusive<i32>: RangeInclusive<number>\nString: string\nPathBuf: string\nIpAddr: string\nIpv4Addr: string\nIpv6Addr: string\nSocketAddr: string\nSocketAddrV4: string\nSocketAddrV6: string\nCow<'static, str>: string\nCow<'static, i32>: number\nVec<i32>: number[]\nVec<MyEnum>: MyEnum[]\nResult<String, i32>: Result<string, number>\nVec<Option<Cow<'static, i32>>>: (number | null)[]\nPhantomData<()>: null\nPhantomData<String>: null\nInfallible: never\nUnit1: Unit1\nUnit2: Unit2\nUnit3: Unit3\nUnit4: Unit4\nUnit5: Unit5\nUnit6: Unit6\nUnit7: Unit7\nSimpleStruct: SimpleStruct\nTupleStruct1: TupleStruct1\nTupleStruct3: TupleStruct3\nTestEnum: TestEnum\nRefStruct: RefStruct\nInlinerStruct: InlinerStruct\nGenericStruct<i32>: GenericStruct<number>\nGenericStruct<String>: GenericStruct<string>\nFlattenEnumStruct: FlattenEnumStruct\nOverridenStruct: OverridenStruct\nHasGenericAlias: HasGenericAlias\nEnumMacroAttributes: EnumMacroAttributes\nInlineEnumField: InlineEnumField\nInlineOptionalType: InlineOptionalType\nRename: Rename\nTransparentType: TransparentType\nTransparentType2: TransparentType2\nTransparentTypeWithOverride: TransparentTypeWithOverride\nHashMap<BasicEnum, ()>: Partial<{ [key in BasicEnum]: null }>\nHashMap<BasicEnum, i32>: Partial<{ [key in BasicEnum]: number }>\nVec<PlaceholderInnerField>: PlaceholderInnerField[]\nEnumReferenceRecordKey: EnumReferenceRecordKey\nFlattenOnNestedEnum: FlattenOnNestedEnum\nMyEmptyInput: MyEmptyInput\n(String): string\nExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant\nExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct\nVec<MyEnum>: MyEnum[]\nInlineTuple: InlineTuple\nInlineTuple2: InlineTuple2\nBox<str>: string\nBox<String>: string\nSkippedFieldWithinVariant: SkippedFieldWithinVariant\nKebabCase: KebabCase\nIssue281<'_>: Issue281\nLifetimeGenericStruct<'_, i32>: LifetimeGenericStruct<number>\nLifetimeGenericEnum<'_, i32>: LifetimeGenericEnum<number>\nRenameWithWeirdCharsField: RenameWithWeirdCharsField\nRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant\nRenamedFieldKeys: RenamedFieldKeys\nRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload\ntype_type::Type: Type\nActualType: ActualType\nSpectaTypeOverride: SpectaTypeOverride\nContainerTypeOverrideStruct: ContainerTypeOverrideStruct\nContainerTypeOverrideEnum: ContainerTypeOverrideEnum\nContainerTypeOverrideGeneric<Box<dyn Any>>: ContainerTypeOverrideGeneric\nContainerTypeOverrideToGeneric<i32>: ContainerTypeOverrideToGeneric<number>\nContainerTypeOverrideTuple: ContainerTypeOverrideTuple\nContainerTypeOverrideTupleGeneric<i32>: ContainerTypeOverrideTupleGeneric<number>\nInvalidToValidType: InvalidToValidType\nTupleStruct: TupleStruct\nTupleStructWithRep: TupleStructWithRep\nGenericTupleStruct<String>: GenericTupleStruct<string>\nBracedStruct: BracedStruct\nStruct: StructNew\nStruct2: Struct2\nEnum: Enum\nEnum2: Enum2\nEnum3: Enum3\nStructRenameAllUppercase: StructRenameAllUppercase\nRenameSerdeSpecialChar: RenameSerdeSpecialChar\nEnumRenameAllUppercase: EnumRenameAllUppercase\nRecursive: Recursive\nRecursiveMapValue: RecursiveMapValue\nRecursiveTransparent: RecursiveTransparent\nRecursiveInEnum: RecursiveInEnum\nNonOptional: NonOptional\nOptionalOnNamedField: OptionalOnNamedField\nOptionalOnTransparentNamedField: OptionalOnTransparentNamedField\nOptionalInEnum: OptionalInEnum\nUntaggedVariants: UntaggedVariants\nUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue\nUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches\nHashMap<String, ()>: { [key in string]: null }\nRegular: Regular\nHashMap<Infallible, ()>: { [key in never]: null }\nHashMap<TransparentStruct, ()>: { [key in TransparentStruct]: null }\nHashMap<UnitVariants, ()>: Partial<{ [key in UnitVariants]: null }>\nHashMap<UntaggedVariantsKey, ()>: Partial<{ [key in UntaggedVariantsKey]: null }>\nValidMaybeValidKey: ValidMaybeValidKey\nValidMaybeValidKeyNested: ValidMaybeValidKeyNested\nMacroStruct: MacroStruct\nMacroStruct2: MacroStruct2\nMacroEnum: MacroEnum\nDeprecatedType: DeprecatedType\nDeprecatedTypeWithMsg: DeprecatedTypeWithMsg\nDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2\nDeprecatedFields: DeprecatedFields\nDeprecatedTupleVariant: DeprecatedTupleVariant\nDeprecatedEnumVariants: DeprecatedEnumVariants\nCommentedStruct: CommentedStruct\nCommentedEnum: CommentedEnum\nSingleLineComment: SingleLineComment\nNonGeneric: Demo<number, boolean>\nHalfGenericA<u8>: Demo<number, boolean>\nHalfGenericB<bool>: Demo<number, boolean>\nFullGeneric<u8, bool>: Demo<number, boolean>\nAnother<bool>: Demo<number, boolean>\nMapA<u32>: { [key in string]: number }\nMapB<u32>: { [key in number]: string }\nMapC<u32>: { [key in string]: AGenericStruct<number> }\nAGenericStruct<u32>: AGenericStruct<number>\nA: A\nDoubleFlattened: DoubleFlattened\nFlattenedInner: FlattenedInner\nBoxFlattened: BoxFlattened\nBoxInline: BoxInline\nFirst: First\nSecond: Second\nThird: Third\nFourth: Fourth\nTagOnStructWithInline: TagOnStructWithInline\nSixth: Sixth\nSeventh: Seventh\nEight: Eight\nNinth: Ninth\nTenth: Tenth\nMyEnumTagged: MyEnumTagged\nMyEnumExternal: MyEnumExternal\nMyEnumAdjacent: MyEnumAdjacent\nMyEnumUntagged: MyEnumUntagged\nEmptyStruct: EmptyStruct\nEmptyStructWithTag: EmptyStructWithTag\nAdjacentlyTagged: AdjacentlyTagged\nLoadProjectEvent: LoadProjectEvent\nExternallyTagged: ExternallyTagged\nIssue221External: Issue221External\nInternallyTaggedD: InternallyTaggedD\nInternallyTaggedE: InternallyTaggedE\nInternallyTaggedF: InternallyTaggedF\nInternallyTaggedH: InternallyTaggedH\nInternallyTaggedL: InternallyTaggedL\nInternallyTaggedM: InternallyTaggedM\nStructWithAlias: StructWithAlias\nStructWithMultipleAliases: StructWithMultipleAliases\nStructWithAliasAndRename: StructWithAliasAndRename\nEnumWithVariantAlias: EnumWithVariantAlias\nEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases\nEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename\nInternallyTaggedWithAlias: InternallyTaggedWithAlias\nAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias\nUntaggedWithAlias: UntaggedWithAlias\nIssue221UntaggedSafe: Issue221UntaggedSafe\nIssue221UntaggedMixed: Issue221UntaggedMixed\nEmptyEnum: EmptyEnum\nEmptyEnumTagged: EmptyEnumTagged\nEmptyEnumTaggedWContent: EmptyEnumTaggedWContent\nEmptyEnumUntagged: EmptyEnumUntagged\nSkipOnlyField: SkipOnlyField\nSkipField: SkipField\nSkipVariant: SkipVariant\nSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant\nSkipNamedFieldInVariant: SkipNamedFieldInVariant\nTransparentWithSkip: TransparentWithSkip\nTransparentWithSkip2: TransparentWithSkip2\nTransparentWithSkip3: TransparentWithSkip3\nSkipVariant2: SkipVariant2\nSkipVariant3: SkipVariant3\nSkipStructFields: SkipStructFields\nSpectaSkipNonTypeField: SpectaSkipNonTypeField\nFlattenA: FlattenA\nFlattenB: FlattenB\nFlattenC: FlattenC\nFlattenD: FlattenD\nFlattenE: FlattenE\nFlattenF: FlattenF\nFlattenG: FlattenG\nTupleNested: TupleNested\nGeneric1<()>: Generic1<null>\nGenericAutoBound<()>: GenericAutoBound<null>\nGenericAutoBound2<()>: GenericAutoBound2<null>\nContainer1: Container1\nGeneric2<(), String, i32>: Generic2<null, string, number>\nGenericNewType1<()>: GenericNewType1<null>\nGenericTuple<()>: GenericTuple<null>\nGenericStruct2<()>: GenericStruct2<null>\nInlineGenericNewtype<String>: string\nInlineGenericNested<String>: [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }]\nInlineFlattenGenericsG<()>: InlineFlattenGenericsG<null>\nInlineFlattenGenerics: InlineFlattenGenerics\nGenericDefault: GenericDefault\nChainedGenericDefault: ChainedGenericDefault\nChainedGenericDefault<String, String>: ChainedGenericDefault\nChainedGenericDefault<i32>: ChainedGenericDefault<number, number>\nChainedGenericDefault<String, i32>: ChainedGenericDefault<string, number>\nGenericDefaultSkipped: GenericDefaultSkipped<string>\nGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>\nGenericParameterOrderPreserved: GenericParameterOrderPreserved\nConstGenericInNonConstContainer: ConstGenericInNonConstContainer\nConstGenericInConstContainer: ConstGenericInConstContainer\nNamedConstGenericContainer: NamedConstGenericContainer\nInlineConstGenericContainer: InlineConstGenericContainer\nInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer\nTestCollectionRegister: TestCollectionRegister\nTestCollectionRegister: TestCollectionRegister\nspecta_typescript::Any: any\nspecta_typescript::Any<String>: any\nspecta_typescript::Unknown: unknown\nspecta_typescript::Unknown<String>: unknown\nspecta_typescript::Never: never\nspecta_typescript::Never<String>: never\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-raw.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: \"Typescript::default().export(&types, format).unwrap()\"\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nexport type ActualType = {\n\ta: GenericType<string>,\n};\n\nexport type AdjacentlyTagged = \"A\" | { id: string; method: string } | string;\n\nexport type AdjacentlyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type B = {\n\tb: number,\n};\n\nexport type BasicEnum = \"A\" | \"B\";\n\nexport type BoxFlattened = {\n\tb: BoxedInner,\n};\n\nexport type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type BoxedInner = {\n\ta: number,\n};\n\nexport type BracedStruct = string;\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nnumber | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n{ \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\na: number };\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nexport type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nexport type ContainerTypeOverrideEnum = string;\n\nexport type ContainerTypeOverrideGeneric = string;\n\nexport type ContainerTypeOverrideStruct = string;\n\nexport type ContainerTypeOverrideToGeneric<T> = T;\n\nexport type ContainerTypeOverrideTuple = [string, number];\n\nexport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type D = {\n\tflattened: number,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nexport type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\n/**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nexport type Eight = string | \"B\";\n\nexport type EmptyEnum = never;\n\nexport type EmptyEnumTagged = never;\n\nexport type EmptyEnumTaggedWContent = never;\n\nexport type EmptyEnumUntagged = never;\n\nexport type EmptyStruct = Record<string, never>;\n\nexport type EmptyStructWithTag = Record<string, never>;\n\nexport type Enum = \"A\" | \"B\";\n\nexport type Enum2 = \"A\" | \"B\" | { enum_field: null };\n\nexport type Enum3 = { a: string };\n\nexport type EnumMacroAttributes = string | number | { a: string; b: number };\n\nexport type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nexport type EnumRenameAllUppercase = \"HelloWorld\" | \"VariantB\" | \"TestingWords\";\n\nexport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAliasAndRename = \"Variant\" | \"Other\";\n\nexport type ExternallyTagged = \"A\" | { id: string; method: string } | string;\n\nexport type ExtraBracketsInTupleVariant = string;\n\nexport type ExtraBracketsInUnnamedStruct = string;\n\nexport type First = {\n\ta: string,\n};\n\nexport type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type FlattenB = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenC = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenE = {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nexport type FlattenEnum = \"One\" | \"Two\" | \"Three\";\n\nexport type FlattenEnumStruct = {\n\touter: string,\n\tinner: FlattenEnum,\n};\n\nexport type FlattenF = {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nexport type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nexport type FlattenOnNestedEnum = {\n\tid: string,\n\tresult: NestedEnum,\n};\n\nexport type FlattenedInner = {\n\tc: Inner,\n};\n\nexport type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type Generic2<A, B, C> = A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][];\n\nexport type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type GenericFlattened<T> = {\n\tgeneric_flattened: T,\n};\n\nexport type GenericNewType1<T> = T[][];\n\nexport type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type GenericTuple<T> = [T, T[], T[][]];\n\nexport type GenericTupleStruct<T> = T;\n\nexport type GenericType<T> = \"Undefined\" | T;\n\nexport type HasGenericAlias = { [key in number]: string };\n\nexport type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type InlineEnumField = {\n\ta: string,\n};\n\nexport type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n\tt: InlineFlattenGenericsG<string>,\n};\n\nexport type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type InlineRecursiveConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number, number],\n\te: InlineRecursiveConstGeneric,\n};\n\nexport type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type InlineStruct = {\n\tref_struct: SimpleStruct,\n\tval: number,\n};\n\nexport type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nexport type Inner = {\n\ta: number,\n\tb: FlattenedInner,\n};\n\nexport type InternallyTaggedD = { [key in string]: string };\n\nexport type InternallyTaggedE = null;\n\nexport type InternallyTaggedF = InternallyTaggedFInner;\n\nexport type InternallyTaggedFInner = null;\n\nexport type InternallyTaggedH = InternallyTaggedHInner;\n\nexport type InternallyTaggedHInner = null;\n\nexport type InternallyTaggedL = \"A\" | \"B\";\n\nexport type InternallyTaggedLInner = \"A\" | \"B\";\n\nexport type InternallyTaggedM = \"A\" | \"B\";\n\nexport type InternallyTaggedMInner = \"A\" | \"B\";\n\nexport type InternallyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type InvalidToValidType = {\n\tcause: null,\n};\n\nexport type Issue221External = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nexport type KebabCase = {\n\ttest_ing: string,\n};\n\nexport type LifetimeGenericEnum<T> = T;\n\nexport type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type LoadProjectEvent = ({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number };\n\nexport type MacroEnum = string | { demo2: string };\n\nexport type MacroStruct = string;\n\nexport type MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type MaybeValidKey<T> = T;\n\nexport type MyEmptyInput = Record<string, never>;\n\nexport type MyEnum = string | number;\n\nexport type MyEnumAdjacent = { inner: First };\n\nexport type MyEnumExternal = { inner: First };\n\nexport type MyEnumTagged = { inner: First };\n\nexport type MyEnumUntagged = { inner: First };\n\nexport type NamedConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type NestedEnum = string | number;\n\nexport type Ninth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type NonOptional = string | null;\n\nexport type OptionalInEnum = string | null | { a: string | null } | { a?: string | null };\n\nexport type OptionalOnNamedField = string | null;\n\nexport type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type Pair<Z, A> = {\n\tfirst: Z,\n\tsecond: A,\n};\n\nexport type PlaceholderInnerField = {\n\ta: string,\n};\n\nexport type Primitives = {\n\ti8: number,\n\ti16: number,\n\ti32: number,\n\tu8: number,\n\tu16: number,\n\tu32: number,\n\tf32: number,\n\tf64: number,\n\tbool: boolean,\n\tchar: string,\n\t\"Range<i32>\": Range<number>,\n\t\"RangeInclusive<i32>\": RangeInclusive<number>,\n\t\"()\": null,\n\t\"(String, i32)\": [string, number],\n\t\"(String, i32, bool)\": [string, number, boolean],\n\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\tString: string,\n\tPathBuf: string,\n\tIpAddr: string,\n\tIpv4Addr: string,\n\tIpv6Addr: string,\n\tSocketAddr: string,\n\tSocketAddrV4: string,\n\tSocketAddrV6: string,\n\t\"Cow<'static, str>\": string,\n\t\"Cow<'static, i32>\": number,\n\t\"&'static str\": string,\n\t\"&'static bool\": boolean,\n\t\"&'static i32\": number,\n\t\"Vec<i32>\": number[],\n\t\"&'static [i32]\": number[],\n\t\"&'static [i32; 3]\": [number, number, number],\n\t\"[i32; 3]\": [number, number, number],\n\t\"Vec<MyEnum>\": MyEnum[],\n\t\"&'static [MyEnum]\": MyEnum[],\n\t\"&'static [MyEnum; 6]\": [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum],\n\t\"[MyEnum; 2]\": [MyEnum, MyEnum],\n\t\"&'static [i32; 1]\": [number],\n\t\"&'static [i32; 0]\": [],\n\t\"Option<i32>\": number | null,\n\t\"Option<()>\": null,\n\t\"Option<Vec<i32>>\": number[] | null,\n\t\"Result<String, i32>\": Result<string, number>,\n\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\"Option<Option<String>>\": string | null,\n\t\"Option<Option<Option<String>>>\": string | null,\n\t\"PhantomData<()>\": null,\n\t\"PhantomData<String>\": null,\n\tInfallible: never,\n\tUnit1: Unit1,\n\tUnit2: Unit2,\n\tUnit3: Unit3,\n\tUnit4: Unit4,\n\tUnit5: Unit5,\n\tUnit6: Unit6,\n\tUnit7: Unit7,\n\tSimpleStruct: SimpleStruct,\n\tTupleStruct1: TupleStruct1,\n\tTupleStruct3: TupleStruct3,\n\tTestEnum: TestEnum,\n\tRefStruct: RefStruct,\n\tInlinerStruct: InlinerStruct,\n\t\"GenericStruct<i32>\": GenericStruct<number>,\n\t\"GenericStruct<String>\": GenericStruct<string>,\n\tFlattenEnumStruct: FlattenEnumStruct,\n\tOverridenStruct: OverridenStruct,\n\tHasGenericAlias: HasGenericAlias,\n\tEnumMacroAttributes: EnumMacroAttributes,\n\tInlineEnumField: InlineEnumField,\n\tInlineOptionalType: InlineOptionalType,\n\tRename: Rename,\n\tTransparentType: TransparentType,\n\tTransparentType2: TransparentType2,\n\tTransparentTypeWithOverride: TransparentTypeWithOverride,\n\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in BasicEnum]: null }>,\n\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in BasicEnum]: number }>,\n\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\"Vec<PlaceholderInnerField>\": PlaceholderInnerField[],\n\tEnumReferenceRecordKey: EnumReferenceRecordKey,\n\tFlattenOnNestedEnum: FlattenOnNestedEnum,\n\tMyEmptyInput: MyEmptyInput,\n\t\"(String)\": string,\n\t\"(String,)\": [string],\n\tExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant,\n\tExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct,\n\t\"Vec<MyEnum>\": MyEnum[],\n\tInlineTuple: InlineTuple,\n\tInlineTuple2: InlineTuple2,\n\t\"Box<str>\": string,\n\t\"Box<String>\": string,\n\tSkippedFieldWithinVariant: SkippedFieldWithinVariant,\n\tKebabCase: KebabCase,\n\t\"&[&str]\": string[],\n\t\"Issue281<'_>\": Issue281,\n\t\"LifetimeGenericStruct<'_, i32>\": LifetimeGenericStruct<number>,\n\t\"LifetimeGenericEnum<'_, i32>\": LifetimeGenericEnum<number>,\n\tRenameWithWeirdCharsField: RenameWithWeirdCharsField,\n\tRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant,\n\tRenamedFieldKeys: RenamedFieldKeys,\n\tRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload,\n\t\"type_type::Type\": Type,\n\tActualType: ActualType,\n\tSpectaTypeOverride: SpectaTypeOverride,\n\tContainerTypeOverrideStruct: ContainerTypeOverrideStruct,\n\tContainerTypeOverrideEnum: ContainerTypeOverrideEnum,\n\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": ContainerTypeOverrideGeneric,\n\t\"ContainerTypeOverrideToGeneric<i32>\": ContainerTypeOverrideToGeneric<number>,\n\tContainerTypeOverrideTuple: ContainerTypeOverrideTuple,\n\t\"ContainerTypeOverrideTupleGeneric<i32>\": ContainerTypeOverrideTupleGeneric<number>,\n\tInvalidToValidType: InvalidToValidType,\n\tTupleStruct: TupleStruct,\n\tTupleStructWithRep: TupleStructWithRep,\n\t\"GenericTupleStruct<String>\": GenericTupleStruct<string>,\n\tBracedStruct: BracedStruct,\n\tStruct: Struct,\n\tStruct2: Struct2,\n\tEnum: Enum,\n\tEnum2: Enum2,\n\tEnum3: Enum3,\n\tStructRenameAllUppercase: StructRenameAllUppercase,\n\tRenameSerdeSpecialChar: RenameSerdeSpecialChar,\n\tEnumRenameAllUppercase: EnumRenameAllUppercase,\n\tRecursive: Recursive,\n\tRecursiveMapValue: RecursiveMapValue,\n\tRecursiveTransparent: RecursiveTransparent,\n\tRecursiveInEnum: RecursiveInEnum,\n\tNonOptional: NonOptional,\n\tOptionalOnNamedField: OptionalOnNamedField,\n\tOptionalOnTransparentNamedField: OptionalOnTransparentNamedField,\n\tOptionalInEnum: OptionalInEnum,\n\tUntaggedVariants: UntaggedVariants,\n\tUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue,\n\tUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches,\n\t\"HashMap<String, ()>\": { [key in string]: null },\n\tRegular: Regular,\n\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\"HashMap<TransparentStruct, ()>\": { [key in TransparentStruct]: null },\n\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in UnitVariants]: null }>,\n\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in UntaggedVariantsKey]: null }>,\n\tValidMaybeValidKey: ValidMaybeValidKey,\n\tValidMaybeValidKeyNested: ValidMaybeValidKeyNested,\n\tMacroStruct: MacroStruct,\n\tMacroStruct2: MacroStruct2,\n\tMacroEnum: MacroEnum,\n\tDeprecatedType: DeprecatedType,\n\tDeprecatedTypeWithMsg: DeprecatedTypeWithMsg,\n\tDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2,\n\tDeprecatedFields: DeprecatedFields,\n\tDeprecatedTupleVariant: DeprecatedTupleVariant,\n\tDeprecatedEnumVariants: DeprecatedEnumVariants,\n\tCommentedStruct: CommentedStruct,\n\tCommentedEnum: CommentedEnum,\n\tSingleLineComment: SingleLineComment,\n\tNonGeneric: Demo<number, boolean>,\n\t\"HalfGenericA<u8>\": Demo<number, boolean>,\n\t\"HalfGenericB<bool>\": Demo<number, boolean>,\n\t\"FullGeneric<u8, bool>\": Demo<number, boolean>,\n\t\"Another<bool>\": Demo<number, boolean>,\n\t\"MapA<u32>\": { [key in string]: number },\n\t\"MapB<u32>\": { [key in number]: string },\n\t\"MapC<u32>\": { [key in string]: AGenericStruct<number> },\n\t\"AGenericStruct<u32>\": AGenericStruct<number>,\n\tA: A,\n\tDoubleFlattened: DoubleFlattened,\n\tFlattenedInner: FlattenedInner,\n\tBoxFlattened: BoxFlattened,\n\tBoxInline: BoxInline,\n\tFirst: First,\n\tSecond: Second,\n\tThird: Third,\n\tFourth: Fourth,\n\tTagOnStructWithInline: TagOnStructWithInline,\n\tSixth: Sixth,\n\tSeventh: Seventh,\n\tEight: Eight,\n\tNinth: Ninth,\n\tTenth: Tenth,\n\tMyEnumTagged: MyEnumTagged,\n\tMyEnumExternal: MyEnumExternal,\n\tMyEnumAdjacent: MyEnumAdjacent,\n\tMyEnumUntagged: MyEnumUntagged,\n\tEmptyStruct: EmptyStruct,\n\tEmptyStructWithTag: EmptyStructWithTag,\n\tAdjacentlyTagged: AdjacentlyTagged,\n\tLoadProjectEvent: LoadProjectEvent,\n\tExternallyTagged: ExternallyTagged,\n\tIssue221External: Issue221External,\n\tInternallyTaggedD: InternallyTaggedD,\n\tInternallyTaggedE: InternallyTaggedE,\n\tInternallyTaggedF: InternallyTaggedF,\n\tInternallyTaggedH: InternallyTaggedH,\n\tInternallyTaggedL: InternallyTaggedL,\n\tInternallyTaggedM: InternallyTaggedM,\n\tStructWithAlias: StructWithAlias,\n\tStructWithMultipleAliases: StructWithMultipleAliases,\n\tStructWithAliasAndRename: StructWithAliasAndRename,\n\tEnumWithVariantAlias: EnumWithVariantAlias,\n\tEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases,\n\tEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename,\n\tInternallyTaggedWithAlias: InternallyTaggedWithAlias,\n\tAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias,\n\tUntaggedWithAlias: UntaggedWithAlias,\n\tIssue221UntaggedSafe: Issue221UntaggedSafe,\n\tIssue221UntaggedMixed: Issue221UntaggedMixed,\n\tEmptyEnum: EmptyEnum,\n\tEmptyEnumTagged: EmptyEnumTagged,\n\tEmptyEnumTaggedWContent: EmptyEnumTaggedWContent,\n\tEmptyEnumUntagged: EmptyEnumUntagged,\n\tSkipOnlyField: SkipOnlyField,\n\tSkipField: SkipField,\n\tSkipVariant: SkipVariant,\n\tSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant,\n\tSkipNamedFieldInVariant: SkipNamedFieldInVariant,\n\tTransparentWithSkip: TransparentWithSkip,\n\tTransparentWithSkip2: TransparentWithSkip2,\n\tTransparentWithSkip3: TransparentWithSkip3,\n\tSkipVariant2: SkipVariant2,\n\tSkipVariant3: SkipVariant3,\n\tSkipStructFields: SkipStructFields,\n\tSpectaSkipNonTypeField: SpectaSkipNonTypeField,\n\tFlattenA: FlattenA,\n\tFlattenB: FlattenB,\n\tFlattenC: FlattenC,\n\tFlattenD: FlattenD,\n\tFlattenE: FlattenE,\n\tFlattenF: FlattenF,\n\tFlattenG: FlattenG,\n\tTupleNested: TupleNested,\n\t\"Generic1<()>\": Generic1<null>,\n\t\"GenericAutoBound<()>\": GenericAutoBound<null>,\n\t\"GenericAutoBound2<()>\": GenericAutoBound2<null>,\n\tContainer1: Container1,\n\t\"Generic2<(), String, i32>\": Generic2<null, string, number>,\n\t\"GenericNewType1<()>\": GenericNewType1<null>,\n\t\"GenericTuple<()>\": GenericTuple<null>,\n\t\"GenericStruct2<()>\": GenericStruct2<null>,\n\t\"InlineGenericNewtype<String>\": string,\n\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }],\n\t\"InlineFlattenGenericsG<()>\": InlineFlattenGenericsG<null>,\n\tInlineFlattenGenerics: InlineFlattenGenerics,\n\tGenericDefault: GenericDefault,\n\tChainedGenericDefault: ChainedGenericDefault,\n\t\"ChainedGenericDefault<String, String>\": ChainedGenericDefault,\n\t\"ChainedGenericDefault<i32>\": ChainedGenericDefault<number, number>,\n\t\"ChainedGenericDefault<String, i32>\": ChainedGenericDefault<string, number>,\n\tGenericDefaultSkipped: GenericDefaultSkipped<string>,\n\tGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>,\n\tGenericParameterOrderPreserved: GenericParameterOrderPreserved,\n\tConstGenericInNonConstContainer: ConstGenericInNonConstContainer,\n\tConstGenericInConstContainer: ConstGenericInConstContainer,\n\tNamedConstGenericContainer: NamedConstGenericContainer,\n\tInlineConstGenericContainer: InlineConstGenericContainer,\n\tInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer,\n\tTestCollectionRegister: TestCollectionRegister,\n\tTestCollectionRegister: TestCollectionRegister,\n};\n\nexport type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type Recursive = {\n\tdemo: Recursive,\n};\n\nexport type RecursiveInEnum = { demo: RecursiveInEnum };\n\nexport type RecursiveInline = {\n\tdemo: RecursiveInline,\n};\n\nexport type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nexport type RecursiveTransparent = RecursiveInline;\n\nexport type RefStruct = TestEnum;\n\nexport type Regular = { [key in string]: null };\n\nexport type Rename = \"OneWord\" | \"TwoWords\";\n\nexport type RenameSerdeSpecialChar = {\n\tb: number,\n};\n\nexport type RenameWithWeirdCharsField = {\n\todata_context: string,\n};\n\nexport type RenameWithWeirdCharsVariant = string;\n\nexport type RenamedFieldKeys = {\n\tempty: string,\n\tquote: string,\n\tbackslash: string,\n\tnewline: string,\n\tline_separator: string,\n\tparagraph_separator: string,\n};\n\nexport type RenamedVariantWithSkippedPayload = never;\n\nexport type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type Second = {\n\ta: number,\n};\n\nexport type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nexport type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\n/**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\nnumber | \n/**  Some single-line comment */\n{ \n/**  Some single-line comment */\na: number };\n\nexport type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nexport type SkipField = {\n\tb: number,\n};\n\nexport type SkipNamedFieldInVariant = Record<string, never> | { b: number };\n\nexport type SkipOnlyField = Record<string, never>;\n\nexport type SkipStructFields = {\n\ta: number,\n};\n\nexport type SkipUnnamedFieldInVariant = never | [number];\n\nexport type SkipVariant = string;\n\nexport type SkipVariant2 = string;\n\nexport type SkipVariant3 = { a: string };\n\nexport type SkippedFieldWithinVariant = never | string;\n\nexport type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type Struct = {\n\ta: string,\n};\n\nexport type Struct2 = {\n\ta: string,\n};\n\nexport type StructRenameAllUppercase = {\n\ta: number,\n\tb: number,\n};\n\nexport type StructWithAlias = {\n\tfield: string,\n};\n\nexport type StructWithAliasAndRename = {\n\tfield: string,\n};\n\nexport type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type TagOnStructWithInline = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type TestCollectionRegister = never;\n\nexport type TestEnum = \"Unit\" | number | [number, number] | { a: number };\n\nexport type Third = {\n\ta: First,\n\tb: { [key in string]: string },\n\tc: First,\n};\n\nexport type ToBeFlattened = {\n\ta: string,\n};\n\nexport type TransparentStruct = string;\n\nexport type TransparentType = TransparentTypeInner;\n\nexport type TransparentType2 = null;\n\nexport type TransparentTypeInner = {\n\tinner: string,\n};\n\nexport type TransparentTypeWithOverride = string;\n\nexport type TransparentWithSkip = null;\n\nexport type TransparentWithSkip2 = string;\n\nexport type TransparentWithSkip3 = string;\n\nexport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type TupleStruct = string;\n\nexport type TupleStruct1 = number;\n\nexport type TupleStruct3 = [number, boolean, string];\n\nexport type TupleStructWithRep = string;\n\nexport type Type = never;\n\nexport type Unit1 = null;\n\nexport type Unit2 = Record<string, never>;\n\nexport type Unit3 = [];\n\nexport type Unit4 = null;\n\nexport type Unit5 = \"A\";\n\nexport type Unit6 = [];\n\nexport type Unit7 = Record<string, never>;\n\nexport type UnitVariants = \"A\" | \"B\" | \"C\";\n\nexport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type UntaggedVariantsKey = string | number;\n\nexport type UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nexport type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-serde.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: \"Typescript::default().export(&types, format).unwrap()\"\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nexport type ActualType = {\n\ta: GenericType<string>,\n};\n\nexport type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nexport type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nexport type B = {\n\tb: number,\n};\n\nexport type BasicEnum = \"A\" | \"B\";\n\nexport type BoxFlattened = BoxedInner;\n\nexport type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type BoxedInner = {\n\ta: number,\n};\n\nexport type BracedStruct = string;\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nexport type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nexport type ContainerTypeOverrideEnum = string;\n\nexport type ContainerTypeOverrideGeneric = string;\n\nexport type ContainerTypeOverrideStruct = string;\n\nexport type ContainerTypeOverrideToGeneric<T> = T;\n\nexport type ContainerTypeOverrideTuple = [string, number];\n\nexport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type D = {\n\tflattened: number,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nexport type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\n/**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nexport type Eight = { A: string } | \"B\";\n\nexport type EmptyEnum = never;\n\nexport type EmptyEnumTagged = never;\n\nexport type EmptyEnumTaggedWContent = never;\n\nexport type EmptyEnumUntagged = never;\n\nexport type EmptyStruct = Record<string, never>;\n\nexport type EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nexport type Enum = { t: \"A\" } | { t: \"B\" };\n\nexport type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nexport type Enum3 = { t: \"A\"; b: string };\n\nexport type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nexport type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nexport type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nexport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nexport type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nexport type ExtraBracketsInTupleVariant = { A: string };\n\nexport type ExtraBracketsInUnnamedStruct = string;\n\nexport type First = {\n\ta: string,\n};\n\nexport type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type FlattenB = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenC = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n\nexport type FlattenEnumStruct = {\n\touter: string,\n} & FlattenEnum;\n\nexport type FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nexport type FlattenOnNestedEnum = {\n\tid: string,\n} & NestedEnum;\n\nexport type FlattenedInner = Inner;\n\nexport type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nexport type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type GenericFlattened<T> = {\n\tgeneric_flattened: T,\n};\n\nexport type GenericNewType1<T> = T[][];\n\nexport type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type GenericTuple<T> = [T, T[], T[][]];\n\nexport type GenericTupleStruct<T> = T;\n\nexport type GenericType<T> = \"Undefined\" | T;\n\nexport type HasGenericAlias = { [key in number]: string };\n\nexport type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type InlineEnumField = { A: {\n\ta: string,\n} };\n\nexport type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & InlineFlattenGenericsG<string>;\n\nexport type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type InlineRecursiveConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number, number],\n\te: InlineRecursiveConstGeneric,\n};\n\nexport type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type InlineStruct = {\n\tref_struct: SimpleStruct,\n\tval: number,\n};\n\nexport type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nexport type Inner = {\n\ta: number,\n} & FlattenedInner;\n\nexport type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nexport type InternallyTaggedE = { type: \"A\" };\n\nexport type InternallyTaggedF = { type: \"A\" };\n\nexport type InternallyTaggedFInner = null;\n\nexport type InternallyTaggedH = { type: \"A\" };\n\nexport type InternallyTaggedHInner = null;\n\nexport type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedM = { type: \"A\" };\n\nexport type InternallyTaggedMInner = \"A\" | \"B\";\n\nexport type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nexport type InvalidToValidType = {\n\tcause: null,\n};\n\nexport type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nexport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nexport type KebabCase = {\n\t\"test-ing\": string,\n};\n\nexport type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nexport type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nexport type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\nexport type MacroStruct = string;\n\nexport type MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type MaybeValidKey<T> = T;\n\nexport type MyEmptyInput = Record<string, never>;\n\nexport type MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n\nexport type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: First,\n} };\n\nexport type MyEnumExternal = { Variant: {\n\tinner: First,\n} };\n\nexport type MyEnumTagged = { type: \"Variant\"; inner: First };\n\nexport type MyEnumUntagged = { inner: First };\n\nexport type NamedConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n\nexport type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First };\n\nexport type NonOptional = string | null;\n\nexport type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nexport type OptionalOnNamedField = string | null;\n\nexport type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type Pair<Z, A> = {\n\tfirst: Z,\n\tsecond: A,\n};\n\nexport type PlaceholderInnerField = {\n\ta: string,\n};\n\nexport type Primitives = {\n\ti8: number,\n\ti16: number,\n\ti32: number,\n\tu8: number,\n\tu16: number,\n\tu32: number,\n\tf32: number,\n\tf64: number,\n\tbool: boolean,\n\tchar: string,\n\t\"Range<i32>\": Range<number>,\n\t\"RangeInclusive<i32>\": RangeInclusive<number>,\n\t\"()\": null,\n\t\"(String, i32)\": [string, number],\n\t\"(String, i32, bool)\": [string, number, boolean],\n\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\tString: string,\n\tPathBuf: string,\n\tIpAddr: string,\n\tIpv4Addr: string,\n\tIpv6Addr: string,\n\tSocketAddr: string,\n\tSocketAddrV4: string,\n\tSocketAddrV6: string,\n\t\"Cow<'static, str>\": string,\n\t\"Cow<'static, i32>\": number,\n\t\"&'static str\": string,\n\t\"&'static bool\": boolean,\n\t\"&'static i32\": number,\n\t\"Vec<i32>\": number[],\n\t\"&'static [i32]\": number[],\n\t\"&'static [i32; 3]\": [number, number, number],\n\t\"[i32; 3]\": [number, number, number],\n\t\"Vec<MyEnum>\": MyEnum[],\n\t\"&'static [MyEnum]\": MyEnum[],\n\t\"&'static [MyEnum; 6]\": [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum],\n\t\"[MyEnum; 2]\": [MyEnum, MyEnum],\n\t\"&'static [i32; 1]\": [number],\n\t\"&'static [i32; 0]\": [],\n\t\"Option<i32>\": number | null,\n\t\"Option<()>\": null,\n\t\"Option<Vec<i32>>\": number[] | null,\n\t\"Result<String, i32>\": Result<string, number>,\n\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\"Option<Option<String>>\": string | null,\n\t\"Option<Option<Option<String>>>\": string | null,\n\t\"PhantomData<()>\": null,\n\t\"PhantomData<String>\": null,\n\tInfallible: never,\n\tUnit1: Unit1,\n\tUnit2: Unit2,\n\tUnit3: Unit3,\n\tUnit4: Unit4,\n\tUnit5: Unit5,\n\tUnit6: Unit6,\n\tUnit7: Unit7,\n\tSimpleStruct: SimpleStruct,\n\tTupleStruct1: TupleStruct1,\n\tTupleStruct3: TupleStruct3,\n\tTestEnum: TestEnum,\n\tRefStruct: RefStruct,\n\tInlinerStruct: InlinerStruct,\n\t\"GenericStruct<i32>\": GenericStruct<number>,\n\t\"GenericStruct<String>\": GenericStruct<string>,\n\tFlattenEnumStruct: FlattenEnumStruct,\n\tOverridenStruct: OverridenStruct,\n\tHasGenericAlias: HasGenericAlias,\n\tEnumMacroAttributes: EnumMacroAttributes,\n\tInlineEnumField: InlineEnumField,\n\tInlineOptionalType: InlineOptionalType,\n\tRename: Rename,\n\tTransparentType: TransparentType,\n\tTransparentType2: TransparentType2,\n\tTransparentTypeWithOverride: TransparentTypeWithOverride,\n\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in BasicEnum]: null }>,\n\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in BasicEnum]: number }>,\n\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\"Vec<PlaceholderInnerField>\": PlaceholderInnerField[],\n\tEnumReferenceRecordKey: EnumReferenceRecordKey,\n\tFlattenOnNestedEnum: FlattenOnNestedEnum,\n\tMyEmptyInput: MyEmptyInput,\n\t\"(String)\": string,\n\t\"(String,)\": [string],\n\tExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant,\n\tExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct,\n\t\"Vec<MyEnum>\": MyEnum[],\n\tInlineTuple: InlineTuple,\n\tInlineTuple2: InlineTuple2,\n\t\"Box<str>\": string,\n\t\"Box<String>\": string,\n\tSkippedFieldWithinVariant: SkippedFieldWithinVariant,\n\tKebabCase: KebabCase,\n\t\"&[&str]\": string[],\n\t\"Issue281<'_>\": Issue281,\n\t\"LifetimeGenericStruct<'_, i32>\": LifetimeGenericStruct<number>,\n\t\"LifetimeGenericEnum<'_, i32>\": LifetimeGenericEnum<number>,\n\tRenameWithWeirdCharsField: RenameWithWeirdCharsField,\n\tRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant,\n\tRenamedFieldKeys: RenamedFieldKeys,\n\tRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload,\n\t\"type_type::Type\": Type,\n\tActualType: ActualType,\n\tSpectaTypeOverride: SpectaTypeOverride,\n\tContainerTypeOverrideStruct: ContainerTypeOverrideStruct,\n\tContainerTypeOverrideEnum: ContainerTypeOverrideEnum,\n\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": ContainerTypeOverrideGeneric,\n\t\"ContainerTypeOverrideToGeneric<i32>\": ContainerTypeOverrideToGeneric<number>,\n\tContainerTypeOverrideTuple: ContainerTypeOverrideTuple,\n\t\"ContainerTypeOverrideTupleGeneric<i32>\": ContainerTypeOverrideTupleGeneric<number>,\n\tInvalidToValidType: InvalidToValidType,\n\tTupleStruct: TupleStruct,\n\tTupleStructWithRep: TupleStructWithRep,\n\t\"GenericTupleStruct<String>\": GenericTupleStruct<string>,\n\tBracedStruct: BracedStruct,\n\tStruct: StructNew,\n\tStruct2: Struct2,\n\tEnum: Enum,\n\tEnum2: Enum2,\n\tEnum3: Enum3,\n\tStructRenameAllUppercase: StructRenameAllUppercase,\n\tRenameSerdeSpecialChar: RenameSerdeSpecialChar,\n\tEnumRenameAllUppercase: EnumRenameAllUppercase,\n\tRecursive: Recursive,\n\tRecursiveMapValue: RecursiveMapValue,\n\tRecursiveTransparent: RecursiveTransparent,\n\tRecursiveInEnum: RecursiveInEnum,\n\tNonOptional: NonOptional,\n\tOptionalOnNamedField: OptionalOnNamedField,\n\tOptionalOnTransparentNamedField: OptionalOnTransparentNamedField,\n\tOptionalInEnum: OptionalInEnum,\n\tUntaggedVariants: UntaggedVariants,\n\tUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue,\n\tUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches,\n\t\"HashMap<String, ()>\": { [key in string]: null },\n\tRegular: Regular,\n\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\"HashMap<TransparentStruct, ()>\": { [key in TransparentStruct]: null },\n\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in UnitVariants]: null }>,\n\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in UntaggedVariantsKey]: null }>,\n\tValidMaybeValidKey: ValidMaybeValidKey,\n\tValidMaybeValidKeyNested: ValidMaybeValidKeyNested,\n\tMacroStruct: MacroStruct,\n\tMacroStruct2: MacroStruct2,\n\tMacroEnum: MacroEnum,\n\tDeprecatedType: DeprecatedType,\n\tDeprecatedTypeWithMsg: DeprecatedTypeWithMsg,\n\tDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2,\n\tDeprecatedFields: DeprecatedFields,\n\tDeprecatedTupleVariant: DeprecatedTupleVariant,\n\tDeprecatedEnumVariants: DeprecatedEnumVariants,\n\tCommentedStruct: CommentedStruct,\n\tCommentedEnum: CommentedEnum,\n\tSingleLineComment: SingleLineComment,\n\tNonGeneric: Demo<number, boolean>,\n\t\"HalfGenericA<u8>\": Demo<number, boolean>,\n\t\"HalfGenericB<bool>\": Demo<number, boolean>,\n\t\"FullGeneric<u8, bool>\": Demo<number, boolean>,\n\t\"Another<bool>\": Demo<number, boolean>,\n\t\"MapA<u32>\": { [key in string]: number },\n\t\"MapB<u32>\": { [key in number]: string },\n\t\"MapC<u32>\": { [key in string]: AGenericStruct<number> },\n\t\"AGenericStruct<u32>\": AGenericStruct<number>,\n\tA: A,\n\tDoubleFlattened: DoubleFlattened,\n\tFlattenedInner: FlattenedInner,\n\tBoxFlattened: BoxFlattened,\n\tBoxInline: BoxInline,\n\tFirst: First,\n\tSecond: Second,\n\tThird: Third,\n\tFourth: Fourth,\n\tTagOnStructWithInline: TagOnStructWithInline,\n\tSixth: Sixth,\n\tSeventh: Seventh,\n\tEight: Eight,\n\tNinth: Ninth,\n\tTenth: Tenth,\n\tMyEnumTagged: MyEnumTagged,\n\tMyEnumExternal: MyEnumExternal,\n\tMyEnumAdjacent: MyEnumAdjacent,\n\tMyEnumUntagged: MyEnumUntagged,\n\tEmptyStruct: EmptyStruct,\n\tEmptyStructWithTag: EmptyStructWithTag,\n\tAdjacentlyTagged: AdjacentlyTagged,\n\tLoadProjectEvent: LoadProjectEvent,\n\tExternallyTagged: ExternallyTagged,\n\tIssue221External: Issue221External,\n\tInternallyTaggedD: InternallyTaggedD,\n\tInternallyTaggedE: InternallyTaggedE,\n\tInternallyTaggedF: InternallyTaggedF,\n\tInternallyTaggedH: InternallyTaggedH,\n\tInternallyTaggedL: InternallyTaggedL,\n\tInternallyTaggedM: InternallyTaggedM,\n\tStructWithAlias: StructWithAlias,\n\tStructWithMultipleAliases: StructWithMultipleAliases,\n\tStructWithAliasAndRename: StructWithAliasAndRename,\n\tEnumWithVariantAlias: EnumWithVariantAlias,\n\tEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases,\n\tEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename,\n\tInternallyTaggedWithAlias: InternallyTaggedWithAlias,\n\tAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias,\n\tUntaggedWithAlias: UntaggedWithAlias,\n\tIssue221UntaggedSafe: Issue221UntaggedSafe,\n\tIssue221UntaggedMixed: Issue221UntaggedMixed,\n\tEmptyEnum: EmptyEnum,\n\tEmptyEnumTagged: EmptyEnumTagged,\n\tEmptyEnumTaggedWContent: EmptyEnumTaggedWContent,\n\tEmptyEnumUntagged: EmptyEnumUntagged,\n\tSkipOnlyField: SkipOnlyField,\n\tSkipField: SkipField,\n\tSkipVariant: SkipVariant,\n\tSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant,\n\tSkipNamedFieldInVariant: SkipNamedFieldInVariant,\n\tTransparentWithSkip: TransparentWithSkip,\n\tTransparentWithSkip2: TransparentWithSkip2,\n\tTransparentWithSkip3: TransparentWithSkip3,\n\tSkipVariant2: SkipVariant2,\n\tSkipVariant3: SkipVariant3,\n\tSkipStructFields: SkipStructFields,\n\tSpectaSkipNonTypeField: SpectaSkipNonTypeField,\n\tFlattenA: FlattenA,\n\tFlattenB: FlattenB,\n\tFlattenC: FlattenC,\n\tFlattenD: FlattenD,\n\tFlattenE: FlattenE,\n\tFlattenF: FlattenF,\n\tFlattenG: FlattenG,\n\tTupleNested: TupleNested,\n\t\"Generic1<()>\": Generic1<null>,\n\t\"GenericAutoBound<()>\": GenericAutoBound<null>,\n\t\"GenericAutoBound2<()>\": GenericAutoBound2<null>,\n\tContainer1: Container1,\n\t\"Generic2<(), String, i32>\": Generic2<null, string, number>,\n\t\"GenericNewType1<()>\": GenericNewType1<null>,\n\t\"GenericTuple<()>\": GenericTuple<null>,\n\t\"GenericStruct2<()>\": GenericStruct2<null>,\n\t\"InlineGenericNewtype<String>\": string,\n\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }],\n\t\"InlineFlattenGenericsG<()>\": InlineFlattenGenericsG<null>,\n\tInlineFlattenGenerics: InlineFlattenGenerics,\n\tGenericDefault: GenericDefault,\n\tChainedGenericDefault: ChainedGenericDefault,\n\t\"ChainedGenericDefault<String, String>\": ChainedGenericDefault,\n\t\"ChainedGenericDefault<i32>\": ChainedGenericDefault<number, number>,\n\t\"ChainedGenericDefault<String, i32>\": ChainedGenericDefault<string, number>,\n\tGenericDefaultSkipped: GenericDefaultSkipped<string>,\n\tGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>,\n\tGenericParameterOrderPreserved: GenericParameterOrderPreserved,\n\tConstGenericInNonConstContainer: ConstGenericInNonConstContainer,\n\tConstGenericInConstContainer: ConstGenericInConstContainer,\n\tNamedConstGenericContainer: NamedConstGenericContainer,\n\tInlineConstGenericContainer: InlineConstGenericContainer,\n\tInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer,\n\tTestCollectionRegister: TestCollectionRegister,\n\tTestCollectionRegister: TestCollectionRegister,\n};\n\nexport type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type Recursive = {\n\tdemo: Recursive,\n};\n\nexport type RecursiveInEnum = { A: {\n\tdemo: RecursiveInEnum,\n} };\n\nexport type RecursiveInline = RecursiveInline;\n\nexport type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nexport type RecursiveTransparent = RecursiveInline;\n\nexport type RefStruct = TestEnum;\n\nexport type Regular = { [key in string]: null };\n\nexport type Rename = \"OneWord\" | \"Two words\";\n\nexport type RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nexport type RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nexport type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nexport type RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nexport type RenamedVariantWithSkippedPayload = \"a-b\";\n\nexport type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type Second = {\n\ta: number,\n};\n\nexport type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nexport type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\n/**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nexport type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nexport type SkipField = {\n\tb: number,\n};\n\nexport type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nexport type SkipOnlyField = Record<string, never>;\n\nexport type SkipStructFields = {\n\ta: number,\n};\n\nexport type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nexport type SkipVariant = { A: string };\n\nexport type SkipVariant2 = { tag: \"A\"; data: string };\n\nexport type SkipVariant3 = { A: {\n\ta: string,\n} };\n\nexport type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nexport type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type Struct2 = {\n\tb: string,\n};\n\nexport type StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nexport type StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nexport type StructWithAlias = {\n\tfield: string,\n};\n\nexport type StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nexport type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type TestCollectionRegister = never;\n\nexport type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nexport type Third = {\n\tb: { [key in string]: string },\n\tc: First,\n} & First;\n\nexport type ToBeFlattened = {\n\ta: string,\n};\n\nexport type TransparentStruct = string;\n\nexport type TransparentType = TransparentTypeInner;\n\nexport type TransparentType2 = null;\n\nexport type TransparentTypeInner = {\n\tinner: string,\n};\n\nexport type TransparentTypeWithOverride = string;\n\nexport type TransparentWithSkip = null;\n\nexport type TransparentWithSkip2 = string;\n\nexport type TransparentWithSkip3 = string;\n\nexport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type TupleStruct = string;\n\nexport type TupleStruct1 = number;\n\nexport type TupleStruct3 = [number, boolean, string];\n\nexport type TupleStructWithRep = string;\n\nexport type Type = never;\n\nexport type Unit1 = null;\n\nexport type Unit2 = Record<string, never>;\n\nexport type Unit3 = [];\n\nexport type Unit4 = null;\n\nexport type Unit5 = \"A\";\n\nexport type Unit6 = { A: null };\n\nexport type Unit7 = { A: Record<string, never> };\n\nexport type UnitVariants = \"A\" | \"B\" | \"C\";\n\nexport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type UntaggedVariantsKey = string | number;\n\nexport type UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nexport type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-serde_phases.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: \"Typescript::default().export(&types, format).unwrap()\"\n---\n// This file has been generated by Specta. Do not edit this file manually.\nexport type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nexport type ActualType = {\n\ta: GenericType<string>,\n};\n\nexport type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nexport type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nexport type B = {\n\tb: number,\n};\n\nexport type BasicEnum = \"A\" | \"B\";\n\nexport type BoxFlattened = BoxedInner;\n\nexport type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type BoxedInner = {\n\ta: number,\n};\n\nexport type BracedStruct = string;\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nexport type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nexport type ContainerTypeOverrideEnum = string;\n\nexport type ContainerTypeOverrideGeneric = string;\n\nexport type ContainerTypeOverrideStruct = string;\n\nexport type ContainerTypeOverrideToGeneric<T> = T;\n\nexport type ContainerTypeOverrideTuple = [string, number];\n\nexport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type D = {\n\tflattened: number,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nexport type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\n/**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nexport type Eight = { A: string } | \"B\";\n\nexport type EmptyEnum = never;\n\nexport type EmptyEnumTagged = never;\n\nexport type EmptyEnumTaggedWContent = never;\n\nexport type EmptyEnumUntagged = never;\n\nexport type EmptyStruct = Record<string, never>;\n\nexport type EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nexport type Enum = { t: \"A\" } | { t: \"B\" };\n\nexport type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nexport type Enum3 = { t: \"A\"; b: string };\n\nexport type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nexport type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nexport type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nexport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nexport type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nexport type ExtraBracketsInTupleVariant = { A: string };\n\nexport type ExtraBracketsInUnnamedStruct = string;\n\nexport type First = {\n\ta: string,\n};\n\nexport type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type FlattenB = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenC = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n\nexport type FlattenEnumStruct = {\n\touter: string,\n} & FlattenEnum;\n\nexport type FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nexport type FlattenOnNestedEnum = {\n\tid: string,\n} & NestedEnum;\n\nexport type FlattenedInner = Inner;\n\nexport type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nexport type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type GenericFlattened<T> = {\n\tgeneric_flattened: T,\n};\n\nexport type GenericNewType1<T> = T[][];\n\nexport type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type GenericTuple<T> = [T, T[], T[][]];\n\nexport type GenericTupleStruct<T> = T;\n\nexport type GenericType<T> = \"Undefined\" | T;\n\nexport type HasGenericAlias = { [key in number]: string };\n\nexport type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type InlineEnumField = { A: {\n\ta: string,\n} };\n\nexport type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & InlineFlattenGenericsG<string>;\n\nexport type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type InlineRecursiveConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number, number],\n\te: InlineRecursiveConstGeneric,\n};\n\nexport type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type InlineStruct = {\n\tref_struct: SimpleStruct,\n\tval: number,\n};\n\nexport type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nexport type Inner = {\n\ta: number,\n} & FlattenedInner;\n\nexport type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nexport type InternallyTaggedE = { type: \"A\" };\n\nexport type InternallyTaggedF = { type: \"A\" };\n\nexport type InternallyTaggedFInner = null;\n\nexport type InternallyTaggedH = { type: \"A\" };\n\nexport type InternallyTaggedHInner = null;\n\nexport type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedM = { type: \"A\" };\n\nexport type InternallyTaggedMInner = \"A\" | \"B\";\n\nexport type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nexport type InvalidToValidType = {\n\tcause: null,\n};\n\nexport type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nexport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type Issue374 = Issue374_Serialize | Issue374_Deserialize;\n\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type Issue374_Deserialize = {\n\tfoo?: boolean,\n\tbar?: boolean,\n};\n\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type Issue374_Serialize = {\n\tfoo?: boolean,\n\tbar?: boolean,\n};\n\nexport type KebabCase = {\n\t\"test-ing\": string,\n};\n\nexport type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nexport type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nexport type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\nexport type MacroStruct = string;\n\nexport type MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type MaybeValidKey<T> = T;\n\nexport type MyEmptyInput = Record<string, never>;\n\nexport type MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n\nexport type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: First,\n} };\n\nexport type MyEnumExternal = { Variant: {\n\tinner: First,\n} };\n\nexport type MyEnumTagged = { type: \"Variant\"; inner: First };\n\nexport type MyEnumUntagged = { inner: First };\n\nexport type NamedConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n\nexport type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First };\n\nexport type NonOptional = string | null;\n\nexport type Optional = Optional_Serialize | Optional_Deserialize;\n\nexport type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nexport type OptionalOnNamedField = string | null;\n\nexport type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type Optional_Deserialize = {\n\ta: number | null,\n\tb?: number | null,\n\tc: string | null,\n\td?: boolean,\n};\n\nexport type Optional_Serialize = {\n\ta: number | null,\n\tb?: number | null,\n\tc?: string | null,\n\td: boolean,\n};\n\nexport type OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type Pair<Z, A> = {\n\tfirst: Z,\n\tsecond: A,\n};\n\nexport type PlaceholderInnerField = {\n\ta: string,\n};\n\nexport type Primitives = {\n\ti8: number,\n\ti16: number,\n\ti32: number,\n\tu8: number,\n\tu16: number,\n\tu32: number,\n\tf32: number,\n\tf64: number,\n\tbool: boolean,\n\tchar: string,\n\t\"Range<i32>\": Range<number>,\n\t\"RangeInclusive<i32>\": RangeInclusive<number>,\n\t\"()\": null,\n\t\"(String, i32)\": [string, number],\n\t\"(String, i32, bool)\": [string, number, boolean],\n\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\tString: string,\n\tPathBuf: string,\n\tIpAddr: string,\n\tIpv4Addr: string,\n\tIpv6Addr: string,\n\tSocketAddr: string,\n\tSocketAddrV4: string,\n\tSocketAddrV6: string,\n\t\"Cow<'static, str>\": string,\n\t\"Cow<'static, i32>\": number,\n\t\"&'static str\": string,\n\t\"&'static bool\": boolean,\n\t\"&'static i32\": number,\n\t\"Vec<i32>\": number[],\n\t\"&'static [i32]\": number[],\n\t\"&'static [i32; 3]\": [number, number, number],\n\t\"[i32; 3]\": [number, number, number],\n\t\"Vec<MyEnum>\": MyEnum[],\n\t\"&'static [MyEnum]\": MyEnum[],\n\t\"&'static [MyEnum; 6]\": [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum],\n\t\"[MyEnum; 2]\": [MyEnum, MyEnum],\n\t\"&'static [i32; 1]\": [number],\n\t\"&'static [i32; 0]\": [],\n\t\"Option<i32>\": number | null,\n\t\"Option<()>\": null,\n\t\"Option<Vec<i32>>\": number[] | null,\n\t\"Result<String, i32>\": Result<string, number>,\n\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\"Option<Option<String>>\": string | null,\n\t\"Option<Option<Option<String>>>\": string | null,\n\t\"PhantomData<()>\": null,\n\t\"PhantomData<String>\": null,\n\tInfallible: never,\n\tUnit1: Unit1,\n\tUnit2: Unit2,\n\tUnit3: Unit3,\n\tUnit4: Unit4,\n\tUnit5: Unit5,\n\tUnit6: Unit6,\n\tUnit7: Unit7,\n\tSimpleStruct: SimpleStruct,\n\tTupleStruct1: TupleStruct1,\n\tTupleStruct3: TupleStruct3,\n\tTestEnum: TestEnum,\n\tRefStruct: RefStruct,\n\tInlinerStruct: InlinerStruct,\n\t\"GenericStruct<i32>\": GenericStruct<number>,\n\t\"GenericStruct<String>\": GenericStruct<string>,\n\tFlattenEnumStruct: FlattenEnumStruct,\n\tOverridenStruct: OverridenStruct,\n\tHasGenericAlias: HasGenericAlias,\n\tEnumMacroAttributes: EnumMacroAttributes,\n\tInlineEnumField: InlineEnumField,\n\tInlineOptionalType: InlineOptionalType,\n\tRename: Rename,\n\tTransparentType: TransparentType,\n\tTransparentType2: TransparentType2,\n\tTransparentTypeWithOverride: TransparentTypeWithOverride,\n\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in BasicEnum]: null }>,\n\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in BasicEnum]: number }>,\n\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\"Vec<PlaceholderInnerField>\": PlaceholderInnerField[],\n\tEnumReferenceRecordKey: EnumReferenceRecordKey,\n\tFlattenOnNestedEnum: FlattenOnNestedEnum,\n\tMyEmptyInput: MyEmptyInput,\n\t\"(String)\": string,\n\t\"(String,)\": [string],\n\tExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant,\n\tExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct,\n\t\"Vec<MyEnum>\": MyEnum[],\n\tInlineTuple: InlineTuple,\n\tInlineTuple2: InlineTuple2,\n\t\"Box<str>\": string,\n\t\"Box<String>\": string,\n\tSkippedFieldWithinVariant: SkippedFieldWithinVariant,\n\tKebabCase: KebabCase,\n\t\"&[&str]\": string[],\n\t\"Issue281<'_>\": Issue281,\n\t\"LifetimeGenericStruct<'_, i32>\": LifetimeGenericStruct<number>,\n\t\"LifetimeGenericEnum<'_, i32>\": LifetimeGenericEnum<number>,\n\tRenameWithWeirdCharsField: RenameWithWeirdCharsField,\n\tRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant,\n\tRenamedFieldKeys: RenamedFieldKeys,\n\tRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload,\n\t\"type_type::Type\": Type,\n\tActualType: ActualType,\n\tSpectaTypeOverride: SpectaTypeOverride,\n\tContainerTypeOverrideStruct: ContainerTypeOverrideStruct,\n\tContainerTypeOverrideEnum: ContainerTypeOverrideEnum,\n\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": ContainerTypeOverrideGeneric,\n\t\"ContainerTypeOverrideToGeneric<i32>\": ContainerTypeOverrideToGeneric<number>,\n\tContainerTypeOverrideTuple: ContainerTypeOverrideTuple,\n\t\"ContainerTypeOverrideTupleGeneric<i32>\": ContainerTypeOverrideTupleGeneric<number>,\n\tInvalidToValidType: InvalidToValidType,\n\tTupleStruct: TupleStruct,\n\tTupleStructWithRep: TupleStructWithRep,\n\t\"GenericTupleStruct<String>\": GenericTupleStruct<string>,\n\tBracedStruct: BracedStruct,\n\tStruct: StructNew,\n\tStruct2: Struct2,\n\tEnum: Enum,\n\tEnum2: Enum2,\n\tEnum3: Enum3,\n\tStructRenameAllUppercase: StructRenameAllUppercase,\n\tRenameSerdeSpecialChar: RenameSerdeSpecialChar,\n\tEnumRenameAllUppercase: EnumRenameAllUppercase,\n\tRecursive: Recursive,\n\tRecursiveMapValue: RecursiveMapValue,\n\tRecursiveTransparent: RecursiveTransparent,\n\tRecursiveInEnum: RecursiveInEnum,\n\tNonOptional: NonOptional,\n\tOptionalOnNamedField: OptionalOnNamedField,\n\tOptionalOnTransparentNamedField: OptionalOnTransparentNamedField,\n\tOptionalInEnum: OptionalInEnum,\n\tUntaggedVariants: UntaggedVariants,\n\tUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue,\n\tUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches,\n\t\"HashMap<String, ()>\": { [key in string]: null },\n\tRegular: Regular,\n\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\"HashMap<TransparentStruct, ()>\": { [key in TransparentStruct]: null },\n\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in UnitVariants]: null }>,\n\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in UntaggedVariantsKey]: null }>,\n\tValidMaybeValidKey: ValidMaybeValidKey,\n\tValidMaybeValidKeyNested: ValidMaybeValidKeyNested,\n\tMacroStruct: MacroStruct,\n\tMacroStruct2: MacroStruct2,\n\tMacroEnum: MacroEnum,\n\tDeprecatedType: DeprecatedType,\n\tDeprecatedTypeWithMsg: DeprecatedTypeWithMsg,\n\tDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2,\n\tDeprecatedFields: DeprecatedFields,\n\tDeprecatedTupleVariant: DeprecatedTupleVariant,\n\tDeprecatedEnumVariants: DeprecatedEnumVariants,\n\tCommentedStruct: CommentedStruct,\n\tCommentedEnum: CommentedEnum,\n\tSingleLineComment: SingleLineComment,\n\tNonGeneric: Demo<number, boolean>,\n\t\"HalfGenericA<u8>\": Demo<number, boolean>,\n\t\"HalfGenericB<bool>\": Demo<number, boolean>,\n\t\"FullGeneric<u8, bool>\": Demo<number, boolean>,\n\t\"Another<bool>\": Demo<number, boolean>,\n\t\"MapA<u32>\": { [key in string]: number },\n\t\"MapB<u32>\": { [key in number]: string },\n\t\"MapC<u32>\": { [key in string]: AGenericStruct<number> },\n\t\"AGenericStruct<u32>\": AGenericStruct<number>,\n\tA: A,\n\tDoubleFlattened: DoubleFlattened,\n\tFlattenedInner: FlattenedInner,\n\tBoxFlattened: BoxFlattened,\n\tBoxInline: BoxInline,\n\tFirst: First,\n\tSecond: Second,\n\tThird: Third,\n\tFourth: Fourth,\n\tTagOnStructWithInline: TagOnStructWithInline,\n\tSixth: Sixth,\n\tSeventh: Seventh,\n\tEight: Eight,\n\tNinth: Ninth,\n\tTenth: Tenth,\n\tMyEnumTagged: MyEnumTagged,\n\tMyEnumExternal: MyEnumExternal,\n\tMyEnumAdjacent: MyEnumAdjacent,\n\tMyEnumUntagged: MyEnumUntagged,\n\tEmptyStruct: EmptyStruct,\n\tEmptyStructWithTag: EmptyStructWithTag,\n\tAdjacentlyTagged: AdjacentlyTagged,\n\tLoadProjectEvent: LoadProjectEvent,\n\tExternallyTagged: ExternallyTagged,\n\tIssue221External: Issue221External,\n\tInternallyTaggedD: InternallyTaggedD,\n\tInternallyTaggedE: InternallyTaggedE,\n\tInternallyTaggedF: InternallyTaggedF,\n\tInternallyTaggedH: InternallyTaggedH,\n\tInternallyTaggedL: InternallyTaggedL,\n\tInternallyTaggedM: InternallyTaggedM,\n\tStructWithAlias: StructWithAlias,\n\tStructWithMultipleAliases: StructWithMultipleAliases,\n\tStructWithAliasAndRename: StructWithAliasAndRename,\n\tEnumWithVariantAlias: EnumWithVariantAlias,\n\tEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases,\n\tEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename,\n\tInternallyTaggedWithAlias: InternallyTaggedWithAlias,\n\tAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias,\n\tUntaggedWithAlias: UntaggedWithAlias,\n\tIssue221UntaggedSafe: Issue221UntaggedSafe,\n\tIssue221UntaggedMixed: Issue221UntaggedMixed,\n\tEmptyEnum: EmptyEnum,\n\tEmptyEnumTagged: EmptyEnumTagged,\n\tEmptyEnumTaggedWContent: EmptyEnumTaggedWContent,\n\tEmptyEnumUntagged: EmptyEnumUntagged,\n\tSkipOnlyField: SkipOnlyField,\n\tSkipField: SkipField,\n\tSkipVariant: SkipVariant,\n\tSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant,\n\tSkipNamedFieldInVariant: SkipNamedFieldInVariant,\n\tTransparentWithSkip: TransparentWithSkip,\n\tTransparentWithSkip2: TransparentWithSkip2,\n\tTransparentWithSkip3: TransparentWithSkip3,\n\tSkipVariant2: SkipVariant2,\n\tSkipVariant3: SkipVariant3,\n\tSkipStructFields: SkipStructFields,\n\tSpectaSkipNonTypeField: SpectaSkipNonTypeField,\n\tFlattenA: FlattenA,\n\tFlattenB: FlattenB,\n\tFlattenC: FlattenC,\n\tFlattenD: FlattenD,\n\tFlattenE: FlattenE,\n\tFlattenF: FlattenF,\n\tFlattenG: FlattenG,\n\tTupleNested: TupleNested,\n\t\"Generic1<()>\": Generic1<null>,\n\t\"GenericAutoBound<()>\": GenericAutoBound<null>,\n\t\"GenericAutoBound2<()>\": GenericAutoBound2<null>,\n\tContainer1: Container1,\n\t\"Generic2<(), String, i32>\": Generic2<null, string, number>,\n\t\"GenericNewType1<()>\": GenericNewType1<null>,\n\t\"GenericTuple<()>\": GenericTuple<null>,\n\t\"GenericStruct2<()>\": GenericStruct2<null>,\n\t\"InlineGenericNewtype<String>\": string,\n\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }],\n\t\"InlineFlattenGenericsG<()>\": InlineFlattenGenericsG<null>,\n\tInlineFlattenGenerics: InlineFlattenGenerics,\n\tGenericDefault: GenericDefault,\n\tChainedGenericDefault: ChainedGenericDefault,\n\t\"ChainedGenericDefault<String, String>\": ChainedGenericDefault,\n\t\"ChainedGenericDefault<i32>\": ChainedGenericDefault<number, number>,\n\t\"ChainedGenericDefault<String, i32>\": ChainedGenericDefault<string, number>,\n\tGenericDefaultSkipped: GenericDefaultSkipped<string>,\n\tGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>,\n\tGenericParameterOrderPreserved: GenericParameterOrderPreserved,\n\tConstGenericInNonConstContainer: ConstGenericInNonConstContainer,\n\tConstGenericInConstContainer: ConstGenericInConstContainer,\n\tNamedConstGenericContainer: NamedConstGenericContainer,\n\tInlineConstGenericContainer: InlineConstGenericContainer,\n\tInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer,\n\tTestCollectionRegister: TestCollectionRegister,\n\tTestCollectionRegister: TestCollectionRegister,\n};\n\nexport type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type Recursive = {\n\tdemo: Recursive,\n};\n\nexport type RecursiveInEnum = { A: {\n\tdemo: RecursiveInEnum,\n} };\n\nexport type RecursiveInline = RecursiveInline;\n\nexport type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nexport type RecursiveTransparent = RecursiveInline;\n\nexport type RefStruct = TestEnum;\n\nexport type Regular = { [key in string]: null };\n\nexport type Rename = \"OneWord\" | \"Two words\";\n\nexport type RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nexport type RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nexport type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nexport type RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nexport type RenamedVariantWithSkippedPayload = \"a-b\";\n\nexport type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type Second = {\n\ta: number,\n};\n\nexport type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nexport type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\n/**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nexport type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nexport type SkipField = {\n\tb: number,\n};\n\nexport type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nexport type SkipOnlyField = Record<string, never>;\n\nexport type SkipStructFields = {\n\ta: number,\n};\n\nexport type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nexport type SkipVariant = { A: string };\n\nexport type SkipVariant2 = { tag: \"A\"; data: string };\n\nexport type SkipVariant3 = { A: {\n\ta: string,\n} };\n\nexport type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nexport type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type Struct2 = {\n\tb: string,\n};\n\nexport type StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nexport type StructPhaseSpecificRename = StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize;\n\nexport type StructPhaseSpecificRenameDeserialize = {\n\tkind: \"StructPhaseSpecificRenameDeserialize\",\n\tder: string,\n};\n\nexport type StructPhaseSpecificRenameSerialize = {\n\tkind: \"StructPhaseSpecificRenameSerialize\",\n\tser: string,\n};\n\nexport type StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nexport type StructWithAlias = {\n\tfield: string,\n};\n\nexport type StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nexport type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type TestCollectionRegister = never;\n\nexport type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nexport type Third = {\n\tb: { [key in string]: string },\n\tc: First,\n} & First;\n\nexport type ToBeFlattened = {\n\ta: string,\n};\n\nexport type TransparentStruct = string;\n\nexport type TransparentType = TransparentTypeInner;\n\nexport type TransparentType2 = null;\n\nexport type TransparentTypeInner = {\n\tinner: string,\n};\n\nexport type TransparentTypeWithOverride = string;\n\nexport type TransparentWithSkip = null;\n\nexport type TransparentWithSkip2 = string;\n\nexport type TransparentWithSkip3 = string;\n\nexport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type TupleStruct = string;\n\nexport type TupleStruct1 = number;\n\nexport type TupleStruct3 = [number, boolean, string];\n\nexport type TupleStructWithRep = string;\n\nexport type Type = never;\n\nexport type Unit1 = null;\n\nexport type Unit2 = Record<string, never>;\n\nexport type Unit3 = [];\n\nexport type Unit4 = null;\n\nexport type Unit5 = \"A\";\n\nexport type Unit6 = { A: null };\n\nexport type Unit7 = { A: Record<string, never> };\n\nexport type UnitVariants = \"A\" | \"B\" | \"C\";\n\nexport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type UntaggedVariantsKey = string | number;\n\nexport type UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nexport type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-files-raw.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nstd/\n  ops.ts (181 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type Range<T> = {\n  \tstart: T,\n  \tend: T,\n  };\n  \n  export type RangeInclusive<T> = {\n  \tstart: T,\n  \tend: T,\n  };\n  ════════════════════════════════════════\n\n  result.ts (124 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type Result<T, E> = {\n  \tok: T,\n  \terr: E,\n  };\n  ════════════════════════════════════════\n\ntest/\n  types/\n    type_type.ts (101 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    export type Type = never;\n    ════════════════════════════════════════\n\n  types.ts (14154 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type A = {\n  \ta: B,\n  \tb: {\n  \t\tb: number,\n  \t},\n  \tc: B,\n  \td: {\n  \t\tflattened: number,\n  \t},\n  \te: {\n  \t\tgeneric_flattened: number,\n  \t},\n  };\n  \n  export type AGenericStruct<T> = {\n  \tfield: Demo<T, boolean>,\n  };\n  \n  export type ActualType = {\n  \ta: GenericType<string>,\n  };\n  \n  export type AdjacentlyTagged = \"A\" | { id: string; method: string } | string;\n  \n  export type AdjacentlyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n  \n  export type B = {\n  \tb: number,\n  };\n  \n  export type BasicEnum = \"A\" | \"B\";\n  \n  export type BoxFlattened = {\n  \tb: BoxedInner,\n  };\n  \n  export type BoxInline = {\n  \tc: {\n  \t\ta: number,\n  \t},\n  };\n  \n  export type BoxedInner = {\n  \ta: number,\n  };\n  \n  export type BracedStruct = string;\n  \n  export type ChainedGenericDefault<T = string, U = T> = {\n  \tfirst: T,\n  \tsecond: U,\n  };\n  \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  export type CommentedEnum = \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  number | \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  { \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  a: number };\n  \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  export type CommentedStruct = {\n  \t/**\n  \t *  Some triple-slash comment\n  \t *  Some more triple-slash comment\n  \t */\n  \ta: number,\n  };\n  \n  export type ConstGenericInConstContainer = {\n  \tdata: number[],\n  \ta: number[],\n  \td: [number, number],\n  };\n  \n  export type ConstGenericInNonConstContainer = {\n  \tdata: [number],\n  \ta: [number, number],\n  \td: [number, number],\n  };\n  \n  export type Container1 = {\n  \tfoo: Generic1<number>,\n  \tbar: Generic1<number>[],\n  \tbaz: { [key in string]: Generic1<string> },\n  };\n  \n  export type ContainerTypeOverrideEnum = string;\n  \n  export type ContainerTypeOverrideGeneric = string;\n  \n  export type ContainerTypeOverrideStruct = string;\n  \n  export type ContainerTypeOverrideToGeneric<T> = T;\n  \n  export type ContainerTypeOverrideTuple = [string, number];\n  \n  export type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n  \n  export type D = {\n  \tflattened: number,\n  };\n  \n  export type Demo<A, B> = {\n  \ta: A,\n  \tb: B,\n  };\n  \n  export type DeprecatedEnumVariants = \n  /**\n   * @deprecated\n   */\n  \"A\" | \n  /**\n   * @deprecated Nope\n   */\n  \"B\" | \n  /**\n   * @deprecated Nope\n   */\n  \"C\";\n  \n  export type DeprecatedFields = {\n  \ta: number,\n  \t/**\n  \t * @deprecated\n  \t */\n  \tb: string,\n  \t/**\n  \t * @deprecated This field is cringe!\n  \t */\n  \tc: string,\n  \t/**\n  \t * @deprecated This field is cringe!\n  \t */\n  \td: string,\n  };\n  \n  export type DeprecatedTupleVariant = [\n  /**\n   * @deprecated\n   */\n  string, \n  /**\n   * @deprecated Nope\n   */\n  string, \n  /**\n   * @deprecated Nope\n   */\n  number];\n  \n  /**\n   * @deprecated\n   */\n  export type DeprecatedType = {\n  \ta: number,\n  };\n  \n  /**\n   * @deprecated Look at you big man using a deprecation message\n   */\n  export type DeprecatedTypeWithMsg = {\n  \ta: number,\n  };\n  \n  /**\n   * @deprecated Look at you big man using a deprecation message\n   */\n  export type DeprecatedTypeWithMsg2 = {\n  \ta: number,\n  };\n  \n  export type DoubleFlattened = {\n  \ta: ToBeFlattened,\n  \tb: ToBeFlattened,\n  };\n  \n  export type Eight = string | \"B\";\n  \n  export type EmptyEnum = never;\n  \n  export type EmptyEnumTagged = never;\n  \n  export type EmptyEnumTaggedWContent = never;\n  \n  export type EmptyEnumUntagged = never;\n  \n  export type EmptyStruct = Record<string, never>;\n  \n  export type EmptyStructWithTag = Record<string, never>;\n  \n  export type Enum = \"A\" | \"B\";\n  \n  export type Enum2 = \"A\" | \"B\" | { enum_field: null };\n  \n  export type Enum3 = { a: string };\n  \n  export type EnumMacroAttributes = string | number | { a: string; b: number };\n  \n  export type EnumReferenceRecordKey = {\n  \ta: Partial<{ [key in BasicEnum]: number }>,\n  };\n  \n  export type EnumRenameAllUppercase = \"HelloWorld\" | \"VariantB\" | \"TestingWords\";\n  \n  export type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n  \n  export type EnumWithVariantAlias = \"Variant\" | \"Other\";\n  \n  export type EnumWithVariantAliasAndRename = \"Variant\" | \"Other\";\n  \n  export type ExternallyTagged = \"A\" | { id: string; method: string } | string;\n  \n  export type ExtraBracketsInTupleVariant = string;\n  \n  export type ExtraBracketsInUnnamedStruct = string;\n  \n  export type First = {\n  \ta: string,\n  };\n  \n  export type FlattenA = {\n  \ta: number,\n  \tb: number,\n  };\n  \n  export type FlattenB = {\n  \ta: FlattenA,\n  \tc: number,\n  };\n  \n  export type FlattenC = {\n  \ta: FlattenA,\n  \tc: number,\n  };\n  \n  export type FlattenD = {\n  \ta: FlattenA,\n  \tc: number,\n  };\n  \n  export type FlattenE = {\n  \tb: {\n  \t\ta: FlattenA,\n  \t\tc: number,\n  \t},\n  \td: number,\n  };\n  \n  export type FlattenEnum = \"One\" | \"Two\" | \"Three\";\n  \n  export type FlattenEnumStruct = {\n  \touter: string,\n  \tinner: FlattenEnum,\n  };\n  \n  export type FlattenF = {\n  \tb: {\n  \t\ta: FlattenA,\n  \t\tc: number,\n  \t},\n  \td: number,\n  };\n  \n  export type FlattenG = {\n  \tb: FlattenB,\n  \td: number,\n  };\n  \n  export type FlattenOnNestedEnum = {\n  \tid: string,\n  \tresult: NestedEnum,\n  };\n  \n  export type FlattenedInner = {\n  \tc: Inner,\n  };\n  \n  export type Fourth = {\n  \ta: First,\n  \tb: {\n  \t\ta: string,\n  \t},\n  };\n  \n  export type Generic1<T> = {\n  \tvalue: T,\n  \tvalues: T[],\n  };\n  \n  export type Generic2<A, B, C> = A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][];\n  \n  export type GenericAutoBound<T> = {\n  \tvalue: T,\n  \tvalues: T[],\n  };\n  \n  export type GenericAutoBound2<T> = {\n  \tvalue: T,\n  \tvalues: T[],\n  };\n  \n  export type GenericDefault<T = string> = {\n  \tvalue: T,\n  };\n  \n  export type GenericDefaultSkipped<T> = {\n  \tvalue: T,\n  };\n  \n  export type GenericDefaultSkippedNonType<T> = {\n  \tvalue: number,\n  };\n  \n  export type GenericFlattened<T> = {\n  \tgeneric_flattened: T,\n  };\n  \n  export type GenericNewType1<T> = T[][];\n  \n  export type GenericParameterOrderPreserved = {\n  \tpair: Pair<number, string>,\n  };\n  \n  export type GenericStruct<T> = {\n  \targ: T,\n  };\n  \n  export type GenericStruct2<T> = {\n  \ta: T,\n  \tb: [T, T],\n  \tc: [T, [T, T]],\n  \td: [T, T, T],\n  \te: [([T, T]), ([T, T]), ([T, T])],\n  \tf: T[],\n  \tg: T[][],\n  \th: ([([T, T]), ([T, T]), ([T, T])])[],\n  };\n  \n  export type GenericTuple<T> = [T, T[], T[][]];\n  \n  export type GenericTupleStruct<T> = T;\n  \n  export type GenericType<T> = \"Undefined\" | T;\n  \n  export type HasGenericAlias = { [key in number]: string };\n  \n  export type InlineConstGenericContainer = {\n  \tb: {\n  \t\tdata: [number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t},\n  \tc: {\n  \t\tdata: [number, number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t},\n  \td: [number, number],\n  };\n  \n  export type InlineEnumField = {\n  \ta: string,\n  };\n  \n  export type InlineFlattenGenerics = {\n  \tg: InlineFlattenGenericsG<string>,\n  \tgi: {\n  \t\tt: string,\n  \t},\n  \tt: InlineFlattenGenericsG<string>,\n  };\n  \n  export type InlineFlattenGenericsG<T> = {\n  \tt: T,\n  };\n  \n  export type InlineOptionalType = {\n  \toptional_field: {\n  \ta: string,\n  } | null,\n  };\n  \n  export type InlineRecursiveConstGeneric = {\n  \tdata: number[],\n  \ta: number[],\n  \td: [number, number, number],\n  \te: InlineRecursiveConstGeneric,\n  };\n  \n  export type InlineRecursiveConstGenericContainer = {\n  \tb: {\n  \t\tdata: [number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t\te: InlineRecursiveConstGeneric,\n  \t},\n  \tc: {\n  \t\tdata: [number, number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t\te: InlineRecursiveConstGeneric,\n  \t},\n  \td: [number, number],\n  };\n  \n  export type InlineStruct = {\n  \tref_struct: SimpleStruct,\n  \tval: number,\n  };\n  \n  export type InlineTuple = {\n  \tdemo: [string, boolean],\n  };\n  \n  export type InlineTuple2 = {\n  \tdemo: [{\n  \tdemo: [string, boolean],\n  }, boolean],\n  };\n  \n  export type InlinerStruct = {\n  \tinline_this: {\n  \t\tref_struct: SimpleStruct,\n  \t\tval: number,\n  \t},\n  \tdont_inline_this: RefStruct,\n  };\n  \n  export type Inner = {\n  \ta: number,\n  \tb: FlattenedInner,\n  };\n  \n  export type InternallyTaggedD = { [key in string]: string };\n  \n  export type InternallyTaggedE = null;\n  \n  export type InternallyTaggedF = InternallyTaggedFInner;\n  \n  export type InternallyTaggedFInner = null;\n  \n  export type InternallyTaggedH = InternallyTaggedHInner;\n  \n  export type InternallyTaggedHInner = null;\n  \n  export type InternallyTaggedL = \"A\" | \"B\";\n  \n  export type InternallyTaggedLInner = \"A\" | \"B\";\n  \n  export type InternallyTaggedM = \"A\" | \"B\";\n  \n  export type InternallyTaggedMInner = \"A\" | \"B\";\n  \n  export type InternallyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n  \n  export type InvalidToValidType = {\n  \tcause: null,\n  };\n  \n  export type Issue221External = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n  \n  export type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n  \n  export type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n  \n  export type Issue281 = {\n  \tdefault_unity_arguments: string[],\n  };\n  \n  export type KebabCase = {\n  \ttest_ing: string,\n  };\n  \n  export type LifetimeGenericEnum<T> = T;\n  \n  export type LifetimeGenericStruct<T> = {\n  \tborrowed: T[],\n  \towned: T[],\n  };\n  \n  export type LoadProjectEvent = ({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number };\n  \n  export type MacroEnum = string | { demo2: string };\n  \n  export type MacroStruct = string;\n  \n  export type MacroStruct2 = {\n  \tdemo: string,\n  };\n  \n  export type MaybeValidKey<T> = T;\n  \n  export type MyEmptyInput = Record<string, never>;\n  \n  export type MyEnum = string | number;\n  \n  export type MyEnumAdjacent = { inner: First };\n  \n  export type MyEnumExternal = { inner: First };\n  \n  export type MyEnumTagged = { inner: First };\n  \n  export type MyEnumUntagged = { inner: First };\n  \n  export type NamedConstGeneric = {\n  \tdata: number[],\n  \ta: number[],\n  \td: [number, number],\n  };\n  \n  export type NamedConstGenericContainer = {\n  \ta: NamedConstGeneric,\n  \tb: NamedConstGeneric,\n  \td: [number, number],\n  };\n  \n  export type NestedEnum = string | number;\n  \n  export type Ninth = string | \"B\" | {\n  \ta: string,\n  } | First;\n  \n  export type NonOptional = string | null;\n  \n  export type OptionalInEnum = string | null | { a: string | null } | { a?: string | null };\n  \n  export type OptionalOnNamedField = string | null;\n  \n  export type OptionalOnTransparentNamedField = {\n  \tb: string | null,\n  };\n  \n  export type OverridenStruct = {\n  \toverriden_field: string,\n  };\n  \n  export type Pair<Z, A> = {\n  \tfirst: Z,\n  \tsecond: A,\n  };\n  \n  export type PlaceholderInnerField = {\n  \ta: string,\n  };\n  \n  export type Recursive = {\n  \tdemo: Recursive,\n  };\n  \n  export type RecursiveInEnum = { demo: RecursiveInEnum };\n  \n  export type RecursiveInline = {\n  \tdemo: RecursiveInline,\n  };\n  \n  export type RecursiveMapValue = {\n  \tdemo: { [key in string]: RecursiveMapValue },\n  };\n  \n  export type RecursiveTransparent = RecursiveInline;\n  \n  export type RefStruct = TestEnum;\n  \n  export type Regular = { [key in string]: null };\n  \n  export type Rename = \"OneWord\" | \"TwoWords\";\n  \n  export type RenameSerdeSpecialChar = {\n  \tb: number,\n  };\n  \n  export type RenameWithWeirdCharsField = {\n  \todata_context: string,\n  };\n  \n  export type RenameWithWeirdCharsVariant = string;\n  \n  export type RenamedFieldKeys = {\n  \tempty: string,\n  \tquote: string,\n  \tbackslash: string,\n  \tnewline: string,\n  \tline_separator: string,\n  \tparagraph_separator: string,\n  };\n  \n  export type RenamedVariantWithSkippedPayload = never;\n  \n  export type Second = {\n  \ta: number,\n  };\n  \n  export type Seventh = {\n  \ta: First,\n  \tb: Second,\n  };\n  \n  export type SimpleStruct = {\n  \ta: number,\n  \tb: string,\n  \tc: [number, string, number],\n  \td: string[],\n  \te: string | null,\n  };\n  \n  /**  Some single-line comment */\n  export type SingleLineComment = \n  /**  Some single-line comment */\n  number | \n  /**  Some single-line comment */\n  { \n  /**  Some single-line comment */\n  a: number };\n  \n  export type Sixth = {\n  \ta: First,\n  \tb: First,\n  };\n  \n  export type SkipField = {\n  \tb: number,\n  };\n  \n  export type SkipNamedFieldInVariant = Record<string, never> | { b: number };\n  \n  export type SkipOnlyField = Record<string, never>;\n  \n  export type SkipStructFields = {\n  \ta: number,\n  };\n  \n  export type SkipUnnamedFieldInVariant = never | [number];\n  \n  export type SkipVariant = string;\n  \n  export type SkipVariant2 = string;\n  \n  export type SkipVariant3 = { a: string };\n  \n  export type SkippedFieldWithinVariant = never | string;\n  \n  export type SpectaSkipNonTypeField = {\n  \ta: number,\n  };\n  \n  export type SpectaTypeOverride = {\n  \tstring_ident: string,\n  \tu32_ident: number,\n  \tpath: string,\n  \ttuple: [string, number],\n  };\n  \n  export type Struct = {\n  \ta: string,\n  };\n  \n  export type Struct2 = {\n  \ta: string,\n  };\n  \n  export type StructRenameAllUppercase = {\n  \ta: number,\n  \tb: number,\n  };\n  \n  export type StructWithAlias = {\n  \tfield: string,\n  };\n  \n  export type StructWithAliasAndRename = {\n  \tfield: string,\n  };\n  \n  export type StructWithMultipleAliases = {\n  \tfield: string,\n  };\n  \n  export type TagOnStructWithInline = {\n  \ta: First,\n  \tb: {\n  \t\ta: string,\n  \t},\n  };\n  \n  export type Tenth = string | \"B\" | {\n  \ta: string,\n  } | First;\n  \n  export type TestCollectionRegister = never;\n  \n  export type TestEnum = \"Unit\" | number | [number, number] | { a: number };\n  \n  export type Third = {\n  \ta: First,\n  \tb: { [key in string]: string },\n  \tc: First,\n  };\n  \n  export type ToBeFlattened = {\n  \ta: string,\n  };\n  \n  export type TransparentStruct = string;\n  \n  export type TransparentType = TransparentTypeInner;\n  \n  export type TransparentType2 = null;\n  \n  export type TransparentTypeInner = {\n  \tinner: string,\n  };\n  \n  export type TransparentTypeWithOverride = string;\n  \n  export type TransparentWithSkip = null;\n  \n  export type TransparentWithSkip2 = string;\n  \n  export type TransparentWithSkip3 = string;\n  \n  export type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n  \n  export type TupleStruct = string;\n  \n  export type TupleStruct1 = number;\n  \n  export type TupleStruct3 = [number, boolean, string];\n  \n  export type TupleStructWithRep = string;\n  \n  export type Unit1 = null;\n  \n  export type Unit2 = Record<string, never>;\n  \n  export type Unit3 = [];\n  \n  export type Unit4 = null;\n  \n  export type Unit5 = \"A\";\n  \n  export type Unit6 = [];\n  \n  export type Unit7 = Record<string, never>;\n  \n  export type UnitVariants = \"A\" | \"B\" | \"C\";\n  \n  export type UntaggedVariants = string | number | { id: string } | [string, boolean];\n  \n  export type UntaggedVariantsKey = string | number;\n  \n  export type UntaggedVariantsWithDuplicateBranches = null | number;\n  \n  export type UntaggedVariantsWithoutValue = string | [number, string] | number;\n  \n  export type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n  \n  export type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n  \n  export type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n  ════════════════════════════════════════\n\ntests/\n  tests/\n    types.ts (12857 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    \n    import type * as std$ops from \"../../std/ops\";\n    import type * as std$result from \"../../std/result\";\n    import type * as test$types from \"../../test/types\";\n    import type * as test$types$type_type from \"../../test/types/type_type\";\n    export type Primitives = {\n    \ti8: number,\n    \ti16: number,\n    \ti32: number,\n    \tu8: number,\n    \tu16: number,\n    \tu32: number,\n    \tf32: number,\n    \tf64: number,\n    \tbool: boolean,\n    \tchar: string,\n    \t\"Range<i32>\": std$ops.Range<number>,\n    \t\"RangeInclusive<i32>\": std$ops.RangeInclusive<number>,\n    \t\"()\": null,\n    \t\"(String, i32)\": [string, number],\n    \t\"(String, i32, bool)\": [string, number, boolean],\n    \t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n    \t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n    \t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n    \tString: string,\n    \tPathBuf: string,\n    \tIpAddr: string,\n    \tIpv4Addr: string,\n    \tIpv6Addr: string,\n    \tSocketAddr: string,\n    \tSocketAddrV4: string,\n    \tSocketAddrV6: string,\n    \t\"Cow<'static, str>\": string,\n    \t\"Cow<'static, i32>\": number,\n    \t\"&'static str\": string,\n    \t\"&'static bool\": boolean,\n    \t\"&'static i32\": number,\n    \t\"Vec<i32>\": number[],\n    \t\"&'static [i32]\": number[],\n    \t\"&'static [i32; 3]\": [number, number, number],\n    \t\"[i32; 3]\": [number, number, number],\n    \t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \t\"&'static [MyEnum]\": test$types.MyEnum[],\n    \t\"&'static [MyEnum; 6]\": [test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum],\n    \t\"[MyEnum; 2]\": [test$types.MyEnum, test$types.MyEnum],\n    \t\"&'static [i32; 1]\": [number],\n    \t\"&'static [i32; 0]\": [],\n    \t\"Option<i32>\": number | null,\n    \t\"Option<()>\": null,\n    \t\"Option<Vec<i32>>\": number[] | null,\n    \t\"Result<String, i32>\": std$result.Result<string, number>,\n    \t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n    \t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n    \t\"[Vec<String>; 3]\": [string[], string[], string[]],\n    \t\"Option<Option<String>>\": string | null,\n    \t\"Option<Option<Option<String>>>\": string | null,\n    \t\"PhantomData<()>\": null,\n    \t\"PhantomData<String>\": null,\n    \tInfallible: never,\n    \tUnit1: test$types.Unit1,\n    \tUnit2: test$types.Unit2,\n    \tUnit3: test$types.Unit3,\n    \tUnit4: test$types.Unit4,\n    \tUnit5: test$types.Unit5,\n    \tUnit6: test$types.Unit6,\n    \tUnit7: test$types.Unit7,\n    \tSimpleStruct: test$types.SimpleStruct,\n    \tTupleStruct1: test$types.TupleStruct1,\n    \tTupleStruct3: test$types.TupleStruct3,\n    \tTestEnum: test$types.TestEnum,\n    \tRefStruct: test$types.RefStruct,\n    \tInlinerStruct: test$types.InlinerStruct,\n    \t\"GenericStruct<i32>\": test$types.GenericStruct<number>,\n    \t\"GenericStruct<String>\": test$types.GenericStruct<string>,\n    \tFlattenEnumStruct: test$types.FlattenEnumStruct,\n    \tOverridenStruct: test$types.OverridenStruct,\n    \tHasGenericAlias: test$types.HasGenericAlias,\n    \tEnumMacroAttributes: test$types.EnumMacroAttributes,\n    \tInlineEnumField: test$types.InlineEnumField,\n    \tInlineOptionalType: test$types.InlineOptionalType,\n    \tRename: test$types.Rename,\n    \tTransparentType: test$types.TransparentType,\n    \tTransparentType2: test$types.TransparentType2,\n    \tTransparentTypeWithOverride: test$types.TransparentTypeWithOverride,\n    \t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n    \t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test$types.BasicEnum]: null }>,\n    \t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test$types.BasicEnum]: number }>,\n    \t\"Option<Option<Option<Option<i32>>>>\": number | null,\n    \t\"Vec<PlaceholderInnerField>\": test$types.PlaceholderInnerField[],\n    \tEnumReferenceRecordKey: test$types.EnumReferenceRecordKey,\n    \tFlattenOnNestedEnum: test$types.FlattenOnNestedEnum,\n    \tMyEmptyInput: test$types.MyEmptyInput,\n    \t\"(String)\": string,\n    \t\"(String,)\": [string],\n    \tExtraBracketsInTupleVariant: test$types.ExtraBracketsInTupleVariant,\n    \tExtraBracketsInUnnamedStruct: test$types.ExtraBracketsInUnnamedStruct,\n    \t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \tInlineTuple: test$types.InlineTuple,\n    \tInlineTuple2: test$types.InlineTuple2,\n    \t\"Box<str>\": string,\n    \t\"Box<String>\": string,\n    \tSkippedFieldWithinVariant: test$types.SkippedFieldWithinVariant,\n    \tKebabCase: test$types.KebabCase,\n    \t\"&[&str]\": string[],\n    \t\"Issue281<'_>\": test$types.Issue281,\n    \t\"LifetimeGenericStruct<'_, i32>\": test$types.LifetimeGenericStruct<number>,\n    \t\"LifetimeGenericEnum<'_, i32>\": test$types.LifetimeGenericEnum<number>,\n    \tRenameWithWeirdCharsField: test$types.RenameWithWeirdCharsField,\n    \tRenameWithWeirdCharsVariant: test$types.RenameWithWeirdCharsVariant,\n    \tRenamedFieldKeys: test$types.RenamedFieldKeys,\n    \tRenamedVariantWithSkippedPayload: test$types.RenamedVariantWithSkippedPayload,\n    \t\"type_type::Type\": test$types$type_type.Type,\n    \tActualType: test$types.ActualType,\n    \tSpectaTypeOverride: test$types.SpectaTypeOverride,\n    \tContainerTypeOverrideStruct: test$types.ContainerTypeOverrideStruct,\n    \tContainerTypeOverrideEnum: test$types.ContainerTypeOverrideEnum,\n    \t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test$types.ContainerTypeOverrideGeneric,\n    \t\"ContainerTypeOverrideToGeneric<i32>\": test$types.ContainerTypeOverrideToGeneric<number>,\n    \tContainerTypeOverrideTuple: test$types.ContainerTypeOverrideTuple,\n    \t\"ContainerTypeOverrideTupleGeneric<i32>\": test$types.ContainerTypeOverrideTupleGeneric<number>,\n    \tInvalidToValidType: test$types.InvalidToValidType,\n    \tTupleStruct: test$types.TupleStruct,\n    \tTupleStructWithRep: test$types.TupleStructWithRep,\n    \t\"GenericTupleStruct<String>\": test$types.GenericTupleStruct<string>,\n    \tBracedStruct: test$types.BracedStruct,\n    \tStruct: test$types.Struct,\n    \tStruct2: test$types.Struct2,\n    \tEnum: test$types.Enum,\n    \tEnum2: test$types.Enum2,\n    \tEnum3: test$types.Enum3,\n    \tStructRenameAllUppercase: test$types.StructRenameAllUppercase,\n    \tRenameSerdeSpecialChar: test$types.RenameSerdeSpecialChar,\n    \tEnumRenameAllUppercase: test$types.EnumRenameAllUppercase,\n    \tRecursive: test$types.Recursive,\n    \tRecursiveMapValue: test$types.RecursiveMapValue,\n    \tRecursiveTransparent: test$types.RecursiveTransparent,\n    \tRecursiveInEnum: test$types.RecursiveInEnum,\n    \tNonOptional: test$types.NonOptional,\n    \tOptionalOnNamedField: test$types.OptionalOnNamedField,\n    \tOptionalOnTransparentNamedField: test$types.OptionalOnTransparentNamedField,\n    \tOptionalInEnum: test$types.OptionalInEnum,\n    \tUntaggedVariants: test$types.UntaggedVariants,\n    \tUntaggedVariantsWithoutValue: test$types.UntaggedVariantsWithoutValue,\n    \tUntaggedVariantsWithDuplicateBranches: test$types.UntaggedVariantsWithDuplicateBranches,\n    \t\"HashMap<String, ()>\": { [key in string]: null },\n    \tRegular: test$types.Regular,\n    \t\"HashMap<Infallible, ()>\": { [key in never]: null },\n    \t\"HashMap<TransparentStruct, ()>\": { [key in test$types.TransparentStruct]: null },\n    \t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test$types.UnitVariants]: null }>,\n    \t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test$types.UntaggedVariantsKey]: null }>,\n    \tValidMaybeValidKey: test$types.ValidMaybeValidKey,\n    \tValidMaybeValidKeyNested: test$types.ValidMaybeValidKeyNested,\n    \tMacroStruct: test$types.MacroStruct,\n    \tMacroStruct2: test$types.MacroStruct2,\n    \tMacroEnum: test$types.MacroEnum,\n    \tDeprecatedType: test$types.DeprecatedType,\n    \tDeprecatedTypeWithMsg: test$types.DeprecatedTypeWithMsg,\n    \tDeprecatedTypeWithMsg2: test$types.DeprecatedTypeWithMsg2,\n    \tDeprecatedFields: test$types.DeprecatedFields,\n    \tDeprecatedTupleVariant: test$types.DeprecatedTupleVariant,\n    \tDeprecatedEnumVariants: test$types.DeprecatedEnumVariants,\n    \tCommentedStruct: test$types.CommentedStruct,\n    \tCommentedEnum: test$types.CommentedEnum,\n    \tSingleLineComment: test$types.SingleLineComment,\n    \tNonGeneric: test$types.Demo<number, boolean>,\n    \t\"HalfGenericA<u8>\": test$types.Demo<number, boolean>,\n    \t\"HalfGenericB<bool>\": test$types.Demo<number, boolean>,\n    \t\"FullGeneric<u8, bool>\": test$types.Demo<number, boolean>,\n    \t\"Another<bool>\": test$types.Demo<number, boolean>,\n    \t\"MapA<u32>\": { [key in string]: number },\n    \t\"MapB<u32>\": { [key in number]: string },\n    \t\"MapC<u32>\": { [key in string]: test$types.AGenericStruct<number> },\n    \t\"AGenericStruct<u32>\": test$types.AGenericStruct<number>,\n    \tA: test$types.A,\n    \tDoubleFlattened: test$types.DoubleFlattened,\n    \tFlattenedInner: test$types.FlattenedInner,\n    \tBoxFlattened: test$types.BoxFlattened,\n    \tBoxInline: test$types.BoxInline,\n    \tFirst: test$types.First,\n    \tSecond: test$types.Second,\n    \tThird: test$types.Third,\n    \tFourth: test$types.Fourth,\n    \tTagOnStructWithInline: test$types.TagOnStructWithInline,\n    \tSixth: test$types.Sixth,\n    \tSeventh: test$types.Seventh,\n    \tEight: test$types.Eight,\n    \tNinth: test$types.Ninth,\n    \tTenth: test$types.Tenth,\n    \tMyEnumTagged: test$types.MyEnumTagged,\n    \tMyEnumExternal: test$types.MyEnumExternal,\n    \tMyEnumAdjacent: test$types.MyEnumAdjacent,\n    \tMyEnumUntagged: test$types.MyEnumUntagged,\n    \tEmptyStruct: test$types.EmptyStruct,\n    \tEmptyStructWithTag: test$types.EmptyStructWithTag,\n    \tAdjacentlyTagged: test$types.AdjacentlyTagged,\n    \tLoadProjectEvent: test$types.LoadProjectEvent,\n    \tExternallyTagged: test$types.ExternallyTagged,\n    \tIssue221External: test$types.Issue221External,\n    \tInternallyTaggedD: test$types.InternallyTaggedD,\n    \tInternallyTaggedE: test$types.InternallyTaggedE,\n    \tInternallyTaggedF: test$types.InternallyTaggedF,\n    \tInternallyTaggedH: test$types.InternallyTaggedH,\n    \tInternallyTaggedL: test$types.InternallyTaggedL,\n    \tInternallyTaggedM: test$types.InternallyTaggedM,\n    \tStructWithAlias: test$types.StructWithAlias,\n    \tStructWithMultipleAliases: test$types.StructWithMultipleAliases,\n    \tStructWithAliasAndRename: test$types.StructWithAliasAndRename,\n    \tEnumWithVariantAlias: test$types.EnumWithVariantAlias,\n    \tEnumWithMultipleVariantAliases: test$types.EnumWithMultipleVariantAliases,\n    \tEnumWithVariantAliasAndRename: test$types.EnumWithVariantAliasAndRename,\n    \tInternallyTaggedWithAlias: test$types.InternallyTaggedWithAlias,\n    \tAdjacentlyTaggedWithAlias: test$types.AdjacentlyTaggedWithAlias,\n    \tUntaggedWithAlias: test$types.UntaggedWithAlias,\n    \tIssue221UntaggedSafe: test$types.Issue221UntaggedSafe,\n    \tIssue221UntaggedMixed: test$types.Issue221UntaggedMixed,\n    \tEmptyEnum: test$types.EmptyEnum,\n    \tEmptyEnumTagged: test$types.EmptyEnumTagged,\n    \tEmptyEnumTaggedWContent: test$types.EmptyEnumTaggedWContent,\n    \tEmptyEnumUntagged: test$types.EmptyEnumUntagged,\n    \tSkipOnlyField: test$types.SkipOnlyField,\n    \tSkipField: test$types.SkipField,\n    \tSkipVariant: test$types.SkipVariant,\n    \tSkipUnnamedFieldInVariant: test$types.SkipUnnamedFieldInVariant,\n    \tSkipNamedFieldInVariant: test$types.SkipNamedFieldInVariant,\n    \tTransparentWithSkip: test$types.TransparentWithSkip,\n    \tTransparentWithSkip2: test$types.TransparentWithSkip2,\n    \tTransparentWithSkip3: test$types.TransparentWithSkip3,\n    \tSkipVariant2: test$types.SkipVariant2,\n    \tSkipVariant3: test$types.SkipVariant3,\n    \tSkipStructFields: test$types.SkipStructFields,\n    \tSpectaSkipNonTypeField: test$types.SpectaSkipNonTypeField,\n    \tFlattenA: test$types.FlattenA,\n    \tFlattenB: test$types.FlattenB,\n    \tFlattenC: test$types.FlattenC,\n    \tFlattenD: test$types.FlattenD,\n    \tFlattenE: test$types.FlattenE,\n    \tFlattenF: test$types.FlattenF,\n    \tFlattenG: test$types.FlattenG,\n    \tTupleNested: test$types.TupleNested,\n    \t\"Generic1<()>\": test$types.Generic1<null>,\n    \t\"GenericAutoBound<()>\": test$types.GenericAutoBound<null>,\n    \t\"GenericAutoBound2<()>\": test$types.GenericAutoBound2<null>,\n    \tContainer1: test$types.Container1,\n    \t\"Generic2<(), String, i32>\": test$types.Generic2<null, string, number>,\n    \t\"GenericNewType1<()>\": test$types.GenericNewType1<null>,\n    \t\"GenericTuple<()>\": test$types.GenericTuple<null>,\n    \t\"GenericStruct2<()>\": test$types.GenericStruct2<null>,\n    \t\"InlineGenericNewtype<String>\": string,\n    \t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }],\n    \t\"InlineFlattenGenericsG<()>\": test$types.InlineFlattenGenericsG<null>,\n    \tInlineFlattenGenerics: test$types.InlineFlattenGenerics,\n    \tGenericDefault: test$types.GenericDefault,\n    \tChainedGenericDefault: test$types.ChainedGenericDefault,\n    \t\"ChainedGenericDefault<String, String>\": test$types.ChainedGenericDefault,\n    \t\"ChainedGenericDefault<i32>\": test$types.ChainedGenericDefault<number, number>,\n    \t\"ChainedGenericDefault<String, i32>\": test$types.ChainedGenericDefault<string, number>,\n    \tGenericDefaultSkipped: test$types.GenericDefaultSkipped<string>,\n    \tGenericDefaultSkippedNonType: test$types.GenericDefaultSkippedNonType<unknown>,\n    \tGenericParameterOrderPreserved: test$types.GenericParameterOrderPreserved,\n    \tConstGenericInNonConstContainer: test$types.ConstGenericInNonConstContainer,\n    \tConstGenericInConstContainer: test$types.ConstGenericInConstContainer,\n    \tNamedConstGenericContainer: test$types.NamedConstGenericContainer,\n    \tInlineConstGenericContainer: test$types.InlineConstGenericContainer,\n    \tInlineRecursiveConstGenericContainer: test$types.InlineRecursiveConstGenericContainer,\n    \tTestCollectionRegister: test$types.TestCollectionRegister,\n    \tTestCollectionRegister: test$types.TestCollectionRegister,\n    };\n    ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-files-serde.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nstd/\n  ops.ts (181 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type Range<T> = {\n  \tstart: T,\n  \tend: T,\n  };\n  \n  export type RangeInclusive<T> = {\n  \tstart: T,\n  \tend: T,\n  };\n  ════════════════════════════════════════\n\n  result.ts (124 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type Result<T, E> = {\n  \tok: T,\n  \terr: E,\n  };\n  ════════════════════════════════════════\n\ntest/\n  types/\n    type_type.ts (101 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    export type Type = never;\n    ════════════════════════════════════════\n\n  types.ts (16366 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type A = {\n  \ta: B,\n  \tb: {\n  \t\tb: number,\n  \t},\n  \tc: B,\n  \td: {\n  \t\tflattened: number,\n  \t},\n  \te: {\n  \t\tgeneric_flattened: number,\n  \t},\n  };\n  \n  export type AGenericStruct<T> = {\n  \tfield: Demo<T, boolean>,\n  };\n  \n  export type ActualType = {\n  \ta: GenericType<string>,\n  };\n  \n  export type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n  \tid: string,\n  \tmethod: string,\n  } } | { t: \"C\"; c: string };\n  \n  export type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n  \tfield: string,\n  } } | { type: \"B\"; data: {\n  \tother: number,\n  } };\n  \n  export type B = {\n  \tb: number,\n  };\n  \n  export type BasicEnum = \"A\" | \"B\";\n  \n  export type BoxFlattened = BoxedInner;\n  \n  export type BoxInline = {\n  \tc: {\n  \t\ta: number,\n  \t},\n  };\n  \n  export type BoxedInner = {\n  \ta: number,\n  };\n  \n  export type BracedStruct = string;\n  \n  export type ChainedGenericDefault<T = string, U = T> = {\n  \tfirst: T,\n  \tsecond: U,\n  };\n  \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  export type CommentedEnum = \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  ({ A: number }) & { B?: never } | \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  ({ B: {\n  \t/**\n  \t *  Some triple-slash comment\n  \t *  Some more triple-slash comment\n  \t */\n  \ta: number,\n  } }) & { A?: never };\n  \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  export type CommentedStruct = {\n  \t/**\n  \t *  Some triple-slash comment\n  \t *  Some more triple-slash comment\n  \t */\n  \ta: number,\n  };\n  \n  export type ConstGenericInConstContainer = {\n  \tdata: number[],\n  \ta: number[],\n  \td: [number, number],\n  };\n  \n  export type ConstGenericInNonConstContainer = {\n  \tdata: [number],\n  \ta: [number, number],\n  \td: [number, number],\n  };\n  \n  export type Container1 = {\n  \tfoo: Generic1<number>,\n  \tbar: Generic1<number>[],\n  \tbaz: { [key in string]: Generic1<string> },\n  };\n  \n  export type ContainerTypeOverrideEnum = string;\n  \n  export type ContainerTypeOverrideGeneric = string;\n  \n  export type ContainerTypeOverrideStruct = string;\n  \n  export type ContainerTypeOverrideToGeneric<T> = T;\n  \n  export type ContainerTypeOverrideTuple = [string, number];\n  \n  export type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n  \n  export type D = {\n  \tflattened: number,\n  };\n  \n  export type Demo<A, B> = {\n  \ta: A,\n  \tb: B,\n  };\n  \n  export type DeprecatedEnumVariants = \n  /**\n   * @deprecated\n   */\n  \"A\" | \n  /**\n   * @deprecated Nope\n   */\n  \"B\" | \n  /**\n   * @deprecated Nope\n   */\n  \"C\";\n  \n  export type DeprecatedFields = {\n  \ta: number,\n  \t/**\n  \t * @deprecated\n  \t */\n  \tb: string,\n  \t/**\n  \t * @deprecated This field is cringe!\n  \t */\n  \tc: string,\n  \t/**\n  \t * @deprecated This field is cringe!\n  \t */\n  \td: string,\n  };\n  \n  export type DeprecatedTupleVariant = [\n  /**\n   * @deprecated\n   */\n  string, \n  /**\n   * @deprecated Nope\n   */\n  string, \n  /**\n   * @deprecated Nope\n   */\n  number];\n  \n  /**\n   * @deprecated\n   */\n  export type DeprecatedType = {\n  \ta: number,\n  };\n  \n  /**\n   * @deprecated Look at you big man using a deprecation message\n   */\n  export type DeprecatedTypeWithMsg = {\n  \ta: number,\n  };\n  \n  /**\n   * @deprecated Look at you big man using a deprecation message\n   */\n  export type DeprecatedTypeWithMsg2 = {\n  \ta: number,\n  };\n  \n  export type DoubleFlattened = {\n  \ta: ToBeFlattened,\n  \tb: ToBeFlattened,\n  };\n  \n  export type Eight = { A: string } | \"B\";\n  \n  export type EmptyEnum = never;\n  \n  export type EmptyEnumTagged = never;\n  \n  export type EmptyEnumTaggedWContent = never;\n  \n  export type EmptyEnumUntagged = never;\n  \n  export type EmptyStruct = Record<string, never>;\n  \n  export type EmptyStructWithTag = {\n  \ta: \"EmptyStructWithTag\",\n  };\n  \n  export type Enum = { t: \"A\" } | { t: \"B\" };\n  \n  export type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n  \n  export type Enum3 = { t: \"A\"; b: string };\n  \n  export type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n  \ta: string,\n  \tbbbbbb: number,\n  } }) & { A?: never; bbb?: never; cccc?: never };\n  \n  export type EnumReferenceRecordKey = {\n  \ta: Partial<{ [key in BasicEnum]: number }>,\n  };\n  \n  export type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n  \n  export type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n  \n  export type EnumWithVariantAlias = \"Variant\" | \"Other\";\n  \n  export type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n  \n  export type ExternallyTagged = \"A\" | ({ B: {\n  \tid: string,\n  \tmethod: string,\n  } }) & { C?: never } | ({ C: string }) & { B?: never };\n  \n  export type ExtraBracketsInTupleVariant = { A: string };\n  \n  export type ExtraBracketsInUnnamedStruct = string;\n  \n  export type First = {\n  \ta: string,\n  };\n  \n  export type FlattenA = {\n  \ta: number,\n  \tb: number,\n  };\n  \n  export type FlattenB = {\n  \tc: number,\n  } & FlattenA;\n  \n  export type FlattenC = {\n  \tc: number,\n  } & FlattenA;\n  \n  export type FlattenD = {\n  \ta: FlattenA,\n  \tc: number,\n  };\n  \n  export type FlattenE = {\n  \tb: ({\n  \t\tc: number,\n  \t}) & (FlattenA),\n  \td: number,\n  };\n  \n  export type FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n  \n  export type FlattenEnumStruct = {\n  \touter: string,\n  } & FlattenEnum;\n  \n  export type FlattenF = {\n  \tb: ({\n  \t\tc: number,\n  \t}) & (FlattenA),\n  \td: number,\n  };\n  \n  export type FlattenG = {\n  \tb: FlattenB,\n  \td: number,\n  };\n  \n  export type FlattenOnNestedEnum = {\n  \tid: string,\n  } & NestedEnum;\n  \n  export type FlattenedInner = Inner;\n  \n  export type Fourth = {\n  \ta: First,\n  \tb: {\n  \t\ta: string,\n  \t},\n  };\n  \n  export type Generic1<T> = {\n  \tvalue: T,\n  \tvalues: T[],\n  };\n  \n  export type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n  \ta: A,\n  \tb: B,\n  \tc: C,\n  } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n  \n  export type GenericAutoBound<T> = {\n  \tvalue: T,\n  \tvalues: T[],\n  };\n  \n  export type GenericAutoBound2<T> = {\n  \tvalue: T,\n  \tvalues: T[],\n  };\n  \n  export type GenericDefault<T = string> = {\n  \tvalue: T,\n  };\n  \n  export type GenericDefaultSkipped<T> = {\n  \tvalue: T,\n  };\n  \n  export type GenericDefaultSkippedNonType<T> = {\n  \tvalue: number,\n  };\n  \n  export type GenericFlattened<T> = {\n  \tgeneric_flattened: T,\n  };\n  \n  export type GenericNewType1<T> = T[][];\n  \n  export type GenericParameterOrderPreserved = {\n  \tpair: Pair<number, string>,\n  };\n  \n  export type GenericStruct<T> = {\n  \targ: T,\n  };\n  \n  export type GenericStruct2<T> = {\n  \ta: T,\n  \tb: [T, T],\n  \tc: [T, [T, T]],\n  \td: [T, T, T],\n  \te: [([T, T]), ([T, T]), ([T, T])],\n  \tf: T[],\n  \tg: T[][],\n  \th: ([([T, T]), ([T, T]), ([T, T])])[],\n  };\n  \n  export type GenericTuple<T> = [T, T[], T[][]];\n  \n  export type GenericTupleStruct<T> = T;\n  \n  export type GenericType<T> = \"Undefined\" | T;\n  \n  export type HasGenericAlias = { [key in number]: string };\n  \n  export type InlineConstGenericContainer = {\n  \tb: {\n  \t\tdata: [number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t},\n  \tc: {\n  \t\tdata: [number, number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t},\n  \td: [number, number],\n  };\n  \n  export type InlineEnumField = { A: {\n  \ta: string,\n  } };\n  \n  export type InlineFlattenGenerics = {\n  \tg: InlineFlattenGenericsG<string>,\n  \tgi: {\n  \t\tt: string,\n  \t},\n  } & InlineFlattenGenericsG<string>;\n  \n  export type InlineFlattenGenericsG<T> = {\n  \tt: T,\n  };\n  \n  export type InlineOptionalType = {\n  \toptional_field: {\n  \ta: string,\n  } | null,\n  };\n  \n  export type InlineRecursiveConstGeneric = {\n  \tdata: number[],\n  \ta: number[],\n  \td: [number, number, number],\n  \te: InlineRecursiveConstGeneric,\n  };\n  \n  export type InlineRecursiveConstGenericContainer = {\n  \tb: {\n  \t\tdata: [number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t\te: InlineRecursiveConstGeneric,\n  \t},\n  \tc: {\n  \t\tdata: [number, number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t\te: InlineRecursiveConstGeneric,\n  \t},\n  \td: [number, number],\n  };\n  \n  export type InlineStruct = {\n  \tref_struct: SimpleStruct,\n  \tval: number,\n  };\n  \n  export type InlineTuple = {\n  \tdemo: [string, boolean],\n  };\n  \n  export type InlineTuple2 = {\n  \tdemo: [{\n  \tdemo: [string, boolean],\n  }, boolean],\n  };\n  \n  export type InlinerStruct = {\n  \tinline_this: {\n  \t\tref_struct: SimpleStruct,\n  \t\tval: number,\n  \t},\n  \tdont_inline_this: RefStruct,\n  };\n  \n  export type Inner = {\n  \ta: number,\n  } & FlattenedInner;\n  \n  export type InternallyTaggedD = {\n  \ttype: \"A\",\n  } & { [key in string]: string };\n  \n  export type InternallyTaggedE = { type: \"A\" };\n  \n  export type InternallyTaggedF = { type: \"A\" };\n  \n  export type InternallyTaggedFInner = null;\n  \n  export type InternallyTaggedH = { type: \"A\" };\n  \n  export type InternallyTaggedHInner = null;\n  \n  export type InternallyTaggedL = {\n  \ttype: \"A\",\n  } & { type: \"A\" } | { type: \"B\" };\n  \n  export type InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n  \n  export type InternallyTaggedM = { type: \"A\" };\n  \n  export type InternallyTaggedMInner = \"A\" | \"B\";\n  \n  export type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n  \n  export type InvalidToValidType = {\n  \tcause: null,\n  };\n  \n  export type Issue221External = ({ A: {\n  \ta: string,\n  } }) & { B?: never } | ({ B: {\n  \tb: string,\n  } }) & { A?: never };\n  \n  export type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n  \n  export type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n  \n  export type Issue281 = {\n  \tdefault_unity_arguments: string[],\n  };\n  \n  export type KebabCase = {\n  \t\"test-ing\": string,\n  };\n  \n  export type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n  \n  export type LifetimeGenericStruct<T> = {\n  \tborrowed: T[],\n  \towned: T[],\n  };\n  \n  export type LoadProjectEvent = { event: \"started\"; data: {\n  \tprojectName: string,\n  } } | { event: \"progressTest\"; data: {\n  \tprojectName: string,\n  \tstatus: string,\n  \tprogress: number,\n  } } | { event: \"finished\"; data: {\n  \tprojectName: string,\n  } };\n  \n  export type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n  \tdemo2: string,\n  } }) & { Demo?: never };\n  \n  export type MacroStruct = string;\n  \n  export type MacroStruct2 = {\n  \tdemo: string,\n  };\n  \n  export type MaybeValidKey<T> = T;\n  \n  export type MyEmptyInput = Record<string, never>;\n  \n  export type MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n  \n  export type MyEnumAdjacent = { t: \"Variant\"; c: {\n  \tinner: First,\n  } };\n  \n  export type MyEnumExternal = { Variant: {\n  \tinner: First,\n  } };\n  \n  export type MyEnumTagged = { type: \"Variant\"; inner: First };\n  \n  export type MyEnumUntagged = { inner: First };\n  \n  export type NamedConstGeneric = {\n  \tdata: number[],\n  \ta: number[],\n  \td: [number, number],\n  };\n  \n  export type NamedConstGenericContainer = {\n  \ta: NamedConstGeneric,\n  \tb: NamedConstGeneric,\n  \td: [number, number],\n  };\n  \n  export type NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n  \n  export type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n  \ta: string,\n  } } | { t: \"D\"; c: First };\n  \n  export type NonOptional = string | null;\n  \n  export type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n  \ta: string | null,\n  } }) & { A?: never; C?: never } | ({ C: {\n  \ta?: string | null,\n  } }) & { A?: never; B?: never };\n  \n  export type OptionalOnNamedField = string | null;\n  \n  export type OptionalOnTransparentNamedField = {\n  \tb: string | null,\n  };\n  \n  export type OverridenStruct = {\n  \toverriden_field: string,\n  };\n  \n  export type Pair<Z, A> = {\n  \tfirst: Z,\n  \tsecond: A,\n  };\n  \n  export type PlaceholderInnerField = {\n  \ta: string,\n  };\n  \n  export type Recursive = {\n  \tdemo: Recursive,\n  };\n  \n  export type RecursiveInEnum = { A: {\n  \tdemo: RecursiveInEnum,\n  } };\n  \n  export type RecursiveInline = RecursiveInline;\n  \n  export type RecursiveMapValue = {\n  \tdemo: { [key in string]: RecursiveMapValue },\n  };\n  \n  export type RecursiveTransparent = RecursiveInline;\n  \n  export type RefStruct = TestEnum;\n  \n  export type Regular = { [key in string]: null };\n  \n  export type Rename = \"OneWord\" | \"Two words\";\n  \n  export type RenameSerdeSpecialChar = {\n  \t\"a/b\": number,\n  };\n  \n  export type RenameWithWeirdCharsField = {\n  \t\"@odata.context\": string,\n  };\n  \n  export type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n  \n  export type RenamedFieldKeys = {\n  \t\"\": string,\n  \t\"a\\\"b\": string,\n  \t\"a\\\\b\": string,\n  \t\"line\\nbreak\": string,\n  \t\"line\\u2028break\": string,\n  \t\"line\\u2029break\": string,\n  };\n  \n  export type RenamedVariantWithSkippedPayload = \"a-b\";\n  \n  export type Second = {\n  \ta: number,\n  };\n  \n  export type Seventh = {\n  \ta: First,\n  \tb: Second,\n  };\n  \n  export type SimpleStruct = {\n  \ta: number,\n  \tb: string,\n  \tc: [number, string, number],\n  \td: string[],\n  \te: string | null,\n  };\n  \n  /**  Some single-line comment */\n  export type SingleLineComment = \n  /**  Some single-line comment */\n  ({ A: number }) & { B?: never } | \n  /**  Some single-line comment */\n  ({ B: {\n  \t/**  Some single-line comment */\n  \ta: number,\n  } }) & { A?: never };\n  \n  export type Sixth = {\n  \ta: First,\n  \tb: First,\n  };\n  \n  export type SkipField = {\n  \tb: number,\n  };\n  \n  export type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n  \tb: number,\n  } }) & { A?: never };\n  \n  export type SkipOnlyField = Record<string, never>;\n  \n  export type SkipStructFields = {\n  \ta: number,\n  };\n  \n  export type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n  \n  export type SkipVariant = { A: string };\n  \n  export type SkipVariant2 = { tag: \"A\"; data: string };\n  \n  export type SkipVariant3 = { A: {\n  \ta: string,\n  } };\n  \n  export type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n  \n  export type SpectaSkipNonTypeField = {\n  \ta: number,\n  };\n  \n  export type SpectaTypeOverride = {\n  \tstring_ident: string,\n  \tu32_ident: number,\n  \tpath: string,\n  \ttuple: [string, number],\n  };\n  \n  export type Struct2 = {\n  \tb: string,\n  };\n  \n  export type StructNew = {\n  \tt: \"StructNew\",\n  \ta: string,\n  };\n  \n  export type StructRenameAllUppercase = {\n  \tA: number,\n  \tB: number,\n  };\n  \n  export type StructWithAlias = {\n  \tfield: string,\n  };\n  \n  export type StructWithAliasAndRename = {\n  \trenamed_field: string,\n  };\n  \n  export type StructWithMultipleAliases = {\n  \tfield: string,\n  };\n  \n  export type TagOnStructWithInline = {\n  \ttype: \"TagOnStructWithInline\",\n  \ta: First,\n  \tb: {\n  \t\ta: string,\n  \t},\n  };\n  \n  export type Tenth = string | \"B\" | {\n  \ta: string,\n  } | First;\n  \n  export type TestCollectionRegister = never;\n  \n  export type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n  \ta: number,\n  } }) & { Multiple?: never; Single?: never };\n  \n  export type Third = {\n  \tb: { [key in string]: string },\n  \tc: First,\n  } & First;\n  \n  export type ToBeFlattened = {\n  \ta: string,\n  };\n  \n  export type TransparentStruct = string;\n  \n  export type TransparentType = TransparentTypeInner;\n  \n  export type TransparentType2 = null;\n  \n  export type TransparentTypeInner = {\n  \tinner: string,\n  };\n  \n  export type TransparentTypeWithOverride = string;\n  \n  export type TransparentWithSkip = null;\n  \n  export type TransparentWithSkip2 = string;\n  \n  export type TransparentWithSkip3 = string;\n  \n  export type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n  \n  export type TupleStruct = string;\n  \n  export type TupleStruct1 = number;\n  \n  export type TupleStruct3 = [number, boolean, string];\n  \n  export type TupleStructWithRep = string;\n  \n  export type Unit1 = null;\n  \n  export type Unit2 = Record<string, never>;\n  \n  export type Unit3 = [];\n  \n  export type Unit4 = null;\n  \n  export type Unit5 = \"A\";\n  \n  export type Unit6 = { A: null };\n  \n  export type Unit7 = { A: Record<string, never> };\n  \n  export type UnitVariants = \"A\" | \"B\" | \"C\";\n  \n  export type UntaggedVariants = string | number | { id: string } | [string, boolean];\n  \n  export type UntaggedVariantsKey = string | number;\n  \n  export type UntaggedVariantsWithDuplicateBranches = null | number;\n  \n  export type UntaggedVariantsWithoutValue = string | [number, string] | number;\n  \n  export type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n  \n  export type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n  \n  export type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n  ════════════════════════════════════════\n\ntests/\n  tests/\n    types.ts (12932 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    \n    import type * as std$ops from \"../../std/ops\";\n    import type * as std$result from \"../../std/result\";\n    import type * as test$types from \"../../test/types\";\n    import type * as test$types$type_type from \"../../test/types/type_type\";\n    export type Primitives = {\n    \ti8: number,\n    \ti16: number,\n    \ti32: number,\n    \tu8: number,\n    \tu16: number,\n    \tu32: number,\n    \tf32: number,\n    \tf64: number,\n    \tbool: boolean,\n    \tchar: string,\n    \t\"Range<i32>\": std$ops.Range<number>,\n    \t\"RangeInclusive<i32>\": std$ops.RangeInclusive<number>,\n    \t\"()\": null,\n    \t\"(String, i32)\": [string, number],\n    \t\"(String, i32, bool)\": [string, number, boolean],\n    \t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n    \t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n    \t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n    \tString: string,\n    \tPathBuf: string,\n    \tIpAddr: string,\n    \tIpv4Addr: string,\n    \tIpv6Addr: string,\n    \tSocketAddr: string,\n    \tSocketAddrV4: string,\n    \tSocketAddrV6: string,\n    \t\"Cow<'static, str>\": string,\n    \t\"Cow<'static, i32>\": number,\n    \t\"&'static str\": string,\n    \t\"&'static bool\": boolean,\n    \t\"&'static i32\": number,\n    \t\"Vec<i32>\": number[],\n    \t\"&'static [i32]\": number[],\n    \t\"&'static [i32; 3]\": [number, number, number],\n    \t\"[i32; 3]\": [number, number, number],\n    \t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \t\"&'static [MyEnum]\": test$types.MyEnum[],\n    \t\"&'static [MyEnum; 6]\": [test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum],\n    \t\"[MyEnum; 2]\": [test$types.MyEnum, test$types.MyEnum],\n    \t\"&'static [i32; 1]\": [number],\n    \t\"&'static [i32; 0]\": [],\n    \t\"Option<i32>\": number | null,\n    \t\"Option<()>\": null,\n    \t\"Option<Vec<i32>>\": number[] | null,\n    \t\"Result<String, i32>\": std$result.Result<string, number>,\n    \t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n    \t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n    \t\"[Vec<String>; 3]\": [string[], string[], string[]],\n    \t\"Option<Option<String>>\": string | null,\n    \t\"Option<Option<Option<String>>>\": string | null,\n    \t\"PhantomData<()>\": null,\n    \t\"PhantomData<String>\": null,\n    \tInfallible: never,\n    \tUnit1: test$types.Unit1,\n    \tUnit2: test$types.Unit2,\n    \tUnit3: test$types.Unit3,\n    \tUnit4: test$types.Unit4,\n    \tUnit5: test$types.Unit5,\n    \tUnit6: test$types.Unit6,\n    \tUnit7: test$types.Unit7,\n    \tSimpleStruct: test$types.SimpleStruct,\n    \tTupleStruct1: test$types.TupleStruct1,\n    \tTupleStruct3: test$types.TupleStruct3,\n    \tTestEnum: test$types.TestEnum,\n    \tRefStruct: test$types.RefStruct,\n    \tInlinerStruct: test$types.InlinerStruct,\n    \t\"GenericStruct<i32>\": test$types.GenericStruct<number>,\n    \t\"GenericStruct<String>\": test$types.GenericStruct<string>,\n    \tFlattenEnumStruct: test$types.FlattenEnumStruct,\n    \tOverridenStruct: test$types.OverridenStruct,\n    \tHasGenericAlias: test$types.HasGenericAlias,\n    \tEnumMacroAttributes: test$types.EnumMacroAttributes,\n    \tInlineEnumField: test$types.InlineEnumField,\n    \tInlineOptionalType: test$types.InlineOptionalType,\n    \tRename: test$types.Rename,\n    \tTransparentType: test$types.TransparentType,\n    \tTransparentType2: test$types.TransparentType2,\n    \tTransparentTypeWithOverride: test$types.TransparentTypeWithOverride,\n    \t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n    \t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test$types.BasicEnum]: null }>,\n    \t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test$types.BasicEnum]: number }>,\n    \t\"Option<Option<Option<Option<i32>>>>\": number | null,\n    \t\"Vec<PlaceholderInnerField>\": test$types.PlaceholderInnerField[],\n    \tEnumReferenceRecordKey: test$types.EnumReferenceRecordKey,\n    \tFlattenOnNestedEnum: test$types.FlattenOnNestedEnum,\n    \tMyEmptyInput: test$types.MyEmptyInput,\n    \t\"(String)\": string,\n    \t\"(String,)\": [string],\n    \tExtraBracketsInTupleVariant: test$types.ExtraBracketsInTupleVariant,\n    \tExtraBracketsInUnnamedStruct: test$types.ExtraBracketsInUnnamedStruct,\n    \t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \tInlineTuple: test$types.InlineTuple,\n    \tInlineTuple2: test$types.InlineTuple2,\n    \t\"Box<str>\": string,\n    \t\"Box<String>\": string,\n    \tSkippedFieldWithinVariant: test$types.SkippedFieldWithinVariant,\n    \tKebabCase: test$types.KebabCase,\n    \t\"&[&str]\": string[],\n    \t\"Issue281<'_>\": test$types.Issue281,\n    \t\"LifetimeGenericStruct<'_, i32>\": test$types.LifetimeGenericStruct<number>,\n    \t\"LifetimeGenericEnum<'_, i32>\": test$types.LifetimeGenericEnum<number>,\n    \tRenameWithWeirdCharsField: test$types.RenameWithWeirdCharsField,\n    \tRenameWithWeirdCharsVariant: test$types.RenameWithWeirdCharsVariant,\n    \tRenamedFieldKeys: test$types.RenamedFieldKeys,\n    \tRenamedVariantWithSkippedPayload: test$types.RenamedVariantWithSkippedPayload,\n    \t\"type_type::Type\": test$types$type_type.Type,\n    \tActualType: test$types.ActualType,\n    \tSpectaTypeOverride: test$types.SpectaTypeOverride,\n    \tContainerTypeOverrideStruct: test$types.ContainerTypeOverrideStruct,\n    \tContainerTypeOverrideEnum: test$types.ContainerTypeOverrideEnum,\n    \t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test$types.ContainerTypeOverrideGeneric,\n    \t\"ContainerTypeOverrideToGeneric<i32>\": test$types.ContainerTypeOverrideToGeneric<number>,\n    \tContainerTypeOverrideTuple: test$types.ContainerTypeOverrideTuple,\n    \t\"ContainerTypeOverrideTupleGeneric<i32>\": test$types.ContainerTypeOverrideTupleGeneric<number>,\n    \tInvalidToValidType: test$types.InvalidToValidType,\n    \tTupleStruct: test$types.TupleStruct,\n    \tTupleStructWithRep: test$types.TupleStructWithRep,\n    \t\"GenericTupleStruct<String>\": test$types.GenericTupleStruct<string>,\n    \tBracedStruct: test$types.BracedStruct,\n    \tStruct: test$types.StructNew,\n    \tStruct2: test$types.Struct2,\n    \tEnum: test$types.Enum,\n    \tEnum2: test$types.Enum2,\n    \tEnum3: test$types.Enum3,\n    \tStructRenameAllUppercase: test$types.StructRenameAllUppercase,\n    \tRenameSerdeSpecialChar: test$types.RenameSerdeSpecialChar,\n    \tEnumRenameAllUppercase: test$types.EnumRenameAllUppercase,\n    \tRecursive: test$types.Recursive,\n    \tRecursiveMapValue: test$types.RecursiveMapValue,\n    \tRecursiveTransparent: test$types.RecursiveTransparent,\n    \tRecursiveInEnum: test$types.RecursiveInEnum,\n    \tNonOptional: test$types.NonOptional,\n    \tOptionalOnNamedField: test$types.OptionalOnNamedField,\n    \tOptionalOnTransparentNamedField: test$types.OptionalOnTransparentNamedField,\n    \tOptionalInEnum: test$types.OptionalInEnum,\n    \tUntaggedVariants: test$types.UntaggedVariants,\n    \tUntaggedVariantsWithoutValue: test$types.UntaggedVariantsWithoutValue,\n    \tUntaggedVariantsWithDuplicateBranches: test$types.UntaggedVariantsWithDuplicateBranches,\n    \t\"HashMap<String, ()>\": { [key in string]: null },\n    \tRegular: test$types.Regular,\n    \t\"HashMap<Infallible, ()>\": { [key in never]: null },\n    \t\"HashMap<TransparentStruct, ()>\": { [key in test$types.TransparentStruct]: null },\n    \t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test$types.UnitVariants]: null }>,\n    \t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test$types.UntaggedVariantsKey]: null }>,\n    \tValidMaybeValidKey: test$types.ValidMaybeValidKey,\n    \tValidMaybeValidKeyNested: test$types.ValidMaybeValidKeyNested,\n    \tMacroStruct: test$types.MacroStruct,\n    \tMacroStruct2: test$types.MacroStruct2,\n    \tMacroEnum: test$types.MacroEnum,\n    \tDeprecatedType: test$types.DeprecatedType,\n    \tDeprecatedTypeWithMsg: test$types.DeprecatedTypeWithMsg,\n    \tDeprecatedTypeWithMsg2: test$types.DeprecatedTypeWithMsg2,\n    \tDeprecatedFields: test$types.DeprecatedFields,\n    \tDeprecatedTupleVariant: test$types.DeprecatedTupleVariant,\n    \tDeprecatedEnumVariants: test$types.DeprecatedEnumVariants,\n    \tCommentedStruct: test$types.CommentedStruct,\n    \tCommentedEnum: test$types.CommentedEnum,\n    \tSingleLineComment: test$types.SingleLineComment,\n    \tNonGeneric: test$types.Demo<number, boolean>,\n    \t\"HalfGenericA<u8>\": test$types.Demo<number, boolean>,\n    \t\"HalfGenericB<bool>\": test$types.Demo<number, boolean>,\n    \t\"FullGeneric<u8, bool>\": test$types.Demo<number, boolean>,\n    \t\"Another<bool>\": test$types.Demo<number, boolean>,\n    \t\"MapA<u32>\": { [key in string]: number },\n    \t\"MapB<u32>\": { [key in number]: string },\n    \t\"MapC<u32>\": { [key in string]: test$types.AGenericStruct<number> },\n    \t\"AGenericStruct<u32>\": test$types.AGenericStruct<number>,\n    \tA: test$types.A,\n    \tDoubleFlattened: test$types.DoubleFlattened,\n    \tFlattenedInner: test$types.FlattenedInner,\n    \tBoxFlattened: test$types.BoxFlattened,\n    \tBoxInline: test$types.BoxInline,\n    \tFirst: test$types.First,\n    \tSecond: test$types.Second,\n    \tThird: test$types.Third,\n    \tFourth: test$types.Fourth,\n    \tTagOnStructWithInline: test$types.TagOnStructWithInline,\n    \tSixth: test$types.Sixth,\n    \tSeventh: test$types.Seventh,\n    \tEight: test$types.Eight,\n    \tNinth: test$types.Ninth,\n    \tTenth: test$types.Tenth,\n    \tMyEnumTagged: test$types.MyEnumTagged,\n    \tMyEnumExternal: test$types.MyEnumExternal,\n    \tMyEnumAdjacent: test$types.MyEnumAdjacent,\n    \tMyEnumUntagged: test$types.MyEnumUntagged,\n    \tEmptyStruct: test$types.EmptyStruct,\n    \tEmptyStructWithTag: test$types.EmptyStructWithTag,\n    \tAdjacentlyTagged: test$types.AdjacentlyTagged,\n    \tLoadProjectEvent: test$types.LoadProjectEvent,\n    \tExternallyTagged: test$types.ExternallyTagged,\n    \tIssue221External: test$types.Issue221External,\n    \tInternallyTaggedD: test$types.InternallyTaggedD,\n    \tInternallyTaggedE: test$types.InternallyTaggedE,\n    \tInternallyTaggedF: test$types.InternallyTaggedF,\n    \tInternallyTaggedH: test$types.InternallyTaggedH,\n    \tInternallyTaggedL: test$types.InternallyTaggedL,\n    \tInternallyTaggedM: test$types.InternallyTaggedM,\n    \tStructWithAlias: test$types.StructWithAlias,\n    \tStructWithMultipleAliases: test$types.StructWithMultipleAliases,\n    \tStructWithAliasAndRename: test$types.StructWithAliasAndRename,\n    \tEnumWithVariantAlias: test$types.EnumWithVariantAlias,\n    \tEnumWithMultipleVariantAliases: test$types.EnumWithMultipleVariantAliases,\n    \tEnumWithVariantAliasAndRename: test$types.EnumWithVariantAliasAndRename,\n    \tInternallyTaggedWithAlias: test$types.InternallyTaggedWithAlias,\n    \tAdjacentlyTaggedWithAlias: test$types.AdjacentlyTaggedWithAlias,\n    \tUntaggedWithAlias: test$types.UntaggedWithAlias,\n    \tIssue221UntaggedSafe: test$types.Issue221UntaggedSafe,\n    \tIssue221UntaggedMixed: test$types.Issue221UntaggedMixed,\n    \tEmptyEnum: test$types.EmptyEnum,\n    \tEmptyEnumTagged: test$types.EmptyEnumTagged,\n    \tEmptyEnumTaggedWContent: test$types.EmptyEnumTaggedWContent,\n    \tEmptyEnumUntagged: test$types.EmptyEnumUntagged,\n    \tSkipOnlyField: test$types.SkipOnlyField,\n    \tSkipField: test$types.SkipField,\n    \tSkipVariant: test$types.SkipVariant,\n    \tSkipUnnamedFieldInVariant: test$types.SkipUnnamedFieldInVariant,\n    \tSkipNamedFieldInVariant: test$types.SkipNamedFieldInVariant,\n    \tTransparentWithSkip: test$types.TransparentWithSkip,\n    \tTransparentWithSkip2: test$types.TransparentWithSkip2,\n    \tTransparentWithSkip3: test$types.TransparentWithSkip3,\n    \tSkipVariant2: test$types.SkipVariant2,\n    \tSkipVariant3: test$types.SkipVariant3,\n    \tSkipStructFields: test$types.SkipStructFields,\n    \tSpectaSkipNonTypeField: test$types.SpectaSkipNonTypeField,\n    \tFlattenA: test$types.FlattenA,\n    \tFlattenB: test$types.FlattenB,\n    \tFlattenC: test$types.FlattenC,\n    \tFlattenD: test$types.FlattenD,\n    \tFlattenE: test$types.FlattenE,\n    \tFlattenF: test$types.FlattenF,\n    \tFlattenG: test$types.FlattenG,\n    \tTupleNested: test$types.TupleNested,\n    \t\"Generic1<()>\": test$types.Generic1<null>,\n    \t\"GenericAutoBound<()>\": test$types.GenericAutoBound<null>,\n    \t\"GenericAutoBound2<()>\": test$types.GenericAutoBound2<null>,\n    \tContainer1: test$types.Container1,\n    \t\"Generic2<(), String, i32>\": test$types.Generic2<null, string, number>,\n    \t\"GenericNewType1<()>\": test$types.GenericNewType1<null>,\n    \t\"GenericTuple<()>\": test$types.GenericTuple<null>,\n    \t\"GenericStruct2<()>\": test$types.GenericStruct2<null>,\n    \t\"InlineGenericNewtype<String>\": string,\n    \t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n    \tvalue: string,\n    } }) & { Unnamed?: never }],\n    \t\"InlineFlattenGenericsG<()>\": test$types.InlineFlattenGenericsG<null>,\n    \tInlineFlattenGenerics: test$types.InlineFlattenGenerics,\n    \tGenericDefault: test$types.GenericDefault,\n    \tChainedGenericDefault: test$types.ChainedGenericDefault,\n    \t\"ChainedGenericDefault<String, String>\": test$types.ChainedGenericDefault,\n    \t\"ChainedGenericDefault<i32>\": test$types.ChainedGenericDefault<number, number>,\n    \t\"ChainedGenericDefault<String, i32>\": test$types.ChainedGenericDefault<string, number>,\n    \tGenericDefaultSkipped: test$types.GenericDefaultSkipped<string>,\n    \tGenericDefaultSkippedNonType: test$types.GenericDefaultSkippedNonType<unknown>,\n    \tGenericParameterOrderPreserved: test$types.GenericParameterOrderPreserved,\n    \tConstGenericInNonConstContainer: test$types.ConstGenericInNonConstContainer,\n    \tConstGenericInConstContainer: test$types.ConstGenericInConstContainer,\n    \tNamedConstGenericContainer: test$types.NamedConstGenericContainer,\n    \tInlineConstGenericContainer: test$types.InlineConstGenericContainer,\n    \tInlineRecursiveConstGenericContainer: test$types.InlineRecursiveConstGenericContainer,\n    \tTestCollectionRegister: test$types.TestCollectionRegister,\n    \tTestCollectionRegister: test$types.TestCollectionRegister,\n    };\n    ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-files-serde_phases.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nstd/\n  ops.ts (181 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type Range<T> = {\n  \tstart: T,\n  \tend: T,\n  };\n  \n  export type RangeInclusive<T> = {\n  \tstart: T,\n  \tend: T,\n  };\n  ════════════════════════════════════════\n\n  result.ts (124 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type Result<T, E> = {\n  \tok: T,\n  \terr: E,\n  };\n  ════════════════════════════════════════\n\ntest/\n  types/\n    type_type.ts (101 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    export type Type = never;\n    ════════════════════════════════════════\n\n  types.ts (17381 bytes)\n  ────────────────────────────────────────\n  // This file has been generated by Specta. Do not edit this file manually.\n  export type A = {\n  \ta: B,\n  \tb: {\n  \t\tb: number,\n  \t},\n  \tc: B,\n  \td: {\n  \t\tflattened: number,\n  \t},\n  \te: {\n  \t\tgeneric_flattened: number,\n  \t},\n  };\n  \n  export type AGenericStruct<T> = {\n  \tfield: Demo<T, boolean>,\n  };\n  \n  export type ActualType = {\n  \ta: GenericType<string>,\n  };\n  \n  export type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n  \tid: string,\n  \tmethod: string,\n  } } | { t: \"C\"; c: string };\n  \n  export type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n  \tfield: string,\n  } } | { type: \"B\"; data: {\n  \tother: number,\n  } };\n  \n  export type B = {\n  \tb: number,\n  };\n  \n  export type BasicEnum = \"A\" | \"B\";\n  \n  export type BoxFlattened = BoxedInner;\n  \n  export type BoxInline = {\n  \tc: {\n  \t\ta: number,\n  \t},\n  };\n  \n  export type BoxedInner = {\n  \ta: number,\n  };\n  \n  export type BracedStruct = string;\n  \n  export type ChainedGenericDefault<T = string, U = T> = {\n  \tfirst: T,\n  \tsecond: U,\n  };\n  \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  export type CommentedEnum = \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  ({ A: number }) & { B?: never } | \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  ({ B: {\n  \t/**\n  \t *  Some triple-slash comment\n  \t *  Some more triple-slash comment\n  \t */\n  \ta: number,\n  } }) & { A?: never };\n  \n  /**\n   *  Some triple-slash comment\n   *  Some more triple-slash comment\n   */\n  export type CommentedStruct = {\n  \t/**\n  \t *  Some triple-slash comment\n  \t *  Some more triple-slash comment\n  \t */\n  \ta: number,\n  };\n  \n  export type ConstGenericInConstContainer = {\n  \tdata: number[],\n  \ta: number[],\n  \td: [number, number],\n  };\n  \n  export type ConstGenericInNonConstContainer = {\n  \tdata: [number],\n  \ta: [number, number],\n  \td: [number, number],\n  };\n  \n  export type Container1 = {\n  \tfoo: Generic1<number>,\n  \tbar: Generic1<number>[],\n  \tbaz: { [key in string]: Generic1<string> },\n  };\n  \n  export type ContainerTypeOverrideEnum = string;\n  \n  export type ContainerTypeOverrideGeneric = string;\n  \n  export type ContainerTypeOverrideStruct = string;\n  \n  export type ContainerTypeOverrideToGeneric<T> = T;\n  \n  export type ContainerTypeOverrideTuple = [string, number];\n  \n  export type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n  \n  export type D = {\n  \tflattened: number,\n  };\n  \n  export type Demo<A, B> = {\n  \ta: A,\n  \tb: B,\n  };\n  \n  export type DeprecatedEnumVariants = \n  /**\n   * @deprecated\n   */\n  \"A\" | \n  /**\n   * @deprecated Nope\n   */\n  \"B\" | \n  /**\n   * @deprecated Nope\n   */\n  \"C\";\n  \n  export type DeprecatedFields = {\n  \ta: number,\n  \t/**\n  \t * @deprecated\n  \t */\n  \tb: string,\n  \t/**\n  \t * @deprecated This field is cringe!\n  \t */\n  \tc: string,\n  \t/**\n  \t * @deprecated This field is cringe!\n  \t */\n  \td: string,\n  };\n  \n  export type DeprecatedTupleVariant = [\n  /**\n   * @deprecated\n   */\n  string, \n  /**\n   * @deprecated Nope\n   */\n  string, \n  /**\n   * @deprecated Nope\n   */\n  number];\n  \n  /**\n   * @deprecated\n   */\n  export type DeprecatedType = {\n  \ta: number,\n  };\n  \n  /**\n   * @deprecated Look at you big man using a deprecation message\n   */\n  export type DeprecatedTypeWithMsg = {\n  \ta: number,\n  };\n  \n  /**\n   * @deprecated Look at you big man using a deprecation message\n   */\n  export type DeprecatedTypeWithMsg2 = {\n  \ta: number,\n  };\n  \n  export type DoubleFlattened = {\n  \ta: ToBeFlattened,\n  \tb: ToBeFlattened,\n  };\n  \n  export type Eight = { A: string } | \"B\";\n  \n  export type EmptyEnum = never;\n  \n  export type EmptyEnumTagged = never;\n  \n  export type EmptyEnumTaggedWContent = never;\n  \n  export type EmptyEnumUntagged = never;\n  \n  export type EmptyStruct = Record<string, never>;\n  \n  export type EmptyStructWithTag = {\n  \ta: \"EmptyStructWithTag\",\n  };\n  \n  export type Enum = { t: \"A\" } | { t: \"B\" };\n  \n  export type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n  \n  export type Enum3 = { t: \"A\"; b: string };\n  \n  export type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n  \ta: string,\n  \tbbbbbb: number,\n  } }) & { A?: never; bbb?: never; cccc?: never };\n  \n  export type EnumReferenceRecordKey = {\n  \ta: Partial<{ [key in BasicEnum]: number }>,\n  };\n  \n  export type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n  \n  export type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n  \n  export type EnumWithVariantAlias = \"Variant\" | \"Other\";\n  \n  export type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n  \n  export type ExternallyTagged = \"A\" | ({ B: {\n  \tid: string,\n  \tmethod: string,\n  } }) & { C?: never } | ({ C: string }) & { B?: never };\n  \n  export type ExtraBracketsInTupleVariant = { A: string };\n  \n  export type ExtraBracketsInUnnamedStruct = string;\n  \n  export type First = {\n  \ta: string,\n  };\n  \n  export type FlattenA = {\n  \ta: number,\n  \tb: number,\n  };\n  \n  export type FlattenB = {\n  \tc: number,\n  } & FlattenA;\n  \n  export type FlattenC = {\n  \tc: number,\n  } & FlattenA;\n  \n  export type FlattenD = {\n  \ta: FlattenA,\n  \tc: number,\n  };\n  \n  export type FlattenE = {\n  \tb: ({\n  \t\tc: number,\n  \t}) & (FlattenA),\n  \td: number,\n  };\n  \n  export type FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n  \n  export type FlattenEnumStruct = {\n  \touter: string,\n  } & FlattenEnum;\n  \n  export type FlattenF = {\n  \tb: ({\n  \t\tc: number,\n  \t}) & (FlattenA),\n  \td: number,\n  };\n  \n  export type FlattenG = {\n  \tb: FlattenB,\n  \td: number,\n  };\n  \n  export type FlattenOnNestedEnum = {\n  \tid: string,\n  } & NestedEnum;\n  \n  export type FlattenedInner = Inner;\n  \n  export type Fourth = {\n  \ta: First,\n  \tb: {\n  \t\ta: string,\n  \t},\n  };\n  \n  export type Generic1<T> = {\n  \tvalue: T,\n  \tvalues: T[],\n  };\n  \n  export type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n  \ta: A,\n  \tb: B,\n  \tc: C,\n  } }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n  \n  export type GenericAutoBound<T> = {\n  \tvalue: T,\n  \tvalues: T[],\n  };\n  \n  export type GenericAutoBound2<T> = {\n  \tvalue: T,\n  \tvalues: T[],\n  };\n  \n  export type GenericDefault<T = string> = {\n  \tvalue: T,\n  };\n  \n  export type GenericDefaultSkipped<T> = {\n  \tvalue: T,\n  };\n  \n  export type GenericDefaultSkippedNonType<T> = {\n  \tvalue: number,\n  };\n  \n  export type GenericFlattened<T> = {\n  \tgeneric_flattened: T,\n  };\n  \n  export type GenericNewType1<T> = T[][];\n  \n  export type GenericParameterOrderPreserved = {\n  \tpair: Pair<number, string>,\n  };\n  \n  export type GenericStruct<T> = {\n  \targ: T,\n  };\n  \n  export type GenericStruct2<T> = {\n  \ta: T,\n  \tb: [T, T],\n  \tc: [T, [T, T]],\n  \td: [T, T, T],\n  \te: [([T, T]), ([T, T]), ([T, T])],\n  \tf: T[],\n  \tg: T[][],\n  \th: ([([T, T]), ([T, T]), ([T, T])])[],\n  };\n  \n  export type GenericTuple<T> = [T, T[], T[][]];\n  \n  export type GenericTupleStruct<T> = T;\n  \n  export type GenericType<T> = \"Undefined\" | T;\n  \n  export type HasGenericAlias = { [key in number]: string };\n  \n  export type InlineConstGenericContainer = {\n  \tb: {\n  \t\tdata: [number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t},\n  \tc: {\n  \t\tdata: [number, number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t},\n  \td: [number, number],\n  };\n  \n  export type InlineEnumField = { A: {\n  \ta: string,\n  } };\n  \n  export type InlineFlattenGenerics = {\n  \tg: InlineFlattenGenericsG<string>,\n  \tgi: {\n  \t\tt: string,\n  \t},\n  } & InlineFlattenGenericsG<string>;\n  \n  export type InlineFlattenGenericsG<T> = {\n  \tt: T,\n  };\n  \n  export type InlineOptionalType = {\n  \toptional_field: {\n  \ta: string,\n  } | null,\n  };\n  \n  export type InlineRecursiveConstGeneric = {\n  \tdata: number[],\n  \ta: number[],\n  \td: [number, number, number],\n  \te: InlineRecursiveConstGeneric,\n  };\n  \n  export type InlineRecursiveConstGenericContainer = {\n  \tb: {\n  \t\tdata: [number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t\te: InlineRecursiveConstGeneric,\n  \t},\n  \tc: {\n  \t\tdata: [number, number, number],\n  \t\ta: [number, number],\n  \t\td: [number, number, number],\n  \t\te: InlineRecursiveConstGeneric,\n  \t},\n  \td: [number, number],\n  };\n  \n  export type InlineStruct = {\n  \tref_struct: SimpleStruct,\n  \tval: number,\n  };\n  \n  export type InlineTuple = {\n  \tdemo: [string, boolean],\n  };\n  \n  export type InlineTuple2 = {\n  \tdemo: [{\n  \tdemo: [string, boolean],\n  }, boolean],\n  };\n  \n  export type InlinerStruct = {\n  \tinline_this: {\n  \t\tref_struct: SimpleStruct,\n  \t\tval: number,\n  \t},\n  \tdont_inline_this: RefStruct,\n  };\n  \n  export type Inner = {\n  \ta: number,\n  } & FlattenedInner;\n  \n  export type InternallyTaggedD = {\n  \ttype: \"A\",\n  } & { [key in string]: string };\n  \n  export type InternallyTaggedE = { type: \"A\" };\n  \n  export type InternallyTaggedF = { type: \"A\" };\n  \n  export type InternallyTaggedFInner = null;\n  \n  export type InternallyTaggedH = { type: \"A\" };\n  \n  export type InternallyTaggedHInner = null;\n  \n  export type InternallyTaggedL = {\n  \ttype: \"A\",\n  } & { type: \"A\" } | { type: \"B\" };\n  \n  export type InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n  \n  export type InternallyTaggedM = { type: \"A\" };\n  \n  export type InternallyTaggedMInner = \"A\" | \"B\";\n  \n  export type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n  \n  export type InvalidToValidType = {\n  \tcause: null,\n  };\n  \n  export type Issue221External = ({ A: {\n  \ta: string,\n  } }) & { B?: never } | ({ B: {\n  \tb: string,\n  } }) & { A?: never };\n  \n  export type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n  \n  export type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n  \n  export type Issue281 = {\n  \tdefault_unity_arguments: string[],\n  };\n  \n  /**  https://github.com/specta-rs/specta/issues/374 */\n  export type Issue374 = Issue374_Serialize | Issue374_Deserialize;\n  \n  /**  https://github.com/specta-rs/specta/issues/374 */\n  export type Issue374_Deserialize = {\n  \tfoo?: boolean,\n  \tbar?: boolean,\n  };\n  \n  /**  https://github.com/specta-rs/specta/issues/374 */\n  export type Issue374_Serialize = {\n  \tfoo?: boolean,\n  \tbar?: boolean,\n  };\n  \n  export type KebabCase = {\n  \t\"test-ing\": string,\n  };\n  \n  export type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n  \n  export type LifetimeGenericStruct<T> = {\n  \tborrowed: T[],\n  \towned: T[],\n  };\n  \n  export type LoadProjectEvent = { event: \"started\"; data: {\n  \tprojectName: string,\n  } } | { event: \"progressTest\"; data: {\n  \tprojectName: string,\n  \tstatus: string,\n  \tprogress: number,\n  } } | { event: \"finished\"; data: {\n  \tprojectName: string,\n  } };\n  \n  export type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n  \tdemo2: string,\n  } }) & { Demo?: never };\n  \n  export type MacroStruct = string;\n  \n  export type MacroStruct2 = {\n  \tdemo: string,\n  };\n  \n  export type MaybeValidKey<T> = T;\n  \n  export type MyEmptyInput = Record<string, never>;\n  \n  export type MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n  \n  export type MyEnumAdjacent = { t: \"Variant\"; c: {\n  \tinner: First,\n  } };\n  \n  export type MyEnumExternal = { Variant: {\n  \tinner: First,\n  } };\n  \n  export type MyEnumTagged = { type: \"Variant\"; inner: First };\n  \n  export type MyEnumUntagged = { inner: First };\n  \n  export type NamedConstGeneric = {\n  \tdata: number[],\n  \ta: number[],\n  \td: [number, number],\n  };\n  \n  export type NamedConstGenericContainer = {\n  \ta: NamedConstGeneric,\n  \tb: NamedConstGeneric,\n  \td: [number, number],\n  };\n  \n  export type NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n  \n  export type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n  \ta: string,\n  } } | { t: \"D\"; c: First };\n  \n  export type NonOptional = string | null;\n  \n  export type Optional = Optional_Serialize | Optional_Deserialize;\n  \n  export type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n  \ta: string | null,\n  } }) & { A?: never; C?: never } | ({ C: {\n  \ta?: string | null,\n  } }) & { A?: never; B?: never };\n  \n  export type OptionalOnNamedField = string | null;\n  \n  export type OptionalOnTransparentNamedField = {\n  \tb: string | null,\n  };\n  \n  export type Optional_Deserialize = {\n  \ta: number | null,\n  \tb?: number | null,\n  \tc: string | null,\n  \td?: boolean,\n  };\n  \n  export type Optional_Serialize = {\n  \ta: number | null,\n  \tb?: number | null,\n  \tc?: string | null,\n  \td: boolean,\n  };\n  \n  export type OverridenStruct = {\n  \toverriden_field: string,\n  };\n  \n  export type Pair<Z, A> = {\n  \tfirst: Z,\n  \tsecond: A,\n  };\n  \n  export type PlaceholderInnerField = {\n  \ta: string,\n  };\n  \n  export type Recursive = {\n  \tdemo: Recursive,\n  };\n  \n  export type RecursiveInEnum = { A: {\n  \tdemo: RecursiveInEnum,\n  } };\n  \n  export type RecursiveInline = RecursiveInline;\n  \n  export type RecursiveMapValue = {\n  \tdemo: { [key in string]: RecursiveMapValue },\n  };\n  \n  export type RecursiveTransparent = RecursiveInline;\n  \n  export type RefStruct = TestEnum;\n  \n  export type Regular = { [key in string]: null };\n  \n  export type Rename = \"OneWord\" | \"Two words\";\n  \n  export type RenameSerdeSpecialChar = {\n  \t\"a/b\": number,\n  };\n  \n  export type RenameWithWeirdCharsField = {\n  \t\"@odata.context\": string,\n  };\n  \n  export type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n  \n  export type RenamedFieldKeys = {\n  \t\"\": string,\n  \t\"a\\\"b\": string,\n  \t\"a\\\\b\": string,\n  \t\"line\\nbreak\": string,\n  \t\"line\\u2028break\": string,\n  \t\"line\\u2029break\": string,\n  };\n  \n  export type RenamedVariantWithSkippedPayload = \"a-b\";\n  \n  export type Second = {\n  \ta: number,\n  };\n  \n  export type Seventh = {\n  \ta: First,\n  \tb: Second,\n  };\n  \n  export type SimpleStruct = {\n  \ta: number,\n  \tb: string,\n  \tc: [number, string, number],\n  \td: string[],\n  \te: string | null,\n  };\n  \n  /**  Some single-line comment */\n  export type SingleLineComment = \n  /**  Some single-line comment */\n  ({ A: number }) & { B?: never } | \n  /**  Some single-line comment */\n  ({ B: {\n  \t/**  Some single-line comment */\n  \ta: number,\n  } }) & { A?: never };\n  \n  export type Sixth = {\n  \ta: First,\n  \tb: First,\n  };\n  \n  export type SkipField = {\n  \tb: number,\n  };\n  \n  export type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n  \tb: number,\n  } }) & { A?: never };\n  \n  export type SkipOnlyField = Record<string, never>;\n  \n  export type SkipStructFields = {\n  \ta: number,\n  };\n  \n  export type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n  \n  export type SkipVariant = { A: string };\n  \n  export type SkipVariant2 = { tag: \"A\"; data: string };\n  \n  export type SkipVariant3 = { A: {\n  \ta: string,\n  } };\n  \n  export type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n  \n  export type SpectaSkipNonTypeField = {\n  \ta: number,\n  };\n  \n  export type SpectaTypeOverride = {\n  \tstring_ident: string,\n  \tu32_ident: number,\n  \tpath: string,\n  \ttuple: [string, number],\n  };\n  \n  export type Struct2 = {\n  \tb: string,\n  };\n  \n  export type StructNew = {\n  \tt: \"StructNew\",\n  \ta: string,\n  };\n  \n  export type StructPhaseSpecificRename = StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize;\n  \n  export type StructPhaseSpecificRenameDeserialize = {\n  \tkind: \"StructPhaseSpecificRenameDeserialize\",\n  \tder: string,\n  };\n  \n  export type StructPhaseSpecificRenameSerialize = {\n  \tkind: \"StructPhaseSpecificRenameSerialize\",\n  \tser: string,\n  };\n  \n  export type StructRenameAllUppercase = {\n  \tA: number,\n  \tB: number,\n  };\n  \n  export type StructWithAlias = {\n  \tfield: string,\n  };\n  \n  export type StructWithAliasAndRename = {\n  \trenamed_field: string,\n  };\n  \n  export type StructWithMultipleAliases = {\n  \tfield: string,\n  };\n  \n  export type TagOnStructWithInline = {\n  \ttype: \"TagOnStructWithInline\",\n  \ta: First,\n  \tb: {\n  \t\ta: string,\n  \t},\n  };\n  \n  export type Tenth = string | \"B\" | {\n  \ta: string,\n  } | First;\n  \n  export type TestCollectionRegister = never;\n  \n  export type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n  \ta: number,\n  } }) & { Multiple?: never; Single?: never };\n  \n  export type Third = {\n  \tb: { [key in string]: string },\n  \tc: First,\n  } & First;\n  \n  export type ToBeFlattened = {\n  \ta: string,\n  };\n  \n  export type TransparentStruct = string;\n  \n  export type TransparentType = TransparentTypeInner;\n  \n  export type TransparentType2 = null;\n  \n  export type TransparentTypeInner = {\n  \tinner: string,\n  };\n  \n  export type TransparentTypeWithOverride = string;\n  \n  export type TransparentWithSkip = null;\n  \n  export type TransparentWithSkip2 = string;\n  \n  export type TransparentWithSkip3 = string;\n  \n  export type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n  \n  export type TupleStruct = string;\n  \n  export type TupleStruct1 = number;\n  \n  export type TupleStruct3 = [number, boolean, string];\n  \n  export type TupleStructWithRep = string;\n  \n  export type Unit1 = null;\n  \n  export type Unit2 = Record<string, never>;\n  \n  export type Unit3 = [];\n  \n  export type Unit4 = null;\n  \n  export type Unit5 = \"A\";\n  \n  export type Unit6 = { A: null };\n  \n  export type Unit7 = { A: Record<string, never> };\n  \n  export type UnitVariants = \"A\" | \"B\" | \"C\";\n  \n  export type UntaggedVariants = string | number | { id: string } | [string, boolean];\n  \n  export type UntaggedVariantsKey = string | number;\n  \n  export type UntaggedVariantsWithDuplicateBranches = null | number;\n  \n  export type UntaggedVariantsWithoutValue = string | [number, string] | number;\n  \n  export type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n  \n  export type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n  \n  export type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n  ════════════════════════════════════════\n\ntests/\n  tests/\n    types.ts (12932 bytes)\n    ────────────────────────────────────────\n    // This file has been generated by Specta. Do not edit this file manually.\n    \n    import type * as std$ops from \"../../std/ops\";\n    import type * as std$result from \"../../std/result\";\n    import type * as test$types from \"../../test/types\";\n    import type * as test$types$type_type from \"../../test/types/type_type\";\n    export type Primitives = {\n    \ti8: number,\n    \ti16: number,\n    \ti32: number,\n    \tu8: number,\n    \tu16: number,\n    \tu32: number,\n    \tf32: number,\n    \tf64: number,\n    \tbool: boolean,\n    \tchar: string,\n    \t\"Range<i32>\": std$ops.Range<number>,\n    \t\"RangeInclusive<i32>\": std$ops.RangeInclusive<number>,\n    \t\"()\": null,\n    \t\"(String, i32)\": [string, number],\n    \t\"(String, i32, bool)\": [string, number, boolean],\n    \t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n    \t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n    \t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n    \tString: string,\n    \tPathBuf: string,\n    \tIpAddr: string,\n    \tIpv4Addr: string,\n    \tIpv6Addr: string,\n    \tSocketAddr: string,\n    \tSocketAddrV4: string,\n    \tSocketAddrV6: string,\n    \t\"Cow<'static, str>\": string,\n    \t\"Cow<'static, i32>\": number,\n    \t\"&'static str\": string,\n    \t\"&'static bool\": boolean,\n    \t\"&'static i32\": number,\n    \t\"Vec<i32>\": number[],\n    \t\"&'static [i32]\": number[],\n    \t\"&'static [i32; 3]\": [number, number, number],\n    \t\"[i32; 3]\": [number, number, number],\n    \t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \t\"&'static [MyEnum]\": test$types.MyEnum[],\n    \t\"&'static [MyEnum; 6]\": [test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum, test$types.MyEnum],\n    \t\"[MyEnum; 2]\": [test$types.MyEnum, test$types.MyEnum],\n    \t\"&'static [i32; 1]\": [number],\n    \t\"&'static [i32; 0]\": [],\n    \t\"Option<i32>\": number | null,\n    \t\"Option<()>\": null,\n    \t\"Option<Vec<i32>>\": number[] | null,\n    \t\"Result<String, i32>\": std$result.Result<string, number>,\n    \t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n    \t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n    \t\"[Vec<String>; 3]\": [string[], string[], string[]],\n    \t\"Option<Option<String>>\": string | null,\n    \t\"Option<Option<Option<String>>>\": string | null,\n    \t\"PhantomData<()>\": null,\n    \t\"PhantomData<String>\": null,\n    \tInfallible: never,\n    \tUnit1: test$types.Unit1,\n    \tUnit2: test$types.Unit2,\n    \tUnit3: test$types.Unit3,\n    \tUnit4: test$types.Unit4,\n    \tUnit5: test$types.Unit5,\n    \tUnit6: test$types.Unit6,\n    \tUnit7: test$types.Unit7,\n    \tSimpleStruct: test$types.SimpleStruct,\n    \tTupleStruct1: test$types.TupleStruct1,\n    \tTupleStruct3: test$types.TupleStruct3,\n    \tTestEnum: test$types.TestEnum,\n    \tRefStruct: test$types.RefStruct,\n    \tInlinerStruct: test$types.InlinerStruct,\n    \t\"GenericStruct<i32>\": test$types.GenericStruct<number>,\n    \t\"GenericStruct<String>\": test$types.GenericStruct<string>,\n    \tFlattenEnumStruct: test$types.FlattenEnumStruct,\n    \tOverridenStruct: test$types.OverridenStruct,\n    \tHasGenericAlias: test$types.HasGenericAlias,\n    \tEnumMacroAttributes: test$types.EnumMacroAttributes,\n    \tInlineEnumField: test$types.InlineEnumField,\n    \tInlineOptionalType: test$types.InlineOptionalType,\n    \tRename: test$types.Rename,\n    \tTransparentType: test$types.TransparentType,\n    \tTransparentType2: test$types.TransparentType2,\n    \tTransparentTypeWithOverride: test$types.TransparentTypeWithOverride,\n    \t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n    \t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test$types.BasicEnum]: null }>,\n    \t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test$types.BasicEnum]: number }>,\n    \t\"Option<Option<Option<Option<i32>>>>\": number | null,\n    \t\"Vec<PlaceholderInnerField>\": test$types.PlaceholderInnerField[],\n    \tEnumReferenceRecordKey: test$types.EnumReferenceRecordKey,\n    \tFlattenOnNestedEnum: test$types.FlattenOnNestedEnum,\n    \tMyEmptyInput: test$types.MyEmptyInput,\n    \t\"(String)\": string,\n    \t\"(String,)\": [string],\n    \tExtraBracketsInTupleVariant: test$types.ExtraBracketsInTupleVariant,\n    \tExtraBracketsInUnnamedStruct: test$types.ExtraBracketsInUnnamedStruct,\n    \t\"Vec<MyEnum>\": test$types.MyEnum[],\n    \tInlineTuple: test$types.InlineTuple,\n    \tInlineTuple2: test$types.InlineTuple2,\n    \t\"Box<str>\": string,\n    \t\"Box<String>\": string,\n    \tSkippedFieldWithinVariant: test$types.SkippedFieldWithinVariant,\n    \tKebabCase: test$types.KebabCase,\n    \t\"&[&str]\": string[],\n    \t\"Issue281<'_>\": test$types.Issue281,\n    \t\"LifetimeGenericStruct<'_, i32>\": test$types.LifetimeGenericStruct<number>,\n    \t\"LifetimeGenericEnum<'_, i32>\": test$types.LifetimeGenericEnum<number>,\n    \tRenameWithWeirdCharsField: test$types.RenameWithWeirdCharsField,\n    \tRenameWithWeirdCharsVariant: test$types.RenameWithWeirdCharsVariant,\n    \tRenamedFieldKeys: test$types.RenamedFieldKeys,\n    \tRenamedVariantWithSkippedPayload: test$types.RenamedVariantWithSkippedPayload,\n    \t\"type_type::Type\": test$types$type_type.Type,\n    \tActualType: test$types.ActualType,\n    \tSpectaTypeOverride: test$types.SpectaTypeOverride,\n    \tContainerTypeOverrideStruct: test$types.ContainerTypeOverrideStruct,\n    \tContainerTypeOverrideEnum: test$types.ContainerTypeOverrideEnum,\n    \t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test$types.ContainerTypeOverrideGeneric,\n    \t\"ContainerTypeOverrideToGeneric<i32>\": test$types.ContainerTypeOverrideToGeneric<number>,\n    \tContainerTypeOverrideTuple: test$types.ContainerTypeOverrideTuple,\n    \t\"ContainerTypeOverrideTupleGeneric<i32>\": test$types.ContainerTypeOverrideTupleGeneric<number>,\n    \tInvalidToValidType: test$types.InvalidToValidType,\n    \tTupleStruct: test$types.TupleStruct,\n    \tTupleStructWithRep: test$types.TupleStructWithRep,\n    \t\"GenericTupleStruct<String>\": test$types.GenericTupleStruct<string>,\n    \tBracedStruct: test$types.BracedStruct,\n    \tStruct: test$types.StructNew,\n    \tStruct2: test$types.Struct2,\n    \tEnum: test$types.Enum,\n    \tEnum2: test$types.Enum2,\n    \tEnum3: test$types.Enum3,\n    \tStructRenameAllUppercase: test$types.StructRenameAllUppercase,\n    \tRenameSerdeSpecialChar: test$types.RenameSerdeSpecialChar,\n    \tEnumRenameAllUppercase: test$types.EnumRenameAllUppercase,\n    \tRecursive: test$types.Recursive,\n    \tRecursiveMapValue: test$types.RecursiveMapValue,\n    \tRecursiveTransparent: test$types.RecursiveTransparent,\n    \tRecursiveInEnum: test$types.RecursiveInEnum,\n    \tNonOptional: test$types.NonOptional,\n    \tOptionalOnNamedField: test$types.OptionalOnNamedField,\n    \tOptionalOnTransparentNamedField: test$types.OptionalOnTransparentNamedField,\n    \tOptionalInEnum: test$types.OptionalInEnum,\n    \tUntaggedVariants: test$types.UntaggedVariants,\n    \tUntaggedVariantsWithoutValue: test$types.UntaggedVariantsWithoutValue,\n    \tUntaggedVariantsWithDuplicateBranches: test$types.UntaggedVariantsWithDuplicateBranches,\n    \t\"HashMap<String, ()>\": { [key in string]: null },\n    \tRegular: test$types.Regular,\n    \t\"HashMap<Infallible, ()>\": { [key in never]: null },\n    \t\"HashMap<TransparentStruct, ()>\": { [key in test$types.TransparentStruct]: null },\n    \t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test$types.UnitVariants]: null }>,\n    \t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test$types.UntaggedVariantsKey]: null }>,\n    \tValidMaybeValidKey: test$types.ValidMaybeValidKey,\n    \tValidMaybeValidKeyNested: test$types.ValidMaybeValidKeyNested,\n    \tMacroStruct: test$types.MacroStruct,\n    \tMacroStruct2: test$types.MacroStruct2,\n    \tMacroEnum: test$types.MacroEnum,\n    \tDeprecatedType: test$types.DeprecatedType,\n    \tDeprecatedTypeWithMsg: test$types.DeprecatedTypeWithMsg,\n    \tDeprecatedTypeWithMsg2: test$types.DeprecatedTypeWithMsg2,\n    \tDeprecatedFields: test$types.DeprecatedFields,\n    \tDeprecatedTupleVariant: test$types.DeprecatedTupleVariant,\n    \tDeprecatedEnumVariants: test$types.DeprecatedEnumVariants,\n    \tCommentedStruct: test$types.CommentedStruct,\n    \tCommentedEnum: test$types.CommentedEnum,\n    \tSingleLineComment: test$types.SingleLineComment,\n    \tNonGeneric: test$types.Demo<number, boolean>,\n    \t\"HalfGenericA<u8>\": test$types.Demo<number, boolean>,\n    \t\"HalfGenericB<bool>\": test$types.Demo<number, boolean>,\n    \t\"FullGeneric<u8, bool>\": test$types.Demo<number, boolean>,\n    \t\"Another<bool>\": test$types.Demo<number, boolean>,\n    \t\"MapA<u32>\": { [key in string]: number },\n    \t\"MapB<u32>\": { [key in number]: string },\n    \t\"MapC<u32>\": { [key in string]: test$types.AGenericStruct<number> },\n    \t\"AGenericStruct<u32>\": test$types.AGenericStruct<number>,\n    \tA: test$types.A,\n    \tDoubleFlattened: test$types.DoubleFlattened,\n    \tFlattenedInner: test$types.FlattenedInner,\n    \tBoxFlattened: test$types.BoxFlattened,\n    \tBoxInline: test$types.BoxInline,\n    \tFirst: test$types.First,\n    \tSecond: test$types.Second,\n    \tThird: test$types.Third,\n    \tFourth: test$types.Fourth,\n    \tTagOnStructWithInline: test$types.TagOnStructWithInline,\n    \tSixth: test$types.Sixth,\n    \tSeventh: test$types.Seventh,\n    \tEight: test$types.Eight,\n    \tNinth: test$types.Ninth,\n    \tTenth: test$types.Tenth,\n    \tMyEnumTagged: test$types.MyEnumTagged,\n    \tMyEnumExternal: test$types.MyEnumExternal,\n    \tMyEnumAdjacent: test$types.MyEnumAdjacent,\n    \tMyEnumUntagged: test$types.MyEnumUntagged,\n    \tEmptyStruct: test$types.EmptyStruct,\n    \tEmptyStructWithTag: test$types.EmptyStructWithTag,\n    \tAdjacentlyTagged: test$types.AdjacentlyTagged,\n    \tLoadProjectEvent: test$types.LoadProjectEvent,\n    \tExternallyTagged: test$types.ExternallyTagged,\n    \tIssue221External: test$types.Issue221External,\n    \tInternallyTaggedD: test$types.InternallyTaggedD,\n    \tInternallyTaggedE: test$types.InternallyTaggedE,\n    \tInternallyTaggedF: test$types.InternallyTaggedF,\n    \tInternallyTaggedH: test$types.InternallyTaggedH,\n    \tInternallyTaggedL: test$types.InternallyTaggedL,\n    \tInternallyTaggedM: test$types.InternallyTaggedM,\n    \tStructWithAlias: test$types.StructWithAlias,\n    \tStructWithMultipleAliases: test$types.StructWithMultipleAliases,\n    \tStructWithAliasAndRename: test$types.StructWithAliasAndRename,\n    \tEnumWithVariantAlias: test$types.EnumWithVariantAlias,\n    \tEnumWithMultipleVariantAliases: test$types.EnumWithMultipleVariantAliases,\n    \tEnumWithVariantAliasAndRename: test$types.EnumWithVariantAliasAndRename,\n    \tInternallyTaggedWithAlias: test$types.InternallyTaggedWithAlias,\n    \tAdjacentlyTaggedWithAlias: test$types.AdjacentlyTaggedWithAlias,\n    \tUntaggedWithAlias: test$types.UntaggedWithAlias,\n    \tIssue221UntaggedSafe: test$types.Issue221UntaggedSafe,\n    \tIssue221UntaggedMixed: test$types.Issue221UntaggedMixed,\n    \tEmptyEnum: test$types.EmptyEnum,\n    \tEmptyEnumTagged: test$types.EmptyEnumTagged,\n    \tEmptyEnumTaggedWContent: test$types.EmptyEnumTaggedWContent,\n    \tEmptyEnumUntagged: test$types.EmptyEnumUntagged,\n    \tSkipOnlyField: test$types.SkipOnlyField,\n    \tSkipField: test$types.SkipField,\n    \tSkipVariant: test$types.SkipVariant,\n    \tSkipUnnamedFieldInVariant: test$types.SkipUnnamedFieldInVariant,\n    \tSkipNamedFieldInVariant: test$types.SkipNamedFieldInVariant,\n    \tTransparentWithSkip: test$types.TransparentWithSkip,\n    \tTransparentWithSkip2: test$types.TransparentWithSkip2,\n    \tTransparentWithSkip3: test$types.TransparentWithSkip3,\n    \tSkipVariant2: test$types.SkipVariant2,\n    \tSkipVariant3: test$types.SkipVariant3,\n    \tSkipStructFields: test$types.SkipStructFields,\n    \tSpectaSkipNonTypeField: test$types.SpectaSkipNonTypeField,\n    \tFlattenA: test$types.FlattenA,\n    \tFlattenB: test$types.FlattenB,\n    \tFlattenC: test$types.FlattenC,\n    \tFlattenD: test$types.FlattenD,\n    \tFlattenE: test$types.FlattenE,\n    \tFlattenF: test$types.FlattenF,\n    \tFlattenG: test$types.FlattenG,\n    \tTupleNested: test$types.TupleNested,\n    \t\"Generic1<()>\": test$types.Generic1<null>,\n    \t\"GenericAutoBound<()>\": test$types.GenericAutoBound<null>,\n    \t\"GenericAutoBound2<()>\": test$types.GenericAutoBound2<null>,\n    \tContainer1: test$types.Container1,\n    \t\"Generic2<(), String, i32>\": test$types.Generic2<null, string, number>,\n    \t\"GenericNewType1<()>\": test$types.GenericNewType1<null>,\n    \t\"GenericTuple<()>\": test$types.GenericTuple<null>,\n    \t\"GenericStruct2<()>\": test$types.GenericStruct2<null>,\n    \t\"InlineGenericNewtype<String>\": string,\n    \t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n    \tvalue: string,\n    } }) & { Unnamed?: never }],\n    \t\"InlineFlattenGenericsG<()>\": test$types.InlineFlattenGenericsG<null>,\n    \tInlineFlattenGenerics: test$types.InlineFlattenGenerics,\n    \tGenericDefault: test$types.GenericDefault,\n    \tChainedGenericDefault: test$types.ChainedGenericDefault,\n    \t\"ChainedGenericDefault<String, String>\": test$types.ChainedGenericDefault,\n    \t\"ChainedGenericDefault<i32>\": test$types.ChainedGenericDefault<number, number>,\n    \t\"ChainedGenericDefault<String, i32>\": test$types.ChainedGenericDefault<string, number>,\n    \tGenericDefaultSkipped: test$types.GenericDefaultSkipped<string>,\n    \tGenericDefaultSkippedNonType: test$types.GenericDefaultSkippedNonType<unknown>,\n    \tGenericParameterOrderPreserved: test$types.GenericParameterOrderPreserved,\n    \tConstGenericInNonConstContainer: test$types.ConstGenericInNonConstContainer,\n    \tConstGenericInConstContainer: test$types.ConstGenericInConstContainer,\n    \tNamedConstGenericContainer: test$types.NamedConstGenericContainer,\n    \tInlineConstGenericContainer: test$types.InlineConstGenericContainer,\n    \tInlineRecursiveConstGenericContainer: test$types.InlineRecursiveConstGenericContainer,\n    \tTestCollectionRegister: test$types.TestCollectionRegister,\n    \tTestCollectionRegister: test$types.TestCollectionRegister,\n    };\n    ════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-flatfile-raw.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nts-export-to-flatfile-raw (24613 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\nexport type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nexport type ActualType = {\n\ta: GenericType<string>,\n};\n\nexport type AdjacentlyTagged = \"A\" | { id: string; method: string } | string;\n\nexport type AdjacentlyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type B = {\n\tb: number,\n};\n\nexport type BasicEnum = \"A\" | \"B\";\n\nexport type BoxFlattened = {\n\tb: BoxedInner,\n};\n\nexport type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type BoxedInner = {\n\ta: number,\n};\n\nexport type BracedStruct = string;\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nnumber | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n{ \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\na: number };\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nexport type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nexport type ContainerTypeOverrideEnum = string;\n\nexport type ContainerTypeOverrideGeneric = string;\n\nexport type ContainerTypeOverrideStruct = string;\n\nexport type ContainerTypeOverrideToGeneric<T> = T;\n\nexport type ContainerTypeOverrideTuple = [string, number];\n\nexport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type D = {\n\tflattened: number,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nexport type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\n/**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nexport type Eight = string | \"B\";\n\nexport type EmptyEnum = never;\n\nexport type EmptyEnumTagged = never;\n\nexport type EmptyEnumTaggedWContent = never;\n\nexport type EmptyEnumUntagged = never;\n\nexport type EmptyStruct = Record<string, never>;\n\nexport type EmptyStructWithTag = Record<string, never>;\n\nexport type Enum = \"A\" | \"B\";\n\nexport type Enum2 = \"A\" | \"B\" | { enum_field: null };\n\nexport type Enum3 = { a: string };\n\nexport type EnumMacroAttributes = string | number | { a: string; b: number };\n\nexport type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nexport type EnumRenameAllUppercase = \"HelloWorld\" | \"VariantB\" | \"TestingWords\";\n\nexport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAliasAndRename = \"Variant\" | \"Other\";\n\nexport type ExternallyTagged = \"A\" | { id: string; method: string } | string;\n\nexport type ExtraBracketsInTupleVariant = string;\n\nexport type ExtraBracketsInUnnamedStruct = string;\n\nexport type First = {\n\ta: string,\n};\n\nexport type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type FlattenB = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenC = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenE = {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nexport type FlattenEnum = \"One\" | \"Two\" | \"Three\";\n\nexport type FlattenEnumStruct = {\n\touter: string,\n\tinner: FlattenEnum,\n};\n\nexport type FlattenF = {\n\tb: {\n\t\ta: FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nexport type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nexport type FlattenOnNestedEnum = {\n\tid: string,\n\tresult: NestedEnum,\n};\n\nexport type FlattenedInner = {\n\tc: Inner,\n};\n\nexport type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type Generic2<A, B, C> = A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][];\n\nexport type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type GenericFlattened<T> = {\n\tgeneric_flattened: T,\n};\n\nexport type GenericNewType1<T> = T[][];\n\nexport type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type GenericTuple<T> = [T, T[], T[][]];\n\nexport type GenericTupleStruct<T> = T;\n\nexport type GenericType<T> = \"Undefined\" | T;\n\nexport type HasGenericAlias = { [key in number]: string };\n\nexport type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type InlineEnumField = {\n\ta: string,\n};\n\nexport type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n\tt: InlineFlattenGenericsG<string>,\n};\n\nexport type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type InlineRecursiveConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number, number],\n\te: InlineRecursiveConstGeneric,\n};\n\nexport type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type InlineStruct = {\n\tref_struct: SimpleStruct,\n\tval: number,\n};\n\nexport type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nexport type Inner = {\n\ta: number,\n\tb: FlattenedInner,\n};\n\nexport type InternallyTaggedD = { [key in string]: string };\n\nexport type InternallyTaggedE = null;\n\nexport type InternallyTaggedF = InternallyTaggedFInner;\n\nexport type InternallyTaggedFInner = null;\n\nexport type InternallyTaggedH = InternallyTaggedHInner;\n\nexport type InternallyTaggedHInner = null;\n\nexport type InternallyTaggedL = \"A\" | \"B\";\n\nexport type InternallyTaggedLInner = \"A\" | \"B\";\n\nexport type InternallyTaggedM = \"A\" | \"B\";\n\nexport type InternallyTaggedMInner = \"A\" | \"B\";\n\nexport type InternallyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type InvalidToValidType = {\n\tcause: null,\n};\n\nexport type Issue221External = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nexport type KebabCase = {\n\ttest_ing: string,\n};\n\nexport type LifetimeGenericEnum<T> = T;\n\nexport type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type LoadProjectEvent = ({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number };\n\nexport type MacroEnum = string | { demo2: string };\n\nexport type MacroStruct = string;\n\nexport type MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type MaybeValidKey<T> = T;\n\nexport type MyEmptyInput = Record<string, never>;\n\nexport type MyEnum = string | number;\n\nexport type MyEnumAdjacent = { inner: First };\n\nexport type MyEnumExternal = { inner: First };\n\nexport type MyEnumTagged = { inner: First };\n\nexport type MyEnumUntagged = { inner: First };\n\nexport type NamedConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type NestedEnum = string | number;\n\nexport type Ninth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type NonOptional = string | null;\n\nexport type OptionalInEnum = string | null | { a: string | null } | { a?: string | null };\n\nexport type OptionalOnNamedField = string | null;\n\nexport type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type Pair<Z, A> = {\n\tfirst: Z,\n\tsecond: A,\n};\n\nexport type PlaceholderInnerField = {\n\ta: string,\n};\n\nexport type Primitives = {\n\ti8: number,\n\ti16: number,\n\ti32: number,\n\tu8: number,\n\tu16: number,\n\tu32: number,\n\tf32: number,\n\tf64: number,\n\tbool: boolean,\n\tchar: string,\n\t\"Range<i32>\": Range<number>,\n\t\"RangeInclusive<i32>\": RangeInclusive<number>,\n\t\"()\": null,\n\t\"(String, i32)\": [string, number],\n\t\"(String, i32, bool)\": [string, number, boolean],\n\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\tString: string,\n\tPathBuf: string,\n\tIpAddr: string,\n\tIpv4Addr: string,\n\tIpv6Addr: string,\n\tSocketAddr: string,\n\tSocketAddrV4: string,\n\tSocketAddrV6: string,\n\t\"Cow<'static, str>\": string,\n\t\"Cow<'static, i32>\": number,\n\t\"&'static str\": string,\n\t\"&'static bool\": boolean,\n\t\"&'static i32\": number,\n\t\"Vec<i32>\": number[],\n\t\"&'static [i32]\": number[],\n\t\"&'static [i32; 3]\": [number, number, number],\n\t\"[i32; 3]\": [number, number, number],\n\t\"Vec<MyEnum>\": MyEnum[],\n\t\"&'static [MyEnum]\": MyEnum[],\n\t\"&'static [MyEnum; 6]\": [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum],\n\t\"[MyEnum; 2]\": [MyEnum, MyEnum],\n\t\"&'static [i32; 1]\": [number],\n\t\"&'static [i32; 0]\": [],\n\t\"Option<i32>\": number | null,\n\t\"Option<()>\": null,\n\t\"Option<Vec<i32>>\": number[] | null,\n\t\"Result<String, i32>\": Result<string, number>,\n\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\"Option<Option<String>>\": string | null,\n\t\"Option<Option<Option<String>>>\": string | null,\n\t\"PhantomData<()>\": null,\n\t\"PhantomData<String>\": null,\n\tInfallible: never,\n\tUnit1: Unit1,\n\tUnit2: Unit2,\n\tUnit3: Unit3,\n\tUnit4: Unit4,\n\tUnit5: Unit5,\n\tUnit6: Unit6,\n\tUnit7: Unit7,\n\tSimpleStruct: SimpleStruct,\n\tTupleStruct1: TupleStruct1,\n\tTupleStruct3: TupleStruct3,\n\tTestEnum: TestEnum,\n\tRefStruct: RefStruct,\n\tInlinerStruct: InlinerStruct,\n\t\"GenericStruct<i32>\": GenericStruct<number>,\n\t\"GenericStruct<String>\": GenericStruct<string>,\n\tFlattenEnumStruct: FlattenEnumStruct,\n\tOverridenStruct: OverridenStruct,\n\tHasGenericAlias: HasGenericAlias,\n\tEnumMacroAttributes: EnumMacroAttributes,\n\tInlineEnumField: InlineEnumField,\n\tInlineOptionalType: InlineOptionalType,\n\tRename: Rename,\n\tTransparentType: TransparentType,\n\tTransparentType2: TransparentType2,\n\tTransparentTypeWithOverride: TransparentTypeWithOverride,\n\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in BasicEnum]: null }>,\n\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in BasicEnum]: number }>,\n\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\"Vec<PlaceholderInnerField>\": PlaceholderInnerField[],\n\tEnumReferenceRecordKey: EnumReferenceRecordKey,\n\tFlattenOnNestedEnum: FlattenOnNestedEnum,\n\tMyEmptyInput: MyEmptyInput,\n\t\"(String)\": string,\n\t\"(String,)\": [string],\n\tExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant,\n\tExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct,\n\t\"Vec<MyEnum>\": MyEnum[],\n\tInlineTuple: InlineTuple,\n\tInlineTuple2: InlineTuple2,\n\t\"Box<str>\": string,\n\t\"Box<String>\": string,\n\tSkippedFieldWithinVariant: SkippedFieldWithinVariant,\n\tKebabCase: KebabCase,\n\t\"&[&str]\": string[],\n\t\"Issue281<'_>\": Issue281,\n\t\"LifetimeGenericStruct<'_, i32>\": LifetimeGenericStruct<number>,\n\t\"LifetimeGenericEnum<'_, i32>\": LifetimeGenericEnum<number>,\n\tRenameWithWeirdCharsField: RenameWithWeirdCharsField,\n\tRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant,\n\tRenamedFieldKeys: RenamedFieldKeys,\n\tRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload,\n\t\"type_type::Type\": Type,\n\tActualType: ActualType,\n\tSpectaTypeOverride: SpectaTypeOverride,\n\tContainerTypeOverrideStruct: ContainerTypeOverrideStruct,\n\tContainerTypeOverrideEnum: ContainerTypeOverrideEnum,\n\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": ContainerTypeOverrideGeneric,\n\t\"ContainerTypeOverrideToGeneric<i32>\": ContainerTypeOverrideToGeneric<number>,\n\tContainerTypeOverrideTuple: ContainerTypeOverrideTuple,\n\t\"ContainerTypeOverrideTupleGeneric<i32>\": ContainerTypeOverrideTupleGeneric<number>,\n\tInvalidToValidType: InvalidToValidType,\n\tTupleStruct: TupleStruct,\n\tTupleStructWithRep: TupleStructWithRep,\n\t\"GenericTupleStruct<String>\": GenericTupleStruct<string>,\n\tBracedStruct: BracedStruct,\n\tStruct: Struct,\n\tStruct2: Struct2,\n\tEnum: Enum,\n\tEnum2: Enum2,\n\tEnum3: Enum3,\n\tStructRenameAllUppercase: StructRenameAllUppercase,\n\tRenameSerdeSpecialChar: RenameSerdeSpecialChar,\n\tEnumRenameAllUppercase: EnumRenameAllUppercase,\n\tRecursive: Recursive,\n\tRecursiveMapValue: RecursiveMapValue,\n\tRecursiveTransparent: RecursiveTransparent,\n\tRecursiveInEnum: RecursiveInEnum,\n\tNonOptional: NonOptional,\n\tOptionalOnNamedField: OptionalOnNamedField,\n\tOptionalOnTransparentNamedField: OptionalOnTransparentNamedField,\n\tOptionalInEnum: OptionalInEnum,\n\tUntaggedVariants: UntaggedVariants,\n\tUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue,\n\tUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches,\n\t\"HashMap<String, ()>\": { [key in string]: null },\n\tRegular: Regular,\n\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\"HashMap<TransparentStruct, ()>\": { [key in TransparentStruct]: null },\n\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in UnitVariants]: null }>,\n\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in UntaggedVariantsKey]: null }>,\n\tValidMaybeValidKey: ValidMaybeValidKey,\n\tValidMaybeValidKeyNested: ValidMaybeValidKeyNested,\n\tMacroStruct: MacroStruct,\n\tMacroStruct2: MacroStruct2,\n\tMacroEnum: MacroEnum,\n\tDeprecatedType: DeprecatedType,\n\tDeprecatedTypeWithMsg: DeprecatedTypeWithMsg,\n\tDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2,\n\tDeprecatedFields: DeprecatedFields,\n\tDeprecatedTupleVariant: DeprecatedTupleVariant,\n\tDeprecatedEnumVariants: DeprecatedEnumVariants,\n\tCommentedStruct: CommentedStruct,\n\tCommentedEnum: CommentedEnum,\n\tSingleLineComment: SingleLineComment,\n\tNonGeneric: Demo<number, boolean>,\n\t\"HalfGenericA<u8>\": Demo<number, boolean>,\n\t\"HalfGenericB<bool>\": Demo<number, boolean>,\n\t\"FullGeneric<u8, bool>\": Demo<number, boolean>,\n\t\"Another<bool>\": Demo<number, boolean>,\n\t\"MapA<u32>\": { [key in string]: number },\n\t\"MapB<u32>\": { [key in number]: string },\n\t\"MapC<u32>\": { [key in string]: AGenericStruct<number> },\n\t\"AGenericStruct<u32>\": AGenericStruct<number>,\n\tA: A,\n\tDoubleFlattened: DoubleFlattened,\n\tFlattenedInner: FlattenedInner,\n\tBoxFlattened: BoxFlattened,\n\tBoxInline: BoxInline,\n\tFirst: First,\n\tSecond: Second,\n\tThird: Third,\n\tFourth: Fourth,\n\tTagOnStructWithInline: TagOnStructWithInline,\n\tSixth: Sixth,\n\tSeventh: Seventh,\n\tEight: Eight,\n\tNinth: Ninth,\n\tTenth: Tenth,\n\tMyEnumTagged: MyEnumTagged,\n\tMyEnumExternal: MyEnumExternal,\n\tMyEnumAdjacent: MyEnumAdjacent,\n\tMyEnumUntagged: MyEnumUntagged,\n\tEmptyStruct: EmptyStruct,\n\tEmptyStructWithTag: EmptyStructWithTag,\n\tAdjacentlyTagged: AdjacentlyTagged,\n\tLoadProjectEvent: LoadProjectEvent,\n\tExternallyTagged: ExternallyTagged,\n\tIssue221External: Issue221External,\n\tInternallyTaggedD: InternallyTaggedD,\n\tInternallyTaggedE: InternallyTaggedE,\n\tInternallyTaggedF: InternallyTaggedF,\n\tInternallyTaggedH: InternallyTaggedH,\n\tInternallyTaggedL: InternallyTaggedL,\n\tInternallyTaggedM: InternallyTaggedM,\n\tStructWithAlias: StructWithAlias,\n\tStructWithMultipleAliases: StructWithMultipleAliases,\n\tStructWithAliasAndRename: StructWithAliasAndRename,\n\tEnumWithVariantAlias: EnumWithVariantAlias,\n\tEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases,\n\tEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename,\n\tInternallyTaggedWithAlias: InternallyTaggedWithAlias,\n\tAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias,\n\tUntaggedWithAlias: UntaggedWithAlias,\n\tIssue221UntaggedSafe: Issue221UntaggedSafe,\n\tIssue221UntaggedMixed: Issue221UntaggedMixed,\n\tEmptyEnum: EmptyEnum,\n\tEmptyEnumTagged: EmptyEnumTagged,\n\tEmptyEnumTaggedWContent: EmptyEnumTaggedWContent,\n\tEmptyEnumUntagged: EmptyEnumUntagged,\n\tSkipOnlyField: SkipOnlyField,\n\tSkipField: SkipField,\n\tSkipVariant: SkipVariant,\n\tSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant,\n\tSkipNamedFieldInVariant: SkipNamedFieldInVariant,\n\tTransparentWithSkip: TransparentWithSkip,\n\tTransparentWithSkip2: TransparentWithSkip2,\n\tTransparentWithSkip3: TransparentWithSkip3,\n\tSkipVariant2: SkipVariant2,\n\tSkipVariant3: SkipVariant3,\n\tSkipStructFields: SkipStructFields,\n\tSpectaSkipNonTypeField: SpectaSkipNonTypeField,\n\tFlattenA: FlattenA,\n\tFlattenB: FlattenB,\n\tFlattenC: FlattenC,\n\tFlattenD: FlattenD,\n\tFlattenE: FlattenE,\n\tFlattenF: FlattenF,\n\tFlattenG: FlattenG,\n\tTupleNested: TupleNested,\n\t\"Generic1<()>\": Generic1<null>,\n\t\"GenericAutoBound<()>\": GenericAutoBound<null>,\n\t\"GenericAutoBound2<()>\": GenericAutoBound2<null>,\n\tContainer1: Container1,\n\t\"Generic2<(), String, i32>\": Generic2<null, string, number>,\n\t\"GenericNewType1<()>\": GenericNewType1<null>,\n\t\"GenericTuple<()>\": GenericTuple<null>,\n\t\"GenericStruct2<()>\": GenericStruct2<null>,\n\t\"InlineGenericNewtype<String>\": string,\n\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }],\n\t\"InlineFlattenGenericsG<()>\": InlineFlattenGenericsG<null>,\n\tInlineFlattenGenerics: InlineFlattenGenerics,\n\tGenericDefault: GenericDefault,\n\tChainedGenericDefault: ChainedGenericDefault,\n\t\"ChainedGenericDefault<String, String>\": ChainedGenericDefault,\n\t\"ChainedGenericDefault<i32>\": ChainedGenericDefault<number, number>,\n\t\"ChainedGenericDefault<String, i32>\": ChainedGenericDefault<string, number>,\n\tGenericDefaultSkipped: GenericDefaultSkipped<string>,\n\tGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>,\n\tGenericParameterOrderPreserved: GenericParameterOrderPreserved,\n\tConstGenericInNonConstContainer: ConstGenericInNonConstContainer,\n\tConstGenericInConstContainer: ConstGenericInConstContainer,\n\tNamedConstGenericContainer: NamedConstGenericContainer,\n\tInlineConstGenericContainer: InlineConstGenericContainer,\n\tInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer,\n\tTestCollectionRegister: TestCollectionRegister,\n\tTestCollectionRegister: TestCollectionRegister,\n};\n\nexport type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type Recursive = {\n\tdemo: Recursive,\n};\n\nexport type RecursiveInEnum = { demo: RecursiveInEnum };\n\nexport type RecursiveInline = {\n\tdemo: RecursiveInline,\n};\n\nexport type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nexport type RecursiveTransparent = RecursiveInline;\n\nexport type RefStruct = TestEnum;\n\nexport type Regular = { [key in string]: null };\n\nexport type Rename = \"OneWord\" | \"TwoWords\";\n\nexport type RenameSerdeSpecialChar = {\n\tb: number,\n};\n\nexport type RenameWithWeirdCharsField = {\n\todata_context: string,\n};\n\nexport type RenameWithWeirdCharsVariant = string;\n\nexport type RenamedFieldKeys = {\n\tempty: string,\n\tquote: string,\n\tbackslash: string,\n\tnewline: string,\n\tline_separator: string,\n\tparagraph_separator: string,\n};\n\nexport type RenamedVariantWithSkippedPayload = never;\n\nexport type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type Second = {\n\ta: number,\n};\n\nexport type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nexport type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\n/**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\nnumber | \n/**  Some single-line comment */\n{ \n/**  Some single-line comment */\na: number };\n\nexport type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nexport type SkipField = {\n\tb: number,\n};\n\nexport type SkipNamedFieldInVariant = Record<string, never> | { b: number };\n\nexport type SkipOnlyField = Record<string, never>;\n\nexport type SkipStructFields = {\n\ta: number,\n};\n\nexport type SkipUnnamedFieldInVariant = never | [number];\n\nexport type SkipVariant = string;\n\nexport type SkipVariant2 = string;\n\nexport type SkipVariant3 = { a: string };\n\nexport type SkippedFieldWithinVariant = never | string;\n\nexport type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type Struct = {\n\ta: string,\n};\n\nexport type Struct2 = {\n\ta: string,\n};\n\nexport type StructRenameAllUppercase = {\n\ta: number,\n\tb: number,\n};\n\nexport type StructWithAlias = {\n\tfield: string,\n};\n\nexport type StructWithAliasAndRename = {\n\tfield: string,\n};\n\nexport type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type TagOnStructWithInline = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type TestCollectionRegister = never;\n\nexport type TestEnum = \"Unit\" | number | [number, number] | { a: number };\n\nexport type Third = {\n\ta: First,\n\tb: { [key in string]: string },\n\tc: First,\n};\n\nexport type ToBeFlattened = {\n\ta: string,\n};\n\nexport type TransparentStruct = string;\n\nexport type TransparentType = TransparentTypeInner;\n\nexport type TransparentType2 = null;\n\nexport type TransparentTypeInner = {\n\tinner: string,\n};\n\nexport type TransparentTypeWithOverride = string;\n\nexport type TransparentWithSkip = null;\n\nexport type TransparentWithSkip2 = string;\n\nexport type TransparentWithSkip3 = string;\n\nexport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type TupleStruct = string;\n\nexport type TupleStruct1 = number;\n\nexport type TupleStruct3 = [number, boolean, string];\n\nexport type TupleStructWithRep = string;\n\nexport type Type = never;\n\nexport type Unit1 = null;\n\nexport type Unit2 = Record<string, never>;\n\nexport type Unit3 = [];\n\nexport type Unit4 = null;\n\nexport type Unit5 = \"A\";\n\nexport type Unit6 = [];\n\nexport type Unit7 = Record<string, never>;\n\nexport type UnitVariants = \"A\" | \"B\" | \"C\";\n\nexport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type UntaggedVariantsKey = string | number;\n\nexport type UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nexport type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-flatfile-serde.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nts-export-to-flatfile-serde (26900 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\nexport type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nexport type ActualType = {\n\ta: GenericType<string>,\n};\n\nexport type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nexport type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nexport type B = {\n\tb: number,\n};\n\nexport type BasicEnum = \"A\" | \"B\";\n\nexport type BoxFlattened = BoxedInner;\n\nexport type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type BoxedInner = {\n\ta: number,\n};\n\nexport type BracedStruct = string;\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nexport type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nexport type ContainerTypeOverrideEnum = string;\n\nexport type ContainerTypeOverrideGeneric = string;\n\nexport type ContainerTypeOverrideStruct = string;\n\nexport type ContainerTypeOverrideToGeneric<T> = T;\n\nexport type ContainerTypeOverrideTuple = [string, number];\n\nexport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type D = {\n\tflattened: number,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nexport type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\n/**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nexport type Eight = { A: string } | \"B\";\n\nexport type EmptyEnum = never;\n\nexport type EmptyEnumTagged = never;\n\nexport type EmptyEnumTaggedWContent = never;\n\nexport type EmptyEnumUntagged = never;\n\nexport type EmptyStruct = Record<string, never>;\n\nexport type EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nexport type Enum = { t: \"A\" } | { t: \"B\" };\n\nexport type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nexport type Enum3 = { t: \"A\"; b: string };\n\nexport type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nexport type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nexport type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nexport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nexport type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nexport type ExtraBracketsInTupleVariant = { A: string };\n\nexport type ExtraBracketsInUnnamedStruct = string;\n\nexport type First = {\n\ta: string,\n};\n\nexport type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type FlattenB = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenC = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n\nexport type FlattenEnumStruct = {\n\touter: string,\n} & FlattenEnum;\n\nexport type FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nexport type FlattenOnNestedEnum = {\n\tid: string,\n} & NestedEnum;\n\nexport type FlattenedInner = Inner;\n\nexport type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nexport type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type GenericFlattened<T> = {\n\tgeneric_flattened: T,\n};\n\nexport type GenericNewType1<T> = T[][];\n\nexport type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type GenericTuple<T> = [T, T[], T[][]];\n\nexport type GenericTupleStruct<T> = T;\n\nexport type GenericType<T> = \"Undefined\" | T;\n\nexport type HasGenericAlias = { [key in number]: string };\n\nexport type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type InlineEnumField = { A: {\n\ta: string,\n} };\n\nexport type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & InlineFlattenGenericsG<string>;\n\nexport type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type InlineRecursiveConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number, number],\n\te: InlineRecursiveConstGeneric,\n};\n\nexport type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type InlineStruct = {\n\tref_struct: SimpleStruct,\n\tval: number,\n};\n\nexport type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nexport type Inner = {\n\ta: number,\n} & FlattenedInner;\n\nexport type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nexport type InternallyTaggedE = { type: \"A\" };\n\nexport type InternallyTaggedF = { type: \"A\" };\n\nexport type InternallyTaggedFInner = null;\n\nexport type InternallyTaggedH = { type: \"A\" };\n\nexport type InternallyTaggedHInner = null;\n\nexport type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedM = { type: \"A\" };\n\nexport type InternallyTaggedMInner = \"A\" | \"B\";\n\nexport type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nexport type InvalidToValidType = {\n\tcause: null,\n};\n\nexport type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nexport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nexport type KebabCase = {\n\t\"test-ing\": string,\n};\n\nexport type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nexport type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nexport type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\nexport type MacroStruct = string;\n\nexport type MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type MaybeValidKey<T> = T;\n\nexport type MyEmptyInput = Record<string, never>;\n\nexport type MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n\nexport type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: First,\n} };\n\nexport type MyEnumExternal = { Variant: {\n\tinner: First,\n} };\n\nexport type MyEnumTagged = { type: \"Variant\"; inner: First };\n\nexport type MyEnumUntagged = { inner: First };\n\nexport type NamedConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n\nexport type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First };\n\nexport type NonOptional = string | null;\n\nexport type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nexport type OptionalOnNamedField = string | null;\n\nexport type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type Pair<Z, A> = {\n\tfirst: Z,\n\tsecond: A,\n};\n\nexport type PlaceholderInnerField = {\n\ta: string,\n};\n\nexport type Primitives = {\n\ti8: number,\n\ti16: number,\n\ti32: number,\n\tu8: number,\n\tu16: number,\n\tu32: number,\n\tf32: number,\n\tf64: number,\n\tbool: boolean,\n\tchar: string,\n\t\"Range<i32>\": Range<number>,\n\t\"RangeInclusive<i32>\": RangeInclusive<number>,\n\t\"()\": null,\n\t\"(String, i32)\": [string, number],\n\t\"(String, i32, bool)\": [string, number, boolean],\n\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\tString: string,\n\tPathBuf: string,\n\tIpAddr: string,\n\tIpv4Addr: string,\n\tIpv6Addr: string,\n\tSocketAddr: string,\n\tSocketAddrV4: string,\n\tSocketAddrV6: string,\n\t\"Cow<'static, str>\": string,\n\t\"Cow<'static, i32>\": number,\n\t\"&'static str\": string,\n\t\"&'static bool\": boolean,\n\t\"&'static i32\": number,\n\t\"Vec<i32>\": number[],\n\t\"&'static [i32]\": number[],\n\t\"&'static [i32; 3]\": [number, number, number],\n\t\"[i32; 3]\": [number, number, number],\n\t\"Vec<MyEnum>\": MyEnum[],\n\t\"&'static [MyEnum]\": MyEnum[],\n\t\"&'static [MyEnum; 6]\": [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum],\n\t\"[MyEnum; 2]\": [MyEnum, MyEnum],\n\t\"&'static [i32; 1]\": [number],\n\t\"&'static [i32; 0]\": [],\n\t\"Option<i32>\": number | null,\n\t\"Option<()>\": null,\n\t\"Option<Vec<i32>>\": number[] | null,\n\t\"Result<String, i32>\": Result<string, number>,\n\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\"Option<Option<String>>\": string | null,\n\t\"Option<Option<Option<String>>>\": string | null,\n\t\"PhantomData<()>\": null,\n\t\"PhantomData<String>\": null,\n\tInfallible: never,\n\tUnit1: Unit1,\n\tUnit2: Unit2,\n\tUnit3: Unit3,\n\tUnit4: Unit4,\n\tUnit5: Unit5,\n\tUnit6: Unit6,\n\tUnit7: Unit7,\n\tSimpleStruct: SimpleStruct,\n\tTupleStruct1: TupleStruct1,\n\tTupleStruct3: TupleStruct3,\n\tTestEnum: TestEnum,\n\tRefStruct: RefStruct,\n\tInlinerStruct: InlinerStruct,\n\t\"GenericStruct<i32>\": GenericStruct<number>,\n\t\"GenericStruct<String>\": GenericStruct<string>,\n\tFlattenEnumStruct: FlattenEnumStruct,\n\tOverridenStruct: OverridenStruct,\n\tHasGenericAlias: HasGenericAlias,\n\tEnumMacroAttributes: EnumMacroAttributes,\n\tInlineEnumField: InlineEnumField,\n\tInlineOptionalType: InlineOptionalType,\n\tRename: Rename,\n\tTransparentType: TransparentType,\n\tTransparentType2: TransparentType2,\n\tTransparentTypeWithOverride: TransparentTypeWithOverride,\n\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in BasicEnum]: null }>,\n\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in BasicEnum]: number }>,\n\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\"Vec<PlaceholderInnerField>\": PlaceholderInnerField[],\n\tEnumReferenceRecordKey: EnumReferenceRecordKey,\n\tFlattenOnNestedEnum: FlattenOnNestedEnum,\n\tMyEmptyInput: MyEmptyInput,\n\t\"(String)\": string,\n\t\"(String,)\": [string],\n\tExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant,\n\tExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct,\n\t\"Vec<MyEnum>\": MyEnum[],\n\tInlineTuple: InlineTuple,\n\tInlineTuple2: InlineTuple2,\n\t\"Box<str>\": string,\n\t\"Box<String>\": string,\n\tSkippedFieldWithinVariant: SkippedFieldWithinVariant,\n\tKebabCase: KebabCase,\n\t\"&[&str]\": string[],\n\t\"Issue281<'_>\": Issue281,\n\t\"LifetimeGenericStruct<'_, i32>\": LifetimeGenericStruct<number>,\n\t\"LifetimeGenericEnum<'_, i32>\": LifetimeGenericEnum<number>,\n\tRenameWithWeirdCharsField: RenameWithWeirdCharsField,\n\tRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant,\n\tRenamedFieldKeys: RenamedFieldKeys,\n\tRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload,\n\t\"type_type::Type\": Type,\n\tActualType: ActualType,\n\tSpectaTypeOverride: SpectaTypeOverride,\n\tContainerTypeOverrideStruct: ContainerTypeOverrideStruct,\n\tContainerTypeOverrideEnum: ContainerTypeOverrideEnum,\n\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": ContainerTypeOverrideGeneric,\n\t\"ContainerTypeOverrideToGeneric<i32>\": ContainerTypeOverrideToGeneric<number>,\n\tContainerTypeOverrideTuple: ContainerTypeOverrideTuple,\n\t\"ContainerTypeOverrideTupleGeneric<i32>\": ContainerTypeOverrideTupleGeneric<number>,\n\tInvalidToValidType: InvalidToValidType,\n\tTupleStruct: TupleStruct,\n\tTupleStructWithRep: TupleStructWithRep,\n\t\"GenericTupleStruct<String>\": GenericTupleStruct<string>,\n\tBracedStruct: BracedStruct,\n\tStruct: StructNew,\n\tStruct2: Struct2,\n\tEnum: Enum,\n\tEnum2: Enum2,\n\tEnum3: Enum3,\n\tStructRenameAllUppercase: StructRenameAllUppercase,\n\tRenameSerdeSpecialChar: RenameSerdeSpecialChar,\n\tEnumRenameAllUppercase: EnumRenameAllUppercase,\n\tRecursive: Recursive,\n\tRecursiveMapValue: RecursiveMapValue,\n\tRecursiveTransparent: RecursiveTransparent,\n\tRecursiveInEnum: RecursiveInEnum,\n\tNonOptional: NonOptional,\n\tOptionalOnNamedField: OptionalOnNamedField,\n\tOptionalOnTransparentNamedField: OptionalOnTransparentNamedField,\n\tOptionalInEnum: OptionalInEnum,\n\tUntaggedVariants: UntaggedVariants,\n\tUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue,\n\tUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches,\n\t\"HashMap<String, ()>\": { [key in string]: null },\n\tRegular: Regular,\n\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\"HashMap<TransparentStruct, ()>\": { [key in TransparentStruct]: null },\n\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in UnitVariants]: null }>,\n\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in UntaggedVariantsKey]: null }>,\n\tValidMaybeValidKey: ValidMaybeValidKey,\n\tValidMaybeValidKeyNested: ValidMaybeValidKeyNested,\n\tMacroStruct: MacroStruct,\n\tMacroStruct2: MacroStruct2,\n\tMacroEnum: MacroEnum,\n\tDeprecatedType: DeprecatedType,\n\tDeprecatedTypeWithMsg: DeprecatedTypeWithMsg,\n\tDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2,\n\tDeprecatedFields: DeprecatedFields,\n\tDeprecatedTupleVariant: DeprecatedTupleVariant,\n\tDeprecatedEnumVariants: DeprecatedEnumVariants,\n\tCommentedStruct: CommentedStruct,\n\tCommentedEnum: CommentedEnum,\n\tSingleLineComment: SingleLineComment,\n\tNonGeneric: Demo<number, boolean>,\n\t\"HalfGenericA<u8>\": Demo<number, boolean>,\n\t\"HalfGenericB<bool>\": Demo<number, boolean>,\n\t\"FullGeneric<u8, bool>\": Demo<number, boolean>,\n\t\"Another<bool>\": Demo<number, boolean>,\n\t\"MapA<u32>\": { [key in string]: number },\n\t\"MapB<u32>\": { [key in number]: string },\n\t\"MapC<u32>\": { [key in string]: AGenericStruct<number> },\n\t\"AGenericStruct<u32>\": AGenericStruct<number>,\n\tA: A,\n\tDoubleFlattened: DoubleFlattened,\n\tFlattenedInner: FlattenedInner,\n\tBoxFlattened: BoxFlattened,\n\tBoxInline: BoxInline,\n\tFirst: First,\n\tSecond: Second,\n\tThird: Third,\n\tFourth: Fourth,\n\tTagOnStructWithInline: TagOnStructWithInline,\n\tSixth: Sixth,\n\tSeventh: Seventh,\n\tEight: Eight,\n\tNinth: Ninth,\n\tTenth: Tenth,\n\tMyEnumTagged: MyEnumTagged,\n\tMyEnumExternal: MyEnumExternal,\n\tMyEnumAdjacent: MyEnumAdjacent,\n\tMyEnumUntagged: MyEnumUntagged,\n\tEmptyStruct: EmptyStruct,\n\tEmptyStructWithTag: EmptyStructWithTag,\n\tAdjacentlyTagged: AdjacentlyTagged,\n\tLoadProjectEvent: LoadProjectEvent,\n\tExternallyTagged: ExternallyTagged,\n\tIssue221External: Issue221External,\n\tInternallyTaggedD: InternallyTaggedD,\n\tInternallyTaggedE: InternallyTaggedE,\n\tInternallyTaggedF: InternallyTaggedF,\n\tInternallyTaggedH: InternallyTaggedH,\n\tInternallyTaggedL: InternallyTaggedL,\n\tInternallyTaggedM: InternallyTaggedM,\n\tStructWithAlias: StructWithAlias,\n\tStructWithMultipleAliases: StructWithMultipleAliases,\n\tStructWithAliasAndRename: StructWithAliasAndRename,\n\tEnumWithVariantAlias: EnumWithVariantAlias,\n\tEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases,\n\tEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename,\n\tInternallyTaggedWithAlias: InternallyTaggedWithAlias,\n\tAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias,\n\tUntaggedWithAlias: UntaggedWithAlias,\n\tIssue221UntaggedSafe: Issue221UntaggedSafe,\n\tIssue221UntaggedMixed: Issue221UntaggedMixed,\n\tEmptyEnum: EmptyEnum,\n\tEmptyEnumTagged: EmptyEnumTagged,\n\tEmptyEnumTaggedWContent: EmptyEnumTaggedWContent,\n\tEmptyEnumUntagged: EmptyEnumUntagged,\n\tSkipOnlyField: SkipOnlyField,\n\tSkipField: SkipField,\n\tSkipVariant: SkipVariant,\n\tSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant,\n\tSkipNamedFieldInVariant: SkipNamedFieldInVariant,\n\tTransparentWithSkip: TransparentWithSkip,\n\tTransparentWithSkip2: TransparentWithSkip2,\n\tTransparentWithSkip3: TransparentWithSkip3,\n\tSkipVariant2: SkipVariant2,\n\tSkipVariant3: SkipVariant3,\n\tSkipStructFields: SkipStructFields,\n\tSpectaSkipNonTypeField: SpectaSkipNonTypeField,\n\tFlattenA: FlattenA,\n\tFlattenB: FlattenB,\n\tFlattenC: FlattenC,\n\tFlattenD: FlattenD,\n\tFlattenE: FlattenE,\n\tFlattenF: FlattenF,\n\tFlattenG: FlattenG,\n\tTupleNested: TupleNested,\n\t\"Generic1<()>\": Generic1<null>,\n\t\"GenericAutoBound<()>\": GenericAutoBound<null>,\n\t\"GenericAutoBound2<()>\": GenericAutoBound2<null>,\n\tContainer1: Container1,\n\t\"Generic2<(), String, i32>\": Generic2<null, string, number>,\n\t\"GenericNewType1<()>\": GenericNewType1<null>,\n\t\"GenericTuple<()>\": GenericTuple<null>,\n\t\"GenericStruct2<()>\": GenericStruct2<null>,\n\t\"InlineGenericNewtype<String>\": string,\n\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }],\n\t\"InlineFlattenGenericsG<()>\": InlineFlattenGenericsG<null>,\n\tInlineFlattenGenerics: InlineFlattenGenerics,\n\tGenericDefault: GenericDefault,\n\tChainedGenericDefault: ChainedGenericDefault,\n\t\"ChainedGenericDefault<String, String>\": ChainedGenericDefault,\n\t\"ChainedGenericDefault<i32>\": ChainedGenericDefault<number, number>,\n\t\"ChainedGenericDefault<String, i32>\": ChainedGenericDefault<string, number>,\n\tGenericDefaultSkipped: GenericDefaultSkipped<string>,\n\tGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>,\n\tGenericParameterOrderPreserved: GenericParameterOrderPreserved,\n\tConstGenericInNonConstContainer: ConstGenericInNonConstContainer,\n\tConstGenericInConstContainer: ConstGenericInConstContainer,\n\tNamedConstGenericContainer: NamedConstGenericContainer,\n\tInlineConstGenericContainer: InlineConstGenericContainer,\n\tInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer,\n\tTestCollectionRegister: TestCollectionRegister,\n\tTestCollectionRegister: TestCollectionRegister,\n};\n\nexport type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type Recursive = {\n\tdemo: Recursive,\n};\n\nexport type RecursiveInEnum = { A: {\n\tdemo: RecursiveInEnum,\n} };\n\nexport type RecursiveInline = RecursiveInline;\n\nexport type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nexport type RecursiveTransparent = RecursiveInline;\n\nexport type RefStruct = TestEnum;\n\nexport type Regular = { [key in string]: null };\n\nexport type Rename = \"OneWord\" | \"Two words\";\n\nexport type RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nexport type RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nexport type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nexport type RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nexport type RenamedVariantWithSkippedPayload = \"a-b\";\n\nexport type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type Second = {\n\ta: number,\n};\n\nexport type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nexport type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\n/**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nexport type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nexport type SkipField = {\n\tb: number,\n};\n\nexport type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nexport type SkipOnlyField = Record<string, never>;\n\nexport type SkipStructFields = {\n\ta: number,\n};\n\nexport type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nexport type SkipVariant = { A: string };\n\nexport type SkipVariant2 = { tag: \"A\"; data: string };\n\nexport type SkipVariant3 = { A: {\n\ta: string,\n} };\n\nexport type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nexport type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type Struct2 = {\n\tb: string,\n};\n\nexport type StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nexport type StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nexport type StructWithAlias = {\n\tfield: string,\n};\n\nexport type StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nexport type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type TestCollectionRegister = never;\n\nexport type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nexport type Third = {\n\tb: { [key in string]: string },\n\tc: First,\n} & First;\n\nexport type ToBeFlattened = {\n\ta: string,\n};\n\nexport type TransparentStruct = string;\n\nexport type TransparentType = TransparentTypeInner;\n\nexport type TransparentType2 = null;\n\nexport type TransparentTypeInner = {\n\tinner: string,\n};\n\nexport type TransparentTypeWithOverride = string;\n\nexport type TransparentWithSkip = null;\n\nexport type TransparentWithSkip2 = string;\n\nexport type TransparentWithSkip3 = string;\n\nexport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type TupleStruct = string;\n\nexport type TupleStruct1 = number;\n\nexport type TupleStruct3 = [number, boolean, string];\n\nexport type TupleStructWithRep = string;\n\nexport type Type = never;\n\nexport type Unit1 = null;\n\nexport type Unit2 = Record<string, never>;\n\nexport type Unit3 = [];\n\nexport type Unit4 = null;\n\nexport type Unit5 = \"A\";\n\nexport type Unit6 = { A: null };\n\nexport type Unit7 = { A: Record<string, never> };\n\nexport type UnitVariants = \"A\" | \"B\" | \"C\";\n\nexport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type UntaggedVariantsKey = string | number;\n\nexport type UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nexport type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-flatfile-serde_phases.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nts-export-to-flatfile-serde_phases (27915 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\nexport type A = {\n\ta: B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type AGenericStruct<T> = {\n\tfield: Demo<T, boolean>,\n};\n\nexport type ActualType = {\n\ta: GenericType<string>,\n};\n\nexport type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nexport type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nexport type B = {\n\tb: number,\n};\n\nexport type BasicEnum = \"A\" | \"B\";\n\nexport type BoxFlattened = BoxedInner;\n\nexport type BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type BoxedInner = {\n\ta: number,\n};\n\nexport type BracedStruct = string;\n\nexport type ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nexport type ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type Container1 = {\n\tfoo: Generic1<number>,\n\tbar: Generic1<number>[],\n\tbaz: { [key in string]: Generic1<string> },\n};\n\nexport type ContainerTypeOverrideEnum = string;\n\nexport type ContainerTypeOverrideGeneric = string;\n\nexport type ContainerTypeOverrideStruct = string;\n\nexport type ContainerTypeOverrideToGeneric<T> = T;\n\nexport type ContainerTypeOverrideTuple = [string, number];\n\nexport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type D = {\n\tflattened: number,\n};\n\nexport type Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nexport type DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\n/**\n * @deprecated\n */\nexport type DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type DoubleFlattened = {\n\ta: ToBeFlattened,\n\tb: ToBeFlattened,\n};\n\nexport type Eight = { A: string } | \"B\";\n\nexport type EmptyEnum = never;\n\nexport type EmptyEnumTagged = never;\n\nexport type EmptyEnumTaggedWContent = never;\n\nexport type EmptyEnumUntagged = never;\n\nexport type EmptyStruct = Record<string, never>;\n\nexport type EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nexport type Enum = { t: \"A\" } | { t: \"B\" };\n\nexport type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nexport type Enum3 = { t: \"A\"; b: string };\n\nexport type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nexport type EnumReferenceRecordKey = {\n\ta: Partial<{ [key in BasicEnum]: number }>,\n};\n\nexport type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nexport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nexport type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nexport type ExtraBracketsInTupleVariant = { A: string };\n\nexport type ExtraBracketsInUnnamedStruct = string;\n\nexport type First = {\n\ta: string,\n};\n\nexport type FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type FlattenB = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenC = {\n\tc: number,\n} & FlattenA;\n\nexport type FlattenD = {\n\ta: FlattenA,\n\tc: number,\n};\n\nexport type FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n\nexport type FlattenEnumStruct = {\n\touter: string,\n} & FlattenEnum;\n\nexport type FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (FlattenA),\n\td: number,\n};\n\nexport type FlattenG = {\n\tb: FlattenB,\n\td: number,\n};\n\nexport type FlattenOnNestedEnum = {\n\tid: string,\n} & NestedEnum;\n\nexport type FlattenedInner = Inner;\n\nexport type Fourth = {\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nexport type GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type GenericFlattened<T> = {\n\tgeneric_flattened: T,\n};\n\nexport type GenericNewType1<T> = T[][];\n\nexport type GenericParameterOrderPreserved = {\n\tpair: Pair<number, string>,\n};\n\nexport type GenericStruct<T> = {\n\targ: T,\n};\n\nexport type GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type GenericTuple<T> = [T, T[], T[][]];\n\nexport type GenericTupleStruct<T> = T;\n\nexport type GenericType<T> = \"Undefined\" | T;\n\nexport type HasGenericAlias = { [key in number]: string };\n\nexport type InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type InlineEnumField = { A: {\n\ta: string,\n} };\n\nexport type InlineFlattenGenerics = {\n\tg: InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & InlineFlattenGenericsG<string>;\n\nexport type InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type InlineRecursiveConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number, number],\n\te: InlineRecursiveConstGeneric,\n};\n\nexport type InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type InlineStruct = {\n\tref_struct: SimpleStruct,\n\tval: number,\n};\n\nexport type InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: RefStruct,\n};\n\nexport type Inner = {\n\ta: number,\n} & FlattenedInner;\n\nexport type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nexport type InternallyTaggedE = { type: \"A\" };\n\nexport type InternallyTaggedF = { type: \"A\" };\n\nexport type InternallyTaggedFInner = null;\n\nexport type InternallyTaggedH = { type: \"A\" };\n\nexport type InternallyTaggedHInner = null;\n\nexport type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n\nexport type InternallyTaggedM = { type: \"A\" };\n\nexport type InternallyTaggedMInner = \"A\" | \"B\";\n\nexport type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nexport type InvalidToValidType = {\n\tcause: null,\n};\n\nexport type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nexport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type Issue374 = Issue374_Serialize | Issue374_Deserialize;\n\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type Issue374_Deserialize = {\n\tfoo?: boolean,\n\tbar?: boolean,\n};\n\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type Issue374_Serialize = {\n\tfoo?: boolean,\n\tbar?: boolean,\n};\n\nexport type KebabCase = {\n\t\"test-ing\": string,\n};\n\nexport type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nexport type LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nexport type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\nexport type MacroStruct = string;\n\nexport type MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type MaybeValidKey<T> = T;\n\nexport type MyEmptyInput = Record<string, never>;\n\nexport type MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n\nexport type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: First,\n} };\n\nexport type MyEnumExternal = { Variant: {\n\tinner: First,\n} };\n\nexport type MyEnumTagged = { type: \"Variant\"; inner: First };\n\nexport type MyEnumUntagged = { inner: First };\n\nexport type NamedConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type NamedConstGenericContainer = {\n\ta: NamedConstGeneric,\n\tb: NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n\nexport type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: First };\n\nexport type NonOptional = string | null;\n\nexport type Optional = Optional_Serialize | Optional_Deserialize;\n\nexport type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nexport type OptionalOnNamedField = string | null;\n\nexport type OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type Optional_Deserialize = {\n\ta: number | null,\n\tb?: number | null,\n\tc: string | null,\n\td?: boolean,\n};\n\nexport type Optional_Serialize = {\n\ta: number | null,\n\tb?: number | null,\n\tc?: string | null,\n\td: boolean,\n};\n\nexport type OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type Pair<Z, A> = {\n\tfirst: Z,\n\tsecond: A,\n};\n\nexport type PlaceholderInnerField = {\n\ta: string,\n};\n\nexport type Primitives = {\n\ti8: number,\n\ti16: number,\n\ti32: number,\n\tu8: number,\n\tu16: number,\n\tu32: number,\n\tf32: number,\n\tf64: number,\n\tbool: boolean,\n\tchar: string,\n\t\"Range<i32>\": Range<number>,\n\t\"RangeInclusive<i32>\": RangeInclusive<number>,\n\t\"()\": null,\n\t\"(String, i32)\": [string, number],\n\t\"(String, i32, bool)\": [string, number, boolean],\n\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\tString: string,\n\tPathBuf: string,\n\tIpAddr: string,\n\tIpv4Addr: string,\n\tIpv6Addr: string,\n\tSocketAddr: string,\n\tSocketAddrV4: string,\n\tSocketAddrV6: string,\n\t\"Cow<'static, str>\": string,\n\t\"Cow<'static, i32>\": number,\n\t\"&'static str\": string,\n\t\"&'static bool\": boolean,\n\t\"&'static i32\": number,\n\t\"Vec<i32>\": number[],\n\t\"&'static [i32]\": number[],\n\t\"&'static [i32; 3]\": [number, number, number],\n\t\"[i32; 3]\": [number, number, number],\n\t\"Vec<MyEnum>\": MyEnum[],\n\t\"&'static [MyEnum]\": MyEnum[],\n\t\"&'static [MyEnum; 6]\": [MyEnum, MyEnum, MyEnum, MyEnum, MyEnum, MyEnum],\n\t\"[MyEnum; 2]\": [MyEnum, MyEnum],\n\t\"&'static [i32; 1]\": [number],\n\t\"&'static [i32; 0]\": [],\n\t\"Option<i32>\": number | null,\n\t\"Option<()>\": null,\n\t\"Option<Vec<i32>>\": number[] | null,\n\t\"Result<String, i32>\": Result<string, number>,\n\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\"Option<Option<String>>\": string | null,\n\t\"Option<Option<Option<String>>>\": string | null,\n\t\"PhantomData<()>\": null,\n\t\"PhantomData<String>\": null,\n\tInfallible: never,\n\tUnit1: Unit1,\n\tUnit2: Unit2,\n\tUnit3: Unit3,\n\tUnit4: Unit4,\n\tUnit5: Unit5,\n\tUnit6: Unit6,\n\tUnit7: Unit7,\n\tSimpleStruct: SimpleStruct,\n\tTupleStruct1: TupleStruct1,\n\tTupleStruct3: TupleStruct3,\n\tTestEnum: TestEnum,\n\tRefStruct: RefStruct,\n\tInlinerStruct: InlinerStruct,\n\t\"GenericStruct<i32>\": GenericStruct<number>,\n\t\"GenericStruct<String>\": GenericStruct<string>,\n\tFlattenEnumStruct: FlattenEnumStruct,\n\tOverridenStruct: OverridenStruct,\n\tHasGenericAlias: HasGenericAlias,\n\tEnumMacroAttributes: EnumMacroAttributes,\n\tInlineEnumField: InlineEnumField,\n\tInlineOptionalType: InlineOptionalType,\n\tRename: Rename,\n\tTransparentType: TransparentType,\n\tTransparentType2: TransparentType2,\n\tTransparentTypeWithOverride: TransparentTypeWithOverride,\n\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in BasicEnum]: null }>,\n\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in BasicEnum]: number }>,\n\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\"Vec<PlaceholderInnerField>\": PlaceholderInnerField[],\n\tEnumReferenceRecordKey: EnumReferenceRecordKey,\n\tFlattenOnNestedEnum: FlattenOnNestedEnum,\n\tMyEmptyInput: MyEmptyInput,\n\t\"(String)\": string,\n\t\"(String,)\": [string],\n\tExtraBracketsInTupleVariant: ExtraBracketsInTupleVariant,\n\tExtraBracketsInUnnamedStruct: ExtraBracketsInUnnamedStruct,\n\t\"Vec<MyEnum>\": MyEnum[],\n\tInlineTuple: InlineTuple,\n\tInlineTuple2: InlineTuple2,\n\t\"Box<str>\": string,\n\t\"Box<String>\": string,\n\tSkippedFieldWithinVariant: SkippedFieldWithinVariant,\n\tKebabCase: KebabCase,\n\t\"&[&str]\": string[],\n\t\"Issue281<'_>\": Issue281,\n\t\"LifetimeGenericStruct<'_, i32>\": LifetimeGenericStruct<number>,\n\t\"LifetimeGenericEnum<'_, i32>\": LifetimeGenericEnum<number>,\n\tRenameWithWeirdCharsField: RenameWithWeirdCharsField,\n\tRenameWithWeirdCharsVariant: RenameWithWeirdCharsVariant,\n\tRenamedFieldKeys: RenamedFieldKeys,\n\tRenamedVariantWithSkippedPayload: RenamedVariantWithSkippedPayload,\n\t\"type_type::Type\": Type,\n\tActualType: ActualType,\n\tSpectaTypeOverride: SpectaTypeOverride,\n\tContainerTypeOverrideStruct: ContainerTypeOverrideStruct,\n\tContainerTypeOverrideEnum: ContainerTypeOverrideEnum,\n\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": ContainerTypeOverrideGeneric,\n\t\"ContainerTypeOverrideToGeneric<i32>\": ContainerTypeOverrideToGeneric<number>,\n\tContainerTypeOverrideTuple: ContainerTypeOverrideTuple,\n\t\"ContainerTypeOverrideTupleGeneric<i32>\": ContainerTypeOverrideTupleGeneric<number>,\n\tInvalidToValidType: InvalidToValidType,\n\tTupleStruct: TupleStruct,\n\tTupleStructWithRep: TupleStructWithRep,\n\t\"GenericTupleStruct<String>\": GenericTupleStruct<string>,\n\tBracedStruct: BracedStruct,\n\tStruct: StructNew,\n\tStruct2: Struct2,\n\tEnum: Enum,\n\tEnum2: Enum2,\n\tEnum3: Enum3,\n\tStructRenameAllUppercase: StructRenameAllUppercase,\n\tRenameSerdeSpecialChar: RenameSerdeSpecialChar,\n\tEnumRenameAllUppercase: EnumRenameAllUppercase,\n\tRecursive: Recursive,\n\tRecursiveMapValue: RecursiveMapValue,\n\tRecursiveTransparent: RecursiveTransparent,\n\tRecursiveInEnum: RecursiveInEnum,\n\tNonOptional: NonOptional,\n\tOptionalOnNamedField: OptionalOnNamedField,\n\tOptionalOnTransparentNamedField: OptionalOnTransparentNamedField,\n\tOptionalInEnum: OptionalInEnum,\n\tUntaggedVariants: UntaggedVariants,\n\tUntaggedVariantsWithoutValue: UntaggedVariantsWithoutValue,\n\tUntaggedVariantsWithDuplicateBranches: UntaggedVariantsWithDuplicateBranches,\n\t\"HashMap<String, ()>\": { [key in string]: null },\n\tRegular: Regular,\n\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\"HashMap<TransparentStruct, ()>\": { [key in TransparentStruct]: null },\n\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in UnitVariants]: null }>,\n\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in UntaggedVariantsKey]: null }>,\n\tValidMaybeValidKey: ValidMaybeValidKey,\n\tValidMaybeValidKeyNested: ValidMaybeValidKeyNested,\n\tMacroStruct: MacroStruct,\n\tMacroStruct2: MacroStruct2,\n\tMacroEnum: MacroEnum,\n\tDeprecatedType: DeprecatedType,\n\tDeprecatedTypeWithMsg: DeprecatedTypeWithMsg,\n\tDeprecatedTypeWithMsg2: DeprecatedTypeWithMsg2,\n\tDeprecatedFields: DeprecatedFields,\n\tDeprecatedTupleVariant: DeprecatedTupleVariant,\n\tDeprecatedEnumVariants: DeprecatedEnumVariants,\n\tCommentedStruct: CommentedStruct,\n\tCommentedEnum: CommentedEnum,\n\tSingleLineComment: SingleLineComment,\n\tNonGeneric: Demo<number, boolean>,\n\t\"HalfGenericA<u8>\": Demo<number, boolean>,\n\t\"HalfGenericB<bool>\": Demo<number, boolean>,\n\t\"FullGeneric<u8, bool>\": Demo<number, boolean>,\n\t\"Another<bool>\": Demo<number, boolean>,\n\t\"MapA<u32>\": { [key in string]: number },\n\t\"MapB<u32>\": { [key in number]: string },\n\t\"MapC<u32>\": { [key in string]: AGenericStruct<number> },\n\t\"AGenericStruct<u32>\": AGenericStruct<number>,\n\tA: A,\n\tDoubleFlattened: DoubleFlattened,\n\tFlattenedInner: FlattenedInner,\n\tBoxFlattened: BoxFlattened,\n\tBoxInline: BoxInline,\n\tFirst: First,\n\tSecond: Second,\n\tThird: Third,\n\tFourth: Fourth,\n\tTagOnStructWithInline: TagOnStructWithInline,\n\tSixth: Sixth,\n\tSeventh: Seventh,\n\tEight: Eight,\n\tNinth: Ninth,\n\tTenth: Tenth,\n\tMyEnumTagged: MyEnumTagged,\n\tMyEnumExternal: MyEnumExternal,\n\tMyEnumAdjacent: MyEnumAdjacent,\n\tMyEnumUntagged: MyEnumUntagged,\n\tEmptyStruct: EmptyStruct,\n\tEmptyStructWithTag: EmptyStructWithTag,\n\tAdjacentlyTagged: AdjacentlyTagged,\n\tLoadProjectEvent: LoadProjectEvent,\n\tExternallyTagged: ExternallyTagged,\n\tIssue221External: Issue221External,\n\tInternallyTaggedD: InternallyTaggedD,\n\tInternallyTaggedE: InternallyTaggedE,\n\tInternallyTaggedF: InternallyTaggedF,\n\tInternallyTaggedH: InternallyTaggedH,\n\tInternallyTaggedL: InternallyTaggedL,\n\tInternallyTaggedM: InternallyTaggedM,\n\tStructWithAlias: StructWithAlias,\n\tStructWithMultipleAliases: StructWithMultipleAliases,\n\tStructWithAliasAndRename: StructWithAliasAndRename,\n\tEnumWithVariantAlias: EnumWithVariantAlias,\n\tEnumWithMultipleVariantAliases: EnumWithMultipleVariantAliases,\n\tEnumWithVariantAliasAndRename: EnumWithVariantAliasAndRename,\n\tInternallyTaggedWithAlias: InternallyTaggedWithAlias,\n\tAdjacentlyTaggedWithAlias: AdjacentlyTaggedWithAlias,\n\tUntaggedWithAlias: UntaggedWithAlias,\n\tIssue221UntaggedSafe: Issue221UntaggedSafe,\n\tIssue221UntaggedMixed: Issue221UntaggedMixed,\n\tEmptyEnum: EmptyEnum,\n\tEmptyEnumTagged: EmptyEnumTagged,\n\tEmptyEnumTaggedWContent: EmptyEnumTaggedWContent,\n\tEmptyEnumUntagged: EmptyEnumUntagged,\n\tSkipOnlyField: SkipOnlyField,\n\tSkipField: SkipField,\n\tSkipVariant: SkipVariant,\n\tSkipUnnamedFieldInVariant: SkipUnnamedFieldInVariant,\n\tSkipNamedFieldInVariant: SkipNamedFieldInVariant,\n\tTransparentWithSkip: TransparentWithSkip,\n\tTransparentWithSkip2: TransparentWithSkip2,\n\tTransparentWithSkip3: TransparentWithSkip3,\n\tSkipVariant2: SkipVariant2,\n\tSkipVariant3: SkipVariant3,\n\tSkipStructFields: SkipStructFields,\n\tSpectaSkipNonTypeField: SpectaSkipNonTypeField,\n\tFlattenA: FlattenA,\n\tFlattenB: FlattenB,\n\tFlattenC: FlattenC,\n\tFlattenD: FlattenD,\n\tFlattenE: FlattenE,\n\tFlattenF: FlattenF,\n\tFlattenG: FlattenG,\n\tTupleNested: TupleNested,\n\t\"Generic1<()>\": Generic1<null>,\n\t\"GenericAutoBound<()>\": GenericAutoBound<null>,\n\t\"GenericAutoBound2<()>\": GenericAutoBound2<null>,\n\tContainer1: Container1,\n\t\"Generic2<(), String, i32>\": Generic2<null, string, number>,\n\t\"GenericNewType1<()>\": GenericNewType1<null>,\n\t\"GenericTuple<()>\": GenericTuple<null>,\n\t\"GenericStruct2<()>\": GenericStruct2<null>,\n\t\"InlineGenericNewtype<String>\": string,\n\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }],\n\t\"InlineFlattenGenericsG<()>\": InlineFlattenGenericsG<null>,\n\tInlineFlattenGenerics: InlineFlattenGenerics,\n\tGenericDefault: GenericDefault,\n\tChainedGenericDefault: ChainedGenericDefault,\n\t\"ChainedGenericDefault<String, String>\": ChainedGenericDefault,\n\t\"ChainedGenericDefault<i32>\": ChainedGenericDefault<number, number>,\n\t\"ChainedGenericDefault<String, i32>\": ChainedGenericDefault<string, number>,\n\tGenericDefaultSkipped: GenericDefaultSkipped<string>,\n\tGenericDefaultSkippedNonType: GenericDefaultSkippedNonType<unknown>,\n\tGenericParameterOrderPreserved: GenericParameterOrderPreserved,\n\tConstGenericInNonConstContainer: ConstGenericInNonConstContainer,\n\tConstGenericInConstContainer: ConstGenericInConstContainer,\n\tNamedConstGenericContainer: NamedConstGenericContainer,\n\tInlineConstGenericContainer: InlineConstGenericContainer,\n\tInlineRecursiveConstGenericContainer: InlineRecursiveConstGenericContainer,\n\tTestCollectionRegister: TestCollectionRegister,\n\tTestCollectionRegister: TestCollectionRegister,\n};\n\nexport type Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type Recursive = {\n\tdemo: Recursive,\n};\n\nexport type RecursiveInEnum = { A: {\n\tdemo: RecursiveInEnum,\n} };\n\nexport type RecursiveInline = RecursiveInline;\n\nexport type RecursiveMapValue = {\n\tdemo: { [key in string]: RecursiveMapValue },\n};\n\nexport type RecursiveTransparent = RecursiveInline;\n\nexport type RefStruct = TestEnum;\n\nexport type Regular = { [key in string]: null };\n\nexport type Rename = \"OneWord\" | \"Two words\";\n\nexport type RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nexport type RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nexport type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nexport type RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nexport type RenamedVariantWithSkippedPayload = \"a-b\";\n\nexport type Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type Second = {\n\ta: number,\n};\n\nexport type Seventh = {\n\ta: First,\n\tb: Second,\n};\n\nexport type SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\n/**  Some single-line comment */\nexport type SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nexport type Sixth = {\n\ta: First,\n\tb: First,\n};\n\nexport type SkipField = {\n\tb: number,\n};\n\nexport type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nexport type SkipOnlyField = Record<string, never>;\n\nexport type SkipStructFields = {\n\ta: number,\n};\n\nexport type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nexport type SkipVariant = { A: string };\n\nexport type SkipVariant2 = { tag: \"A\"; data: string };\n\nexport type SkipVariant3 = { A: {\n\ta: string,\n} };\n\nexport type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nexport type SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type Struct2 = {\n\tb: string,\n};\n\nexport type StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nexport type StructPhaseSpecificRename = StructPhaseSpecificRenameSerialize | StructPhaseSpecificRenameDeserialize;\n\nexport type StructPhaseSpecificRenameDeserialize = {\n\tkind: \"StructPhaseSpecificRenameDeserialize\",\n\tder: string,\n};\n\nexport type StructPhaseSpecificRenameSerialize = {\n\tkind: \"StructPhaseSpecificRenameSerialize\",\n\tser: string,\n};\n\nexport type StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nexport type StructWithAlias = {\n\tfield: string,\n};\n\nexport type StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nexport type StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type Tenth = string | \"B\" | {\n\ta: string,\n} | First;\n\nexport type TestCollectionRegister = never;\n\nexport type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nexport type Third = {\n\tb: { [key in string]: string },\n\tc: First,\n} & First;\n\nexport type ToBeFlattened = {\n\ta: string,\n};\n\nexport type TransparentStruct = string;\n\nexport type TransparentType = TransparentTypeInner;\n\nexport type TransparentType2 = null;\n\nexport type TransparentTypeInner = {\n\tinner: string,\n};\n\nexport type TransparentTypeWithOverride = string;\n\nexport type TransparentWithSkip = null;\n\nexport type TransparentWithSkip2 = string;\n\nexport type TransparentWithSkip3 = string;\n\nexport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type TupleStruct = string;\n\nexport type TupleStruct1 = number;\n\nexport type TupleStruct3 = [number, boolean, string];\n\nexport type TupleStructWithRep = string;\n\nexport type Type = never;\n\nexport type Unit1 = null;\n\nexport type Unit2 = Record<string, never>;\n\nexport type Unit3 = [];\n\nexport type Unit4 = null;\n\nexport type Unit5 = \"A\";\n\nexport type Unit6 = { A: null };\n\nexport type Unit7 = { A: Record<string, never> };\n\nexport type UnitVariants = \"A\" | \"B\" | \"C\";\n\nexport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type UntaggedVariantsKey = string | number;\n\nexport type UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type ValidMaybeValidKey = { [key in MaybeValidKey<string>]: null };\n\nexport type ValidMaybeValidKeyNested = { [key in MaybeValidKey<MaybeValidKey<string>>]: null };\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-moduleprefixedname-raw.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nts-export-to-moduleprefixedname-raw (29820 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\nexport type test_types_A = {\n\ta: test_types_B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: test_types_B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type test_types_AGenericStruct<T> = {\n\tfield: test_types_Demo<T, boolean>,\n};\n\nexport type test_types_ActualType = {\n\ta: test_types_GenericType<string>,\n};\n\nexport type test_types_AdjacentlyTagged = \"A\" | { id: string; method: string } | string;\n\nexport type test_types_AdjacentlyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type test_types_B = {\n\tb: number,\n};\n\nexport type test_types_BasicEnum = \"A\" | \"B\";\n\nexport type test_types_BoxFlattened = {\n\tb: test_types_BoxedInner,\n};\n\nexport type test_types_BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type test_types_BoxedInner = {\n\ta: number,\n};\n\nexport type test_types_BracedStruct = string;\n\nexport type test_types_ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type test_types_CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nnumber | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n{ \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\na: number };\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type test_types_CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nexport type test_types_ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type test_types_ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type test_types_Container1 = {\n\tfoo: test_types_Generic1<number>,\n\tbar: test_types_Generic1<number>[],\n\tbaz: { [key in string]: test_types_Generic1<string> },\n};\n\nexport type test_types_ContainerTypeOverrideEnum = string;\n\nexport type test_types_ContainerTypeOverrideGeneric = string;\n\nexport type test_types_ContainerTypeOverrideStruct = string;\n\nexport type test_types_ContainerTypeOverrideToGeneric<T> = T;\n\nexport type test_types_ContainerTypeOverrideTuple = [string, number];\n\nexport type test_types_ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type test_types_D = {\n\tflattened: number,\n};\n\nexport type test_types_Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type test_types_DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nexport type test_types_DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type test_types_DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\n/**\n * @deprecated\n */\nexport type test_types_DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type test_types_DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type test_types_DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type test_types_DoubleFlattened = {\n\ta: test_types_ToBeFlattened,\n\tb: test_types_ToBeFlattened,\n};\n\nexport type test_types_Eight = string | \"B\";\n\nexport type test_types_EmptyEnum = never;\n\nexport type test_types_EmptyEnumTagged = never;\n\nexport type test_types_EmptyEnumTaggedWContent = never;\n\nexport type test_types_EmptyEnumUntagged = never;\n\nexport type test_types_EmptyStruct = Record<string, never>;\n\nexport type test_types_EmptyStructWithTag = Record<string, never>;\n\nexport type test_types_Enum = \"A\" | \"B\";\n\nexport type test_types_Enum2 = \"A\" | \"B\" | { enum_field: null };\n\nexport type test_types_Enum3 = { a: string };\n\nexport type test_types_EnumMacroAttributes = string | number | { a: string; b: number };\n\nexport type test_types_EnumReferenceRecordKey = {\n\ta: Partial<{ [key in test_types_BasicEnum]: number }>,\n};\n\nexport type test_types_EnumRenameAllUppercase = \"HelloWorld\" | \"VariantB\" | \"TestingWords\";\n\nexport type test_types_EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type test_types_EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type test_types_EnumWithVariantAliasAndRename = \"Variant\" | \"Other\";\n\nexport type test_types_ExternallyTagged = \"A\" | { id: string; method: string } | string;\n\nexport type test_types_ExtraBracketsInTupleVariant = string;\n\nexport type test_types_ExtraBracketsInUnnamedStruct = string;\n\nexport type test_types_First = {\n\ta: string,\n};\n\nexport type test_types_FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type test_types_FlattenB = {\n\ta: test_types_FlattenA,\n\tc: number,\n};\n\nexport type test_types_FlattenC = {\n\ta: test_types_FlattenA,\n\tc: number,\n};\n\nexport type test_types_FlattenD = {\n\ta: test_types_FlattenA,\n\tc: number,\n};\n\nexport type test_types_FlattenE = {\n\tb: {\n\t\ta: test_types_FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nexport type test_types_FlattenEnum = \"One\" | \"Two\" | \"Three\";\n\nexport type test_types_FlattenEnumStruct = {\n\touter: string,\n\tinner: test_types_FlattenEnum,\n};\n\nexport type test_types_FlattenF = {\n\tb: {\n\t\ta: test_types_FlattenA,\n\t\tc: number,\n\t},\n\td: number,\n};\n\nexport type test_types_FlattenG = {\n\tb: test_types_FlattenB,\n\td: number,\n};\n\nexport type test_types_FlattenOnNestedEnum = {\n\tid: string,\n\tresult: test_types_NestedEnum,\n};\n\nexport type test_types_FlattenedInner = {\n\tc: test_types_Inner,\n};\n\nexport type test_types_Fourth = {\n\ta: test_types_First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type test_types_Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type test_types_Generic2<A, B, C> = A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][];\n\nexport type test_types_GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type test_types_GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type test_types_GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type test_types_GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type test_types_GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type test_types_GenericFlattened<T> = {\n\tgeneric_flattened: T,\n};\n\nexport type test_types_GenericNewType1<T> = T[][];\n\nexport type test_types_GenericParameterOrderPreserved = {\n\tpair: test_types_Pair<number, string>,\n};\n\nexport type test_types_GenericStruct<T> = {\n\targ: T,\n};\n\nexport type test_types_GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type test_types_GenericTuple<T> = [T, T[], T[][]];\n\nexport type test_types_GenericTupleStruct<T> = T;\n\nexport type test_types_GenericType<T> = \"Undefined\" | T;\n\nexport type test_types_HasGenericAlias = { [key in number]: string };\n\nexport type test_types_InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type test_types_InlineEnumField = {\n\ta: string,\n};\n\nexport type test_types_InlineFlattenGenerics = {\n\tg: test_types_InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n\tt: test_types_InlineFlattenGenericsG<string>,\n};\n\nexport type test_types_InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type test_types_InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type test_types_InlineRecursiveConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number, number],\n\te: test_types_InlineRecursiveConstGeneric,\n};\n\nexport type test_types_InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: test_types_InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: test_types_InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type test_types_InlineStruct = {\n\tref_struct: test_types_SimpleStruct,\n\tval: number,\n};\n\nexport type test_types_InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type test_types_InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type test_types_InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: test_types_SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: test_types_RefStruct,\n};\n\nexport type test_types_Inner = {\n\ta: number,\n\tb: test_types_FlattenedInner,\n};\n\nexport type test_types_InternallyTaggedD = { [key in string]: string };\n\nexport type test_types_InternallyTaggedE = null;\n\nexport type test_types_InternallyTaggedF = test_types_InternallyTaggedFInner;\n\nexport type test_types_InternallyTaggedFInner = null;\n\nexport type test_types_InternallyTaggedH = test_types_InternallyTaggedHInner;\n\nexport type test_types_InternallyTaggedHInner = null;\n\nexport type test_types_InternallyTaggedL = \"A\" | \"B\";\n\nexport type test_types_InternallyTaggedLInner = \"A\" | \"B\";\n\nexport type test_types_InternallyTaggedM = \"A\" | \"B\";\n\nexport type test_types_InternallyTaggedMInner = \"A\" | \"B\";\n\nexport type test_types_InternallyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type test_types_InvalidToValidType = {\n\tcause: null,\n};\n\nexport type test_types_Issue221External = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type test_types_Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type test_types_Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type test_types_Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nexport type test_types_KebabCase = {\n\ttest_ing: string,\n};\n\nexport type test_types_LifetimeGenericEnum<T> = T;\n\nexport type test_types_LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type test_types_LoadProjectEvent = ({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number };\n\nexport type test_types_MacroEnum = string | { demo2: string };\n\nexport type test_types_MacroStruct = string;\n\nexport type test_types_MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type test_types_MaybeValidKey<T> = T;\n\nexport type test_types_MyEmptyInput = Record<string, never>;\n\nexport type test_types_MyEnum = string | number;\n\nexport type test_types_MyEnumAdjacent = { inner: test_types_First };\n\nexport type test_types_MyEnumExternal = { inner: test_types_First };\n\nexport type test_types_MyEnumTagged = { inner: test_types_First };\n\nexport type test_types_MyEnumUntagged = { inner: test_types_First };\n\nexport type test_types_NamedConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type test_types_NamedConstGenericContainer = {\n\ta: test_types_NamedConstGeneric,\n\tb: test_types_NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type test_types_NestedEnum = string | number;\n\nexport type test_types_Ninth = string | \"B\" | {\n\ta: string,\n} | test_types_First;\n\nexport type test_types_NonOptional = string | null;\n\nexport type test_types_OptionalInEnum = string | null | { a: string | null } | { a?: string | null };\n\nexport type test_types_OptionalOnNamedField = string | null;\n\nexport type test_types_OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type test_types_OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type test_types_Pair<Z, A> = {\n\tfirst: Z,\n\tsecond: A,\n};\n\nexport type test_types_PlaceholderInnerField = {\n\ta: string,\n};\n\nexport type tests_tests_types_Primitives = {\n\ti8: number,\n\ti16: number,\n\ti32: number,\n\tu8: number,\n\tu16: number,\n\tu32: number,\n\tf32: number,\n\tf64: number,\n\tbool: boolean,\n\tchar: string,\n\t\"Range<i32>\": std_ops_Range<number>,\n\t\"RangeInclusive<i32>\": std_ops_RangeInclusive<number>,\n\t\"()\": null,\n\t\"(String, i32)\": [string, number],\n\t\"(String, i32, bool)\": [string, number, boolean],\n\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\tString: string,\n\tPathBuf: string,\n\tIpAddr: string,\n\tIpv4Addr: string,\n\tIpv6Addr: string,\n\tSocketAddr: string,\n\tSocketAddrV4: string,\n\tSocketAddrV6: string,\n\t\"Cow<'static, str>\": string,\n\t\"Cow<'static, i32>\": number,\n\t\"&'static str\": string,\n\t\"&'static bool\": boolean,\n\t\"&'static i32\": number,\n\t\"Vec<i32>\": number[],\n\t\"&'static [i32]\": number[],\n\t\"&'static [i32; 3]\": [number, number, number],\n\t\"[i32; 3]\": [number, number, number],\n\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\t\"&'static [MyEnum]\": test_types_MyEnum[],\n\t\"&'static [MyEnum; 6]\": [test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum],\n\t\"[MyEnum; 2]\": [test_types_MyEnum, test_types_MyEnum],\n\t\"&'static [i32; 1]\": [number],\n\t\"&'static [i32; 0]\": [],\n\t\"Option<i32>\": number | null,\n\t\"Option<()>\": null,\n\t\"Option<Vec<i32>>\": number[] | null,\n\t\"Result<String, i32>\": std_result_Result<string, number>,\n\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\"Option<Option<String>>\": string | null,\n\t\"Option<Option<Option<String>>>\": string | null,\n\t\"PhantomData<()>\": null,\n\t\"PhantomData<String>\": null,\n\tInfallible: never,\n\tUnit1: test_types_Unit1,\n\tUnit2: test_types_Unit2,\n\tUnit3: test_types_Unit3,\n\tUnit4: test_types_Unit4,\n\tUnit5: test_types_Unit5,\n\tUnit6: test_types_Unit6,\n\tUnit7: test_types_Unit7,\n\tSimpleStruct: test_types_SimpleStruct,\n\tTupleStruct1: test_types_TupleStruct1,\n\tTupleStruct3: test_types_TupleStruct3,\n\tTestEnum: test_types_TestEnum,\n\tRefStruct: test_types_RefStruct,\n\tInlinerStruct: test_types_InlinerStruct,\n\t\"GenericStruct<i32>\": test_types_GenericStruct<number>,\n\t\"GenericStruct<String>\": test_types_GenericStruct<string>,\n\tFlattenEnumStruct: test_types_FlattenEnumStruct,\n\tOverridenStruct: test_types_OverridenStruct,\n\tHasGenericAlias: test_types_HasGenericAlias,\n\tEnumMacroAttributes: test_types_EnumMacroAttributes,\n\tInlineEnumField: test_types_InlineEnumField,\n\tInlineOptionalType: test_types_InlineOptionalType,\n\tRename: test_types_Rename,\n\tTransparentType: test_types_TransparentType,\n\tTransparentType2: test_types_TransparentType2,\n\tTransparentTypeWithOverride: test_types_TransparentTypeWithOverride,\n\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test_types_BasicEnum]: null }>,\n\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test_types_BasicEnum]: number }>,\n\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\"Vec<PlaceholderInnerField>\": test_types_PlaceholderInnerField[],\n\tEnumReferenceRecordKey: test_types_EnumReferenceRecordKey,\n\tFlattenOnNestedEnum: test_types_FlattenOnNestedEnum,\n\tMyEmptyInput: test_types_MyEmptyInput,\n\t\"(String)\": string,\n\t\"(String,)\": [string],\n\tExtraBracketsInTupleVariant: test_types_ExtraBracketsInTupleVariant,\n\tExtraBracketsInUnnamedStruct: test_types_ExtraBracketsInUnnamedStruct,\n\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\tInlineTuple: test_types_InlineTuple,\n\tInlineTuple2: test_types_InlineTuple2,\n\t\"Box<str>\": string,\n\t\"Box<String>\": string,\n\tSkippedFieldWithinVariant: test_types_SkippedFieldWithinVariant,\n\tKebabCase: test_types_KebabCase,\n\t\"&[&str]\": string[],\n\t\"Issue281<'_>\": test_types_Issue281,\n\t\"LifetimeGenericStruct<'_, i32>\": test_types_LifetimeGenericStruct<number>,\n\t\"LifetimeGenericEnum<'_, i32>\": test_types_LifetimeGenericEnum<number>,\n\tRenameWithWeirdCharsField: test_types_RenameWithWeirdCharsField,\n\tRenameWithWeirdCharsVariant: test_types_RenameWithWeirdCharsVariant,\n\tRenamedFieldKeys: test_types_RenamedFieldKeys,\n\tRenamedVariantWithSkippedPayload: test_types_RenamedVariantWithSkippedPayload,\n\t\"type_type::Type\": test_types_type_type_Type,\n\tActualType: test_types_ActualType,\n\tSpectaTypeOverride: test_types_SpectaTypeOverride,\n\tContainerTypeOverrideStruct: test_types_ContainerTypeOverrideStruct,\n\tContainerTypeOverrideEnum: test_types_ContainerTypeOverrideEnum,\n\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test_types_ContainerTypeOverrideGeneric,\n\t\"ContainerTypeOverrideToGeneric<i32>\": test_types_ContainerTypeOverrideToGeneric<number>,\n\tContainerTypeOverrideTuple: test_types_ContainerTypeOverrideTuple,\n\t\"ContainerTypeOverrideTupleGeneric<i32>\": test_types_ContainerTypeOverrideTupleGeneric<number>,\n\tInvalidToValidType: test_types_InvalidToValidType,\n\tTupleStruct: test_types_TupleStruct,\n\tTupleStructWithRep: test_types_TupleStructWithRep,\n\t\"GenericTupleStruct<String>\": test_types_GenericTupleStruct<string>,\n\tBracedStruct: test_types_BracedStruct,\n\tStruct: test_types_Struct,\n\tStruct2: test_types_Struct2,\n\tEnum: test_types_Enum,\n\tEnum2: test_types_Enum2,\n\tEnum3: test_types_Enum3,\n\tStructRenameAllUppercase: test_types_StructRenameAllUppercase,\n\tRenameSerdeSpecialChar: test_types_RenameSerdeSpecialChar,\n\tEnumRenameAllUppercase: test_types_EnumRenameAllUppercase,\n\tRecursive: test_types_Recursive,\n\tRecursiveMapValue: test_types_RecursiveMapValue,\n\tRecursiveTransparent: test_types_RecursiveTransparent,\n\tRecursiveInEnum: test_types_RecursiveInEnum,\n\tNonOptional: test_types_NonOptional,\n\tOptionalOnNamedField: test_types_OptionalOnNamedField,\n\tOptionalOnTransparentNamedField: test_types_OptionalOnTransparentNamedField,\n\tOptionalInEnum: test_types_OptionalInEnum,\n\tUntaggedVariants: test_types_UntaggedVariants,\n\tUntaggedVariantsWithoutValue: test_types_UntaggedVariantsWithoutValue,\n\tUntaggedVariantsWithDuplicateBranches: test_types_UntaggedVariantsWithDuplicateBranches,\n\t\"HashMap<String, ()>\": { [key in string]: null },\n\tRegular: test_types_Regular,\n\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\"HashMap<TransparentStruct, ()>\": { [key in test_types_TransparentStruct]: null },\n\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test_types_UnitVariants]: null }>,\n\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test_types_UntaggedVariantsKey]: null }>,\n\tValidMaybeValidKey: test_types_ValidMaybeValidKey,\n\tValidMaybeValidKeyNested: test_types_ValidMaybeValidKeyNested,\n\tMacroStruct: test_types_MacroStruct,\n\tMacroStruct2: test_types_MacroStruct2,\n\tMacroEnum: test_types_MacroEnum,\n\tDeprecatedType: test_types_DeprecatedType,\n\tDeprecatedTypeWithMsg: test_types_DeprecatedTypeWithMsg,\n\tDeprecatedTypeWithMsg2: test_types_DeprecatedTypeWithMsg2,\n\tDeprecatedFields: test_types_DeprecatedFields,\n\tDeprecatedTupleVariant: test_types_DeprecatedTupleVariant,\n\tDeprecatedEnumVariants: test_types_DeprecatedEnumVariants,\n\tCommentedStruct: test_types_CommentedStruct,\n\tCommentedEnum: test_types_CommentedEnum,\n\tSingleLineComment: test_types_SingleLineComment,\n\tNonGeneric: test_types_Demo<number, boolean>,\n\t\"HalfGenericA<u8>\": test_types_Demo<number, boolean>,\n\t\"HalfGenericB<bool>\": test_types_Demo<number, boolean>,\n\t\"FullGeneric<u8, bool>\": test_types_Demo<number, boolean>,\n\t\"Another<bool>\": test_types_Demo<number, boolean>,\n\t\"MapA<u32>\": { [key in string]: number },\n\t\"MapB<u32>\": { [key in number]: string },\n\t\"MapC<u32>\": { [key in string]: test_types_AGenericStruct<number> },\n\t\"AGenericStruct<u32>\": test_types_AGenericStruct<number>,\n\tA: test_types_A,\n\tDoubleFlattened: test_types_DoubleFlattened,\n\tFlattenedInner: test_types_FlattenedInner,\n\tBoxFlattened: test_types_BoxFlattened,\n\tBoxInline: test_types_BoxInline,\n\tFirst: test_types_First,\n\tSecond: test_types_Second,\n\tThird: test_types_Third,\n\tFourth: test_types_Fourth,\n\tTagOnStructWithInline: test_types_TagOnStructWithInline,\n\tSixth: test_types_Sixth,\n\tSeventh: test_types_Seventh,\n\tEight: test_types_Eight,\n\tNinth: test_types_Ninth,\n\tTenth: test_types_Tenth,\n\tMyEnumTagged: test_types_MyEnumTagged,\n\tMyEnumExternal: test_types_MyEnumExternal,\n\tMyEnumAdjacent: test_types_MyEnumAdjacent,\n\tMyEnumUntagged: test_types_MyEnumUntagged,\n\tEmptyStruct: test_types_EmptyStruct,\n\tEmptyStructWithTag: test_types_EmptyStructWithTag,\n\tAdjacentlyTagged: test_types_AdjacentlyTagged,\n\tLoadProjectEvent: test_types_LoadProjectEvent,\n\tExternallyTagged: test_types_ExternallyTagged,\n\tIssue221External: test_types_Issue221External,\n\tInternallyTaggedD: test_types_InternallyTaggedD,\n\tInternallyTaggedE: test_types_InternallyTaggedE,\n\tInternallyTaggedF: test_types_InternallyTaggedF,\n\tInternallyTaggedH: test_types_InternallyTaggedH,\n\tInternallyTaggedL: test_types_InternallyTaggedL,\n\tInternallyTaggedM: test_types_InternallyTaggedM,\n\tStructWithAlias: test_types_StructWithAlias,\n\tStructWithMultipleAliases: test_types_StructWithMultipleAliases,\n\tStructWithAliasAndRename: test_types_StructWithAliasAndRename,\n\tEnumWithVariantAlias: test_types_EnumWithVariantAlias,\n\tEnumWithMultipleVariantAliases: test_types_EnumWithMultipleVariantAliases,\n\tEnumWithVariantAliasAndRename: test_types_EnumWithVariantAliasAndRename,\n\tInternallyTaggedWithAlias: test_types_InternallyTaggedWithAlias,\n\tAdjacentlyTaggedWithAlias: test_types_AdjacentlyTaggedWithAlias,\n\tUntaggedWithAlias: test_types_UntaggedWithAlias,\n\tIssue221UntaggedSafe: test_types_Issue221UntaggedSafe,\n\tIssue221UntaggedMixed: test_types_Issue221UntaggedMixed,\n\tEmptyEnum: test_types_EmptyEnum,\n\tEmptyEnumTagged: test_types_EmptyEnumTagged,\n\tEmptyEnumTaggedWContent: test_types_EmptyEnumTaggedWContent,\n\tEmptyEnumUntagged: test_types_EmptyEnumUntagged,\n\tSkipOnlyField: test_types_SkipOnlyField,\n\tSkipField: test_types_SkipField,\n\tSkipVariant: test_types_SkipVariant,\n\tSkipUnnamedFieldInVariant: test_types_SkipUnnamedFieldInVariant,\n\tSkipNamedFieldInVariant: test_types_SkipNamedFieldInVariant,\n\tTransparentWithSkip: test_types_TransparentWithSkip,\n\tTransparentWithSkip2: test_types_TransparentWithSkip2,\n\tTransparentWithSkip3: test_types_TransparentWithSkip3,\n\tSkipVariant2: test_types_SkipVariant2,\n\tSkipVariant3: test_types_SkipVariant3,\n\tSkipStructFields: test_types_SkipStructFields,\n\tSpectaSkipNonTypeField: test_types_SpectaSkipNonTypeField,\n\tFlattenA: test_types_FlattenA,\n\tFlattenB: test_types_FlattenB,\n\tFlattenC: test_types_FlattenC,\n\tFlattenD: test_types_FlattenD,\n\tFlattenE: test_types_FlattenE,\n\tFlattenF: test_types_FlattenF,\n\tFlattenG: test_types_FlattenG,\n\tTupleNested: test_types_TupleNested,\n\t\"Generic1<()>\": test_types_Generic1<null>,\n\t\"GenericAutoBound<()>\": test_types_GenericAutoBound<null>,\n\t\"GenericAutoBound2<()>\": test_types_GenericAutoBound2<null>,\n\tContainer1: test_types_Container1,\n\t\"Generic2<(), String, i32>\": test_types_Generic2<null, string, number>,\n\t\"GenericNewType1<()>\": test_types_GenericNewType1<null>,\n\t\"GenericTuple<()>\": test_types_GenericTuple<null>,\n\t\"GenericStruct2<()>\": test_types_GenericStruct2<null>,\n\t\"InlineGenericNewtype<String>\": string,\n\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }],\n\t\"InlineFlattenGenericsG<()>\": test_types_InlineFlattenGenericsG<null>,\n\tInlineFlattenGenerics: test_types_InlineFlattenGenerics,\n\tGenericDefault: test_types_GenericDefault,\n\tChainedGenericDefault: test_types_ChainedGenericDefault,\n\t\"ChainedGenericDefault<String, String>\": test_types_ChainedGenericDefault,\n\t\"ChainedGenericDefault<i32>\": test_types_ChainedGenericDefault<number, number>,\n\t\"ChainedGenericDefault<String, i32>\": test_types_ChainedGenericDefault<string, number>,\n\tGenericDefaultSkipped: test_types_GenericDefaultSkipped<string>,\n\tGenericDefaultSkippedNonType: test_types_GenericDefaultSkippedNonType<unknown>,\n\tGenericParameterOrderPreserved: test_types_GenericParameterOrderPreserved,\n\tConstGenericInNonConstContainer: test_types_ConstGenericInNonConstContainer,\n\tConstGenericInConstContainer: test_types_ConstGenericInConstContainer,\n\tNamedConstGenericContainer: test_types_NamedConstGenericContainer,\n\tInlineConstGenericContainer: test_types_InlineConstGenericContainer,\n\tInlineRecursiveConstGenericContainer: test_types_InlineRecursiveConstGenericContainer,\n\tTestCollectionRegister: test_types_TestCollectionRegister,\n\tTestCollectionRegister: test_types_TestCollectionRegister,\n};\n\nexport type std_ops_Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type std_ops_RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type test_types_Recursive = {\n\tdemo: test_types_Recursive,\n};\n\nexport type test_types_RecursiveInEnum = { demo: test_types_RecursiveInEnum };\n\nexport type test_types_RecursiveInline = {\n\tdemo: test_types_RecursiveInline,\n};\n\nexport type test_types_RecursiveMapValue = {\n\tdemo: { [key in string]: test_types_RecursiveMapValue },\n};\n\nexport type test_types_RecursiveTransparent = test_types_RecursiveInline;\n\nexport type test_types_RefStruct = test_types_TestEnum;\n\nexport type test_types_Regular = { [key in string]: null };\n\nexport type test_types_Rename = \"OneWord\" | \"TwoWords\";\n\nexport type test_types_RenameSerdeSpecialChar = {\n\tb: number,\n};\n\nexport type test_types_RenameWithWeirdCharsField = {\n\todata_context: string,\n};\n\nexport type test_types_RenameWithWeirdCharsVariant = string;\n\nexport type test_types_RenamedFieldKeys = {\n\tempty: string,\n\tquote: string,\n\tbackslash: string,\n\tnewline: string,\n\tline_separator: string,\n\tparagraph_separator: string,\n};\n\nexport type test_types_RenamedVariantWithSkippedPayload = never;\n\nexport type std_result_Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type test_types_Second = {\n\ta: number,\n};\n\nexport type test_types_Seventh = {\n\ta: test_types_First,\n\tb: test_types_Second,\n};\n\nexport type test_types_SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\n/**  Some single-line comment */\nexport type test_types_SingleLineComment = \n/**  Some single-line comment */\nnumber | \n/**  Some single-line comment */\n{ \n/**  Some single-line comment */\na: number };\n\nexport type test_types_Sixth = {\n\ta: test_types_First,\n\tb: test_types_First,\n};\n\nexport type test_types_SkipField = {\n\tb: number,\n};\n\nexport type test_types_SkipNamedFieldInVariant = Record<string, never> | { b: number };\n\nexport type test_types_SkipOnlyField = Record<string, never>;\n\nexport type test_types_SkipStructFields = {\n\ta: number,\n};\n\nexport type test_types_SkipUnnamedFieldInVariant = never | [number];\n\nexport type test_types_SkipVariant = string;\n\nexport type test_types_SkipVariant2 = string;\n\nexport type test_types_SkipVariant3 = { a: string };\n\nexport type test_types_SkippedFieldWithinVariant = never | string;\n\nexport type test_types_SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type test_types_SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type test_types_Struct = {\n\ta: string,\n};\n\nexport type test_types_Struct2 = {\n\ta: string,\n};\n\nexport type test_types_StructRenameAllUppercase = {\n\ta: number,\n\tb: number,\n};\n\nexport type test_types_StructWithAlias = {\n\tfield: string,\n};\n\nexport type test_types_StructWithAliasAndRename = {\n\tfield: string,\n};\n\nexport type test_types_StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type test_types_TagOnStructWithInline = {\n\ta: test_types_First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type test_types_Tenth = string | \"B\" | {\n\ta: string,\n} | test_types_First;\n\nexport type test_types_TestCollectionRegister = never;\n\nexport type test_types_TestEnum = \"Unit\" | number | [number, number] | { a: number };\n\nexport type test_types_Third = {\n\ta: test_types_First,\n\tb: { [key in string]: string },\n\tc: test_types_First,\n};\n\nexport type test_types_ToBeFlattened = {\n\ta: string,\n};\n\nexport type test_types_TransparentStruct = string;\n\nexport type test_types_TransparentType = test_types_TransparentTypeInner;\n\nexport type test_types_TransparentType2 = null;\n\nexport type test_types_TransparentTypeInner = {\n\tinner: string,\n};\n\nexport type test_types_TransparentTypeWithOverride = string;\n\nexport type test_types_TransparentWithSkip = null;\n\nexport type test_types_TransparentWithSkip2 = string;\n\nexport type test_types_TransparentWithSkip3 = string;\n\nexport type test_types_TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type test_types_TupleStruct = string;\n\nexport type test_types_TupleStruct1 = number;\n\nexport type test_types_TupleStruct3 = [number, boolean, string];\n\nexport type test_types_TupleStructWithRep = string;\n\nexport type test_types_type_type_Type = never;\n\nexport type test_types_Unit1 = null;\n\nexport type test_types_Unit2 = Record<string, never>;\n\nexport type test_types_Unit3 = [];\n\nexport type test_types_Unit4 = null;\n\nexport type test_types_Unit5 = \"A\";\n\nexport type test_types_Unit6 = [];\n\nexport type test_types_Unit7 = Record<string, never>;\n\nexport type test_types_UnitVariants = \"A\" | \"B\" | \"C\";\n\nexport type test_types_UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type test_types_UntaggedVariantsKey = string | number;\n\nexport type test_types_UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type test_types_UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type test_types_UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type test_types_ValidMaybeValidKey = { [key in test_types_MaybeValidKey<string>]: null };\n\nexport type test_types_ValidMaybeValidKeyNested = { [key in test_types_MaybeValidKey<test_types_MaybeValidKey<string>>]: null };\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-moduleprefixedname-serde.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nts-export-to-moduleprefixedname-serde (32085 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\nexport type test_types_A = {\n\ta: test_types_B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: test_types_B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type test_types_AGenericStruct<T> = {\n\tfield: test_types_Demo<T, boolean>,\n};\n\nexport type test_types_ActualType = {\n\ta: test_types_GenericType<string>,\n};\n\nexport type test_types_AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nexport type test_types_AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nexport type test_types_B = {\n\tb: number,\n};\n\nexport type test_types_BasicEnum = \"A\" | \"B\";\n\nexport type test_types_BoxFlattened = test_types_BoxedInner;\n\nexport type test_types_BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type test_types_BoxedInner = {\n\ta: number,\n};\n\nexport type test_types_BracedStruct = string;\n\nexport type test_types_ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type test_types_CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type test_types_CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nexport type test_types_ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type test_types_ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type test_types_Container1 = {\n\tfoo: test_types_Generic1<number>,\n\tbar: test_types_Generic1<number>[],\n\tbaz: { [key in string]: test_types_Generic1<string> },\n};\n\nexport type test_types_ContainerTypeOverrideEnum = string;\n\nexport type test_types_ContainerTypeOverrideGeneric = string;\n\nexport type test_types_ContainerTypeOverrideStruct = string;\n\nexport type test_types_ContainerTypeOverrideToGeneric<T> = T;\n\nexport type test_types_ContainerTypeOverrideTuple = [string, number];\n\nexport type test_types_ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type test_types_D = {\n\tflattened: number,\n};\n\nexport type test_types_Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type test_types_DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nexport type test_types_DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type test_types_DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\n/**\n * @deprecated\n */\nexport type test_types_DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type test_types_DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type test_types_DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type test_types_DoubleFlattened = {\n\ta: test_types_ToBeFlattened,\n\tb: test_types_ToBeFlattened,\n};\n\nexport type test_types_Eight = { A: string } | \"B\";\n\nexport type test_types_EmptyEnum = never;\n\nexport type test_types_EmptyEnumTagged = never;\n\nexport type test_types_EmptyEnumTaggedWContent = never;\n\nexport type test_types_EmptyEnumUntagged = never;\n\nexport type test_types_EmptyStruct = Record<string, never>;\n\nexport type test_types_EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nexport type test_types_Enum = { t: \"A\" } | { t: \"B\" };\n\nexport type test_types_Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nexport type test_types_Enum3 = { t: \"A\"; b: string };\n\nexport type test_types_EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nexport type test_types_EnumReferenceRecordKey = {\n\ta: Partial<{ [key in test_types_BasicEnum]: number }>,\n};\n\nexport type test_types_EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nexport type test_types_EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type test_types_EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type test_types_EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nexport type test_types_ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nexport type test_types_ExtraBracketsInTupleVariant = { A: string };\n\nexport type test_types_ExtraBracketsInUnnamedStruct = string;\n\nexport type test_types_First = {\n\ta: string,\n};\n\nexport type test_types_FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type test_types_FlattenB = {\n\tc: number,\n} & test_types_FlattenA;\n\nexport type test_types_FlattenC = {\n\tc: number,\n} & test_types_FlattenA;\n\nexport type test_types_FlattenD = {\n\ta: test_types_FlattenA,\n\tc: number,\n};\n\nexport type test_types_FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (test_types_FlattenA),\n\td: number,\n};\n\nexport type test_types_FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n\nexport type test_types_FlattenEnumStruct = {\n\touter: string,\n} & test_types_FlattenEnum;\n\nexport type test_types_FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (test_types_FlattenA),\n\td: number,\n};\n\nexport type test_types_FlattenG = {\n\tb: test_types_FlattenB,\n\td: number,\n};\n\nexport type test_types_FlattenOnNestedEnum = {\n\tid: string,\n} & test_types_NestedEnum;\n\nexport type test_types_FlattenedInner = test_types_Inner;\n\nexport type test_types_Fourth = {\n\ta: test_types_First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type test_types_Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type test_types_Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nexport type test_types_GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type test_types_GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type test_types_GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type test_types_GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type test_types_GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type test_types_GenericFlattened<T> = {\n\tgeneric_flattened: T,\n};\n\nexport type test_types_GenericNewType1<T> = T[][];\n\nexport type test_types_GenericParameterOrderPreserved = {\n\tpair: test_types_Pair<number, string>,\n};\n\nexport type test_types_GenericStruct<T> = {\n\targ: T,\n};\n\nexport type test_types_GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type test_types_GenericTuple<T> = [T, T[], T[][]];\n\nexport type test_types_GenericTupleStruct<T> = T;\n\nexport type test_types_GenericType<T> = \"Undefined\" | T;\n\nexport type test_types_HasGenericAlias = { [key in number]: string };\n\nexport type test_types_InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type test_types_InlineEnumField = { A: {\n\ta: string,\n} };\n\nexport type test_types_InlineFlattenGenerics = {\n\tg: test_types_InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & test_types_InlineFlattenGenericsG<string>;\n\nexport type test_types_InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type test_types_InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type test_types_InlineRecursiveConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number, number],\n\te: test_types_InlineRecursiveConstGeneric,\n};\n\nexport type test_types_InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: test_types_InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: test_types_InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type test_types_InlineStruct = {\n\tref_struct: test_types_SimpleStruct,\n\tval: number,\n};\n\nexport type test_types_InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type test_types_InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type test_types_InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: test_types_SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: test_types_RefStruct,\n};\n\nexport type test_types_Inner = {\n\ta: number,\n} & test_types_FlattenedInner;\n\nexport type test_types_InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nexport type test_types_InternallyTaggedE = { type: \"A\" };\n\nexport type test_types_InternallyTaggedF = { type: \"A\" };\n\nexport type test_types_InternallyTaggedFInner = null;\n\nexport type test_types_InternallyTaggedH = { type: \"A\" };\n\nexport type test_types_InternallyTaggedHInner = null;\n\nexport type test_types_InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nexport type test_types_InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n\nexport type test_types_InternallyTaggedM = { type: \"A\" };\n\nexport type test_types_InternallyTaggedMInner = \"A\" | \"B\";\n\nexport type test_types_InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nexport type test_types_InvalidToValidType = {\n\tcause: null,\n};\n\nexport type test_types_Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nexport type test_types_Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type test_types_Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type test_types_Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\nexport type test_types_KebabCase = {\n\t\"test-ing\": string,\n};\n\nexport type test_types_LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nexport type test_types_LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type test_types_LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nexport type test_types_MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\nexport type test_types_MacroStruct = string;\n\nexport type test_types_MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type test_types_MaybeValidKey<T> = T;\n\nexport type test_types_MyEmptyInput = Record<string, never>;\n\nexport type test_types_MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n\nexport type test_types_MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: test_types_First,\n} };\n\nexport type test_types_MyEnumExternal = { Variant: {\n\tinner: test_types_First,\n} };\n\nexport type test_types_MyEnumTagged = { type: \"Variant\"; inner: test_types_First };\n\nexport type test_types_MyEnumUntagged = { inner: test_types_First };\n\nexport type test_types_NamedConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type test_types_NamedConstGenericContainer = {\n\ta: test_types_NamedConstGeneric,\n\tb: test_types_NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type test_types_NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n\nexport type test_types_Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: test_types_First };\n\nexport type test_types_NonOptional = string | null;\n\nexport type test_types_OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nexport type test_types_OptionalOnNamedField = string | null;\n\nexport type test_types_OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type test_types_OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type test_types_Pair<Z, A> = {\n\tfirst: Z,\n\tsecond: A,\n};\n\nexport type test_types_PlaceholderInnerField = {\n\ta: string,\n};\n\nexport type tests_tests_types_Primitives = {\n\ti8: number,\n\ti16: number,\n\ti32: number,\n\tu8: number,\n\tu16: number,\n\tu32: number,\n\tf32: number,\n\tf64: number,\n\tbool: boolean,\n\tchar: string,\n\t\"Range<i32>\": std_ops_Range<number>,\n\t\"RangeInclusive<i32>\": std_ops_RangeInclusive<number>,\n\t\"()\": null,\n\t\"(String, i32)\": [string, number],\n\t\"(String, i32, bool)\": [string, number, boolean],\n\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\tString: string,\n\tPathBuf: string,\n\tIpAddr: string,\n\tIpv4Addr: string,\n\tIpv6Addr: string,\n\tSocketAddr: string,\n\tSocketAddrV4: string,\n\tSocketAddrV6: string,\n\t\"Cow<'static, str>\": string,\n\t\"Cow<'static, i32>\": number,\n\t\"&'static str\": string,\n\t\"&'static bool\": boolean,\n\t\"&'static i32\": number,\n\t\"Vec<i32>\": number[],\n\t\"&'static [i32]\": number[],\n\t\"&'static [i32; 3]\": [number, number, number],\n\t\"[i32; 3]\": [number, number, number],\n\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\t\"&'static [MyEnum]\": test_types_MyEnum[],\n\t\"&'static [MyEnum; 6]\": [test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum],\n\t\"[MyEnum; 2]\": [test_types_MyEnum, test_types_MyEnum],\n\t\"&'static [i32; 1]\": [number],\n\t\"&'static [i32; 0]\": [],\n\t\"Option<i32>\": number | null,\n\t\"Option<()>\": null,\n\t\"Option<Vec<i32>>\": number[] | null,\n\t\"Result<String, i32>\": std_result_Result<string, number>,\n\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\"Option<Option<String>>\": string | null,\n\t\"Option<Option<Option<String>>>\": string | null,\n\t\"PhantomData<()>\": null,\n\t\"PhantomData<String>\": null,\n\tInfallible: never,\n\tUnit1: test_types_Unit1,\n\tUnit2: test_types_Unit2,\n\tUnit3: test_types_Unit3,\n\tUnit4: test_types_Unit4,\n\tUnit5: test_types_Unit5,\n\tUnit6: test_types_Unit6,\n\tUnit7: test_types_Unit7,\n\tSimpleStruct: test_types_SimpleStruct,\n\tTupleStruct1: test_types_TupleStruct1,\n\tTupleStruct3: test_types_TupleStruct3,\n\tTestEnum: test_types_TestEnum,\n\tRefStruct: test_types_RefStruct,\n\tInlinerStruct: test_types_InlinerStruct,\n\t\"GenericStruct<i32>\": test_types_GenericStruct<number>,\n\t\"GenericStruct<String>\": test_types_GenericStruct<string>,\n\tFlattenEnumStruct: test_types_FlattenEnumStruct,\n\tOverridenStruct: test_types_OverridenStruct,\n\tHasGenericAlias: test_types_HasGenericAlias,\n\tEnumMacroAttributes: test_types_EnumMacroAttributes,\n\tInlineEnumField: test_types_InlineEnumField,\n\tInlineOptionalType: test_types_InlineOptionalType,\n\tRename: test_types_Rename,\n\tTransparentType: test_types_TransparentType,\n\tTransparentType2: test_types_TransparentType2,\n\tTransparentTypeWithOverride: test_types_TransparentTypeWithOverride,\n\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test_types_BasicEnum]: null }>,\n\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test_types_BasicEnum]: number }>,\n\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\"Vec<PlaceholderInnerField>\": test_types_PlaceholderInnerField[],\n\tEnumReferenceRecordKey: test_types_EnumReferenceRecordKey,\n\tFlattenOnNestedEnum: test_types_FlattenOnNestedEnum,\n\tMyEmptyInput: test_types_MyEmptyInput,\n\t\"(String)\": string,\n\t\"(String,)\": [string],\n\tExtraBracketsInTupleVariant: test_types_ExtraBracketsInTupleVariant,\n\tExtraBracketsInUnnamedStruct: test_types_ExtraBracketsInUnnamedStruct,\n\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\tInlineTuple: test_types_InlineTuple,\n\tInlineTuple2: test_types_InlineTuple2,\n\t\"Box<str>\": string,\n\t\"Box<String>\": string,\n\tSkippedFieldWithinVariant: test_types_SkippedFieldWithinVariant,\n\tKebabCase: test_types_KebabCase,\n\t\"&[&str]\": string[],\n\t\"Issue281<'_>\": test_types_Issue281,\n\t\"LifetimeGenericStruct<'_, i32>\": test_types_LifetimeGenericStruct<number>,\n\t\"LifetimeGenericEnum<'_, i32>\": test_types_LifetimeGenericEnum<number>,\n\tRenameWithWeirdCharsField: test_types_RenameWithWeirdCharsField,\n\tRenameWithWeirdCharsVariant: test_types_RenameWithWeirdCharsVariant,\n\tRenamedFieldKeys: test_types_RenamedFieldKeys,\n\tRenamedVariantWithSkippedPayload: test_types_RenamedVariantWithSkippedPayload,\n\t\"type_type::Type\": test_types_type_type_Type,\n\tActualType: test_types_ActualType,\n\tSpectaTypeOverride: test_types_SpectaTypeOverride,\n\tContainerTypeOverrideStruct: test_types_ContainerTypeOverrideStruct,\n\tContainerTypeOverrideEnum: test_types_ContainerTypeOverrideEnum,\n\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test_types_ContainerTypeOverrideGeneric,\n\t\"ContainerTypeOverrideToGeneric<i32>\": test_types_ContainerTypeOverrideToGeneric<number>,\n\tContainerTypeOverrideTuple: test_types_ContainerTypeOverrideTuple,\n\t\"ContainerTypeOverrideTupleGeneric<i32>\": test_types_ContainerTypeOverrideTupleGeneric<number>,\n\tInvalidToValidType: test_types_InvalidToValidType,\n\tTupleStruct: test_types_TupleStruct,\n\tTupleStructWithRep: test_types_TupleStructWithRep,\n\t\"GenericTupleStruct<String>\": test_types_GenericTupleStruct<string>,\n\tBracedStruct: test_types_BracedStruct,\n\tStruct: test_types_StructNew,\n\tStruct2: test_types_Struct2,\n\tEnum: test_types_Enum,\n\tEnum2: test_types_Enum2,\n\tEnum3: test_types_Enum3,\n\tStructRenameAllUppercase: test_types_StructRenameAllUppercase,\n\tRenameSerdeSpecialChar: test_types_RenameSerdeSpecialChar,\n\tEnumRenameAllUppercase: test_types_EnumRenameAllUppercase,\n\tRecursive: test_types_Recursive,\n\tRecursiveMapValue: test_types_RecursiveMapValue,\n\tRecursiveTransparent: test_types_RecursiveTransparent,\n\tRecursiveInEnum: test_types_RecursiveInEnum,\n\tNonOptional: test_types_NonOptional,\n\tOptionalOnNamedField: test_types_OptionalOnNamedField,\n\tOptionalOnTransparentNamedField: test_types_OptionalOnTransparentNamedField,\n\tOptionalInEnum: test_types_OptionalInEnum,\n\tUntaggedVariants: test_types_UntaggedVariants,\n\tUntaggedVariantsWithoutValue: test_types_UntaggedVariantsWithoutValue,\n\tUntaggedVariantsWithDuplicateBranches: test_types_UntaggedVariantsWithDuplicateBranches,\n\t\"HashMap<String, ()>\": { [key in string]: null },\n\tRegular: test_types_Regular,\n\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\"HashMap<TransparentStruct, ()>\": { [key in test_types_TransparentStruct]: null },\n\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test_types_UnitVariants]: null }>,\n\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test_types_UntaggedVariantsKey]: null }>,\n\tValidMaybeValidKey: test_types_ValidMaybeValidKey,\n\tValidMaybeValidKeyNested: test_types_ValidMaybeValidKeyNested,\n\tMacroStruct: test_types_MacroStruct,\n\tMacroStruct2: test_types_MacroStruct2,\n\tMacroEnum: test_types_MacroEnum,\n\tDeprecatedType: test_types_DeprecatedType,\n\tDeprecatedTypeWithMsg: test_types_DeprecatedTypeWithMsg,\n\tDeprecatedTypeWithMsg2: test_types_DeprecatedTypeWithMsg2,\n\tDeprecatedFields: test_types_DeprecatedFields,\n\tDeprecatedTupleVariant: test_types_DeprecatedTupleVariant,\n\tDeprecatedEnumVariants: test_types_DeprecatedEnumVariants,\n\tCommentedStruct: test_types_CommentedStruct,\n\tCommentedEnum: test_types_CommentedEnum,\n\tSingleLineComment: test_types_SingleLineComment,\n\tNonGeneric: test_types_Demo<number, boolean>,\n\t\"HalfGenericA<u8>\": test_types_Demo<number, boolean>,\n\t\"HalfGenericB<bool>\": test_types_Demo<number, boolean>,\n\t\"FullGeneric<u8, bool>\": test_types_Demo<number, boolean>,\n\t\"Another<bool>\": test_types_Demo<number, boolean>,\n\t\"MapA<u32>\": { [key in string]: number },\n\t\"MapB<u32>\": { [key in number]: string },\n\t\"MapC<u32>\": { [key in string]: test_types_AGenericStruct<number> },\n\t\"AGenericStruct<u32>\": test_types_AGenericStruct<number>,\n\tA: test_types_A,\n\tDoubleFlattened: test_types_DoubleFlattened,\n\tFlattenedInner: test_types_FlattenedInner,\n\tBoxFlattened: test_types_BoxFlattened,\n\tBoxInline: test_types_BoxInline,\n\tFirst: test_types_First,\n\tSecond: test_types_Second,\n\tThird: test_types_Third,\n\tFourth: test_types_Fourth,\n\tTagOnStructWithInline: test_types_TagOnStructWithInline,\n\tSixth: test_types_Sixth,\n\tSeventh: test_types_Seventh,\n\tEight: test_types_Eight,\n\tNinth: test_types_Ninth,\n\tTenth: test_types_Tenth,\n\tMyEnumTagged: test_types_MyEnumTagged,\n\tMyEnumExternal: test_types_MyEnumExternal,\n\tMyEnumAdjacent: test_types_MyEnumAdjacent,\n\tMyEnumUntagged: test_types_MyEnumUntagged,\n\tEmptyStruct: test_types_EmptyStruct,\n\tEmptyStructWithTag: test_types_EmptyStructWithTag,\n\tAdjacentlyTagged: test_types_AdjacentlyTagged,\n\tLoadProjectEvent: test_types_LoadProjectEvent,\n\tExternallyTagged: test_types_ExternallyTagged,\n\tIssue221External: test_types_Issue221External,\n\tInternallyTaggedD: test_types_InternallyTaggedD,\n\tInternallyTaggedE: test_types_InternallyTaggedE,\n\tInternallyTaggedF: test_types_InternallyTaggedF,\n\tInternallyTaggedH: test_types_InternallyTaggedH,\n\tInternallyTaggedL: test_types_InternallyTaggedL,\n\tInternallyTaggedM: test_types_InternallyTaggedM,\n\tStructWithAlias: test_types_StructWithAlias,\n\tStructWithMultipleAliases: test_types_StructWithMultipleAliases,\n\tStructWithAliasAndRename: test_types_StructWithAliasAndRename,\n\tEnumWithVariantAlias: test_types_EnumWithVariantAlias,\n\tEnumWithMultipleVariantAliases: test_types_EnumWithMultipleVariantAliases,\n\tEnumWithVariantAliasAndRename: test_types_EnumWithVariantAliasAndRename,\n\tInternallyTaggedWithAlias: test_types_InternallyTaggedWithAlias,\n\tAdjacentlyTaggedWithAlias: test_types_AdjacentlyTaggedWithAlias,\n\tUntaggedWithAlias: test_types_UntaggedWithAlias,\n\tIssue221UntaggedSafe: test_types_Issue221UntaggedSafe,\n\tIssue221UntaggedMixed: test_types_Issue221UntaggedMixed,\n\tEmptyEnum: test_types_EmptyEnum,\n\tEmptyEnumTagged: test_types_EmptyEnumTagged,\n\tEmptyEnumTaggedWContent: test_types_EmptyEnumTaggedWContent,\n\tEmptyEnumUntagged: test_types_EmptyEnumUntagged,\n\tSkipOnlyField: test_types_SkipOnlyField,\n\tSkipField: test_types_SkipField,\n\tSkipVariant: test_types_SkipVariant,\n\tSkipUnnamedFieldInVariant: test_types_SkipUnnamedFieldInVariant,\n\tSkipNamedFieldInVariant: test_types_SkipNamedFieldInVariant,\n\tTransparentWithSkip: test_types_TransparentWithSkip,\n\tTransparentWithSkip2: test_types_TransparentWithSkip2,\n\tTransparentWithSkip3: test_types_TransparentWithSkip3,\n\tSkipVariant2: test_types_SkipVariant2,\n\tSkipVariant3: test_types_SkipVariant3,\n\tSkipStructFields: test_types_SkipStructFields,\n\tSpectaSkipNonTypeField: test_types_SpectaSkipNonTypeField,\n\tFlattenA: test_types_FlattenA,\n\tFlattenB: test_types_FlattenB,\n\tFlattenC: test_types_FlattenC,\n\tFlattenD: test_types_FlattenD,\n\tFlattenE: test_types_FlattenE,\n\tFlattenF: test_types_FlattenF,\n\tFlattenG: test_types_FlattenG,\n\tTupleNested: test_types_TupleNested,\n\t\"Generic1<()>\": test_types_Generic1<null>,\n\t\"GenericAutoBound<()>\": test_types_GenericAutoBound<null>,\n\t\"GenericAutoBound2<()>\": test_types_GenericAutoBound2<null>,\n\tContainer1: test_types_Container1,\n\t\"Generic2<(), String, i32>\": test_types_Generic2<null, string, number>,\n\t\"GenericNewType1<()>\": test_types_GenericNewType1<null>,\n\t\"GenericTuple<()>\": test_types_GenericTuple<null>,\n\t\"GenericStruct2<()>\": test_types_GenericStruct2<null>,\n\t\"InlineGenericNewtype<String>\": string,\n\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }],\n\t\"InlineFlattenGenericsG<()>\": test_types_InlineFlattenGenericsG<null>,\n\tInlineFlattenGenerics: test_types_InlineFlattenGenerics,\n\tGenericDefault: test_types_GenericDefault,\n\tChainedGenericDefault: test_types_ChainedGenericDefault,\n\t\"ChainedGenericDefault<String, String>\": test_types_ChainedGenericDefault,\n\t\"ChainedGenericDefault<i32>\": test_types_ChainedGenericDefault<number, number>,\n\t\"ChainedGenericDefault<String, i32>\": test_types_ChainedGenericDefault<string, number>,\n\tGenericDefaultSkipped: test_types_GenericDefaultSkipped<string>,\n\tGenericDefaultSkippedNonType: test_types_GenericDefaultSkippedNonType<unknown>,\n\tGenericParameterOrderPreserved: test_types_GenericParameterOrderPreserved,\n\tConstGenericInNonConstContainer: test_types_ConstGenericInNonConstContainer,\n\tConstGenericInConstContainer: test_types_ConstGenericInConstContainer,\n\tNamedConstGenericContainer: test_types_NamedConstGenericContainer,\n\tInlineConstGenericContainer: test_types_InlineConstGenericContainer,\n\tInlineRecursiveConstGenericContainer: test_types_InlineRecursiveConstGenericContainer,\n\tTestCollectionRegister: test_types_TestCollectionRegister,\n\tTestCollectionRegister: test_types_TestCollectionRegister,\n};\n\nexport type std_ops_Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type std_ops_RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type test_types_Recursive = {\n\tdemo: test_types_Recursive,\n};\n\nexport type test_types_RecursiveInEnum = { A: {\n\tdemo: test_types_RecursiveInEnum,\n} };\n\nexport type test_types_RecursiveInline = test_types_RecursiveInline;\n\nexport type test_types_RecursiveMapValue = {\n\tdemo: { [key in string]: test_types_RecursiveMapValue },\n};\n\nexport type test_types_RecursiveTransparent = test_types_RecursiveInline;\n\nexport type test_types_RefStruct = test_types_TestEnum;\n\nexport type test_types_Regular = { [key in string]: null };\n\nexport type test_types_Rename = \"OneWord\" | \"Two words\";\n\nexport type test_types_RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nexport type test_types_RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nexport type test_types_RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nexport type test_types_RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nexport type test_types_RenamedVariantWithSkippedPayload = \"a-b\";\n\nexport type std_result_Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type test_types_Second = {\n\ta: number,\n};\n\nexport type test_types_Seventh = {\n\ta: test_types_First,\n\tb: test_types_Second,\n};\n\nexport type test_types_SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\n/**  Some single-line comment */\nexport type test_types_SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nexport type test_types_Sixth = {\n\ta: test_types_First,\n\tb: test_types_First,\n};\n\nexport type test_types_SkipField = {\n\tb: number,\n};\n\nexport type test_types_SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nexport type test_types_SkipOnlyField = Record<string, never>;\n\nexport type test_types_SkipStructFields = {\n\ta: number,\n};\n\nexport type test_types_SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nexport type test_types_SkipVariant = { A: string };\n\nexport type test_types_SkipVariant2 = { tag: \"A\"; data: string };\n\nexport type test_types_SkipVariant3 = { A: {\n\ta: string,\n} };\n\nexport type test_types_SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nexport type test_types_SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type test_types_SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type test_types_Struct2 = {\n\tb: string,\n};\n\nexport type test_types_StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nexport type test_types_StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nexport type test_types_StructWithAlias = {\n\tfield: string,\n};\n\nexport type test_types_StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nexport type test_types_StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type test_types_TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: test_types_First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type test_types_Tenth = string | \"B\" | {\n\ta: string,\n} | test_types_First;\n\nexport type test_types_TestCollectionRegister = never;\n\nexport type test_types_TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nexport type test_types_Third = {\n\tb: { [key in string]: string },\n\tc: test_types_First,\n} & test_types_First;\n\nexport type test_types_ToBeFlattened = {\n\ta: string,\n};\n\nexport type test_types_TransparentStruct = string;\n\nexport type test_types_TransparentType = test_types_TransparentTypeInner;\n\nexport type test_types_TransparentType2 = null;\n\nexport type test_types_TransparentTypeInner = {\n\tinner: string,\n};\n\nexport type test_types_TransparentTypeWithOverride = string;\n\nexport type test_types_TransparentWithSkip = null;\n\nexport type test_types_TransparentWithSkip2 = string;\n\nexport type test_types_TransparentWithSkip3 = string;\n\nexport type test_types_TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type test_types_TupleStruct = string;\n\nexport type test_types_TupleStruct1 = number;\n\nexport type test_types_TupleStruct3 = [number, boolean, string];\n\nexport type test_types_TupleStructWithRep = string;\n\nexport type test_types_type_type_Type = never;\n\nexport type test_types_Unit1 = null;\n\nexport type test_types_Unit2 = Record<string, never>;\n\nexport type test_types_Unit3 = [];\n\nexport type test_types_Unit4 = null;\n\nexport type test_types_Unit5 = \"A\";\n\nexport type test_types_Unit6 = { A: null };\n\nexport type test_types_Unit7 = { A: Record<string, never> };\n\nexport type test_types_UnitVariants = \"A\" | \"B\" | \"C\";\n\nexport type test_types_UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type test_types_UntaggedVariantsKey = string | number;\n\nexport type test_types_UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type test_types_UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type test_types_UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type test_types_ValidMaybeValidKey = { [key in test_types_MaybeValidKey<string>]: null };\n\nexport type test_types_ValidMaybeValidKeyNested = { [key in test_types_MaybeValidKey<test_types_MaybeValidKey<string>>]: null };\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-moduleprefixedname-serde_phases.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nts-export-to-moduleprefixedname-serde_phases (33265 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\nexport type test_types_A = {\n\ta: test_types_B,\n\tb: {\n\t\tb: number,\n\t},\n\tc: test_types_B,\n\td: {\n\t\tflattened: number,\n\t},\n\te: {\n\t\tgeneric_flattened: number,\n\t},\n};\n\nexport type test_types_AGenericStruct<T> = {\n\tfield: test_types_Demo<T, boolean>,\n};\n\nexport type test_types_ActualType = {\n\ta: test_types_GenericType<string>,\n};\n\nexport type test_types_AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\nexport type test_types_AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\nexport type test_types_B = {\n\tb: number,\n};\n\nexport type test_types_BasicEnum = \"A\" | \"B\";\n\nexport type test_types_BoxFlattened = test_types_BoxedInner;\n\nexport type test_types_BoxInline = {\n\tc: {\n\t\ta: number,\n\t},\n};\n\nexport type test_types_BoxedInner = {\n\ta: number,\n};\n\nexport type test_types_BracedStruct = string;\n\nexport type test_types_ChainedGenericDefault<T = string, U = T> = {\n\tfirst: T,\n\tsecond: U,\n};\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type test_types_CommentedEnum = \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ A: number }) & { B?: never } | \n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n/**\n *  Some triple-slash comment\n *  Some more triple-slash comment\n */\nexport type test_types_CommentedStruct = {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n};\n\nexport type test_types_ConstGenericInConstContainer = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type test_types_ConstGenericInNonConstContainer = {\n\tdata: [number],\n\ta: [number, number],\n\td: [number, number],\n};\n\nexport type test_types_Container1 = {\n\tfoo: test_types_Generic1<number>,\n\tbar: test_types_Generic1<number>[],\n\tbaz: { [key in string]: test_types_Generic1<string> },\n};\n\nexport type test_types_ContainerTypeOverrideEnum = string;\n\nexport type test_types_ContainerTypeOverrideGeneric = string;\n\nexport type test_types_ContainerTypeOverrideStruct = string;\n\nexport type test_types_ContainerTypeOverrideToGeneric<T> = T;\n\nexport type test_types_ContainerTypeOverrideTuple = [string, number];\n\nexport type test_types_ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\nexport type test_types_D = {\n\tflattened: number,\n};\n\nexport type test_types_Demo<A, B> = {\n\ta: A,\n\tb: B,\n};\n\nexport type test_types_DeprecatedEnumVariants = \n/**\n * @deprecated\n */\n\"A\" | \n/**\n * @deprecated Nope\n */\n\"B\" | \n/**\n * @deprecated Nope\n */\n\"C\";\n\nexport type test_types_DeprecatedFields = {\n\ta: number,\n\t/**\n\t * @deprecated\n\t */\n\tb: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\tc: string,\n\t/**\n\t * @deprecated This field is cringe!\n\t */\n\td: string,\n};\n\nexport type test_types_DeprecatedTupleVariant = [\n/**\n * @deprecated\n */\nstring, \n/**\n * @deprecated Nope\n */\nstring, \n/**\n * @deprecated Nope\n */\nnumber];\n\n/**\n * @deprecated\n */\nexport type test_types_DeprecatedType = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type test_types_DeprecatedTypeWithMsg = {\n\ta: number,\n};\n\n/**\n * @deprecated Look at you big man using a deprecation message\n */\nexport type test_types_DeprecatedTypeWithMsg2 = {\n\ta: number,\n};\n\nexport type test_types_DoubleFlattened = {\n\ta: test_types_ToBeFlattened,\n\tb: test_types_ToBeFlattened,\n};\n\nexport type test_types_Eight = { A: string } | \"B\";\n\nexport type test_types_EmptyEnum = never;\n\nexport type test_types_EmptyEnumTagged = never;\n\nexport type test_types_EmptyEnumTaggedWContent = never;\n\nexport type test_types_EmptyEnumUntagged = never;\n\nexport type test_types_EmptyStruct = Record<string, never>;\n\nexport type test_types_EmptyStructWithTag = {\n\ta: \"EmptyStructWithTag\",\n};\n\nexport type test_types_Enum = { t: \"A\" } | { t: \"B\" };\n\nexport type test_types_Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\nexport type test_types_Enum3 = { t: \"A\"; b: string };\n\nexport type test_types_EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\nexport type test_types_EnumReferenceRecordKey = {\n\ta: Partial<{ [key in test_types_BasicEnum]: number }>,\n};\n\nexport type test_types_EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\nexport type test_types_EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\nexport type test_types_EnumWithVariantAlias = \"Variant\" | \"Other\";\n\nexport type test_types_EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\nexport type test_types_ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\nexport type test_types_ExtraBracketsInTupleVariant = { A: string };\n\nexport type test_types_ExtraBracketsInUnnamedStruct = string;\n\nexport type test_types_First = {\n\ta: string,\n};\n\nexport type test_types_FlattenA = {\n\ta: number,\n\tb: number,\n};\n\nexport type test_types_FlattenB = {\n\tc: number,\n} & test_types_FlattenA;\n\nexport type test_types_FlattenC = {\n\tc: number,\n} & test_types_FlattenA;\n\nexport type test_types_FlattenD = {\n\ta: test_types_FlattenA,\n\tc: number,\n};\n\nexport type test_types_FlattenE = {\n\tb: ({\n\t\tc: number,\n\t}) & (test_types_FlattenA),\n\td: number,\n};\n\nexport type test_types_FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n\nexport type test_types_FlattenEnumStruct = {\n\touter: string,\n} & test_types_FlattenEnum;\n\nexport type test_types_FlattenF = {\n\tb: ({\n\t\tc: number,\n\t}) & (test_types_FlattenA),\n\td: number,\n};\n\nexport type test_types_FlattenG = {\n\tb: test_types_FlattenB,\n\td: number,\n};\n\nexport type test_types_FlattenOnNestedEnum = {\n\tid: string,\n} & test_types_NestedEnum;\n\nexport type test_types_FlattenedInner = test_types_Inner;\n\nexport type test_types_Fourth = {\n\ta: test_types_First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type test_types_Generic1<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type test_types_Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\nexport type test_types_GenericAutoBound<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type test_types_GenericAutoBound2<T> = {\n\tvalue: T,\n\tvalues: T[],\n};\n\nexport type test_types_GenericDefault<T = string> = {\n\tvalue: T,\n};\n\nexport type test_types_GenericDefaultSkipped<T> = {\n\tvalue: T,\n};\n\nexport type test_types_GenericDefaultSkippedNonType<T> = {\n\tvalue: number,\n};\n\nexport type test_types_GenericFlattened<T> = {\n\tgeneric_flattened: T,\n};\n\nexport type test_types_GenericNewType1<T> = T[][];\n\nexport type test_types_GenericParameterOrderPreserved = {\n\tpair: test_types_Pair<number, string>,\n};\n\nexport type test_types_GenericStruct<T> = {\n\targ: T,\n};\n\nexport type test_types_GenericStruct2<T> = {\n\ta: T,\n\tb: [T, T],\n\tc: [T, [T, T]],\n\td: [T, T, T],\n\te: [([T, T]), ([T, T]), ([T, T])],\n\tf: T[],\n\tg: T[][],\n\th: ([([T, T]), ([T, T]), ([T, T])])[],\n};\n\nexport type test_types_GenericTuple<T> = [T, T[], T[][]];\n\nexport type test_types_GenericTupleStruct<T> = T;\n\nexport type test_types_GenericType<T> = \"Undefined\" | T;\n\nexport type test_types_HasGenericAlias = { [key in number]: string };\n\nexport type test_types_InlineConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t},\n\td: [number, number],\n};\n\nexport type test_types_InlineEnumField = { A: {\n\ta: string,\n} };\n\nexport type test_types_InlineFlattenGenerics = {\n\tg: test_types_InlineFlattenGenericsG<string>,\n\tgi: {\n\t\tt: string,\n\t},\n} & test_types_InlineFlattenGenericsG<string>;\n\nexport type test_types_InlineFlattenGenericsG<T> = {\n\tt: T,\n};\n\nexport type test_types_InlineOptionalType = {\n\toptional_field: {\n\ta: string,\n} | null,\n};\n\nexport type test_types_InlineRecursiveConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number, number],\n\te: test_types_InlineRecursiveConstGeneric,\n};\n\nexport type test_types_InlineRecursiveConstGenericContainer = {\n\tb: {\n\t\tdata: [number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: test_types_InlineRecursiveConstGeneric,\n\t},\n\tc: {\n\t\tdata: [number, number, number],\n\t\ta: [number, number],\n\t\td: [number, number, number],\n\t\te: test_types_InlineRecursiveConstGeneric,\n\t},\n\td: [number, number],\n};\n\nexport type test_types_InlineStruct = {\n\tref_struct: test_types_SimpleStruct,\n\tval: number,\n};\n\nexport type test_types_InlineTuple = {\n\tdemo: [string, boolean],\n};\n\nexport type test_types_InlineTuple2 = {\n\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n};\n\nexport type test_types_InlinerStruct = {\n\tinline_this: {\n\t\tref_struct: test_types_SimpleStruct,\n\t\tval: number,\n\t},\n\tdont_inline_this: test_types_RefStruct,\n};\n\nexport type test_types_Inner = {\n\ta: number,\n} & test_types_FlattenedInner;\n\nexport type test_types_InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\nexport type test_types_InternallyTaggedE = { type: \"A\" };\n\nexport type test_types_InternallyTaggedF = { type: \"A\" };\n\nexport type test_types_InternallyTaggedFInner = null;\n\nexport type test_types_InternallyTaggedH = { type: \"A\" };\n\nexport type test_types_InternallyTaggedHInner = null;\n\nexport type test_types_InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\nexport type test_types_InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n\nexport type test_types_InternallyTaggedM = { type: \"A\" };\n\nexport type test_types_InternallyTaggedMInner = \"A\" | \"B\";\n\nexport type test_types_InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\nexport type test_types_InvalidToValidType = {\n\tcause: null,\n};\n\nexport type test_types_Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\nexport type test_types_Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\nexport type test_types_Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\nexport type test_types_Issue281 = {\n\tdefault_unity_arguments: string[],\n};\n\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type test_types_Issue374 = test_types_Issue374_Serialize | test_types_Issue374_Deserialize;\n\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type test_types_Issue374_Deserialize = {\n\tfoo?: boolean,\n\tbar?: boolean,\n};\n\n/**  https://github.com/specta-rs/specta/issues/374 */\nexport type test_types_Issue374_Serialize = {\n\tfoo?: boolean,\n\tbar?: boolean,\n};\n\nexport type test_types_KebabCase = {\n\t\"test-ing\": string,\n};\n\nexport type test_types_LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\nexport type test_types_LifetimeGenericStruct<T> = {\n\tborrowed: T[],\n\towned: T[],\n};\n\nexport type test_types_LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\nexport type test_types_MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\nexport type test_types_MacroStruct = string;\n\nexport type test_types_MacroStruct2 = {\n\tdemo: string,\n};\n\nexport type test_types_MaybeValidKey<T> = T;\n\nexport type test_types_MyEmptyInput = Record<string, never>;\n\nexport type test_types_MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n\nexport type test_types_MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: test_types_First,\n} };\n\nexport type test_types_MyEnumExternal = { Variant: {\n\tinner: test_types_First,\n} };\n\nexport type test_types_MyEnumTagged = { type: \"Variant\"; inner: test_types_First };\n\nexport type test_types_MyEnumUntagged = { inner: test_types_First };\n\nexport type test_types_NamedConstGeneric = {\n\tdata: number[],\n\ta: number[],\n\td: [number, number],\n};\n\nexport type test_types_NamedConstGenericContainer = {\n\ta: test_types_NamedConstGeneric,\n\tb: test_types_NamedConstGeneric,\n\td: [number, number],\n};\n\nexport type test_types_NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n\nexport type test_types_Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: test_types_First };\n\nexport type test_types_NonOptional = string | null;\n\nexport type test_types_Optional = test_types_Optional_Serialize | test_types_Optional_Deserialize;\n\nexport type test_types_OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\nexport type test_types_OptionalOnNamedField = string | null;\n\nexport type test_types_OptionalOnTransparentNamedField = {\n\tb: string | null,\n};\n\nexport type test_types_Optional_Deserialize = {\n\ta: number | null,\n\tb?: number | null,\n\tc: string | null,\n\td?: boolean,\n};\n\nexport type test_types_Optional_Serialize = {\n\ta: number | null,\n\tb?: number | null,\n\tc?: string | null,\n\td: boolean,\n};\n\nexport type test_types_OverridenStruct = {\n\toverriden_field: string,\n};\n\nexport type test_types_Pair<Z, A> = {\n\tfirst: Z,\n\tsecond: A,\n};\n\nexport type test_types_PlaceholderInnerField = {\n\ta: string,\n};\n\nexport type tests_tests_types_Primitives = {\n\ti8: number,\n\ti16: number,\n\ti32: number,\n\tu8: number,\n\tu16: number,\n\tu32: number,\n\tf32: number,\n\tf64: number,\n\tbool: boolean,\n\tchar: string,\n\t\"Range<i32>\": std_ops_Range<number>,\n\t\"RangeInclusive<i32>\": std_ops_RangeInclusive<number>,\n\t\"()\": null,\n\t\"(String, i32)\": [string, number],\n\t\"(String, i32, bool)\": [string, number, boolean],\n\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\tString: string,\n\tPathBuf: string,\n\tIpAddr: string,\n\tIpv4Addr: string,\n\tIpv6Addr: string,\n\tSocketAddr: string,\n\tSocketAddrV4: string,\n\tSocketAddrV6: string,\n\t\"Cow<'static, str>\": string,\n\t\"Cow<'static, i32>\": number,\n\t\"&'static str\": string,\n\t\"&'static bool\": boolean,\n\t\"&'static i32\": number,\n\t\"Vec<i32>\": number[],\n\t\"&'static [i32]\": number[],\n\t\"&'static [i32; 3]\": [number, number, number],\n\t\"[i32; 3]\": [number, number, number],\n\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\t\"&'static [MyEnum]\": test_types_MyEnum[],\n\t\"&'static [MyEnum; 6]\": [test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum, test_types_MyEnum],\n\t\"[MyEnum; 2]\": [test_types_MyEnum, test_types_MyEnum],\n\t\"&'static [i32; 1]\": [number],\n\t\"&'static [i32; 0]\": [],\n\t\"Option<i32>\": number | null,\n\t\"Option<()>\": null,\n\t\"Option<Vec<i32>>\": number[] | null,\n\t\"Result<String, i32>\": std_result_Result<string, number>,\n\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\"Option<Option<String>>\": string | null,\n\t\"Option<Option<Option<String>>>\": string | null,\n\t\"PhantomData<()>\": null,\n\t\"PhantomData<String>\": null,\n\tInfallible: never,\n\tUnit1: test_types_Unit1,\n\tUnit2: test_types_Unit2,\n\tUnit3: test_types_Unit3,\n\tUnit4: test_types_Unit4,\n\tUnit5: test_types_Unit5,\n\tUnit6: test_types_Unit6,\n\tUnit7: test_types_Unit7,\n\tSimpleStruct: test_types_SimpleStruct,\n\tTupleStruct1: test_types_TupleStruct1,\n\tTupleStruct3: test_types_TupleStruct3,\n\tTestEnum: test_types_TestEnum,\n\tRefStruct: test_types_RefStruct,\n\tInlinerStruct: test_types_InlinerStruct,\n\t\"GenericStruct<i32>\": test_types_GenericStruct<number>,\n\t\"GenericStruct<String>\": test_types_GenericStruct<string>,\n\tFlattenEnumStruct: test_types_FlattenEnumStruct,\n\tOverridenStruct: test_types_OverridenStruct,\n\tHasGenericAlias: test_types_HasGenericAlias,\n\tEnumMacroAttributes: test_types_EnumMacroAttributes,\n\tInlineEnumField: test_types_InlineEnumField,\n\tInlineOptionalType: test_types_InlineOptionalType,\n\tRename: test_types_Rename,\n\tTransparentType: test_types_TransparentType,\n\tTransparentType2: test_types_TransparentType2,\n\tTransparentTypeWithOverride: test_types_TransparentTypeWithOverride,\n\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in test_types_BasicEnum]: null }>,\n\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in test_types_BasicEnum]: number }>,\n\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\"Vec<PlaceholderInnerField>\": test_types_PlaceholderInnerField[],\n\tEnumReferenceRecordKey: test_types_EnumReferenceRecordKey,\n\tFlattenOnNestedEnum: test_types_FlattenOnNestedEnum,\n\tMyEmptyInput: test_types_MyEmptyInput,\n\t\"(String)\": string,\n\t\"(String,)\": [string],\n\tExtraBracketsInTupleVariant: test_types_ExtraBracketsInTupleVariant,\n\tExtraBracketsInUnnamedStruct: test_types_ExtraBracketsInUnnamedStruct,\n\t\"Vec<MyEnum>\": test_types_MyEnum[],\n\tInlineTuple: test_types_InlineTuple,\n\tInlineTuple2: test_types_InlineTuple2,\n\t\"Box<str>\": string,\n\t\"Box<String>\": string,\n\tSkippedFieldWithinVariant: test_types_SkippedFieldWithinVariant,\n\tKebabCase: test_types_KebabCase,\n\t\"&[&str]\": string[],\n\t\"Issue281<'_>\": test_types_Issue281,\n\t\"LifetimeGenericStruct<'_, i32>\": test_types_LifetimeGenericStruct<number>,\n\t\"LifetimeGenericEnum<'_, i32>\": test_types_LifetimeGenericEnum<number>,\n\tRenameWithWeirdCharsField: test_types_RenameWithWeirdCharsField,\n\tRenameWithWeirdCharsVariant: test_types_RenameWithWeirdCharsVariant,\n\tRenamedFieldKeys: test_types_RenamedFieldKeys,\n\tRenamedVariantWithSkippedPayload: test_types_RenamedVariantWithSkippedPayload,\n\t\"type_type::Type\": test_types_type_type_Type,\n\tActualType: test_types_ActualType,\n\tSpectaTypeOverride: test_types_SpectaTypeOverride,\n\tContainerTypeOverrideStruct: test_types_ContainerTypeOverrideStruct,\n\tContainerTypeOverrideEnum: test_types_ContainerTypeOverrideEnum,\n\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": test_types_ContainerTypeOverrideGeneric,\n\t\"ContainerTypeOverrideToGeneric<i32>\": test_types_ContainerTypeOverrideToGeneric<number>,\n\tContainerTypeOverrideTuple: test_types_ContainerTypeOverrideTuple,\n\t\"ContainerTypeOverrideTupleGeneric<i32>\": test_types_ContainerTypeOverrideTupleGeneric<number>,\n\tInvalidToValidType: test_types_InvalidToValidType,\n\tTupleStruct: test_types_TupleStruct,\n\tTupleStructWithRep: test_types_TupleStructWithRep,\n\t\"GenericTupleStruct<String>\": test_types_GenericTupleStruct<string>,\n\tBracedStruct: test_types_BracedStruct,\n\tStruct: test_types_StructNew,\n\tStruct2: test_types_Struct2,\n\tEnum: test_types_Enum,\n\tEnum2: test_types_Enum2,\n\tEnum3: test_types_Enum3,\n\tStructRenameAllUppercase: test_types_StructRenameAllUppercase,\n\tRenameSerdeSpecialChar: test_types_RenameSerdeSpecialChar,\n\tEnumRenameAllUppercase: test_types_EnumRenameAllUppercase,\n\tRecursive: test_types_Recursive,\n\tRecursiveMapValue: test_types_RecursiveMapValue,\n\tRecursiveTransparent: test_types_RecursiveTransparent,\n\tRecursiveInEnum: test_types_RecursiveInEnum,\n\tNonOptional: test_types_NonOptional,\n\tOptionalOnNamedField: test_types_OptionalOnNamedField,\n\tOptionalOnTransparentNamedField: test_types_OptionalOnTransparentNamedField,\n\tOptionalInEnum: test_types_OptionalInEnum,\n\tUntaggedVariants: test_types_UntaggedVariants,\n\tUntaggedVariantsWithoutValue: test_types_UntaggedVariantsWithoutValue,\n\tUntaggedVariantsWithDuplicateBranches: test_types_UntaggedVariantsWithDuplicateBranches,\n\t\"HashMap<String, ()>\": { [key in string]: null },\n\tRegular: test_types_Regular,\n\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\"HashMap<TransparentStruct, ()>\": { [key in test_types_TransparentStruct]: null },\n\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in test_types_UnitVariants]: null }>,\n\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in test_types_UntaggedVariantsKey]: null }>,\n\tValidMaybeValidKey: test_types_ValidMaybeValidKey,\n\tValidMaybeValidKeyNested: test_types_ValidMaybeValidKeyNested,\n\tMacroStruct: test_types_MacroStruct,\n\tMacroStruct2: test_types_MacroStruct2,\n\tMacroEnum: test_types_MacroEnum,\n\tDeprecatedType: test_types_DeprecatedType,\n\tDeprecatedTypeWithMsg: test_types_DeprecatedTypeWithMsg,\n\tDeprecatedTypeWithMsg2: test_types_DeprecatedTypeWithMsg2,\n\tDeprecatedFields: test_types_DeprecatedFields,\n\tDeprecatedTupleVariant: test_types_DeprecatedTupleVariant,\n\tDeprecatedEnumVariants: test_types_DeprecatedEnumVariants,\n\tCommentedStruct: test_types_CommentedStruct,\n\tCommentedEnum: test_types_CommentedEnum,\n\tSingleLineComment: test_types_SingleLineComment,\n\tNonGeneric: test_types_Demo<number, boolean>,\n\t\"HalfGenericA<u8>\": test_types_Demo<number, boolean>,\n\t\"HalfGenericB<bool>\": test_types_Demo<number, boolean>,\n\t\"FullGeneric<u8, bool>\": test_types_Demo<number, boolean>,\n\t\"Another<bool>\": test_types_Demo<number, boolean>,\n\t\"MapA<u32>\": { [key in string]: number },\n\t\"MapB<u32>\": { [key in number]: string },\n\t\"MapC<u32>\": { [key in string]: test_types_AGenericStruct<number> },\n\t\"AGenericStruct<u32>\": test_types_AGenericStruct<number>,\n\tA: test_types_A,\n\tDoubleFlattened: test_types_DoubleFlattened,\n\tFlattenedInner: test_types_FlattenedInner,\n\tBoxFlattened: test_types_BoxFlattened,\n\tBoxInline: test_types_BoxInline,\n\tFirst: test_types_First,\n\tSecond: test_types_Second,\n\tThird: test_types_Third,\n\tFourth: test_types_Fourth,\n\tTagOnStructWithInline: test_types_TagOnStructWithInline,\n\tSixth: test_types_Sixth,\n\tSeventh: test_types_Seventh,\n\tEight: test_types_Eight,\n\tNinth: test_types_Ninth,\n\tTenth: test_types_Tenth,\n\tMyEnumTagged: test_types_MyEnumTagged,\n\tMyEnumExternal: test_types_MyEnumExternal,\n\tMyEnumAdjacent: test_types_MyEnumAdjacent,\n\tMyEnumUntagged: test_types_MyEnumUntagged,\n\tEmptyStruct: test_types_EmptyStruct,\n\tEmptyStructWithTag: test_types_EmptyStructWithTag,\n\tAdjacentlyTagged: test_types_AdjacentlyTagged,\n\tLoadProjectEvent: test_types_LoadProjectEvent,\n\tExternallyTagged: test_types_ExternallyTagged,\n\tIssue221External: test_types_Issue221External,\n\tInternallyTaggedD: test_types_InternallyTaggedD,\n\tInternallyTaggedE: test_types_InternallyTaggedE,\n\tInternallyTaggedF: test_types_InternallyTaggedF,\n\tInternallyTaggedH: test_types_InternallyTaggedH,\n\tInternallyTaggedL: test_types_InternallyTaggedL,\n\tInternallyTaggedM: test_types_InternallyTaggedM,\n\tStructWithAlias: test_types_StructWithAlias,\n\tStructWithMultipleAliases: test_types_StructWithMultipleAliases,\n\tStructWithAliasAndRename: test_types_StructWithAliasAndRename,\n\tEnumWithVariantAlias: test_types_EnumWithVariantAlias,\n\tEnumWithMultipleVariantAliases: test_types_EnumWithMultipleVariantAliases,\n\tEnumWithVariantAliasAndRename: test_types_EnumWithVariantAliasAndRename,\n\tInternallyTaggedWithAlias: test_types_InternallyTaggedWithAlias,\n\tAdjacentlyTaggedWithAlias: test_types_AdjacentlyTaggedWithAlias,\n\tUntaggedWithAlias: test_types_UntaggedWithAlias,\n\tIssue221UntaggedSafe: test_types_Issue221UntaggedSafe,\n\tIssue221UntaggedMixed: test_types_Issue221UntaggedMixed,\n\tEmptyEnum: test_types_EmptyEnum,\n\tEmptyEnumTagged: test_types_EmptyEnumTagged,\n\tEmptyEnumTaggedWContent: test_types_EmptyEnumTaggedWContent,\n\tEmptyEnumUntagged: test_types_EmptyEnumUntagged,\n\tSkipOnlyField: test_types_SkipOnlyField,\n\tSkipField: test_types_SkipField,\n\tSkipVariant: test_types_SkipVariant,\n\tSkipUnnamedFieldInVariant: test_types_SkipUnnamedFieldInVariant,\n\tSkipNamedFieldInVariant: test_types_SkipNamedFieldInVariant,\n\tTransparentWithSkip: test_types_TransparentWithSkip,\n\tTransparentWithSkip2: test_types_TransparentWithSkip2,\n\tTransparentWithSkip3: test_types_TransparentWithSkip3,\n\tSkipVariant2: test_types_SkipVariant2,\n\tSkipVariant3: test_types_SkipVariant3,\n\tSkipStructFields: test_types_SkipStructFields,\n\tSpectaSkipNonTypeField: test_types_SpectaSkipNonTypeField,\n\tFlattenA: test_types_FlattenA,\n\tFlattenB: test_types_FlattenB,\n\tFlattenC: test_types_FlattenC,\n\tFlattenD: test_types_FlattenD,\n\tFlattenE: test_types_FlattenE,\n\tFlattenF: test_types_FlattenF,\n\tFlattenG: test_types_FlattenG,\n\tTupleNested: test_types_TupleNested,\n\t\"Generic1<()>\": test_types_Generic1<null>,\n\t\"GenericAutoBound<()>\": test_types_GenericAutoBound<null>,\n\t\"GenericAutoBound2<()>\": test_types_GenericAutoBound2<null>,\n\tContainer1: test_types_Container1,\n\t\"Generic2<(), String, i32>\": test_types_Generic2<null, string, number>,\n\t\"GenericNewType1<()>\": test_types_GenericNewType1<null>,\n\t\"GenericTuple<()>\": test_types_GenericTuple<null>,\n\t\"GenericStruct2<()>\": test_types_GenericStruct2<null>,\n\t\"InlineGenericNewtype<String>\": string,\n\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }],\n\t\"InlineFlattenGenericsG<()>\": test_types_InlineFlattenGenericsG<null>,\n\tInlineFlattenGenerics: test_types_InlineFlattenGenerics,\n\tGenericDefault: test_types_GenericDefault,\n\tChainedGenericDefault: test_types_ChainedGenericDefault,\n\t\"ChainedGenericDefault<String, String>\": test_types_ChainedGenericDefault,\n\t\"ChainedGenericDefault<i32>\": test_types_ChainedGenericDefault<number, number>,\n\t\"ChainedGenericDefault<String, i32>\": test_types_ChainedGenericDefault<string, number>,\n\tGenericDefaultSkipped: test_types_GenericDefaultSkipped<string>,\n\tGenericDefaultSkippedNonType: test_types_GenericDefaultSkippedNonType<unknown>,\n\tGenericParameterOrderPreserved: test_types_GenericParameterOrderPreserved,\n\tConstGenericInNonConstContainer: test_types_ConstGenericInNonConstContainer,\n\tConstGenericInConstContainer: test_types_ConstGenericInConstContainer,\n\tNamedConstGenericContainer: test_types_NamedConstGenericContainer,\n\tInlineConstGenericContainer: test_types_InlineConstGenericContainer,\n\tInlineRecursiveConstGenericContainer: test_types_InlineRecursiveConstGenericContainer,\n\tTestCollectionRegister: test_types_TestCollectionRegister,\n\tTestCollectionRegister: test_types_TestCollectionRegister,\n};\n\nexport type std_ops_Range<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type std_ops_RangeInclusive<T> = {\n\tstart: T,\n\tend: T,\n};\n\nexport type test_types_Recursive = {\n\tdemo: test_types_Recursive,\n};\n\nexport type test_types_RecursiveInEnum = { A: {\n\tdemo: test_types_RecursiveInEnum,\n} };\n\nexport type test_types_RecursiveInline = test_types_RecursiveInline;\n\nexport type test_types_RecursiveMapValue = {\n\tdemo: { [key in string]: test_types_RecursiveMapValue },\n};\n\nexport type test_types_RecursiveTransparent = test_types_RecursiveInline;\n\nexport type test_types_RefStruct = test_types_TestEnum;\n\nexport type test_types_Regular = { [key in string]: null };\n\nexport type test_types_Rename = \"OneWord\" | \"Two words\";\n\nexport type test_types_RenameSerdeSpecialChar = {\n\t\"a/b\": number,\n};\n\nexport type test_types_RenameWithWeirdCharsField = {\n\t\"@odata.context\": string,\n};\n\nexport type test_types_RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\nexport type test_types_RenamedFieldKeys = {\n\t\"\": string,\n\t\"a\\\"b\": string,\n\t\"a\\\\b\": string,\n\t\"line\\nbreak\": string,\n\t\"line\\u2028break\": string,\n\t\"line\\u2029break\": string,\n};\n\nexport type test_types_RenamedVariantWithSkippedPayload = \"a-b\";\n\nexport type std_result_Result<T, E> = {\n\tok: T,\n\terr: E,\n};\n\nexport type test_types_Second = {\n\ta: number,\n};\n\nexport type test_types_Seventh = {\n\ta: test_types_First,\n\tb: test_types_Second,\n};\n\nexport type test_types_SimpleStruct = {\n\ta: number,\n\tb: string,\n\tc: [number, string, number],\n\td: string[],\n\te: string | null,\n};\n\n/**  Some single-line comment */\nexport type test_types_SingleLineComment = \n/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\nexport type test_types_Sixth = {\n\ta: test_types_First,\n\tb: test_types_First,\n};\n\nexport type test_types_SkipField = {\n\tb: number,\n};\n\nexport type test_types_SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\nexport type test_types_SkipOnlyField = Record<string, never>;\n\nexport type test_types_SkipStructFields = {\n\ta: number,\n};\n\nexport type test_types_SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\nexport type test_types_SkipVariant = { A: string };\n\nexport type test_types_SkipVariant2 = { tag: \"A\"; data: string };\n\nexport type test_types_SkipVariant3 = { A: {\n\ta: string,\n} };\n\nexport type test_types_SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\nexport type test_types_SpectaSkipNonTypeField = {\n\ta: number,\n};\n\nexport type test_types_SpectaTypeOverride = {\n\tstring_ident: string,\n\tu32_ident: number,\n\tpath: string,\n\ttuple: [string, number],\n};\n\nexport type test_types_Struct2 = {\n\tb: string,\n};\n\nexport type test_types_StructNew = {\n\tt: \"StructNew\",\n\ta: string,\n};\n\nexport type test_types_StructPhaseSpecificRename = test_types_StructPhaseSpecificRenameSerialize | test_types_StructPhaseSpecificRenameDeserialize;\n\nexport type test_types_StructPhaseSpecificRenameDeserialize = {\n\tkind: \"StructPhaseSpecificRenameDeserialize\",\n\tder: string,\n};\n\nexport type test_types_StructPhaseSpecificRenameSerialize = {\n\tkind: \"StructPhaseSpecificRenameSerialize\",\n\tser: string,\n};\n\nexport type test_types_StructRenameAllUppercase = {\n\tA: number,\n\tB: number,\n};\n\nexport type test_types_StructWithAlias = {\n\tfield: string,\n};\n\nexport type test_types_StructWithAliasAndRename = {\n\trenamed_field: string,\n};\n\nexport type test_types_StructWithMultipleAliases = {\n\tfield: string,\n};\n\nexport type test_types_TagOnStructWithInline = {\n\ttype: \"TagOnStructWithInline\",\n\ta: test_types_First,\n\tb: {\n\t\ta: string,\n\t},\n};\n\nexport type test_types_Tenth = string | \"B\" | {\n\ta: string,\n} | test_types_First;\n\nexport type test_types_TestCollectionRegister = never;\n\nexport type test_types_TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\nexport type test_types_Third = {\n\tb: { [key in string]: string },\n\tc: test_types_First,\n} & test_types_First;\n\nexport type test_types_ToBeFlattened = {\n\ta: string,\n};\n\nexport type test_types_TransparentStruct = string;\n\nexport type test_types_TransparentType = test_types_TransparentTypeInner;\n\nexport type test_types_TransparentType2 = null;\n\nexport type test_types_TransparentTypeInner = {\n\tinner: string,\n};\n\nexport type test_types_TransparentTypeWithOverride = string;\n\nexport type test_types_TransparentWithSkip = null;\n\nexport type test_types_TransparentWithSkip2 = string;\n\nexport type test_types_TransparentWithSkip3 = string;\n\nexport type test_types_TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\nexport type test_types_TupleStruct = string;\n\nexport type test_types_TupleStruct1 = number;\n\nexport type test_types_TupleStruct3 = [number, boolean, string];\n\nexport type test_types_TupleStructWithRep = string;\n\nexport type test_types_type_type_Type = never;\n\nexport type test_types_Unit1 = null;\n\nexport type test_types_Unit2 = Record<string, never>;\n\nexport type test_types_Unit3 = [];\n\nexport type test_types_Unit4 = null;\n\nexport type test_types_Unit5 = \"A\";\n\nexport type test_types_Unit6 = { A: null };\n\nexport type test_types_Unit7 = { A: Record<string, never> };\n\nexport type test_types_UnitVariants = \"A\" | \"B\" | \"C\";\n\nexport type test_types_UntaggedVariants = string | number | { id: string } | [string, boolean];\n\nexport type test_types_UntaggedVariantsKey = string | number;\n\nexport type test_types_UntaggedVariantsWithDuplicateBranches = null | number;\n\nexport type test_types_UntaggedVariantsWithoutValue = string | [number, string] | number;\n\nexport type test_types_UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\nexport type test_types_ValidMaybeValidKey = { [key in test_types_MaybeValidKey<string>]: null };\n\nexport type test_types_ValidMaybeValidKeyNested = { [key in test_types_MaybeValidKey<test_types_MaybeValidKey<string>>]: null };\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-namespaces-raw.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nts-export-to-namespaces-raw (31739 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n\nnamespace $s$ {\n\n\texport namespace std {\n\n\t\texport namespace ops {\n\t\t\texport type Range<T> = {\n\t\t\t\tstart: T,\n\t\t\t\tend: T,\n\t\t\t};\n\n\t\t\texport type RangeInclusive<T> = {\n\t\t\t\tstart: T,\n\t\t\t\tend: T,\n\t\t\t};\n\t\t}\n\n\t\texport namespace result {\n\t\t\texport type Result<T, E> = {\n\t\t\t\tok: T,\n\t\t\t\terr: E,\n\t\t\t};\n\t\t}\n\t}\n\n\texport namespace test {\n\n\t\texport namespace types {\n\t\t\texport type A = {\n\t\t\t\ta: $s$.test.types.B,\n\t\t\t\tb: {\n\t\t\t\t\tb: number,\n\t\t\t\t},\n\t\t\t\tc: $s$.test.types.B,\n\t\t\t\td: {\n\t\t\t\t\tflattened: number,\n\t\t\t\t},\n\t\t\t\te: {\n\t\t\t\t\tgeneric_flattened: number,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type AGenericStruct<T> = {\n\t\t\t\tfield: $s$.test.types.Demo<T, boolean>,\n\t\t\t};\n\n\t\t\texport type ActualType = {\n\t\t\t\ta: $s$.test.types.GenericType<string>,\n\t\t\t};\n\n\t\t\texport type AdjacentlyTagged = \"A\" | { id: string; method: string } | string;\n\n\t\t\texport type AdjacentlyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\n\t\t\texport type B = {\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type BasicEnum = \"A\" | \"B\";\n\n\t\t\texport type BoxFlattened = {\n\t\t\t\tb: $s$.test.types.BoxedInner,\n\t\t\t};\n\n\t\t\texport type BoxInline = {\n\t\t\t\tc: {\n\t\t\t\t\ta: number,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type BoxedInner = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type BracedStruct = string;\n\n\t\t\texport type ChainedGenericDefault<T = string, U = T> = {\n\t\t\t\tfirst: T,\n\t\t\t\tsecond: U,\n\t\t\t};\n\n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n\t\t\texport type CommentedEnum = \n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\nnumber | \n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n{ \n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\na: number };\n\n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n\t\t\texport type CommentedStruct = {\n\t\t\t\t/**\n\t\t\t\t *  Some triple-slash comment\n\t\t\t\t *  Some more triple-slash comment\n\t\t\t\t */\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type ConstGenericInConstContainer = {\n\t\t\t\tdata: number[],\n\t\t\t\ta: number[],\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type ConstGenericInNonConstContainer = {\n\t\t\t\tdata: [number],\n\t\t\t\ta: [number, number],\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type Container1 = {\n\t\t\t\tfoo: $s$.test.types.Generic1<number>,\n\t\t\t\tbar: $s$.test.types.Generic1<number>[],\n\t\t\t\tbaz: { [key in string]: $s$.test.types.Generic1<string> },\n\t\t\t};\n\n\t\t\texport type ContainerTypeOverrideEnum = string;\n\n\t\t\texport type ContainerTypeOverrideGeneric = string;\n\n\t\t\texport type ContainerTypeOverrideStruct = string;\n\n\t\t\texport type ContainerTypeOverrideToGeneric<T> = T;\n\n\t\t\texport type ContainerTypeOverrideTuple = [string, number];\n\n\t\t\texport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\n\t\t\texport type D = {\n\t\t\t\tflattened: number,\n\t\t\t};\n\n\t\t\texport type Demo<A, B> = {\n\t\t\t\ta: A,\n\t\t\t\tb: B,\n\t\t\t};\n\n\t\t\texport type DeprecatedEnumVariants = \n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t */\n\"A\" | \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\n\"B\" | \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\n\"C\";\n\n\t\t\texport type DeprecatedFields = {\n\t\t\t\ta: number,\n\t\t\t\t/**\n\t\t\t\t * @deprecated\n\t\t\t\t */\n\t\t\t\tb: string,\n\t\t\t\t/**\n\t\t\t\t * @deprecated This field is cringe!\n\t\t\t\t */\n\t\t\t\tc: string,\n\t\t\t\t/**\n\t\t\t\t * @deprecated This field is cringe!\n\t\t\t\t */\n\t\t\t\td: string,\n\t\t\t};\n\n\t\t\texport type DeprecatedTupleVariant = [\n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t */\nstring, \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\nstring, \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\nnumber];\n\n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t */\n\t\t\texport type DeprecatedType = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * @deprecated Look at you big man using a deprecation message\n\t\t\t */\n\t\t\texport type DeprecatedTypeWithMsg = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * @deprecated Look at you big man using a deprecation message\n\t\t\t */\n\t\t\texport type DeprecatedTypeWithMsg2 = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type DoubleFlattened = {\n\t\t\t\ta: $s$.test.types.ToBeFlattened,\n\t\t\t\tb: $s$.test.types.ToBeFlattened,\n\t\t\t};\n\n\t\t\texport type Eight = string | \"B\";\n\n\t\t\texport type EmptyEnum = never;\n\n\t\t\texport type EmptyEnumTagged = never;\n\n\t\t\texport type EmptyEnumTaggedWContent = never;\n\n\t\t\texport type EmptyEnumUntagged = never;\n\n\t\t\texport type EmptyStruct = Record<string, never>;\n\n\t\t\texport type EmptyStructWithTag = Record<string, never>;\n\n\t\t\texport type Enum = \"A\" | \"B\";\n\n\t\t\texport type Enum2 = \"A\" | \"B\" | { enum_field: null };\n\n\t\t\texport type Enum3 = { a: string };\n\n\t\t\texport type EnumMacroAttributes = string | number | { a: string; b: number };\n\n\t\t\texport type EnumReferenceRecordKey = {\n\t\t\t\ta: Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t};\n\n\t\t\texport type EnumRenameAllUppercase = \"HelloWorld\" | \"VariantB\" | \"TestingWords\";\n\n\t\t\texport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\n\t\t\texport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\n\t\t\texport type EnumWithVariantAliasAndRename = \"Variant\" | \"Other\";\n\n\t\t\texport type ExternallyTagged = \"A\" | { id: string; method: string } | string;\n\n\t\t\texport type ExtraBracketsInTupleVariant = string;\n\n\t\t\texport type ExtraBracketsInUnnamedStruct = string;\n\n\t\t\texport type First = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type FlattenA = {\n\t\t\t\ta: number,\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type FlattenB = {\n\t\t\t\ta: $s$.test.types.FlattenA,\n\t\t\t\tc: number,\n\t\t\t};\n\n\t\t\texport type FlattenC = {\n\t\t\t\ta: $s$.test.types.FlattenA,\n\t\t\t\tc: number,\n\t\t\t};\n\n\t\t\texport type FlattenD = {\n\t\t\t\ta: $s$.test.types.FlattenA,\n\t\t\t\tc: number,\n\t\t\t};\n\n\t\t\texport type FlattenE = {\n\t\t\t\tb: {\n\t\t\t\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t\tc: number,\n\t\t\t\t},\n\t\t\t\td: number,\n\t\t\t};\n\n\t\t\texport type FlattenEnum = \"One\" | \"Two\" | \"Three\";\n\n\t\t\texport type FlattenEnumStruct = {\n\t\t\t\touter: string,\n\t\t\t\tinner: $s$.test.types.FlattenEnum,\n\t\t\t};\n\n\t\t\texport type FlattenF = {\n\t\t\t\tb: {\n\t\t\t\t\ta: $s$.test.types.FlattenA,\n\t\t\t\t\tc: number,\n\t\t\t\t},\n\t\t\t\td: number,\n\t\t\t};\n\n\t\t\texport type FlattenG = {\n\t\t\t\tb: $s$.test.types.FlattenB,\n\t\t\t\td: number,\n\t\t\t};\n\n\t\t\texport type FlattenOnNestedEnum = {\n\t\t\t\tid: string,\n\t\t\t\tresult: $s$.test.types.NestedEnum,\n\t\t\t};\n\n\t\t\texport type FlattenedInner = {\n\t\t\t\tc: $s$.test.types.Inner,\n\t\t\t};\n\n\t\t\texport type Fourth = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: {\n\t\t\t\t\ta: string,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type Generic1<T> = {\n\t\t\t\tvalue: T,\n\t\t\t\tvalues: T[],\n\t\t\t};\n\n\t\t\texport type Generic2<A, B, C> = A | [B, B, B] | C[] | A[][][] | { a: A; b: B; c: C } | number[] | number | number[][];\n\n\t\t\texport type GenericAutoBound<T> = {\n\t\t\t\tvalue: T,\n\t\t\t\tvalues: T[],\n\t\t\t};\n\n\t\t\texport type GenericAutoBound2<T> = {\n\t\t\t\tvalue: T,\n\t\t\t\tvalues: T[],\n\t\t\t};\n\n\t\t\texport type GenericDefault<T = string> = {\n\t\t\t\tvalue: T,\n\t\t\t};\n\n\t\t\texport type GenericDefaultSkipped<T> = {\n\t\t\t\tvalue: T,\n\t\t\t};\n\n\t\t\texport type GenericDefaultSkippedNonType<T> = {\n\t\t\t\tvalue: number,\n\t\t\t};\n\n\t\t\texport type GenericFlattened<T> = {\n\t\t\t\tgeneric_flattened: T,\n\t\t\t};\n\n\t\t\texport type GenericNewType1<T> = T[][];\n\n\t\t\texport type GenericParameterOrderPreserved = {\n\t\t\t\tpair: $s$.test.types.Pair<number, string>,\n\t\t\t};\n\n\t\t\texport type GenericStruct<T> = {\n\t\t\t\targ: T,\n\t\t\t};\n\n\t\t\texport type GenericStruct2<T> = {\n\t\t\t\ta: T,\n\t\t\t\tb: [T, T],\n\t\t\t\tc: [T, [T, T]],\n\t\t\t\td: [T, T, T],\n\t\t\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t\t\t\tf: T[],\n\t\t\t\tg: T[][],\n\t\t\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t\t\t};\n\n\t\t\texport type GenericTuple<T> = [T, T[], T[][]];\n\n\t\t\texport type GenericTupleStruct<T> = T;\n\n\t\t\texport type GenericType<T> = \"Undefined\" | T;\n\n\t\t\texport type HasGenericAlias = { [key in number]: string };\n\n\t\t\texport type InlineConstGenericContainer = {\n\t\t\t\tb: {\n\t\t\t\t\tdata: [number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t},\n\t\t\t\tc: {\n\t\t\t\t\tdata: [number, number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t},\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type InlineEnumField = {\n\ta: string,\n};\n\n\t\t\texport type InlineFlattenGenerics = {\n\t\t\t\tg: $s$.test.types.InlineFlattenGenericsG<string>,\n\t\t\t\tgi: {\n\t\t\t\t\tt: string,\n\t\t\t\t},\n\t\t\t\tt: $s$.test.types.InlineFlattenGenericsG<string>,\n\t\t\t};\n\n\t\t\texport type InlineFlattenGenericsG<T> = {\n\t\t\t\tt: T,\n\t\t\t};\n\n\t\t\texport type InlineOptionalType = {\n\t\t\t\toptional_field: {\n\ta: string,\n} | null,\n\t\t\t};\n\n\t\t\texport type InlineRecursiveConstGeneric = {\n\t\t\t\tdata: number[],\n\t\t\t\ta: number[],\n\t\t\t\td: [number, number, number],\n\t\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t};\n\n\t\t\texport type InlineRecursiveConstGenericContainer = {\n\t\t\t\tb: {\n\t\t\t\t\tdata: [number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t},\n\t\t\t\tc: {\n\t\t\t\t\tdata: [number, number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t},\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type InlineStruct = {\n\t\t\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\tval: number,\n\t\t\t};\n\n\t\t\texport type InlineTuple = {\n\t\t\t\tdemo: [string, boolean],\n\t\t\t};\n\n\t\t\texport type InlineTuple2 = {\n\t\t\t\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n\t\t\t};\n\n\t\t\texport type InlinerStruct = {\n\t\t\t\tinline_this: {\n\t\t\t\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t\tval: number,\n\t\t\t\t},\n\t\t\t\tdont_inline_this: $s$.test.types.RefStruct,\n\t\t\t};\n\n\t\t\texport type Inner = {\n\t\t\t\ta: number,\n\t\t\t\tb: $s$.test.types.FlattenedInner,\n\t\t\t};\n\n\t\t\texport type InternallyTaggedD = { [key in string]: string };\n\n\t\t\texport type InternallyTaggedE = null;\n\n\t\t\texport type InternallyTaggedF = $s$.test.types.InternallyTaggedFInner;\n\n\t\t\texport type InternallyTaggedFInner = null;\n\n\t\t\texport type InternallyTaggedH = $s$.test.types.InternallyTaggedHInner;\n\n\t\t\texport type InternallyTaggedHInner = null;\n\n\t\t\texport type InternallyTaggedL = \"A\" | \"B\";\n\n\t\t\texport type InternallyTaggedLInner = \"A\" | \"B\";\n\n\t\t\texport type InternallyTaggedM = \"A\" | \"B\";\n\n\t\t\texport type InternallyTaggedMInner = \"A\" | \"B\";\n\n\t\t\texport type InternallyTaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\n\t\t\texport type InvalidToValidType = {\n\t\t\t\tcause: null,\n\t\t\t};\n\n\t\t\texport type Issue221External = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\n\t\t\texport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\n\t\t\texport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\n\t\t\texport type Issue281 = {\n\t\t\t\tdefault_unity_arguments: string[],\n\t\t\t};\n\n\t\t\texport type KebabCase = {\n\t\t\t\ttest_ing: string,\n\t\t\t};\n\n\t\t\texport type LifetimeGenericEnum<T> = T;\n\n\t\t\texport type LifetimeGenericStruct<T> = {\n\t\t\t\tborrowed: T[],\n\t\t\t\towned: T[],\n\t\t\t};\n\n\t\t\texport type LoadProjectEvent = ({ project_name: string }) & { progress?: never; status?: never } | { project_name: string; status: string; progress: number };\n\n\t\t\texport type MacroEnum = string | { demo2: string };\n\n\t\t\texport type MacroStruct = string;\n\n\t\t\texport type MacroStruct2 = {\n\t\t\t\tdemo: string,\n\t\t\t};\n\n\t\t\texport type MaybeValidKey<T> = T;\n\n\t\t\texport type MyEmptyInput = Record<string, never>;\n\n\t\t\texport type MyEnum = string | number;\n\n\t\t\texport type MyEnumAdjacent = { inner: $s$.test.types.First };\n\n\t\t\texport type MyEnumExternal = { inner: $s$.test.types.First };\n\n\t\t\texport type MyEnumTagged = { inner: $s$.test.types.First };\n\n\t\t\texport type MyEnumUntagged = { inner: $s$.test.types.First };\n\n\t\t\texport type NamedConstGeneric = {\n\t\t\t\tdata: number[],\n\t\t\t\ta: number[],\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type NamedConstGenericContainer = {\n\t\t\t\ta: $s$.test.types.NamedConstGeneric,\n\t\t\t\tb: $s$.test.types.NamedConstGeneric,\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type NestedEnum = string | number;\n\n\t\t\texport type Ninth = string | \"B\" | {\n\ta: string,\n} | $s$.test.types.First;\n\n\t\t\texport type NonOptional = string | null;\n\n\t\t\texport type OptionalInEnum = string | null | { a: string | null } | { a?: string | null };\n\n\t\t\texport type OptionalOnNamedField = string | null;\n\n\t\t\texport type OptionalOnTransparentNamedField = {\n\t\t\t\tb: string | null,\n\t\t\t};\n\n\t\t\texport type OverridenStruct = {\n\t\t\t\toverriden_field: string,\n\t\t\t};\n\n\t\t\texport type Pair<Z, A> = {\n\t\t\t\tfirst: Z,\n\t\t\t\tsecond: A,\n\t\t\t};\n\n\t\t\texport type PlaceholderInnerField = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type Recursive = {\n\t\t\t\tdemo: $s$.test.types.Recursive,\n\t\t\t};\n\n\t\t\texport type RecursiveInEnum = { demo: $s$.test.types.RecursiveInEnum };\n\n\t\t\texport type RecursiveInline = {\n\t\t\t\tdemo: $s$.test.types.RecursiveInline,\n\t\t\t};\n\n\t\t\texport type RecursiveMapValue = {\n\t\t\t\tdemo: { [key in string]: $s$.test.types.RecursiveMapValue },\n\t\t\t};\n\n\t\t\texport type RecursiveTransparent = $s$.test.types.RecursiveInline;\n\n\t\t\texport type RefStruct = $s$.test.types.TestEnum;\n\n\t\t\texport type Regular = { [key in string]: null };\n\n\t\t\texport type Rename = \"OneWord\" | \"TwoWords\";\n\n\t\t\texport type RenameSerdeSpecialChar = {\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type RenameWithWeirdCharsField = {\n\t\t\t\todata_context: string,\n\t\t\t};\n\n\t\t\texport type RenameWithWeirdCharsVariant = string;\n\n\t\t\texport type RenamedFieldKeys = {\n\t\t\t\tempty: string,\n\t\t\t\tquote: string,\n\t\t\t\tbackslash: string,\n\t\t\t\tnewline: string,\n\t\t\t\tline_separator: string,\n\t\t\t\tparagraph_separator: string,\n\t\t\t};\n\n\t\t\texport type RenamedVariantWithSkippedPayload = never;\n\n\t\t\texport type Second = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type Seventh = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: $s$.test.types.Second,\n\t\t\t};\n\n\t\t\texport type SimpleStruct = {\n\t\t\t\ta: number,\n\t\t\t\tb: string,\n\t\t\t\tc: [number, string, number],\n\t\t\t\td: string[],\n\t\t\t\te: string | null,\n\t\t\t};\n\n\t\t\t/**  Some single-line comment */\n\t\t\texport type SingleLineComment = \n\t\t\t/**  Some single-line comment */\nnumber | \n\t\t\t/**  Some single-line comment */\n{ \n\t\t\t/**  Some single-line comment */\na: number };\n\n\t\t\texport type Sixth = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: $s$.test.types.First,\n\t\t\t};\n\n\t\t\texport type SkipField = {\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type SkipNamedFieldInVariant = Record<string, never> | { b: number };\n\n\t\t\texport type SkipOnlyField = Record<string, never>;\n\n\t\t\texport type SkipStructFields = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type SkipUnnamedFieldInVariant = never | [number];\n\n\t\t\texport type SkipVariant = string;\n\n\t\t\texport type SkipVariant2 = string;\n\n\t\t\texport type SkipVariant3 = { a: string };\n\n\t\t\texport type SkippedFieldWithinVariant = never | string;\n\n\t\t\texport type SpectaSkipNonTypeField = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type SpectaTypeOverride = {\n\t\t\t\tstring_ident: string,\n\t\t\t\tu32_ident: number,\n\t\t\t\tpath: string,\n\t\t\t\ttuple: [string, number],\n\t\t\t};\n\n\t\t\texport type Struct = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type Struct2 = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type StructRenameAllUppercase = {\n\t\t\t\ta: number,\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type StructWithAlias = {\n\t\t\t\tfield: string,\n\t\t\t};\n\n\t\t\texport type StructWithAliasAndRename = {\n\t\t\t\tfield: string,\n\t\t\t};\n\n\t\t\texport type StructWithMultipleAliases = {\n\t\t\t\tfield: string,\n\t\t\t};\n\n\t\t\texport type TagOnStructWithInline = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: {\n\t\t\t\t\ta: string,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type Tenth = string | \"B\" | {\n\ta: string,\n} | $s$.test.types.First;\n\n\t\t\texport type TestCollectionRegister = never;\n\n\t\t\texport type TestEnum = \"Unit\" | number | [number, number] | { a: number };\n\n\t\t\texport type Third = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: { [key in string]: string },\n\t\t\t\tc: $s$.test.types.First,\n\t\t\t};\n\n\t\t\texport type ToBeFlattened = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type TransparentStruct = string;\n\n\t\t\texport type TransparentType = $s$.test.types.TransparentTypeInner;\n\n\t\t\texport type TransparentType2 = null;\n\n\t\t\texport type TransparentTypeInner = {\n\t\t\t\tinner: string,\n\t\t\t};\n\n\t\t\texport type TransparentTypeWithOverride = string;\n\n\t\t\texport type TransparentWithSkip = null;\n\n\t\t\texport type TransparentWithSkip2 = string;\n\n\t\t\texport type TransparentWithSkip3 = string;\n\n\t\t\texport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\n\t\t\texport type TupleStruct = string;\n\n\t\t\texport type TupleStruct1 = number;\n\n\t\t\texport type TupleStruct3 = [number, boolean, string];\n\n\t\t\texport type TupleStructWithRep = string;\n\n\t\t\texport type Unit1 = null;\n\n\t\t\texport type Unit2 = Record<string, never>;\n\n\t\t\texport type Unit3 = [];\n\n\t\t\texport type Unit4 = null;\n\n\t\t\texport type Unit5 = \"A\";\n\n\t\t\texport type Unit6 = [];\n\n\t\t\texport type Unit7 = Record<string, never>;\n\n\t\t\texport type UnitVariants = \"A\" | \"B\" | \"C\";\n\n\t\t\texport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\n\t\t\texport type UntaggedVariantsKey = string | number;\n\n\t\t\texport type UntaggedVariantsWithDuplicateBranches = null | number;\n\n\t\t\texport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\n\t\t\texport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\n\t\t\texport type ValidMaybeValidKey = { [key in $s$.test.types.MaybeValidKey<string>]: null };\n\n\t\t\texport type ValidMaybeValidKeyNested = { [key in $s$.test.types.MaybeValidKey<$s$.test.types.MaybeValidKey<string>>]: null };\n\n\t\t\texport namespace type_type {\n\t\t\t\texport type Type = never;\n\t\t\t}\n\t\t}\n\t}\n\n\texport namespace tests {\n\n\t\texport namespace tests {\n\n\t\t\texport namespace types {\n\t\t\t\texport type Primitives = {\n\t\t\t\t\ti8: number,\n\t\t\t\t\ti16: number,\n\t\t\t\t\ti32: number,\n\t\t\t\t\tu8: number,\n\t\t\t\t\tu16: number,\n\t\t\t\t\tu32: number,\n\t\t\t\t\tf32: number,\n\t\t\t\t\tf64: number,\n\t\t\t\t\tbool: boolean,\n\t\t\t\t\tchar: string,\n\t\t\t\t\t\"Range<i32>\": $s$.std.ops.Range<number>,\n\t\t\t\t\t\"RangeInclusive<i32>\": $s$.std.ops.RangeInclusive<number>,\n\t\t\t\t\t\"()\": null,\n\t\t\t\t\t\"(String, i32)\": [string, number],\n\t\t\t\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t\t\t\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\t\t\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\t\t\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t\t\t\t\tString: string,\n\t\t\t\t\tPathBuf: string,\n\t\t\t\t\tIpAddr: string,\n\t\t\t\t\tIpv4Addr: string,\n\t\t\t\t\tIpv6Addr: string,\n\t\t\t\t\tSocketAddr: string,\n\t\t\t\t\tSocketAddrV4: string,\n\t\t\t\t\tSocketAddrV6: string,\n\t\t\t\t\t\"Cow<'static, str>\": string,\n\t\t\t\t\t\"Cow<'static, i32>\": number,\n\t\t\t\t\t\"&'static str\": string,\n\t\t\t\t\t\"&'static bool\": boolean,\n\t\t\t\t\t\"&'static i32\": number,\n\t\t\t\t\t\"Vec<i32>\": number[],\n\t\t\t\t\t\"&'static [i32]\": number[],\n\t\t\t\t\t\"&'static [i32; 3]\": [number, number, number],\n\t\t\t\t\t\"[i32; 3]\": [number, number, number],\n\t\t\t\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\t\"&'static [MyEnum]\": $s$.test.types.MyEnum[],\n\t\t\t\t\t\"&'static [MyEnum; 6]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t\"[MyEnum; 2]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t\"&'static [i32; 1]\": [number],\n\t\t\t\t\t\"&'static [i32; 0]\": [],\n\t\t\t\t\t\"Option<i32>\": number | null,\n\t\t\t\t\t\"Option<()>\": null,\n\t\t\t\t\t\"Option<Vec<i32>>\": number[] | null,\n\t\t\t\t\t\"Result<String, i32>\": $s$.std.result.Result<string, number>,\n\t\t\t\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\t\t\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\t\t\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\t\t\t\t\"Option<Option<String>>\": string | null,\n\t\t\t\t\t\"Option<Option<Option<String>>>\": string | null,\n\t\t\t\t\t\"PhantomData<()>\": null,\n\t\t\t\t\t\"PhantomData<String>\": null,\n\t\t\t\t\tInfallible: never,\n\t\t\t\t\tUnit1: $s$.test.types.Unit1,\n\t\t\t\t\tUnit2: $s$.test.types.Unit2,\n\t\t\t\t\tUnit3: $s$.test.types.Unit3,\n\t\t\t\t\tUnit4: $s$.test.types.Unit4,\n\t\t\t\t\tUnit5: $s$.test.types.Unit5,\n\t\t\t\t\tUnit6: $s$.test.types.Unit6,\n\t\t\t\t\tUnit7: $s$.test.types.Unit7,\n\t\t\t\t\tSimpleStruct: $s$.test.types.SimpleStruct,\n\t\t\t\t\tTupleStruct1: $s$.test.types.TupleStruct1,\n\t\t\t\t\tTupleStruct3: $s$.test.types.TupleStruct3,\n\t\t\t\t\tTestEnum: $s$.test.types.TestEnum,\n\t\t\t\t\tRefStruct: $s$.test.types.RefStruct,\n\t\t\t\t\tInlinerStruct: $s$.test.types.InlinerStruct,\n\t\t\t\t\t\"GenericStruct<i32>\": $s$.test.types.GenericStruct<number>,\n\t\t\t\t\t\"GenericStruct<String>\": $s$.test.types.GenericStruct<string>,\n\t\t\t\t\tFlattenEnumStruct: $s$.test.types.FlattenEnumStruct,\n\t\t\t\t\tOverridenStruct: $s$.test.types.OverridenStruct,\n\t\t\t\t\tHasGenericAlias: $s$.test.types.HasGenericAlias,\n\t\t\t\t\tEnumMacroAttributes: $s$.test.types.EnumMacroAttributes,\n\t\t\t\t\tInlineEnumField: $s$.test.types.InlineEnumField,\n\t\t\t\t\tInlineOptionalType: $s$.test.types.InlineOptionalType,\n\t\t\t\t\tRename: $s$.test.types.Rename,\n\t\t\t\t\tTransparentType: $s$.test.types.TransparentType,\n\t\t\t\t\tTransparentType2: $s$.test.types.TransparentType2,\n\t\t\t\t\tTransparentTypeWithOverride: $s$.test.types.TransparentTypeWithOverride,\n\t\t\t\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\t\t\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in $s$.test.types.BasicEnum]: null }>,\n\t\t\t\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\t\t\t\t\"Vec<PlaceholderInnerField>\": $s$.test.types.PlaceholderInnerField[],\n\t\t\t\t\tEnumReferenceRecordKey: $s$.test.types.EnumReferenceRecordKey,\n\t\t\t\t\tFlattenOnNestedEnum: $s$.test.types.FlattenOnNestedEnum,\n\t\t\t\t\tMyEmptyInput: $s$.test.types.MyEmptyInput,\n\t\t\t\t\t\"(String)\": string,\n\t\t\t\t\t\"(String,)\": [string],\n\t\t\t\t\tExtraBracketsInTupleVariant: $s$.test.types.ExtraBracketsInTupleVariant,\n\t\t\t\t\tExtraBracketsInUnnamedStruct: $s$.test.types.ExtraBracketsInUnnamedStruct,\n\t\t\t\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\tInlineTuple: $s$.test.types.InlineTuple,\n\t\t\t\t\tInlineTuple2: $s$.test.types.InlineTuple2,\n\t\t\t\t\t\"Box<str>\": string,\n\t\t\t\t\t\"Box<String>\": string,\n\t\t\t\t\tSkippedFieldWithinVariant: $s$.test.types.SkippedFieldWithinVariant,\n\t\t\t\t\tKebabCase: $s$.test.types.KebabCase,\n\t\t\t\t\t\"&[&str]\": string[],\n\t\t\t\t\t\"Issue281<'_>\": $s$.test.types.Issue281,\n\t\t\t\t\t\"LifetimeGenericStruct<'_, i32>\": $s$.test.types.LifetimeGenericStruct<number>,\n\t\t\t\t\t\"LifetimeGenericEnum<'_, i32>\": $s$.test.types.LifetimeGenericEnum<number>,\n\t\t\t\t\tRenameWithWeirdCharsField: $s$.test.types.RenameWithWeirdCharsField,\n\t\t\t\t\tRenameWithWeirdCharsVariant: $s$.test.types.RenameWithWeirdCharsVariant,\n\t\t\t\t\tRenamedFieldKeys: $s$.test.types.RenamedFieldKeys,\n\t\t\t\t\tRenamedVariantWithSkippedPayload: $s$.test.types.RenamedVariantWithSkippedPayload,\n\t\t\t\t\t\"type_type::Type\": $s$.test.types.type_type.Type,\n\t\t\t\t\tActualType: $s$.test.types.ActualType,\n\t\t\t\t\tSpectaTypeOverride: $s$.test.types.SpectaTypeOverride,\n\t\t\t\t\tContainerTypeOverrideStruct: $s$.test.types.ContainerTypeOverrideStruct,\n\t\t\t\t\tContainerTypeOverrideEnum: $s$.test.types.ContainerTypeOverrideEnum,\n\t\t\t\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": $s$.test.types.ContainerTypeOverrideGeneric,\n\t\t\t\t\t\"ContainerTypeOverrideToGeneric<i32>\": $s$.test.types.ContainerTypeOverrideToGeneric<number>,\n\t\t\t\t\tContainerTypeOverrideTuple: $s$.test.types.ContainerTypeOverrideTuple,\n\t\t\t\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": $s$.test.types.ContainerTypeOverrideTupleGeneric<number>,\n\t\t\t\t\tInvalidToValidType: $s$.test.types.InvalidToValidType,\n\t\t\t\t\tTupleStruct: $s$.test.types.TupleStruct,\n\t\t\t\t\tTupleStructWithRep: $s$.test.types.TupleStructWithRep,\n\t\t\t\t\t\"GenericTupleStruct<String>\": $s$.test.types.GenericTupleStruct<string>,\n\t\t\t\t\tBracedStruct: $s$.test.types.BracedStruct,\n\t\t\t\t\tStruct: $s$.test.types.Struct,\n\t\t\t\t\tStruct2: $s$.test.types.Struct2,\n\t\t\t\t\tEnum: $s$.test.types.Enum,\n\t\t\t\t\tEnum2: $s$.test.types.Enum2,\n\t\t\t\t\tEnum3: $s$.test.types.Enum3,\n\t\t\t\t\tStructRenameAllUppercase: $s$.test.types.StructRenameAllUppercase,\n\t\t\t\t\tRenameSerdeSpecialChar: $s$.test.types.RenameSerdeSpecialChar,\n\t\t\t\t\tEnumRenameAllUppercase: $s$.test.types.EnumRenameAllUppercase,\n\t\t\t\t\tRecursive: $s$.test.types.Recursive,\n\t\t\t\t\tRecursiveMapValue: $s$.test.types.RecursiveMapValue,\n\t\t\t\t\tRecursiveTransparent: $s$.test.types.RecursiveTransparent,\n\t\t\t\t\tRecursiveInEnum: $s$.test.types.RecursiveInEnum,\n\t\t\t\t\tNonOptional: $s$.test.types.NonOptional,\n\t\t\t\t\tOptionalOnNamedField: $s$.test.types.OptionalOnNamedField,\n\t\t\t\t\tOptionalOnTransparentNamedField: $s$.test.types.OptionalOnTransparentNamedField,\n\t\t\t\t\tOptionalInEnum: $s$.test.types.OptionalInEnum,\n\t\t\t\t\tUntaggedVariants: $s$.test.types.UntaggedVariants,\n\t\t\t\t\tUntaggedVariantsWithoutValue: $s$.test.types.UntaggedVariantsWithoutValue,\n\t\t\t\t\tUntaggedVariantsWithDuplicateBranches: $s$.test.types.UntaggedVariantsWithDuplicateBranches,\n\t\t\t\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t\t\t\t\tRegular: $s$.test.types.Regular,\n\t\t\t\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\t\t\t\t\"HashMap<TransparentStruct, ()>\": { [key in $s$.test.types.TransparentStruct]: null },\n\t\t\t\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in $s$.test.types.UnitVariants]: null }>,\n\t\t\t\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in $s$.test.types.UntaggedVariantsKey]: null }>,\n\t\t\t\t\tValidMaybeValidKey: $s$.test.types.ValidMaybeValidKey,\n\t\t\t\t\tValidMaybeValidKeyNested: $s$.test.types.ValidMaybeValidKeyNested,\n\t\t\t\t\tMacroStruct: $s$.test.types.MacroStruct,\n\t\t\t\t\tMacroStruct2: $s$.test.types.MacroStruct2,\n\t\t\t\t\tMacroEnum: $s$.test.types.MacroEnum,\n\t\t\t\t\tDeprecatedType: $s$.test.types.DeprecatedType,\n\t\t\t\t\tDeprecatedTypeWithMsg: $s$.test.types.DeprecatedTypeWithMsg,\n\t\t\t\t\tDeprecatedTypeWithMsg2: $s$.test.types.DeprecatedTypeWithMsg2,\n\t\t\t\t\tDeprecatedFields: $s$.test.types.DeprecatedFields,\n\t\t\t\t\tDeprecatedTupleVariant: $s$.test.types.DeprecatedTupleVariant,\n\t\t\t\t\tDeprecatedEnumVariants: $s$.test.types.DeprecatedEnumVariants,\n\t\t\t\t\tCommentedStruct: $s$.test.types.CommentedStruct,\n\t\t\t\t\tCommentedEnum: $s$.test.types.CommentedEnum,\n\t\t\t\t\tSingleLineComment: $s$.test.types.SingleLineComment,\n\t\t\t\t\tNonGeneric: $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"HalfGenericA<u8>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"HalfGenericB<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"FullGeneric<u8, bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"Another<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"MapA<u32>\": { [key in string]: number },\n\t\t\t\t\t\"MapB<u32>\": { [key in number]: string },\n\t\t\t\t\t\"MapC<u32>\": { [key in string]: $s$.test.types.AGenericStruct<number> },\n\t\t\t\t\t\"AGenericStruct<u32>\": $s$.test.types.AGenericStruct<number>,\n\t\t\t\t\tA: $s$.test.types.A,\n\t\t\t\t\tDoubleFlattened: $s$.test.types.DoubleFlattened,\n\t\t\t\t\tFlattenedInner: $s$.test.types.FlattenedInner,\n\t\t\t\t\tBoxFlattened: $s$.test.types.BoxFlattened,\n\t\t\t\t\tBoxInline: $s$.test.types.BoxInline,\n\t\t\t\t\tFirst: $s$.test.types.First,\n\t\t\t\t\tSecond: $s$.test.types.Second,\n\t\t\t\t\tThird: $s$.test.types.Third,\n\t\t\t\t\tFourth: $s$.test.types.Fourth,\n\t\t\t\t\tTagOnStructWithInline: $s$.test.types.TagOnStructWithInline,\n\t\t\t\t\tSixth: $s$.test.types.Sixth,\n\t\t\t\t\tSeventh: $s$.test.types.Seventh,\n\t\t\t\t\tEight: $s$.test.types.Eight,\n\t\t\t\t\tNinth: $s$.test.types.Ninth,\n\t\t\t\t\tTenth: $s$.test.types.Tenth,\n\t\t\t\t\tMyEnumTagged: $s$.test.types.MyEnumTagged,\n\t\t\t\t\tMyEnumExternal: $s$.test.types.MyEnumExternal,\n\t\t\t\t\tMyEnumAdjacent: $s$.test.types.MyEnumAdjacent,\n\t\t\t\t\tMyEnumUntagged: $s$.test.types.MyEnumUntagged,\n\t\t\t\t\tEmptyStruct: $s$.test.types.EmptyStruct,\n\t\t\t\t\tEmptyStructWithTag: $s$.test.types.EmptyStructWithTag,\n\t\t\t\t\tAdjacentlyTagged: $s$.test.types.AdjacentlyTagged,\n\t\t\t\t\tLoadProjectEvent: $s$.test.types.LoadProjectEvent,\n\t\t\t\t\tExternallyTagged: $s$.test.types.ExternallyTagged,\n\t\t\t\t\tIssue221External: $s$.test.types.Issue221External,\n\t\t\t\t\tInternallyTaggedD: $s$.test.types.InternallyTaggedD,\n\t\t\t\t\tInternallyTaggedE: $s$.test.types.InternallyTaggedE,\n\t\t\t\t\tInternallyTaggedF: $s$.test.types.InternallyTaggedF,\n\t\t\t\t\tInternallyTaggedH: $s$.test.types.InternallyTaggedH,\n\t\t\t\t\tInternallyTaggedL: $s$.test.types.InternallyTaggedL,\n\t\t\t\t\tInternallyTaggedM: $s$.test.types.InternallyTaggedM,\n\t\t\t\t\tStructWithAlias: $s$.test.types.StructWithAlias,\n\t\t\t\t\tStructWithMultipleAliases: $s$.test.types.StructWithMultipleAliases,\n\t\t\t\t\tStructWithAliasAndRename: $s$.test.types.StructWithAliasAndRename,\n\t\t\t\t\tEnumWithVariantAlias: $s$.test.types.EnumWithVariantAlias,\n\t\t\t\t\tEnumWithMultipleVariantAliases: $s$.test.types.EnumWithMultipleVariantAliases,\n\t\t\t\t\tEnumWithVariantAliasAndRename: $s$.test.types.EnumWithVariantAliasAndRename,\n\t\t\t\t\tInternallyTaggedWithAlias: $s$.test.types.InternallyTaggedWithAlias,\n\t\t\t\t\tAdjacentlyTaggedWithAlias: $s$.test.types.AdjacentlyTaggedWithAlias,\n\t\t\t\t\tUntaggedWithAlias: $s$.test.types.UntaggedWithAlias,\n\t\t\t\t\tIssue221UntaggedSafe: $s$.test.types.Issue221UntaggedSafe,\n\t\t\t\t\tIssue221UntaggedMixed: $s$.test.types.Issue221UntaggedMixed,\n\t\t\t\t\tEmptyEnum: $s$.test.types.EmptyEnum,\n\t\t\t\t\tEmptyEnumTagged: $s$.test.types.EmptyEnumTagged,\n\t\t\t\t\tEmptyEnumTaggedWContent: $s$.test.types.EmptyEnumTaggedWContent,\n\t\t\t\t\tEmptyEnumUntagged: $s$.test.types.EmptyEnumUntagged,\n\t\t\t\t\tSkipOnlyField: $s$.test.types.SkipOnlyField,\n\t\t\t\t\tSkipField: $s$.test.types.SkipField,\n\t\t\t\t\tSkipVariant: $s$.test.types.SkipVariant,\n\t\t\t\t\tSkipUnnamedFieldInVariant: $s$.test.types.SkipUnnamedFieldInVariant,\n\t\t\t\t\tSkipNamedFieldInVariant: $s$.test.types.SkipNamedFieldInVariant,\n\t\t\t\t\tTransparentWithSkip: $s$.test.types.TransparentWithSkip,\n\t\t\t\t\tTransparentWithSkip2: $s$.test.types.TransparentWithSkip2,\n\t\t\t\t\tTransparentWithSkip3: $s$.test.types.TransparentWithSkip3,\n\t\t\t\t\tSkipVariant2: $s$.test.types.SkipVariant2,\n\t\t\t\t\tSkipVariant3: $s$.test.types.SkipVariant3,\n\t\t\t\t\tSkipStructFields: $s$.test.types.SkipStructFields,\n\t\t\t\t\tSpectaSkipNonTypeField: $s$.test.types.SpectaSkipNonTypeField,\n\t\t\t\t\tFlattenA: $s$.test.types.FlattenA,\n\t\t\t\t\tFlattenB: $s$.test.types.FlattenB,\n\t\t\t\t\tFlattenC: $s$.test.types.FlattenC,\n\t\t\t\t\tFlattenD: $s$.test.types.FlattenD,\n\t\t\t\t\tFlattenE: $s$.test.types.FlattenE,\n\t\t\t\t\tFlattenF: $s$.test.types.FlattenF,\n\t\t\t\t\tFlattenG: $s$.test.types.FlattenG,\n\t\t\t\t\tTupleNested: $s$.test.types.TupleNested,\n\t\t\t\t\t\"Generic1<()>\": $s$.test.types.Generic1<null>,\n\t\t\t\t\t\"GenericAutoBound<()>\": $s$.test.types.GenericAutoBound<null>,\n\t\t\t\t\t\"GenericAutoBound2<()>\": $s$.test.types.GenericAutoBound2<null>,\n\t\t\t\t\tContainer1: $s$.test.types.Container1,\n\t\t\t\t\t\"Generic2<(), String, i32>\": $s$.test.types.Generic2<null, string, number>,\n\t\t\t\t\t\"GenericNewType1<()>\": $s$.test.types.GenericNewType1<null>,\n\t\t\t\t\t\"GenericTuple<()>\": $s$.test.types.GenericTuple<null>,\n\t\t\t\t\t\"GenericStruct2<()>\": $s$.test.types.GenericStruct2<null>,\n\t\t\t\t\t\"InlineGenericNewtype<String>\": string,\n\t\t\t\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | string | { value: string }],\n\t\t\t\t\t\"InlineFlattenGenericsG<()>\": $s$.test.types.InlineFlattenGenericsG<null>,\n\t\t\t\t\tInlineFlattenGenerics: $s$.test.types.InlineFlattenGenerics,\n\t\t\t\t\tGenericDefault: $s$.test.types.GenericDefault,\n\t\t\t\t\tChainedGenericDefault: $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t\"ChainedGenericDefault<String, String>\": $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t\"ChainedGenericDefault<i32>\": $s$.test.types.ChainedGenericDefault<number, number>,\n\t\t\t\t\t\"ChainedGenericDefault<String, i32>\": $s$.test.types.ChainedGenericDefault<string, number>,\n\t\t\t\t\tGenericDefaultSkipped: $s$.test.types.GenericDefaultSkipped<string>,\n\t\t\t\t\tGenericDefaultSkippedNonType: $s$.test.types.GenericDefaultSkippedNonType<unknown>,\n\t\t\t\t\tGenericParameterOrderPreserved: $s$.test.types.GenericParameterOrderPreserved,\n\t\t\t\t\tConstGenericInNonConstContainer: $s$.test.types.ConstGenericInNonConstContainer,\n\t\t\t\t\tConstGenericInConstContainer: $s$.test.types.ConstGenericInConstContainer,\n\t\t\t\t\tNamedConstGenericContainer: $s$.test.types.NamedConstGenericContainer,\n\t\t\t\t\tInlineConstGenericContainer: $s$.test.types.InlineConstGenericContainer,\n\t\t\t\t\tInlineRecursiveConstGenericContainer: $s$.test.types.InlineRecursiveConstGenericContainer,\n\t\t\t\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\nexport import std = $s$.std;\nexport import test = $s$.test;\nexport import tests = $s$.tests;\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-namespaces-serde.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nts-export-to-namespaces-serde (33948 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n\nnamespace $s$ {\n\n\texport namespace std {\n\n\t\texport namespace ops {\n\t\t\texport type Range<T> = {\n\t\t\t\tstart: T,\n\t\t\t\tend: T,\n\t\t\t};\n\n\t\t\texport type RangeInclusive<T> = {\n\t\t\t\tstart: T,\n\t\t\t\tend: T,\n\t\t\t};\n\t\t}\n\n\t\texport namespace result {\n\t\t\texport type Result<T, E> = {\n\t\t\t\tok: T,\n\t\t\t\terr: E,\n\t\t\t};\n\t\t}\n\t}\n\n\texport namespace test {\n\n\t\texport namespace types {\n\t\t\texport type A = {\n\t\t\t\ta: $s$.test.types.B,\n\t\t\t\tb: {\n\t\t\t\t\tb: number,\n\t\t\t\t},\n\t\t\t\tc: $s$.test.types.B,\n\t\t\t\td: {\n\t\t\t\t\tflattened: number,\n\t\t\t\t},\n\t\t\t\te: {\n\t\t\t\t\tgeneric_flattened: number,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type AGenericStruct<T> = {\n\t\t\t\tfield: $s$.test.types.Demo<T, boolean>,\n\t\t\t};\n\n\t\t\texport type ActualType = {\n\t\t\t\ta: $s$.test.types.GenericType<string>,\n\t\t\t};\n\n\t\t\texport type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\n\t\t\texport type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\n\t\t\texport type B = {\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type BasicEnum = \"A\" | \"B\";\n\n\t\t\texport type BoxFlattened = $s$.test.types.BoxedInner;\n\n\t\t\texport type BoxInline = {\n\t\t\t\tc: {\n\t\t\t\t\ta: number,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type BoxedInner = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type BracedStruct = string;\n\n\t\t\texport type ChainedGenericDefault<T = string, U = T> = {\n\t\t\t\tfirst: T,\n\t\t\t\tsecond: U,\n\t\t\t};\n\n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n\t\t\texport type CommentedEnum = \n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n({ A: number }) & { B?: never } | \n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n\t\t\texport type CommentedStruct = {\n\t\t\t\t/**\n\t\t\t\t *  Some triple-slash comment\n\t\t\t\t *  Some more triple-slash comment\n\t\t\t\t */\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type ConstGenericInConstContainer = {\n\t\t\t\tdata: number[],\n\t\t\t\ta: number[],\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type ConstGenericInNonConstContainer = {\n\t\t\t\tdata: [number],\n\t\t\t\ta: [number, number],\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type Container1 = {\n\t\t\t\tfoo: $s$.test.types.Generic1<number>,\n\t\t\t\tbar: $s$.test.types.Generic1<number>[],\n\t\t\t\tbaz: { [key in string]: $s$.test.types.Generic1<string> },\n\t\t\t};\n\n\t\t\texport type ContainerTypeOverrideEnum = string;\n\n\t\t\texport type ContainerTypeOverrideGeneric = string;\n\n\t\t\texport type ContainerTypeOverrideStruct = string;\n\n\t\t\texport type ContainerTypeOverrideToGeneric<T> = T;\n\n\t\t\texport type ContainerTypeOverrideTuple = [string, number];\n\n\t\t\texport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\n\t\t\texport type D = {\n\t\t\t\tflattened: number,\n\t\t\t};\n\n\t\t\texport type Demo<A, B> = {\n\t\t\t\ta: A,\n\t\t\t\tb: B,\n\t\t\t};\n\n\t\t\texport type DeprecatedEnumVariants = \n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t */\n\"A\" | \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\n\"B\" | \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\n\"C\";\n\n\t\t\texport type DeprecatedFields = {\n\t\t\t\ta: number,\n\t\t\t\t/**\n\t\t\t\t * @deprecated\n\t\t\t\t */\n\t\t\t\tb: string,\n\t\t\t\t/**\n\t\t\t\t * @deprecated This field is cringe!\n\t\t\t\t */\n\t\t\t\tc: string,\n\t\t\t\t/**\n\t\t\t\t * @deprecated This field is cringe!\n\t\t\t\t */\n\t\t\t\td: string,\n\t\t\t};\n\n\t\t\texport type DeprecatedTupleVariant = [\n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t */\nstring, \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\nstring, \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\nnumber];\n\n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t */\n\t\t\texport type DeprecatedType = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * @deprecated Look at you big man using a deprecation message\n\t\t\t */\n\t\t\texport type DeprecatedTypeWithMsg = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * @deprecated Look at you big man using a deprecation message\n\t\t\t */\n\t\t\texport type DeprecatedTypeWithMsg2 = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type DoubleFlattened = {\n\t\t\t\ta: $s$.test.types.ToBeFlattened,\n\t\t\t\tb: $s$.test.types.ToBeFlattened,\n\t\t\t};\n\n\t\t\texport type Eight = { A: string } | \"B\";\n\n\t\t\texport type EmptyEnum = never;\n\n\t\t\texport type EmptyEnumTagged = never;\n\n\t\t\texport type EmptyEnumTaggedWContent = never;\n\n\t\t\texport type EmptyEnumUntagged = never;\n\n\t\t\texport type EmptyStruct = Record<string, never>;\n\n\t\t\texport type EmptyStructWithTag = {\n\t\t\t\ta: \"EmptyStructWithTag\",\n\t\t\t};\n\n\t\t\texport type Enum = { t: \"A\" } | { t: \"B\" };\n\n\t\t\texport type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\n\t\t\texport type Enum3 = { t: \"A\"; b: string };\n\n\t\t\texport type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\n\t\t\texport type EnumReferenceRecordKey = {\n\t\t\t\ta: Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t};\n\n\t\t\texport type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\n\t\t\texport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\n\t\t\texport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\n\t\t\texport type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\n\t\t\texport type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\n\t\t\texport type ExtraBracketsInTupleVariant = { A: string };\n\n\t\t\texport type ExtraBracketsInUnnamedStruct = string;\n\n\t\t\texport type First = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type FlattenA = {\n\t\t\t\ta: number,\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type FlattenB = {\n\t\t\t\tc: number,\n\t\t\t} & $s$.test.types.FlattenA;\n\n\t\t\texport type FlattenC = {\n\t\t\t\tc: number,\n\t\t\t} & $s$.test.types.FlattenA;\n\n\t\t\texport type FlattenD = {\n\t\t\t\ta: $s$.test.types.FlattenA,\n\t\t\t\tc: number,\n\t\t\t};\n\n\t\t\texport type FlattenE = {\n\t\t\t\tb: ({\n\t\t\t\t\tc: number,\n\t\t\t\t}) & ($s$.test.types.FlattenA),\n\t\t\t\td: number,\n\t\t\t};\n\n\t\t\texport type FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n\n\t\t\texport type FlattenEnumStruct = {\n\t\t\t\touter: string,\n\t\t\t} & $s$.test.types.FlattenEnum;\n\n\t\t\texport type FlattenF = {\n\t\t\t\tb: ({\n\t\t\t\t\tc: number,\n\t\t\t\t}) & ($s$.test.types.FlattenA),\n\t\t\t\td: number,\n\t\t\t};\n\n\t\t\texport type FlattenG = {\n\t\t\t\tb: $s$.test.types.FlattenB,\n\t\t\t\td: number,\n\t\t\t};\n\n\t\t\texport type FlattenOnNestedEnum = {\n\t\t\t\tid: string,\n\t\t\t} & $s$.test.types.NestedEnum;\n\n\t\t\texport type FlattenedInner = $s$.test.types.Inner;\n\n\t\t\texport type Fourth = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: {\n\t\t\t\t\ta: string,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type Generic1<T> = {\n\t\t\t\tvalue: T,\n\t\t\t\tvalues: T[],\n\t\t\t};\n\n\t\t\texport type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\n\t\t\texport type GenericAutoBound<T> = {\n\t\t\t\tvalue: T,\n\t\t\t\tvalues: T[],\n\t\t\t};\n\n\t\t\texport type GenericAutoBound2<T> = {\n\t\t\t\tvalue: T,\n\t\t\t\tvalues: T[],\n\t\t\t};\n\n\t\t\texport type GenericDefault<T = string> = {\n\t\t\t\tvalue: T,\n\t\t\t};\n\n\t\t\texport type GenericDefaultSkipped<T> = {\n\t\t\t\tvalue: T,\n\t\t\t};\n\n\t\t\texport type GenericDefaultSkippedNonType<T> = {\n\t\t\t\tvalue: number,\n\t\t\t};\n\n\t\t\texport type GenericFlattened<T> = {\n\t\t\t\tgeneric_flattened: T,\n\t\t\t};\n\n\t\t\texport type GenericNewType1<T> = T[][];\n\n\t\t\texport type GenericParameterOrderPreserved = {\n\t\t\t\tpair: $s$.test.types.Pair<number, string>,\n\t\t\t};\n\n\t\t\texport type GenericStruct<T> = {\n\t\t\t\targ: T,\n\t\t\t};\n\n\t\t\texport type GenericStruct2<T> = {\n\t\t\t\ta: T,\n\t\t\t\tb: [T, T],\n\t\t\t\tc: [T, [T, T]],\n\t\t\t\td: [T, T, T],\n\t\t\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t\t\t\tf: T[],\n\t\t\t\tg: T[][],\n\t\t\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t\t\t};\n\n\t\t\texport type GenericTuple<T> = [T, T[], T[][]];\n\n\t\t\texport type GenericTupleStruct<T> = T;\n\n\t\t\texport type GenericType<T> = \"Undefined\" | T;\n\n\t\t\texport type HasGenericAlias = { [key in number]: string };\n\n\t\t\texport type InlineConstGenericContainer = {\n\t\t\t\tb: {\n\t\t\t\t\tdata: [number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t},\n\t\t\t\tc: {\n\t\t\t\t\tdata: [number, number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t},\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type InlineEnumField = { A: {\n\ta: string,\n} };\n\n\t\t\texport type InlineFlattenGenerics = {\n\t\t\t\tg: $s$.test.types.InlineFlattenGenericsG<string>,\n\t\t\t\tgi: {\n\t\t\t\t\tt: string,\n\t\t\t\t},\n\t\t\t} & $s$.test.types.InlineFlattenGenericsG<string>;\n\n\t\t\texport type InlineFlattenGenericsG<T> = {\n\t\t\t\tt: T,\n\t\t\t};\n\n\t\t\texport type InlineOptionalType = {\n\t\t\t\toptional_field: {\n\ta: string,\n} | null,\n\t\t\t};\n\n\t\t\texport type InlineRecursiveConstGeneric = {\n\t\t\t\tdata: number[],\n\t\t\t\ta: number[],\n\t\t\t\td: [number, number, number],\n\t\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t};\n\n\t\t\texport type InlineRecursiveConstGenericContainer = {\n\t\t\t\tb: {\n\t\t\t\t\tdata: [number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t},\n\t\t\t\tc: {\n\t\t\t\t\tdata: [number, number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t},\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type InlineStruct = {\n\t\t\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\tval: number,\n\t\t\t};\n\n\t\t\texport type InlineTuple = {\n\t\t\t\tdemo: [string, boolean],\n\t\t\t};\n\n\t\t\texport type InlineTuple2 = {\n\t\t\t\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n\t\t\t};\n\n\t\t\texport type InlinerStruct = {\n\t\t\t\tinline_this: {\n\t\t\t\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t\tval: number,\n\t\t\t\t},\n\t\t\t\tdont_inline_this: $s$.test.types.RefStruct,\n\t\t\t};\n\n\t\t\texport type Inner = {\n\t\t\t\ta: number,\n\t\t\t} & $s$.test.types.FlattenedInner;\n\n\t\t\texport type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\n\t\t\texport type InternallyTaggedE = { type: \"A\" };\n\n\t\t\texport type InternallyTaggedF = { type: \"A\" };\n\n\t\t\texport type InternallyTaggedFInner = null;\n\n\t\t\texport type InternallyTaggedH = { type: \"A\" };\n\n\t\t\texport type InternallyTaggedHInner = null;\n\n\t\t\texport type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\n\t\t\texport type InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n\n\t\t\texport type InternallyTaggedM = { type: \"A\" };\n\n\t\t\texport type InternallyTaggedMInner = \"A\" | \"B\";\n\n\t\t\texport type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\n\t\t\texport type InvalidToValidType = {\n\t\t\t\tcause: null,\n\t\t\t};\n\n\t\t\texport type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\n\t\t\texport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\n\t\t\texport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\n\t\t\texport type Issue281 = {\n\t\t\t\tdefault_unity_arguments: string[],\n\t\t\t};\n\n\t\t\texport type KebabCase = {\n\t\t\t\t\"test-ing\": string,\n\t\t\t};\n\n\t\t\texport type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\n\t\t\texport type LifetimeGenericStruct<T> = {\n\t\t\t\tborrowed: T[],\n\t\t\t\towned: T[],\n\t\t\t};\n\n\t\t\texport type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\n\t\t\texport type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\n\t\t\texport type MacroStruct = string;\n\n\t\t\texport type MacroStruct2 = {\n\t\t\t\tdemo: string,\n\t\t\t};\n\n\t\t\texport type MaybeValidKey<T> = T;\n\n\t\t\texport type MyEmptyInput = Record<string, never>;\n\n\t\t\texport type MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n\n\t\t\texport type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: $s$.test.types.First,\n} };\n\n\t\t\texport type MyEnumExternal = { Variant: {\n\tinner: $s$.test.types.First,\n} };\n\n\t\t\texport type MyEnumTagged = { type: \"Variant\"; inner: $s$.test.types.First };\n\n\t\t\texport type MyEnumUntagged = { inner: $s$.test.types.First };\n\n\t\t\texport type NamedConstGeneric = {\n\t\t\t\tdata: number[],\n\t\t\t\ta: number[],\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type NamedConstGenericContainer = {\n\t\t\t\ta: $s$.test.types.NamedConstGeneric,\n\t\t\t\tb: $s$.test.types.NamedConstGeneric,\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n\n\t\t\texport type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: $s$.test.types.First };\n\n\t\t\texport type NonOptional = string | null;\n\n\t\t\texport type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\n\t\t\texport type OptionalOnNamedField = string | null;\n\n\t\t\texport type OptionalOnTransparentNamedField = {\n\t\t\t\tb: string | null,\n\t\t\t};\n\n\t\t\texport type OverridenStruct = {\n\t\t\t\toverriden_field: string,\n\t\t\t};\n\n\t\t\texport type Pair<Z, A> = {\n\t\t\t\tfirst: Z,\n\t\t\t\tsecond: A,\n\t\t\t};\n\n\t\t\texport type PlaceholderInnerField = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type Recursive = {\n\t\t\t\tdemo: $s$.test.types.Recursive,\n\t\t\t};\n\n\t\t\texport type RecursiveInEnum = { A: {\n\tdemo: $s$.test.types.RecursiveInEnum,\n} };\n\n\t\t\texport type RecursiveInline = $s$.test.types.RecursiveInline;\n\n\t\t\texport type RecursiveMapValue = {\n\t\t\t\tdemo: { [key in string]: $s$.test.types.RecursiveMapValue },\n\t\t\t};\n\n\t\t\texport type RecursiveTransparent = $s$.test.types.RecursiveInline;\n\n\t\t\texport type RefStruct = $s$.test.types.TestEnum;\n\n\t\t\texport type Regular = { [key in string]: null };\n\n\t\t\texport type Rename = \"OneWord\" | \"Two words\";\n\n\t\t\texport type RenameSerdeSpecialChar = {\n\t\t\t\t\"a/b\": number,\n\t\t\t};\n\n\t\t\texport type RenameWithWeirdCharsField = {\n\t\t\t\t\"@odata.context\": string,\n\t\t\t};\n\n\t\t\texport type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\n\t\t\texport type RenamedFieldKeys = {\n\t\t\t\t\"\": string,\n\t\t\t\t\"a\\\"b\": string,\n\t\t\t\t\"a\\\\b\": string,\n\t\t\t\t\"line\\nbreak\": string,\n\t\t\t\t\"line\\u2028break\": string,\n\t\t\t\t\"line\\u2029break\": string,\n\t\t\t};\n\n\t\t\texport type RenamedVariantWithSkippedPayload = \"a-b\";\n\n\t\t\texport type Second = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type Seventh = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: $s$.test.types.Second,\n\t\t\t};\n\n\t\t\texport type SimpleStruct = {\n\t\t\t\ta: number,\n\t\t\t\tb: string,\n\t\t\t\tc: [number, string, number],\n\t\t\t\td: string[],\n\t\t\t\te: string | null,\n\t\t\t};\n\n\t\t\t/**  Some single-line comment */\n\t\t\texport type SingleLineComment = \n\t\t\t/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n\t\t\t/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\n\t\t\texport type Sixth = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: $s$.test.types.First,\n\t\t\t};\n\n\t\t\texport type SkipField = {\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\n\t\t\texport type SkipOnlyField = Record<string, never>;\n\n\t\t\texport type SkipStructFields = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\n\t\t\texport type SkipVariant = { A: string };\n\n\t\t\texport type SkipVariant2 = { tag: \"A\"; data: string };\n\n\t\t\texport type SkipVariant3 = { A: {\n\ta: string,\n} };\n\n\t\t\texport type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\n\t\t\texport type SpectaSkipNonTypeField = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type SpectaTypeOverride = {\n\t\t\t\tstring_ident: string,\n\t\t\t\tu32_ident: number,\n\t\t\t\tpath: string,\n\t\t\t\ttuple: [string, number],\n\t\t\t};\n\n\t\t\texport type Struct2 = {\n\t\t\t\tb: string,\n\t\t\t};\n\n\t\t\texport type StructNew = {\n\t\t\t\tt: \"StructNew\",\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type StructRenameAllUppercase = {\n\t\t\t\tA: number,\n\t\t\t\tB: number,\n\t\t\t};\n\n\t\t\texport type StructWithAlias = {\n\t\t\t\tfield: string,\n\t\t\t};\n\n\t\t\texport type StructWithAliasAndRename = {\n\t\t\t\trenamed_field: string,\n\t\t\t};\n\n\t\t\texport type StructWithMultipleAliases = {\n\t\t\t\tfield: string,\n\t\t\t};\n\n\t\t\texport type TagOnStructWithInline = {\n\t\t\t\ttype: \"TagOnStructWithInline\",\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: {\n\t\t\t\t\ta: string,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type Tenth = string | \"B\" | {\n\ta: string,\n} | $s$.test.types.First;\n\n\t\t\texport type TestCollectionRegister = never;\n\n\t\t\texport type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\n\t\t\texport type Third = {\n\t\t\t\tb: { [key in string]: string },\n\t\t\t\tc: $s$.test.types.First,\n\t\t\t} & $s$.test.types.First;\n\n\t\t\texport type ToBeFlattened = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type TransparentStruct = string;\n\n\t\t\texport type TransparentType = $s$.test.types.TransparentTypeInner;\n\n\t\t\texport type TransparentType2 = null;\n\n\t\t\texport type TransparentTypeInner = {\n\t\t\t\tinner: string,\n\t\t\t};\n\n\t\t\texport type TransparentTypeWithOverride = string;\n\n\t\t\texport type TransparentWithSkip = null;\n\n\t\t\texport type TransparentWithSkip2 = string;\n\n\t\t\texport type TransparentWithSkip3 = string;\n\n\t\t\texport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\n\t\t\texport type TupleStruct = string;\n\n\t\t\texport type TupleStruct1 = number;\n\n\t\t\texport type TupleStruct3 = [number, boolean, string];\n\n\t\t\texport type TupleStructWithRep = string;\n\n\t\t\texport type Unit1 = null;\n\n\t\t\texport type Unit2 = Record<string, never>;\n\n\t\t\texport type Unit3 = [];\n\n\t\t\texport type Unit4 = null;\n\n\t\t\texport type Unit5 = \"A\";\n\n\t\t\texport type Unit6 = { A: null };\n\n\t\t\texport type Unit7 = { A: Record<string, never> };\n\n\t\t\texport type UnitVariants = \"A\" | \"B\" | \"C\";\n\n\t\t\texport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\n\t\t\texport type UntaggedVariantsKey = string | number;\n\n\t\t\texport type UntaggedVariantsWithDuplicateBranches = null | number;\n\n\t\t\texport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\n\t\t\texport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\n\t\t\texport type ValidMaybeValidKey = { [key in $s$.test.types.MaybeValidKey<string>]: null };\n\n\t\t\texport type ValidMaybeValidKeyNested = { [key in $s$.test.types.MaybeValidKey<$s$.test.types.MaybeValidKey<string>>]: null };\n\n\t\t\texport namespace type_type {\n\t\t\t\texport type Type = never;\n\t\t\t}\n\t\t}\n\t}\n\n\texport namespace tests {\n\n\t\texport namespace tests {\n\n\t\t\texport namespace types {\n\t\t\t\texport type Primitives = {\n\t\t\t\t\ti8: number,\n\t\t\t\t\ti16: number,\n\t\t\t\t\ti32: number,\n\t\t\t\t\tu8: number,\n\t\t\t\t\tu16: number,\n\t\t\t\t\tu32: number,\n\t\t\t\t\tf32: number,\n\t\t\t\t\tf64: number,\n\t\t\t\t\tbool: boolean,\n\t\t\t\t\tchar: string,\n\t\t\t\t\t\"Range<i32>\": $s$.std.ops.Range<number>,\n\t\t\t\t\t\"RangeInclusive<i32>\": $s$.std.ops.RangeInclusive<number>,\n\t\t\t\t\t\"()\": null,\n\t\t\t\t\t\"(String, i32)\": [string, number],\n\t\t\t\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t\t\t\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\t\t\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\t\t\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t\t\t\t\tString: string,\n\t\t\t\t\tPathBuf: string,\n\t\t\t\t\tIpAddr: string,\n\t\t\t\t\tIpv4Addr: string,\n\t\t\t\t\tIpv6Addr: string,\n\t\t\t\t\tSocketAddr: string,\n\t\t\t\t\tSocketAddrV4: string,\n\t\t\t\t\tSocketAddrV6: string,\n\t\t\t\t\t\"Cow<'static, str>\": string,\n\t\t\t\t\t\"Cow<'static, i32>\": number,\n\t\t\t\t\t\"&'static str\": string,\n\t\t\t\t\t\"&'static bool\": boolean,\n\t\t\t\t\t\"&'static i32\": number,\n\t\t\t\t\t\"Vec<i32>\": number[],\n\t\t\t\t\t\"&'static [i32]\": number[],\n\t\t\t\t\t\"&'static [i32; 3]\": [number, number, number],\n\t\t\t\t\t\"[i32; 3]\": [number, number, number],\n\t\t\t\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\t\"&'static [MyEnum]\": $s$.test.types.MyEnum[],\n\t\t\t\t\t\"&'static [MyEnum; 6]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t\"[MyEnum; 2]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t\"&'static [i32; 1]\": [number],\n\t\t\t\t\t\"&'static [i32; 0]\": [],\n\t\t\t\t\t\"Option<i32>\": number | null,\n\t\t\t\t\t\"Option<()>\": null,\n\t\t\t\t\t\"Option<Vec<i32>>\": number[] | null,\n\t\t\t\t\t\"Result<String, i32>\": $s$.std.result.Result<string, number>,\n\t\t\t\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\t\t\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\t\t\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\t\t\t\t\"Option<Option<String>>\": string | null,\n\t\t\t\t\t\"Option<Option<Option<String>>>\": string | null,\n\t\t\t\t\t\"PhantomData<()>\": null,\n\t\t\t\t\t\"PhantomData<String>\": null,\n\t\t\t\t\tInfallible: never,\n\t\t\t\t\tUnit1: $s$.test.types.Unit1,\n\t\t\t\t\tUnit2: $s$.test.types.Unit2,\n\t\t\t\t\tUnit3: $s$.test.types.Unit3,\n\t\t\t\t\tUnit4: $s$.test.types.Unit4,\n\t\t\t\t\tUnit5: $s$.test.types.Unit5,\n\t\t\t\t\tUnit6: $s$.test.types.Unit6,\n\t\t\t\t\tUnit7: $s$.test.types.Unit7,\n\t\t\t\t\tSimpleStruct: $s$.test.types.SimpleStruct,\n\t\t\t\t\tTupleStruct1: $s$.test.types.TupleStruct1,\n\t\t\t\t\tTupleStruct3: $s$.test.types.TupleStruct3,\n\t\t\t\t\tTestEnum: $s$.test.types.TestEnum,\n\t\t\t\t\tRefStruct: $s$.test.types.RefStruct,\n\t\t\t\t\tInlinerStruct: $s$.test.types.InlinerStruct,\n\t\t\t\t\t\"GenericStruct<i32>\": $s$.test.types.GenericStruct<number>,\n\t\t\t\t\t\"GenericStruct<String>\": $s$.test.types.GenericStruct<string>,\n\t\t\t\t\tFlattenEnumStruct: $s$.test.types.FlattenEnumStruct,\n\t\t\t\t\tOverridenStruct: $s$.test.types.OverridenStruct,\n\t\t\t\t\tHasGenericAlias: $s$.test.types.HasGenericAlias,\n\t\t\t\t\tEnumMacroAttributes: $s$.test.types.EnumMacroAttributes,\n\t\t\t\t\tInlineEnumField: $s$.test.types.InlineEnumField,\n\t\t\t\t\tInlineOptionalType: $s$.test.types.InlineOptionalType,\n\t\t\t\t\tRename: $s$.test.types.Rename,\n\t\t\t\t\tTransparentType: $s$.test.types.TransparentType,\n\t\t\t\t\tTransparentType2: $s$.test.types.TransparentType2,\n\t\t\t\t\tTransparentTypeWithOverride: $s$.test.types.TransparentTypeWithOverride,\n\t\t\t\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\t\t\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in $s$.test.types.BasicEnum]: null }>,\n\t\t\t\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\t\t\t\t\"Vec<PlaceholderInnerField>\": $s$.test.types.PlaceholderInnerField[],\n\t\t\t\t\tEnumReferenceRecordKey: $s$.test.types.EnumReferenceRecordKey,\n\t\t\t\t\tFlattenOnNestedEnum: $s$.test.types.FlattenOnNestedEnum,\n\t\t\t\t\tMyEmptyInput: $s$.test.types.MyEmptyInput,\n\t\t\t\t\t\"(String)\": string,\n\t\t\t\t\t\"(String,)\": [string],\n\t\t\t\t\tExtraBracketsInTupleVariant: $s$.test.types.ExtraBracketsInTupleVariant,\n\t\t\t\t\tExtraBracketsInUnnamedStruct: $s$.test.types.ExtraBracketsInUnnamedStruct,\n\t\t\t\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\tInlineTuple: $s$.test.types.InlineTuple,\n\t\t\t\t\tInlineTuple2: $s$.test.types.InlineTuple2,\n\t\t\t\t\t\"Box<str>\": string,\n\t\t\t\t\t\"Box<String>\": string,\n\t\t\t\t\tSkippedFieldWithinVariant: $s$.test.types.SkippedFieldWithinVariant,\n\t\t\t\t\tKebabCase: $s$.test.types.KebabCase,\n\t\t\t\t\t\"&[&str]\": string[],\n\t\t\t\t\t\"Issue281<'_>\": $s$.test.types.Issue281,\n\t\t\t\t\t\"LifetimeGenericStruct<'_, i32>\": $s$.test.types.LifetimeGenericStruct<number>,\n\t\t\t\t\t\"LifetimeGenericEnum<'_, i32>\": $s$.test.types.LifetimeGenericEnum<number>,\n\t\t\t\t\tRenameWithWeirdCharsField: $s$.test.types.RenameWithWeirdCharsField,\n\t\t\t\t\tRenameWithWeirdCharsVariant: $s$.test.types.RenameWithWeirdCharsVariant,\n\t\t\t\t\tRenamedFieldKeys: $s$.test.types.RenamedFieldKeys,\n\t\t\t\t\tRenamedVariantWithSkippedPayload: $s$.test.types.RenamedVariantWithSkippedPayload,\n\t\t\t\t\t\"type_type::Type\": $s$.test.types.type_type.Type,\n\t\t\t\t\tActualType: $s$.test.types.ActualType,\n\t\t\t\t\tSpectaTypeOverride: $s$.test.types.SpectaTypeOverride,\n\t\t\t\t\tContainerTypeOverrideStruct: $s$.test.types.ContainerTypeOverrideStruct,\n\t\t\t\t\tContainerTypeOverrideEnum: $s$.test.types.ContainerTypeOverrideEnum,\n\t\t\t\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": $s$.test.types.ContainerTypeOverrideGeneric,\n\t\t\t\t\t\"ContainerTypeOverrideToGeneric<i32>\": $s$.test.types.ContainerTypeOverrideToGeneric<number>,\n\t\t\t\t\tContainerTypeOverrideTuple: $s$.test.types.ContainerTypeOverrideTuple,\n\t\t\t\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": $s$.test.types.ContainerTypeOverrideTupleGeneric<number>,\n\t\t\t\t\tInvalidToValidType: $s$.test.types.InvalidToValidType,\n\t\t\t\t\tTupleStruct: $s$.test.types.TupleStruct,\n\t\t\t\t\tTupleStructWithRep: $s$.test.types.TupleStructWithRep,\n\t\t\t\t\t\"GenericTupleStruct<String>\": $s$.test.types.GenericTupleStruct<string>,\n\t\t\t\t\tBracedStruct: $s$.test.types.BracedStruct,\n\t\t\t\t\tStruct: $s$.test.types.StructNew,\n\t\t\t\t\tStruct2: $s$.test.types.Struct2,\n\t\t\t\t\tEnum: $s$.test.types.Enum,\n\t\t\t\t\tEnum2: $s$.test.types.Enum2,\n\t\t\t\t\tEnum3: $s$.test.types.Enum3,\n\t\t\t\t\tStructRenameAllUppercase: $s$.test.types.StructRenameAllUppercase,\n\t\t\t\t\tRenameSerdeSpecialChar: $s$.test.types.RenameSerdeSpecialChar,\n\t\t\t\t\tEnumRenameAllUppercase: $s$.test.types.EnumRenameAllUppercase,\n\t\t\t\t\tRecursive: $s$.test.types.Recursive,\n\t\t\t\t\tRecursiveMapValue: $s$.test.types.RecursiveMapValue,\n\t\t\t\t\tRecursiveTransparent: $s$.test.types.RecursiveTransparent,\n\t\t\t\t\tRecursiveInEnum: $s$.test.types.RecursiveInEnum,\n\t\t\t\t\tNonOptional: $s$.test.types.NonOptional,\n\t\t\t\t\tOptionalOnNamedField: $s$.test.types.OptionalOnNamedField,\n\t\t\t\t\tOptionalOnTransparentNamedField: $s$.test.types.OptionalOnTransparentNamedField,\n\t\t\t\t\tOptionalInEnum: $s$.test.types.OptionalInEnum,\n\t\t\t\t\tUntaggedVariants: $s$.test.types.UntaggedVariants,\n\t\t\t\t\tUntaggedVariantsWithoutValue: $s$.test.types.UntaggedVariantsWithoutValue,\n\t\t\t\t\tUntaggedVariantsWithDuplicateBranches: $s$.test.types.UntaggedVariantsWithDuplicateBranches,\n\t\t\t\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t\t\t\t\tRegular: $s$.test.types.Regular,\n\t\t\t\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\t\t\t\t\"HashMap<TransparentStruct, ()>\": { [key in $s$.test.types.TransparentStruct]: null },\n\t\t\t\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in $s$.test.types.UnitVariants]: null }>,\n\t\t\t\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in $s$.test.types.UntaggedVariantsKey]: null }>,\n\t\t\t\t\tValidMaybeValidKey: $s$.test.types.ValidMaybeValidKey,\n\t\t\t\t\tValidMaybeValidKeyNested: $s$.test.types.ValidMaybeValidKeyNested,\n\t\t\t\t\tMacroStruct: $s$.test.types.MacroStruct,\n\t\t\t\t\tMacroStruct2: $s$.test.types.MacroStruct2,\n\t\t\t\t\tMacroEnum: $s$.test.types.MacroEnum,\n\t\t\t\t\tDeprecatedType: $s$.test.types.DeprecatedType,\n\t\t\t\t\tDeprecatedTypeWithMsg: $s$.test.types.DeprecatedTypeWithMsg,\n\t\t\t\t\tDeprecatedTypeWithMsg2: $s$.test.types.DeprecatedTypeWithMsg2,\n\t\t\t\t\tDeprecatedFields: $s$.test.types.DeprecatedFields,\n\t\t\t\t\tDeprecatedTupleVariant: $s$.test.types.DeprecatedTupleVariant,\n\t\t\t\t\tDeprecatedEnumVariants: $s$.test.types.DeprecatedEnumVariants,\n\t\t\t\t\tCommentedStruct: $s$.test.types.CommentedStruct,\n\t\t\t\t\tCommentedEnum: $s$.test.types.CommentedEnum,\n\t\t\t\t\tSingleLineComment: $s$.test.types.SingleLineComment,\n\t\t\t\t\tNonGeneric: $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"HalfGenericA<u8>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"HalfGenericB<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"FullGeneric<u8, bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"Another<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"MapA<u32>\": { [key in string]: number },\n\t\t\t\t\t\"MapB<u32>\": { [key in number]: string },\n\t\t\t\t\t\"MapC<u32>\": { [key in string]: $s$.test.types.AGenericStruct<number> },\n\t\t\t\t\t\"AGenericStruct<u32>\": $s$.test.types.AGenericStruct<number>,\n\t\t\t\t\tA: $s$.test.types.A,\n\t\t\t\t\tDoubleFlattened: $s$.test.types.DoubleFlattened,\n\t\t\t\t\tFlattenedInner: $s$.test.types.FlattenedInner,\n\t\t\t\t\tBoxFlattened: $s$.test.types.BoxFlattened,\n\t\t\t\t\tBoxInline: $s$.test.types.BoxInline,\n\t\t\t\t\tFirst: $s$.test.types.First,\n\t\t\t\t\tSecond: $s$.test.types.Second,\n\t\t\t\t\tThird: $s$.test.types.Third,\n\t\t\t\t\tFourth: $s$.test.types.Fourth,\n\t\t\t\t\tTagOnStructWithInline: $s$.test.types.TagOnStructWithInline,\n\t\t\t\t\tSixth: $s$.test.types.Sixth,\n\t\t\t\t\tSeventh: $s$.test.types.Seventh,\n\t\t\t\t\tEight: $s$.test.types.Eight,\n\t\t\t\t\tNinth: $s$.test.types.Ninth,\n\t\t\t\t\tTenth: $s$.test.types.Tenth,\n\t\t\t\t\tMyEnumTagged: $s$.test.types.MyEnumTagged,\n\t\t\t\t\tMyEnumExternal: $s$.test.types.MyEnumExternal,\n\t\t\t\t\tMyEnumAdjacent: $s$.test.types.MyEnumAdjacent,\n\t\t\t\t\tMyEnumUntagged: $s$.test.types.MyEnumUntagged,\n\t\t\t\t\tEmptyStruct: $s$.test.types.EmptyStruct,\n\t\t\t\t\tEmptyStructWithTag: $s$.test.types.EmptyStructWithTag,\n\t\t\t\t\tAdjacentlyTagged: $s$.test.types.AdjacentlyTagged,\n\t\t\t\t\tLoadProjectEvent: $s$.test.types.LoadProjectEvent,\n\t\t\t\t\tExternallyTagged: $s$.test.types.ExternallyTagged,\n\t\t\t\t\tIssue221External: $s$.test.types.Issue221External,\n\t\t\t\t\tInternallyTaggedD: $s$.test.types.InternallyTaggedD,\n\t\t\t\t\tInternallyTaggedE: $s$.test.types.InternallyTaggedE,\n\t\t\t\t\tInternallyTaggedF: $s$.test.types.InternallyTaggedF,\n\t\t\t\t\tInternallyTaggedH: $s$.test.types.InternallyTaggedH,\n\t\t\t\t\tInternallyTaggedL: $s$.test.types.InternallyTaggedL,\n\t\t\t\t\tInternallyTaggedM: $s$.test.types.InternallyTaggedM,\n\t\t\t\t\tStructWithAlias: $s$.test.types.StructWithAlias,\n\t\t\t\t\tStructWithMultipleAliases: $s$.test.types.StructWithMultipleAliases,\n\t\t\t\t\tStructWithAliasAndRename: $s$.test.types.StructWithAliasAndRename,\n\t\t\t\t\tEnumWithVariantAlias: $s$.test.types.EnumWithVariantAlias,\n\t\t\t\t\tEnumWithMultipleVariantAliases: $s$.test.types.EnumWithMultipleVariantAliases,\n\t\t\t\t\tEnumWithVariantAliasAndRename: $s$.test.types.EnumWithVariantAliasAndRename,\n\t\t\t\t\tInternallyTaggedWithAlias: $s$.test.types.InternallyTaggedWithAlias,\n\t\t\t\t\tAdjacentlyTaggedWithAlias: $s$.test.types.AdjacentlyTaggedWithAlias,\n\t\t\t\t\tUntaggedWithAlias: $s$.test.types.UntaggedWithAlias,\n\t\t\t\t\tIssue221UntaggedSafe: $s$.test.types.Issue221UntaggedSafe,\n\t\t\t\t\tIssue221UntaggedMixed: $s$.test.types.Issue221UntaggedMixed,\n\t\t\t\t\tEmptyEnum: $s$.test.types.EmptyEnum,\n\t\t\t\t\tEmptyEnumTagged: $s$.test.types.EmptyEnumTagged,\n\t\t\t\t\tEmptyEnumTaggedWContent: $s$.test.types.EmptyEnumTaggedWContent,\n\t\t\t\t\tEmptyEnumUntagged: $s$.test.types.EmptyEnumUntagged,\n\t\t\t\t\tSkipOnlyField: $s$.test.types.SkipOnlyField,\n\t\t\t\t\tSkipField: $s$.test.types.SkipField,\n\t\t\t\t\tSkipVariant: $s$.test.types.SkipVariant,\n\t\t\t\t\tSkipUnnamedFieldInVariant: $s$.test.types.SkipUnnamedFieldInVariant,\n\t\t\t\t\tSkipNamedFieldInVariant: $s$.test.types.SkipNamedFieldInVariant,\n\t\t\t\t\tTransparentWithSkip: $s$.test.types.TransparentWithSkip,\n\t\t\t\t\tTransparentWithSkip2: $s$.test.types.TransparentWithSkip2,\n\t\t\t\t\tTransparentWithSkip3: $s$.test.types.TransparentWithSkip3,\n\t\t\t\t\tSkipVariant2: $s$.test.types.SkipVariant2,\n\t\t\t\t\tSkipVariant3: $s$.test.types.SkipVariant3,\n\t\t\t\t\tSkipStructFields: $s$.test.types.SkipStructFields,\n\t\t\t\t\tSpectaSkipNonTypeField: $s$.test.types.SpectaSkipNonTypeField,\n\t\t\t\t\tFlattenA: $s$.test.types.FlattenA,\n\t\t\t\t\tFlattenB: $s$.test.types.FlattenB,\n\t\t\t\t\tFlattenC: $s$.test.types.FlattenC,\n\t\t\t\t\tFlattenD: $s$.test.types.FlattenD,\n\t\t\t\t\tFlattenE: $s$.test.types.FlattenE,\n\t\t\t\t\tFlattenF: $s$.test.types.FlattenF,\n\t\t\t\t\tFlattenG: $s$.test.types.FlattenG,\n\t\t\t\t\tTupleNested: $s$.test.types.TupleNested,\n\t\t\t\t\t\"Generic1<()>\": $s$.test.types.Generic1<null>,\n\t\t\t\t\t\"GenericAutoBound<()>\": $s$.test.types.GenericAutoBound<null>,\n\t\t\t\t\t\"GenericAutoBound2<()>\": $s$.test.types.GenericAutoBound2<null>,\n\t\t\t\t\tContainer1: $s$.test.types.Container1,\n\t\t\t\t\t\"Generic2<(), String, i32>\": $s$.test.types.Generic2<null, string, number>,\n\t\t\t\t\t\"GenericNewType1<()>\": $s$.test.types.GenericNewType1<null>,\n\t\t\t\t\t\"GenericTuple<()>\": $s$.test.types.GenericTuple<null>,\n\t\t\t\t\t\"GenericStruct2<()>\": $s$.test.types.GenericStruct2<null>,\n\t\t\t\t\t\"InlineGenericNewtype<String>\": string,\n\t\t\t\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }],\n\t\t\t\t\t\"InlineFlattenGenericsG<()>\": $s$.test.types.InlineFlattenGenericsG<null>,\n\t\t\t\t\tInlineFlattenGenerics: $s$.test.types.InlineFlattenGenerics,\n\t\t\t\t\tGenericDefault: $s$.test.types.GenericDefault,\n\t\t\t\t\tChainedGenericDefault: $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t\"ChainedGenericDefault<String, String>\": $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t\"ChainedGenericDefault<i32>\": $s$.test.types.ChainedGenericDefault<number, number>,\n\t\t\t\t\t\"ChainedGenericDefault<String, i32>\": $s$.test.types.ChainedGenericDefault<string, number>,\n\t\t\t\t\tGenericDefaultSkipped: $s$.test.types.GenericDefaultSkipped<string>,\n\t\t\t\t\tGenericDefaultSkippedNonType: $s$.test.types.GenericDefaultSkippedNonType<unknown>,\n\t\t\t\t\tGenericParameterOrderPreserved: $s$.test.types.GenericParameterOrderPreserved,\n\t\t\t\t\tConstGenericInNonConstContainer: $s$.test.types.ConstGenericInNonConstContainer,\n\t\t\t\t\tConstGenericInConstContainer: $s$.test.types.ConstGenericInConstContainer,\n\t\t\t\t\tNamedConstGenericContainer: $s$.test.types.NamedConstGenericContainer,\n\t\t\t\t\tInlineConstGenericContainer: $s$.test.types.InlineConstGenericContainer,\n\t\t\t\t\tInlineRecursiveConstGenericContainer: $s$.test.types.InlineRecursiveConstGenericContainer,\n\t\t\t\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\nexport import std = $s$.std;\nexport import test = $s$.test;\nexport import tests = $s$.tests;\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/snapshots/test__typescript__ts-export-to-namespaces-serde_phases.snap",
    "content": "---\nsource: tests/tests/typescript.rs\nexpression: output\n---\nts-export-to-namespaces-serde_phases (35155 bytes)\n────────────────────────────────────────\n// This file has been generated by Specta. Do not edit this file manually.\n\nnamespace $s$ {\n\n\texport namespace std {\n\n\t\texport namespace ops {\n\t\t\texport type Range<T> = {\n\t\t\t\tstart: T,\n\t\t\t\tend: T,\n\t\t\t};\n\n\t\t\texport type RangeInclusive<T> = {\n\t\t\t\tstart: T,\n\t\t\t\tend: T,\n\t\t\t};\n\t\t}\n\n\t\texport namespace result {\n\t\t\texport type Result<T, E> = {\n\t\t\t\tok: T,\n\t\t\t\terr: E,\n\t\t\t};\n\t\t}\n\t}\n\n\texport namespace test {\n\n\t\texport namespace types {\n\t\t\texport type A = {\n\t\t\t\ta: $s$.test.types.B,\n\t\t\t\tb: {\n\t\t\t\t\tb: number,\n\t\t\t\t},\n\t\t\t\tc: $s$.test.types.B,\n\t\t\t\td: {\n\t\t\t\t\tflattened: number,\n\t\t\t\t},\n\t\t\t\te: {\n\t\t\t\t\tgeneric_flattened: number,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type AGenericStruct<T> = {\n\t\t\t\tfield: $s$.test.types.Demo<T, boolean>,\n\t\t\t};\n\n\t\t\texport type ActualType = {\n\t\t\t\ta: $s$.test.types.GenericType<string>,\n\t\t\t};\n\n\t\t\texport type AdjacentlyTagged = { t: \"A\" } | { t: \"B\"; c: {\n\tid: string,\n\tmethod: string,\n} } | { t: \"C\"; c: string };\n\n\t\t\texport type AdjacentlyTaggedWithAlias = { type: \"A\"; data: {\n\tfield: string,\n} } | { type: \"B\"; data: {\n\tother: number,\n} };\n\n\t\t\texport type B = {\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type BasicEnum = \"A\" | \"B\";\n\n\t\t\texport type BoxFlattened = $s$.test.types.BoxedInner;\n\n\t\t\texport type BoxInline = {\n\t\t\t\tc: {\n\t\t\t\t\ta: number,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type BoxedInner = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type BracedStruct = string;\n\n\t\t\texport type ChainedGenericDefault<T = string, U = T> = {\n\t\t\t\tfirst: T,\n\t\t\t\tsecond: U,\n\t\t\t};\n\n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n\t\t\texport type CommentedEnum = \n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n({ A: number }) & { B?: never } | \n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n({ B: {\n\t/**\n\t *  Some triple-slash comment\n\t *  Some more triple-slash comment\n\t */\n\ta: number,\n} }) & { A?: never };\n\n\t\t\t/**\n\t\t\t *  Some triple-slash comment\n\t\t\t *  Some more triple-slash comment\n\t\t\t */\n\t\t\texport type CommentedStruct = {\n\t\t\t\t/**\n\t\t\t\t *  Some triple-slash comment\n\t\t\t\t *  Some more triple-slash comment\n\t\t\t\t */\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type ConstGenericInConstContainer = {\n\t\t\t\tdata: number[],\n\t\t\t\ta: number[],\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type ConstGenericInNonConstContainer = {\n\t\t\t\tdata: [number],\n\t\t\t\ta: [number, number],\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type Container1 = {\n\t\t\t\tfoo: $s$.test.types.Generic1<number>,\n\t\t\t\tbar: $s$.test.types.Generic1<number>[],\n\t\t\t\tbaz: { [key in string]: $s$.test.types.Generic1<string> },\n\t\t\t};\n\n\t\t\texport type ContainerTypeOverrideEnum = string;\n\n\t\t\texport type ContainerTypeOverrideGeneric = string;\n\n\t\t\texport type ContainerTypeOverrideStruct = string;\n\n\t\t\texport type ContainerTypeOverrideToGeneric<T> = T;\n\n\t\t\texport type ContainerTypeOverrideTuple = [string, number];\n\n\t\t\texport type ContainerTypeOverrideTupleGeneric<T> = [T, string];\n\n\t\t\texport type D = {\n\t\t\t\tflattened: number,\n\t\t\t};\n\n\t\t\texport type Demo<A, B> = {\n\t\t\t\ta: A,\n\t\t\t\tb: B,\n\t\t\t};\n\n\t\t\texport type DeprecatedEnumVariants = \n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t */\n\"A\" | \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\n\"B\" | \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\n\"C\";\n\n\t\t\texport type DeprecatedFields = {\n\t\t\t\ta: number,\n\t\t\t\t/**\n\t\t\t\t * @deprecated\n\t\t\t\t */\n\t\t\t\tb: string,\n\t\t\t\t/**\n\t\t\t\t * @deprecated This field is cringe!\n\t\t\t\t */\n\t\t\t\tc: string,\n\t\t\t\t/**\n\t\t\t\t * @deprecated This field is cringe!\n\t\t\t\t */\n\t\t\t\td: string,\n\t\t\t};\n\n\t\t\texport type DeprecatedTupleVariant = [\n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t */\nstring, \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\nstring, \n\t\t\t/**\n\t\t\t * @deprecated Nope\n\t\t\t */\nnumber];\n\n\t\t\t/**\n\t\t\t * @deprecated\n\t\t\t */\n\t\t\texport type DeprecatedType = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * @deprecated Look at you big man using a deprecation message\n\t\t\t */\n\t\t\texport type DeprecatedTypeWithMsg = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * @deprecated Look at you big man using a deprecation message\n\t\t\t */\n\t\t\texport type DeprecatedTypeWithMsg2 = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type DoubleFlattened = {\n\t\t\t\ta: $s$.test.types.ToBeFlattened,\n\t\t\t\tb: $s$.test.types.ToBeFlattened,\n\t\t\t};\n\n\t\t\texport type Eight = { A: string } | \"B\";\n\n\t\t\texport type EmptyEnum = never;\n\n\t\t\texport type EmptyEnumTagged = never;\n\n\t\t\texport type EmptyEnumTaggedWContent = never;\n\n\t\t\texport type EmptyEnumUntagged = never;\n\n\t\t\texport type EmptyStruct = Record<string, never>;\n\n\t\t\texport type EmptyStructWithTag = {\n\t\t\t\ta: \"EmptyStructWithTag\",\n\t\t\t};\n\n\t\t\texport type Enum = { t: \"A\" } | { t: \"B\" };\n\n\t\t\texport type Enum2 = { t: \"C\" } | { t: \"B\" } | { t: \"D\"; enumField: null };\n\n\t\t\texport type Enum3 = { t: \"A\"; b: string };\n\n\t\t\texport type EnumMacroAttributes = ({ A: string }) & { D?: never; bbb?: never; cccc?: never } | ({ bbb: number }) & { A?: never; D?: never; cccc?: never } | ({ cccc: number }) & { A?: never; D?: never; bbb?: never } | ({ D: {\n\ta: string,\n\tbbbbbb: number,\n} }) & { A?: never; bbb?: never; cccc?: never };\n\n\t\t\texport type EnumReferenceRecordKey = {\n\t\t\t\ta: Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t};\n\n\t\t\texport type EnumRenameAllUppercase = \"HELLOWORLD\" | \"VARIANTB\" | \"TESTINGWORDS\";\n\n\t\t\texport type EnumWithMultipleVariantAliases = \"Variant\" | \"Other\";\n\n\t\t\texport type EnumWithVariantAlias = \"Variant\" | \"Other\";\n\n\t\t\texport type EnumWithVariantAliasAndRename = \"renamed_variant\" | \"Other\";\n\n\t\t\texport type ExternallyTagged = \"A\" | ({ B: {\n\tid: string,\n\tmethod: string,\n} }) & { C?: never } | ({ C: string }) & { B?: never };\n\n\t\t\texport type ExtraBracketsInTupleVariant = { A: string };\n\n\t\t\texport type ExtraBracketsInUnnamedStruct = string;\n\n\t\t\texport type First = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type FlattenA = {\n\t\t\t\ta: number,\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type FlattenB = {\n\t\t\t\tc: number,\n\t\t\t} & $s$.test.types.FlattenA;\n\n\t\t\texport type FlattenC = {\n\t\t\t\tc: number,\n\t\t\t} & $s$.test.types.FlattenA;\n\n\t\t\texport type FlattenD = {\n\t\t\t\ta: $s$.test.types.FlattenA,\n\t\t\t\tc: number,\n\t\t\t};\n\n\t\t\texport type FlattenE = {\n\t\t\t\tb: ({\n\t\t\t\t\tc: number,\n\t\t\t\t}) & ($s$.test.types.FlattenA),\n\t\t\t\td: number,\n\t\t\t};\n\n\t\t\texport type FlattenEnum = { tag: \"One\" } | { tag: \"Two\" } | { tag: \"Three\" };\n\n\t\t\texport type FlattenEnumStruct = {\n\t\t\t\touter: string,\n\t\t\t} & $s$.test.types.FlattenEnum;\n\n\t\t\texport type FlattenF = {\n\t\t\t\tb: ({\n\t\t\t\t\tc: number,\n\t\t\t\t}) & ($s$.test.types.FlattenA),\n\t\t\t\td: number,\n\t\t\t};\n\n\t\t\texport type FlattenG = {\n\t\t\t\tb: $s$.test.types.FlattenB,\n\t\t\t\td: number,\n\t\t\t};\n\n\t\t\texport type FlattenOnNestedEnum = {\n\t\t\t\tid: string,\n\t\t\t} & $s$.test.types.NestedEnum;\n\n\t\t\texport type FlattenedInner = $s$.test.types.Inner;\n\n\t\t\texport type Fourth = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: {\n\t\t\t\t\ta: string,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type Generic1<T> = {\n\t\t\t\tvalue: T,\n\t\t\t\tvalues: T[],\n\t\t\t};\n\n\t\t\texport type Generic2<A, B, C> = ({ A: A }) & { B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ B: [B, B, B] }) & { A?: never; C?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ C: C[] }) & { A?: never; B?: never; D?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ D: A[][][] }) & { A?: never; B?: never; C?: never; E?: never; X?: never; Y?: never; Z?: never } | ({ E: {\n\ta: A,\n\tb: B,\n\tc: C,\n} }) & { A?: never; B?: never; C?: never; D?: never; X?: never; Y?: never; Z?: never } | ({ X: number[] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; Y?: never; Z?: never } | ({ Y: number }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Z?: never } | ({ Z: number[][] }) & { A?: never; B?: never; C?: never; D?: never; E?: never; X?: never; Y?: never };\n\n\t\t\texport type GenericAutoBound<T> = {\n\t\t\t\tvalue: T,\n\t\t\t\tvalues: T[],\n\t\t\t};\n\n\t\t\texport type GenericAutoBound2<T> = {\n\t\t\t\tvalue: T,\n\t\t\t\tvalues: T[],\n\t\t\t};\n\n\t\t\texport type GenericDefault<T = string> = {\n\t\t\t\tvalue: T,\n\t\t\t};\n\n\t\t\texport type GenericDefaultSkipped<T> = {\n\t\t\t\tvalue: T,\n\t\t\t};\n\n\t\t\texport type GenericDefaultSkippedNonType<T> = {\n\t\t\t\tvalue: number,\n\t\t\t};\n\n\t\t\texport type GenericFlattened<T> = {\n\t\t\t\tgeneric_flattened: T,\n\t\t\t};\n\n\t\t\texport type GenericNewType1<T> = T[][];\n\n\t\t\texport type GenericParameterOrderPreserved = {\n\t\t\t\tpair: $s$.test.types.Pair<number, string>,\n\t\t\t};\n\n\t\t\texport type GenericStruct<T> = {\n\t\t\t\targ: T,\n\t\t\t};\n\n\t\t\texport type GenericStruct2<T> = {\n\t\t\t\ta: T,\n\t\t\t\tb: [T, T],\n\t\t\t\tc: [T, [T, T]],\n\t\t\t\td: [T, T, T],\n\t\t\t\te: [([T, T]), ([T, T]), ([T, T])],\n\t\t\t\tf: T[],\n\t\t\t\tg: T[][],\n\t\t\t\th: ([([T, T]), ([T, T]), ([T, T])])[],\n\t\t\t};\n\n\t\t\texport type GenericTuple<T> = [T, T[], T[][]];\n\n\t\t\texport type GenericTupleStruct<T> = T;\n\n\t\t\texport type GenericType<T> = \"Undefined\" | T;\n\n\t\t\texport type HasGenericAlias = { [key in number]: string };\n\n\t\t\texport type InlineConstGenericContainer = {\n\t\t\t\tb: {\n\t\t\t\t\tdata: [number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t},\n\t\t\t\tc: {\n\t\t\t\t\tdata: [number, number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t},\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type InlineEnumField = { A: {\n\ta: string,\n} };\n\n\t\t\texport type InlineFlattenGenerics = {\n\t\t\t\tg: $s$.test.types.InlineFlattenGenericsG<string>,\n\t\t\t\tgi: {\n\t\t\t\t\tt: string,\n\t\t\t\t},\n\t\t\t} & $s$.test.types.InlineFlattenGenericsG<string>;\n\n\t\t\texport type InlineFlattenGenericsG<T> = {\n\t\t\t\tt: T,\n\t\t\t};\n\n\t\t\texport type InlineOptionalType = {\n\t\t\t\toptional_field: {\n\ta: string,\n} | null,\n\t\t\t};\n\n\t\t\texport type InlineRecursiveConstGeneric = {\n\t\t\t\tdata: number[],\n\t\t\t\ta: number[],\n\t\t\t\td: [number, number, number],\n\t\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t};\n\n\t\t\texport type InlineRecursiveConstGenericContainer = {\n\t\t\t\tb: {\n\t\t\t\t\tdata: [number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t},\n\t\t\t\tc: {\n\t\t\t\t\tdata: [number, number, number],\n\t\t\t\t\ta: [number, number],\n\t\t\t\t\td: [number, number, number],\n\t\t\t\t\te: $s$.test.types.InlineRecursiveConstGeneric,\n\t\t\t\t},\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type InlineStruct = {\n\t\t\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\tval: number,\n\t\t\t};\n\n\t\t\texport type InlineTuple = {\n\t\t\t\tdemo: [string, boolean],\n\t\t\t};\n\n\t\t\texport type InlineTuple2 = {\n\t\t\t\tdemo: [{\n\tdemo: [string, boolean],\n}, boolean],\n\t\t\t};\n\n\t\t\texport type InlinerStruct = {\n\t\t\t\tinline_this: {\n\t\t\t\t\tref_struct: $s$.test.types.SimpleStruct,\n\t\t\t\t\tval: number,\n\t\t\t\t},\n\t\t\t\tdont_inline_this: $s$.test.types.RefStruct,\n\t\t\t};\n\n\t\t\texport type Inner = {\n\t\t\t\ta: number,\n\t\t\t} & $s$.test.types.FlattenedInner;\n\n\t\t\texport type InternallyTaggedD = {\n\ttype: \"A\",\n} & { [key in string]: string };\n\n\t\t\texport type InternallyTaggedE = { type: \"A\" };\n\n\t\t\texport type InternallyTaggedF = { type: \"A\" };\n\n\t\t\texport type InternallyTaggedFInner = null;\n\n\t\t\texport type InternallyTaggedH = { type: \"A\" };\n\n\t\t\texport type InternallyTaggedHInner = null;\n\n\t\t\texport type InternallyTaggedL = {\n\ttype: \"A\",\n} & { type: \"A\" } | { type: \"B\" };\n\n\t\t\texport type InternallyTaggedLInner = { type: \"A\" } | { type: \"B\" };\n\n\t\t\texport type InternallyTaggedM = { type: \"A\" };\n\n\t\t\texport type InternallyTaggedMInner = \"A\" | \"B\";\n\n\t\t\texport type InternallyTaggedWithAlias = { type: \"A\"; field: string } | { type: \"B\"; other: number };\n\n\t\t\texport type InvalidToValidType = {\n\t\t\t\tcause: null,\n\t\t\t};\n\n\t\t\texport type Issue221External = ({ A: {\n\ta: string,\n} }) & { B?: never } | ({ B: {\n\tb: string,\n} }) & { A?: never };\n\n\t\t\texport type Issue221UntaggedMixed = ({ a: string }) & { b?: never; values?: never } | ({ b: string }) & { a?: never; values?: never } | ({ values: { [key in string]: string } }) & { a?: never; b?: never };\n\n\t\t\texport type Issue221UntaggedSafe = ({ a: string }) & { b?: never } | ({ b: string }) & { a?: never };\n\n\t\t\texport type Issue281 = {\n\t\t\t\tdefault_unity_arguments: string[],\n\t\t\t};\n\n\t\t\t/**  https://github.com/specta-rs/specta/issues/374 */\n\t\t\texport type Issue374 = $s$.test.types.Issue374_Serialize | $s$.test.types.Issue374_Deserialize;\n\n\t\t\t/**  https://github.com/specta-rs/specta/issues/374 */\n\t\t\texport type Issue374_Deserialize = {\n\t\t\t\tfoo?: boolean,\n\t\t\t\tbar?: boolean,\n\t\t\t};\n\n\t\t\t/**  https://github.com/specta-rs/specta/issues/374 */\n\t\t\texport type Issue374_Serialize = {\n\t\t\t\tfoo?: boolean,\n\t\t\t\tbar?: boolean,\n\t\t\t};\n\n\t\t\texport type KebabCase = {\n\t\t\t\t\"test-ing\": string,\n\t\t\t};\n\n\t\t\texport type LifetimeGenericEnum<T> = ({ Borrowed: T }) & { Owned?: never } | ({ Owned: T }) & { Borrowed?: never };\n\n\t\t\texport type LifetimeGenericStruct<T> = {\n\t\t\t\tborrowed: T[],\n\t\t\t\towned: T[],\n\t\t\t};\n\n\t\t\texport type LoadProjectEvent = { event: \"started\"; data: {\n\tprojectName: string,\n} } | { event: \"progressTest\"; data: {\n\tprojectName: string,\n\tstatus: string,\n\tprogress: number,\n} } | { event: \"finished\"; data: {\n\tprojectName: string,\n} };\n\n\t\t\texport type MacroEnum = ({ Demo: string }) & { Demo2?: never } | ({ Demo2: {\n\tdemo2: string,\n} }) & { Demo?: never };\n\n\t\t\texport type MacroStruct = string;\n\n\t\t\texport type MacroStruct2 = {\n\t\t\t\tdemo: string,\n\t\t\t};\n\n\t\t\texport type MaybeValidKey<T> = T;\n\n\t\t\texport type MyEmptyInput = Record<string, never>;\n\n\t\t\texport type MyEnum = ({ A: string }) & { B?: never } | ({ B: number }) & { A?: never };\n\n\t\t\texport type MyEnumAdjacent = { t: \"Variant\"; c: {\n\tinner: $s$.test.types.First,\n} };\n\n\t\t\texport type MyEnumExternal = { Variant: {\n\tinner: $s$.test.types.First,\n} };\n\n\t\t\texport type MyEnumTagged = { type: \"Variant\"; inner: $s$.test.types.First };\n\n\t\t\texport type MyEnumUntagged = { inner: $s$.test.types.First };\n\n\t\t\texport type NamedConstGeneric = {\n\t\t\t\tdata: number[],\n\t\t\t\ta: number[],\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type NamedConstGenericContainer = {\n\t\t\t\ta: $s$.test.types.NamedConstGeneric,\n\t\t\t\tb: $s$.test.types.NamedConstGeneric,\n\t\t\t\td: [number, number],\n\t\t\t};\n\n\t\t\texport type NestedEnum = { type: \"a\"; value: string } | { type: \"b\"; value: number };\n\n\t\t\texport type Ninth = { t: \"A\"; c: string } | { t: \"B\" } | { t: \"C\"; c: {\n\ta: string,\n} } | { t: \"D\"; c: $s$.test.types.First };\n\n\t\t\texport type NonOptional = string | null;\n\n\t\t\texport type Optional = $s$.test.types.Optional_Serialize | $s$.test.types.Optional_Deserialize;\n\n\t\t\texport type OptionalInEnum = ({ A?: string | null }) & { B?: never; C?: never } | ({ B: {\n\ta: string | null,\n} }) & { A?: never; C?: never } | ({ C: {\n\ta?: string | null,\n} }) & { A?: never; B?: never };\n\n\t\t\texport type OptionalOnNamedField = string | null;\n\n\t\t\texport type OptionalOnTransparentNamedField = {\n\t\t\t\tb: string | null,\n\t\t\t};\n\n\t\t\texport type Optional_Deserialize = {\n\t\t\t\ta: number | null,\n\t\t\t\tb?: number | null,\n\t\t\t\tc: string | null,\n\t\t\t\td?: boolean,\n\t\t\t};\n\n\t\t\texport type Optional_Serialize = {\n\t\t\t\ta: number | null,\n\t\t\t\tb?: number | null,\n\t\t\t\tc?: string | null,\n\t\t\t\td: boolean,\n\t\t\t};\n\n\t\t\texport type OverridenStruct = {\n\t\t\t\toverriden_field: string,\n\t\t\t};\n\n\t\t\texport type Pair<Z, A> = {\n\t\t\t\tfirst: Z,\n\t\t\t\tsecond: A,\n\t\t\t};\n\n\t\t\texport type PlaceholderInnerField = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type Recursive = {\n\t\t\t\tdemo: $s$.test.types.Recursive,\n\t\t\t};\n\n\t\t\texport type RecursiveInEnum = { A: {\n\tdemo: $s$.test.types.RecursiveInEnum,\n} };\n\n\t\t\texport type RecursiveInline = $s$.test.types.RecursiveInline;\n\n\t\t\texport type RecursiveMapValue = {\n\t\t\t\tdemo: { [key in string]: $s$.test.types.RecursiveMapValue },\n\t\t\t};\n\n\t\t\texport type RecursiveTransparent = $s$.test.types.RecursiveInline;\n\n\t\t\texport type RefStruct = $s$.test.types.TestEnum;\n\n\t\t\texport type Regular = { [key in string]: null };\n\n\t\t\texport type Rename = \"OneWord\" | \"Two words\";\n\n\t\t\texport type RenameSerdeSpecialChar = {\n\t\t\t\t\"a/b\": number,\n\t\t\t};\n\n\t\t\texport type RenameWithWeirdCharsField = {\n\t\t\t\t\"@odata.context\": string,\n\t\t\t};\n\n\t\t\texport type RenameWithWeirdCharsVariant = { \"@odata.context\": string };\n\n\t\t\texport type RenamedFieldKeys = {\n\t\t\t\t\"\": string,\n\t\t\t\t\"a\\\"b\": string,\n\t\t\t\t\"a\\\\b\": string,\n\t\t\t\t\"line\\nbreak\": string,\n\t\t\t\t\"line\\u2028break\": string,\n\t\t\t\t\"line\\u2029break\": string,\n\t\t\t};\n\n\t\t\texport type RenamedVariantWithSkippedPayload = \"a-b\";\n\n\t\t\texport type Second = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type Seventh = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: $s$.test.types.Second,\n\t\t\t};\n\n\t\t\texport type SimpleStruct = {\n\t\t\t\ta: number,\n\t\t\t\tb: string,\n\t\t\t\tc: [number, string, number],\n\t\t\t\td: string[],\n\t\t\t\te: string | null,\n\t\t\t};\n\n\t\t\t/**  Some single-line comment */\n\t\t\texport type SingleLineComment = \n\t\t\t/**  Some single-line comment */\n({ A: number }) & { B?: never } | \n\t\t\t/**  Some single-line comment */\n({ B: {\n\t/**  Some single-line comment */\n\ta: number,\n} }) & { A?: never };\n\n\t\t\texport type Sixth = {\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: $s$.test.types.First,\n\t\t\t};\n\n\t\t\texport type SkipField = {\n\t\t\t\tb: number,\n\t\t\t};\n\n\t\t\texport type SkipNamedFieldInVariant = ({ A: Record<string, never> }) & { B?: never } | ({ B: {\n\tb: number,\n} }) & { A?: never };\n\n\t\t\texport type SkipOnlyField = Record<string, never>;\n\n\t\t\texport type SkipStructFields = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type SkipUnnamedFieldInVariant = \"A\" | { B: [number] };\n\n\t\t\texport type SkipVariant = { A: string };\n\n\t\t\texport type SkipVariant2 = { tag: \"A\"; data: string };\n\n\t\t\texport type SkipVariant3 = { A: {\n\ta: string,\n} };\n\n\t\t\texport type SkippedFieldWithinVariant = { type: \"A\" } | { type: \"B\"; data: string };\n\n\t\t\texport type SpectaSkipNonTypeField = {\n\t\t\t\ta: number,\n\t\t\t};\n\n\t\t\texport type SpectaTypeOverride = {\n\t\t\t\tstring_ident: string,\n\t\t\t\tu32_ident: number,\n\t\t\t\tpath: string,\n\t\t\t\ttuple: [string, number],\n\t\t\t};\n\n\t\t\texport type Struct2 = {\n\t\t\t\tb: string,\n\t\t\t};\n\n\t\t\texport type StructNew = {\n\t\t\t\tt: \"StructNew\",\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type StructPhaseSpecificRename = $s$.test.types.StructPhaseSpecificRenameSerialize | $s$.test.types.StructPhaseSpecificRenameDeserialize;\n\n\t\t\texport type StructPhaseSpecificRenameDeserialize = {\n\t\t\t\tkind: \"StructPhaseSpecificRenameDeserialize\",\n\t\t\t\tder: string,\n\t\t\t};\n\n\t\t\texport type StructPhaseSpecificRenameSerialize = {\n\t\t\t\tkind: \"StructPhaseSpecificRenameSerialize\",\n\t\t\t\tser: string,\n\t\t\t};\n\n\t\t\texport type StructRenameAllUppercase = {\n\t\t\t\tA: number,\n\t\t\t\tB: number,\n\t\t\t};\n\n\t\t\texport type StructWithAlias = {\n\t\t\t\tfield: string,\n\t\t\t};\n\n\t\t\texport type StructWithAliasAndRename = {\n\t\t\t\trenamed_field: string,\n\t\t\t};\n\n\t\t\texport type StructWithMultipleAliases = {\n\t\t\t\tfield: string,\n\t\t\t};\n\n\t\t\texport type TagOnStructWithInline = {\n\t\t\t\ttype: \"TagOnStructWithInline\",\n\t\t\t\ta: $s$.test.types.First,\n\t\t\t\tb: {\n\t\t\t\t\ta: string,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\texport type Tenth = string | \"B\" | {\n\ta: string,\n} | $s$.test.types.First;\n\n\t\t\texport type TestCollectionRegister = never;\n\n\t\t\texport type TestEnum = \"Unit\" | ({ Single: number }) & { Multiple?: never; Struct?: never } | ({ Multiple: [number, number] }) & { Single?: never; Struct?: never } | ({ Struct: {\n\ta: number,\n} }) & { Multiple?: never; Single?: never };\n\n\t\t\texport type Third = {\n\t\t\t\tb: { [key in string]: string },\n\t\t\t\tc: $s$.test.types.First,\n\t\t\t} & $s$.test.types.First;\n\n\t\t\texport type ToBeFlattened = {\n\t\t\t\ta: string,\n\t\t\t};\n\n\t\t\texport type TransparentStruct = string;\n\n\t\t\texport type TransparentType = $s$.test.types.TransparentTypeInner;\n\n\t\t\texport type TransparentType2 = null;\n\n\t\t\texport type TransparentTypeInner = {\n\t\t\t\tinner: string,\n\t\t\t};\n\n\t\t\texport type TransparentTypeWithOverride = string;\n\n\t\t\texport type TransparentWithSkip = null;\n\n\t\t\texport type TransparentWithSkip2 = string;\n\n\t\t\texport type TransparentWithSkip3 = string;\n\n\t\t\texport type TupleNested = [number[], [number[], number[]], [number[], number[], number[]]];\n\n\t\t\texport type TupleStruct = string;\n\n\t\t\texport type TupleStruct1 = number;\n\n\t\t\texport type TupleStruct3 = [number, boolean, string];\n\n\t\t\texport type TupleStructWithRep = string;\n\n\t\t\texport type Unit1 = null;\n\n\t\t\texport type Unit2 = Record<string, never>;\n\n\t\t\texport type Unit3 = [];\n\n\t\t\texport type Unit4 = null;\n\n\t\t\texport type Unit5 = \"A\";\n\n\t\t\texport type Unit6 = { A: null };\n\n\t\t\texport type Unit7 = { A: Record<string, never> };\n\n\t\t\texport type UnitVariants = \"A\" | \"B\" | \"C\";\n\n\t\t\texport type UntaggedVariants = string | number | { id: string } | [string, boolean];\n\n\t\t\texport type UntaggedVariantsKey = string | number;\n\n\t\t\texport type UntaggedVariantsWithDuplicateBranches = null | number;\n\n\t\t\texport type UntaggedVariantsWithoutValue = string | [number, string] | number;\n\n\t\t\texport type UntaggedWithAlias = ({ field: string }) & { other?: never } | ({ other: number }) & { field?: never };\n\n\t\t\texport type ValidMaybeValidKey = { [key in $s$.test.types.MaybeValidKey<string>]: null };\n\n\t\t\texport type ValidMaybeValidKeyNested = { [key in $s$.test.types.MaybeValidKey<$s$.test.types.MaybeValidKey<string>>]: null };\n\n\t\t\texport namespace type_type {\n\t\t\t\texport type Type = never;\n\t\t\t}\n\t\t}\n\t}\n\n\texport namespace tests {\n\n\t\texport namespace tests {\n\n\t\t\texport namespace types {\n\t\t\t\texport type Primitives = {\n\t\t\t\t\ti8: number,\n\t\t\t\t\ti16: number,\n\t\t\t\t\ti32: number,\n\t\t\t\t\tu8: number,\n\t\t\t\t\tu16: number,\n\t\t\t\t\tu32: number,\n\t\t\t\t\tf32: number,\n\t\t\t\t\tf64: number,\n\t\t\t\t\tbool: boolean,\n\t\t\t\t\tchar: string,\n\t\t\t\t\t\"Range<i32>\": $s$.std.ops.Range<number>,\n\t\t\t\t\t\"RangeInclusive<i32>\": $s$.std.ops.RangeInclusive<number>,\n\t\t\t\t\t\"()\": null,\n\t\t\t\t\t\"(String, i32)\": [string, number],\n\t\t\t\t\t\"(String, i32, bool)\": [string, number, boolean],\n\t\t\t\t\t\"((String, i32), (bool, char, bool), ())\": [[string, number], [boolean, string, boolean], null],\n\t\t\t\t\t\"(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)\": [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean],\n\t\t\t\t\t\"(Vec<i32>, Vec<bool>)\": [number[], boolean[]],\n\t\t\t\t\tString: string,\n\t\t\t\t\tPathBuf: string,\n\t\t\t\t\tIpAddr: string,\n\t\t\t\t\tIpv4Addr: string,\n\t\t\t\t\tIpv6Addr: string,\n\t\t\t\t\tSocketAddr: string,\n\t\t\t\t\tSocketAddrV4: string,\n\t\t\t\t\tSocketAddrV6: string,\n\t\t\t\t\t\"Cow<'static, str>\": string,\n\t\t\t\t\t\"Cow<'static, i32>\": number,\n\t\t\t\t\t\"&'static str\": string,\n\t\t\t\t\t\"&'static bool\": boolean,\n\t\t\t\t\t\"&'static i32\": number,\n\t\t\t\t\t\"Vec<i32>\": number[],\n\t\t\t\t\t\"&'static [i32]\": number[],\n\t\t\t\t\t\"&'static [i32; 3]\": [number, number, number],\n\t\t\t\t\t\"[i32; 3]\": [number, number, number],\n\t\t\t\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\t\"&'static [MyEnum]\": $s$.test.types.MyEnum[],\n\t\t\t\t\t\"&'static [MyEnum; 6]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t\"[MyEnum; 2]\": [$s$.test.types.MyEnum, $s$.test.types.MyEnum],\n\t\t\t\t\t\"&'static [i32; 1]\": [number],\n\t\t\t\t\t\"&'static [i32; 0]\": [],\n\t\t\t\t\t\"Option<i32>\": number | null,\n\t\t\t\t\t\"Option<()>\": null,\n\t\t\t\t\t\"Option<Vec<i32>>\": number[] | null,\n\t\t\t\t\t\"Result<String, i32>\": $s$.std.result.Result<string, number>,\n\t\t\t\t\t\"Vec<Option<Cow<'static, i32>>>\": (number | null)[],\n\t\t\t\t\t\"Option<Vec<Cow<'static, i32>>>\": number[] | null,\n\t\t\t\t\t\"[Vec<String>; 3]\": [string[], string[], string[]],\n\t\t\t\t\t\"Option<Option<String>>\": string | null,\n\t\t\t\t\t\"Option<Option<Option<String>>>\": string | null,\n\t\t\t\t\t\"PhantomData<()>\": null,\n\t\t\t\t\t\"PhantomData<String>\": null,\n\t\t\t\t\tInfallible: never,\n\t\t\t\t\tUnit1: $s$.test.types.Unit1,\n\t\t\t\t\tUnit2: $s$.test.types.Unit2,\n\t\t\t\t\tUnit3: $s$.test.types.Unit3,\n\t\t\t\t\tUnit4: $s$.test.types.Unit4,\n\t\t\t\t\tUnit5: $s$.test.types.Unit5,\n\t\t\t\t\tUnit6: $s$.test.types.Unit6,\n\t\t\t\t\tUnit7: $s$.test.types.Unit7,\n\t\t\t\t\tSimpleStruct: $s$.test.types.SimpleStruct,\n\t\t\t\t\tTupleStruct1: $s$.test.types.TupleStruct1,\n\t\t\t\t\tTupleStruct3: $s$.test.types.TupleStruct3,\n\t\t\t\t\tTestEnum: $s$.test.types.TestEnum,\n\t\t\t\t\tRefStruct: $s$.test.types.RefStruct,\n\t\t\t\t\tInlinerStruct: $s$.test.types.InlinerStruct,\n\t\t\t\t\t\"GenericStruct<i32>\": $s$.test.types.GenericStruct<number>,\n\t\t\t\t\t\"GenericStruct<String>\": $s$.test.types.GenericStruct<string>,\n\t\t\t\t\tFlattenEnumStruct: $s$.test.types.FlattenEnumStruct,\n\t\t\t\t\tOverridenStruct: $s$.test.types.OverridenStruct,\n\t\t\t\t\tHasGenericAlias: $s$.test.types.HasGenericAlias,\n\t\t\t\t\tEnumMacroAttributes: $s$.test.types.EnumMacroAttributes,\n\t\t\t\t\tInlineEnumField: $s$.test.types.InlineEnumField,\n\t\t\t\t\tInlineOptionalType: $s$.test.types.InlineOptionalType,\n\t\t\t\t\tRename: $s$.test.types.Rename,\n\t\t\t\t\tTransparentType: $s$.test.types.TransparentType,\n\t\t\t\t\tTransparentType2: $s$.test.types.TransparentType2,\n\t\t\t\t\tTransparentTypeWithOverride: $s$.test.types.TransparentTypeWithOverride,\n\t\t\t\t\t\"[Option<u8>; 3]\": [(number | null), (number | null), (number | null)],\n\t\t\t\t\t\"HashMap<BasicEnum, ()>\": Partial<{ [key in $s$.test.types.BasicEnum]: null }>,\n\t\t\t\t\t\"HashMap<BasicEnum, i32>\": Partial<{ [key in $s$.test.types.BasicEnum]: number }>,\n\t\t\t\t\t\"Option<Option<Option<Option<i32>>>>\": number | null,\n\t\t\t\t\t\"Vec<PlaceholderInnerField>\": $s$.test.types.PlaceholderInnerField[],\n\t\t\t\t\tEnumReferenceRecordKey: $s$.test.types.EnumReferenceRecordKey,\n\t\t\t\t\tFlattenOnNestedEnum: $s$.test.types.FlattenOnNestedEnum,\n\t\t\t\t\tMyEmptyInput: $s$.test.types.MyEmptyInput,\n\t\t\t\t\t\"(String)\": string,\n\t\t\t\t\t\"(String,)\": [string],\n\t\t\t\t\tExtraBracketsInTupleVariant: $s$.test.types.ExtraBracketsInTupleVariant,\n\t\t\t\t\tExtraBracketsInUnnamedStruct: $s$.test.types.ExtraBracketsInUnnamedStruct,\n\t\t\t\t\t\"Vec<MyEnum>\": $s$.test.types.MyEnum[],\n\t\t\t\t\tInlineTuple: $s$.test.types.InlineTuple,\n\t\t\t\t\tInlineTuple2: $s$.test.types.InlineTuple2,\n\t\t\t\t\t\"Box<str>\": string,\n\t\t\t\t\t\"Box<String>\": string,\n\t\t\t\t\tSkippedFieldWithinVariant: $s$.test.types.SkippedFieldWithinVariant,\n\t\t\t\t\tKebabCase: $s$.test.types.KebabCase,\n\t\t\t\t\t\"&[&str]\": string[],\n\t\t\t\t\t\"Issue281<'_>\": $s$.test.types.Issue281,\n\t\t\t\t\t\"LifetimeGenericStruct<'_, i32>\": $s$.test.types.LifetimeGenericStruct<number>,\n\t\t\t\t\t\"LifetimeGenericEnum<'_, i32>\": $s$.test.types.LifetimeGenericEnum<number>,\n\t\t\t\t\tRenameWithWeirdCharsField: $s$.test.types.RenameWithWeirdCharsField,\n\t\t\t\t\tRenameWithWeirdCharsVariant: $s$.test.types.RenameWithWeirdCharsVariant,\n\t\t\t\t\tRenamedFieldKeys: $s$.test.types.RenamedFieldKeys,\n\t\t\t\t\tRenamedVariantWithSkippedPayload: $s$.test.types.RenamedVariantWithSkippedPayload,\n\t\t\t\t\t\"type_type::Type\": $s$.test.types.type_type.Type,\n\t\t\t\t\tActualType: $s$.test.types.ActualType,\n\t\t\t\t\tSpectaTypeOverride: $s$.test.types.SpectaTypeOverride,\n\t\t\t\t\tContainerTypeOverrideStruct: $s$.test.types.ContainerTypeOverrideStruct,\n\t\t\t\t\tContainerTypeOverrideEnum: $s$.test.types.ContainerTypeOverrideEnum,\n\t\t\t\t\t\"ContainerTypeOverrideGeneric<Box<dyn Any>>\": $s$.test.types.ContainerTypeOverrideGeneric,\n\t\t\t\t\t\"ContainerTypeOverrideToGeneric<i32>\": $s$.test.types.ContainerTypeOverrideToGeneric<number>,\n\t\t\t\t\tContainerTypeOverrideTuple: $s$.test.types.ContainerTypeOverrideTuple,\n\t\t\t\t\t\"ContainerTypeOverrideTupleGeneric<i32>\": $s$.test.types.ContainerTypeOverrideTupleGeneric<number>,\n\t\t\t\t\tInvalidToValidType: $s$.test.types.InvalidToValidType,\n\t\t\t\t\tTupleStruct: $s$.test.types.TupleStruct,\n\t\t\t\t\tTupleStructWithRep: $s$.test.types.TupleStructWithRep,\n\t\t\t\t\t\"GenericTupleStruct<String>\": $s$.test.types.GenericTupleStruct<string>,\n\t\t\t\t\tBracedStruct: $s$.test.types.BracedStruct,\n\t\t\t\t\tStruct: $s$.test.types.StructNew,\n\t\t\t\t\tStruct2: $s$.test.types.Struct2,\n\t\t\t\t\tEnum: $s$.test.types.Enum,\n\t\t\t\t\tEnum2: $s$.test.types.Enum2,\n\t\t\t\t\tEnum3: $s$.test.types.Enum3,\n\t\t\t\t\tStructRenameAllUppercase: $s$.test.types.StructRenameAllUppercase,\n\t\t\t\t\tRenameSerdeSpecialChar: $s$.test.types.RenameSerdeSpecialChar,\n\t\t\t\t\tEnumRenameAllUppercase: $s$.test.types.EnumRenameAllUppercase,\n\t\t\t\t\tRecursive: $s$.test.types.Recursive,\n\t\t\t\t\tRecursiveMapValue: $s$.test.types.RecursiveMapValue,\n\t\t\t\t\tRecursiveTransparent: $s$.test.types.RecursiveTransparent,\n\t\t\t\t\tRecursiveInEnum: $s$.test.types.RecursiveInEnum,\n\t\t\t\t\tNonOptional: $s$.test.types.NonOptional,\n\t\t\t\t\tOptionalOnNamedField: $s$.test.types.OptionalOnNamedField,\n\t\t\t\t\tOptionalOnTransparentNamedField: $s$.test.types.OptionalOnTransparentNamedField,\n\t\t\t\t\tOptionalInEnum: $s$.test.types.OptionalInEnum,\n\t\t\t\t\tUntaggedVariants: $s$.test.types.UntaggedVariants,\n\t\t\t\t\tUntaggedVariantsWithoutValue: $s$.test.types.UntaggedVariantsWithoutValue,\n\t\t\t\t\tUntaggedVariantsWithDuplicateBranches: $s$.test.types.UntaggedVariantsWithDuplicateBranches,\n\t\t\t\t\t\"HashMap<String, ()>\": { [key in string]: null },\n\t\t\t\t\tRegular: $s$.test.types.Regular,\n\t\t\t\t\t\"HashMap<Infallible, ()>\": { [key in never]: null },\n\t\t\t\t\t\"HashMap<TransparentStruct, ()>\": { [key in $s$.test.types.TransparentStruct]: null },\n\t\t\t\t\t\"HashMap<UnitVariants, ()>\": Partial<{ [key in $s$.test.types.UnitVariants]: null }>,\n\t\t\t\t\t\"HashMap<UntaggedVariantsKey, ()>\": Partial<{ [key in $s$.test.types.UntaggedVariantsKey]: null }>,\n\t\t\t\t\tValidMaybeValidKey: $s$.test.types.ValidMaybeValidKey,\n\t\t\t\t\tValidMaybeValidKeyNested: $s$.test.types.ValidMaybeValidKeyNested,\n\t\t\t\t\tMacroStruct: $s$.test.types.MacroStruct,\n\t\t\t\t\tMacroStruct2: $s$.test.types.MacroStruct2,\n\t\t\t\t\tMacroEnum: $s$.test.types.MacroEnum,\n\t\t\t\t\tDeprecatedType: $s$.test.types.DeprecatedType,\n\t\t\t\t\tDeprecatedTypeWithMsg: $s$.test.types.DeprecatedTypeWithMsg,\n\t\t\t\t\tDeprecatedTypeWithMsg2: $s$.test.types.DeprecatedTypeWithMsg2,\n\t\t\t\t\tDeprecatedFields: $s$.test.types.DeprecatedFields,\n\t\t\t\t\tDeprecatedTupleVariant: $s$.test.types.DeprecatedTupleVariant,\n\t\t\t\t\tDeprecatedEnumVariants: $s$.test.types.DeprecatedEnumVariants,\n\t\t\t\t\tCommentedStruct: $s$.test.types.CommentedStruct,\n\t\t\t\t\tCommentedEnum: $s$.test.types.CommentedEnum,\n\t\t\t\t\tSingleLineComment: $s$.test.types.SingleLineComment,\n\t\t\t\t\tNonGeneric: $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"HalfGenericA<u8>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"HalfGenericB<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"FullGeneric<u8, bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"Another<bool>\": $s$.test.types.Demo<number, boolean>,\n\t\t\t\t\t\"MapA<u32>\": { [key in string]: number },\n\t\t\t\t\t\"MapB<u32>\": { [key in number]: string },\n\t\t\t\t\t\"MapC<u32>\": { [key in string]: $s$.test.types.AGenericStruct<number> },\n\t\t\t\t\t\"AGenericStruct<u32>\": $s$.test.types.AGenericStruct<number>,\n\t\t\t\t\tA: $s$.test.types.A,\n\t\t\t\t\tDoubleFlattened: $s$.test.types.DoubleFlattened,\n\t\t\t\t\tFlattenedInner: $s$.test.types.FlattenedInner,\n\t\t\t\t\tBoxFlattened: $s$.test.types.BoxFlattened,\n\t\t\t\t\tBoxInline: $s$.test.types.BoxInline,\n\t\t\t\t\tFirst: $s$.test.types.First,\n\t\t\t\t\tSecond: $s$.test.types.Second,\n\t\t\t\t\tThird: $s$.test.types.Third,\n\t\t\t\t\tFourth: $s$.test.types.Fourth,\n\t\t\t\t\tTagOnStructWithInline: $s$.test.types.TagOnStructWithInline,\n\t\t\t\t\tSixth: $s$.test.types.Sixth,\n\t\t\t\t\tSeventh: $s$.test.types.Seventh,\n\t\t\t\t\tEight: $s$.test.types.Eight,\n\t\t\t\t\tNinth: $s$.test.types.Ninth,\n\t\t\t\t\tTenth: $s$.test.types.Tenth,\n\t\t\t\t\tMyEnumTagged: $s$.test.types.MyEnumTagged,\n\t\t\t\t\tMyEnumExternal: $s$.test.types.MyEnumExternal,\n\t\t\t\t\tMyEnumAdjacent: $s$.test.types.MyEnumAdjacent,\n\t\t\t\t\tMyEnumUntagged: $s$.test.types.MyEnumUntagged,\n\t\t\t\t\tEmptyStruct: $s$.test.types.EmptyStruct,\n\t\t\t\t\tEmptyStructWithTag: $s$.test.types.EmptyStructWithTag,\n\t\t\t\t\tAdjacentlyTagged: $s$.test.types.AdjacentlyTagged,\n\t\t\t\t\tLoadProjectEvent: $s$.test.types.LoadProjectEvent,\n\t\t\t\t\tExternallyTagged: $s$.test.types.ExternallyTagged,\n\t\t\t\t\tIssue221External: $s$.test.types.Issue221External,\n\t\t\t\t\tInternallyTaggedD: $s$.test.types.InternallyTaggedD,\n\t\t\t\t\tInternallyTaggedE: $s$.test.types.InternallyTaggedE,\n\t\t\t\t\tInternallyTaggedF: $s$.test.types.InternallyTaggedF,\n\t\t\t\t\tInternallyTaggedH: $s$.test.types.InternallyTaggedH,\n\t\t\t\t\tInternallyTaggedL: $s$.test.types.InternallyTaggedL,\n\t\t\t\t\tInternallyTaggedM: $s$.test.types.InternallyTaggedM,\n\t\t\t\t\tStructWithAlias: $s$.test.types.StructWithAlias,\n\t\t\t\t\tStructWithMultipleAliases: $s$.test.types.StructWithMultipleAliases,\n\t\t\t\t\tStructWithAliasAndRename: $s$.test.types.StructWithAliasAndRename,\n\t\t\t\t\tEnumWithVariantAlias: $s$.test.types.EnumWithVariantAlias,\n\t\t\t\t\tEnumWithMultipleVariantAliases: $s$.test.types.EnumWithMultipleVariantAliases,\n\t\t\t\t\tEnumWithVariantAliasAndRename: $s$.test.types.EnumWithVariantAliasAndRename,\n\t\t\t\t\tInternallyTaggedWithAlias: $s$.test.types.InternallyTaggedWithAlias,\n\t\t\t\t\tAdjacentlyTaggedWithAlias: $s$.test.types.AdjacentlyTaggedWithAlias,\n\t\t\t\t\tUntaggedWithAlias: $s$.test.types.UntaggedWithAlias,\n\t\t\t\t\tIssue221UntaggedSafe: $s$.test.types.Issue221UntaggedSafe,\n\t\t\t\t\tIssue221UntaggedMixed: $s$.test.types.Issue221UntaggedMixed,\n\t\t\t\t\tEmptyEnum: $s$.test.types.EmptyEnum,\n\t\t\t\t\tEmptyEnumTagged: $s$.test.types.EmptyEnumTagged,\n\t\t\t\t\tEmptyEnumTaggedWContent: $s$.test.types.EmptyEnumTaggedWContent,\n\t\t\t\t\tEmptyEnumUntagged: $s$.test.types.EmptyEnumUntagged,\n\t\t\t\t\tSkipOnlyField: $s$.test.types.SkipOnlyField,\n\t\t\t\t\tSkipField: $s$.test.types.SkipField,\n\t\t\t\t\tSkipVariant: $s$.test.types.SkipVariant,\n\t\t\t\t\tSkipUnnamedFieldInVariant: $s$.test.types.SkipUnnamedFieldInVariant,\n\t\t\t\t\tSkipNamedFieldInVariant: $s$.test.types.SkipNamedFieldInVariant,\n\t\t\t\t\tTransparentWithSkip: $s$.test.types.TransparentWithSkip,\n\t\t\t\t\tTransparentWithSkip2: $s$.test.types.TransparentWithSkip2,\n\t\t\t\t\tTransparentWithSkip3: $s$.test.types.TransparentWithSkip3,\n\t\t\t\t\tSkipVariant2: $s$.test.types.SkipVariant2,\n\t\t\t\t\tSkipVariant3: $s$.test.types.SkipVariant3,\n\t\t\t\t\tSkipStructFields: $s$.test.types.SkipStructFields,\n\t\t\t\t\tSpectaSkipNonTypeField: $s$.test.types.SpectaSkipNonTypeField,\n\t\t\t\t\tFlattenA: $s$.test.types.FlattenA,\n\t\t\t\t\tFlattenB: $s$.test.types.FlattenB,\n\t\t\t\t\tFlattenC: $s$.test.types.FlattenC,\n\t\t\t\t\tFlattenD: $s$.test.types.FlattenD,\n\t\t\t\t\tFlattenE: $s$.test.types.FlattenE,\n\t\t\t\t\tFlattenF: $s$.test.types.FlattenF,\n\t\t\t\t\tFlattenG: $s$.test.types.FlattenG,\n\t\t\t\t\tTupleNested: $s$.test.types.TupleNested,\n\t\t\t\t\t\"Generic1<()>\": $s$.test.types.Generic1<null>,\n\t\t\t\t\t\"GenericAutoBound<()>\": $s$.test.types.GenericAutoBound<null>,\n\t\t\t\t\t\"GenericAutoBound2<()>\": $s$.test.types.GenericAutoBound2<null>,\n\t\t\t\t\tContainer1: $s$.test.types.Container1,\n\t\t\t\t\t\"Generic2<(), String, i32>\": $s$.test.types.Generic2<null, string, number>,\n\t\t\t\t\t\"GenericNewType1<()>\": $s$.test.types.GenericNewType1<null>,\n\t\t\t\t\t\"GenericTuple<()>\": $s$.test.types.GenericTuple<null>,\n\t\t\t\t\t\"GenericStruct2<()>\": $s$.test.types.GenericStruct2<null>,\n\t\t\t\t\t\"InlineGenericNewtype<String>\": string,\n\t\t\t\t\t\"InlineGenericNested<String>\": [string, string[], [string, string], { [key in string]: string }, string | null, \"Unit\" | ({ Unnamed: string }) & { Named?: never } | ({ Named: {\n\tvalue: string,\n} }) & { Unnamed?: never }],\n\t\t\t\t\t\"InlineFlattenGenericsG<()>\": $s$.test.types.InlineFlattenGenericsG<null>,\n\t\t\t\t\tInlineFlattenGenerics: $s$.test.types.InlineFlattenGenerics,\n\t\t\t\t\tGenericDefault: $s$.test.types.GenericDefault,\n\t\t\t\t\tChainedGenericDefault: $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t\"ChainedGenericDefault<String, String>\": $s$.test.types.ChainedGenericDefault,\n\t\t\t\t\t\"ChainedGenericDefault<i32>\": $s$.test.types.ChainedGenericDefault<number, number>,\n\t\t\t\t\t\"ChainedGenericDefault<String, i32>\": $s$.test.types.ChainedGenericDefault<string, number>,\n\t\t\t\t\tGenericDefaultSkipped: $s$.test.types.GenericDefaultSkipped<string>,\n\t\t\t\t\tGenericDefaultSkippedNonType: $s$.test.types.GenericDefaultSkippedNonType<unknown>,\n\t\t\t\t\tGenericParameterOrderPreserved: $s$.test.types.GenericParameterOrderPreserved,\n\t\t\t\t\tConstGenericInNonConstContainer: $s$.test.types.ConstGenericInNonConstContainer,\n\t\t\t\t\tConstGenericInConstContainer: $s$.test.types.ConstGenericInConstContainer,\n\t\t\t\t\tNamedConstGenericContainer: $s$.test.types.NamedConstGenericContainer,\n\t\t\t\t\tInlineConstGenericContainer: $s$.test.types.InlineConstGenericContainer,\n\t\t\t\t\tInlineRecursiveConstGenericContainer: $s$.test.types.InlineRecursiveConstGenericContainer,\n\t\t\t\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t\tTestCollectionRegister: $s$.test.types.TestCollectionRegister,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\nexport import std = $s$.std;\nexport import test = $s$.test;\nexport import tests = $s$.tests;\n════════════════════════════════════════\n"
  },
  {
    "path": "tests/tests/swift.rs",
    "content": "use std::borrow::Cow;\n\nuse serde::{Deserialize, Serialize};\nuse specta::{Format, Type, Types};\nuse specta_swift::Swift;\n\nstruct IdentityFormat;\n\nimpl Format for IdentityFormat {\n    fn map_types(&'_ self, types: &Types) -> Result<Cow<'_, Types>, specta::FormatError> {\n        Ok(Cow::Owned(types.clone()))\n    }\n\n    fn map_type(\n        &'_ self,\n        _: &Types,\n        dt: &specta::datatype::DataType,\n    ) -> Result<Cow<'_, specta::datatype::DataType>, specta::FormatError> {\n        Ok(Cow::Owned(dt.clone()))\n    }\n}\n\nfn phase_collections(types: Types) -> Vec<(&'static str, Box<dyn Format>, Types)> {\n    vec![\n        (\"raw\", Box::new(IdentityFormat), types.clone()),\n        (\"serde\", Box::new(specta_serde::Format), types.clone()),\n        (\"serde_phases\", Box::new(specta_serde::PhasesFormat), types),\n    ]\n}\n\nfn phase_output(types: &Types, format: impl Format + 'static) -> String {\n    Swift::default().export(types, format).unwrap()\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename_all = \"snake_case\")]\nenum JobStatus {\n    Queued,\n    PendingApproval,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum RegularEnum {\n    VariantOne,\n    VariantTwo,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename_all = \"snake_case\")]\nenum MixedEnum {\n    Unit,\n    WithData(String),\n}\n\n#[test]\nfn swift_export() {\n    let types = Types::default()\n        .register::<JobStatus>()\n        .register::<RegularEnum>()\n        .register::<MixedEnum>();\n\n    for (mode, format, types) in phase_collections(types) {\n        insta::assert_snapshot!(format!(\"swift-export-{mode}\"), phase_output(&types, format));\n    }\n}\n"
  },
  {
    "path": "tests/tests/types.rs",
    "content": "#![allow(deprecated)]\n\nuse std::{\n    any::Any,\n    borrow::Cow,\n    cell::RefCell,\n    collections::{BTreeMap, HashMap, HashSet},\n    convert::Infallible,\n    marker::PhantomData,\n    net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6},\n    ops::{Range, RangeInclusive},\n    path::PathBuf,\n    rc::Rc,\n};\n\nuse serde::{Deserialize, Serialize};\nuse specta::{Type, Types, datatype::DataType};\n\n/// A macro to collect up the types for better testing.\n///\n/// In a real-world application you should prefer the `Types::register` method instead of this.\n/// In this case we can't use it because we intent to test `NamedDataType` and `DataType`'s.\n/// `Types` only registers `NamedDataType` as those are the only types that aren't built-in.\n#[macro_export]\nmacro_rules! types {\n    ($($t:ty),* $(,)?) => {{\n        let mut types = specta::Types::default();\n        let mut dts = Vec::new();\n        let mut s = specta::datatype::Struct::named();\n\n        $({\n            let ty = <$t as specta::Type>::definition(&mut types);\n\n            // Like `Types::register` we are relying on the side-effect of `definition`.\n            // but unlike it also storing the resulting `DataType` for testing the primitives.\n            dts.push((stringify!($t), ty.clone()));\n\n            s = s.field(stringify!($t), specta::datatype::Field::new(ty));\n        })*\n\n        // This allows us to end-to-end test primitives.\n        // Many types won't be directly added to the `Types`, as they are not named.\n        specta::datatype::NamedDataType::new(\"Primitives\", &mut types, |_, ndt| {\n            ndt.ty = Some(s.build());\n        });\n\n        // Test `selection!`\n        {\n            #[derive(Clone)]\n            #[allow(dead_code)]\n            struct User {\n                id: i32,\n                name: &'static str,\n                email: &'static str,\n                age: i32,\n                password: &'static str,\n            }\n\n            fn register<T: specta::Type>(types: &mut specta::Types, _: T) {\n                types.register_mut::<T>();\n            }\n            let user = User {\n                id: 1,\n                name: \"Monty Beaumont\".into(),\n                email: \"monty@otbeaumont.me\".into(),\n                age: 7,\n                password: \"password123\".into(),\n            };\n\n            let s1 = specta_util::selection!(user.clone(), { name, age } as UserSelection);\n            assert_eq!(s1.name, \"Monty Beaumont\");\n            assert_eq!(s1.age, 7);\n            register(&mut types, s1);\n\n            let s2 = specta_util::selection!(vec![user; 3], [{ name, age }] as UserListSelection);\n            assert_eq!(s2[0].name, \"Monty Beaumont\");\n            assert_eq!(s2[0].age, 7);\n            register(&mut types, s2);\n        }\n\n        (types, dts)\n    }};\n}\n\n#[rustfmt::skip]\npub fn types() -> (Types, Vec<(&'static str, DataType)>) {\n    types!(\n        i8, i16, i32,\n        u8, u16, u32,\n        f32, f64, bool, char,\n\n        // Serde is so mega cringe for this. Lack of support and the fact that `0..5` == `0..=5` is so dumb.\n        Range<i32>, // 0..5,\n        // 0..,\n        // ..,\n        RangeInclusive<i32>, // 0..=5,\n        // ..5,\n        // ..=5,\n\n        (),\n        (String, i32),\n        (String, i32, bool),\n        ((String, i32), (bool, char, bool), ()),\n        (bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool),\n        (Vec<i32>, Vec<bool>),\n\n        String, PathBuf,\n        IpAddr, Ipv4Addr, Ipv6Addr,\n        SocketAddr, SocketAddrV4, SocketAddrV6,\n        Cow<'static, str>, Cow<'static, i32>,\n\n        &'static str, &'static bool, &'static i32,\n        Vec<i32>, &'static [i32], &'static [i32; 3], [i32; 3],\n        Vec<MyEnum>, &'static [MyEnum], &'static [MyEnum; 6], [MyEnum; 2],\n        &'static [i32; 1], &'static [i32; 0],\n        Option<i32>, Option<()>, Option<Vec<i32>>,\n        Result<String, i32>,\n        Vec<Option<Cow<'static, i32>>>, Option<Vec<Cow<'static, i32>>>, [Vec<String>; 3],\n\n        Option<Option<String>>,\n        Option<Option<Option<String>>>,\n\n        PhantomData<()>,\n        PhantomData<String>,\n        Infallible,\n\n        // https://github.com/specta-rs/specta/issues/88\n        Unit1, Unit2, Unit3, Unit4, Unit5, Unit6, Unit7,\n\n        SimpleStruct,\n        TupleStruct1,\n        TupleStruct3,\n\n        TestEnum,\n        RefStruct,\n\n        InlinerStruct,\n\n        GenericStruct<i32>,\n        GenericStruct<String>,\n\n        FlattenEnumStruct,\n\n        OverridenStruct,\n        HasGenericAlias,\n\n        EnumMacroAttributes,\n\n        InlineEnumField,\n\n        InlineOptionalType,\n\n        Rename,\n\n        TransparentType,\n        TransparentType2,\n        TransparentTypeWithOverride,\n\n        // https://github.com/specta-rs/specta/issues/66\n        [Option<u8>; 3],\n\n        // https://github.com/specta-rs/specta/issues/65\n        HashMap<BasicEnum, ()>,\n        HashMap<BasicEnum, i32>,\n\n        // https://github.com/specta-rs/specta/issues/60\n        Option<Option<Option<Option<i32>>>>,\n\n        // https://github.com/specta-rs/specta/issues/71\n        Vec<PlaceholderInnerField>,\n\n        EnumReferenceRecordKey,\n\n        FlattenOnNestedEnum,\n\n        MyEmptyInput,\n\n        // https://github.com/specta-rs/specta/issues/142\n        (String),\n        (String,),\n\n        // https://github.com/specta-rs/specta/issues/148\n        ExtraBracketsInTupleVariant,\n        ExtraBracketsInUnnamedStruct,\n\n        // https://github.com/specta-rs/specta/issues/156\n        Vec<MyEnum>,\n\n        InlineTuple,\n        InlineTuple2,\n\n        // https://github.com/specta-rs/specta/issues/220\n        Box<str>,\n        Box<String>,\n\n        SkippedFieldWithinVariant,\n\n        // https://github.com/specta-rs/specta/issues/239\n        KebabCase,\n\n        // https://github.com/specta-rs/specta/issues/281\n        &[&str],\n        Issue281<'_>,\n\n        // https://github.com/specta-rs/specta/issues/317\n        LifetimeGenericStruct<'_, i32>,\n        LifetimeGenericEnum<'_, i32>,\n\n        // https://github.com/specta-rs/specta/issues/90\n        RenameWithWeirdCharsField,\n        RenameWithWeirdCharsVariant,\n        RenamedFieldKeys,\n        RenamedVariantWithSkippedPayload,\n\n        // https://github.com/specta-rs/specta/issues/386\n        type_type::Type,\n\n        // https://github.com/specta-rs/specta/issues/171\n        ActualType,\n\n        SpectaTypeOverride,\n        ContainerTypeOverrideStruct,\n        ContainerTypeOverrideEnum,\n        ContainerTypeOverrideGeneric<Box<dyn Any>>,\n        ContainerTypeOverrideToGeneric<i32>,\n        ContainerTypeOverrideTuple,\n        ContainerTypeOverrideTupleGeneric<i32>,\n        InvalidToValidType,\n\n        // `#[specta(transparent)]`\n        TupleStruct,\n        TupleStructWithRep,\n        GenericTupleStruct<String>,\n        BracedStruct,\n\n        // `#[serde(rename)]`\n        Struct,\n        Struct2,\n        Enum,\n        Enum2,\n        Enum3,\n        StructRenameAllUppercase,\n        RenameSerdeSpecialChar,\n        EnumRenameAllUppercase,\n\n        // Recursive types\n        Recursive,\n        RecursiveMapValue,\n        RecursiveTransparent,\n        RecursiveInEnum,\n\n        // `#[serde(optional)]`\n        NonOptional,\n        OptionalOnNamedField,\n        OptionalOnTransparentNamedField,\n        OptionalInEnum,\n\n        UntaggedVariants,\n        UntaggedVariantsWithoutValue,\n        UntaggedVariantsWithDuplicateBranches,\n\n        // Valid Map keys\n        HashMap<String, ()>,\n        Regular,\n        HashMap<Infallible, ()>,\n        HashMap<TransparentStruct, ()>,\n        HashMap<UnitVariants, ()>,\n        HashMap<UntaggedVariantsKey, ()>,\n        ValidMaybeValidKey,\n        ValidMaybeValidKeyNested,\n\n        // `macro_rules!` in decl\n        MacroStruct,\n        MacroStruct2,\n        MacroEnum,\n\n        // Deprecated\n        DeprecatedType,\n        DeprecatedTypeWithMsg,\n        DeprecatedTypeWithMsg2,\n        DeprecatedFields,\n        DeprecatedTupleVariant,\n        DeprecatedEnumVariants,\n\n        // Comments\n        CommentedStruct,\n        CommentedEnum,\n        SingleLineComment,\n\n        // Type aliases\n        NonGeneric,\n        HalfGenericA<u8>,\n        HalfGenericB<bool>,\n        FullGeneric<u8, bool>,\n        Another<bool>,\n        MapA<u32>,\n        MapB<u32>,\n        MapC<u32>,\n        AGenericStruct<u32>,\n\n        A,\n        DoubleFlattened,\n        FlattenedInner,\n        BoxFlattened,\n        BoxInline,\n\n        // Flatten and inline\n        First,\n        Second,\n        Third,\n        Fourth,\n        TagOnStructWithInline,\n        Sixth,\n        Seventh,\n        Eight,\n        Ninth,\n        Tenth,\n\n        // Test for issue #393 - flatten in enum variants\n        MyEnumTagged,\n        MyEnumExternal,\n        MyEnumAdjacent,\n        MyEnumUntagged,\n\n        // https://github.com/specta-rs/specta/issues/174\n        EmptyStruct,\n        EmptyStructWithTag,\n\n        // Serde - Adjacently Tagged\n        AdjacentlyTagged,\n        LoadProjectEvent,\n\n        // Serde - Externally Tagged\n        ExternallyTagged,\n        Issue221External,\n\n        // Serde - Internally Tagged\n        InternallyTaggedD,\n        InternallyTaggedE,\n        InternallyTaggedF,\n        InternallyTaggedH,\n        InternallyTaggedL,\n        InternallyTaggedM,\n\n        // Alias\n        StructWithAlias,\n        StructWithMultipleAliases,\n        StructWithAliasAndRename,\n\n        EnumWithVariantAlias,\n        EnumWithMultipleVariantAliases,\n        EnumWithVariantAliasAndRename,\n\n        InternallyTaggedWithAlias,\n        AdjacentlyTaggedWithAlias,\n        UntaggedWithAlias,\n        Issue221UntaggedSafe,\n        Issue221UntaggedMixed,\n\n        // https://github.com/specta-rs/specta/issues/174\n        // `never & { tag = \"a\" }` would coalesce to `never` so we don't need to include it.\n        EmptyEnum,\n        EmptyEnumTagged,\n        EmptyEnumTaggedWContent,\n        EmptyEnumUntagged,\n\n        // Skip\n        SkipOnlyField,\n        SkipField,\n        SkipVariant,\n        SkipUnnamedFieldInVariant,\n        SkipNamedFieldInVariant,\n        TransparentWithSkip,\n        TransparentWithSkip2,\n        TransparentWithSkip3,\n        SkipVariant2,\n        SkipVariant3,\n        SkipStructFields,\n        SpectaSkipNonTypeField,\n\n        // Flatten\n        FlattenA,\n        FlattenB,\n        FlattenC,\n        FlattenD,\n        FlattenE,\n        FlattenF,\n        FlattenG,\n\n        // Generic Fields\n        TupleNested,\n\n        // Generic\n        Generic1<()>,\n        GenericAutoBound<()>,\n        GenericAutoBound2<()>,\n        Container1,\n        Generic2<(), String, i32>,\n        GenericNewType1<()>,\n        GenericTuple<()>,\n        GenericStruct2<()>,\n        InlineGenericNewtype<String>,\n        InlineGenericNested<String>,\n        InlineFlattenGenericsG<()>,\n        InlineFlattenGenerics,\n        GenericDefault,\n        ChainedGenericDefault,\n        ChainedGenericDefault<String, String>,\n        ChainedGenericDefault<i32>,\n        ChainedGenericDefault<String, i32>,\n        GenericDefaultSkipped,\n        GenericDefaultSkippedNonType,\n        GenericParameterOrderPreserved,\n\n        // Tests for handling of const generics\n        // Especially when inlining and flattening as it changes.\n        ConstGenericInNonConstContainer,\n        ConstGenericInConstContainer,\n        NamedConstGenericContainer,\n        InlineConstGenericContainer,\n        InlineRecursiveConstGenericContainer,\n\n        // Test that the types don't get duplicated in the type map.\n        // (these will be duplicated in dts tests as that doesn't use the typemap)\n        TestCollectionRegister,\n        TestCollectionRegister,\n    )\n}\n\n#[rustfmt::skip]\npub fn types_phased() -> (Types, Vec<(&'static str, DataType)>) {\n    let mut types = Types::default();\n    let mut dts = Vec::new();\n\n    // https://github.com/specta-rs/specta/issues/374\n    register!(types, dts;\n        Issue374,\n        Optional,\n        StructPhaseSpecificRename,\n    );\n\n    (types, dts)\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\npub enum TestCollectionRegister {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Unit1;\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Unit2 {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Unit3();\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Unit4(());\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum Unit5 {\n    A,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum Unit6 {\n    A(),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum Unit7 {\n    A {},\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct SimpleStruct {\n    a: i32,\n    b: String,\n    c: (i32, String, RefCell<i32>),\n    d: Vec<String>,\n    e: Option<String>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct TupleStruct1(i32);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct TupleStruct3(i32, bool, String);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename = \"HasBeenRenamed\")]\nstruct RenamedStruct;\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum TestEnum {\n    Unit,\n    Single(i32),\n    Multiple(i32, i32),\n    Struct { a: i32 },\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct RefStruct(TestEnum);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct InlineStruct {\n    ref_struct: SimpleStruct,\n    val: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct InlinerStruct {\n    #[specta(inline)]\n    inline_this: InlineStruct,\n    dont_inline_this: RefStruct,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct GenericStruct<T> {\n    arg: T,\n}\n\n#[derive(Serialize, Type)]\n#[specta(collect = false)]\nstruct FlattenEnumStruct {\n    outer: String,\n    #[serde(flatten)]\n    inner: FlattenEnum,\n}\n\n#[derive(Serialize, Type)]\n#[specta(collect = false)]\n#[serde(tag = \"tag\", content = \"test\")]\nenum FlattenEnum {\n    One,\n    Two,\n    Three,\n}\n\n#[derive(Serialize, Type)]\n#[specta(collect = false)]\nstruct OverridenStruct {\n    #[specta(type = String)]\n    overriden_field: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct HasGenericAlias(GenericAlias<i32>);\n\ntype GenericAlias<T> = std::collections::HashMap<T, String>;\n\n#[derive(Serialize, Type)]\n#[specta(collect = false)]\nenum SkipVariant {\n    A(String),\n    #[serde(skip)]\n    B(i32),\n    #[specta(skip)]\n    C(i32),\n}\n\n#[derive(Serialize, Type)]\n#[specta(collect = false)]\n#[serde(tag = \"tag\", content = \"data\")]\nenum SkipVariant2 {\n    A(String),\n    #[serde(skip)]\n    B(i32),\n    #[specta(skip)]\n    C(i32),\n}\n\n#[derive(Serialize, Type)]\n#[specta(collect = false)]\nenum SkipVariant3 {\n    A {\n        a: String,\n    },\n    #[serde(skip)]\n    B {\n        b: i32,\n    },\n    #[specta(skip)]\n    C {\n        b: i32,\n    },\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nstruct SkipStructFields {\n    a: i32,\n    #[specta(skip)]\n    b: String,\n    #[serde(skip)]\n    d: Box<dyn std::any::Any>, // `!Type`\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct SpectaSkipNonTypeField {\n    a: i32,\n    #[specta(skip)]\n    d: Box<dyn std::any::Any>, // `!Type`\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum EnumMacroAttributes {\n    A(#[specta(type = String)] i32),\n    #[serde(rename = \"bbb\")]\n    B(i32),\n    #[serde(rename = \"cccc\")]\n    C(#[specta(type = i32)] String),\n    D {\n        #[specta(type = String)]\n        a: i32,\n        #[serde(rename = \"bbbbbb\")]\n        b: i32,\n    },\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct PlaceholderInnerField {\n    a: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum InlineEnumField {\n    #[specta(inline)]\n    A(PlaceholderInnerField),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct InlineOptionalType {\n    #[specta(inline)]\n    optional_field: Option<PlaceholderInnerField>,\n}\n\n// Regression test for https://github.com/specta-rs/specta/issues/56\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nenum Rename {\n    OneWord,\n    #[serde(rename = \"Two words\")]\n    TwoWords,\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nstruct TransparentTypeInner {\n    inner: String,\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct TransparentType(TransparentTypeInner);\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct TransparentType2(());\n\n#[derive(Serialize)]\nstruct NonTypeType;\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct TransparentTypeWithOverride(#[specta(type = String)] NonTypeType);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum BasicEnum {\n    A,\n    B,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\", content = \"value\", rename_all = \"camelCase\")]\nenum NestedEnum {\n    A(String),\n    B(i32),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename_all = \"camelCase\")]\nstruct FlattenOnNestedEnum {\n    id: String,\n    #[serde(flatten)]\n    result: NestedEnum,\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nstruct EnumReferenceRecordKey {\n    a: HashMap<BasicEnum, i32>,\n}\n\n// https://github.com/specta-rs/specta/issues/88\n#[derive(Default, Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename_all = \"camelCase\")]\n#[serde(default)]\nstruct MyEmptyInput {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct EmptyStruct {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"a\")]\nstruct EmptyStructWithTag {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[allow(unused_parens)]\nenum ExtraBracketsInTupleVariant {\n    A((String)),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct ExtraBracketsInUnnamedStruct((String));\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[allow(unused_parens)]\nstruct RenameWithWeirdCharsField {\n    #[serde(rename = \"@odata.context\")]\n    odata_context: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct RenamedFieldKeys {\n    #[serde(rename = \"\")]\n    empty: String,\n    #[serde(rename = \"a\\\"b\")]\n    quote: String,\n    #[serde(rename = \"a\\\\b\")]\n    backslash: String,\n    #[serde(rename = \"line\\nbreak\")]\n    newline: String,\n    #[serde(rename = \"line\\u{2028}break\")]\n    line_separator: String,\n    #[serde(rename = \"line\\u{2029}break\")]\n    paragraph_separator: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum RenamedVariantWithSkippedPayload {\n    #[serde(rename = \"a-b\")]\n    A(#[serde(skip)] String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[allow(unused_parens)]\nenum RenameWithWeirdCharsVariant {\n    #[serde(rename = \"@odata.context\")]\n    A(String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename = \"@odata.context\")]\nstruct RenameWithWeirdCharsStruct(String);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename = \"@odata.context\")]\nenum RenameWithWeirdCharsEnum {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum MyEnum {\n    A(String),\n    B(u32),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct InlineTuple {\n    #[specta(inline)]\n    demo: (String, bool),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct InlineTuple2 {\n    #[specta(inline)]\n    demo: (InlineTuple, bool),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\", content = \"data\")]\nenum SkippedFieldWithinVariant {\n    A(#[serde(skip)] String),\n    B(String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename_all = \"kebab-case\")]\nstruct KebabCase {\n    test_ing: String,\n}\n\n// https://github.com/specta-rs/specta/issues/281\n#[derive(Type)]\n#[specta(collect = false)]\nstruct Issue281<'a> {\n    default_unity_arguments: &'a [&'a str],\n}\n\n// https://github.com/specta-rs/specta/issues/317\n#[derive(Type)]\n#[specta(collect = false)]\nstruct LifetimeGenericStruct<'a, T> {\n    borrowed: &'a [T],\n    owned: Vec<T>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum LifetimeGenericEnum<'a, T> {\n    Borrowed(&'a T),\n    Owned(T),\n}\n\n/// https://github.com/specta-rs/specta/issues/374\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nstruct Issue374 {\n    #[serde(default, skip_serializing_if = \"std::ops::Not::not\")]\n    foo: bool,\n    #[serde(skip_serializing_if = \"std::ops::Not::not\", default)]\n    bar: bool,\n}\n\n// https://github.com/specta-rs/specta/issues/386\n// We put this test in a separate module because the parent module has `use specta::Type`,\n// so it clashes with our user-defined `Type`.\nmod type_type {\n    #[derive(specta::Type)]\n    #[specta(collect = false)]\n    pub(super) enum Type {}\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum GenericType<T> {\n    Undefined,\n    Value(T),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct ActualType {\n    a: GenericType<String>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct SpectaTypeOverride {\n    #[specta(type = String)] // Ident\n    string_ident: (),\n    #[specta(type = u32)] // Ident\n    u32_ident: (),\n    #[specta(type = ::std::string::String)] // Path\n    path: (),\n    #[specta(type = (String, i32))] // Non-path type\n    tuple: (),\n}\n\n#[derive(Type)]\n#[specta(collect = false, type = String)]\nstruct ContainerTypeOverrideStruct {\n    cause: Box<dyn std::error::Error + Send + Sync>,\n}\n\n#[derive(Type)]\n#[specta(collect = false, type = String)]\nenum ContainerTypeOverrideEnum {\n    A(Box<dyn std::error::Error + Send + Sync>),\n}\n\n#[derive(Type)]\n#[specta(collect = false, type = String)]\nstruct ContainerTypeOverrideGeneric<T>(std::marker::PhantomData<T>);\n\n#[derive(Type)]\n#[specta(collect = false, type = T)]\nstruct ContainerTypeOverrideToGeneric<T>(std::marker::PhantomData<T>);\n\n#[derive(Type)]\n#[specta(collect = false, type = (String, i32))]\nstruct ContainerTypeOverrideTuple {\n    cause: Box<dyn std::error::Error + Send + Sync>,\n}\n\n#[derive(Type)]\n#[specta(collect = false, type = (T, String))]\nstruct ContainerTypeOverrideTupleGeneric<T>(std::marker::PhantomData<T>);\n\n// Checking that you can override the type of a field that is invalid. This is to ensure user code can override Specta in the case we have a bug/unsupported type.\n#[derive(Type)]\n#[specta(collect = false)]\nstruct InvalidToValidType {\n    #[specta(type = Option<()>)]\n    cause: Option<Box<dyn std::error::Error + Send + Sync>>,\n}\n\n#[derive(Type)]\n#[specta(collect = false, transparent)]\nstruct TupleStruct(String);\n\n#[repr(transparent)]\n#[derive(Type)]\n#[specta(collect = false)]\nstruct TupleStructWithRep(String);\n\n#[derive(Type)]\n#[specta(collect = false, transparent)]\nstruct GenericTupleStruct<T>(T);\n\n#[derive(Type)]\n#[specta(collect = false, transparent)]\nstruct BracedStruct {\n    a: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename = \"StructNew\", tag = \"t\")]\nstruct Struct {\n    a: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Struct2 {\n    #[serde(rename = \"b\")]\n    a: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename = \"EnumNew\", tag = \"t\")]\nenum Enum {\n    A,\n    B,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename = \"EnumNew\", tag = \"t\")]\nenum Enum2 {\n    #[serde(rename = \"C\")]\n    A,\n    B,\n    #[serde(rename_all = \"camelCase\")]\n    D {\n        enum_field: (),\n    },\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename_all = \"UPPERCASE\")]\nstruct StructRenameAllUppercase {\n    a: i32,\n    b: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename_all = \"UPPERCASE\")]\nenum EnumRenameAllUppercase {\n    HelloWorld,\n    VariantB,\n    TestingWords,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"kind\")]\n#[serde(rename(\n    serialize = \"StructPhaseSpecificRenameSerialize\",\n    deserialize = \"StructPhaseSpecificRenameDeserialize\"\n))]\nstruct StructPhaseSpecificRename {\n    #[serde(rename(serialize = \"ser\", deserialize = \"der\"))]\n    a: String,\n}\n\n#[derive(serde::Serialize, Type)]\n#[specta(collect = false)]\nstruct RenameSerdeSpecialChar {\n    #[serde(rename = \"a/b\")]\n    b: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(rename = \"EnumNew\", tag = \"t\")]\nenum Enum3 {\n    A {\n        #[serde(rename = \"b\")]\n        a: String,\n    },\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct Recursive {\n    demo: Box<Recursive>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct RecursiveMapValue {\n    demo: HashMap<String, RecursiveMapValue>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct RecursiveInline {\n    #[serde(flatten)]\n    demo: Box<RecursiveInline>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(transparent, collect = false)]\nstruct RecursiveTransparent(Box<RecursiveInline>);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum RecursiveInEnum {\n    A {\n        #[serde(flatten)]\n        demo: Box<RecursiveInEnum>,\n    },\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct NonOptional(Option<String>);\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct OptionalOnNamedField(#[specta(optional)] Option<String>); // Should do nothing\n\n#[derive(Type)]\n#[specta(collect = false, transparent, inline)]\nstruct OptionalOnTransparentNamedFieldInner(#[specta(optional)] Option<String>);\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct OptionalOnTransparentNamedField {\n    // Now it should work\n    b: OptionalOnTransparentNamedFieldInner,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum OptionalInEnum {\n    // Should do nothing\n    A(#[specta(optional)] Option<String>),\n    // Base case without `optional`\n    B {\n        a: Option<String>,\n    },\n    // Should add `?` on field\n    C {\n        #[specta(optional)]\n        a: Option<String>,\n    },\n}\n\n// Export needs a `NamedDataType` but uses `Type::reference` instead of `Type::inline` so we test it.\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nstruct Regular(HashMap<String, ()>);\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nstruct RegularStruct {\n    a: String,\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct TransparentStruct(String);\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nenum UnitVariants {\n    A,\n    B,\n    C,\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum UntaggedVariantsKey {\n    A(String),\n    B(i32),\n    C(u8),\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum UntaggedVariants {\n    A(String),\n    B(i32),\n    C(u8),\n    D { id: String },\n    E(String, bool),\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum UntaggedVariantsWithoutValue {\n    A(String),\n    B(i32, String),\n    C(u8),\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum UntaggedVariantsWithDuplicateBranches {\n    A(()),\n    B(i32),\n    C(()),\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum InvalidUntaggedVariants {\n    A(String),\n    B(i32, String),\n    C(u8),\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nenum Variants {\n    A(String),\n    B(i32),\n    C(u8),\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct MaybeValidKey<T>(T);\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct ValidMaybeValidKey(HashMap<MaybeValidKey<String>, ()>);\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct ValidMaybeValidKeyNested(HashMap<MaybeValidKey<MaybeValidKey<String>>, ()>);\n\nmacro_rules! field_ty_macro {\n    () => {\n        String\n    };\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct MacroStruct(field_ty_macro!());\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct MacroStruct2 {\n    demo: field_ty_macro!(),\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum MacroEnum {\n    Demo(field_ty_macro!()),\n    Demo2 { demo2: field_ty_macro!() },\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[deprecated]\nstruct DeprecatedType {\n    a: i32,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[deprecated = \"Look at you big man using a deprecation message\"]\nstruct DeprecatedTypeWithMsg {\n    a: i32,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\n#[deprecated(note = \"Look at you big man using a deprecation message\")]\nstruct DeprecatedTypeWithMsg2 {\n    a: i32,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct DeprecatedFields {\n    a: i32,\n    #[deprecated]\n    b: String,\n    #[deprecated = \"This field is cringe!\"]\n    c: String,\n    #[deprecated(note = \"This field is cringe!\")]\n    d: String,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct DeprecatedTupleVariant(\n    #[deprecated] String,\n    #[deprecated = \"Nope\"] String,\n    #[deprecated(note = \"Nope\")] i32,\n);\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum DeprecatedEnumVariants {\n    #[deprecated]\n    A,\n    #[deprecated = \"Nope\"]\n    B,\n    #[deprecated(note = \"Nope\")]\n    C,\n}\n\n// Some double-slash comment which is ignored\n/// Some triple-slash comment\n/// Some more triple-slash comment\n#[derive(Type)]\n#[specta(collect = false)]\nstruct CommentedStruct {\n    // Some double-slash comment which is ignored\n    /// Some triple-slash comment\n    /// Some more triple-slash comment\n    a: i32,\n}\n\n// Some double-slash comment which is ignored\n/// Some triple-slash comment\n/// Some more triple-slash comment\n#[derive(Type)]\n#[specta(collect = false)]\nenum CommentedEnum {\n    // Some double-slash comment which is ignored\n    /// Some triple-slash comment\n    /// Some more triple-slash comment\n    A(i32),\n    // Some double-slash comment which is ignored\n    /// Some triple-slash comment\n    /// Some more triple-slash comment\n    B {\n        // Some double-slash comment which is ignored\n        /// Some triple-slash comment\n        /// Some more triple-slash comment\n        a: i32,\n    },\n}\n\n/// Some single-line comment\n#[derive(Type)]\n#[specta(collect = false)]\nenum SingleLineComment {\n    /// Some single-line comment\n    A(i32),\n    /// Some single-line comment\n    B {\n        /// Some single-line comment\n        a: i32,\n    },\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct Demo<A, B> {\n    a: A,\n    b: B,\n}\n\ntype NonGeneric = Demo<u8, bool>;\ntype HalfGenericA<T> = Demo<T, bool>;\ntype HalfGenericB<T> = Demo<u8, T>;\ntype FullGeneric<T, U> = Demo<T, U>;\n\ntype Another<T> = FullGeneric<u8, T>;\n\ntype MapA<A> = HashMap<String, A>;\ntype MapB<B> = HashMap<B, String>;\ntype MapC<B> = HashMap<String, AGenericStruct<B>>;\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct AGenericStruct<T> {\n    field: HalfGenericA<T>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct D {\n    flattened: u32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct GenericFlattened<T> {\n    generic_flattened: T,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct C {\n    a: u32,\n    #[serde(flatten)]\n    b: D,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct B {\n    b: u32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct A {\n    a: B,\n    #[specta(inline)]\n    b: B,\n    c: B,\n    #[specta(inline)]\n    d: D,\n    #[specta(inline)]\n    e: GenericFlattened<u32>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct ToBeFlattened {\n    a: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct DoubleFlattened {\n    a: ToBeFlattened,\n    b: ToBeFlattened,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Inner {\n    a: i32,\n    #[serde(flatten)]\n    b: Box<FlattenedInner>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FlattenedInner {\n    #[serde(flatten)]\n    c: Inner,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct BoxedInner {\n    a: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct BoxFlattened {\n    #[serde(flatten)]\n    b: Box<BoxedInner>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct BoxInline {\n    #[specta(inline)]\n    c: Box<BoxedInner>,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct First {\n    a: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Second {\n    a: i32,\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nstruct Third {\n    #[serde(flatten)]\n    a: First,\n    b: HashMap<String, String>,\n    c: Box<First>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct Fourth {\n    a: First,\n    #[specta(inline)]\n    b: First,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nstruct TagOnStructWithInline {\n    a: First,\n    #[specta(inline)]\n    b: First,\n}\n\n// Flattening a struct multiple times\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Sixth {\n    a: First,\n    b: First,\n}\n\n// Two fields with the same name (`a`) but different types\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Seventh {\n    a: First,\n    b: Second,\n}\n\n// Serde can't serialize this\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum Eight {\n    A(String),\n    B,\n}\n\n// Test for issue #393 - flatten in enum variant with internal tag\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum MyEnumTagged {\n    Variant {\n        #[serde(flatten)]\n        inner: First,\n    },\n}\n\n// Test for issue #393 - flatten in enum variant with external tag\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nenum MyEnumExternal {\n    Variant {\n        #[serde(flatten)]\n        inner: First,\n    },\n}\n\n// Test for issue #393 - flatten in enum variant with adjacent tag\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(tag = \"t\", content = \"c\")]\nenum MyEnumAdjacent {\n    Variant {\n        #[serde(flatten)]\n        inner: First,\n    },\n}\n\n// Test for issue #393 - flatten in enum variant with untagged\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum MyEnumUntagged {\n    Variant {\n        #[serde(flatten)]\n        inner: First,\n    },\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"t\", content = \"c\")]\nenum Ninth {\n    A(String),\n    B,\n    #[specta(inline)]\n    C(First),\n    D(First),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum Tenth {\n    A(String),\n    B,\n    #[specta(inline)]\n    C(First),\n    D(First),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct Optional {\n    a: Option<i32>,\n    #[specta(optional)]\n    b: Option<i32>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    c: Option<String>,\n    #[serde(default)]\n    d: bool,\n}\n\n#[derive(Type, Serialize, Deserialize, Default)]\n#[specta(collect = false)]\n#[serde(default)]\nstruct ContainerDefault {\n    value: String,\n    flag: bool,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FieldDefault {\n    name: String,\n    #[serde(default)]\n    enabled: bool,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"kind\")]\nenum MixedTaggedAndUntagged {\n    Tagged {\n        value: String,\n    },\n    #[serde(untagged)]\n    Raw(String),\n    #[serde(untagged)]\n    Empty,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"kind\")]\nenum MixedTaggedAndUntaggedStruct {\n    Tagged {\n        value: String,\n    },\n    #[serde(untagged)]\n    Raw {\n        raw_value: String,\n    },\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"kind\")]\nenum MixedTaggedAndUntaggedPhased {\n    Tagged {\n        value: String,\n    },\n    #[serde(untagged, skip_serializing)]\n    DeserializeOnly(String),\n    #[serde(untagged, skip_deserializing)]\n    SerializeOnly(bool),\n}\n\n// Test that attributes with format strings are properly parsed\n// This tests the fix for parsing attributes like #[error(\"io error: {0}\")]\n// which were causing \"expected ident\" errors in the lower_attr.rs parser\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[allow(dead_code)]\nenum TypeWithComplexAttributes {\n    // These attributes will be parsed by lower_attr.rs and should not cause errors\n    #[doc = \"This is a variant with format-like strings in docs: {0}\"]\n    A(String),\n\n    #[doc = \"Another variant: {line} {msg}\"]\n    B { line: usize, msg: String },\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"t\", content = \"c\")]\nenum AdjacentlyTagged {\n    A,\n    B { id: String, method: String },\n    C(String),\n}\n\n// Test for https://github.com/specta-rs/specta/issues/395\n// The `rename_all_fields = \"camelCase\"` should convert field names to camelCase\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(\n    rename_all = \"camelCase\",\n    rename_all_fields = \"camelCase\",\n    tag = \"event\",\n    content = \"data\"\n)]\nenum LoadProjectEvent {\n    Started {\n        project_name: String,\n    },\n    ProgressTest {\n        project_name: String,\n        status: String,\n        progress: i32,\n    },\n    Finished {\n        project_name: String,\n    },\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum ExternallyTagged {\n    A,\n    B { id: String, method: String },\n    C(String),\n}\n\n// https://github.com/specta-rs/specta/issues/221\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum Issue221External {\n    A { a: String },\n    B { b: String },\n}\n\n// Test struct with field alias\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct StructWithAlias {\n    #[serde(alias = \"bruh\")]\n    field: String,\n}\n\n// Test struct with multiple aliases on same field\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct StructWithMultipleAliases {\n    #[serde(alias = \"bruh\", alias = \"alternative\", alias = \"another\")]\n    field: String,\n}\n\n// Test struct with alias and rename\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct StructWithAliasAndRename {\n    #[serde(rename = \"renamed_field\", alias = \"bruh\")]\n    field: String,\n}\n\n// Test enum variant with alias\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum EnumWithVariantAlias {\n    #[serde(alias = \"bruh\")]\n    Variant,\n    Other,\n}\n\n// Test enum with multiple variant aliases\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum EnumWithMultipleVariantAliases {\n    #[serde(alias = \"bruh\", alias = \"alternative\")]\n    Variant,\n    Other,\n}\n\n// Test enum variant with alias and rename\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum EnumWithVariantAliasAndRename {\n    #[serde(rename = \"renamed_variant\", alias = \"bruh\")]\n    Variant,\n    Other,\n}\n\n// Test internally tagged enum with field alias\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedWithAlias {\n    A {\n        #[serde(alias = \"bruh\")]\n        field: String,\n    },\n    B {\n        other: i32,\n    },\n}\n\n// Test adjacently tagged enum with field alias\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\", content = \"data\")]\nenum AdjacentlyTaggedWithAlias {\n    A {\n        #[serde(alias = \"bruh\")]\n        field: String,\n    },\n    B {\n        other: i32,\n    },\n}\n\n// Test untagged enum with field alias\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum UntaggedWithAlias {\n    A {\n        #[serde(alias = \"bruh\")]\n        field: String,\n    },\n    B {\n        other: i32,\n    },\n}\n\n// https://github.com/specta-rs/specta/issues/221\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum Issue221UntaggedSafe {\n    A { a: String },\n    B { b: String },\n}\n\n// https://github.com/specta-rs/specta/issues/221\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum Issue221UntaggedMixed {\n    A {\n        a: String,\n    },\n    B {\n        b: String,\n    },\n    Unsafe {\n        #[serde(flatten)]\n        values: BTreeMap<String, String>,\n    },\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum EmptyEnum {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"a\")]\nenum EmptyEnumTagged {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"a\", content = \"b\")]\nenum EmptyEnumTaggedWContent {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum EmptyEnumUntagged {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct UnitStruct;\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct EmptyBracedStruct {}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct EmptyTupleStruct();\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"a\")]\nenum TaggedEnumOfUnitStruct {\n    A(UnitStruct),\n    B(UnitStruct),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"a\")]\nenum TaggedEnumOfEmptyBracedStruct {\n    A(EmptyBracedStruct),\n    B(EmptyBracedStruct),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"a\")]\nenum TaggedEnumOfEmptyTupleStruct {\n    A(EmptyTupleStruct),\n    B(EmptyTupleStruct),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"a\")]\nenum TaggedEnumOfEmptyTupleBracedStructs {\n    #[specta(skip)]\n    A(EmptyTupleStruct),\n    B(EmptyBracedStruct),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false, transparent)]\nstruct TupleStructWithTuple(());\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"a\")]\nenum TaggedStructOfStructWithTuple {\n    A(TupleStructWithTuple),\n    B(TupleStructWithTuple),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedB {\n    // Is not a map-type so invalid.\n    A(String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedC {\n    // Is not a map-type so invalid.\n    A(Vec<String>),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedD {\n    // Is a map type so valid.\n    A(HashMap<String, String>),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedE {\n    // Null is valid (although it's not a map-type)\n    A(()),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedF {\n    // `FInner` is untagged so this is *only* valid if it is (which it is)\n    A(InternallyTaggedFInner),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum InternallyTaggedFInner {\n    A(()),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedG {\n    // `GInner` is untagged so this is *only* valid if it is (which it is not)\n    A(InternallyTaggedGInner),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum InternallyTaggedGInner {\n    A(String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedH {\n    // `HInner` is transparent so this is *only* valid if it is (which it is)\n    A(InternallyTaggedHInner),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct InternallyTaggedHInner(());\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedI {\n    // `IInner` is transparent so this is *only* valid if it is (which it is not)\n    A(InternallyTaggedIInner),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct InternallyTaggedIInner(String);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedL {\n    // Internally tag enum with inlined field that is itself internally tagged\n    #[specta(inline)]\n    A(InternallyTaggedLInner),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedLInner {\n    A,\n    B,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InternallyTaggedM {\n    // Internally tag enum with inlined field that is untagged\n    // `MInner` is `null` - Test `B` in `untagged.rs`\n    #[specta(inline)]\n    A(InternallyTaggedMInner),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum InternallyTaggedMInner {\n    A,\n    B,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct SkipOnlyField {\n    #[specta(skip)]\n    a: String,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct SkipField {\n    #[specta(skip)]\n    a: String,\n    b: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum SkipOnlyVariantExternallyTagged {\n    #[specta(skip)]\n    A(String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"t\")]\nenum SkipOnlyVariantInternallyTagged {\n    #[specta(skip)]\n    A(String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"t\", content = \"c\")]\nenum SkipOnlyVariantAdjacentlyTagged {\n    #[specta(skip)]\n    A(String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(untagged)]\nenum SkipOnlyVariantUntagged {\n    #[specta(skip)]\n    A(String),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum SkipUnnamedFieldInVariant {\n    // only field\n    A(#[serde(skip)] String),\n    // not only field\n    //\n    // This will `B(String)` == `String` in TS whether this will be `[String]`. This is why `#[serde(skip)]` is processed at runtime not in the macro.\n    B(#[serde(skip)] String, i32),\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nenum SkipNamedFieldInVariant {\n    // only field\n    A {\n        #[specta(skip)]\n        a: String,\n    },\n    // not only field\n    B {\n        #[specta(skip)]\n        a: String,\n        b: i32,\n    },\n}\n\n// https://github.com/specta-rs/specta/issues/170\n#[derive(Type, Serialize, Deserialize)]\n#[specta(transparent, collect = false)]\nstruct TransparentWithSkip((), #[specta(skip)] String);\n\n// https://github.com/specta-rs/specta/issues/170\n#[derive(Type, Serialize, Deserialize)]\n#[specta(transparent, collect = false)]\nstruct TransparentWithSkip2(#[specta(skip)] (), String);\n\n// https://github.com/specta-rs/specta/issues/170\n#[derive(Type)]\n#[specta(transparent, collect = false)]\nstruct TransparentWithSkip3(#[specta(type = String)] Box<dyn Any>);\n\n/// This is intentionally just a compile or not compile test\n/// https://github.com/specta-rs/specta/issues/167\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\nenum LazilySkip {\n    #[serde(skip)]\n    A(Box<dyn Any>),\n    B(#[serde(skip)] Box<dyn Any>),\n    C {\n        #[serde(skip)]\n        a: Box<dyn Any>,\n    },\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FlattenA {\n    a: i32,\n    b: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FlattenB {\n    #[serde(flatten)]\n    a: FlattenA,\n    c: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FlattenC {\n    #[serde(flatten)]\n    a: FlattenA,\n    c: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FlattenD {\n    a: FlattenA,\n    c: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FlattenE {\n    #[specta(inline)]\n    b: FlattenB,\n    d: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FlattenF {\n    #[specta(inline = true)]\n    b: FlattenB,\n    d: i32,\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct FlattenG {\n    #[specta(inline = false)]\n    b: FlattenB,\n    d: i32,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct TupleNested(Vec<i32>, (Vec<i32>, Vec<i32>), [Vec<i32>; 3]);\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct Generic1<T: Type> {\n    value: T,\n    values: Vec<T>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericAutoBound<T> {\n    value: T,\n    values: Vec<T>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericAutoBound2<T: PartialEq> {\n    value: T,\n    values: Vec<T>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct Container1 {\n    foo: Generic1<u32>,\n    bar: HashSet<Generic1<u32>>,\n    baz: BTreeMap<String, Rc<Generic1<String>>>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum Generic2<A, B, C> {\n    A(A),\n    B(B, B, B),\n    C(Vec<C>),\n    D(Vec<Vec<Vec<A>>>),\n    E { a: A, b: B, c: C },\n    X(Vec<i32>),\n    Y(i32),\n    Z(Vec<Vec<i32>>),\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericStruct2<T> {\n    a: T,\n    b: (T, T),\n    c: (T, (T, T)),\n    d: [T; 3],\n    e: [(T, T); 3],\n    f: Vec<T>,\n    g: Vec<Vec<T>>,\n    h: Vec<[(T, T); 3]>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericNewType1<T>(Vec<Vec<T>>);\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericTuple<T>(T, Vec<T>, Vec<Vec<T>>);\n\n#[derive(Type)]\n#[specta(collect = false, inline)]\nstruct InlineGenericNewtype<T>(T);\n\n#[derive(Type)]\n#[specta(collect = false, inline)]\nenum InlineGenericEnum<T> {\n    Unit,\n    Unnamed(T),\n    Named { value: T },\n}\n\n#[derive(Type)]\n#[specta(collect = false, inline)]\nstruct InlineGenericNested<T>(\n    InlineGenericNewtype<T>,\n    Vec<T>,\n    (T, T),\n    HashMap<String, T>,\n    Option<T>,\n    InlineGenericEnum<T>,\n);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct InlineFlattenGenericsG<T> {\n    t: T,\n}\n\n// not currently possible in ts-rs hehe\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct InlineFlattenGenerics {\n    g: InlineFlattenGenericsG<String>,\n    #[specta(inline)]\n    gi: InlineFlattenGenericsG<String>,\n    #[serde(flatten)]\n    t: InlineFlattenGenericsG<String>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericDefault<T = String> {\n    value: T,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct ChainedGenericDefault<T = String, U = T> {\n    first: T,\n    second: U,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericDefaultSkipped<#[specta(skip_default_generic)] T = String> {\n    value: T,\n}\n\nstruct GenericDefaultSkippedNonTypeDefault;\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericDefaultSkippedNonType<\n    #[specta(skip_default_generic)] T = GenericDefaultSkippedNonTypeDefault,\n> {\n    value: i32,\n    #[specta(skip)]\n    _phantom: PhantomData<T>,\n}\n\n// #[test]\n// fn default() {\n//     #[derive(Type)]\n//     #[specta(collect = false)]\n//     struct A<T = String> {\n//         t: T,\n//     }\n//     assert_ts_export!(\n//         ts_A::<()>,\n//         \"export type A<T = string> = { t: T, }\"\n//     );\n\n//     #[derive(Type)]\n//     #[specta(collect = false)]\n//     struct B<U = Option<A<i32>>> {\n//         u: U,\n//     }\n//     assert_ts_export!(\n//         ts_B::<()>,\n//         \"export type B<U = A<number> | null>  = { u: U, }\"\n//     );\n\n//     #[derive(Type)]\n//     #[specta(collect = false)]\n//     struct Y {\n//         a1: A,\n//         a2: A<i32>,\n// https://github.com/Aleph-Alpha/ts-rs/issues/56\n// TODO: fixme\n// #[ts(inline)]\n// xi: X,\n// #[ts(inline)]\n// xi2: X<i32>\n// }\n// assert_ts_export!(\n//     ts_Y,\n//     \"type Y = { a1: A, a2: A<number> }\"\n// )\n// }\n\n// TODO\n\n// #[test]\n// fn test_generic_trait_bounds() {\n//     #[derive(Type)]\n//     struct A<T: ToString = i32> {\n//         t: T,\n//     }\n//     assert_ts_export!(A::<i32>, \"export type A<T = number> = { t: T, }\");\n\n//     #[derive(Type)]\n//     struct B<T: ToString + std::fmt::Debug + Clone + 'static>(T);\n//     assert_ts_export!(B::<&'static str>, \"export type B<T> = T;\");\n\n//     #[derive(Type)]\n//     enum C<T: Copy + Clone + PartialEq, K: Copy + PartialOrd = i32> {\n//         A { t: T },\n//         B(T),\n//         C,\n//         D(T, K),\n//     }\n//     assert_ts_export!(\n//         C::<&'static str, i32>,\n//         \"export type C<T, K = number> = { A: { t: T, } } | { B: T } | \\\"C\\\" | { D: [T, K] };\"\n//     );\n\n//     #[derive(Type)]\n//     struct D<T: ToString, const N: usize> {\n//         t: [T; N],\n//     }\n\n//     assert_ts_export!(D::<&str, 41>, \"export type D<T> = { t: Array<T>, }\")\n// }\n\n// https://github.com/specta-rs/specta/issues/400\n#[derive(Type)]\n#[specta(collect = false)]\nstruct Pair<Z, A> {\n    first: Z,\n    second: A,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct GenericParameterOrderPreserved {\n    pair: Pair<i32, String>,\n}\n\nconst CONST_LEN: usize = 1;\n#[derive(Type)]\n#[specta(collect = false)]\nstruct ConstGenericInNonConstContainer {\n    data: [u32; CONST_LEN],\n    a: [u8; 2],\n    #[specta(type = specta_util::FixedArray<2, u8>)]\n    d: [u8; 2],\n}\n\n// This is a duplicate of `NamedConstGeneric` but we keep it separate as it's a better test\n// or the global export ty that is registered.\n#[derive(Type)]\n#[specta(collect = false)]\nstruct ConstGenericInConstContainer<const N: usize = 1> {\n    data: [u32; N],\n    a: [u8; 2],\n    #[specta(type = specta_util::FixedArray<2, u8>)]\n    d: [u8; 2],\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct NamedConstGeneric<const N: usize = 1> {\n    data: [u32; N],\n    a: [u8; 2],\n    #[specta(type = specta_util::FixedArray<2, u8>)]\n    d: [u8; 2],\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct NamedConstGenericContainer {\n    a: NamedConstGeneric,\n    b: NamedConstGeneric<2>,\n    d: [u8; 2],\n}\n\n#[derive(Type)]\n#[specta(collect = false, inline)]\nstruct InlineConstGeneric<const N: usize = 1> {\n    #[specta(type = [u32; N])]\n    data: (),\n    a: [u8; 2],\n    #[specta(type = specta_util::FixedArray<3, u8>)]\n    d: [u8; 3],\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct InlineConstGenericContainer {\n    #[specta(inline)]\n    b: InlineConstGeneric<2>,\n    #[specta(inline)]\n    c: InlineConstGeneric<3>,\n    d: [u8; 2],\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct InlineRecursiveConstGeneric<const N: usize = 1> {\n    #[specta(type = [u32; N])]\n    data: (),\n    a: [u8; 2],\n    #[specta(type = specta_util::FixedArray<3, u8>)]\n    d: [u8; 3],\n    e: Box<InlineRecursiveConstGeneric<4>>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct InlineRecursiveConstGenericContainer {\n    #[specta(inline)]\n    b: InlineRecursiveConstGeneric<2>,\n    #[specta(inline)]\n    c: InlineRecursiveConstGeneric<3>,\n    d: [u8; 2],\n}\n\n// mod type_overrides {\n//     #![allow(dead_code)]\n\n//     use std::time::Instant;\n\n//     use specta::Type;\n\n//     struct Unsupported<T>(T);\n//     struct Unsupported2;\n\n//     #[test]\n//     fn simple() {\n//         #[derive(Type)]\n//         #[specta(collect = false)]\n//         struct Override {\n//             a: i32,\n//             #[specta(type = String)]\n//             x: Instant,\n//             #[specta(type = String)]\n//             y: Unsupported<Unsupported<Unsupported2>>,\n//             #[specta(type = Option<String>)]\n//             z: Option<Unsupported2>,\n//         }\n\n//         insta::assert_snapshot!(crate::ts::inline::<Override>(&Default::default()).unwrap(), @\"{ a: number; x: string; y: string; z: string | null }\");\n//     }\n\n//     #[test]\n//     fn newtype() {\n//         #[derive(Type)]\n//         #[specta(collect = false)]\n//         struct New1(#[specta(type = String)] Unsupported2);\n//         #[derive(Type)]\n//         #[specta(collect = false)]\n//         struct New2(#[specta(type = Option<String>)] Unsupported<Unsupported2>);\n\n//         insta::assert_snapshot!(crate::ts::inline::<New1>(&Default::default()).unwrap(), @r#\"string\"#);\n//         insta::assert_snapshot!(crate::ts::inline::<New2>(&Default::default()).unwrap(), @r#\"string | null\"#);\n//     }\n// }\n\n// mod union_serde {\n//     use serde::{Deserialize, Serialize};\n//     use specta::Type;\n\n//     #[derive(Type, Serialize, Deserialize)]\n//     #[specta(collect = false)]\n//     #[serde(tag = \"kind\", content = \"d\")]\n//     enum SimpleEnumA {\n//         A,\n//         B,\n//     }\n\n//     #[derive(Type, Serialize, Deserialize)]\n//     #[specta(collect = false)]\n//     #[serde(tag = \"kind\", content = \"data\")]\n//     enum ComplexEnum {\n//         A,\n//         B { foo: String, bar: f64 },\n//         W(SimpleEnumA),\n//         F { nested: SimpleEnumA },\n//         T(i32, SimpleEnumA),\n//     }\n\n//     #[derive(Type, Serialize, Deserialize)]\n//     #[specta(collect = false)]\n//     #[serde(untagged)]\n//     enum Untagged {\n//         Foo(String),\n//         Bar(i32),\n//         None,\n//     }\n\n//     #[test]\n//     fn test_serde_enum() {\n//         insta::assert_snapshot!(crate::ts::inline::<SimpleEnumA>(&Default::default()).unwrap(), @r#\"{ kind: \"A\" } | { kind: \"B\" }\"#);\n//         insta::assert_snapshot!(crate::ts::inline::<ComplexEnum>(&Default::default()).unwrap(), @r#\"{ kind: \"A\" } | { kind: \"B\"; data: { foo: string; bar: number } } | { kind: \"W\"; data: SimpleEnumA } | { kind: \"F\"; data: { nested: SimpleEnumA } } | { kind: \"T\"; data: [number, SimpleEnumA] }\"#);\n//         insta::assert_snapshot!(crate::ts::inline::<Untagged>(&Default::default()).unwrap(), @r#\"string | number | null\"#);\n//     }\n// }\n\n// mod union_with_serde {\n//     use serde::Serialize;\n//     use specta::Type;\n\n//     #[derive(Type, Serialize)]\n//     #[specta(collect = false)]\n//     struct Bar {\n//         field: i32,\n//     }\n\n//     #[derive(Type, Serialize)]\n//     #[specta(collect = false)]\n//     struct Foo {\n//         bar: Bar,\n//     }\n\n//     #[derive(Type, Serialize)]\n//     #[specta(collect = false)]\n//     enum SimpleEnum2 {\n//         A(String),\n//         B(i32),\n//         C,\n//         D(String, i32),\n//         E(Foo),\n//         F { a: i32, b: String },\n//     }\n\n//     #[test]\n//     fn test_stateful_enum() {\n//         insta::assert_snapshot!(crate::ts::inline::<Bar>(&Default::default()).unwrap(), @r#\"{ field: number }\"#);\n\n//         insta::assert_snapshot!(crate::ts::inline::<Foo>(&Default::default()).unwrap(), @r#\"{ bar: Bar }\"#);\n\n//         insta::assert_snapshot!(crate::ts::inline::<SimpleEnum2>(&Default::default()).unwrap(), @r#\"{ A: string } | { B: number } | \"C\" | { D: [string, number] } | { E: Foo } | { F: { a: number; b: string } }\"#);\n//     }\n// }\n\n// mod union_with_internal_tag {\n//     use serde::{Deserialize, Serialize};\n//     use specta::Type;\n\n//     #[derive(Type, Serialize, Deserialize)]\n//     #[specta(collect = false)]\n//     #[serde(tag = \"type\")]\n//     enum EnumWithInternalTag {\n//         A { foo: String },\n//         B { bar: i32 },\n//     }\n\n//     #[derive(Type, Serialize, Deserialize)]\n//     #[specta(collect = false)]\n//     struct InnerA {\n//         foo: String,\n//     }\n\n//     #[derive(Type, Serialize, Deserialize)]\n//     #[specta(collect = false)]\n//     struct InnerB {\n//         bar: i32,\n//     }\n\n//     #[derive(Type, Serialize, Deserialize)]\n//     #[specta(collect = false)]\n//     #[serde(tag = \"type\")]\n//     enum EnumWithInternalTag2 {\n//         A(InnerA),\n//         B(InnerB),\n//     }\n\n//     #[test]\n//     fn test_enums_with_internal_tags() {\n//         insta::assert_snapshot!(crate::ts::inline::<EnumWithInternalTag>(&Default::default()).unwrap(), @r#\"{ type: \"A\"; foo: string } | { type: \"B\"; bar: number }\"#);\n\n//         insta::assert_snapshot!(crate::ts::inline::<EnumWithInternalTag2>(&Default::default()).unwrap(), @r#\"({ type: \"A\" } & InnerA) | ({ type: \"B\" } & InnerB)\"#);\n//     }\n// }\n\n// Transparent wrappers should have distinct type IDs (regression test for linker ICF bug)\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct TransparentA(String);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(transparent)]\nstruct TransparentB(String);\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\nstruct UsesTransparent {\n    a: TransparentA,\n    b: TransparentB,\n}\n\n#[test]\nfn transparent_wrappers_have_distinct_ids() {\n    let mut types = Types::default();\n    let id_a = TransparentA::definition(&mut types);\n    let id_b = TransparentB::definition(&mut types);\n    let names = types\n        .into_unsorted_iter()\n        .map(|ndt| ndt.name.as_ref())\n        .collect::<Vec<_>>();\n\n    assert_ne!(format!(\"{:?}\", id_a), format!(\"{:?}\", id_b));\n    assert!(names.contains(&\"TransparentA\"));\n    assert!(names.contains(&\"TransparentB\"));\n}\n\n#[test]\nfn struct_collects_all_transparent_field_types() {\n    let mut types = Types::default();\n    UsesTransparent::definition(&mut types);\n    let names = types\n        .into_unsorted_iter()\n        .map(|ndt| ndt.name.as_ref())\n        .collect::<Vec<_>>();\n\n    assert!(names.contains(&\"UsesTransparent\"));\n    assert!(names.contains(&\"TransparentA\"));\n    assert!(names.contains(&\"TransparentB\"));\n}\n\n#[test]\nfn container_default_marks_all_fields_optional_in_unified_mode() {\n    let ts = specta_typescript::Typescript::default()\n        .export(\n            &Types::default().register::<ContainerDefault>(),\n            specta_serde::Format,\n        )\n        .expect(\"typescript export should succeed\");\n\n    insta::assert_snapshot!(\"serde-default-container-typescript\", ts);\n}\n\n#[test]\nfn field_default_still_marks_only_that_field_optional() {\n    let ts = specta_typescript::Typescript::default()\n        .export(\n            &Types::default().register::<FieldDefault>(),\n            specta_serde::Format,\n        )\n        .expect(\"typescript export should succeed\");\n\n    insta::assert_snapshot!(\"serde-default-field-typescript\", ts);\n}\n\n#[test]\nfn mixed_tagged_and_untagged_variants_export_in_unified_mode() {\n    let ts = specta_typescript::Typescript::default()\n        .export(\n            &Types::default().register::<MixedTaggedAndUntagged>(),\n            specta_serde::Format,\n        )\n        .expect(\"typescript export should succeed\");\n\n    insta::assert_snapshot!(\"serde-mixed-untagged-typescript\", ts);\n}\n\n#[test]\nfn mixed_tagged_and_untagged_struct_variants_export_in_unified_mode() {\n    let ts = specta_typescript::Typescript::default()\n        .export(\n            &Types::default().register::<MixedTaggedAndUntaggedStruct>(),\n            specta_serde::Format,\n        )\n        .expect(\"typescript export should succeed\");\n\n    insta::assert_snapshot!(\"serde-mixed-untagged-struct-typescript\", ts);\n}\n\n#[test]\nfn phased_mixed_untagged_variants_split_per_phase() {\n    let ts = specta_typescript::Typescript::default()\n        .export(\n            &Types::default().register::<MixedTaggedAndUntaggedPhased>(),\n            specta_serde::PhasesFormat,\n        )\n        .expect(\"typescript export should succeed\");\n\n    insta::assert_snapshot!(\"serde-mixed-untagged-phased-typescript\", ts);\n}\n"
  },
  {
    "path": "tests/tests/typescript.rs",
    "content": "use std::{\n    borrow::Cow,\n    collections::HashMap,\n    iter,\n    path::Path,\n    time::{Duration, SystemTime},\n};\n\nuse specta::{\n    Format, Type, Types,\n    datatype::{DataType, Reference},\n};\nuse specta_typescript::{Layout, Typescript, primitives};\nuse tempfile::TempDir;\n\nuse crate::fs_to_string;\n\nfn typescript_types() -> (Types, Vec<(&'static str, DataType)>) {\n    let mut types = Types::default();\n    let mut dts = Vec::new();\n\n    register!(types, dts;\n        specta_typescript::Any,\n        specta_typescript::Any<String>,\n        specta_typescript::Unknown,\n        specta_typescript::Unknown<String>,\n        specta_typescript::Never,\n        specta_typescript::Never<String>,\n    );\n    let _ = <HashMap<specta_typescript::Any, ()> as Type>::definition(&mut types);\n\n    (types, dts)\n}\n\npub type PhaseCollection = (\n    &'static str,\n    Box<dyn Format>,\n    Vec<(&'static str, DataType)>,\n    Types,\n);\n\nstruct IdentityFormat;\n\nimpl Format for IdentityFormat {\n    fn map_types(&'_ self, types: &Types) -> Result<Cow<'_, Types>, specta::FormatError> {\n        Ok(Cow::Owned(types.clone()))\n    }\n\n    fn map_type(\n        &'_ self,\n        _: &Types,\n        dt: &DataType,\n    ) -> Result<Cow<'_, DataType>, specta::FormatError> {\n        Ok(Cow::Owned(dt.clone()))\n    }\n}\n\npub fn phase_collections() -> Vec<PhaseCollection> {\n    let (types, dts) = {\n        let (mut types, mut dts) = crate::types();\n        let (types2, dts2) = typescript_types();\n        types.extend(&types2);\n        dts.extend(dts2);\n        (types, dts)\n    };\n    let (phased_types, phased_dts) = {\n        let (mut types2, mut dts2) = crate::types_phased();\n        types2.extend(&types);\n        dts2.extend(dts.iter().cloned());\n        (types2, dts2)\n    };\n\n    vec![\n        (\"raw\", Box::new(IdentityFormat), dts.clone(), types.clone()),\n        (\"serde\", Box::new(specta_serde::Format), dts, types),\n        (\n            \"serde_phases\",\n            Box::new(specta_serde::PhasesFormat),\n            phased_dts,\n            phased_types,\n        ),\n    ]\n}\n\n#[test]\nfn typescript_export() {\n    for (mode, format, _, types) in phase_collections() {\n        insta::assert_snapshot!(\n            format!(\"ts-export-{mode}\"),\n            Typescript::default().export(&types, format).unwrap()\n        );\n    }\n}\n\n#[test]\nfn typescript_export_serde_errors() {\n    fn assert_serde_error<T: Type>(failures: &mut Vec<String>, name: &str, expected_error: &str) {\n        fn assert_expected_error(\n            failures: &mut Vec<String>,\n            name: &str,\n            mode: &str,\n            stage: &str,\n            expected_error: &str,\n            err: impl std::fmt::Display,\n        ) {\n            let err = err.to_string();\n            if !err.contains(expected_error) {\n                failures.push(format!(\n                    \"{name} ({mode}) [{stage}]: expected error containing '{expected_error}', got '{err}'\"\n                ));\n            }\n        }\n\n        let mut types = Types::default();\n        let dt = T::definition(&mut types);\n\n        for (mode, format) in [\n            (\"serde\", Box::new(specta_serde::Format) as Box<dyn Format>),\n            (\"serde_phases\", Box::new(specta_serde::PhasesFormat)),\n        ] {\n            match Typescript::default().export(&types, format) {\n                Ok(_) => failures.push(format!(\n                    \"{name} ({mode}) [export]: expected error containing '{expected_error}', but export succeeded\"\n                )),\n                Err(err) => {\n                    assert_expected_error(failures, name, mode, \"export\", expected_error, err)\n                }\n            }\n        }\n    }\n\n    fn assert_serde_export_ok<T: Type>(failures: &mut Vec<String>, name: &str) {\n        let mut types = Types::default();\n        let dt = T::definition(&mut types);\n\n        for (mode, format) in [\n            (\"serde\", Box::new(specta_serde::Format) as Box<dyn Format>),\n            (\"serde_phases\", Box::new(specta_serde::PhasesFormat)),\n        ] {\n            if let Err(err) = format.map_type(&types, &dt) {\n                failures.push(format!(\n                    \"{name} ({mode}) [map_type]: expected export to succeed, got '{err}'\"\n                ));\n            }\n        }\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(tag = \"type\")]\n    enum InternallyTaggedB {\n        A(String),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(tag = \"type\")]\n    enum InternallyTaggedC {\n        A(Vec<String>),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(tag = \"type\")]\n    enum InternallyTaggedG {\n        A(InternallyTaggedGInner),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(untagged)]\n    enum InternallyTaggedGInner {\n        A(String),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(tag = \"type\")]\n    enum InternallyTaggedI {\n        A(InternallyTaggedIInner),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(transparent)]\n    struct InternallyTaggedIInner(String);\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(tag = \"a\")]\n    enum TaggedEnumOfEmptyTupleStruct {\n        A(EmptyTupleStruct),\n        B(EmptyTupleStruct),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    struct EmptyTupleStruct();\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    enum SkipOnlyVariantExternallyTagged {\n        #[serde(skip)]\n        A(String),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(tag = \"t\")]\n    enum SkipOnlyVariantInternallyTagged {\n        #[serde(skip)]\n        A(String),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(tag = \"t\", content = \"c\")]\n    enum SkipOnlyVariantAdjacentlyTagged {\n        #[serde(skip)]\n        A(String),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(untagged)]\n    enum SkipOnlyVariantUntagged {\n        #[serde(skip)]\n        A(String),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    struct RegularStruct {\n        a: String,\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    enum Variants {\n        A(String),\n        B(i32),\n        C(u8),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(transparent)]\n    struct MaybeValidKey<T>(T);\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(transparent)]\n    struct InvalidMaybeValidKey(HashMap<MaybeValidKey<()>, ()>);\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(transparent)]\n    struct InvalidMaybeValidKeyNested(HashMap<MaybeValidKey<MaybeValidKey<()>>, ()>);\n\n    #[derive(Type)]\n    #[specta(transparent, collect = false)]\n    struct RecursiveMapKeyTrick(RecursiveMapKey);\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct RecursiveMapKey {\n        demo: HashMap<RecursiveMapKeyTrick, String>,\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    #[serde(tag = \"type\")]\n    enum InternallyTaggedBoxedStruct {\n        // Regression test for https://github.com/specta-rs/specta/issues/482\n        // `Box<T>` is transparent to serde, so this must validate like `T`.\n        A(Box<InternallyTaggedBoxedStructPayload>),\n    }\n\n    #[derive(Type, serde::Serialize)]\n    #[specta(collect = false)]\n    struct InternallyTaggedBoxedStructPayload {\n        message: String,\n    }\n\n    let mut failures = Vec::new();\n\n    assert_serde_export_ok::<InternallyTaggedBoxedStruct>(\n        &mut failures,\n        \"InternallyTaggedBoxedStruct\",\n    );\n\n    // Serde Error: \"cannot serialize tagged newtype variant InternallyTaggedB::A containing a string\"\n    assert_serde_error::<InternallyTaggedB>(\n        &mut failures,\n        \"InternallyTaggedB\",\n        \"Invalid internally tagged enum\",\n    );\n    // Serde Error: \"cannot serialize tagged newtype variant InternallyTaggedC::A containing a sequence\"\n    assert_serde_error::<InternallyTaggedC>(\n        &mut failures,\n        \"InternallyTaggedC\",\n        \"Invalid internally tagged enum\",\n    );\n    // Serde Error: \"cannot serialize tagged newtype variant InternallyTaggedG::A containing a string\"\n    assert_serde_error::<InternallyTaggedG>(\n        &mut failures,\n        \"InternallyTaggedG\",\n        \"Invalid internally tagged enum\",\n    );\n    // Serde Error: \"cannot serialize tagged newtype variant InternallyTaggedI::A containing a string\"\n    assert_serde_error::<InternallyTaggedI>(\n        &mut failures,\n        \"InternallyTaggedI\",\n        \"Invalid internally tagged enum\",\n    );\n\n    // Serde Error: \"cannot serialize tagged newtype variant TaggedEnumOfEmptyTupleStruct::A containing a tuple struct\"\n    assert_serde_error::<TaggedEnumOfEmptyTupleStruct>(\n        &mut failures,\n        \"TaggedEnumOfEmptyTupleStruct\",\n        \"Invalid internally tagged enum\",\n    );\n    // Serde Error: \"the enum variant SkipOnlyVariantExternallyTagged::A cannot be serialized\"\n    assert_serde_error::<SkipOnlyVariantExternallyTagged>(\n        &mut failures,\n        \"SkipOnlyVariantExternallyTagged\",\n        \"Invalid usage of #[serde(skip)]\",\n    );\n    // Serde Error: \"the enum variant SkipOnlyVariantInternallyTagged::A cannot be serialized\"\n    assert_serde_error::<SkipOnlyVariantInternallyTagged>(\n        &mut failures,\n        \"SkipOnlyVariantInternallyTagged\",\n        \"Invalid usage of #[serde(skip)]\",\n    );\n    // Serde Error: \"the enum variant SkipOnlyVariantAdjacentlyTagged::A cannot be serialized\"\n    assert_serde_error::<SkipOnlyVariantAdjacentlyTagged>(\n        &mut failures,\n        \"SkipOnlyVariantAdjacentlyTagged\",\n        \"Invalid usage of #[serde(skip)]\",\n    );\n    // Serde Error: \"the enum variant SkipOnlyVariantUntagged::A cannot be serialized\"\n    assert_serde_error::<SkipOnlyVariantUntagged>(\n        &mut failures,\n        \"SkipOnlyVariantUntagged\",\n        \"Invalid usage of #[serde(skip)]\",\n    );\n\n    // These need to be named data types so they are exported by `Typescript::export`\n    {\n        #[derive(Type)]\n        #[specta(collect = false)]\n        pub struct A(HashMap<(), ()>);\n\n        assert_serde_error::<A>(\n            &mut failures,\n            \"A(HashMap<() /* `null` */, ()>)\",\n            \"tuple keys are not supported by serde_json map key serialization\",\n        );\n    }\n    {\n        #[derive(Type)]\n        #[specta(collect = false)]\n        pub struct B(HashMap<RegularStruct, ()>);\n\n        assert_serde_error::<B>(\n            &mut failures,\n            \"B(HashMap<RegularStruct, ()>)\",\n            \"struct keys must serialize as a newtype struct to be valid serde_json map keys\",\n        );\n    }\n    {\n        #[derive(Type)]\n        #[specta(collect = false)]\n        pub struct C(HashMap<Variants, ()>);\n\n        assert_serde_error::<C>(\n            &mut failures,\n            \"C(HashMap<Variants, ()>)\",\n            \"enum key variant 'A' serializes as a struct variant, which serde_json rejects\",\n        );\n    }\n    assert_serde_error::<InvalidMaybeValidKey>(\n        &mut failures,\n        \"InvalidMaybeValidKey\",\n        \"tuple keys are not supported by serde_json map key serialization\",\n    );\n    assert_serde_error::<InvalidMaybeValidKeyNested>(\n        &mut failures,\n        \"InvalidMaybeValidKeyNested\",\n        \"tuple keys are not supported by serde_json map key serialization\",\n    );\n\n    assert_serde_error::<RecursiveMapKey>(\n        &mut failures,\n        \"RecursiveMapKey\",\n        \"struct keys must serialize as a newtype struct to be valid serde_json map keys\",\n    );\n\n    assert!(\n        failures.is_empty(),\n        \"Unexpected TypeScript serde export behavior:\\n{}\",\n        failures.join(\"\\n\")\n    );\n}\n\n#[test]\nfn typescript_export_bigint_errors() {\n    fn assert_bigint_error<T: Type>(failures: &mut Vec<String>, name: &str) {\n        let ts = Typescript::default();\n        let mut types = Types::default();\n        let dt = T::definition(&mut types);\n\n        match primitives::inline(&ts, &types, &dt) {\n            Ok(ty) => failures.push(format!(\n                \"{name} [inline]: expected BigInt error, but export succeeded with '{ty}'\"\n            )),\n            Err(err)\n                if err\n                    .to_string()\n                    .contains(\"forbids exporting BigInt-style types\") => {}\n            Err(err) => failures.push(format!(\"{name} [inline]: unexpected error '{err}'\")),\n        }\n\n        if types.is_empty() {\n            return;\n        }\n\n        match ts.export(&types, specta_serde::Format) {\n            Ok(output) => failures.push(format!(\n                \"{name} [export]: expected BigInt error, but export succeeded with '{output}'\"\n            )),\n            Err(err)\n                if err\n                    .to_string()\n                    .contains(\"forbids exporting BigInt-style types\") => {}\n            Err(err) => failures.push(format!(\"{name} [export]: unexpected error '{err}'\")),\n        }\n    }\n\n    fn assert_inline_bigint_error<T: Type>(failures: &mut Vec<String>, name: &str) {\n        let ts = Typescript::default();\n        let mut types = Types::default();\n        let dt = T::definition(&mut types);\n\n        match primitives::inline(&ts, &types, &dt) {\n            Ok(ty) => failures.push(format!(\n                \"{name} [inline]: expected BigInt error, but export succeeded with '{ty}'\"\n            )),\n            Err(err)\n                if err\n                    .to_string()\n                    .contains(\"forbids exporting BigInt-style types\") => {}\n            Err(err) => failures.push(format!(\"{name} [inline]: unexpected error '{err}'\")),\n        }\n    }\n\n    macro_rules! for_bigint_types {\n        (T -> $s:expr) => {{\n            for_bigint_types!(usize, isize, i64, u64, i128, u128; $s);\n        }};\n        ($($i:ty),+; $s:expr) => {{\n            $({\n                type T = $i;\n                $s(stringify!($i));\n            })*\n        }};\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithSystemTime {\n        // https://github.com/specta-rs/specta/issues/77\n        #[specta(inline)]\n        value: SystemTime,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithDuration {\n        // https://github.com/specta-rs/specta/issues/77\n        #[specta(inline)]\n        value: Duration,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithBigInt {\n        a: i128,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithStructWithBigInt {\n        #[specta(inline)]\n        abc: StructWithBigInt,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithStructWithStructWithBigInt {\n        #[specta(inline)]\n        field1: StructWithStructWithBigInt,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    struct StructWithOptionWithStructWithBigInt {\n        #[specta(inline)]\n        optional_field: Option<StructWithBigInt>,\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    enum EnumWithStructWithStructWithBigInt {\n        #[specta(inline)]\n        A(StructWithStructWithBigInt),\n    }\n\n    #[derive(Type)]\n    #[specta(collect = false)]\n    enum EnumWithInlineStructWithBigInt {\n        #[specta(inline)]\n        B { a: i128 },\n    }\n\n    let mut failures = Vec::new();\n\n    for_bigint_types!(T -> |name| {\n        assert_bigint_error::<T>(&mut failures, name);\n    });\n\n    for (name, assert) in [\n        (\n            \"StructWithSystemTime\",\n            assert_bigint_error::<StructWithSystemTime> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithDuration\",\n            assert_bigint_error::<StructWithDuration> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithBigInt\",\n            assert_bigint_error::<StructWithBigInt> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithStructWithBigInt\",\n            assert_bigint_error::<StructWithStructWithBigInt> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithStructWithStructWithBigInt\",\n            assert_bigint_error::<StructWithStructWithStructWithBigInt>\n                as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"StructWithOptionWithStructWithBigInt\",\n            assert_bigint_error::<StructWithOptionWithStructWithBigInt>\n                as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"EnumWithStructWithStructWithBigInt\",\n            assert_bigint_error::<EnumWithStructWithStructWithBigInt> as fn(&mut Vec<String>, &str),\n        ),\n        (\n            \"EnumWithInlineStructWithBigInt\",\n            assert_bigint_error::<EnumWithInlineStructWithBigInt> as fn(&mut Vec<String>, &str),\n        ),\n    ] {\n        assert(&mut failures, name);\n    }\n\n    assert_inline_bigint_error::<SystemTime>(&mut failures, \"SystemTime\");\n    assert_inline_bigint_error::<Duration>(&mut failures, \"Duration\");\n\n    assert!(\n        failures.is_empty(),\n        \"Unexpected TypeScript BigInt export behavior:\\n{}\",\n        failures.join(\"\\n\")\n    );\n}\n\n#[test]\nfn typescript_export_to() {\n    let temp = Path::new(env!(\"CARGO_MANIFEST_DIR\")).join(\".temp\");\n    std::fs::create_dir_all(&temp).unwrap();\n    let temp = TempDir::new_in(temp).unwrap();\n\n    for layout in [\n        Layout::Files,\n        Layout::FlatFile,\n        Layout::ModulePrefixedName,\n        Layout::Namespaces,\n    ] {\n        for (mode, format, _, types) in phase_collections() {\n            let name = format!(\n                \"ts-export-to-{}-{}\",\n                layout.to_string().to_lowercase(),\n                mode\n            );\n            let output = (|| {\n                let path = temp.path().join(&name);\n                Typescript::default()\n                    .layout(layout)\n                    .export_to(&path, &types, format)\n                    .unwrap();\n                fs_to_string(&path).map_err(|err| err.to_string())\n            })()\n            .unwrap();\n\n            insta::assert_snapshot!(name, output);\n        }\n    }\n\n    temp.close().unwrap();\n\n    // TODO: Assert layouts error out with `export` method\n    // TODO: Assert it errors if given the path to a file\n}\n\n#[test]\nfn primitives_export() {\n    for (mode, format, dts, types) in phase_collections() {\n        let types = format.map_types(&types).unwrap().into_owned();\n\n        let output = dts\n            .iter()\n            .filter_map(|(name, dt)| {\n                let mut ndt = match dt {\n                    DataType::Reference(Reference::Named(r)) => types.get(r).unwrap().to_owned(),\n                    _ => return None,\n                };\n\n                if let Some(ty) = &mut ndt.ty {\n                    *ty = format.map_type(&types, ty).unwrap().into_owned();\n                }\n\n                Some(\n                    primitives::export(&Typescript::default(), &types, [ndt].iter(), \"\")\n                        .map(|ty| format!(\"{name}: {ty}\")),\n                )\n            })\n            .collect::<Result<Vec<_>, _>>()\n            .map(|exports| exports.join(\"\\n\"))\n            .unwrap();\n\n        insta::assert_snapshot!(format!(\"export-{mode}\"), output);\n    }\n}\n\n#[test]\nfn primitives_export_many() {\n    for (mode, format, dts, types) in phase_collections() {\n        let types = format.map_types(&types).unwrap().into_owned();\n\n        let output = primitives::export(\n            &Typescript::default(),\n            &types,\n            dts.iter()\n                .filter_map(|(_, ty)| match ty {\n                    DataType::Reference(Reference::Named(r)) => types.get(r).cloned(),\n                    _ => None,\n                })\n                .map(|mut ndt| {\n                    if let Some(ty) = &mut ndt.ty {\n                        *ty = format.map_type(&types, ty).unwrap().into_owned();\n                    }\n                    ndt\n                })\n                .collect::<Vec<_>>()\n                .iter(),\n            \"\",\n        )\n        .unwrap();\n\n        insta::assert_snapshot!(format!(\"export-many-{mode}\"), output);\n    }\n}\n\n#[test]\nfn primitives_reference() {\n    for (mode, format, dts, types) in phase_collections() {\n        let types = format.map_types(&types).unwrap().into_owned();\n\n        let output = dts\n            .iter()\n            .filter_map(|(name, dt)| {\n                let dt = format.map_type(&types, dt).unwrap().into_owned();\n\n                let reference = match dt {\n                    DataType::Reference(reference) => reference.clone(),\n                    _ => return None,\n                };\n\n                Some(\n                    primitives::reference(&Typescript::default(), &types, &reference)\n                        .map(|ty| format!(\"{name}: {ty}\")),\n                )\n            })\n            .collect::<Result<Vec<_>, _>>()\n            .map(|exports| exports.join(\"\\n\"))\n            .unwrap();\n\n        insta::assert_snapshot!(format!(\"reference-{mode}\"), output);\n    }\n}\n\n#[test]\nfn primitives_inline() {\n    for (mode, format, dts, types) in phase_collections() {\n        let types = format.map_types(&types).unwrap().into_owned();\n\n        let output = dts\n            .iter()\n            .map(|(name, dt)| {\n                let dt = format.map_type(&types, dt).unwrap().into_owned();\n\n                primitives::inline(&Typescript::default(), &types, &dt)\n                    .map(|ty| format!(\"{name}: {ty}\"))\n            })\n            .collect::<Result<Vec<_>, _>>()\n            .map(|exports| exports.join(\"\\n\"))\n            .unwrap();\n\n        insta::assert_snapshot!(format!(\"inline-{mode}\"), output);\n    }\n}\n\n#[test]\nfn reserved_names() {\n    {\n        #[derive(Type)]\n        #[specta(collect = false)]\n        #[allow(non_camel_case_types)]\n        pub struct r#enum {\n            a: String,\n        }\n\n        let mut types = Types::default();\n        let ndt = match r#enum::definition(&mut types) {\n            DataType::Reference(Reference::Named(r)) => types.get(&r).unwrap(),\n            _ => panic!(\"Failed to get reference\"),\n        };\n        insta::assert_snapshot!(primitives::export(&Typescript::default(), &types, iter::once(ndt), \"\").unwrap_err().to_string(), @r#\"Attempted to export  but was unable to due to name \"enum\" conflicting with a reserved keyword in Typescript. Try renaming it or using `#[specta(rename = \"new name\")]`\"#);\n    }\n\n    {\n        #[derive(Type)]\n        #[specta(collect = false)]\n        #[allow(non_camel_case_types)]\n        pub struct r#enum(String);\n\n        let mut types = Types::default();\n        let ndt = match r#enum::definition(&mut types) {\n            DataType::Reference(Reference::Named(r)) => types.get(&r).unwrap(),\n            _ => panic!(\"Failed to get reference\"),\n        };\n        insta::assert_snapshot!(primitives::export(&Typescript::default(), &types, iter::once(ndt), \"\").unwrap_err().to_string(), @r#\"Attempted to export  but was unable to due to name \"enum\" conflicting with a reserved keyword in Typescript. Try renaming it or using `#[specta(rename = \"new name\")]`\"#);\n    }\n\n    {\n        // Typescript reserved type name\n        #[derive(Type)]\n        #[specta(collect = false)]\n        #[allow(non_camel_case_types)]\n        pub enum r#enum {\n            A(String),\n        }\n\n        let mut types = Types::default();\n        let ndt = match r#enum::definition(&mut types) {\n            DataType::Reference(Reference::Named(r)) => types.get(&r).unwrap(),\n            _ => panic!(\"Failed to get reference\"),\n        };\n        insta::assert_snapshot!(primitives::export(&Typescript::default(), &types, iter::once(ndt), \"\").unwrap_err().to_string(), @r#\"Attempted to export  but was unable to due to name \"enum\" conflicting with a reserved keyword in Typescript. Try renaming it or using `#[specta(rename = \"new name\")]`\"#);\n    }\n}\n\n// #[test]\n// fn duplicate_ty_name() {\n//     mod one {\n//         use super::*;\n\n//         #[derive(Type)]\n//         #[specta(collect = false)]\n//         pub struct One {\n//             pub a: String,\n//         }\n//     }\n\n//     #[derive(Type)]\n//     #[specta(collect = false)]\n//     pub struct One {\n//         pub one: one::One,\n//     }\n\n//     assert!(\n//         Typescript::default()\n//             .export(&Types::default().register::<Demo>())\n//             .is_err_and(|err| err\n//                 .to_string()\n//                 .starts_with(\"Detected multiple types with the same name:\"))\n//     );\n// }\n\n// TODO\n//\n// Break out testing of `specta_typescript` types from all languages (just jsdoc & typescript)\n// Make a `typescript` folder for extra testing on the Typescript exporter\n//\n// Testing different combos of feature flags + external impls. Can we come up with a proper multi-binary system for this???\n//\n// BigInt checks\n//\n// Test frameworks API's. Eg. prelude and runtime for each layout.\n// Test framework references and code replacing\n// Test `Any`, etc for this and JSDoc\n//\n// TODO: For core:\n// Testing Specta macros in many basic cases.\n// Test `borrow`, `skip` and other Specta attributes\n// Testing all Serde features in the AST layer???\n// Test that the macro attribute lowering system works.\n//\n// Tests for framework primitives (prelude, runtime, runtime imports, etc)\n// Tauri `Channel` tests\n"
  },
  {
    "path": "tests/tests/utils.rs",
    "content": "use std::{\n    borrow::Cow,\n    fs,\n    path::{Path, PathBuf},\n};\n\n/// Get a `String` representation of the filesystem.\n/// This is used for snapshot testing multi-file exports.\npub fn fs_to_string(path: &Path) -> Result<String, std::io::Error> {\n    let mut output = String::new();\n\n    // Handle single file case\n    if path.is_file() {\n        let contents = fs::read(path)?;\n        let name = path.file_name().unwrap().to_string_lossy();\n\n        match String::from_utf8(contents) {\n            Ok(text) => {\n                let normalized = normalize_newlines(&text);\n                output.push_str(&format!(\"{} ({} bytes)\\n\", name, normalized.len()));\n                output.push_str(\"────────────────────────────────────────\\n\");\n\n                for line in normalized.lines() {\n                    output.push_str(&format!(\"{}\\n\", line));\n                }\n            }\n            Err(err) => {\n                output.push_str(&format!(\"{} ({} bytes)\\n\", name, err.as_bytes().len()));\n                output.push_str(\"────────────────────────────────────────\\n\");\n                output.push_str(\"[Binary file]\\n\");\n            }\n        }\n\n        output.push_str(\"════════════════════════════════════════\\n\");\n    } else {\n        fs_to_string_impl(path, path, &mut output, \"\")?;\n    }\n\n    Ok(output)\n}\n\nfn fs_to_string_impl(\n    root: &Path,\n    current: &Path,\n    output: &mut String,\n    indent: &str,\n) -> Result<(), std::io::Error> {\n    let mut entries: Vec<PathBuf> = fs::read_dir(current)?\n        .filter_map(|entry| entry.ok())\n        .map(|entry| entry.path())\n        .collect();\n\n    // Sort entries: directories first, then files, both alphabetically\n    entries.sort_by(|a, b| {\n        let a_is_dir = a.is_dir();\n        let b_is_dir = b.is_dir();\n\n        match (a_is_dir, b_is_dir) {\n            (true, false) => std::cmp::Ordering::Less,\n            (false, true) => std::cmp::Ordering::Greater,\n            _ => a.file_name().cmp(&b.file_name()),\n        }\n    });\n\n    for entry in entries {\n        let name = entry.file_name().unwrap().to_string_lossy();\n\n        if entry.is_dir() {\n            output.push_str(&format!(\"{}{}/\\n\", indent, name));\n            fs_to_string_impl(root, &entry, output, &format!(\"{}  \", indent))?;\n        } else {\n            let contents = fs::read(&entry)?;\n\n            // Try to read as UTF-8, otherwise show as binary\n            match String::from_utf8(contents) {\n                Ok(text) => {\n                    let normalized = normalize_newlines(&text);\n                    output.push_str(&format!(\n                        \"{}{} ({} bytes)\\n\",\n                        indent,\n                        name,\n                        normalized.len()\n                    ));\n                    output.push_str(&format!(\n                        \"{}────────────────────────────────────────\\n\",\n                        indent\n                    ));\n\n                    for line in normalized.lines() {\n                        output.push_str(&format!(\"{}{}\\n\", indent, line));\n                    }\n                }\n                Err(err) => {\n                    output.push_str(&format!(\n                        \"{}{} ({} bytes)\\n\",\n                        indent,\n                        name,\n                        err.as_bytes().len()\n                    ));\n                    output.push_str(&format!(\n                        \"{}────────────────────────────────────────\\n\",\n                        indent\n                    ));\n                    output.push_str(&format!(\"{}[Binary file]\\n\", indent));\n                }\n            }\n\n            output.push_str(&format!(\n                \"{}════════════════════════════════════════\\n\\n\",\n                indent\n            ));\n        }\n    }\n\n    Ok(())\n}\n\nfn normalize_newlines(text: &str) -> Cow<'_, str> {\n    if text.contains(\"\\r\\n\") {\n        Cow::Owned(text.replace(\"\\r\\n\", \"\\n\"))\n    } else {\n        Cow::Borrowed(text)\n    }\n}\n"
  },
  {
    "path": "tests/tests/zod.rs",
    "content": "use std::{iter, path::Path};\n\nuse serde::{Deserialize, Serialize};\nuse specta::{\n    Type, Types,\n    datatype::{DataType, NamedDataType, Primitive, Reference},\n};\nuse specta_typescript::Typescript;\nuse specta_zod::{BigIntExportBehavior, Layout, Zod, primitives};\nuse tempfile::TempDir;\n\nmacro_rules! for_bigint_types {\n    (T -> $s:expr) => {{\n        for_bigint_types!(usize, isize, i64, u64, i128, u128; $s);\n    }};\n    ($($i:ty),+; $s:expr) => {{\n        $({\n            type T = $i;\n            $s(stringify!($i));\n        })*\n    }};\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct StructWithBigInt {\n    a: i128,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct StructWithStructWithBigInt {\n    #[specta(inline)]\n    abc: StructWithBigInt,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct StructWithOptionWithStructWithBigInt {\n    #[specta(inline)]\n    optional_field: Option<StructWithBigInt>,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum EnumWithInlineStructWithBigInt {\n    #[specta(inline)]\n    B { a: i128 },\n}\n\n#[derive(Type)]\nstruct Recursive {\n    children: Vec<Recursive>,\n}\n\n#[derive(Type)]\nstruct Testing {\n    a: testing::Testing,\n}\n\n#[derive(Type)]\nstruct Another {\n    bruh: String,\n}\n\n#[derive(Type)]\n#[specta(collect = false)]\nstruct EmptyStruct {}\n\n#[derive(Type)]\n#[specta(collect = false)]\nenum EmptyNamedVariant {\n    A {},\n}\n\n#[derive(Type, Serialize, Deserialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\", content = \"data\", rename_all = \"snake_case\")]\nenum SerdeTaggedEnum {\n    Unit,\n    StringValue(String),\n}\n\n#[derive(Type, Serialize)]\n#[specta(collect = false)]\n#[serde(tag = \"type\")]\nenum InvalidInternallyTaggedEnum {\n    A(String),\n}\n\nmod testing {\n    use super::*;\n\n    #[derive(Type)]\n    pub struct Testing {\n        b: testing2::Testing,\n    }\n\n    pub mod testing2 {\n        use super::*;\n\n        #[derive(Type)]\n        pub struct Testing {\n            c: String,\n        }\n    }\n}\n\nfn inline_for<T: Type>(zod: &Zod) -> Result<String, specta_zod::Error> {\n    let mut types = Types::default();\n    let dt = T::definition(&mut types);\n    primitives::inline(zod, &types, &dt)\n}\n\nfn temp_root() -> std::path::PathBuf {\n    let temp_root = Path::new(env!(\"CARGO_MANIFEST_DIR\")).join(\".temp\");\n    std::fs::create_dir_all(&temp_root).unwrap();\n    temp_root\n}\n\n#[test]\nfn zod_export_smoke() {\n    #[derive(Type)]\n    struct Inner {\n        value: String,\n    }\n\n    #[derive(Type)]\n    struct Demo {\n        inner: Inner,\n        count: i32,\n        maybe: Option<String>,\n    }\n\n    let types = Types::default().register::<Demo>();\n    let out = Zod::default()\n        .bigint(BigIntExportBehavior::Number)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n\n    assert!(out.contains(\"import { z } from \\\"zod\\\";\"));\n    assert!(out.contains(\"export const DemoSchema\"));\n    assert!(out.contains(\"export type Demo = z.infer<typeof DemoSchema>;\"));\n}\n\n#[test]\nfn zod_primitives_smoke() {\n    let (types, dts) = crate::types();\n    let zod = Zod::default().bigint(BigIntExportBehavior::Number);\n\n    for (_, ty) in &dts {\n        let rendered = primitives::inline(&zod, &types, ty).unwrap();\n        assert!(!rendered.is_empty());\n    }\n\n    let ndt = dts\n        .iter()\n        .find_map(|(_, ty)| match ty {\n            DataType::Reference(Reference::Named(r)) => types.get(r),\n            _ => None,\n        })\n        .unwrap();\n\n    let rendered = primitives::export(&zod, &types, iter::once(ndt), \"\").unwrap();\n    assert!(rendered.contains(\"Schema\"));\n}\n\n#[test]\nfn zod_bigint_export_behaviors() {\n    for_bigint_types!(T -> |_| {\n        assert!(inline_for::<T>(&Zod::default()).is_err());\n        assert!(inline_for::<T>(&Zod::default().bigint(BigIntExportBehavior::Fail)).is_err());\n\n        assert_eq!(\n            inline_for::<T>(&Zod::default().bigint(BigIntExportBehavior::String)).unwrap(),\n            \"z.string()\"\n        );\n        assert_eq!(\n            inline_for::<T>(&Zod::default().bigint(BigIntExportBehavior::Number)).unwrap(),\n            \"z.number()\"\n        );\n        assert_eq!(\n            inline_for::<T>(&Zod::default().bigint(BigIntExportBehavior::BigInt)).unwrap(),\n            \"z.bigint()\"\n        );\n    });\n}\n\n#[test]\nfn zod_bigint_errors_propagate_from_nested_types() {\n    for err in [\n        export_for::<StructWithBigInt>(),\n        export_for::<StructWithStructWithBigInt>(),\n        export_for::<StructWithOptionWithStructWithBigInt>(),\n        export_for::<EnumWithInlineStructWithBigInt>(),\n    ] {\n        let err = err.expect_err(\"bigint export should be rejected by default\");\n        assert!(\n            err.to_string().contains(\"forbids exporting BigInt types\"),\n            \"unexpected error: {err}\"\n        );\n    }\n}\n\n#[test]\nfn zod_layout_duplicate_typenames() {\n    let types = Types::default().register::<Testing>().register::<Another>();\n    let err = Zod::default()\n        .export(&types, specta_serde::Format)\n        .unwrap_err();\n    assert!(err.to_string().contains(\"Detected multiple types\"));\n\n    let module_prefixed = Zod::default()\n        .layout(Layout::ModulePrefixedName)\n        .export(&types, specta_serde::Format)\n        .unwrap();\n    assert!(module_prefixed.contains(\"TestingSchema\"));\n    assert!(module_prefixed.contains(\"testing2\"));\n}\n\n#[test]\nfn zod_layout_files_export_to() {\n    let types = Types::default().register::<Testing>().register::<Another>();\n    let temp = temp_dir();\n    let path = temp.path().join(\"zod-layout-files\");\n\n    Zod::default()\n        .layout(Layout::Files)\n        .export_to(&path, &types, specta_serde::Format)\n        .unwrap();\n\n    let output = crate::fs_to_string(Path::new(&path)).unwrap();\n    assert!(output.contains(\".ts\"));\n    assert!(output.contains(\"import { z } from \\\"zod\\\";\"));\n}\n\n#[test]\nfn zod_uses_serde_transformed_resolved_types() {\n    let types = Types::default().register::<SerdeTaggedEnum>();\n    let serde_out = Zod::default().export(&types, specta_serde::Format).unwrap();\n\n    assert!(serde_out.contains(\"type: z.literal(\\\"unit\\\")\"));\n    assert!(serde_out.contains(\"type: z.literal(\\\"string_value\\\")\"));\n    assert!(serde_out.contains(\"data: z.string()\"));\n}\n\n#[test]\nfn zod_empty_named_shapes_are_strict() {\n    let empty_struct = export_for::<EmptyStruct>().unwrap();\n    assert!(empty_struct.contains(\"z.object({}).strict()\"));\n\n    let empty_variant = export_for::<EmptyNamedVariant>().unwrap();\n    assert!(empty_variant.contains(\"z.object({}).strict()\"));\n}\n\n#[test]\nfn zod_layout_files_preserves_unrelated_typescript_files() {\n    let types = Types::default().register::<Testing>().register::<Another>();\n    let temp = TempDir::new_in(temp_root()).unwrap();\n    let path = temp.path().join(\"zod-layout-files-preserve\");\n    std::fs::create_dir_all(&path).unwrap();\n\n    let keep_path = path.join(\"keep.ts\");\n    std::fs::write(&keep_path, \"export const keep = true;\\n\").unwrap();\n\n    Zod::default()\n        .layout(Layout::Files)\n        .export_to(&path, &types, specta_serde::Format)\n        .unwrap();\n\n    assert!(keep_path.exists());\n    assert!(\n        std::fs::read_to_string(&keep_path)\n            .unwrap()\n            .contains(\"export const keep = true;\")\n    );\n}\n\n#[test]\nfn typescript_layout_files_preserves_unrelated_typescript_files() {\n    let types = Types::default().register::<Testing>().register::<Another>();\n    let temp = TempDir::new_in(temp_root()).unwrap();\n    let path = temp.path().join(\"typescript-layout-files-preserve\");\n    std::fs::create_dir_all(&path).unwrap();\n\n    let keep_path = path.join(\"keep.ts\");\n    std::fs::write(&keep_path, \"export const keep = true;\\n\").unwrap();\n\n    Typescript::default()\n        .layout(specta_typescript::Layout::Files)\n        .export_to(&path, &types, specta_serde::Format)\n        .unwrap();\n\n    assert!(keep_path.exists());\n    assert!(\n        std::fs::read_to_string(&keep_path)\n            .unwrap()\n            .contains(\"export const keep = true;\")\n    );\n}\n\n#[test]\nfn zod_recursive_types_use_lazy() {\n    let types = Types::default().register::<Recursive>();\n    let out = Zod::default()\n        .export(&types, specta_serde::PhasesFormat)\n        .unwrap();\n    assert!(out.contains(\"z.lazy(() => RecursiveSchema)\"));\n}\n\n#[test]\nfn zod_reserved_type_name_errors() {\n    let mut types = Types::default();\n    NamedDataType::new(\"class\", &mut types, |_, ndt| {\n        ndt.ty = Some(DataType::Primitive(Primitive::i8));\n    });\n    let err = Zod::default()\n        .export(&types, specta_serde::Format)\n        .unwrap_err();\n    assert!(err.to_string().contains(\"reserved keyword\"));\n}\n\n#[test]\nfn zod_layout_files_errors_on_export() {\n    let types = Types::default();\n    let err = Zod::default()\n        .layout(Layout::Files)\n        .export(&types, specta_serde::Format)\n        .unwrap_err();\n    assert!(err.to_string().contains(\"Unable to export layout Files\"));\n}\n\nfn temp_dir() -> TempDir {\n    TempDir::new_in(temp_root()).unwrap()\n}\n\nfn export_for<T: Type>() -> Result<String, specta_zod::Error> {\n    let types = Types::default().register::<T>();\n    Zod::default().export(&types, specta_serde::Format)\n}\n"
  }
]