finquant/patterns/observer.rs
1//! Observer patterns.
2//! Observer is subscribed to Observable events.
3
4use crate::error::Result;
5use std::any::Any;
6use std::cell::RefCell;
7use std::fmt::Debug;
8use std::rc::Rc;
9
10// Define the Observable trait with methods to register, remove, and notify observers
11pub trait Observable: Debug {
12 fn attach(&mut self, observer: Rc<RefCell<dyn Observer>>);
13 fn notify_observers(&self) -> Result<()>;
14 fn as_any(&self) -> &dyn Any;
15}
16
17// Define the Observer trait with an update method
18pub trait Observer: Any + Debug {
19 fn update(&mut self, observable: &dyn Observable) -> Result<()>;
20 fn as_any(&self) -> &dyn Any;
21}