Is there a reason why #[safety::precond::ValidCStr(ptr, _)] does not imply the others?
As a sidenote, I think a lot of the repetition comes from repeating the #[safety::discharges:: part. Couldn't the syntax be made so that safety::discharges is the macro and ValidCStr(*name, _), ValidPtr(*name, u8, _) etc etc are all parameters of the same macro?