//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0008
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Data
    {
        namespace Json
        {
            typedef enum JsonValueType JsonValueType;

            typedef enum JsonErrorStatus JsonErrorStatus;

            interface IJsonValue;

            interface IJsonValueStatics;

            interface IJsonObject;

            interface IJsonObjectStatics;

            interface IJsonArray;

            interface IJsonArrayStatics;

            interface IJsonErrorStatics;

            runtimeclass JsonArray;

            runtimeclass JsonObject;

            runtimeclass JsonValue;

            runtimeclass JsonError;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Data
    {
        namespace Json
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Data.Json.IJsonValue*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Data.Json.IJsonValue*>*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Data.Json.IJsonValue*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Data.Json.IJsonValue*>*>;

                interface Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Data.Json.IJsonValue*>;

                interface Windows.Foundation.Collections.IMapView<HSTRING, Windows.Data.Json.IJsonValue*>;

                interface Windows.Foundation.Collections.IMap<HSTRING, Windows.Data.Json.IJsonValue*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Data.Json.IJsonValue*>;

                interface Windows.Foundation.Collections.IVector<Windows.Data.Json.IJsonValue*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Data
    {
        namespace Json
        {
            [version(0x06020000)]
            enum JsonValueType
            {
                Null    = 0,
                Boolean = 1,
                Number  = 2,
                String  = 3,
                Array   = 4,
                Object  = 5
            };

            [version(0x06020000)]
            enum JsonErrorStatus
            {
                Unknown             = 0,
                InvalidJsonString   = 1,
                InvalidJsonNumber   = 2,
                JsonValueNotFound   = 3,
                ImplementationLimit = 4
            };

            [uuid(A3219ECB-F0B3-4DCD-BEEE-19D48CD3ED1E)]
            [version(0x06020000)]
            interface IJsonValue : IInspectable
            {
                [propget] HRESULT ValueType([out] [retval] Windows.Data.Json.JsonValueType* value);
                HRESULT Stringify([out] [retval] HSTRING* returnValue);
                HRESULT GetString([out] [retval] HSTRING* returnValue);
                HRESULT GetNumber([out] [retval] DOUBLE* returnValue);
                HRESULT GetBoolean([out] [retval] boolean* returnValue);
                HRESULT GetArray([out] [retval] Windows.Data.Json.JsonArray** returnValue);
                HRESULT GetObject([out] [retval] Windows.Data.Json.JsonObject** returnValue);
            }

            [uuid(5F6B544A-2F53-48E1-91A3-F78B50A6345C)]
            [version(0x06020000)]
            [exclusiveto(Windows.Data.Json.JsonValue)]
            interface IJsonValueStatics : IInspectable
            {
                HRESULT Parse([in] HSTRING input, [out] [retval] Windows.Data.Json.JsonValue** jsonValue);
                HRESULT TryParse([in] HSTRING input, [out] Windows.Data.Json.JsonValue** result, [out] [retval] boolean* succeeded);
                HRESULT CreateBooleanValue([in] boolean input, [out] [retval] Windows.Data.Json.JsonValue** jsonValue);
                HRESULT CreateNumberValue([in] DOUBLE input, [out] [retval] Windows.Data.Json.JsonValue** jsonValue);
                HRESULT CreateStringValue([in] HSTRING input, [out] [retval] Windows.Data.Json.JsonValue** jsonValue);
            }

            [uuid(064E24DD-29C2-4F83-9AC1-9EE11578BEB3)]
            [exclusiveto(Windows.Data.Json.JsonObject)]
            [version(0x06020000)]
            interface IJsonObject : IInspectable
                requires
                    Windows.Data.Json.IJsonValue
            {
                HRESULT GetNamedValue([in] HSTRING name, [out] [retval] Windows.Data.Json.JsonValue** returnValue);
                HRESULT SetNamedValue([in] HSTRING name, [in] Windows.Data.Json.IJsonValue* value);
                HRESULT GetNamedObject([in] HSTRING name, [out] [retval] Windows.Data.Json.JsonObject** returnValue);
                HRESULT GetNamedArray([in] HSTRING name, [out] [retval] Windows.Data.Json.JsonArray** returnValue);
                HRESULT GetNamedString([in] HSTRING name, [out] [retval] HSTRING* returnValue);
                HRESULT GetNamedNumber([in] HSTRING name, [out] [retval] DOUBLE* returnValue);
                HRESULT GetNamedBoolean([in] HSTRING name, [out] [retval] boolean* returnValue);
            }

            [uuid(2289F159-54DE-45D8-ABCC-22603FA066A0)]
            [version(0x06020000)]
            [exclusiveto(Windows.Data.Json.JsonObject)]
            interface IJsonObjectStatics : IInspectable
            {
                HRESULT Parse([in] HSTRING input, [out] [retval] Windows.Data.Json.JsonObject** jsonObject);
                HRESULT TryParse([in] HSTRING input, [out] Windows.Data.Json.JsonObject** result, [out] [retval] boolean* succeeded);
            }

            [uuid(08C1DDB6-0CBD-4A9A-B5D3-2F852DC37E81)]
            [exclusiveto(Windows.Data.Json.JsonArray)]
            [version(0x06020000)]
            interface IJsonArray : IInspectable
                requires
                    Windows.Data.Json.IJsonValue
            {
                HRESULT GetObjectAt([in] UINT32 index, [out] [retval] Windows.Data.Json.JsonObject** returnValue);
                HRESULT GetArrayAt([in] UINT32 index, [out] [retval] Windows.Data.Json.JsonArray** returnValue);
                HRESULT GetStringAt([in] UINT32 index, [out] [retval] HSTRING* returnValue);
                HRESULT GetNumberAt([in] UINT32 index, [out] [retval] DOUBLE* returnValue);
                HRESULT GetBooleanAt([in] UINT32 index, [out] [retval] boolean* returnValue);
            }

            [uuid(DB1434A9-E164-499F-93E2-8A8F49BB90BA)]
            [version(0x06020000)]
            [exclusiveto(Windows.Data.Json.JsonArray)]
            interface IJsonArrayStatics : IInspectable
            {
                HRESULT Parse([in] HSTRING input, [out] [retval] Windows.Data.Json.JsonArray** jsonArray);
                HRESULT TryParse([in] HSTRING input, [out] Windows.Data.Json.JsonArray** result, [out] [retval] boolean* succeeded);
            }

            [uuid(FE616766-BF27-4064-87B7-6563BB11CE2E)]
            [version(0x06020000)]
            [exclusiveto(Windows.Data.Json.JsonError)]
            interface IJsonErrorStatics : IInspectable
            {
                HRESULT GetStatus([in] INT32 hresult, [out] [retval] Windows.Data.Json.JsonErrorStatus* status);
            }

            [threading(both)]
            [activatable(0x06020000)]
            [static(Windows.Data.Json.IJsonArrayStatics, 0x06020000)]
            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass JsonArray
            {
                [default] interface Windows.Data.Json.IJsonArray;
                interface Windows.Data.Json.IJsonValue;
                interface Windows.Foundation.Collections.IVector<Windows.Data.Json.IJsonValue*>;
                interface Windows.Foundation.Collections.IIterable<Windows.Data.Json.IJsonValue*>;
            }

            [static(Windows.Data.Json.IJsonObjectStatics, 0x06020000)]
            [marshaling_behavior(agile)]
            [version(0x06020000)]
            [activatable(0x06020000)]
            [threading(both)]
            runtimeclass JsonObject
            {
                [default] interface Windows.Data.Json.IJsonObject;
                interface Windows.Data.Json.IJsonValue;
                interface Windows.Foundation.Collections.IMap<HSTRING, Windows.Data.Json.IJsonValue*>;
                interface Windows.Foundation.Collections.IIterable<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Data.Json.IJsonValue*>*>;
            }

            [static(Windows.Data.Json.IJsonValueStatics, 0x06020000)]
            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x06020000)]
            runtimeclass JsonValue
            {
                [default] interface Windows.Data.Json.IJsonValue;
            }

            [threading(both)]
            [version(0x06020000)]
            [marshaling_behavior(agile)]
            [static(Windows.Data.Json.IJsonErrorStatics, 0x06020000)]
            runtimeclass JsonError
            {
            }
        }
    }
}
