#![allow(clippy::single_component_path_imports)]

dtype_dispatch::build_dtype_macros!(
  #[doc = "\
    **unstable API** Defines enums holding a container generic to `Number`.
  "]
  #[doc = "\
    You'll only want to use this if you're using pco's low level APIs.
    See the dtype_dispatch crate for more details.
  "]
  #[macro_export]
  define_number_enum,

  #[doc = "\
    Matches enums holding a container of `Number`s and puts the concrete type
    into scope.
  "]
  #[doc = "\
    You'll only want to use this if you're using pco's low level APIs.
    See the dtype_dispatch crate for more details.
  "]
  #[macro_export]
  match_number_enum,

  Number,
  {
    F16 => half::f16,
    F32 => f32,
    F64 => f64,
    I16 => i16,
    I32 => i32,
    I64 => i64,
    U16 => u16,
    U32 => u32,
    U64 => u64,
  },
);

dtype_dispatch::build_dtype_macros!(
  define_latent_enum,

  #[doc = "\
    Matches enums holding a container of `Latent`s and puts the concrete type
    into scope.
  "]
  #[doc = "\
    You'll only want to use this if you're using pco's low level APIs.
    See the dtype_dispatch crate for more details.
  "]
  #[macro_export]
  match_latent_enum,

  Latent,
  {
    U16 => u16,
    U32 => u32,
    U64 => u64,
  },
);

pub(crate) use define_latent_enum;
pub(crate) use define_number_enum;
pub(crate) use match_latent_enum;
