1use crate::observation::{AgentObservation, Source};
2use std::fmt;
3
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub struct SurfaceError(pub String);
6
7impl fmt::Display for SurfaceError {
8 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
9 write!(f, "{}", self.0)
10 }
11}
12impl std::error::Error for SurfaceError {}
13
14pub trait Surface {
15 fn observe(&self) -> Result<Vec<AgentObservation>, SurfaceError>;
16 fn focus(&self, obs: &AgentObservation) -> Result<(), SurfaceError>;
17 fn source(&self) -> Source;
18}