# 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 .standard_scope_expression import StandardScopeExpression


class StandardScope(object):
    _types = {
        "all": bool,
        "define_expression": str,
        "expressions": List[StandardScopeExpression],
    }

    def __init__(self, d=None):
        self.all: Optional[bool] = None
        self.define_expression: Optional[str] = None
        self.expressions: Optional[List[StandardScopeExpression]] = None
        init(self, d, self._types)

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


class StandardScopeBuilder(object):
    def __init__(self) -> None:
        self._standard_scope = StandardScope()

    def all(self, all: bool) -> "StandardScopeBuilder":
        self._standard_scope.all = all
        return self

    def define_expression(self, define_expression: str) -> "StandardScopeBuilder":
        self._standard_scope.define_expression = define_expression
        return self

    def expressions(self, expressions: List[StandardScopeExpression]) -> "StandardScopeBuilder":
        self._standard_scope.expressions = expressions
        return self

    def build(self) -> "StandardScope":
        return self._standard_scope
