# 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_reference_object import StandardReferenceObject


class GradeStandardValue(object):
    _types = {
        "standard_value": str,
        "reference_object": StandardReferenceObject,
        "upper_limit": str,
        "lower_limit": str,
    }

    def __init__(self, d=None):
        self.standard_value: Optional[str] = None
        self.reference_object: Optional[StandardReferenceObject] = None
        self.upper_limit: Optional[str] = None
        self.lower_limit: Optional[str] = None
        init(self, d, self._types)

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


class GradeStandardValueBuilder(object):
    def __init__(self) -> None:
        self._grade_standard_value = GradeStandardValue()

    def standard_value(self, standard_value: str) -> "GradeStandardValueBuilder":
        self._grade_standard_value.standard_value = standard_value
        return self

    def reference_object(self, reference_object: StandardReferenceObject) -> "GradeStandardValueBuilder":
        self._grade_standard_value.reference_object = reference_object
        return self

    def upper_limit(self, upper_limit: str) -> "GradeStandardValueBuilder":
        self._grade_standard_value.upper_limit = upper_limit
        return self

    def lower_limit(self, lower_limit: str) -> "GradeStandardValueBuilder":
        self._grade_standard_value.lower_limit = lower_limit
        return self

    def build(self) -> "GradeStandardValue":
        return self._grade_standard_value
