get(ContextKeys::baggage()) ?? self::getEmpty(); } /** @inheritDoc */ public static function getBuilder(): BaggageBuilderInterface { return new BaggageBuilder(); } /** @inheritDoc */ public static function getCurrent(): BaggageInterface { return self::fromContext(Context::getCurrent()); } /** @inheritDoc */ public static function getEmpty(): BaggageInterface { if (null === self::$emptyBaggage) { self::$emptyBaggage = new self(); } return self::$emptyBaggage; } /** @var array */ private array $entries; /** @param array $entries */ public function __construct(array $entries = []) { $this->entries = $entries; } /** @inheritDoc */ public function activate(): ScopeInterface { return Context::getCurrent()->withContextValue($this)->activate(); } /** @inheritDoc */ public function getEntry(string $key): ?Entry { return $this->entries[$key] ?? null; } /** @inheritDoc */ public function getValue(string $key) { if (($entry = $this->getEntry($key)) !== null) { return $entry->getValue(); } return null; } /** @inheritDoc */ public function getAll(): iterable { foreach ($this->entries as $key => $entry) { yield $key => $entry; } } /** @inheritDoc */ public function isEmpty(): bool { return $this->entries === []; } /** @inheritDoc */ public function toBuilder(): BaggageBuilderInterface { return new BaggageBuilder($this->entries); } /** @inheritDoc */ public function storeInContext(ContextInterface $context): ContextInterface { return $context->with(ContextKeys::baggage(), $this); } }