Not sure if it helps, but I've sorta found a pattern I like recently for coupling types, by using a marker trait with a marker type. I use it in postcard-rpc: ```rust /// A marker trait denoting a single endpoint /// /// Typically used with the [endpoint] macro. pub trait Endpoint { /// The type of the Request (client to server) type Request: Schema; /// The type of the Response (server to client) type Response: Schema; /// The path associated with this Endpoint const PATH: &'static str; /// The unique [Key] identifying the Request const REQ_KEY: Key; /// The unique [Key] identifying the Response const RESP_KEY: Key; } ```