68 lines
1.6 KiB
PHP
68 lines
1.6 KiB
PHP
|
<?php
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace OpenTelemetry\SDK\Common\Attribute;
|
||
|
|
||
|
use function array_key_exists;
|
||
|
use IteratorAggregate;
|
||
|
use Traversable;
|
||
|
|
||
|
final class Attributes implements AttributesInterface, IteratorAggregate
|
||
|
{
|
||
|
private array $attributes;
|
||
|
private int $droppedAttributesCount;
|
||
|
|
||
|
/**
|
||
|
* @internal
|
||
|
*/
|
||
|
public function __construct(array $attributes, int $droppedAttributesCount)
|
||
|
{
|
||
|
$this->attributes = $attributes;
|
||
|
$this->droppedAttributesCount = $droppedAttributesCount;
|
||
|
}
|
||
|
|
||
|
public static function create(iterable $attributes): AttributesInterface
|
||
|
{
|
||
|
return self::factory()->builder($attributes)->build();
|
||
|
}
|
||
|
|
||
|
public static function factory(?int $attributeCountLimit = null, ?int $attributeValueLengthLimit = null): AttributesFactoryInterface
|
||
|
{
|
||
|
return new AttributesFactory($attributeCountLimit, $attributeValueLengthLimit);
|
||
|
}
|
||
|
|
||
|
public function has(string $name): bool
|
||
|
{
|
||
|
return array_key_exists($name, $this->attributes);
|
||
|
}
|
||
|
|
||
|
public function get(string $name)
|
||
|
{
|
||
|
return $this->attributes[$name] ?? null;
|
||
|
}
|
||
|
|
||
|
/** @psalm-mutation-free */
|
||
|
public function count(): int
|
||
|
{
|
||
|
return \count($this->attributes);
|
||
|
}
|
||
|
|
||
|
public function getIterator(): Traversable
|
||
|
{
|
||
|
foreach ($this->attributes as $key => $value) {
|
||
|
yield (string) $key => $value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function toArray(): array
|
||
|
{
|
||
|
return $this->attributes;
|
||
|
}
|
||
|
|
||
|
public function getDroppedAttributesCount(): int
|
||
|
{
|
||
|
return $this->droppedAttributesCount;
|
||
|
}
|
||
|
}
|