* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\CircuitBreaker\Contract; /** * A circuit breaker is used to provide * an alternative response when a tiers service * is unreachable. */ interface CircuitBreakerInterface { /** * @return string the circuit breaker state */ public function getState(): string; /** * The function that execute the service. * * @param string $service the service to call * @param array $parameters the parameters for the request * @param callable|null $fallback if the service is unavailable, rely on the fallback */ public function call(string $service, array $parameters = [], callable $fallback = null): string; /** * @return bool checks if the circuit breaker is open */ public function isOpened(): bool; /** * @return bool checks if the circuit breaker is half open */ public function isHalfOpened(): bool; /** * @return bool checks if the circuit breaker is closed */ public function isClosed(): bool; }