diff --git a/class_map/Map.php b/class_map/Map.php new file mode 100644 index 0000000..26d3a8a --- /dev/null +++ b/class_map/Map.php @@ -0,0 +1,79 @@ +offsetExists($lKey) ? $carrier->offsetGet($lKey) : null; + } + + if (is_array($carrier)) { + if (empty($carrier)) { + return null; + } + + foreach ($carrier as $k => $value) { + if (strtolower((string) $k) === $lKey) { + return $value; + } + } + + return null; + } + + throw InvalidPropagationCarrier::forCarrier($carrier); + } + + /** + * {@inheritdoc} + * @param array|ArrayAccess $carrier + */ + public function put(&$carrier, string $key, string $value): void + { + if ($key === '') { + throw InvalidPropagationKey::forEmptyKey(); + } + + // Lowercasing the key was a first attempt to be compatible with the + // getter when using the Map getter for HTTP headers. + $lKey = \strtolower($key); + + if ($carrier instanceof ArrayAccess || is_array($carrier)) { + $carrier[$lKey] = $value; + return; + } + + throw InvalidPropagationCarrier::forCarrier($carrier); + } +} diff --git a/src/ConfigProvider.php b/src/ConfigProvider.php index 1d36f29..8396377 100644 --- a/src/ConfigProvider.php +++ b/src/ConfigProvider.php @@ -18,6 +18,7 @@ use Hyperf\Tracer\Listener\DbQueryExecutedListener; use Jaeger\ThriftUdpTransport; use OpenTracing\Tracer; +use Zipkin\Propagation\Map; class ConfigProvider { @@ -36,6 +37,7 @@ public function __invoke(): array 'annotations' => [ 'scan' => [ 'class_map' => [ + Map::class => __DIR__ . '/../class_map/Map.php', ThriftUdpTransport::class => __DIR__ . '/../class_map/ThriftUdpTransport.php', ], ],