1pub use data_classes_derive::*;
2
3pub trait ToPrev: Sized {
5 fn get_prev(&self) -> Self;
7
8 fn switch_to_prev(&mut self) {
10 *self = self.get_prev();
11 }
12}
13
14pub trait ToNext: Sized {
16 fn get_next(&self) -> Self;
18
19 fn switch_to_next(&mut self) {
21 *self = self.get_next();
22 }
23}
24
25#[cfg(feature = "rand")]
27pub trait ToRandom: Sized {
28 fn random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self;
30
31 fn get_random<R: rand::Rng + ?Sized>(&self, rng: &mut R) -> Self {
33 Self::random(rng)
34 }
35
36 fn switch_to_random<R: rand::Rng + ?Sized>(&mut self, rng: &mut R) {
38 *self = Self::random(rng);
39 }
40}