Needs better implementation once stable Rust improves, or perhaps see if there's a crate for this Reference #4 but keep open