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

import typing

import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2
from ..core.unchecked_base_model import UncheckedBaseModel


class FieldMapping(UncheckedBaseModel):
    """
    Mapping from webhook data to workflow input field.
    """

    source_path: str = pydantic.Field()
    """
    JSONPath expression to extract value (e.g., '$.customer.email', '$.items[0].id', '$.headers.X-User-ID', '$[*].name')
    """

    target_field_id: str = pydantic.Field()
    """
    The workflow input field ID to map to
    """

    transform: typing.Optional[str] = pydantic.Field(default=None)
    """
    Optional transform to apply (future: 'uppercase', 'parse_json', etc.)
    """

    if IS_PYDANTIC_V2:
        model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True)  # type: ignore # Pydantic v2
    else:

        class Config:
            frozen = True
            smart_union = True
            extra = pydantic.Extra.allow
