diff core/lib/Drupal/Component/Serialization/Yaml.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Component/Serialization/Yaml.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,64 @@
+<?php
+
+namespace Drupal\Component\Serialization;
+
+/**
+ * Provides a YAML serialization implementation.
+ *
+ * Proxy implementation that will choose the best library based on availability.
+ */
+class Yaml implements SerializationInterface {
+
+  /**
+   * The YAML implementation to use.
+   *
+   * @var \Drupal\Component\Serialization\SerializationInterface
+   */
+  protected static $serializer;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function encode($data) {
+    // Instead of using \Drupal\Component\Serialization\Yaml::getSerializer(),
+    // always using Symfony for writing the data, to reduce the risk of having
+    // differences if different environments (like production and development)
+    // do not match in terms of what YAML implementation is available.
+    return YamlSymfony::encode($data);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function decode($raw) {
+    $serializer = static::getSerializer();
+    return $serializer::decode($raw);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getFileExtension() {
+    return 'yml';
+  }
+
+  /**
+   * Determines which implementation to use for parsing YAML.
+   */
+  protected static function getSerializer() {
+
+    if (!isset(static::$serializer)) {
+      // Use the PECL YAML extension if it is available. It has better
+      // performance for file reads and is YAML compliant.
+      if (extension_loaded('yaml')) {
+        static::$serializer = YamlPecl::class;
+      }
+      else {
+        // Otherwise, fallback to the Symfony implementation.
+        static::$serializer = YamlSymfony::class;
+      }
+    }
+    return static::$serializer;
+  }
+
+}