# generated by datamodel-codegen:
#   filename:  use_non_positive_negative.json
#   timestamp: 2019-07-26T00:00:00+00:00

from __future__ import annotations

from typing import Annotated

from pydantic import (
    BaseModel,
    Field,
    NegativeFloat,
    NegativeInt,
    NonNegativeFloat,
    NonNegativeInt,
    NonPositiveFloat,
    NonPositiveInt,
    PositiveFloat,
    PositiveInt,
)


class NumberConstraints(BaseModel):
    non_negative_int: Annotated[
        NonNegativeInt | None, Field(description='NonNegativeInt: minimum=0 only')
    ] = None
    non_positive_int: Annotated[
        NonPositiveInt | None, Field(description='NonPositiveInt: maximum=0 only')
    ] = None
    non_negative_float: Annotated[
        NonNegativeFloat | None, Field(description='NonNegativeFloat: minimum=0 only')
    ] = None
    non_positive_float: Annotated[
        NonPositiveFloat | None, Field(description='NonPositiveFloat: maximum=0 only')
    ] = None
    positive_int: Annotated[
        PositiveInt | None, Field(description='PositiveInt: exclusiveMinimum=0')
    ] = None
    negative_int: Annotated[
        NegativeInt | None, Field(description='NegativeInt: exclusiveMaximum=0')
    ] = None
    positive_float: Annotated[
        PositiveFloat | None, Field(description='PositiveFloat: exclusiveMinimum=0')
    ] = None
    negative_float: Annotated[
        NegativeFloat | None, Field(description='NegativeFloat: exclusiveMaximum=0')
    ] = None
    bounded_non_negative_int: Annotated[
        NonNegativeInt | None,
        Field(description='NonNegativeInt with additional upper bound', le=100),
    ] = None
    bounded_non_positive_int: Annotated[
        NonPositiveInt | None,
        Field(description='NonPositiveInt with additional lower bound', ge=-100),
    ] = None
    bounded_non_negative_float: Annotated[
        NonNegativeFloat | None,
        Field(description='NonNegativeFloat with additional upper bound', le=1),
    ] = None
    bounded_non_positive_float: Annotated[
        NonPositiveFloat | None,
        Field(description='NonPositiveFloat with additional lower bound', ge=-1),
    ] = None
    plain_constrained_int: Annotated[
        int | None,
        Field(description='No zero bound: should remain conint/Field', ge=5, le=100),
    ] = None
