I did this recently, and I'd suggest: * data wrangling bits are shared * one blocking top level surface * one async top level surface https://github.com/jamesmunns/max31855-rs