* @internal */ class ContentJsonCodec implements JsonClassCodec { public function __construct( private IContentHandlerFactory $contentHandlerFactory ) { } /** @inheritDoc */ public function toJsonArray( $content ): array { '@phan-var Content $content'; /** @var Content $content */ // To serialize content we need a handler. $model = $content->getModel(); $handler = $this->contentHandlerFactory->getContentHandler( $model ); return [ 'model' => $model ] + $handler->serializeContentToJsonArray( $content ); } /** @inheritDoc */ public function newFromJsonArray( string $className, array $json ) { // To deserialize content we need a handler. $model = $json['model']; $handler = $this->contentHandlerFactory->getContentHandler( $model ); $content = $handler->deserializeContentFromJsonArray( $json ); // phan's support for generics is broken :( // @phan-suppress-next-line PhanTypeMismatchReturn return $content; } /** @inheritDoc */ public function jsonClassHintFor( string $className, string $keyName ) { return null; } }