use distributed::{sourced, Entity, Snapshot};
use serde::{Deserialize, Serialize};
#[derive(Default, Snapshot)]
pub struct Counter {
pub entity: Entity,
pub value: i64,
}
#[sourced(entity)]
impl Counter {
#[event("initialized")]
pub fn create(&mut self, id: String) {
self.entity.set_id(&id);
self.value = 0;
}
#[event("incremented")]
pub fn increment(&mut self, amount: i64) {
self.value += amount;
}
#[event("decremented", when = self.value >= amount)]
pub fn decrement(&mut self, amount: i64) {
self.value -= amount;
}
}
#[derive(Serialize, Deserialize)]
pub struct CreateCounter {
pub id: String,
}
#[derive(Serialize, Deserialize)]
pub struct IncrementCounter {
pub id: String,
pub amount: i64,
}
#[derive(Serialize, Deserialize)]
pub struct DecrementCounter {
pub id: String,
pub amount: i64,
}