1use rand::Rng;
2
3pub trait Rollable: Copy {
41 fn roll(max: Self) -> Self;
42}
43
44impl Rollable for u8 {
45 fn roll(max: u8) -> u8 {
46 rand::thread_rng().gen_range(0, max) + 1
47 }
48}
49impl Rollable for u16 {
50 fn roll(max: u16) -> u16 {
51 rand::thread_rng().gen_range(0, max) + 1
52 }
53}
54impl Rollable for u32 {
55 fn roll(max: u32) -> u32 {
56 rand::thread_rng().gen_range(0, max) + 1
57 }
58}
59impl Rollable for u64 {
60 fn roll(max: u64) -> u64 {
61 rand::thread_rng().gen_range(0, max) + 1
62 }
63}
64impl Rollable for u128 {
65 fn roll(max: u128) -> u128 {
66 rand::thread_rng().gen_range(0, max) + 1
67 }
68}
69impl Rollable for usize {
70 fn roll(max: usize) -> usize {
71 rand::thread_rng().gen_range(0, max) + 1
72 }
73}
74impl Rollable for i8 {
75 fn roll(max: i8) -> i8 {
76 rand::thread_rng().gen_range(0, max) + 1
77 }
78}
79impl Rollable for i16 {
80 fn roll(max: i16) -> i16 {
81 rand::thread_rng().gen_range(0, max) + 1
82 }
83}
84impl Rollable for i32 {
85 fn roll(max: i32) -> i32 {
86 rand::thread_rng().gen_range(0, max) + 1
87 }
88}
89impl Rollable for i64 {
90 fn roll(max: i64) -> i64 {
91 rand::thread_rng().gen_range(0, max) + 1
92 }
93}
94impl Rollable for i128 {
95 fn roll(max: i128) -> i128 {
96 rand::thread_rng().gen_range(0, max) + 1
97 }
98}
99impl Rollable for isize {
100 fn roll(max: isize) -> isize {
101 rand::thread_rng().gen_range(0, max) + 1
102 }
103}