1: <?php declare(strict_types=1);
2:
3: namespace Salient\Contract\Http\Message;
4:
5: use Psr\Http\Message\MessageInterface as PsrMessageInterface;
6: use Salient\Contract\Core\Immutable;
7: use Salient\Contract\Http\HasHttpHeader;
8: use Salient\Contract\Http\HasInnerHeaders;
9: use Salient\Contract\Http\HasMediaType;
10: use Salient\Contract\Http\HeadersInterface;
11: use JsonSerializable;
12: use Stringable;
13:
14: /**
15: * @api
16: *
17: * @template TPsr7 of PsrMessageInterface
18: */
19: interface MessageInterface extends
20: PsrMessageInterface,
21: HasInnerHeaders,
22: Stringable,
23: JsonSerializable,
24: Immutable,
25: HasHttpHeader,
26: HasMediaType
27: {
28: /**
29: * Get an instance from a PSR-7 message
30: *
31: * @param TPsr7 $message
32: * @return static
33: */
34: public static function fromPsr7(PsrMessageInterface $message): MessageInterface;
35:
36: /**
37: * Get message headers
38: */
39: public function getInnerHeaders(): HeadersInterface;
40:
41: /**
42: * Get an HTTP payload for the message
43: */
44: public function __toString(): string;
45:
46: /**
47: * Get an HTTP Archive (HAR) object for the message
48: *
49: * @return array{httpVersion:string,cookies:array<array{name:string,value:string,path?:string,domain?:string,expires?:string,httpOnly?:bool,secure?:bool}>,headers:array<array{name:string,value:string}>,headersSize:int,bodySize:int}
50: */
51: public function jsonSerialize(): array;
52: }
53: