# WARNING: Please don't edit this file. It was generated by Python/WinRT v1.0.0-beta.7

import enum
import datetime
import sys
import types
import typing

import winsdk._winrt as _winrt
import winsdk.windows.foundation.collections

class JsonErrorStatus(enum.IntEnum):
    UNKNOWN = 0
    INVALID_JSON_STRING = 1
    INVALID_JSON_NUMBER = 2
    JSON_VALUE_NOT_FOUND = 3
    IMPLEMENTATION_LIMIT = 4

class JsonValueType(enum.IntEnum):
    NULL = 0
    BOOLEAN = 1
    NUMBER = 2
    STRING = 3
    ARRAY = 4
    OBJECT = 5

Self = typing.TypeVar('Self')

class JsonArray(_winrt.Object, typing.MutableSequence[IJsonValue]):
    value_type: JsonValueType
    size: _winrt.UInt32
    def __str__(self) -> str: ...
    def __len__(self) -> int: ...
    @typing.overload
    def __getitem__(self, index: int) -> IJsonValue: ...
    @typing.overload
    def __getitem__(self, index: slice) -> typing.MutableSequence[IJsonValue]: ...
    def insert(self, index: int, value: IJsonValue) -> None: ...
    @typing.overload
    def __delitem__(self, index: int) -> None: ...
    @typing.overload
    def __delitem__(self, index: slice) -> None: ...
    @typing.overload
    def __setitem__(self, index: int, value: IJsonValue) -> None: ...
    @typing.overload
    def __setitem__(self, index: slice, value: typing.Iterable[IJsonValue]) -> None: ...
    @staticmethod
    def _from(obj: _winrt.Object) -> JsonArray: ...
    def __new__(cls: typing.Type[JsonArray]) -> JsonArray:...
    def append(self, value: typing.Optional[IJsonValue]) -> None: ...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[winsdk.windows.foundation.collections.IIterator[IJsonValue]]: ...
    def get_array(self) -> typing.Optional[JsonArray]: ...
    def get_array_at(self, index: _winrt.UInt32) -> typing.Optional[JsonArray]: ...
    def get_at(self, index: _winrt.UInt32) -> typing.Optional[IJsonValue]: ...
    def get_boolean(self) -> _winrt.Boolean: ...
    def get_boolean_at(self, index: _winrt.UInt32) -> _winrt.Boolean: ...
    def get_many(self, start_index: _winrt.UInt32, items_size: _winrt.UInt32) -> typing.Tuple[_winrt.UInt32, typing.List[IJsonValue]]: ...
    def get_number(self) -> _winrt.Double: ...
    def get_number_at(self, index: _winrt.UInt32) -> _winrt.Double: ...
    def get_object(self) -> typing.Optional[JsonObject]: ...
    def get_object_at(self, index: _winrt.UInt32) -> typing.Optional[JsonObject]: ...
    def get_string(self) -> str: ...
    def get_string_at(self, index: _winrt.UInt32) -> str: ...
    def get_view(self) -> typing.Optional[winsdk.windows.foundation.collections.IVectorView[IJsonValue]]: ...
    def index_of(self, value: typing.Optional[IJsonValue]) -> typing.Tuple[_winrt.Boolean, _winrt.UInt32]: ...
    def insert_at(self, index: _winrt.UInt32, value: typing.Optional[IJsonValue]) -> None: ...
    @staticmethod
    def parse(input: str) -> typing.Optional[JsonArray]: ...
    def remove_at(self, index: _winrt.UInt32) -> None: ...
    def remove_at_end(self) -> None: ...
    def replace_all(self, items: typing.Sequence[IJsonValue]) -> None: ...
    def set_at(self, index: _winrt.UInt32, value: typing.Optional[IJsonValue]) -> None: ...
    def stringify(self) -> str: ...
    def to_string(self) -> str: ...
    @staticmethod
    def try_parse(input: str) -> typing.Tuple[_winrt.Boolean, typing.Optional[JsonArray]]: ...

class JsonError(_winrt.Object):
    @staticmethod
    def _from(obj: _winrt.Object) -> JsonError: ...
    @staticmethod
    def get_json_status(hresult: _winrt.Int32) -> JsonErrorStatus: ...

class JsonObject(_winrt.Object, typing.MutableMapping[str, IJsonValue]):
    value_type: JsonValueType
    size: _winrt.UInt32
    def __str__(self) -> str: ...
    def __len__(self) -> int: ...
    def __iter__(self) -> typing.Iterator[str]: ...
    def __contains__(self, key: object) -> bool:...
    def __setitem__(self, key: str, value: IJsonValue) -> None: ...
    def __getitem__(self, key: str) -> IJsonValue: ...
    def __delitem__(self, key: str) -> None: ...
    @staticmethod
    def _from(obj: _winrt.Object) -> JsonObject: ...
    def __new__(cls: typing.Type[JsonObject]) -> JsonObject:...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[winsdk.windows.foundation.collections.IIterator[winsdk.windows.foundation.collections.IKeyValuePair[str, IJsonValue]]]: ...
    def get_array(self) -> typing.Optional[JsonArray]: ...
    def get_boolean(self) -> _winrt.Boolean: ...
    @typing.overload
    def get_named_array(self, name: str) -> typing.Optional[JsonArray]: ...
    @typing.overload
    def get_named_array(self, name: str, default_value: typing.Optional[JsonArray]) -> typing.Optional[JsonArray]: ...
    @typing.overload
    def get_named_boolean(self, name: str) -> _winrt.Boolean: ...
    @typing.overload
    def get_named_boolean(self, name: str, default_value: _winrt.Boolean) -> _winrt.Boolean: ...
    @typing.overload
    def get_named_number(self, name: str) -> _winrt.Double: ...
    @typing.overload
    def get_named_number(self, name: str, default_value: _winrt.Double) -> _winrt.Double: ...
    @typing.overload
    def get_named_object(self, name: str) -> typing.Optional[JsonObject]: ...
    @typing.overload
    def get_named_object(self, name: str, default_value: typing.Optional[JsonObject]) -> typing.Optional[JsonObject]: ...
    @typing.overload
    def get_named_string(self, name: str) -> str: ...
    @typing.overload
    def get_named_string(self, name: str, default_value: str) -> str: ...
    @typing.overload
    def get_named_value(self, name: str) -> typing.Optional[JsonValue]: ...
    @typing.overload
    def get_named_value(self, name: str, default_value: typing.Optional[JsonValue]) -> typing.Optional[JsonValue]: ...
    def get_number(self) -> _winrt.Double: ...
    def get_object(self) -> typing.Optional[JsonObject]: ...
    def get_string(self) -> str: ...
    def get_view(self) -> typing.Optional[winsdk.windows.foundation.collections.IMapView[str, IJsonValue]]: ...
    def has_key(self, key: str) -> _winrt.Boolean: ...
    def insert(self, key: str, value: typing.Optional[IJsonValue]) -> _winrt.Boolean: ...
    def lookup(self, key: str) -> typing.Optional[IJsonValue]: ...
    @staticmethod
    def parse(input: str) -> typing.Optional[JsonObject]: ...
    def remove(self, key: str) -> None: ...
    def set_named_value(self, name: str, value: typing.Optional[IJsonValue]) -> None: ...
    def stringify(self) -> str: ...
    def to_string(self) -> str: ...
    @staticmethod
    def try_parse(input: str) -> typing.Tuple[_winrt.Boolean, typing.Optional[JsonObject]]: ...

class JsonValue(_winrt.Object):
    value_type: JsonValueType
    def __str__(self) -> str: ...
    @staticmethod
    def _from(obj: _winrt.Object) -> JsonValue: ...
    @staticmethod
    def create_boolean_value(input: _winrt.Boolean) -> typing.Optional[JsonValue]: ...
    @staticmethod
    def create_null_value() -> typing.Optional[JsonValue]: ...
    @staticmethod
    def create_number_value(input: _winrt.Double) -> typing.Optional[JsonValue]: ...
    @staticmethod
    def create_string_value(input: str) -> typing.Optional[JsonValue]: ...
    def get_array(self) -> typing.Optional[JsonArray]: ...
    def get_boolean(self) -> _winrt.Boolean: ...
    def get_number(self) -> _winrt.Double: ...
    def get_object(self) -> typing.Optional[JsonObject]: ...
    def get_string(self) -> str: ...
    @staticmethod
    def parse(input: str) -> typing.Optional[JsonValue]: ...
    def stringify(self) -> str: ...
    def to_string(self) -> str: ...
    @staticmethod
    def try_parse(input: str) -> typing.Tuple[_winrt.Boolean, typing.Optional[JsonValue]]: ...

class IJsonValue(_winrt.Object):
    value_type: JsonValueType
    @staticmethod
    def _from(obj: _winrt.Object) -> IJsonValue: ...
    def get_array(self) -> typing.Optional[JsonArray]: ...
    def get_boolean(self) -> _winrt.Boolean: ...
    def get_number(self) -> _winrt.Double: ...
    def get_object(self) -> typing.Optional[JsonObject]: ...
    def get_string(self) -> str: ...
    def stringify(self) -> str: ...

