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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Gaming.XboxLive.idl";
import "Windows.Storage.Streams.idl";
import "Windows.System.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        namespace Collections
        {
            interface IPropertySet;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        typedef struct DateTime DateTime;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace XboxLive
        {
            apicontract StorageApiContract;
        }
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IBuffer;
        }
    }
}
namespace Windows
{
    namespace System
    {
        runtimeclass User;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace XboxLive
        {
            namespace Storage
            {
                typedef enum GameSaveErrorStatus GameSaveErrorStatus;

                interface IGameSaveBlobGetResult;

                interface IGameSaveBlobInfo;

                interface IGameSaveBlobInfoGetResult;

                interface IGameSaveBlobInfoQuery;

                interface IGameSaveContainer;

                interface IGameSaveContainerInfo;

                interface IGameSaveContainerInfoGetResult;

                interface IGameSaveContainerInfoQuery;

                interface IGameSaveOperationResult;

                interface IGameSaveProvider;

                interface IGameSaveProviderGetResult;

                interface IGameSaveProviderStatics;

                runtimeclass GameSaveBlobGetResult;

                runtimeclass GameSaveBlobInfo;

                runtimeclass GameSaveBlobInfoGetResult;

                runtimeclass GameSaveBlobInfoQuery;

                runtimeclass GameSaveContainer;

                runtimeclass GameSaveContainerInfo;

                runtimeclass GameSaveContainerInfoGetResult;

                runtimeclass GameSaveContainerInfoQuery;

                runtimeclass GameSaveOperationResult;

                runtimeclass GameSaveProvider;

                runtimeclass GameSaveProviderGetResult;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Gaming
    {
        namespace XboxLive
        {
            namespace Storage
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Gaming.XboxLive.Storage.GameSaveBlobInfo*>;

                    interface Windows.Foundation.Collections.IIterable<Windows.Gaming.XboxLive.Storage.GameSaveContainerInfo*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Gaming.XboxLive.Storage.GameSaveBlobInfo*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Gaming.XboxLive.Storage.GameSaveContainerInfo*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.XboxLive.Storage.GameSaveBlobInfo*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.XboxLive.Storage.GameSaveContainerInfo*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveBlobGetResult*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveBlobInfoGetResult*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveContainerInfoGetResult*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveOperationResult*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveProviderGetResult*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Gaming
    {
        namespace XboxLive
        {
            namespace Storage
            {
                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                enum GameSaveErrorStatus
                {
                    Ok                     = 0,
                    Abort                  = -2147467260,
                    InvalidContainerName   = -2138898431,
                    NoAccess               = -2138898430,
                    OutOfLocalStorage      = -2138898429,
                    UserCanceled           = -2138898428,
                    UpdateTooBig           = -2138898427,
                    QuotaExceeded          = -2138898426,
                    ProvidedBufferTooSmall = -2138898425,
                    BlobNotFound           = -2138898424,
                    NoXboxLiveInfo         = -2138898423,
                    ContainerNotInSync     = -2138898422,
                    ContainerSyncFailed    = -2138898421,
                    UserHasNoXboxLiveInfo  = -2138898420,
                    ObjectExpired          = -2138898419
                };

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveBlobGetResult)]
                [uuid(917281E0-7201-4953-AA2C-4008F03AEF45)]
                interface IGameSaveBlobGetResult : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveErrorStatus* value);
                    [propget] HRESULT Value([out] [retval] Windows.Foundation.Collections.IMapView<HSTRING, Windows.Storage.Streams.IBuffer*>** value);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveBlobInfo)]
                [uuid(ADD38034-BAF0-4645-B6D0-46EDAFFB3C2B)]
                interface IGameSaveBlobInfo : IInspectable
                {
                    [propget] HRESULT Name([out] [retval] HSTRING* value);
                    [propget] HRESULT Size([out] [retval] UINT32* value);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveBlobInfoGetResult)]
                [uuid(C7578582-3697-42BF-989C-665D923B5231)]
                interface IGameSaveBlobInfoGetResult : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveErrorStatus* value);
                    [propget] HRESULT Value([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Gaming.XboxLive.Storage.GameSaveBlobInfo*>** value);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveBlobInfoQuery)]
                [uuid(9FDD74B2-EEEE-447B-A9D2-7F96C0F83208)]
                interface IGameSaveBlobInfoQuery : IInspectable
                {
                    [default_overload] [overload("GetBlobInfoAsync")] HRESULT GetBlobInfoAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveBlobInfoGetResult*>** operation);
                    [overload("GetBlobInfoAsync")] HRESULT GetBlobInfoWithIndexAndMaxAsync([in] UINT32 startIndex, [in] UINT32 maxNumberOfItems, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveBlobInfoGetResult*>** operation);
                    HRESULT GetItemCountAsync([out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** operation);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveContainer)]
                [uuid(C3C08F89-563F-4ECD-9C6F-33FD0E323D10)]
                interface IGameSaveContainer : IInspectable
                {
                    [propget] HRESULT Name([out] [retval] HSTRING* value);
                    [propget] HRESULT Provider([out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveProvider** value);
                    HRESULT SubmitUpdatesAsync([in] Windows.Foundation.Collections.IMapView<HSTRING, Windows.Storage.Streams.IBuffer*>* blobsToWrite, [in] Windows.Foundation.Collections.IIterable<HSTRING>* blobsToDelete, [in] HSTRING displayName, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveOperationResult*>** operation);
                    HRESULT ReadAsync([in] Windows.Foundation.Collections.IMapView<HSTRING, Windows.Storage.Streams.IBuffer*>* blobsToRead, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveOperationResult*>** action);
                    HRESULT GetAsync([in] Windows.Foundation.Collections.IIterable<HSTRING>* blobsToRead, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveBlobGetResult*>** operation);
                    HRESULT SubmitPropertySetUpdatesAsync([in] Windows.Foundation.Collections.IPropertySet* blobsToWrite, [in] Windows.Foundation.Collections.IIterable<HSTRING>* blobsToDelete, [in] HSTRING displayName, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveOperationResult*>** operation);
                    HRESULT CreateBlobInfoQuery([in] HSTRING blobNamePrefix, [out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveBlobInfoQuery** query);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveContainerInfo)]
                [uuid(B7E27300-155D-4BB4-B2BA-930306F391B5)]
                interface IGameSaveContainerInfo : IInspectable
                {
                    [propget] HRESULT Name([out] [retval] HSTRING* value);
                    [propget] HRESULT TotalSize([out] [retval] UINT64* value);
                    [propget] HRESULT DisplayName([out] [retval] HSTRING* value);
                    [propget] HRESULT LastModifiedTime([out] [retval] Windows.Foundation.DateTime* value);
                    [propget] HRESULT NeedsSync([out] [retval] boolean* value);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveContainerInfoGetResult)]
                [uuid(FFC50D74-C581-4F9D-9E39-30A10C1E4C50)]
                interface IGameSaveContainerInfoGetResult : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveErrorStatus* value);
                    [propget] HRESULT Value([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Gaming.XboxLive.Storage.GameSaveContainerInfo*>** value);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveContainerInfoQuery)]
                [uuid(3C94E863-6F80-4327-9327-FFC11AFD42B3)]
                interface IGameSaveContainerInfoQuery : IInspectable
                {
                    [default_overload] [overload("GetContainerInfoAsync")] HRESULT GetContainerInfoAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveContainerInfoGetResult*>** operation);
                    [overload("GetContainerInfoAsync")] HRESULT GetContainerInfoWithIndexAndMaxAsync([in] UINT32 startIndex, [in] UINT32 maxNumberOfItems, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveContainerInfoGetResult*>** operation);
                    HRESULT GetItemCountAsync([out] [retval] Windows.Foundation.IAsyncOperation<UINT32>** operation);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveOperationResult)]
                [uuid(CF0F1A05-24A0-4582-9A55-B1BBBB9388D8)]
                interface IGameSaveOperationResult : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveErrorStatus* value);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveProvider)]
                [uuid(90A60394-80FE-4211-97F8-A5DE14DD95D2)]
                interface IGameSaveProvider : IInspectable
                {
                    [propget] HRESULT User([out] [retval] Windows.System.User** value);
                    HRESULT CreateContainer([in] HSTRING name, [out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveContainer** result);
                    HRESULT DeleteContainerAsync([in] HSTRING name, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveOperationResult*>** action);
                    [default_overload] [overload("CreateContainerInfoQuery")] HRESULT CreateContainerInfoQuery([out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveContainerInfoQuery** query);
                    [overload("CreateContainerInfoQuery")] HRESULT CreateContainerInfoQueryWithName([in] HSTRING containerNamePrefix, [out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveContainerInfoQuery** query);
                    HRESULT GetRemainingBytesInQuotaAsync([out] [retval] Windows.Foundation.IAsyncOperation<INT64>** operation);
                    [propget] HRESULT ContainersChangedSinceLastSync([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveProviderGetResult)]
                [uuid(3AB90816-D393-4D65-AC16-41C3E67AB945)]
                interface IGameSaveProviderGetResult : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveErrorStatus* value);
                    [propget] HRESULT Value([out] [retval] Windows.Gaming.XboxLive.Storage.GameSaveProvider** value);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [exclusiveto(Windows.Gaming.XboxLive.Storage.GameSaveProvider)]
                [uuid(D01D3ED0-7B03-449D-8CBD-3402842A1048)]
                interface IGameSaveProviderStatics : IInspectable
                {
                    HRESULT GetForUserAsync([in] Windows.System.User* user, [in] HSTRING serviceConfigId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveProviderGetResult*>** operation);
                    HRESULT GetSyncOnDemandForUserAsync([in] Windows.System.User* user, [in] HSTRING serviceConfigId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.XboxLive.Storage.GameSaveProviderGetResult*>** operation);
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveBlobGetResult
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveBlobGetResult;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveBlobInfo
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveBlobInfo;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveBlobInfoGetResult
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveBlobInfoGetResult;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveBlobInfoQuery
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveBlobInfoQuery;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveContainer
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveContainer;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveContainerInfo
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveContainerInfo;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveContainerInfoGetResult
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveContainerInfoGetResult;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveContainerInfoQuery
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveContainerInfoQuery;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveOperationResult
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveOperationResult;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Gaming.XboxLive.Storage.IGameSaveProviderStatics, Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                runtimeclass GameSaveProvider
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveProvider;
                }

                [contract(Windows.Gaming.XboxLive.StorageApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass GameSaveProviderGetResult
                {
                    [default] interface Windows.Gaming.XboxLive.Storage.IGameSaveProviderGetResult;
                }
            }
        }
    }
}
