diff --git a/src/lib.rs b/src/lib.rs index ad1aaf5..4825a21 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,7 @@ #![feature(cfg_target_vendor)] #![allow(clippy::cast_lossless)] #![deny(clippy::float_arithmetic)] -//#![warn(missing_docs)] +#![warn(missing_docs)] //! This crate helps you write GBA ROMs. //! @@ -21,89 +21,7 @@ pub(crate) use gba_proc_macro::phantom_fields; pub(crate) use voladdress::{read_only::ROVolAddress, VolAddress, VolBlock}; -/// Assists in defining a newtype wrapper over some base type. -/// -/// Note that rustdoc and derives are all the "meta" stuff, so you can write all -/// of your docs and derives in front of your newtype in the same way you would -/// for a normal struct. Then the inner type to be wrapped it name. -/// -/// The macro _assumes_ that you'll be using it to wrap numeric types and that -/// it's safe to have a `0` value, so it automatically provides a `const fn` -/// method for `new` that just wraps `0`. Also, it derives Debug, Clone, Copy, -/// Default, PartialEq, and Eq. If all this is not desired you can add `, no -/// frills` to the invocation. -/// -/// Example: -/// ``` -/// newtype! { -/// /// Records a particular key press combination. -/// KeyInput, u16 -/// } -/// newtype! { -/// /// You can't derive most stuff above array size 32, so we add -/// /// the `, no frills` modifier to this one. -/// BigArray, [u8; 200], no frills -/// } -/// ``` -#[macro_export] -macro_rules! newtype { - ($(#[$attr:meta])* $new_name:ident, $v:vis $old_name:ty) => { - $(#[$attr])* - #[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] - #[repr(transparent)] - pub struct $new_name($v $old_name); - impl $new_name { - /// A `const` "zero value" constructor - pub const fn new() -> Self { - $new_name(0) - } - } - }; - ($(#[$attr:meta])* $new_name:ident, $v:vis $old_name:ty, no frills) => { - $(#[$attr])* - #[repr(transparent)] - pub struct $new_name($v $old_name); - }; -} - -/// Assists in defining a newtype that's an enum. -/// -/// First give `NewType = OldType,`, then define the tags and their explicit -/// values with zero or more entries of `TagName = base_value,`. In both cases -/// you can place doc comments or other attributes directly on to the type -/// declaration or the tag declaration. -/// -/// The generated enum will get an appropriate `repr` attribute as well as Debug, Clone, Copy, -/// -/// Example: -/// ``` -/// newtype_enum! { -/// /// The Foo -/// Foo = u16, -/// /// The Bar -/// Bar = 0, -/// /// The Zap -/// Zap = 1, -/// } -/// ``` -#[macro_export] -macro_rules! newtype_enum { - ( - $(#[$struct_attr:meta])* - $new_name:ident = $old_name:ident, - $($(#[$tag_attr:meta])* $tag_name:ident = $base_value:expr,)* - ) => { - $(#[$struct_attr])* - #[derive(Debug, Clone, Copy, PartialEq, Eq)] - #[repr($old_name)] - pub enum $new_name { - $( - $(#[$tag_attr])* - $tag_name = $base_value, - )* - } - }; -} +pub mod macros; pub mod base; @@ -142,7 +60,7 @@ extern "C" { newtype! { /// A color on the GBA is an RGB 5.5.5 within a `u16` #[derive(PartialOrd, Ord, Hash)] - Color, u16 + Color, pub u16 } impl Color {