// 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},
};

bitflags! {
    pub struct BitsType: u32 {
        const Value = 1;
        const True_ = 2;
    }
}
fidl_strict_bits! {
    name: BitsType,
    prim_ty: u32,
}

pub const ENABLED_FLAG: bool = true;

pub const OFFSET: i8 = -33;

pub const ANSWER: u16 = 42;

pub const ANSWER_IN_BINARY: u16 = 42;

pub const POPULATION_USA_2018: u32 = 330000000;

pub const DIAMOND: u64 = 1746410393481133080;

pub const FUCHSIA: u64 = 4054509061583223046;

pub const USERNAME: &str = r###""squeenze""###;

pub const MIN_TEMP: f32 = -273.15;

pub const CONVERSION_FACTOR: f64 = 1.41421;

pub const ENUM_VAL: EnumType = EnumType::Value;

pub const ENUM_PRIMITIVE_VAL: i32 = EnumType::Value;

pub const ENUM_TRUE: EnumType = EnumType::True_;

pub const ENUM_PRIMITIVE_TRUE: i32 = EnumType::True_;

pub const BITS_VAL: BitsType = BitsType::Value;

pub const BITS_PRIMITIVE_VAL: i32 = BitsType::Value;

pub const BITS_TRUE: BitsType = BitsType::True_;

pub const BITS_PRIMITIVE_TRUE: i32 = BitsType::True_;

#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[repr(i32)]
pub enum EnumType {
    Value = 1,
    True_ = 2,
}
fidl_strict_enum! {
    name: EnumType,
    prim_ty: i32,
    members: [
        Value { value: 1, },
        True_ { value: 2, },
    ],
}
