Serial debugging is still central in embedded work, and Rust is excellent for building reliable terminal tooling.
I structure serial utilities as pipelines: read bytes, frame messages, parse protocol, then route structured events to output sinks. This makes it easy to swap text logs for JSON output without rewriting core logic.
Error handling is explicit at each stage. Timeouts, framing errors, and invalid payloads are separate variants, so operators can react correctly.
Using clap for arguments and serialport for transport, I can ship cross-platform tools that feel consistent and fail loudly when configuration is wrong.