--- /dev/null
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ch7-file-and-storage"
+version = "0.1.0"
+dependencies = [
+ "bincode",
+ "serde",
+ "serde_cbor",
+ "serde_derive",
+ "serde_json",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "itoa"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+
+[[package]]
+name = "serde"
+version = "1.0.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
+dependencies = [
+ "half",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
--- /dev/null
+[package]
+name = "ch7-file-and-storage"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+bincode = "1"
+serde = "1"
+serde_cbor = "0.11"
+serde_derive = "1"
+serde_json = "1"
\ No newline at end of file
--- /dev/null
+use std::fs::File;
+use std::io::prelude::*;
+use std::env;
+
+const BYTES_PER_LINE: usize = 16;
+
+pub fn run() {
+
+ let arg1 = env::args().nth(1);
+ let fname = arg1.expect("Usage: fview FILENAME");
+
+ let mut f = File::open(&fname).expect("Unable to open file.");
+ let mut pos = 0;
+ let mut buffer = [0; BYTES_PER_LINE];
+
+ while let Ok(_) = f.read_exact(&mut buffer) {
+ print!("[0x{:08x}] ", pos);
+ for byte in &buffer {
+ match *byte {
+ 0x00 => print!(". "),
+ 0xff => print!("## "),
+ _ => print!("{:02x} ", byte),
+ }
+ }
+
+ println!("");
+ pos += BYTES_PER_LINE;
+ }
+}
\ No newline at end of file
--- /dev/null
+use std::fs::File;
+use std::fs::OpenOptions;
+use std::io::prelude::*;
+
+mod serde;
+mod fview;
+
+fn main() {
+ //serde::run();
+ //fview::run();
+
+ let mut f = OpenOptions::new().read(true).write(true).create(true).open("test.txt").expect("File can't be opened");
+ let mut content = String::new();
+ match f.read_to_string(&mut content) {
+ Ok(bytes_read) => println!("File content: \"{}\", bytes read: {}", content, bytes_read),
+ Err(err) => println!("Can't read file: {}", err),
+ }
+}
--- /dev/null
+use bincode::serialize as to_bincode;
+use serde_cbor::to_vec as to_cbor;
+use serde_json::to_string as to_json;
+use serde_derive::Serialize;
+
+#[derive(Serialize)]
+struct City {
+ name: String,
+ population: usize,
+ latitude: f64,
+ longitude: f64,
+}
+
+pub fn run() {
+ let calabar = City {
+ name: String::from("Calabar"),
+ population: 470_000,
+ latitude: 4.95,
+ longitude: 8.33,
+ };
+
+ let as_json = to_json(&calabar).unwrap();
+ let as_cbor = to_cbor(&calabar).unwrap();
+ let as_bincode = to_bincode(&calabar).unwrap();
+
+ println!("json:\n{}\n", &as_json);
+ println!("cbor:\n{:?}\n", &as_cbor);
+ println!("bincode:\n{:?}\n", &as_bincode);
+
+ println!("json (as UTF8):\n{}\n", String::from_utf8_lossy(as_json.as_bytes()));
+ println!("cbor (as UTF8):\n{:?}\n", String::from_utf8_lossy(&as_cbor));
+ println!("bincode (as UTF8):\n{:?}\n", String::from_utf8_lossy(&as_bincode));
+}
\ No newline at end of file