/**
  * @param Entity $entity
  * @param string|null $expectedEntityType
  * @param EntityId|null $expectedEntityId
  *
  * @return EntityHolder
  */
 private function newHolder(Entity $entity, $expectedEntityType = null, EntityId $expectedEntityId = null)
 {
     $wikibaseRepo = WikibaseRepo::getDefaultInstance();
     $codec = new EntityContentDataCodec(new BasicEntityIdParser(), $wikibaseRepo->getInternalEntitySerializer(), $wikibaseRepo->getInternalEntityDeserializer());
     $blob = $codec->encodeEntity($entity, CONTENT_FORMAT_JSON);
     return new DeferredDecodingEntityHolder($codec, $blob, CONTENT_FORMAT_JSON, $expectedEntityType ?: $entity->getType(), $expectedEntityId);
 }
 /**
  * @param Content $content
  * @param string|null $format
  *
  * @throws InvalidArgumentException
  * @throws MWContentSerializationException
  * @return string
  */
 public function serializeContent(Content $content, $format = null)
 {
     if (!$content instanceof EntityContent) {
         throw new InvalidArgumentException('$content must be an instance of EntityContent');
     }
     if ($content->isRedirect()) {
         $redirect = $content->getEntityRedirect();
         return $this->contentCodec->encodeRedirect($redirect, $format);
     } else {
         // TODO: If we have an un-decoded Entity in a DeferredDecodingEntityHolder, just re-use
         // the encoded form.
         $entity = $content->getEntity();
         return $this->contentCodec->encodeEntity($entity, $format);
     }
 }