Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Component\Serialization;
|
Chris@0
|
4
|
Chris@0
|
5 /**
|
Chris@0
|
6 * Provides a YAML serialization implementation.
|
Chris@0
|
7 *
|
Chris@0
|
8 * Proxy implementation that will choose the best library based on availability.
|
Chris@0
|
9 */
|
Chris@0
|
10 class Yaml implements SerializationInterface {
|
Chris@0
|
11
|
Chris@0
|
12 /**
|
Chris@0
|
13 * The YAML implementation to use.
|
Chris@0
|
14 *
|
Chris@0
|
15 * @var \Drupal\Component\Serialization\SerializationInterface
|
Chris@0
|
16 */
|
Chris@0
|
17 protected static $serializer;
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * {@inheritdoc}
|
Chris@0
|
21 */
|
Chris@0
|
22 public static function encode($data) {
|
Chris@0
|
23 // Instead of using \Drupal\Component\Serialization\Yaml::getSerializer(),
|
Chris@0
|
24 // always using Symfony for writing the data, to reduce the risk of having
|
Chris@0
|
25 // differences if different environments (like production and development)
|
Chris@0
|
26 // do not match in terms of what YAML implementation is available.
|
Chris@0
|
27 return YamlSymfony::encode($data);
|
Chris@0
|
28 }
|
Chris@0
|
29
|
Chris@0
|
30 /**
|
Chris@0
|
31 * {@inheritdoc}
|
Chris@0
|
32 */
|
Chris@0
|
33 public static function decode($raw) {
|
Chris@0
|
34 $serializer = static::getSerializer();
|
Chris@0
|
35 return $serializer::decode($raw);
|
Chris@0
|
36 }
|
Chris@0
|
37
|
Chris@0
|
38 /**
|
Chris@0
|
39 * {@inheritdoc}
|
Chris@0
|
40 */
|
Chris@0
|
41 public static function getFileExtension() {
|
Chris@0
|
42 return 'yml';
|
Chris@0
|
43 }
|
Chris@0
|
44
|
Chris@0
|
45 /**
|
Chris@0
|
46 * Determines which implementation to use for parsing YAML.
|
Chris@0
|
47 */
|
Chris@0
|
48 protected static function getSerializer() {
|
Chris@0
|
49
|
Chris@0
|
50 if (!isset(static::$serializer)) {
|
Chris@0
|
51 // Use the PECL YAML extension if it is available. It has better
|
Chris@0
|
52 // performance for file reads and is YAML compliant.
|
Chris@0
|
53 if (extension_loaded('yaml')) {
|
Chris@0
|
54 static::$serializer = YamlPecl::class;
|
Chris@0
|
55 }
|
Chris@0
|
56 else {
|
Chris@0
|
57 // Otherwise, fallback to the Symfony implementation.
|
Chris@0
|
58 static::$serializer = YamlSymfony::class;
|
Chris@0
|
59 }
|
Chris@0
|
60 }
|
Chris@0
|
61 return static::$serializer;
|
Chris@0
|
62 }
|
Chris@0
|
63
|
Chris@0
|
64 }
|