Skip to content

'OneOf' not imported #165

Open
Open
@Dreaming-Codes

Description

@Dreaming-Codes

Description of the bug

In one of the generated api dart code OneOf is not imported

Steps to reproduce

Generated code with the following schema

Minimal openapi specification

I'm not sure where the problem is so this is just a stripped down version of mine

{
  "components": {
    "schemas": {
      "Abilities": {
        "properties": {
          "charisma": {
            "$ref": "#/components/schemas/AbilityScore"
          },
          "constitution": {
            "$ref": "#/components/schemas/AbilityScore"
          },
          "dexterity": {
            "$ref": "#/components/schemas/AbilityScore"
          },
          "intelligence": {
            "$ref": "#/components/schemas/AbilityScore"
          },
          "strength": {
            "$ref": "#/components/schemas/AbilityScore"
          },
          "wisdom": {
            "$ref": "#/components/schemas/AbilityScore"
          }
        },
        "required": [
          "strength",
          "dexterity",
          "constitution",
          "intelligence",
          "wisdom",
          "charisma"
        ],
        "type": "object"
      },
      "AbilityScore": {
        "properties": {
          "proficiency": {
            "type": "boolean"
          },
          "score": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "score",
          "proficiency"
        ],
        "type": "object"
      },
      "ClassProperties": {
        "properties": {
          "abilitiesModifiers": {
            "$ref": "#/components/schemas/Abilities"
          },
          "additionalFightingStyle": {
            "type": [
              "string",
              "null"
            ]
          },
          "fightingStyle": {
            "type": [
              "string",
              "null"
            ]
          },
          "level": {
            "description": "The level of the class",
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "spellCasting": {
            "allOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ClassSpellCasting",
                "description": "Indexes from https://www.dnd5eapi.co/api/spells/"
              }
            ]
          },
          "subclass": {
            "description": "Index from https://www.dnd5eapi.co/api/subclasses/",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "level",
          "abilitiesModifiers"
        ],
        "type": "object"
      },
      "ClassSpellCasting": {
        "oneOf": [
          {
            "properties": {
              "knowledgePrepared": {
                "properties": {
                  "pending_preparation": {
                    "description": "If the user has already prepared spells for the day",
                    "type": "boolean"
                  },
                  "spells_index": {
                    "description": "Indexes from https://www.dnd5eapi.co/api/spells/",
                    "items": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "type": "array"
                  },
                  "spells_prepared_index": {
                    "description": "Indexes from https://www.dnd5eapi.co/api/spells/",
                    "items": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "spells_index",
                  "spells_prepared_index",
                  "pending_preparation"
                ],
                "type": "object"
              }
            },
            "required": [
              "knowledgePrepared"
            ],
            "type": "object"
          },
          {
            "properties": {
              "alreadyKnowPrepared": {
                "properties": {
                  "pending_preparation": {
                    "description": "If the user has already prepared spells for the day",
                    "type": "boolean"
                  },
                  "spells_prepared_index": {
                    "description": "Indexes from https://www.dnd5eapi.co/api/spells/",
                    "items": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "spells_prepared_index",
                  "pending_preparation"
                ],
                "type": "object"
              }
            },
            "required": [
              "alreadyKnowPrepared"
            ],
            "type": "object"
          },
          {
            "properties": {
              "knowledgeAlreadyPrepared": {
                "properties": {
                  "spells_index": {
                    "description": "Indexes from https://www.dnd5eapi.co/api/spells/",
                    "items": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "type": "array"
                  },
                  "usable_slots": {
                    "$ref": "#/components/schemas/UsableSlots"
                  }
                },
                "required": [
                  "spells_index",
                  "usable_slots"
                ],
                "type": "object"
              }
            },
            "required": [
              "knowledgeAlreadyPrepared"
            ],
            "type": "object"
          }
        ]
      },
      "Spell": {
        "properties": {
          "index": {
            "type": "string"
          },
          "level": {
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "index",
          "level"
        ],
        "type": "object"
      },
      "UsableSlots": {
        "properties": {
          "level1": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "level2": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "level3": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "level4": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "level5": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "level6": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "level7": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "level8": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "level9": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "level1",
          "level2",
          "level3",
          "level4",
          "level5",
          "level6",
          "level7",
          "level8",
          "level9"
        ],
        "type": "object"
      }
    }
  },
  "info": {
    "title": "masterai",
    "version": "0.1.0"
  },
  "openapi": "3.1.0"
}

Annotation used

@Openapi(
  additionalProperties:
  DioProperties(pubName: 'masterai_api', pubAuthor: 'DreamingCodes'),
  inputSpec:
  InputSpec(path: 'openapi/openapi.json'),
  generatorName: Generator.dio,
  runSourceGenOnOutput: true,
  outputDirectory: 'api/masterai_api',
)
class MasteraiClient {}

Expected behavior

OneOf gets imported and everything works.

Platform

Linux

Library version

6.0.0

Flutter version

3.24.3

Flutter channel

stable

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions