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}