Many functions return `Result<(), ()>`, which is a little weird looking! Having a `LeaseError` (or `LeaseReadError` / `LeaseWriteError`) would make this less weird, even if it's a simple empty `struct`.