1pub mod generator;
2pub mod vector;
3
4pub use generator::Generator;
5pub use vector::Vector;
6
7#[macro_export]
15macro_rules! generate_index_type {
16 ($name:ident) => {
17 $crate::generate_index_type!($name, stringify!($name));
18 };
19 ($name:ident, $pretty_name:expr) => {
20 index_vec::define_index_type! {
21 #[derive(derive_generic_visitor::Drive, derive_generic_visitor::DriveMut)]
22 #[drive(skip)]
23 pub struct $name = usize;
24 MAX_INDEX = std::u32::MAX as usize;
26 }
27
28 impl $name {
29 pub const ZERO: Self = Self { _raw: 0 };
30 pub fn is_zero(&self) -> bool {
31 self.index() == 0
32 }
33 pub fn to_pretty_string(self) -> String {
34 format!("@{}{}", $pretty_name, self)
35 }
36 }
37
38 impl std::fmt::Display for $name {
39 fn fmt(
40 &self,
41 f: &mut std::fmt::Formatter<'_>,
42 ) -> std::result::Result<(), std::fmt::Error> {
43 f.write_str(self.index().to_string().as_str())
44 }
45 }
46 };
47}