Skip to content

Commit 3420b5c

Browse files
committed
adding "FakeMap" type, renaming "AbstractModels" -> "FakeSlice", fixing a few issues with Catalog package
1 parent 126f823 commit 3420b5c

22 files changed

+370
-139
lines changed

src/AbstractClient.php

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use DCarbone\Go\HTTP;
2222
use DCarbone\Go\Time;
2323
use GuzzleHttp\ClientInterface;
24+
use GuzzleHttp\RequestOptions as GuzzleRequestOptions;
2425
use Psr\Http\Message\ResponseInterface;
2526
use Psr\Http\Message\StreamInterface;
2627

@@ -49,6 +50,40 @@ public function getConfig(): Config
4950
return $this->_config;
5051
}
5152

53+
/**
54+
* @param \DCarbone\PHPConsulAPI\Request $r
55+
* @return array
56+
*/
57+
protected function _buildGuzzleRequestOptions(Request $r): array
58+
{
59+
// todo: figure out better guzzle integration
60+
61+
$opts = Config::DEFAULT_REQUEST_OPTIONS;
62+
63+
if (!$this->_config->InsecureSkipVerify) {
64+
$opts[GuzzleRequestOptions::VERIFY] = false;
65+
} elseif ('' !== ($b = $this->_config->CAFile)) {
66+
$opts[GuzzleRequestOptions::VERIFY] = $b;
67+
}
68+
69+
if ('' !== ($c = $this->_config->CertFile)) {
70+
$opts[GuzzleRequestOptions::CERT] = $c;
71+
$opts[GuzzleRequestOptions::SSL_KEY] = $this->_config->KeyFile;
72+
}
73+
74+
if (null !== $r->timeout && 0 < ($ttl = \intval($r->timeout->Seconds(), 10))) {
75+
$opts[GuzzleRequestOptions::TIMEOUT] = $ttl;
76+
}
77+
78+
// todo: per-request content and accept value setting.
79+
$body = $r->getBody();
80+
if (null !== $body) {
81+
$opts[GuzzleRequestOptions::JSON] = $body;
82+
}
83+
84+
return $opts;
85+
}
86+
5287
/**
5388
* @param string $method
5489
* @param string $path
@@ -122,7 +157,7 @@ protected function _do(Request $r): RequestResponse
122157
if (isset($this->_config->HttpClient) && $this->_config->HttpClient instanceof ClientInterface) {
123158
$response = $this->_config->HttpClient->send(
124159
$r->toPsrRequest(),
125-
$this->_config->getGuzzleRequestOptions($r)
160+
$this->_buildGuzzleRequestOptions($r)
126161
);
127162
} // Otherwise, throw error to be caught below
128163
else {
@@ -174,11 +209,11 @@ protected function _requireStatus(RequestResponse $r, int $statusCode): RequestR
174209
// Otherwise, return error
175210
$r->Err = new Error(
176211
\sprintf(
177-
'%s - Non-%d response seen. Response code: %d. Message: %s',
212+
'%s - Non-%d response seen. Response code: %d. Response: %s',
178213
\get_class($this),
179214
$statusCode,
180215
$actualCode,
181-
$r->Response->getReasonPhrase()
216+
$r->Response->getBody()->getContents()
182217
)
183218
);
184219
} else {

src/AbstractModel.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public function __construct(?array $data = [])
4141
if (null === $data || [] === $data) {
4242
return;
4343
}
44-
foreach ($data as $k => $v) {
45-
$this->hydrateField($k, $v);
44+
foreach ($data as $field => $value) {
45+
$this->hydrateField($field, $value);
4646
}
4747
}
4848

src/Agent/AgentService.php

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
use DCarbone\PHPConsulAPI\AbstractModel;
2222
use DCarbone\PHPConsulAPI\Catalog\ServiceAddress;
23+
use DCarbone\PHPConsulAPI\FakeMap;
2324
use DCarbone\PHPConsulAPI\HasStringTags;
2425
use DCarbone\PHPConsulAPI\Hydration;
2526

@@ -32,34 +33,38 @@ class AgentService extends AbstractModel
3233

3334
protected const FIELDS = [
3435
self::FIELD_KIND => Hydration::OMITEMPTY_STRING_FIELD,
36+
self::FIELD_META => Hydration::MAP_FIELD,
3537
self::FIELD_TAGGED_ADDRESSES => [
3638
Hydration::FIELD_TYPE => Hydration::ARRAY,
3739
Hydration::FIELD_CLASS => ServiceAddress::class,
3840
Hydration::FIELD_ARRAY_TYPE => Hydration::OBJECT,
3941
Hydration::FIELD_OMITEMPTY => true,
4042
],
4143
self::FIELD_WEIGHTS => [
42-
Hydration::FIELD_TYPE => Hydration::OBJECT,
43-
Hydration::FIELD_CLASS => AgentWeights::class,
44+
Hydration::FIELD_TYPE => Hydration::OBJECT,
45+
Hydration::FIELD_CLASS => AgentWeights::class,
4446
],
4547
self::FIELD_CREATE_INDEX => Hydration::OMITEMPTY_INTEGER_FIELD,
4648
self::FIELD_MODIFY_INDEX => Hydration::OMITEMPTY_INTEGER_FIELD,
4749
self::FIELD_CONTENT_HASH => Hydration::OMITEMPTY_STRING_FIELD,
4850
self::FIELD_PROXY => [
49-
Hydration::FIELD_TYPE => Hydration::OBJECT,
50-
Hydration::FIELD_CLASS => AgentServiceConnectProxyConfig::class,
51-
Hydration::FIELD_NULLABLE => true,
51+
Hydration::FIELD_TYPE => Hydration::OBJECT,
52+
Hydration::FIELD_CLASS => AgentServiceConnectProxyConfig::class,
53+
Hydration::FIELD_NULLABLE => true,
54+
Hydration::FIELD_OMITEMPTY => true,
5255
],
5356
self::FIELD_CONNECT => [
54-
Hydration::FIELD_TYPE => Hydration::OBJECT,
55-
Hydration::FIELD_CLASS => AgentServiceConnect::class,
56-
Hydration::FIELD_NULLABLE => true,
57+
Hydration::FIELD_TYPE => Hydration::OBJECT,
58+
Hydration::FIELD_CLASS => AgentServiceConnect::class,
59+
Hydration::FIELD_NULLABLE => true,
60+
Hydration::FIELD_OMITEMPTY => true,
5761
],
5862
self::FIELD_NAMESPACE => Hydration::OMITEMPTY_STRING_FIELD,
5963
self::FIELD_DATACENTER => Hydration::OMITEMPTY_STRING_FIELD,
6064
];
6165

6266
private const FIELD_KIND = 'Kind';
67+
private const FIELD_META = 'Meta';
6368
private const FIELD_TAGGED_ADDRESSES = 'TaggedAddresses';
6469
private const FIELD_WEIGHTS = 'Weights';
6570
private const FIELD_CREATE_INDEX = 'CreateIndex';
@@ -76,8 +81,8 @@ class AgentService extends AbstractModel
7681
public string $ID = '';
7782
/** @var string */
7883
public string $Service = '';
79-
/** @var string[] */
80-
public array $Meta = [];
84+
/** @var \DCarbone\PHPConsulAPI\FakeMap */
85+
public FakeMap $Meta;
8186
/** @var int */
8287
public int $Port = 0;
8388
/** @var string */
@@ -113,6 +118,9 @@ public function __construct(?array $data = [])
113118
if (!isset($this->Weights)) {
114119
$this->Weights = new AgentWeights(null);
115120
}
121+
if (!isset($this->Meta)) {
122+
$this->Meta = new FakeMap(null);
123+
}
116124
}
117125

118126
/**
@@ -170,18 +178,18 @@ public function setService(string $Service): self
170178
}
171179

172180
/**
173-
* @return string[]
181+
* @return \DCarbone\PHPConsulAPI\FakeMap
174182
*/
175-
public function getMeta(): array
183+
public function getMeta(): FakeMap
176184
{
177185
return $this->Meta;
178186
}
179187

180188
/**
181-
* @param string[] $Meta
189+
* @param \DCarbone\PHPConsulAPI\FakeMap $Meta
182190
* @return \DCarbone\PHPConsulAPI\Agent\AgentService
183191
*/
184-
public function setMeta(array $Meta): self
192+
public function setMeta(FakeMap $Meta): self
185193
{
186194
$this->Meta = $Meta;
187195
return $this;

src/Agent/AgentServiceChecks.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
*/
2020

2121
use DCarbone\PHPConsulAPI\AbstractModel;
22-
use DCarbone\PHPConsulAPI\AbstractModels;
22+
use DCarbone\PHPConsulAPI\FakeSlice;
2323

2424
/**
2525
* Class AgentServiceChecks
2626
*/
27-
class AgentServiceChecks extends AbstractModels
27+
class AgentServiceChecks extends FakeSlice
2828
{
2929
/** @var string */
3030
protected string $containedClass = AgentServiceCheck::class;

src/Agent/AgentServiceConnectProxyConfig.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ class AgentServiceConnectProxyConfig extends AbstractModel
4949
Hydration::FIELD_CLASS => MeshGatewayConfig::class,
5050
Hydration::FIELD_OMITEMPTY => true,
5151
],
52-
self::FIELD_EXPOSE => Hydration::OMITEMPTY_BOOLEAN_FIELD,
52+
self::FIELD_EXPOSE => [
53+
Hydration::FIELD_TYPE => Hydration::OBJECT,
54+
Hydration::FIELD_CLASS => ExposeConfig::class,
55+
],
5356
];
5457

5558
private const FIELD_DESTINATION_SERVICE_NAME = 'DestinationServiceName';

src/Catalog/CatalogClient.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,12 @@ public function Datacenters(): ValuedStringsResponse
7070
* @param \DCarbone\PHPConsulAPI\QueryOptions|null $opts
7171
* @throws \GuzzleHttp\Exception\GuzzleException
7272
* @throws \Exception
73-
* @return \DCarbone\PHPConsulAPI\Catalog\CatalogNodesResponse
73+
* @return \DCarbone\PHPConsulAPI\Catalog\NodesResponse
7474
*/
75-
public function Nodes(?QueryOptions $opts = null): CatalogNodesResponse
75+
public function Nodes(?QueryOptions $opts = null): NodesResponse
7676
{
7777
$resp = $this->_requireOK($this->_doGet('v1/catalog/nodes', $opts));
78-
$ret = new CatalogNodesResponse();
78+
$ret = new NodesResponse();
7979
$this->_hydrateResponse($resp, $ret);
8080
return $ret;
8181
}

src/Catalog/CatalogRegistration.php

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use DCarbone\PHPConsulAPI\AbstractModel;
2222
use DCarbone\PHPConsulAPI\Agent\AgentCheck;
2323
use DCarbone\PHPConsulAPI\Agent\AgentService;
24+
use DCarbone\PHPConsulAPI\FakeMap;
2425
use DCarbone\PHPConsulAPI\Health\HealthChecks;
2526
use DCarbone\PHPConsulAPI\Hydration;
2627

@@ -30,9 +31,11 @@
3031
class CatalogRegistration extends AbstractModel
3132
{
3233
protected const FIELDS = [
33-
self::FIELD_SERVICE => [
34-
Hydration::FIELD_TYPE => Hydration::OBJECT,
35-
Hydration::FIELD_CLASS => AgentService::class,
34+
self::FIELD_TAGGED_ADDRESSES => Hydration::MAP_FIELD,
35+
self::FIELD_NODE_META => Hydration::MAP_FIELD,
36+
self::FIELD_SERVICE => [
37+
Hydration::FIELD_TYPE => Hydration::OBJECT,
38+
Hydration::FIELD_CLASS => AgentService::class,
3639
],
3740
self::FIELD_CHECK => [
3841
Hydration::FIELD_TYPE => Hydration::OBJECT,
@@ -44,20 +47,22 @@ class CatalogRegistration extends AbstractModel
4447
],
4548
];
4649

47-
private const FIELD_SERVICE = 'Service';
48-
private const FIELD_CHECK = 'Check';
49-
private const FIELD_CHECKS = 'Checks';
50+
private const FIELD_TAGGED_ADDRESSES = 'TaggedAddresses';
51+
private const FIELD_NODE_META = 'NodeMeta';
52+
private const FIELD_SERVICE = 'Service';
53+
private const FIELD_CHECK = 'Check';
54+
private const FIELD_CHECKS = 'Checks';
5055

5156
/** @var string */
5257
public string $ID = '';
5358
/** @var string */
5459
public string $Node = '';
5560
/** @var string */
5661
public string $Address = '';
57-
/** @var array */
58-
public array $TaggedAddresses = [];
59-
/** @var array */
60-
public array $NodeMeta = [];
62+
/** @var \DCarbone\PHPConsulAPI\FakeMap */
63+
public FakeMap $TaggedAddresses;
64+
/** @var \DCarbone\PHPConsulAPI\FakeMap */
65+
public FakeMap $NodeMeta;
6166
/** @var string */
6267
public string $Datacenter = '';
6368
/** @var \DCarbone\PHPConsulAPI\Agent\AgentService|null */
@@ -79,6 +84,12 @@ public function __construct(?array $data = [])
7984
if (!isset($this->Checks)) {
8085
$this->Checks = new HealthChecks(null);
8186
}
87+
if (!isset($this->TaggedAddresses)) {
88+
$this->TaggedAddresses = new FakeMap(null);
89+
}
90+
if (!isset($this->NodeMeta)) {
91+
$this->NodeMeta = new FakeMap(null);
92+
}
8293
}
8394

8495
/**
@@ -136,36 +147,36 @@ public function setAddress(string $Address): self
136147
}
137148

138149
/**
139-
* @return array
150+
* @return \DCarbone\PHPConsulAPI\FakeMap
140151
*/
141-
public function getTaggedAddresses(): array
152+
public function getTaggedAddresses(): FakeMap
142153
{
143154
return $this->TaggedAddresses;
144155
}
145156

146157
/**
147-
* @param array $TaggedAddresses
158+
* @param \DCarbone\PHPConsulAPI\FakeMap $TaggedAddresses
148159
* @return \DCarbone\PHPConsulAPI\Catalog\CatalogRegistration
149160
*/
150-
public function setTaggedAddresses(array $TaggedAddresses): self
161+
public function setTaggedAddresses(FakeMap $TaggedAddresses): self
151162
{
152163
$this->TaggedAddresses = $TaggedAddresses;
153164
return $this;
154165
}
155166

156167
/**
157-
* @return array
168+
* @return \DCarbone\PHPConsulAPI\FakeMap
158169
*/
159-
public function getNodeMeta(): array
170+
public function getNodeMeta(): FakeMap
160171
{
161172
return $this->NodeMeta;
162173
}
163174

164175
/**
165-
* @param array $NodeMeta
176+
* @param \DCarbone\PHPConsulAPI\FakeMap $NodeMeta
166177
* @return \DCarbone\PHPConsulAPI\Catalog\CatalogRegistration
167178
*/
168-
public function setNodeMeta(array $NodeMeta): self
179+
public function setNodeMeta(FakeMap $NodeMeta): self
169180
{
170181
$this->NodeMeta = $NodeMeta;
171182
return $this;

0 commit comments

Comments
 (0)