PkmnLib_rs/src/lib.rs

121 lines
4.1 KiB
Rust
Raw Normal View History

2023-04-15 12:34:42 +00:00
// Linter modifications
2023-06-22 13:50:37 +00:00
#![allow(unknown_lints)] // We use nightly lints, and sometimes the build server doesn't have them
#![allow(stable_features)] // We use nightly features, and there's sometimes a mismatch about which features are stable
#![allow(clippy::too_many_arguments, clippy::needless_range_loop)]
#![allow(clippy::not_unsafe_ptr_arg_deref)]
2022-12-24 11:00:50 +00:00
#![allow(clippy::borrowed_box)]
2022-11-27 16:29:29 +00:00
#![allow(incomplete_features)]
#![allow(ambiguous_glob_reexports)]
2023-06-17 17:05:27 +00:00
#![allow(hidden_glob_reexports)]
#![deny(missing_docs)]
#![deny(clippy::missing_docs_in_private_items)]
// Linter rules to prevent panics
// Currently still a WIP to fix all of these
#![deny(clippy::unwrap_used)]
#![deny(clippy::expect_used)]
#![deny(clippy::indexing_slicing)]
#![deny(clippy::string_slice)]
#![deny(clippy::exit)]
#![deny(clippy::panic)]
#![deny(unused_must_use)]
2023-04-15 12:34:42 +00:00
// Features
2022-06-03 14:35:18 +00:00
#![feature(test)]
#![feature(const_option)]
2022-07-18 08:16:47 +00:00
#![feature(new_uninit)]
2022-07-18 08:49:58 +00:00
#![feature(get_mut_unchecked)]
2022-09-17 07:38:02 +00:00
#![feature(strict_provenance)]
2022-10-15 15:21:24 +00:00
#![feature(fn_traits)]
#![feature(unboxed_closures)]
2022-11-27 16:29:29 +00:00
#![feature(trait_upcasting)]
#![feature(lazy_cell)]
2023-04-23 08:10:06 +00:00
#![feature(try_trait_v2)]
//! PkmnLib
//! PkmnLib is a full featured implementation of Pokemon. while currently focused on implementing
//! generation 7, this library tries to offload generational differences such as move effects
//! to a scripting library.
//!
2022-06-03 14:35:18 +00:00
2022-10-15 15:21:24 +00:00
extern crate core;
#[macro_use]
extern crate enum_display_derive;
#[doc(hidden)]
pub use utils::*;
use crate::dynamic_data::ScriptCategory;
2022-06-06 11:54:59 +00:00
/// The defines module holds the core defines of the library
pub mod defines;
/// The dynamic data module holds data that can change during execution, and things that relate to
/// this. This includes things as Pokemon themselves, battles, etc.
pub mod dynamic_data;
2022-09-18 16:02:13 +00:00
/// The Foreign Function Interface allows for non Rust applications to call this library.
#[cfg(feature = "ffi")]
mod ffi;
2022-07-18 08:16:47 +00:00
/// Script implementations handles the different ways that dynamic scripts get loaded during battle.
pub mod script_implementations;
/// The static data module holds data that can be set once, and then never change. This includes
/// things such as data about Pokemon species, data about items, etc.
pub mod static_data;
/// The utils module includes misc utils that are used within PkmnLib
pub mod utils;
use crate::static_data::TypeIdentifier;
use thiserror::Error;
/// The PkmnError enum is the error type for PkmnLib. It is used to return common errors from functions
/// that can fail. For uncommon errors, anyhow is used.
#[derive(Error, Debug)]
pub enum PkmnError {
/// The given value was null
#[error("The given value was null")]
NullReference,
/// The given index is out of bounds for the given length of the array.
#[error("The given index {index} is out of bounds for the given len {len}")]
IndexOutOfBounds {
/// The index that was given
index: usize,
/// The length of the array
len: usize,
},
/// We tried to get a lock on a mutex, but the lock was poisoned. This means that another thread
/// panicked while holding the lock. This is a fatal error.
#[error("Unable to acquire a lock")]
UnableToAcquireLock,
/// Unable to get ability
#[error("Unable to get ability {ability}")]
InvalidAbilityName {
/// The ability that was requested
ability: StringKey,
},
/// Unable to get move
#[error("Unable to get move {move_name}")]
InvalidMoveName {
/// The move that was requested
move_name: StringKey,
},
/// Unable to get nature
#[error("Unable to get nature {nature}")]
InvalidNatureName {
/// The nature that was requested
nature: StringKey,
},
/// Unable to get species
#[error("Unable to get species {species}")]
InvalidSpeciesName {
/// The species that was requested
species: StringKey,
},
/// Unable to get type
#[error("Unable to get type {type_id}")]
InvalidTypeIdentifier {
/// The type that was requested
type_id: TypeIdentifier,
},
/// The given pointer is not a valid CString
#[error("The given pointer is not a valid CString")]
InvalidCString,
}