/
Response.php
135 lines (121 loc) · 3.57 KB
/
Response.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
/*
* Copyright 2015 Alexey Maslov <alexey.y.maslov@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace alxmsl\Telegram\Bot;
use Closure;
use stdClass;
/**
* API calls response class
* @author alxmsl
*/
final class Response {
/**
* @var bool successful request or not
*/
private $ok = false;
/**
* @var string human-readable description of the result
*/
private $description = '';
/**
* @var null|mixed result instance
*/
private $Result = null;
/**
* @var int error code
*/
private $errorCode = 0;
/**
* @return boolean successful request or not
*/
public function isOk() {
return $this->ok;
}
/**
* @param stdClass $Object response data object
* @return $this self instance
*/
private function trySetDescription(stdClass $Object) {
if (isset($Object->description)) {
$this->description = (string) $Object->description;
}
return $this;
}
/**
* @return string human-readable description of the result
*/
public function getDescription() {
return $this->description;
}
/**
* @param stdClass $Object response data object
* @param Closure|null $BuildStrategy build strategy for response result(s)
* @return $this self instance
*/
private function trySetResult(stdClass $Object, Closure $BuildStrategy = null) {
if (isset($Object->result)) {
if (is_callable($BuildStrategy)) {
if (is_array($Object->result)) {
$this->Result = [];
foreach ($Object->result as $ResultItem) {
$this->Result[] = $BuildStrategy($ResultItem);
}
} else {
$this->Result = $BuildStrategy($Object->result);
}
} else {
$this->Result = $Object->result;
}
}
return $this;
}
/**
* @return mixed|null result instance
*/
public function getResult() {
return $this->Result;
}
/**
* @param stdClass $Object response data object
* @return $this self instance
*/
private function trySetErrorCode(stdClass $Object) {
if (isset($Object->error_code)) {
$this->errorCode = (int) $Object->error_code;
}
return $this;
}
/**
* @return int error code
*/
public function getErrorCode() {
return $this->errorCode;
}
/**
* @param string $string response string
* @param Closure|null $BuildStrategy build strategy for response result(s)
* @return $this response instance
*/
public static function initializeByString($string, Closure $BuildStrategy = null) {
$Object = json_decode($string);
$Response = new self();
$Response->ok = (bool) $Object->ok;
$Response->trySetDescription($Object)
->trySetErrorCode($Object)
->trySetResult($Object, $BuildStrategy);
return $Response;
}
}