summaryrefslogtreecommitdiff
path: root/vendor/php-http/discovery/src/Exception/NoCandidateFoundException.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/php-http/discovery/src/Exception/NoCandidateFoundException.php')
-rw-r--r--vendor/php-http/discovery/src/Exception/NoCandidateFoundException.php47
1 files changed, 47 insertions, 0 deletions
diff --git a/vendor/php-http/discovery/src/Exception/NoCandidateFoundException.php b/vendor/php-http/discovery/src/Exception/NoCandidateFoundException.php
new file mode 100644
index 000000000..32f65db7b
--- /dev/null
+++ b/vendor/php-http/discovery/src/Exception/NoCandidateFoundException.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Http\Discovery\Exception;
+
+use Http\Discovery\Exception;
+
+/**
+ * When we have used a strategy but no candidates provided by that strategy could be used.
+ *
+ * @author Tobias Nyholm <[email protected]>
+ */
+final class NoCandidateFoundException extends \Exception implements Exception
+{
+ /**
+ * @param string $strategy
+ */
+ public function __construct($strategy, array $candidates)
+ {
+ $classes = array_map(
+ function ($a) {
+ return $a['class'];
+ },
+ $candidates
+ );
+
+ $message = sprintf(
+ 'No valid candidate found using strategy "%s". We tested the following candidates: %s.',
+ $strategy,
+ implode(', ', array_map([$this, 'stringify'], $classes))
+ );
+
+ parent::__construct($message);
+ }
+
+ private function stringify($mixed)
+ {
+ if (is_string($mixed)) {
+ return $mixed;
+ }
+
+ if (is_array($mixed) && 2 === count($mixed)) {
+ return sprintf('%s::%s', $this->stringify($mixed[0]), $mixed[1]);
+ }
+
+ return is_object($mixed) ? get_class($mixed) : gettype($mixed);
+ }
+}