#![allow(non_snake_case, non_camel_case_types)]
#![allow(dead_code)]
use capi::sctypes::*;
use capi::scvalue::VALUE;
pub type som_atom_t = u64;
#[repr(C)]
#[derive(Debug)]
pub struct som_asset_t {
pub(crate) isa: &'static som_asset_class_t,
}
impl som_asset_t {
pub(crate) fn get_passport(&self) -> *const som_passport_t {
(self.isa.get_passport)(self as *const _ as *mut _)
}
}
#[repr(C)]
#[derive(Debug)]
pub(crate) struct som_asset_class_t {
pub add_ref: extern "C" fn(thing: *mut som_asset_t) -> i32,
pub release: extern "C" fn(thing: *mut som_asset_t) -> i32,
pub get_interface: extern "C" fn(thing: *mut som_asset_t, name: LPCSTR, out: *mut *mut som_asset_t) -> bool,
pub get_passport: extern "C" fn(thing: *mut som_asset_t) -> *const som_passport_t,
}
#[repr(C)]
pub struct som_passport_t {
pub flags: u64,
pub name: som_atom_t,
pub properties: *const som_property_def_t,
pub n_properties: usize,
pub methods: *const som_method_def_t,
pub n_methods: usize,
pub item_getter: Option<som_item_getter_t>,
pub item_setter: Option<som_item_setter_t>,
pub item_next: Option<som_item_next_t>,
pub prop_getter: Option<som_any_prop_getter_t>,
pub prop_setter: Option<som_any_prop_setter_t>,
}
impl Default for som_passport_t {
fn default() -> Self {
use std::ptr;
Self {
flags: 0,
name: 0,
prop_getter: None,
prop_setter: None,
item_getter: None,
item_setter: None,
item_next: None,
properties: ptr::null(),
n_properties: 0,
methods: ptr::null(),
n_methods: 0,
}
}
}
#[repr(u64)]
#[derive(Debug, PartialOrd, PartialEq)]
pub enum som_passport_flags {
SEALED = 0,
EXTENDABLE = 1,
}
#[repr(C)]
pub struct som_property_def_t {
pub reserved: LPVOID,
pub name: som_atom_t,
pub getter: Option<som_prop_getter_t>,
pub setter: Option<som_prop_setter_t>,
}
impl Default for som_property_def_t {
fn default() -> Self {
Self {
reserved: std::ptr::null_mut(),
name: 0,
getter: None,
setter: None,
}
}
}
#[repr(C)]
pub struct som_method_def_t {
pub reserved: LPVOID,
pub name: som_atom_t,
pub params: usize,
pub func: Option<som_method_t>,
}
impl Default for som_method_def_t {
fn default() -> Self {
Self {
reserved: std::ptr::null_mut(),
name: 0,
params: 0,
func: None,
}
}
}
type som_dispose_t = extern "C" fn(thing: *mut som_asset_t);
type som_prop_getter_t = extern "C" fn(thing: *mut som_asset_t, p_value: &mut VALUE) -> BOOL;
type som_prop_setter_t = extern "C" fn(thing: *mut som_asset_t, p_value: &VALUE) -> BOOL;
type som_any_prop_getter_t = extern "C" fn(thing: *mut som_asset_t, propSymbol: som_atom_t, p_value: &mut VALUE) -> BOOL;
type som_any_prop_setter_t = extern "C" fn(thing: *mut som_asset_t, propSymbol: som_atom_t, p_value: &VALUE) -> BOOL;
type som_item_getter_t = extern "C" fn(thing: *mut som_asset_t, p_key: &VALUE, p_value: &mut VALUE) -> BOOL;
type som_item_setter_t = extern "C" fn(thing: *mut som_asset_t, p_key: &VALUE, p_value: &VALUE) -> BOOL;
type som_item_next_t = extern "C" fn(thing: *mut som_asset_t, p_idx: &mut VALUE, p_value: &mut VALUE) -> BOOL;
type som_method_t = extern "C" fn(thing: *mut som_asset_t, argc: u32, argv: *const VALUE, p_result: &mut VALUE) -> BOOL;