1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//! Checs is an Entity-Component-System library.
//!
//! ## Disclaimer
//!
//! This is a work in progress.
pub use crate::;
/// Commonly used traits.
///
/// # Examples
///
/// ```
/// use checs::prelude::*;
/// ```
/// Prepares a struct for use as the type parameter of a [`World`].
///
/// This custom derive implements [`RemoveAll`], as well as [`AsRef`] and [`AsMut`] for each field.
/// The struct's fields must by of type [`ComponentVec`].
///
/// # Note
///
/// If this custom derive cannot be used, e.g. because the feature `proc` is not enabled, the macro
/// [`derive_storage`] can be used instead.
///
/// [`World`]: world::World
/// [`ComponentVec`]: component::ComponentVec
/// [`RemoveAll`]: world::RemoveAll
/// [`derive_storage`]: crate::derive_storage
///
/// # Examples
///
/// ```
/// use checs::{ComponentVec, Storage};
///
/// #[derive(Default, Storage)]
/// struct Storage {
/// ints: ComponentVec<i32>,
/// floats: ComponentVec<f32>,
/// }
/// ```
///
/// The above will expand to something similar to this:
///
/// ```
/// # use checs::component::ComponentVec;
/// # use checs::Storage;
/// #
/// # #[derive(Default)]
/// # struct Storage {
/// # ints: ComponentVec<i32>,
/// # floats: ComponentVec<f32>,
/// # }
/// #
/// ::checs::internal_derive_storage!{
/// #[derive(Default)]
/// struct Storage {
/// ints: ComponentVec<i32>,
/// floats: ComponentVec<f32>,
/// }
/// }
/// ```
pub use Storage;