Is there a way (other than documentation) to define an interface in a way allowing to automatically check that a struct implements all required methods at compile time?
No, not that I’m aware of.
It is probably possible using introspection and reflection techniques, described here Dispatch, Traits and Metaprogramming Over Reflection