Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
n/a
0 / 0
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2
3declare(strict_types=1);
4
5/**
6 * This file is part of php-fast-forward/http-factory.
7 *
8 * This source file is subject to the license bundled
9 * with this source code in the file LICENSE.
10 *
11 * @link      https://github.com/php-fast-forward/http-factory
12 * @copyright Copyright (c) 2025 Felipe SayĆ£o Lobato Abreu <github@mentordosnerds.com>
13 * @license   https://opensource.org/licenses/MIT MIT License
14 */
15
16namespace FastForward\Http\Message\Factory;
17
18use FastForward\Http\Message\PayloadResponseInterface;
19use Psr\Http\Message\ResponseFactoryInterface as PsrResponseFactoryInterface;
20use Psr\Http\Message\ResponseInterface;
21use Psr\Http\Message\UriInterface;
22
23/**
24 * Interface ResponseFactoryInterface.
25 *
26 * Extends PSR-17 ResponseFactoryInterface and defines additional convenience methods
27 * for generating common types of HTTP responses, including HTML, plain text, JSON payloads,
28 * redirects, and empty responses.
29 *
30 * Implementations of this interface MUST comply with the method requirements and MUST return
31 * immutable instances as per PSR-7 standards.
32 */
33interface ResponseFactoryInterface extends PsrResponseFactoryInterface
34{
35    /**
36     * Creates an HTTP response containing HTML content.
37     *
38     * The response MUST have 'Content-Type: text/html' set automatically.
39     *
40     * @param string $html the HTML content to include in the response body
41     *
42     * @return ResponseInterface the generated HTML response
43     */
44    public function createResponseFromHtml(string $html): ResponseInterface;
45
46    /**
47     * Creates an HTTP response containing a JSON-encoded payload.
48     *
49     * The response MUST have 'Content-Type: application/json' set automatically.
50     *
51     * @param array $payload the payload to encode as JSON
52     *
53     * @return PayloadResponseInterface the generated JSON response
54     */
55    public function createResponseFromPayload(array $payload): PayloadResponseInterface;
56
57    /**
58     * Creates an HTTP response containing plain text content.
59     *
60     * The response MUST have 'Content-Type: text/plain' set automatically.
61     *
62     * @param string $text the plain text content to include in the response body
63     *
64     * @return ResponseInterface the generated plain text response
65     */
66    public function createResponseFromText(string $text): ResponseInterface;
67
68    /**
69     * Creates an HTTP 204 No Content response.
70     *
71     * The response MUST contain no body and MUST have status code 204.
72     *
73     * @param array<string, string|string[]> $headers optional headers to include in the response
74     *
75     * @return ResponseInterface the generated no content response
76     */
77    public function createResponseNoContent(array $headers): ResponseInterface;
78
79    /**
80     * Creates an HTTP redirect response.
81     *
82     * The response MUST include a 'Location' header and an appropriate status code:
83     * 301 (permanent) if $permanent is true, or 302 (temporary) otherwise.
84     *
85     * @param string|UriInterface            $uri       the target location for the redirect
86     * @param bool                           $permanent if true, issues a permanent redirect; otherwise, temporary
87     * @param array<string, string|string[]> $headers   optional additional headers to include
88     *
89     * @return ResponseInterface the generated redirect response
90     */
91    public function createResponseRedirect(
92        string|UriInterface $uri,
93        bool $permanent,
94        array $headers,
95    ): ResponseInterface;
96}