// 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},
        encoding::{Decodable as _, Encodable as _},
        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,
}
