Using defprotocol with defstruct for "data inheritance"

From the guide:

dispatching on a protocol is available to any data type that has implemented the protocol

That is not true for your protocol. Only data types that have a specific shape would work.