//
// 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.Storage.Streams.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IClosable;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IInputStream;

            interface IOutputStream;
        }
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Compression
        {
            typedef enum CompressAlgorithm CompressAlgorithm;

            interface ICompressor;

            interface ICompressorFactory;

            interface IDecompressor;

            interface IDecompressorFactory;

            runtimeclass Compressor;

            runtimeclass Decompressor;
        }
    }
}

// Generic instantiations

// Type definition
namespace Windows
{
    namespace Storage
    {
        namespace Compression
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum CompressAlgorithm
            {
                InvalidAlgorithm = 0,
                NullAlgorithm    = 1,
                Mszip            = 2,
                Xpress           = 3,
                XpressHuff       = 4,
                Lzms             = 5
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Storage.Compression.Compressor)]
            [uuid(0AC3645A-57AC-4EE1-B702-84D39D5424E0)]
            interface ICompressor : IInspectable
                requires
                    Windows.Storage.Streams.IOutputStream,
                    Windows.Foundation.IClosable
            {
                HRESULT FinishAsync([out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
                HRESULT DetachStream([out] [retval] Windows.Storage.Streams.IOutputStream** stream);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Storage.Compression.Compressor)]
            [uuid(5F3D96A4-2CFB-442C-A8BA-D7D11B039DA0)]
            interface ICompressorFactory : IInspectable
            {
                HRESULT CreateCompressor([in] Windows.Storage.Streams.IOutputStream* underlyingStream, [out] [retval] Windows.Storage.Compression.Compressor** createdCompressor);
                HRESULT CreateCompressorEx([in] Windows.Storage.Streams.IOutputStream* underlyingStream, [in] Windows.Storage.Compression.CompressAlgorithm algorithm, [in] UINT32 blockSize, [out] [retval] Windows.Storage.Compression.Compressor** createdCompressor);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Storage.Compression.Decompressor)]
            [uuid(B883FE46-D68A-4C8B-ADA0-4EE813FC5283)]
            interface IDecompressor : IInspectable
                requires
                    Windows.Storage.Streams.IInputStream,
                    Windows.Foundation.IClosable
            {
                HRESULT DetachStream([out] [retval] Windows.Storage.Streams.IInputStream** stream);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Storage.Compression.Decompressor)]
            [uuid(5337E252-1DA2-42E1-8834-0379D28D742F)]
            interface IDecompressorFactory : IInspectable
            {
                HRESULT CreateDecompressor([in] Windows.Storage.Streams.IInputStream* underlyingStream, [out] [retval] Windows.Storage.Compression.Decompressor** createdDecompressor);
            }

            [activatable(Windows.Storage.Compression.ICompressorFactory, Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass Compressor
            {
                [default] interface Windows.Storage.Compression.ICompressor;
                interface Windows.Storage.Streams.IOutputStream;
                interface Windows.Foundation.IClosable;
            }

            [activatable(Windows.Storage.Compression.IDecompressorFactory, Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass Decompressor
            {
                [default] interface Windows.Storage.Compression.IDecompressor;
                interface Windows.Storage.Streams.IInputStream;
                interface Windows.Foundation.IClosable;
            }
        }
    }
}
