# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init


class AppTableColumn(object):
    _types = {
        "name": str,
        "description": str,
        "data_type": str,
        "is_primary_key": bool,
        "is_unique": bool,
        "is_auto_increment": bool,
        "is_array": bool,
        "is_allow_null": bool,
        "default_value": str,
    }

    def __init__(self, d=None):
        self.name: Optional[str] = None
        self.description: Optional[str] = None
        self.data_type: Optional[str] = None
        self.is_primary_key: Optional[bool] = None
        self.is_unique: Optional[bool] = None
        self.is_auto_increment: Optional[bool] = None
        self.is_array: Optional[bool] = None
        self.is_allow_null: Optional[bool] = None
        self.default_value: Optional[str] = None
        init(self, d, self._types)

    @staticmethod
    def builder() -> "AppTableColumnBuilder":
        return AppTableColumnBuilder()


class AppTableColumnBuilder(object):
    def __init__(self) -> None:
        self._app_table_column = AppTableColumn()

    def name(self, name: str) -> "AppTableColumnBuilder":
        self._app_table_column.name = name
        return self

    def description(self, description: str) -> "AppTableColumnBuilder":
        self._app_table_column.description = description
        return self

    def data_type(self, data_type: str) -> "AppTableColumnBuilder":
        self._app_table_column.data_type = data_type
        return self

    def is_primary_key(self, is_primary_key: bool) -> "AppTableColumnBuilder":
        self._app_table_column.is_primary_key = is_primary_key
        return self

    def is_unique(self, is_unique: bool) -> "AppTableColumnBuilder":
        self._app_table_column.is_unique = is_unique
        return self

    def is_auto_increment(self, is_auto_increment: bool) -> "AppTableColumnBuilder":
        self._app_table_column.is_auto_increment = is_auto_increment
        return self

    def is_array(self, is_array: bool) -> "AppTableColumnBuilder":
        self._app_table_column.is_array = is_array
        return self

    def is_allow_null(self, is_allow_null: bool) -> "AppTableColumnBuilder":
        self._app_table_column.is_allow_null = is_allow_null
        return self

    def default_value(self, default_value: str) -> "AppTableColumnBuilder":
        self._app_table_column.default_value = default_value
        return self

    def build(self) -> "AppTableColumn":
        return self._app_table_column
