Files
plexphp/src/PlexAPIBuilder.php

173 lines
4.7 KiB
PHP

<?php
/**
* Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
*/
declare(strict_types=1);
namespace LukeHagar\Plex_API;
/**
* PlexAPIBuilder is used to configure and build an instance of the SDK.
*
* @package LukeHagar\Plex_API
*/
class PlexAPIBuilder
{
public function __construct(
private SDKConfiguration $sdkConfig = new SDKConfiguration(),
) {}
/**
* setClient allows setting a custom Guzzle client for the SDK to make requests with.
*
* @param \GuzzleHttp\ClientInterface $client
* @return PlexAPIBuilder
*/
public function setClient(\GuzzleHttp\ClientInterface $client): PlexAPIBuilder
{
$this->sdkConfig->defaultClient = $client;
return $this;
}
/**
* setSecurity is used to configure the security required for the SDK.
*
* @param Models\Components\Security $security
* @return PlexAPIBuilder
*/
public function setSecurity(Models\Components\Security $security): PlexAPIBuilder
{
$this->sdkConfig->security = $security;
return $this;
}
/**
* setServerUrl is used to configure the server URL for the SDK, and optionally template any parameters in the URL.
*
* @param string $serverUrl
* @param array<string, string> $params
* @return PlexAPIBuilder
*/
public function setServerUrl(string $serverUrl, ?array $params = null): PlexAPIBuilder
{
$this->sdkConfig->serverUrl = Utils\Utils::templateUrl($serverUrl, $params);
return $this;
}
/**
* setServer is used to configure the server for the SDK
*
* @param int $serverIdx
* @return PlexAPIBuilder
*/
public function setServerIndex(int $serverIdx): PlexAPIBuilder
{
$this->sdkConfig->serverIndex = $serverIdx;
return $this;
}
/**
* setProtocol is used to configure the protocol variable for url substitution
*
* @param ServerProtocol $protocol
* @return PlexAPIBuilder
*/
public function setProtocol(ServerProtocol $protocol): PlexAPIBuilder
{
foreach ($this->sdkConfig->serverDefaults as $idx => $serverDefaults) {
if (!array_key_exists('protocol', $serverDefaults)) {
continue;
}
$this->sdkConfig->serverDefaults[$idx]['protocol'] = $protocol->value;
}
return $this;
}
/**
* setIp is used to configure the ip variable for url substitution
*
* @param string $ip
* @return PlexAPIBuilder
*/
public function setIp(string $ip): PlexAPIBuilder
{
foreach ($this->sdkConfig->serverDefaults as $idx => $serverDefaults) {
if (!array_key_exists('ip', $serverDefaults)) {
continue;
}
$this->sdkConfig->serverDefaults[$idx]['ip'] = $ip;
}
return $this;
}
/**
* setPort is used to configure the port variable for url substitution
*
* @param string $port
* @return PlexAPIBuilder
*/
public function setPort(string $port): PlexAPIBuilder
{
foreach ($this->sdkConfig->serverDefaults as $idx => $serverDefaults) {
if (!array_key_exists('port', $serverDefaults)) {
continue;
}
$this->sdkConfig->serverDefaults[$idx]['port'] = $port;
}
return $this;
}
/**
* setXPlexClientIdentifier is used to configure the X-Plex-Client-Identifier parameter for the SDK.
*
* @param string $xPlexClientIdentifier
* @return PlexAPIBuilder
*/
public function setXPlexClientIdentifier(string $xPlexClientIdentifier): PlexAPIBuilder
{
if (!array_key_exists('header', $this->sdkConfig->globals['parameters']))
{
$this->sdkConfig->globals['parameters']['header'] = [];
}
$this->sdkConfig->globals['parameters']['header']['xPlexClientIdentifier'] = $xPlexClientIdentifier;
return $this;
}
/**
* build is used to build the SDK with any of the configured options.
*
* @return PlexAPI
*/
public function build(): PlexAPI
{
if ($this->sdkConfig->defaultClient === null) {
$this->sdkConfig->defaultClient = new \GuzzleHttp\Client([
'timeout' => 60,
]);
}
if ($this->sdkConfig->security !== null) {
$this->sdkConfig->securityClient = Utils\Utils::configureSecurityClient($this->sdkConfig->defaultClient, $this->sdkConfig->security);
}
if ($this->sdkConfig->securityClient === null) {
$this->sdkConfig->securityClient = $this->sdkConfig->defaultClient;
}
return new PlexAPI($this->sdkConfig);
}
}