[][src]Macro vulkayes_core::vk_enum_subset

macro_rules! vk_enum_subset {
    (
		$( #[$attribute: meta] )*
		pub enum $name: ident {
			$(
				$( #[$variant_attribute: meta] )*
				$variant: ident
			),+ $(,)?
		} impl Into<$vk_enum: ty>
	) => { ... };
}

Creates a subset of a vk enum, which is defined as an i32 struct with associated constants.

Usage:


vk_enum_subset! {
	/// Doc
	pub enum SubsetEnum {
		FOO,
		BAR,
		BAZ
	} impl Into<vk::MainEnum>
}

expands to:


#[allow(non_camel_case_types)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
/// Doc
pub enum SubsetEnum {
	FOO = <vk::MainEnum>::FOO.as_raw(),
	BAR = <vk::MainEnum>::BAR.as_raw(),
	BAZ = <vk::MainEnum>::BAZ.as_raw()
}
impl Into<vk::MainEnum> for SubsetEnum {
	fn into(self) -> vk::MainEnum {
		<vk::MainEnum>::from_raw(self as i32)
	}
}
impl std::convert::TryFrom<vk::MainEnum> for SubsetEnum {
	type Error = String;

	fn try_from(value: vk::MainEnum) -> Result<Self, Self::Error> {
		match value {
			vk::MainEnum::FOO => Ok(SubsetEnum::FOO),
			vk::MainEnum::BAR => Ok(SubsetEnum::BAR),
			vk::MainEnum::BAZ => Ok(SubsetEnum::BAZ),
			_ => Err(
				format!(
					concat!("Cannot convert from ", stringify!(vk::MainEnum), "::{:?} to ", stringify!(SubsetEnum)),
					value
				)
			)
		}
	}
}