# 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 App(object):
    _types = {
        "app_id": str,
        "app_type": str,
        "name": str,
        "description": str,
        "icon_url": str,
        "created_at": str,
        "updated_at": str,
    }

    def __init__(self, d=None):
        self.app_id: Optional[str] = None
        self.app_type: Optional[str] = None
        self.name: Optional[str] = None
        self.description: Optional[str] = None
        self.icon_url: Optional[str] = None
        self.created_at: Optional[str] = None
        self.updated_at: Optional[str] = None
        init(self, d, self._types)

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


class AppBuilder(object):
    def __init__(self) -> None:
        self._app = App()

    def app_id(self, app_id: str) -> "AppBuilder":
        self._app.app_id = app_id
        return self

    def app_type(self, app_type: str) -> "AppBuilder":
        self._app.app_type = app_type
        return self

    def name(self, name: str) -> "AppBuilder":
        self._app.name = name
        return self

    def description(self, description: str) -> "AppBuilder":
        self._app.description = description
        return self

    def icon_url(self, icon_url: str) -> "AppBuilder":
        self._app.icon_url = icon_url
        return self

    def created_at(self, created_at: str) -> "AppBuilder":
        self._app.created_at = created_at
        return self

    def updated_at(self, updated_at: str) -> "AppBuilder":
        self._app.updated_at = updated_at
        return self

    def build(self) -> "App":
        return self._app
