MediaType,
            Parameter,
            RequestBody,
            Schema,
        )
    class APIProperty(APIPropertyBase):
        """A model for a property in the query, path, header, or cookie params."""
        location: APIPropertyLocation = Field(alias="location")
        """The path/how it's being passed to the endpoint."""
        @staticmethod
        def _cast_schema_list_type(
            schema: Schema,
        ) -> Optional[Union[str, Tuple[str, ...]]]:
            type_ = schema.type
            if not isinstance(type_, list):
                return type_
            else:
                return tuple(type_)
        @staticmethod
        def _get_schema_type_for_enum(parameter: Parameter, schema: Schema) -> Enum:
            """Get the schema type when the parameter is an enum."""
            param_name = f"{parameter.name}Enum"
            return Enum(param_name, {str(v): v for v in schema.enum})
        @staticmethod
        def _get_schema_type_for_array(
            schema: Schema,
        ) -> Optional[Union[str, Tuple[str, ...]]]:
            from openapi_schema_pydantic import (
                Reference,
                Schema,
            )
            items = schema.items
            if isinstance(items, Schema):
                schema_type = APIProperty._cast_schema_list_type(items)
            elif isinstance(items, Reference):
                ref_name = items.ref.split("/")[-1]
                schema_type = ref_name  # TODO: Add ref definitions to make his valid
            else:
                raise ValueError(f"Unsupported array items: {items}")
            if isinstance(schema_type, str):
                # TODO: recurse
                schema_type = (schema_type,)
            return schema_type
        @staticmethod
        def _get_schema_type(