/**
  * @param Serializable $payload
  *
  * @return Command
  */
 public function createFromPayload(Serializable $payload)
 {
     $contract = $this->contractFactory->createFromObject($payload);
     $commandName = $contract->className();
     $messageIdentifier = $this->messageIdentifierFactory->generate();
     return new GenericCommand($commandName, $messageIdentifier, $payload, new Metadata(), $this->contractFactory);
 }
 /**
  * @return Contract
  */
 public function metadataType()
 {
     return $this->contractFactory->createFromObject($this->metadata);
 }