from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from chromestatus_openapi.models.base_model import Model
from chromestatus_openapi import util


class Amendment(Model):
    """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

    Do not edit the class manually.
    """

    def __init__(self, field_name=None, old_value=None, new_value=None):  # noqa: E501
        """Amendment - a model defined in OpenAPI

        :param field_name: The field_name of this Amendment.  # noqa: E501
        :type field_name: str
        :param old_value: The old_value of this Amendment.  # noqa: E501
        :type old_value: str
        :param new_value: The new_value of this Amendment.  # noqa: E501
        :type new_value: str
        """
        self.openapi_types = {
            'field_name': str,
            'old_value': str,
            'new_value': str
        }

        self.attribute_map = {
            'field_name': 'field_name',
            'old_value': 'old_value',
            'new_value': 'new_value'
        }

        self._field_name = field_name
        self._old_value = old_value
        self._new_value = new_value

    @classmethod
    def from_dict(cls, dikt) -> 'Amendment':
        """Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The Amendment of this Amendment.  # noqa: E501
        :rtype: Amendment
        """
        return util.deserialize_model(dikt, cls)

    @property
    def field_name(self) -> str:
        """Gets the field_name of this Amendment.


        :return: The field_name of this Amendment.
        :rtype: str
        """
        return self._field_name

    @field_name.setter
    def field_name(self, field_name: str):
        """Sets the field_name of this Amendment.


        :param field_name: The field_name of this Amendment.
        :type field_name: str
        """
        if field_name is None:
            raise ValueError("Invalid value for `field_name`, must not be `None`")  # noqa: E501

        self._field_name = field_name

    @property
    def old_value(self) -> str:
        """Gets the old_value of this Amendment.


        :return: The old_value of this Amendment.
        :rtype: str
        """
        return self._old_value

    @old_value.setter
    def old_value(self, old_value: str):
        """Sets the old_value of this Amendment.


        :param old_value: The old_value of this Amendment.
        :type old_value: str
        """
        if old_value is None:
            raise ValueError("Invalid value for `old_value`, must not be `None`")  # noqa: E501

        self._old_value = old_value

    @property
    def new_value(self) -> str:
        """Gets the new_value of this Amendment.


        :return: The new_value of this Amendment.
        :rtype: str
        """
        return self._new_value

    @new_value.setter
    def new_value(self, new_value: str):
        """Sets the new_value of this Amendment.


        :param new_value: The new_value of this Amendment.
        :type new_value: str
        """
        if new_value is None:
            raise ValueError("Invalid value for `new_value`, must not be `None`")  # noqa: E501

        self._new_value = new_value
