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; /// Instantiates a new data collection. #[no_mangle] unsafe extern "C" fn static_data_new(settings: OwnedPtr) -> IdentifiablePointer { Box::new(StaticData::new(*Box::from_raw(settings))).into() } /// Drop a static data. #[no_mangle] unsafe extern "C" fn static_data_drop(ptr: OwnedPtr) { drop_in_place(ptr) } /// Several misc settings for the library. #[no_mangle] unsafe extern "C" fn static_data_settings(mut data: ExternPointer) -> IdentifiablePointer { (data.as_mut().settings() as *const LibrarySettings).into() } /// All data for Pokemon species. #[no_mangle] unsafe extern "C" fn static_data_species(mut data: ExternPointer) -> IdentifiablePointer { (data.as_mut().species_mut() as *const SpeciesLibrary).into() } /// All data for the moves. #[no_mangle] unsafe extern "C" fn static_data_moves(mut data: ExternPointer) -> IdentifiablePointer { (data.as_mut().moves_mut() as *const MoveLibrary).into() } /// All data for the items. #[no_mangle] unsafe extern "C" fn static_data_items(mut data: ExternPointer) -> IdentifiablePointer { (data.as_mut().items_mut() as *const ItemLibrary).into() } /// All data for growth rates. #[no_mangle] unsafe extern "C" fn static_data_growth_rates( mut data: ExternPointer, ) -> IdentifiablePointer { (data.as_mut().growth_rates_mut() as *const GrowthRateLibrary).into() } /// All data related to types and type effectiveness. #[no_mangle] unsafe extern "C" fn static_data_types(mut data: ExternPointer) -> IdentifiablePointer { (data.as_mut().types_mut() as *const TypeLibrary).into() } /// All data related to natures. #[no_mangle] unsafe extern "C" fn static_data_natures(mut data: ExternPointer) -> IdentifiablePointer { (data.as_mut().natures_mut() as *const NatureLibrary).into() } /// All data related to abilities. #[no_mangle] unsafe extern "C" fn static_data_abilities(mut data: ExternPointer) -> IdentifiablePointer { (data.as_mut().abilities_mut() as *const AbilityLibrary).into() }