summaryrefslogtreecommitdiff
path: root/meap/meap-code/ch3/ch3-not-quite-file-4.rs
diff options
context:
space:
mode:
authorAdam Carpenter <53hornet@gmail.com>2019-03-27 15:32:37 -0400
committerAdam Carpenter <53hornet@gmail.com>2019-03-27 15:32:37 -0400
commit67cdcc2e12118becb823e20a40cc2687f2b8425a (patch)
treeed92c3234b89079e6d4cf36f5e80c5ffa79def48 /meap/meap-code/ch3/ch3-not-quite-file-4.rs
parente25482fca375d318a39c3b54db396b0db6e0b263 (diff)
downloadlearning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.tar.xz
learning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.zip
Started Rust in Action MEAP.
Diffstat (limited to 'meap/meap-code/ch3/ch3-not-quite-file-4.rs')
-rw-r--r--meap/meap-code/ch3/ch3-not-quite-file-4.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/meap/meap-code/ch3/ch3-not-quite-file-4.rs b/meap/meap-code/ch3/ch3-not-quite-file-4.rs
new file mode 100644
index 0000000..4c3dbfd
--- /dev/null
+++ b/meap/meap-code/ch3/ch3-not-quite-file-4.rs
@@ -0,0 +1,42 @@
+#[derive(Debug)] // <1>
+struct File {
+ name: String,
+ data: Vec<u8>, // <2>
+ state: &'static str,
+}
+
+type FileMode = &'static str;
+
+const OPEN: FileMode = "open";
+const CLOSED: FileMode = "closed";
+
+fn open(f: &mut File) -> bool {
+ f.state = OPEN;
+ true // <3> let's assume for the moment that this always succeeds
+}
+
+fn close(f: &mut File) -> bool {
+ f.state = CLOSED;
+ true // <3>
+}
+
+fn read(f: &File) -> (usize, Vec<u8>) {
+ (f.data.len(), f.data.clone())
+}
+
+fn main() {
+ let mut f2 = File {
+ name: String::from("2.txt"), // <3>
+ data: vec![],
+ state: CLOSED,
+ };
+
+ let f2_name = &f2.name.clone(); // <5>
+
+ open(&mut f2);
+ let (f2_length, _) = read(&f2);
+ close(&mut f2);
+
+ println!("{:?}", f2);
+ println!("{} is {} bytes long", f2_name, f2_length);
+} \ No newline at end of file