-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCacheStorage.php
50 lines (42 loc) · 1.25 KB
/
CacheStorage.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php declare(strict_types=1);
/*
* This file is part of ksaveras/circuit-breaker.
*
* (c) Ksaveras Sakys <xawiers@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Ksaveras\CircuitBreaker\Storage;
use Ksaveras\CircuitBreaker\Circuit;
use Psr\Cache\CacheItemPoolInterface;
final class CacheStorage implements StorageInterface
{
private readonly CacheItemPoolInterface $cache;
public function __construct(CacheItemPoolInterface $cache)
{
$this->cache = $cache;
}
public function save(Circuit $circuit): void
{
$item = $this->cache->getItem(sha1($circuit->getName()));
$item->set($circuit);
if (null !== $expiresAfter = $circuit->getResetTimeout()) {
$item->expiresAfter($expiresAfter);
}
$this->cache->save($item);
}
public function fetch(string $name): ?Circuit
{
$item = $this->cache->getItem(sha1($name));
$circuit = $item->get();
if ($circuit instanceof Circuit) {
return $circuit;
}
return null;
}
public function delete(string $name): void
{
$this->cache->deleteItem(sha1($name));
}
}