# 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 .collaboration_rule_entities import CollaborationRuleEntities
from .collaboration_rule_entities import CollaborationRuleEntities


class CollaborationRule(object):
    _types = {
        "rule_id": str,
        "subjects": CollaborationRuleEntities,
        "subject_is_valid": bool,
        "objects": CollaborationRuleEntities,
        "object_is_valid": bool,
    }

    def __init__(self, d=None):
        self.rule_id: Optional[str] = None
        self.subjects: Optional[CollaborationRuleEntities] = None
        self.subject_is_valid: Optional[bool] = None
        self.objects: Optional[CollaborationRuleEntities] = None
        self.object_is_valid: Optional[bool] = None
        init(self, d, self._types)

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


class CollaborationRuleBuilder(object):
    def __init__(self) -> None:
        self._collaboration_rule = CollaborationRule()

    def rule_id(self, rule_id: str) -> "CollaborationRuleBuilder":
        self._collaboration_rule.rule_id = rule_id
        return self

    def subjects(self, subjects: CollaborationRuleEntities) -> "CollaborationRuleBuilder":
        self._collaboration_rule.subjects = subjects
        return self

    def subject_is_valid(self, subject_is_valid: bool) -> "CollaborationRuleBuilder":
        self._collaboration_rule.subject_is_valid = subject_is_valid
        return self

    def objects(self, objects: CollaborationRuleEntities) -> "CollaborationRuleBuilder":
        self._collaboration_rule.objects = objects
        return self

    def object_is_valid(self, object_is_valid: bool) -> "CollaborationRuleBuilder":
        self._collaboration_rule.object_is_valid = object_is_valid
        return self

    def build(self) -> "CollaborationRule":
        return self._collaboration_rule
