1<?php
2/**
3 * Copyright 2015 Google Inc. All Rights Reserved.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17namespace Google\Auth\HttpHandler;
18
19use GuzzleHttp\Client;
20use GuzzleHttp\ClientInterface;
21
22class HttpHandlerFactory
23{
24    /**
25     * Builds out a default http handler for the installed version of guzzle.
26     *
27     * @param ClientInterface $client
28     * @return Guzzle5HttpHandler|Guzzle6HttpHandler|Guzzle7HttpHandler
29     * @throws \Exception
30     */
31    public static function build(ClientInterface $client = null)
32    {
33        $client = $client ?: new Client();
34
35        $version = null;
36        if (defined('GuzzleHttp\ClientInterface::MAJOR_VERSION')) {
37            $version = ClientInterface::MAJOR_VERSION;
38        } elseif (defined('GuzzleHttp\ClientInterface::VERSION')) {
39            /** @phpstan-ignore-next-line */
40            $version = (int) substr(ClientInterface::VERSION, 0, 1);
41        }
42
43        switch ($version) {
44            case 5:
45                return new Guzzle5HttpHandler($client);
46            case 6:
47                return new Guzzle6HttpHandler($client);
48            case 7:
49                return new Guzzle7HttpHandler($client);
50            default:
51                throw new \Exception('Version not supported');
52        }
53    }
54}
55