#[derive(Debug)]
pub enum FatalError {
MissingRegistryElement,
IoError(std::io::Error),
}
impl From<std::io::Error> for FatalError {
fn from(v: std::io::Error) -> FatalError {
FatalError::IoError(v)
}
}
#[derive(Debug)]
pub enum Error {
UnexpectedElement {
xpath: String,
name: String,
},
UnexpectedAttribute {
xpath: String,
name: String,
},
UnexpectedAttributeValue {
xpath: String,
name: String,
value: String,
},
MissingElement {
xpath: String,
name: String,
},
MissingAttribute {
xpath: String,
name: String,
},
SchemaViolation {
xpath: String,
desc: String,
},
Internal {
desc: &'static str,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Registry(pub Vec<RegistryChild>);
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum RegistryChild {
Comment(String),
VendorIds(VendorIds),
Platforms(Platforms),
Tags(Tags),
Types(Types),
Enums(Enums),
Commands(Commands),
Feature(Feature),
Extensions(Extensions),
}
pub type VendorIds = CommentedChildren<VendorId>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct VendorId {
pub name: String,
pub id: u32,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
}
pub type Platforms = CommentedChildren<Platform>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Platform {
pub name: String,
pub protect: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
}
pub type Tags = CommentedChildren<Tag>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Tag {
pub name: String,
pub author: String,
pub contact: String,
}
pub type Types = CommentedChildren<TypesChild>;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum TypesChild {
Type(Type),
Comment(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Type {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub name: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub alias: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub requires: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub category: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub parent: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub returnedonly: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub structextends: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub allowduplicate: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub spec: TypeSpec,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum TypeSpec {
None,
Code(TypeCode),
Members(Vec<TypeMember>),
}
impl Default for TypeSpec {
fn default() -> Self {
TypeSpec::None
}
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct TypeCode {
pub code: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub markup: Vec<TypeCodeMarkup>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum TypeCodeMarkup {
Name(String),
Type(String),
ApiEntry(String),
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum TypeMember {
Comment(String),
Definition(TypeMemberDefinition),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct TypeMemberDefinition {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub len: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub altlen: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub externsync: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub optional: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub noautovalidity: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub validextensionstructs: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub values: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub code: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub markup: Vec<TypeMemberMarkup>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum TypeMemberMarkup {
Name(String),
Type(String),
Enum(String),
Comment(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Enums {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub name: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub kind: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub start: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub end: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub vendor: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub children: Vec<EnumsChild>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum EnumsChild {
Enum(Enum),
Unused(Unused),
Comment(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Unused {
pub start: i64,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub end: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub vendor: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Enum {
pub name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub type_suffix: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub spec: EnumSpec,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum EnumSpec {
None,
Alias {
alias: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extends: Option<String>,
},
Offset {
offset: i64,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extends: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extnumber: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
dir: bool,
},
Bitpos {
bitpos: i64,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extends: Option<String>,
},
Value {
value: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extends: Option<String>,
},
}
impl Default for EnumSpec {
fn default() -> Self {
EnumSpec::None
}
}
pub type Commands = CommentedChildren<Command>;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Command {
Alias { name: String, alias: String },
Definition(CommandDefinition),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct CommandDefinition {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub queues: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub successcodes: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub errorcodes: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub renderpass: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub cmdbufferlevel: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub pipeline: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub proto: NameWithType,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub params: Vec<CommandParam>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub alias: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub description: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub implicitexternsyncparams: Vec<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub code: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct CommandParam {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub len: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub altlen: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub externsync: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub optional: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub noautovalidity: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub definition: NameWithType,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Feature {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub api: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub number: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub protect: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub children: Vec<FeatureChild>,
}
pub type FeatureChild = ExtensionChild;
pub type Extensions = CommentedChildren<Extension>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Extension {
pub name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub number: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub protect: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub platform: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub author: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub contact: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub ext_type: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub requires: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub requires_core: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub supported: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub deprecatedby: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub promotedto: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub obsoletedby: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub provisional: bool,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub specialuse: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub sortorder: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub children: Vec<ExtensionChild>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum ExtensionChild {
Require {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
profile: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extension: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
feature: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
comment: Option<String>,
items: Vec<InterfaceItem>,
},
Remove {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
profile: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
items: Vec<InterfaceItem>,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum InterfaceItem {
Comment(String),
Type {
name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
comment: Option<String>,
},
Enum(Enum),
Command {
name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
comment: Option<String>,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct NameWithType {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub type_name: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct CommentedChildren<T> {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
pub children: Vec<T>,
}
#[cfg(feature = "serialize")]
fn is_default<T: Default + Eq>(v: &T) -> bool {
v.eq(&T::default())
}