HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/be.naniguide.com/app/Library/Cache/CacheEntry.php
<?php

namespace App\Library\Cache;

final class CacheEntry
{
    public function __construct(
        public readonly string $name,
        public readonly \Closure $compute,
        public readonly ?int $ttl = null,
    ) {}

    public static function fromManifestValue(string $name, mixed $spec): self
    {
        if ($spec instanceof \Closure) {
            return new self($name, $spec);
        }

        if (is_array($spec) && isset($spec['compute']) && $spec['compute'] instanceof \Closure) {
            $ttl = $spec['ttl'] ?? null;
            if ($ttl !== null && !is_int($ttl)) {
                throw new \InvalidArgumentException("Manifest entry '{$name}' ttl must be int (seconds) or null.");
            }
            return new self($name, $spec['compute'], $ttl);
        }

        throw new \InvalidArgumentException(
            "Manifest entry '{$name}' must be a Closure or ['compute' => Closure, 'ttl' => ?int]."
        );
    }
}