From 7e8ee5ed9cad6484e9f13f81731b102ced58402e Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Tue, 9 Jul 2019 15:14:04 -0400 Subject: Init. --- meap/meap-code/ch3/ch3-not-quite-file-4.rs | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 meap/meap-code/ch3/ch3-not-quite-file-4.rs (limited to 'meap/meap-code/ch3/ch3-not-quite-file-4.rs') 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 100755 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, // <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) { + (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 -- cgit v1.2.3