use crate::ffi::{ExternPointer, IdentifiablePointer, OwnedPtr}; use crate::static_data::{ AbilityLibrary, GrowthRateLibrary, ItemLibrary, LibrarySettings, MoveLibrary, NatureLibrary, SpeciesLibrary, StaticData, TypeLibrary, }; use std::ptr::drop_in_place; #[no_mangle] unsafe extern "C" fn static_data_new(settings: OwnedPtr) -> IdentifiablePointer { Box::new(StaticData::new(*Box::from_raw(settings))).into() } #[no_mangle] unsafe extern "C" fn static_data_drop(ptr: OwnedPtr) { drop_in_place(ptr) } #[no_mangle] unsafe extern "C" fn static_data_settings(data: ExternPointer) -> IdentifiablePointer { (data.as_mut().settings() as *const LibrarySettings).into() } #[no_mangle] unsafe extern "C" fn static_data_species(data: ExternPointer) -> IdentifiablePointer { (data.as_mut().species_mut() as *const SpeciesLibrary).into() } #[no_mangle] unsafe extern "C" fn static_data_moves(data: ExternPointer) -> IdentifiablePointer { (data.as_mut().moves_mut() as *const MoveLibrary).into() } #[no_mangle] unsafe extern "C" fn static_data_items(data: ExternPointer) -> IdentifiablePointer { (data.as_mut().items_mut() as *const ItemLibrary).into() } #[no_mangle] unsafe extern "C" fn static_data_growth_rates( data: ExternPointer, ) -> IdentifiablePointer { (data.as_mut().growth_rates_mut() as *const GrowthRateLibrary).into() } #[no_mangle] unsafe extern "C" fn static_data_types(data: ExternPointer) -> IdentifiablePointer { (data.as_mut().types_mut() as *const TypeLibrary).into() } #[no_mangle] unsafe extern "C" fn static_data_natures(data: ExternPointer) -> IdentifiablePointer { (data.as_mut().natures_mut() as *const NatureLibrary).into() } #[no_mangle] unsafe extern "C" fn static_data_abilities(data: ExternPointer) -> IdentifiablePointer { (data.as_mut().abilities_mut() as *const AbilityLibrary).into() }