How I end up reimplementing everything: I need a simple Rust codec for the urlencoded data format, preferably with struct deriving support. There is a 'serde_urlencoded' crate, awesome! It offloads the actual work to the 'url' crate. Okay. That crate imports the 'idna' crate which in turn imports fat Unicode tables.
But I don't need Unicode tables for a parser that could be written in less than 50 lines of code! I also don't need idna for a program that exclusively deals with .onion addresses!