# This file was auto-generated by Fern from our API Definition.

import datetime as dt
import typing

import pydantic

from ......core.datetime_utils import serialize_datetime
from ......core.pydantic_utilities import deep_union_pydantic_dicts
from .....commons.types.schema_id import SchemaId


class SchemaInstance(pydantic.BaseModel):
    """
    Examples
    --------
    import uuid

    from candid.resources.custom_schemas.v_1 import SchemaInstance

    SchemaInstance(
        schema_id=uuid.UUID(
            "ec096b13-f80a-471d-aaeb-54b021c9d582",
        ),
        content={
            "provider_category": "internist",
            "is_urgent_care": true,
            "bmi": 24.2,
            "age": 38,
        },
    )
    """

    schema_id: SchemaId = pydantic.Field()
    """
    The schema to which the content must adhere.
    """

    content: typing.Dict[str, typing.Any] = pydantic.Field()
    """
    A set of key-value pairs that adhere to the naming and type convention of the schema. Not all keys in the schema must be included, but attaching any key that does not exist in the schema or attaching a key with the incorrect value type will result in errors.
    """

    def json(self, **kwargs: typing.Any) -> str:
        kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        return super().json(**kwargs_with_defaults)

    def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
        kwargs_with_defaults_exclude_unset: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        kwargs_with_defaults_exclude_none: typing.Any = {"by_alias": True, "exclude_none": True, **kwargs}

        return deep_union_pydantic_dicts(
            super().dict(**kwargs_with_defaults_exclude_unset), super().dict(**kwargs_with_defaults_exclude_none)
        )

    class Config:
        frozen = True
        smart_union = True
        extra = pydantic.Extra.allow
        json_encoders = {dt.datetime: serialize_datetime}
