#![allow(missing_debug_implementations)]
use rkyv::{Archive, Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Archive, Serialize, Deserialize)]
pub struct ClassId(pub u32);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Archive, Serialize, Deserialize)]
pub struct BuiltinId(pub u32);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Archive, Serialize, Deserialize)]
pub struct DocId(pub u32);
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct ApiVersion {
pub major: u32,
pub minor: u32,
pub patch: u32,
pub status: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub enum ApiType {
Core,
Editor,
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub enum ElemRef {
Variant,
Builtin(BuiltinId),
Class(ClassId),
Enum {
qualified: String,
bitfield: bool,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub enum TyRef {
Void,
Variant,
Builtin(BuiltinId),
Class(ClassId),
TypedArray(ElemRef),
TypedDict(ElemRef, ElemRef),
Enum {
qualified: String,
bitfield: bool,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct Param {
pub name: String,
pub ty: TyRef,
pub default: Option<String>,
}
#[allow(clippy::struct_excessive_bools)]
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct MethodSig {
pub name: String,
pub params: Vec<Param>,
pub return_ty: TyRef,
pub is_const: bool,
pub is_static: bool,
pub is_vararg: bool,
pub is_virtual: bool,
pub doc: Option<DocId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct PropertyInfo {
pub name: String,
pub ty: TyRef,
pub setter: Option<String>,
pub getter: Option<String>,
pub enum_of: Option<String>,
pub doc: Option<DocId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct SignalSig {
pub name: String,
pub params: Vec<Param>,
pub doc: Option<DocId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct EnumValue {
pub name: String,
pub value: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct EnumInfo {
pub name: String,
pub is_bitfield: bool,
pub values: Vec<EnumValue>,
pub doc: Option<DocId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct ConstInfo {
pub name: String,
pub ty: TyRef,
pub int_value: Option<i64>,
pub value_expr: Option<String>,
pub doc: Option<DocId>,
}
#[derive(Debug, Clone, Archive, Serialize, Deserialize)]
pub struct ClassData {
pub name: String,
pub base: Option<ClassId>,
pub is_refcounted: bool,
pub is_instantiable: bool,
pub api_type: ApiType,
pub methods: Vec<MethodSig>,
pub properties: Vec<PropertyInfo>,
pub signals: Vec<SignalSig>,
pub enums: Vec<EnumInfo>,
pub constants: Vec<ConstInfo>,
pub doc: Option<DocId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct BuiltinMember {
pub name: String,
pub ty: TyRef,
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct OperatorSig {
pub op: String,
pub right: Option<TyRef>,
pub result: TyRef,
}
#[derive(Debug, Clone, Archive, Serialize, Deserialize)]
pub struct BuiltinData {
pub name: String,
pub members: Vec<BuiltinMember>,
pub methods: Vec<MethodSig>,
pub constants: Vec<ConstInfo>,
pub enums: Vec<EnumInfo>,
pub operators: Vec<OperatorSig>,
pub indexing_return: Option<TyRef>,
pub is_keyed: bool,
pub doc: Option<DocId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Archive, Serialize, Deserialize)]
pub struct UtilityFn {
pub name: String,
pub params: Vec<Param>,
pub return_ty: TyRef,
pub is_vararg: bool,
pub category: String,
pub doc: Option<DocId>,
}
#[derive(Debug, Archive, Serialize, Deserialize)]
pub struct ApiData {
pub version: ApiVersion,
pub classes: Vec<ClassData>,
pub builtins: Vec<BuiltinData>,
pub singletons: Vec<(String, ClassId)>,
pub utilities: Vec<UtilityFn>,
pub global_enums: Vec<EnumInfo>,
}