1<?php
2/**
3 * Elasticsearch PHP client
4 *
5 * @link      https://github.com/elastic/elasticsearch-php/
6 * @copyright Copyright (c) Elasticsearch B.V (https://www.elastic.co)
7 * @license   http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
8 * @license   https://www.gnu.org/licenses/lgpl-2.1.html GNU Lesser General Public License, Version 2.1
9 *
10 * Licensed to Elasticsearch B.V under one or more agreements.
11 * Elasticsearch B.V licenses this file to you under the Apache 2.0 License or
12 * the GNU Lesser General Public License, Version 2.1, at your option.
13 * See the LICENSE file in the project root for more information.
14 */
15
16
17declare(strict_types = 1);
18
19namespace Elasticsearch\Serializers;
20
21use Elasticsearch\Common\Exceptions\RuntimeException;
22
23if (!defined('JSON_INVALID_UTF8_SUBSTITUTE')) {
24    //PHP < 7.2 Define it as 0 so it does nothing
25    define('JSON_INVALID_UTF8_SUBSTITUTE', 0);
26}
27
28class EverythingToJSONSerializer implements SerializerInterface
29{
30    /**
31     * {@inheritdoc}
32     */
33    public function serialize($data): string
34    {
35        $data = json_encode($data, JSON_PRESERVE_ZERO_FRACTION + JSON_INVALID_UTF8_SUBSTITUTE);
36        if ($data === false) {
37            throw new RuntimeException("Failed to JSON encode: ".json_last_error());
38        }
39        if ($data === '[]') {
40            return '{}';
41        } else {
42            return $data;
43        }
44    }
45
46    /**
47     * {@inheritdoc}
48     */
49    public function deserialize(?string $data, array $headers)
50    {
51        return json_decode($data, true);
52    }
53}
54