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]."
);
}
}