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

from __future__ import annotations

import typing

from .test_case_chat_history_variable_value import TestCaseChatHistoryVariableValue
from .test_case_error_variable_value import TestCaseErrorVariableValue
from .test_case_function_call_variable_value import TestCaseFunctionCallVariableValue
from .test_case_json_variable_value import TestCaseJsonVariableValue
from .test_case_number_variable_value import TestCaseNumberVariableValue
from .test_case_search_results_variable_value import TestCaseSearchResultsVariableValue
from .test_case_string_variable_value import TestCaseStringVariableValue


class TestCaseVariableValue_String(TestCaseStringVariableValue):
    type: typing.Literal["STRING"] = "STRING"

    class Config:
        frozen = True
        smart_union = True
        allow_population_by_field_name = True
        populate_by_name = True


class TestCaseVariableValue_Number(TestCaseNumberVariableValue):
    type: typing.Literal["NUMBER"] = "NUMBER"

    class Config:
        frozen = True
        smart_union = True
        allow_population_by_field_name = True
        populate_by_name = True


class TestCaseVariableValue_Json(TestCaseJsonVariableValue):
    type: typing.Literal["JSON"] = "JSON"

    class Config:
        frozen = True
        smart_union = True
        allow_population_by_field_name = True
        populate_by_name = True


class TestCaseVariableValue_ChatHistory(TestCaseChatHistoryVariableValue):
    type: typing.Literal["CHAT_HISTORY"] = "CHAT_HISTORY"

    class Config:
        frozen = True
        smart_union = True
        allow_population_by_field_name = True
        populate_by_name = True


class TestCaseVariableValue_SearchResults(TestCaseSearchResultsVariableValue):
    type: typing.Literal["SEARCH_RESULTS"] = "SEARCH_RESULTS"

    class Config:
        frozen = True
        smart_union = True
        allow_population_by_field_name = True
        populate_by_name = True


class TestCaseVariableValue_Error(TestCaseErrorVariableValue):
    type: typing.Literal["ERROR"] = "ERROR"

    class Config:
        frozen = True
        smart_union = True
        allow_population_by_field_name = True
        populate_by_name = True


class TestCaseVariableValue_FunctionCall(TestCaseFunctionCallVariableValue):
    type: typing.Literal["FUNCTION_CALL"] = "FUNCTION_CALL"

    class Config:
        frozen = True
        smart_union = True
        allow_population_by_field_name = True
        populate_by_name = True


TestCaseVariableValue = typing.Union[
    TestCaseVariableValue_String,
    TestCaseVariableValue_Number,
    TestCaseVariableValue_Json,
    TestCaseVariableValue_ChatHistory,
    TestCaseVariableValue_SearchResults,
    TestCaseVariableValue_Error,
    TestCaseVariableValue_FunctionCall,
]
