-
Notifications
You must be signed in to change notification settings - Fork 14
/
JsonStream.php
58 lines (48 loc) · 1.53 KB
/
JsonStream.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
<?php
/**
* Created by PhpStorm.
* User: Exodus 4D
* Date: 30.12.2018
* Time: 01:09
*/
namespace Exodus4D\ESI\Lib\Stream;
use GuzzleHttp\Psr7\StreamDecoratorTrait;
class JsonStream implements JsonStreamInterface {
// we need to "overwrite" the default Trait getContents() method
// -> therefore we make it accessible as traitGetContents() and call it from
// the new getContents() method
use StreamDecoratorTrait {
StreamDecoratorTrait::getContents as traitGetContents;
}
/**
* @return mixed|string|null
*/
public function getContents(){
$contents = $this->traitGetContents();
if($contents === ''){
return null;
}
$decodedContents = \GuzzleHttp\json_decode($contents);
if(json_last_error() !== JSON_ERROR_NONE){
throw new \RuntimeException('Error trying to decode response: ' . json_last_error_msg());
}
return $decodedContents;
}
/**
* we need to overwrite this because of Trait __toString() calls $this->Contents() which no longer returns a string
* @return string
*/
public function __toString(){
try {
if($this->isSeekable()){
$this->seek(0);
}
return $this->traitGetContents();
}catch (\Exception $e){
// Really, PHP? https://bugs.php.net/bug.php?id=53648
trigger_error('StreamDecorator::__toString exception: '
. (string) $e, E_USER_ERROR);
return '';
}
}
}