1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use crate::models::ctx::Ctx;
use crate::runtime::msg::Msg;
use crate::runtime::{Effect, Effects, Env};
#[cfg(debug_assertions)]
use core::fmt::Debug;
use serde::{Deserialize, Serialize};

pub trait Model<E: Env>: Clone {
    #[cfg(not(debug_assertions))]
    type Field: Send + Sync + Serialize + for<'de> Deserialize<'de>;
    #[cfg(debug_assertions)]
    type Field: Debug + Send + Sync + Serialize + for<'de> Deserialize<'de>;

    fn update(&mut self, msg: &Msg) -> (Vec<Effect>, Vec<Self::Field>);
    fn update_field(&mut self, msg: &Msg, field: &Self::Field) -> (Vec<Effect>, Vec<Self::Field>);
}

pub trait Update<E: Env> {
    fn update(&mut self, msg: &Msg) -> Effects;
}

pub trait UpdateWithCtx<E: Env> {
    fn update(&mut self, msg: &Msg, ctx: &Ctx) -> Effects;
}