3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 * http://www.gnu.org/copyleft/gpl.html
22 namespace MediaWiki\Json
;
24 use Wikimedia\JsonCodec\JsonClassCodec
;
27 * A JsonClassCodec for objects implementing the JsonDeserializable interface.
29 * @see JsonDeserializer
30 * @see JsonDeserializableTrait
34 class JsonDeserializableCodec
implements JsonClassCodec
{
35 private JsonDeserializer
$codec;
37 public function __construct( JsonDeserializer
$codec ) {
38 $this->codec
= $codec;
42 public function toJsonArray( $obj ): array {
43 $result = $obj->jsonSerialize();
44 // Undo the work of JsonDeserializableTrait to avoid
45 // redundant storage of TYPE_ANNOTATION
46 unset( $result[JsonConstants
::TYPE_ANNOTATION
] );
51 public function newFromJsonArray( string $className, array $json ) {
52 return $className::newFromJsonArray( $this->codec
, $json );
56 public function jsonClassHintFor( string $className, string $keyName ) {