// C++/WinRT v2.0.190620.2

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

#ifndef WINRT_Windows_Globalization_Collation_0_H
#define WINRT_Windows_Globalization_Collation_0_H
namespace winrt::Windows::Globalization::Collation
{
    struct ICharacterGrouping;
    struct ICharacterGroupings;
    struct ICharacterGroupingsFactory;
    struct CharacterGrouping;
    struct CharacterGroupings;
}
namespace winrt::impl
{
    template <> struct category<Windows::Globalization::Collation::ICharacterGrouping>
    {
        using type = interface_category;
    };
    template <> struct category<Windows::Globalization::Collation::ICharacterGroupings>
    {
        using type = interface_category;
    };
    template <> struct category<Windows::Globalization::Collation::ICharacterGroupingsFactory>
    {
        using type = interface_category;
    };
    template <> struct category<Windows::Globalization::Collation::CharacterGrouping>
    {
        using type = class_category;
    };
    template <> struct category<Windows::Globalization::Collation::CharacterGroupings>
    {
        using type = class_category;
    };
    template <> struct name<Windows::Globalization::Collation::ICharacterGrouping>
    {
        static constexpr auto & value{ L"Windows.Globalization.Collation.ICharacterGrouping" };
    };
    template <> struct name<Windows::Globalization::Collation::ICharacterGroupings>
    {
        static constexpr auto & value{ L"Windows.Globalization.Collation.ICharacterGroupings" };
    };
    template <> struct name<Windows::Globalization::Collation::ICharacterGroupingsFactory>
    {
        static constexpr auto & value{ L"Windows.Globalization.Collation.ICharacterGroupingsFactory" };
    };
    template <> struct name<Windows::Globalization::Collation::CharacterGrouping>
    {
        static constexpr auto & value{ L"Windows.Globalization.Collation.CharacterGrouping" };
    };
    template <> struct name<Windows::Globalization::Collation::CharacterGroupings>
    {
        static constexpr auto & value{ L"Windows.Globalization.Collation.CharacterGroupings" };
    };
    template <> struct guid_storage<Windows::Globalization::Collation::ICharacterGrouping>
    {
        static constexpr guid value{ 0xFAE761BB,0x805D,0x4BB0,{ 0x95,0xBB,0xC1,0xF7,0xC3,0xE8,0xEB,0x8E } };
    };
    template <> struct guid_storage<Windows::Globalization::Collation::ICharacterGroupings>
    {
        static constexpr guid value{ 0xB8D20A75,0xD4CF,0x4055,{ 0x80,0xE5,0xCE,0x16,0x9C,0x22,0x64,0x96 } };
    };
    template <> struct guid_storage<Windows::Globalization::Collation::ICharacterGroupingsFactory>
    {
        static constexpr guid value{ 0x99EA9FD9,0x886D,0x4401,{ 0x9F,0x98,0x69,0xC8,0x2D,0x4C,0x2F,0x78 } };
    };
    template <> struct default_interface<Windows::Globalization::Collation::CharacterGrouping>
    {
        using type = Windows::Globalization::Collation::ICharacterGrouping;
    };
    template <> struct default_interface<Windows::Globalization::Collation::CharacterGroupings>
    {
        using type = Windows::Globalization::Collation::ICharacterGroupings;
    };
    template <> struct abi<Windows::Globalization::Collation::ICharacterGrouping>
    {
        struct __declspec(novtable) type : inspectable_abi
        {
            virtual int32_t __stdcall get_First(void**) noexcept = 0;
            virtual int32_t __stdcall get_Label(void**) noexcept = 0;
        };
    };
    template <> struct abi<Windows::Globalization::Collation::ICharacterGroupings>
    {
        struct __declspec(novtable) type : inspectable_abi
        {
            virtual int32_t __stdcall Lookup(void*, void**) noexcept = 0;
        };
    };
    template <> struct abi<Windows::Globalization::Collation::ICharacterGroupingsFactory>
    {
        struct __declspec(novtable) type : inspectable_abi
        {
            virtual int32_t __stdcall Create(void*, void**) noexcept = 0;
        };
    };
    template <typename D>
    struct consume_Windows_Globalization_Collation_ICharacterGrouping
    {
        [[nodiscard]] auto First() const;
        [[nodiscard]] auto Label() const;
    };
    template <> struct consume<Windows::Globalization::Collation::ICharacterGrouping>
    {
        template <typename D> using type = consume_Windows_Globalization_Collation_ICharacterGrouping<D>;
    };
    template <typename D>
    struct consume_Windows_Globalization_Collation_ICharacterGroupings
    {
        auto Lookup(param::hstring const& text) const;
    };
    template <> struct consume<Windows::Globalization::Collation::ICharacterGroupings>
    {
        template <typename D> using type = consume_Windows_Globalization_Collation_ICharacterGroupings<D>;
    };
    template <typename D>
    struct consume_Windows_Globalization_Collation_ICharacterGroupingsFactory
    {
        auto Create(param::hstring const& language) const;
    };
    template <> struct consume<Windows::Globalization::Collation::ICharacterGroupingsFactory>
    {
        template <typename D> using type = consume_Windows_Globalization_Collation_ICharacterGroupingsFactory<D>;
    };
}
#endif
