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
+    }
+}