//! NOTE: this file is autogenerated, DO NOT MODIFY
//--------------------------------------------------------------------------------
// Section: Constants (3)
//--------------------------------------------------------------------------------
pub const WSB_MAX_OB_STATUS_VALUE_TYPE_PAIR = @as(u32, 5);
pub const WSB_MAX_OB_STATUS_ENTRY = @as(u32, 5);
pub const WSBAPP_ASYNC_IN_PROGRESS = @import("../zig.zig").typedConst(HRESULT, @as(i32, 7995396));

//--------------------------------------------------------------------------------
// Section: Types (8)
//--------------------------------------------------------------------------------
// TODO: this type is limited to platform 'windowsServer2008'
const IID_IWsbApplicationBackupSupport_Value = Guid.initString("1eff3510-4a27-46ad-b9e0-08332f0f4f6d");
pub const IID_IWsbApplicationBackupSupport = &IID_IWsbApplicationBackupSupport_Value;
pub const IWsbApplicationBackupSupport = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CheckConsistency: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IWsbApplicationBackupSupport,
                wszWriterMetadata: ?PWSTR,
                wszComponentName: ?PWSTR,
                wszComponentLogicalPath: ?PWSTR,
                cVolumes: u32,
                rgwszSourceVolumePath: [*]?PWSTR,
                rgwszSnapshotVolumePath: [*]?PWSTR,
                ppAsync: ?*?*IWsbApplicationAsync,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IWsbApplicationBackupSupport,
                wszWriterMetadata: ?PWSTR,
                wszComponentName: ?PWSTR,
                wszComponentLogicalPath: ?PWSTR,
                cVolumes: u32,
                rgwszSourceVolumePath: [*]?PWSTR,
                rgwszSnapshotVolumePath: [*]?PWSTR,
                ppAsync: ?*?*IWsbApplicationAsync,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IWsbApplicationBackupSupport_CheckConsistency(self: *const T, wszWriterMetadata: ?PWSTR, wszComponentName: ?PWSTR, wszComponentLogicalPath: ?PWSTR, cVolumes: u32, rgwszSourceVolumePath: [*]?PWSTR, rgwszSnapshotVolumePath: [*]?PWSTR, ppAsync: ?*?*IWsbApplicationAsync) HRESULT {
                return @as(*const IWsbApplicationBackupSupport.VTable, @ptrCast(self.vtable)).CheckConsistency(@as(*const IWsbApplicationBackupSupport, @ptrCast(self)), wszWriterMetadata, wszComponentName, wszComponentLogicalPath, cVolumes, rgwszSourceVolumePath, rgwszSnapshotVolumePath, ppAsync);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windowsServer2008'
const IID_IWsbApplicationRestoreSupport_Value = Guid.initString("8d3bdb38-4ee8-4718-85f9-c7dbc4ab77aa");
pub const IID_IWsbApplicationRestoreSupport = &IID_IWsbApplicationRestoreSupport_Value;
pub const IWsbApplicationRestoreSupport = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        PreRestore: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IWsbApplicationRestoreSupport,
                wszWriterMetadata: ?PWSTR,
                wszComponentName: ?PWSTR,
                wszComponentLogicalPath: ?PWSTR,
                bNoRollForward: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IWsbApplicationRestoreSupport,
                wszWriterMetadata: ?PWSTR,
                wszComponentName: ?PWSTR,
                wszComponentLogicalPath: ?PWSTR,
                bNoRollForward: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        PostRestore: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IWsbApplicationRestoreSupport,
                wszWriterMetadata: ?PWSTR,
                wszComponentName: ?PWSTR,
                wszComponentLogicalPath: ?PWSTR,
                bNoRollForward: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IWsbApplicationRestoreSupport,
                wszWriterMetadata: ?PWSTR,
                wszComponentName: ?PWSTR,
                wszComponentLogicalPath: ?PWSTR,
                bNoRollForward: BOOLEAN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OrderComponents: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IWsbApplicationRestoreSupport,
                cComponents: u32,
                rgComponentName: [*]?PWSTR,
                rgComponentLogicalPaths: [*]?PWSTR,
                prgComponentName: [*]?*?PWSTR,
                prgComponentLogicalPath: [*]?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IWsbApplicationRestoreSupport,
                cComponents: u32,
                rgComponentName: [*]?PWSTR,
                rgComponentLogicalPaths: [*]?PWSTR,
                prgComponentName: [*]?*?PWSTR,
                prgComponentLogicalPath: [*]?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsRollForwardSupported: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IWsbApplicationRestoreSupport,
                pbRollForwardSupported: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IWsbApplicationRestoreSupport,
                pbRollForwardSupported: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IWsbApplicationRestoreSupport_PreRestore(self: *const T, wszWriterMetadata: ?PWSTR, wszComponentName: ?PWSTR, wszComponentLogicalPath: ?PWSTR, bNoRollForward: BOOLEAN) HRESULT {
                return @as(*const IWsbApplicationRestoreSupport.VTable, @ptrCast(self.vtable)).PreRestore(@as(*const IWsbApplicationRestoreSupport, @ptrCast(self)), wszWriterMetadata, wszComponentName, wszComponentLogicalPath, bNoRollForward);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IWsbApplicationRestoreSupport_PostRestore(self: *const T, wszWriterMetadata: ?PWSTR, wszComponentName: ?PWSTR, wszComponentLogicalPath: ?PWSTR, bNoRollForward: BOOLEAN) HRESULT {
                return @as(*const IWsbApplicationRestoreSupport.VTable, @ptrCast(self.vtable)).PostRestore(@as(*const IWsbApplicationRestoreSupport, @ptrCast(self)), wszWriterMetadata, wszComponentName, wszComponentLogicalPath, bNoRollForward);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IWsbApplicationRestoreSupport_OrderComponents(self: *const T, cComponents: u32, rgComponentName: [*]?PWSTR, rgComponentLogicalPaths: [*]?PWSTR, prgComponentName: [*]?*?PWSTR, prgComponentLogicalPath: [*]?*?PWSTR) HRESULT {
                return @as(*const IWsbApplicationRestoreSupport.VTable, @ptrCast(self.vtable)).OrderComponents(@as(*const IWsbApplicationRestoreSupport, @ptrCast(self)), cComponents, rgComponentName, rgComponentLogicalPaths, prgComponentName, prgComponentLogicalPath);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IWsbApplicationRestoreSupport_IsRollForwardSupported(self: *const T, pbRollForwardSupported: ?*u8) HRESULT {
                return @as(*const IWsbApplicationRestoreSupport.VTable, @ptrCast(self.vtable)).IsRollForwardSupported(@as(*const IWsbApplicationRestoreSupport, @ptrCast(self)), pbRollForwardSupported);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windowsServer2008'
const IID_IWsbApplicationAsync_Value = Guid.initString("0843f6f7-895c-44a6-b0c2-05a5022aa3a1");
pub const IID_IWsbApplicationAsync = &IID_IWsbApplicationAsync_Value;
pub const IWsbApplicationAsync = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        QueryStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IWsbApplicationAsync,
                phrResult: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IWsbApplicationAsync,
                phrResult: ?*HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Abort: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IWsbApplicationAsync,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IWsbApplicationAsync,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IWsbApplicationAsync_QueryStatus(self: *const T, phrResult: ?*HRESULT) HRESULT {
                return @as(*const IWsbApplicationAsync.VTable, @ptrCast(self.vtable)).QueryStatus(@as(*const IWsbApplicationAsync, @ptrCast(self)), phrResult);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IWsbApplicationAsync_Abort(self: *const T) HRESULT {
                return @as(*const IWsbApplicationAsync.VTable, @ptrCast(self.vtable)).Abort(@as(*const IWsbApplicationAsync, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const WSB_OB_STATUS_ENTRY_PAIR_TYPE = enum(i32) {
    UNDEFINED = 0,
    STRING = 1,
    NUMBER = 2,
    DATETIME = 3,
    TIME = 4,
    SIZE = 5,
    MAX = 6,
};
pub const WSB_OB_ET_UNDEFINED = WSB_OB_STATUS_ENTRY_PAIR_TYPE.UNDEFINED;
pub const WSB_OB_ET_STRING = WSB_OB_STATUS_ENTRY_PAIR_TYPE.STRING;
pub const WSB_OB_ET_NUMBER = WSB_OB_STATUS_ENTRY_PAIR_TYPE.NUMBER;
pub const WSB_OB_ET_DATETIME = WSB_OB_STATUS_ENTRY_PAIR_TYPE.DATETIME;
pub const WSB_OB_ET_TIME = WSB_OB_STATUS_ENTRY_PAIR_TYPE.TIME;
pub const WSB_OB_ET_SIZE = WSB_OB_STATUS_ENTRY_PAIR_TYPE.SIZE;
pub const WSB_OB_ET_MAX = WSB_OB_STATUS_ENTRY_PAIR_TYPE.MAX;

pub const WSB_OB_STATUS_ENTRY_VALUE_TYPE_PAIR = extern struct {
    m_wszObStatusEntryPairValue: ?PWSTR,
    m_ObStatusEntryPairType: WSB_OB_STATUS_ENTRY_PAIR_TYPE,
};

pub const WSB_OB_STATUS_ENTRY = extern struct {
    m_dwIcon: u32,
    m_dwStatusEntryName: u32,
    m_dwStatusEntryValue: u32,
    m_cValueTypePair: u32,
    m_rgValueTypePair: ?*WSB_OB_STATUS_ENTRY_VALUE_TYPE_PAIR,
};

pub const WSB_OB_STATUS_INFO = extern struct {
    m_guidSnapinId: Guid,
    m_cStatusEntry: u32,
    m_rgStatusEntry: ?*WSB_OB_STATUS_ENTRY,
};

pub const WSB_OB_REGISTRATION_INFO = extern struct {
    m_wszResourceDLL: ?PWSTR,
    m_guidSnapinId: Guid,
    m_dwProviderName: u32,
    m_dwProviderIcon: u32,
    m_bSupportsRemoting: BOOLEAN,
};

//--------------------------------------------------------------------------------
// Section: Functions (0)
//--------------------------------------------------------------------------------

//--------------------------------------------------------------------------------
// Section: Unicode Aliases (0)
//--------------------------------------------------------------------------------
const thismodule = @This();
pub usingnamespace switch (@import("../zig.zig").unicode_mode) {
    .ansi => struct {},
    .wide => struct {},
    .unspecified => if (@import("builtin").is_test) struct {} else struct {},
};
//--------------------------------------------------------------------------------
// Section: Imports (5)
//--------------------------------------------------------------------------------
const Guid = @import("../zig.zig").Guid;
const BOOLEAN = @import("../foundation.zig").BOOLEAN;
const HRESULT = @import("../foundation.zig").HRESULT;
const IUnknown = @import("../system/com.zig").IUnknown;
const PWSTR = @import("../foundation.zig").PWSTR;

test {
    @setEvalBranchQuota(comptime @import("std").meta.declarations(@This()).len * 3);

    // reference all the pub declarations
    if (!@import("builtin").is_test) return;
    inline for (comptime @import("std").meta.declarations(@This())) |decl| {
        if (decl.is_pub) {
            _ = @field(@This(), decl.name);
        }
    }
}
