Current version of ProtocolSerializer.Read() method accepts any type for the observer parameter, while internally it is always assumed to be of type IObserver<MessageInstance<?>>. We need tighter type constraints here - at least in the user-facing API.