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

import enum
import datetime
import sys
import types
import typing

import winsdk.system
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(winsdk.system.Object, typing.MutableSequence[IJsonValue]):
    value_type: JsonValueType
    size: winsdk.system.UInt32
    def __str__(self) -> str: ...
    def __len__(self) -> int: ...
    @typing.overload
    def __getitem__(self, index: int) -> IJsonValue: ...
    @typing.overload
    def __getitem__(self, index: slice) -> winsdk.system.Array[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: winsdk.system.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: winsdk.system.UInt32) -> typing.Optional[JsonArray]: ...
    def get_at(self, index: winsdk.system.UInt32) -> typing.Optional[IJsonValue]: ...
    def get_boolean(self) -> winsdk.system.Boolean: ...
    def get_boolean_at(self, index: winsdk.system.UInt32) -> winsdk.system.Boolean: ...
    def get_many(self, start_index: winsdk.system.UInt32, items: winsdk.system.Array[IJsonValue]) -> winsdk.system.UInt32: ...
    def get_number(self) -> winsdk.system.Double: ...
    def get_number_at(self, index: winsdk.system.UInt32) -> winsdk.system.Double: ...
    def get_object(self) -> typing.Optional[JsonObject]: ...
    def get_object_at(self, index: winsdk.system.UInt32) -> typing.Optional[JsonObject]: ...
    def get_string(self) -> str: ...
    def get_string_at(self, index: winsdk.system.UInt32) -> str: ...
    def get_view(self) -> typing.Optional[winsdk.windows.foundation.collections.IVectorView[IJsonValue]]: ...
    def index_of(self, value: typing.Optional[IJsonValue]) -> typing.Tuple[winsdk.system.Boolean, winsdk.system.UInt32]: ...
    def insert_at(self, index: winsdk.system.UInt32, value: typing.Optional[IJsonValue]) -> None: ...
    @staticmethod
    def parse(input: str) -> typing.Optional[JsonArray]: ...
    def remove_at(self, index: winsdk.system.UInt32) -> None: ...
    def remove_at_end(self) -> None: ...
    def replace_all(self, items: winsdk.system.Array[IJsonValue]) -> None: ...
    def set_at(self, index: winsdk.system.UInt32, value: typing.Optional[IJsonValue]) -> None: ...
    def stringify(self) -> str: ...
    def to_string(self) -> str: ...
    @staticmethod
    def try_parse(input: str) -> typing.Tuple[winsdk.system.Boolean, typing.Optional[JsonArray]]: ...

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

class JsonObject(winsdk.system.Object, typing.MutableMapping[str, IJsonValue]):
    value_type: JsonValueType
    size: winsdk.system.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: winsdk.system.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) -> winsdk.system.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) -> winsdk.system.Boolean: ...
    @typing.overload
    def get_named_boolean(self, name: str, default_value: winsdk.system.Boolean) -> winsdk.system.Boolean: ...
    @typing.overload
    def get_named_number(self, name: str) -> winsdk.system.Double: ...
    @typing.overload
    def get_named_number(self, name: str, default_value: winsdk.system.Double) -> winsdk.system.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) -> winsdk.system.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) -> winsdk.system.Boolean: ...
    def insert(self, key: str, value: typing.Optional[IJsonValue]) -> winsdk.system.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[winsdk.system.Boolean, typing.Optional[JsonObject]]: ...

class JsonValue(winsdk.system.Object):
    value_type: JsonValueType
    def __str__(self) -> str: ...
    @staticmethod
    def _from(obj: winsdk.system.Object) -> JsonValue: ...
    @staticmethod
    def create_boolean_value(input: winsdk.system.Boolean) -> typing.Optional[JsonValue]: ...
    @staticmethod
    def create_null_value() -> typing.Optional[JsonValue]: ...
    @staticmethod
    def create_number_value(input: winsdk.system.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) -> winsdk.system.Boolean: ...
    def get_number(self) -> winsdk.system.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[winsdk.system.Boolean, typing.Optional[JsonValue]]: ...

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

