The variant itself would be private if possible, this is the solution closest to that.
ruma-client-api contains serializable types for the requests and responses for each endpoint in the Matrix client API specification. These types can be shared by client and server code.