2022-10-08 11:15:04 +00:00
|
|
|
use crate::ffi::{ExternPointer, IdentifiablePointer, OwnedPtr};
|
2022-10-01 13:40:15 +00:00
|
|
|
use crate::static_data::{
|
|
|
|
AbilityLibrary, GrowthRateLibrary, ItemLibrary, LibrarySettings, MoveLibrary, NatureLibrary, SpeciesLibrary,
|
|
|
|
StaticData, TypeLibrary,
|
|
|
|
};
|
|
|
|
use std::ptr::drop_in_place;
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// Instantiates a new data collection.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
2022-10-08 11:15:04 +00:00
|
|
|
unsafe extern "C" fn static_data_new(settings: OwnedPtr<LibrarySettings>) -> IdentifiablePointer<StaticData> {
|
|
|
|
Box::new(StaticData::new(*Box::from_raw(settings))).into()
|
2022-10-01 13:40:15 +00:00
|
|
|
}
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// Drop a static data.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
|
|
|
unsafe extern "C" fn static_data_drop(ptr: OwnedPtr<StaticData>) {
|
|
|
|
drop_in_place(ptr)
|
|
|
|
}
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// Several misc settings for the library.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
2022-10-14 14:53:30 +00:00
|
|
|
unsafe extern "C" fn static_data_settings(mut data: ExternPointer<StaticData>) -> IdentifiablePointer<LibrarySettings> {
|
2022-10-08 11:15:04 +00:00
|
|
|
(data.as_mut().settings() as *const LibrarySettings).into()
|
2022-10-01 13:40:15 +00:00
|
|
|
}
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// All data for Pokemon species.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
2022-10-14 14:53:30 +00:00
|
|
|
unsafe extern "C" fn static_data_species(mut data: ExternPointer<StaticData>) -> IdentifiablePointer<SpeciesLibrary> {
|
2022-10-08 11:15:04 +00:00
|
|
|
(data.as_mut().species_mut() as *const SpeciesLibrary).into()
|
2022-10-01 13:40:15 +00:00
|
|
|
}
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// All data for the moves.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
2022-10-14 14:53:30 +00:00
|
|
|
unsafe extern "C" fn static_data_moves(mut data: ExternPointer<StaticData>) -> IdentifiablePointer<MoveLibrary> {
|
2022-10-08 11:15:04 +00:00
|
|
|
(data.as_mut().moves_mut() as *const MoveLibrary).into()
|
2022-10-01 13:40:15 +00:00
|
|
|
}
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// All data for the items.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
2022-10-14 14:53:30 +00:00
|
|
|
unsafe extern "C" fn static_data_items(mut data: ExternPointer<StaticData>) -> IdentifiablePointer<ItemLibrary> {
|
2022-10-08 11:15:04 +00:00
|
|
|
(data.as_mut().items_mut() as *const ItemLibrary).into()
|
2022-10-01 13:40:15 +00:00
|
|
|
}
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// All data for growth rates.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
2022-10-08 11:15:04 +00:00
|
|
|
unsafe extern "C" fn static_data_growth_rates(
|
2022-10-14 14:53:30 +00:00
|
|
|
mut data: ExternPointer<StaticData>,
|
2022-10-08 11:15:04 +00:00
|
|
|
) -> IdentifiablePointer<GrowthRateLibrary> {
|
|
|
|
(data.as_mut().growth_rates_mut() as *const GrowthRateLibrary).into()
|
2022-10-01 13:40:15 +00:00
|
|
|
}
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// All data related to types and type effectiveness.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
2022-10-14 14:53:30 +00:00
|
|
|
unsafe extern "C" fn static_data_types(mut data: ExternPointer<StaticData>) -> IdentifiablePointer<TypeLibrary> {
|
2022-10-08 11:15:04 +00:00
|
|
|
(data.as_mut().types_mut() as *const TypeLibrary).into()
|
2022-10-01 13:40:15 +00:00
|
|
|
}
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// All data related to natures.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
2022-10-14 14:53:30 +00:00
|
|
|
unsafe extern "C" fn static_data_natures(mut data: ExternPointer<StaticData>) -> IdentifiablePointer<NatureLibrary> {
|
2022-10-08 11:15:04 +00:00
|
|
|
(data.as_mut().natures_mut() as *const NatureLibrary).into()
|
2022-10-01 13:40:15 +00:00
|
|
|
}
|
|
|
|
|
2022-10-14 14:53:30 +00:00
|
|
|
/// All data related to abilities.
|
2022-10-01 13:40:15 +00:00
|
|
|
#[no_mangle]
|
2022-10-14 14:53:30 +00:00
|
|
|
unsafe extern "C" fn static_data_abilities(mut data: ExternPointer<StaticData>) -> IdentifiablePointer<AbilityLibrary> {
|
2022-10-08 11:15:04 +00:00
|
|
|
(data.as_mut().abilities_mut() as *const AbilityLibrary).into()
|
2022-10-01 13:40:15 +00:00
|
|
|
}
|