Implementing (parts of) git from scratch in Rust