Reverting changes to Result's Display impl

This commit is contained in:
Aaron Loucks 2019-03-20 21:19:49 -04:00
parent 584a3bb5da
commit d52f2c9b3e
3 changed files with 82 additions and 31 deletions

View file

@ -41317,28 +41317,73 @@ impl Result {
#[doc = "A requested pool allocation has failed due to fragmentation of the pool\'s memory"]
pub const ERROR_FRAGMENTED_POOL: Self = Result(-12);
}
impl std::error::Error for Result {}
impl ::std::error::Error for Result {
fn description(&self) -> &str {
let name = match *self {
Result::SUCCESS => Some("Command completed successfully"),
Result::NOT_READY => Some("A fence or query has not yet completed"),
Result::TIMEOUT => Some("A wait operation has not completed in the specified time"),
Result::EVENT_SET => Some("An event is signaled"),
Result::EVENT_RESET => Some("An event is unsignaled"),
Result::INCOMPLETE => Some("A return array was too small for the result"),
Result::ERROR_OUT_OF_HOST_MEMORY => Some("A host memory allocation has failed"),
Result::ERROR_OUT_OF_DEVICE_MEMORY => Some("A device memory allocation has failed"),
Result::ERROR_INITIALIZATION_FAILED => Some("Initialization of a object has failed"),
Result::ERROR_DEVICE_LOST => {
Some("The logical device has been lost. See <<devsandqueues-lost-device>>")
}
Result::ERROR_MEMORY_MAP_FAILED => Some("Mapping of a memory object has failed"),
Result::ERROR_LAYER_NOT_PRESENT => Some("Layer specified does not exist"),
Result::ERROR_EXTENSION_NOT_PRESENT => Some("Extension specified does not exist"),
Result::ERROR_FEATURE_NOT_PRESENT => {
Some("Requested feature is not available on this device")
}
Result::ERROR_INCOMPATIBLE_DRIVER => Some("Unable to find a Vulkan driver"),
Result::ERROR_TOO_MANY_OBJECTS => {
Some("Too many objects of the type have already been created")
}
Result::ERROR_FORMAT_NOT_SUPPORTED => {
Some("Requested format is not supported on this device")
}
Result::ERROR_FRAGMENTED_POOL => Some(
"A requested pool allocation has failed due to fragmentation of the pool\'s memory",
),
_ => None,
};
name.unwrap_or("unknown error")
}
}
impl fmt::Display for Result {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
let name = match *self {
Result::SUCCESS => Some(stringify!(SUCCESS)),
Result::NOT_READY => Some(stringify!(NOT_READY)),
Result::TIMEOUT => Some(stringify!(TIMEOUT)),
Result::EVENT_SET => Some(stringify!(EVENT_SET)),
Result::EVENT_RESET => Some(stringify!(EVENT_RESET)),
Result::INCOMPLETE => Some(stringify!(INCOMPLETE)),
Result::ERROR_OUT_OF_HOST_MEMORY => Some(stringify!(ERROR_OUT_OF_HOST_MEMORY)),
Result::ERROR_OUT_OF_DEVICE_MEMORY => Some(stringify!(ERROR_OUT_OF_DEVICE_MEMORY)),
Result::ERROR_INITIALIZATION_FAILED => Some(stringify!(ERROR_INITIALIZATION_FAILED)),
Result::ERROR_DEVICE_LOST => Some(stringify!(ERROR_DEVICE_LOST)),
Result::ERROR_MEMORY_MAP_FAILED => Some(stringify!(ERROR_MEMORY_MAP_FAILED)),
Result::ERROR_LAYER_NOT_PRESENT => Some(stringify!(ERROR_LAYER_NOT_PRESENT)),
Result::ERROR_EXTENSION_NOT_PRESENT => Some(stringify!(ERROR_EXTENSION_NOT_PRESENT)),
Result::ERROR_FEATURE_NOT_PRESENT => Some(stringify!(ERROR_FEATURE_NOT_PRESENT)),
Result::ERROR_INCOMPATIBLE_DRIVER => Some(stringify!(ERROR_INCOMPATIBLE_DRIVER)),
Result::ERROR_TOO_MANY_OBJECTS => Some(stringify!(ERROR_TOO_MANY_OBJECTS)),
Result::ERROR_FORMAT_NOT_SUPPORTED => Some(stringify!(ERROR_FORMAT_NOT_SUPPORTED)),
Result::ERROR_FRAGMENTED_POOL => Some(stringify!(ERROR_FRAGMENTED_POOL)),
Result::SUCCESS => Some("Command completed successfully"),
Result::NOT_READY => Some("A fence or query has not yet completed"),
Result::TIMEOUT => Some("A wait operation has not completed in the specified time"),
Result::EVENT_SET => Some("An event is signaled"),
Result::EVENT_RESET => Some("An event is unsignaled"),
Result::INCOMPLETE => Some("A return array was too small for the result"),
Result::ERROR_OUT_OF_HOST_MEMORY => Some("A host memory allocation has failed"),
Result::ERROR_OUT_OF_DEVICE_MEMORY => Some("A device memory allocation has failed"),
Result::ERROR_INITIALIZATION_FAILED => Some("Initialization of a object has failed"),
Result::ERROR_DEVICE_LOST => {
Some("The logical device has been lost. See <<devsandqueues-lost-device>>")
}
Result::ERROR_MEMORY_MAP_FAILED => Some("Mapping of a memory object has failed"),
Result::ERROR_LAYER_NOT_PRESENT => Some("Layer specified does not exist"),
Result::ERROR_EXTENSION_NOT_PRESENT => Some("Extension specified does not exist"),
Result::ERROR_FEATURE_NOT_PRESENT => {
Some("Requested feature is not available on this device")
}
Result::ERROR_INCOMPATIBLE_DRIVER => Some("Unable to find a Vulkan driver"),
Result::ERROR_TOO_MANY_OBJECTS => {
Some("Too many objects of the type have already been created")
}
Result::ERROR_FORMAT_NOT_SUPPORTED => {
Some("Requested format is not supported on this device")
}
Result::ERROR_FRAGMENTED_POOL => Some(
"A requested pool allocation has failed due to fragmentation of the pool\'s memory",
),
_ => None,
};
if let Some(x) = name {

View file

@ -14,8 +14,3 @@ fn display_flags() {
fn display_enum() {
assert_eq!(vk::ChromaLocation::MIDPOINT.to_string(), "MIDPOINT");
}
#[test]
fn display_result() {
assert_eq!(vk::Result::SUCCESS.to_string(), "SUCCESS");
}

View file

@ -1216,9 +1216,12 @@ pub fn generate_enum<'a>(
}
pub fn generate_result(ident: Ident, _enum: &vkxml::Enumeration) -> Tokens {
let display_notation = _enum.elements.iter().filter_map(|elem| {
let variant_name = match *elem {
vkxml::EnumerationElement::Enum(ref constant) => constant.name.as_str(),
let notation = _enum.elements.iter().filter_map(|elem| {
let (variant_name, notation) = match *elem {
vkxml::EnumerationElement::Enum(ref constant) => (
constant.name.as_str(),
constant.notation.as_ref().map(|s| s.as_str()).unwrap_or(""),
),
_ => {
return None;
}
@ -1226,17 +1229,25 @@ pub fn generate_result(ident: Ident, _enum: &vkxml::Enumeration) -> Tokens {
let variant_ident = variant_ident(&_enum.name, variant_name);
Some(quote! {
#ident::#variant_ident => Some(stringify!(#variant_ident))
#ident::#variant_ident => Some(#notation)
})
});
let notation2 = notation.clone();
quote! {
impl std::error::Error for #ident {}
impl ::std::error::Error for #ident {
fn description(&self) -> &str {
let name = match *self {
#(#notation),*,
_ => None,
};
name.unwrap_or("unknown error")
}
}
impl fmt::Display for #ident {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
let name = match *self {
#(#display_notation),*,
#(#notation2),*,
_ => None,
};
if let Some(x) = name {