use core::ops::Index;
#[derive(Destruct, Default)]
struct Stack {
items: Felt252Dict,
len: usize
}
#[generate_trait]
impl StackImpl of StackTrait {
fn push(ref self: Stack, item: u128) {
self.items.insert(self.len.into(), item);
self.len += 1;
}
}
impl StackIndex of Index {
type Target = u128;
fn index(ref self: Stack, index: usize) -> Self::Target {
if index >= self.len {
panic!("Index out of bounds");
}
self.items.get(index.into())
}
}
let mut stack: Stack = Default::default();
stack.push(1);
assert!(stack[0] == 1);