diff --git a/blog/src/lib.rs b/blog/src/lib.rs index dd6bd6a..0a3a4b3 100644 --- a/blog/src/lib.rs +++ b/blog/src/lib.rs @@ -18,10 +18,30 @@ impl Post { pub fn content(&self) -> &str { "" } + + pub fn request_review(&mut self) { + if let Some(s) = self.state.take() { + self.state = Some(s.request_review()) + } + } } -trait State {} +trait State { + fn request_review(self: Box<Self>) -> Box<dyn State>; +} struct Draft {} -impl State for Draft {} +impl State for Draft { + fn request_review(self: Box<Self>) -> Box<dyn State> { + Box::new(PendingReview {}) + } +} + +struct PendingReview {} + +impl State for PendingReview { + fn request_review(self: Box<Self>) -> Box<dyn State> { + self + } +}