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