# Code generated by Lark OpenAPI.

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


class Base(object):
    _types = {
        "log_id": str,
        "caller": str,
        "addr": str,
        "client": str,
        "traffic_env": TrafficEnv,
        "extra": Dict[str, str],
    }

    def __init__(self, d=None):
        self.log_id: Optional[str] = None
        self.caller: Optional[str] = None
        self.addr: Optional[str] = None
        self.client: Optional[str] = None
        self.traffic_env: Optional[TrafficEnv] = None
        self.extra: Optional[Dict[str, str]] = None
        init(self, d, self._types)

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


class BaseBuilder(object):
    def __init__(self) -> None:
        self._base = Base()

    def log_id(self, log_id: str) -> "BaseBuilder":
        self._base.log_id = log_id
        return self

    def caller(self, caller: str) -> "BaseBuilder":
        self._base.caller = caller
        return self

    def addr(self, addr: str) -> "BaseBuilder":
        self._base.addr = addr
        return self

    def client(self, client: str) -> "BaseBuilder":
        self._base.client = client
        return self

    def traffic_env(self, traffic_env: TrafficEnv) -> "BaseBuilder":
        self._base.traffic_env = traffic_env
        return self

    def extra(self, extra: Dict[str, str]) -> "BaseBuilder":
        self._base.extra = extra
        return self

    def build(self) -> "Base":
        return self._base
