From 7e8ee5ed9cad6484e9f13f81731b102ced58402e Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Tue, 9 Jul 2019 15:14:04 -0400 Subject: Init. --- rust-book/blog/src/lib.rs | 127 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100755 rust-book/blog/src/lib.rs (limited to 'rust-book/blog/src/lib.rs') diff --git a/rust-book/blog/src/lib.rs b/rust-book/blog/src/lib.rs new file mode 100755 index 0000000..8436a36 --- /dev/null +++ b/rust-book/blog/src/lib.rs @@ -0,0 +1,127 @@ +//pub struct Post { +// state: Option>, +// content: String, +//} +// +//impl Post { +// pub fn new() -> Post { +// Post { +// state: Some(Box::new(Draft {})), +// content: String::new(), +// } +// } +// +// pub fn add_text(&mut self, text: &str) { +// self.content.push_str(text); +// } +// +// pub fn content(&self) -> &str { +// self.state.as_ref().unwrap().content(&self) +// } +// +// pub fn request_review(&mut self) { +// if let Some(s) = self.state.take() { +// self.state = Some(s.request_review()) +// } +// } +// +// pub fn approve(&mut self) { +// if let Some(s) = self.state.take() { +// self.state = Some(s.approve()) +// } +// } +//} +// +//trait State { +// fn request_review(self: Box) -> Box; +// fn approve(self: Box) -> Box; +// fn content<'a>(&self, post: &'a Post) -> &'a str { +// "" +// } +//} +// +//struct Draft {} +// +//impl State for Draft { +// fn request_review(self: Box) -> Box { +// Box::new(PendingReview {}) +// } +// +// fn approve(self: Box) -> Box { +// self +// } +//} +// +//struct PendingReview {} +// +//impl State for PendingReview { +// fn request_review(self: Box) -> Box { +// self +// } +// +// fn approve(self: Box) -> Box { +// Box::new(Published {}) +// } +//} +// +//struct Published {} +// +//impl State for Published { +// fn request_review(self: Box) -> Box { +// self +// } +// +// fn approve(self: Box) -> Box { +// self +// } +// +// fn content<'a>(&self, post: &'a Post) -> &'a str { +// &post.content +// } +//} + + + +pub struct Post { + content: String, +} + +pub struct DraftPost { + content: String, +} + +pub struct PendingReviewPost { + content: String, +} + +impl Post { + pub fn new() -> DraftPost { + DraftPost { + content: String::new(), + } + } + + pub fn content(&self) -> &str { + &self.content + } +} + +impl DraftPost { + pub fn add_text(&mut self, text: &str) { + self.content.push_str(text); + } + + pub fn request_review(self) -> PendingReviewPost { + PendingReviewPost { + content: self.content, + } + } +} + +impl PendingReviewPost { + pub fn approve(self) -> Post { + Post { + content: self.content, + } + } +} -- cgit v1.2.3