I actually recently (this weekend) uploaded my widestring library to crates.io which does exactly this. The library has WideString and WideCString types for working with windows wide strings. The WideString type is just a thin, string-like wrapper around Vec that performs the conversions to/from regular Rust strings. It doesn’t do any nul checking but is usually sufficient for a lot of the use cases. WideCString on the other hand, is nul-terminated and checks for interior nuls, just like CString, for the cases you need to worry about that.
In both cases, the types are intended to be used only to convert around the windows FFI, where output conversion is delayed until the last possible moment (or converted immediately into Rust strings on input).