// WARNING: Please don't edit this file. It was generated by Python/WinRT v3.2.1

#pragma once

#include "pybase.h"
static_assert(winrt::check_version(PYWINRT_VERSION, "3.2.1"), "Mismatched Py/WinRT headers.");
#include <winrt/Windows.ApplicationModel.DataTransfer.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.Storage.Streams.h>

#include <winrt/Windows.Graphics.Printing.h>

namespace py::proj::Windows::Graphics::Printing
{
}

namespace py
{
    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintBinding> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintBordering> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintCollation> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintColorMode> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintDuplex> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintHolePunch> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintMediaSize> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintMediaType> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintOrientation> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintQuality> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintStaple> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintTaskCompletion> = "i";

    template<>
    inline constexpr const char* buffer_format<winrt::Windows::Graphics::Printing::PrintPageDescription> = "T{T{f:width:f:height:}:page_size:T{f:x:f:y:f:width:f:height:}:imageable_rect:I:dpi_x:I:dpi_y:}";


    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintBinding>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintBinding";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintBinding";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintBordering>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintBordering";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintBordering";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintCollation>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintCollation";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintCollation";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintColorMode>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintColorMode";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintColorMode";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintDuplex>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintDuplex";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintDuplex";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintHolePunch>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintHolePunch";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintHolePunch";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintMediaSize>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintMediaSize";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintMediaSize";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintMediaType>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintMediaType";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintMediaType";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintOrientation>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintOrientation";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintOrientation";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintQuality>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintQuality";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintQuality";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintStaple>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintStaple";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintStaple";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTaskCompletion>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTaskCompletion";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTaskCompletion";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintManager>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintManager";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintManager";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintPageInfo>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintPageInfo";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintPageInfo";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintPageRange>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintPageRange";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintPageRange";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintPageRangeOptions>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintPageRangeOptions";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintPageRangeOptions";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTask>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTask";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTask";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTaskCompletedEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTaskCompletedEventArgs";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTaskCompletedEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTaskOptions>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTaskOptions";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTaskOptions";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTaskProgressingEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTaskProgressingEventArgs";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTaskProgressingEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTaskRequest>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTaskRequest";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTaskRequest";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTaskRequestedDeferral>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTaskRequestedDeferral";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTaskRequestedDeferral";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTaskRequestedEventArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTaskRequestedEventArgs";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTaskRequestedEventArgs";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTaskSourceRequestedArgs>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTaskSourceRequestedArgs";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTaskSourceRequestedArgs";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintTaskSourceRequestedDeferral>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintTaskSourceRequestedDeferral";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintTaskSourceRequestedDeferral";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::StandardPrintTaskOptions>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.StandardPrintTaskOptions";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "StandardPrintTaskOptions";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::IPrintDocumentSource>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing._IPrintDocumentSource";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "_IPrintDocumentSource";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::IPrintTaskOptionsCore>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing._IPrintTaskOptionsCore";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "_IPrintTaskOptionsCore";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::IPrintTaskOptionsCoreProperties>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing._IPrintTaskOptionsCoreProperties";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "_IPrintTaskOptionsCoreProperties";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::IPrintTaskOptionsCoreUIConfiguration>
    {
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing._IPrintTaskOptionsCoreUIConfiguration";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "_IPrintTaskOptionsCoreUIConfiguration";
    };

    template<>
    struct py_type<winrt::Windows::Graphics::Printing::PrintPageDescription>
    {
        static constexpr std::string_view from_tuple = "winrt._winrt_windows_graphics_printing.PrintPageDescription_from_tuple";
        static constexpr std::string_view qualified_name = "winrt.windows.graphics.printing.PrintPageDescription";
        static constexpr const char* module_name = "winrt.windows.graphics.printing";
        static constexpr const char* type_name = "PrintPageDescription";
    };
}

#if __has_include("py.Windows.ApplicationModel.DataTransfer.h")
#include "py.Windows.ApplicationModel.DataTransfer.h"
#endif

#if __has_include("py.Windows.Foundation.h")
#include "py.Windows.Foundation.h"
#endif

#if __has_include("py.Windows.Foundation.Collections.h")
#include "py.Windows.Foundation.Collections.h"
#endif

#if __has_include("py.Windows.Storage.Streams.h")
#include "py.Windows.Storage.Streams.h"
#endif

namespace py::impl::Windows::Graphics::Printing
{
    struct PrintTaskSourceRequestedHandler
    {
        static winrt::Windows::Graphics::Printing::PrintTaskSourceRequestedHandler get(PyObject* callable)
        {
            py::delegate_callable _delegate{ callable };

            return [delegate = std::move(_delegate)](winrt::Windows::Graphics::Printing::PrintTaskSourceRequestedArgs const& param0)
            {
                auto gil = py::ensure_gil();

                try
                {
                    py::pyobj_handle py_param0{py::convert(param0)};
                    if (!py_param0)
                    {
                        throw python_exception();
                    }

                    py::pyobj_handle return_value{PyObject_CallOneArg(delegate.callable(), py_param0.get())};
                    if (!return_value)
                    {
                        throw python_exception();
                    }
                }
                catch (python_exception)
                {
                    py::write_unraisable_and_throw();
                }
            };
        };
    };
}

namespace py::wrapper::Windows::Graphics::Printing
{
    using PrintManager = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintManager>;
    using PrintPageInfo = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintPageInfo>;
    using PrintPageRange = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintPageRange>;
    using PrintPageRangeOptions = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintPageRangeOptions>;
    using PrintTask = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintTask>;
    using PrintTaskCompletedEventArgs = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintTaskCompletedEventArgs>;
    using PrintTaskOptions = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintTaskOptions>;
    using PrintTaskProgressingEventArgs = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintTaskProgressingEventArgs>;
    using PrintTaskRequest = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintTaskRequest>;
    using PrintTaskRequestedDeferral = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintTaskRequestedDeferral>;
    using PrintTaskRequestedEventArgs = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintTaskRequestedEventArgs>;
    using PrintTaskSourceRequestedArgs = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintTaskSourceRequestedArgs>;
    using PrintTaskSourceRequestedDeferral = py::winrt_wrapper<winrt::Windows::Graphics::Printing::PrintTaskSourceRequestedDeferral>;
    using StandardPrintTaskOptions = py::winrt_wrapper<winrt::Windows::Graphics::Printing::StandardPrintTaskOptions>;
    using IPrintDocumentSource = py::winrt_wrapper<winrt::Windows::Graphics::Printing::IPrintDocumentSource>;
    using IPrintTaskOptionsCore = py::winrt_wrapper<winrt::Windows::Graphics::Printing::IPrintTaskOptionsCore>;
    using IPrintTaskOptionsCoreProperties = py::winrt_wrapper<winrt::Windows::Graphics::Printing::IPrintTaskOptionsCoreProperties>;
    using IPrintTaskOptionsCoreUIConfiguration = py::winrt_wrapper<winrt::Windows::Graphics::Printing::IPrintTaskOptionsCoreUIConfiguration>;
    using PrintPageDescription = py::winrt_struct_wrapper<winrt::Windows::Graphics::Printing::PrintPageDescription>;
}

namespace py
{
    template <>
    struct delegate_python_type<winrt::Windows::Graphics::Printing::PrintTaskSourceRequestedHandler>
    {
        using type = py::impl::Windows::Graphics::Printing::PrintTaskSourceRequestedHandler;
    };

}
