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

#![allow(
	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(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub enum UnionSize8Alignment4 {
    Variant(u32),
}
fidl_xunion! {
    name: UnionSize8Alignment4,
    members: [
        Variant {
            ty: u32,
            ordinal: 1,
        },
    ],
    strict_value: true,
}

#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub enum UnionSize12Alignment4 {
    Variant([u8; 6]),
}
fidl_xunion! {
    name: UnionSize12Alignment4,
    members: [
        Variant {
            ty: [u8; 6],
            ordinal: 1,
        },
    ],
    strict_value: true,
}

#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub enum UnionSize24Alignment8 {
    Variant(StructSize16Alignment8),
}
fidl_xunion! {
    name: UnionSize24Alignment8,
    members: [
        Variant {
            ty: StructSize16Alignment8,
            ordinal: 1,
        },
    ],
    strict_value: true,
}

#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub enum UnionSize36Alignment4 {
    Variant([u8; 32]),
}
fidl_xunion! {
    name: UnionSize36Alignment4,
    members: [
        Variant {
            ty: [u8; 32],
            ordinal: 1,
        },
    ],
    strict_value: true,
}

#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct SandwichUnionSize8Alignment4 {
    pub before: u32,
    pub union: UnionSize8Alignment4,
    pub after: u32,
}

fidl_struct! {
  name: SandwichUnionSize8Alignment4,
  members: [
    before {
      ty: u32,
      offset_v1: 0,
    },
    union {
      ty: UnionSize8Alignment4,
      offset_v1: 8,
    },
    after {
      ty: u32,
      offset_v1: 32,
    },
  ],
  padding: [
  {
      ty: u64,
      offset: 0,
      mask: 0xffffffff00000000u64,
  },
  {
      ty: u64,
      offset: 32,
      mask: 0xffffffff00000000u64,
  },],
  size_v1: 40,
  align_v1: 8,
}

#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct SandwichUnionSize12Alignment4 {
    pub before: u32,
    pub union: UnionSize12Alignment4,
    pub after: i32,
}

fidl_struct! {
  name: SandwichUnionSize12Alignment4,
  members: [
    before {
      ty: u32,
      offset_v1: 0,
    },
    union {
      ty: UnionSize12Alignment4,
      offset_v1: 8,
    },
    after {
      ty: i32,
      offset_v1: 32,
    },
  ],
  padding: [
  {
      ty: u64,
      offset: 0,
      mask: 0xffffffff00000000u64,
  },
  {
      ty: u64,
      offset: 32,
      mask: 0xffffffff00000000u64,
  },],
  size_v1: 40,
  align_v1: 8,
}

#[derive(
    Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, zerocopy::AsBytes, zerocopy::FromBytes,
)]
#[repr(C)]
pub struct StructSize16Alignment8 {
    pub f1: u64,
    pub f2: u64,
}

fidl_struct_copy! {
  name: StructSize16Alignment8,
  members: [
    f1 {
      ty: u64,
      offset_v1: 0,
    },
    f2 {
      ty: u64,
      offset_v1: 8,
    },
  ],
  padding: [],
  size_v1: 16,
  align_v1: 8,
}

#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct SandwichUnionSize24Alignment8 {
    pub before: u32,
    pub union: UnionSize24Alignment8,
    pub after: u32,
}

fidl_struct! {
  name: SandwichUnionSize24Alignment8,
  members: [
    before {
      ty: u32,
      offset_v1: 0,
    },
    union {
      ty: UnionSize24Alignment8,
      offset_v1: 8,
    },
    after {
      ty: u32,
      offset_v1: 32,
    },
  ],
  padding: [
  {
      ty: u64,
      offset: 0,
      mask: 0xffffffff00000000u64,
  },
  {
      ty: u64,
      offset: 32,
      mask: 0xffffffff00000000u64,
  },],
  size_v1: 40,
  align_v1: 8,
}

#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct SandwichUnionSize36Alignment4 {
    pub before: u32,
    pub union: UnionSize36Alignment4,
    pub after: u32,
}

fidl_struct! {
  name: SandwichUnionSize36Alignment4,
  members: [
    before {
      ty: u32,
      offset_v1: 0,
    },
    union {
      ty: UnionSize36Alignment4,
      offset_v1: 8,
    },
    after {
      ty: u32,
      offset_v1: 32,
    },
  ],
  padding: [
  {
      ty: u64,
      offset: 0,
      mask: 0xffffffff00000000u64,
  },
  {
      ty: u64,
      offset: 32,
      mask: 0xffffffff00000000u64,
  },],
  size_v1: 40,
  align_v1: 8,
}
