summaryrefslogtreecommitdiff
path: root/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaFormatter.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaFormatter.php')
-rw-r--r--vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaFormatter.php156
1 files changed, 156 insertions, 0 deletions
diff --git a/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaFormatter.php b/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaFormatter.php
new file mode 100644
index 0000000..7f47fc9
--- /dev/null
+++ b/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaFormatter.php
@@ -0,0 +1,156 @@
+<?php
+
+namespace Guzzle\Service\Description;
+
+use Guzzle\Common\Exception\InvalidArgumentException;
+
+/**
+ * JSON Schema formatter class
+ */
+class SchemaFormatter
+{
+ /** @var \DateTimeZone */
+ protected static $utcTimeZone;
+
+ /**
+ * Format a value by a registered format name
+ *
+ * @param string $format Registered format used to format the value
+ * @param mixed $value Value being formatted
+ *
+ * @return mixed
+ */
+ public static function format($format, $value)
+ {
+ switch ($format) {
+ case 'date-time':
+ return self::formatDateTime($value);
+ case 'date-time-http':
+ return self::formatDateTimeHttp($value);
+ case 'date':
+ return self::formatDate($value);
+ case 'time':
+ return self::formatTime($value);
+ case 'timestamp':
+ return self::formatTimestamp($value);
+ case 'boolean-string':
+ return self::formatBooleanAsString($value);
+ default:
+ return $value;
+ }
+ }
+
+ /**
+ * Create a ISO 8601 (YYYY-MM-DDThh:mm:ssZ) formatted date time value in UTC time
+ *
+ * @param string|integer|\DateTime $value Date time value
+ *
+ * @return string
+ */
+ public static function formatDateTime($value)
+ {
+ return self::dateFormatter($value, 'Y-m-d\TH:i:s\Z');
+ }
+
+ /**
+ * Create an HTTP date (RFC 1123 / RFC 822) formatted UTC date-time string
+ *
+ * @param string|integer|\DateTime $value Date time value
+ *
+ * @return string
+ */
+ public static function formatDateTimeHttp($value)
+ {
+ return self::dateFormatter($value, 'D, d M Y H:i:s \G\M\T');
+ }
+
+ /**
+ * Create a YYYY-MM-DD formatted string
+ *
+ * @param string|integer|\DateTime $value Date time value
+ *
+ * @return string
+ */
+ public static function formatDate($value)
+ {
+ return self::dateFormatter($value, 'Y-m-d');
+ }
+
+ /**
+ * Create a hh:mm:ss formatted string
+ *
+ * @param string|integer|\DateTime $value Date time value
+ *
+ * @return string
+ */
+ public static function formatTime($value)
+ {
+ return self::dateFormatter($value, 'H:i:s');
+ }
+
+ /**
+ * Formats a boolean value as a string
+ *
+ * @param string|integer|bool $value Value to convert to a boolean 'true' / 'false' value
+ *
+ * @return string
+ */
+ public static function formatBooleanAsString($value)
+ {
+ return filter_var($value, FILTER_VALIDATE_BOOLEAN) ? 'true' : 'false';
+ }
+
+ /**
+ * Return a UNIX timestamp in the UTC timezone
+ *
+ * @param string|integer|\DateTime $value Time value
+ *
+ * @return int
+ */
+ public static function formatTimestamp($value)
+ {
+ return (int) self::dateFormatter($value, 'U');
+ }
+
+ /**
+ * Get a UTC DateTimeZone object
+ *
+ * @return \DateTimeZone
+ */
+ protected static function getUtcTimeZone()
+ {
+ // @codeCoverageIgnoreStart
+ if (!self::$utcTimeZone) {
+ self::$utcTimeZone = new \DateTimeZone('UTC');
+ }
+ // @codeCoverageIgnoreEnd
+
+ return self::$utcTimeZone;
+ }
+
+ /**
+ * Perform the actual DateTime formatting
+ *
+ * @param int|string|\DateTime $dateTime Date time value
+ * @param string $format Format of the result
+ *
+ * @return string
+ * @throws InvalidArgumentException
+ */
+ protected static function dateFormatter($dateTime, $format)
+ {
+ if (is_numeric($dateTime)) {
+ return gmdate($format, (int) $dateTime);
+ }
+
+ if (is_string($dateTime)) {
+ $dateTime = new \DateTime($dateTime);
+ }
+
+ if ($dateTime instanceof \DateTime) {
+ return $dateTime->setTimezone(self::getUtcTimeZone())->format($format);
+ }
+
+ throw new InvalidArgumentException('Date/Time values must be either a string, integer, or DateTime object');
+ }
+}