Chapter 5 Hints

Working with files

There are some nice functions in the standard library for reading and writing files. std::fs::read and std::fs::write in particular.

If you're writing a function that reads from a file, there's a nice way to accept the file's path as a parameter using the AsRef trait. Your function signature will look something like fn from_file<P: AsRef<Path>>(path: P).

Working with strings and bytes

See the Chapter 2 Hints


fn main() {
use std::convert::TryFrom;
use std::fs;
use std::str::FromStr;

use crate::{Error, Result};
use crate::args::{DecodeArgs, EncodeArgs, PrintArgs, RemoveArgs};
use crate::png::{Chunk, ChunkType, Png};

/// Encodes a message into a PNG file and saves the result
pub fn encode(args: EncodeArgs) -> Result<()> {

/// Searches for a message hidden in a PNG file and prints the message if one is found
pub fn decode(args: DecodeArgs) -> Result<()> {

/// Removes a chunk from a PNG file and saves the result
pub fn remove(args: RemoveArgs) -> Result<()> {

/// Prints all of the chunks in a PNG file
pub fn print_chunks(args: PrintArgs) -> Result<()> {