"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
Copyright 2022 Lekko Technologies, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""
import builtins
import collections.abc
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.message
import lekko_client.gen.lekko.feature.v1beta1.feature_pb2
import sys

if sys.version_info >= (3, 8):
    import typing as typing_extensions
else:
    import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

@typing_extensions.final
class StaticFeature(google.protobuf.message.Message):
    """Represents a statically parsed feature.
    This model is meant to contain all sorts of data that is available
    to us via inspecting the starlark file, but may not be available
    post-compilation. E.g. what import statements were defined, and what
    comments were written surrounding certain expressions.
    The goal is to add to this model any information we wish to surface
    to the UI or that is needed for static mutation of a feature.
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    KEY_FIELD_NUMBER: builtins.int
    TYPE_FIELD_NUMBER: builtins.int
    IMPORTS_FIELD_NUMBER: builtins.int
    FEATURE_FIELD_NUMBER: builtins.int
    FEATURE_OLD_FIELD_NUMBER: builtins.int
    key: builtins.str
    type: lekko_client.gen.lekko.feature.v1beta1.feature_pb2.FeatureType.ValueType
    @property
    def imports(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ImportStatement]: ...
    @property
    def feature(self) -> global___FeatureStruct:
        """Experimental protobuf message that is a representation
        of the statically parsed starlark AST.
        """
    @property
    def feature_old(self) -> lekko_client.gen.lekko.feature.v1beta1.feature_pb2.Feature:
        """For backwards compatibility. Eventually, the materialized
        model will be deprecated in favor of a statically parsed model
        """
    def __init__(
        self,
        *,
        key: builtins.str = ...,
        type: lekko_client.gen.lekko.feature.v1beta1.feature_pb2.FeatureType.ValueType = ...,
        imports: collections.abc.Iterable[global___ImportStatement] | None = ...,
        feature: global___FeatureStruct | None = ...,
        feature_old: lekko_client.gen.lekko.feature.v1beta1.feature_pb2.Feature | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["feature", b"feature", "feature_old", b"feature_old"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["feature", b"feature", "feature_old", b"feature_old", "imports", b"imports", "key", b"key", "type", b"type"]) -> None: ...

global___StaticFeature = StaticFeature

@typing_extensions.final
class FeatureStruct(google.protobuf.message.Message):
    """Represents everything stored in the feature struct in starlark.
    i.e. `feature(...)`
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    META_FIELD_NUMBER: builtins.int
    DESCRIPTION_FIELD_NUMBER: builtins.int
    DEFAULT_FIELD_NUMBER: builtins.int
    RULES_FIELD_NUMBER: builtins.int
    @property
    def meta(self) -> global___StarMeta: ...
    description: builtins.str
    @property
    def default(self) -> global___StarExpr: ...
    @property
    def rules(self) -> global___Rules: ...
    def __init__(
        self,
        *,
        meta: global___StarMeta | None = ...,
        description: builtins.str = ...,
        default: global___StarExpr | None = ...,
        rules: global___Rules | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["default", b"default", "meta", b"meta", "rules", b"rules"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["default", b"default", "description", b"description", "meta", b"meta", "rules", b"rules"]) -> None: ...

global___FeatureStruct = FeatureStruct

@typing_extensions.final
class Rules(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    META_FIELD_NUMBER: builtins.int
    RULES_FIELD_NUMBER: builtins.int
    @property
    def meta(self) -> global___StarMeta: ...
    @property
    def rules(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Rule]: ...
    def __init__(
        self,
        *,
        meta: global___StarMeta | None = ...,
        rules: collections.abc.Iterable[global___Rule] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["meta", b"meta", "rules", b"rules"]) -> None: ...

global___Rules = Rules

@typing_extensions.final
class Rule(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    META_FIELD_NUMBER: builtins.int
    CONDITION_FIELD_NUMBER: builtins.int
    VALUE_FIELD_NUMBER: builtins.int
    @property
    def meta(self) -> global___StarMeta: ...
    condition: builtins.str
    @property
    def value(self) -> global___StarExpr: ...
    def __init__(
        self,
        *,
        meta: global___StarMeta | None = ...,
        condition: builtins.str = ...,
        value: global___StarExpr | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["meta", b"meta", "value", b"value"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["condition", b"condition", "meta", b"meta", "value", b"value"]) -> None: ...

global___Rule = Rule

@typing_extensions.final
class ImportStatement(google.protobuf.message.Message):
    """An assignment expression in starlark, e.g. `x = 1`."""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    META_FIELD_NUMBER: builtins.int
    LHS_FIELD_NUMBER: builtins.int
    OPERATOR_FIELD_NUMBER: builtins.int
    LINE_BREAK_FIELD_NUMBER: builtins.int
    RHS_FIELD_NUMBER: builtins.int
    @property
    def meta(self) -> global___StarMeta: ...
    @property
    def lhs(self) -> global___IdentExpr:
        """the variable that the import is assigned to"""
    operator: builtins.str
    """e.g. `=`"""
    line_break: builtins.bool
    """Line break between operator and RHS"""
    @property
    def rhs(self) -> global___ImportExpr: ...
    def __init__(
        self,
        *,
        meta: global___StarMeta | None = ...,
        lhs: global___IdentExpr | None = ...,
        operator: builtins.str = ...,
        line_break: builtins.bool = ...,
        rhs: global___ImportExpr | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["lhs", b"lhs", "meta", b"meta", "rhs", b"rhs"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["lhs", b"lhs", "line_break", b"line_break", "meta", b"meta", "operator", b"operator", "rhs", b"rhs"]) -> None: ...

global___ImportStatement = ImportStatement

@typing_extensions.final
class ImportExpr(google.protobuf.message.Message):
    """an import expression, e.g. `proto.package("google.protobuf")`"""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    META_FIELD_NUMBER: builtins.int
    DOT_FIELD_NUMBER: builtins.int
    ARGS_FIELD_NUMBER: builtins.int
    @property
    def meta(self) -> global___StarMeta: ...
    @property
    def dot(self) -> global___DotExpr: ...
    @property
    def args(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
    def __init__(
        self,
        *,
        meta: global___StarMeta | None = ...,
        dot: global___DotExpr | None = ...,
        args: collections.abc.Iterable[builtins.str] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["dot", b"dot", "meta", b"meta"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["args", b"args", "dot", b"dot", "meta", b"meta"]) -> None: ...

global___ImportExpr = ImportExpr

@typing_extensions.final
class DotExpr(google.protobuf.message.Message):
    """a dot expression, e.g. `proto.package`"""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    META_FIELD_NUMBER: builtins.int
    X_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    @property
    def meta(self) -> global___StarMeta: ...
    x: builtins.str
    """The token that appears before the dot in the dot expression, e.g. `proto`"""
    name: builtins.str
    """The token that appears after the dot in the dot expression, e.g. `package`"""
    def __init__(
        self,
        *,
        meta: global___StarMeta | None = ...,
        x: builtins.str = ...,
        name: builtins.str = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["meta", b"meta", "name", b"name", "x", b"x"]) -> None: ...

global___DotExpr = DotExpr

@typing_extensions.final
class StarExpr(google.protobuf.message.Message):
    """A single starlark expression. May not be fully decomposed.
    Stores the string representation of the expression in the metadata.
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    META_FIELD_NUMBER: builtins.int
    EXPRESSION_FIELD_NUMBER: builtins.int
    @property
    def meta(self) -> global___StarMeta: ...
    expression: builtins.str
    def __init__(
        self,
        *,
        meta: global___StarMeta | None = ...,
        expression: builtins.str = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["expression", b"expression", "meta", b"meta"]) -> None: ...

global___StarExpr = StarExpr

@typing_extensions.final
class IdentExpr(google.protobuf.message.Message):
    """A single token in starlark. E.g. True, False, or a variable name."""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    META_FIELD_NUMBER: builtins.int
    TOKEN_FIELD_NUMBER: builtins.int
    @property
    def meta(self) -> global___StarMeta: ...
    token: builtins.str
    def __init__(
        self,
        *,
        meta: global___StarMeta | None = ...,
        token: builtins.str = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["meta", b"meta", "token", b"token"]) -> None: ...

global___IdentExpr = IdentExpr

@typing_extensions.final
class StarMeta(google.protobuf.message.Message):
    """Metadata commonly associated with any starlark expression"""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    COMMENTS_FIELD_NUMBER: builtins.int
    MULTILINE_FIELD_NUMBER: builtins.int
    @property
    def comments(self) -> global___Comments: ...
    multiline: builtins.bool
    def __init__(
        self,
        *,
        comments: global___Comments | None = ...,
        multiline: builtins.bool = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["comments", b"comments"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["comments", b"comments", "multiline", b"multiline"]) -> None: ...

global___StarMeta = StarMeta

@typing_extensions.final
class Comments(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    BEFORE_FIELD_NUMBER: builtins.int
    SUFFIX_FIELD_NUMBER: builtins.int
    AFTER_FIELD_NUMBER: builtins.int
    @property
    def before(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Comment]: ...
    @property
    def suffix(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Comment]: ...
    @property
    def after(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Comment]: ...
    def __init__(
        self,
        *,
        before: collections.abc.Iterable[global___Comment] | None = ...,
        suffix: collections.abc.Iterable[global___Comment] | None = ...,
        after: collections.abc.Iterable[global___Comment] | None = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing_extensions.Literal["after", b"after", "before", b"before", "suffix", b"suffix"]) -> None: ...

global___Comments = Comments

@typing_extensions.final
class Comment(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    TOKEN_FIELD_NUMBER: builtins.int
    token: builtins.str
    def __init__(
        self,
        *,
        token: builtins.str = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing_extensions.Literal["token", b"token"]) -> None: ...

global___Comment = Comment
