// WARNING: This file is machine generated by fidlgen.

#![allow(
	deprecated, // FIDL Impl struct pattern is referenced internally
	unused_parens, // one-element-tuple-case is not a tuple
	unused_mut, // not all args require mutation, but many do
	nonstandard_style, // auto-caps does its best, but is not always successful
)]
#![recursion_limit = "512"]

#[cfg(target_os = "fuchsia")]
#[allow(unused_imports)]
use fuchsia_zircon as zx;

#[allow(unused_imports)]
use {
    bitflags::bitflags,
    fidl::{
        client::{decode_transaction_body_fut, QueryResponseFut},
        fidl_empty_struct, fidl_flexible_bits, fidl_flexible_enum, fidl_strict_bits,
        fidl_strict_enum, fidl_struct, fidl_struct_copy, fidl_table, fidl_xunion,
        wrap_handle_metadata,
    },
    fuchsia_zircon_status as zx_status,
    futures::future::{self, MaybeDone, TryFutureExt},
};

#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[repr(u32)]
pub enum MyStrictEnum {
    Foo = 1,
    Bar = 2,
}
fidl_strict_enum! {
    name: MyStrictEnum,
    prim_ty: u32,
    members: [
        Foo { value: 1, },
        Bar { value: 2, },
    ],
}

#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[non_exhaustive]
pub enum MyFlexibleEnum {
    Foo,
    Bar,
    #[deprecated = "Use `MyFlexibleEnum::unknown()` to construct and `MyFlexibleEnumUnknown!()` to exhaustively match."]
    #[doc(hidden)]
    __Unknown(u32),
}
/// Pattern that matches an unknown MyFlexibleEnum member.
#[macro_export]
macro_rules! MyFlexibleEnumUnknown {
    () => {
        _
    };
}
fidl_flexible_enum! {
    name: MyFlexibleEnum,
    prim_ty: u32,
    members: [
        Foo { value: 1, },
        Bar { value: 2, },
    ],
    unknown_member: __Unknown,
    default_unknown_value: 0xffffffff,
}

#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[non_exhaustive]
pub enum MyFlexibleEnumWithCustomUnknown {
    Foo,
    Bar,
    CustomUnknown,
    #[deprecated = "Use `MyFlexibleEnumWithCustomUnknown::unknown()` to construct and `MyFlexibleEnumWithCustomUnknownUnknown!()` to exhaustively match."]
    #[doc(hidden)]
    __Unknown(u32),
}
/// Pattern that matches an unknown MyFlexibleEnumWithCustomUnknown member.
#[macro_export]
macro_rules! MyFlexibleEnumWithCustomUnknownUnknown {
    () => {
        _
    };
}
fidl_flexible_enum! {
    name: MyFlexibleEnumWithCustomUnknown,
    prim_ty: u32,
    members: [
        Foo { value: 1, },
        Bar { value: 2, },
        CustomUnknown { value: 3, },
    ],
    custom_unknown_member: CustomUnknown,
    unknown_member: __Unknown,
    default_unknown_value: 0x3,
}
