listDocumentationResponse.php•5.52 kB
<?php
declare(strict_types=1);
namespace OpenFGA\MCP\Responses;
use JsonSerializable;
use OpenFGA\MCP\Models\{GuideDocumentation, SdkDocumentation};
use Override;
use function array_map;
use function count;
final readonly class listDocumentationResponse extends AbstractResponse implements JsonSerializable
{
/**
* @param array<SdkDocumentation> $sdkDocumentation List of SDK documentation
* @param array<GuideDocumentation> $guidesDocumentation List of guides documentation
* @param string $status Status message indicating the availability of OpenFGA documentation
* @param int|null $totalSdks Total number of SDKs available
* @param array<string, string> $endpoints List of endpoints for accessing documentation
*/
public function __construct(
private array $sdkDocumentation,
private array $guidesDocumentation,
private string $status = '✅ OpenFGA Documentation Available',
private ?int $totalSdks = null,
private array $endpoints = [
'openfga://docs' => 'List all OpenFGA documentation',
'openfga://docs/{sdk}' => 'Get OpenFGA SDK overview',
'openfga://docs/{sdk}/class/{className}' => 'Get OpenFGA SDK class documentation',
'openfga://docs/{sdk}/method/{className}/{methodName}' => 'Get OpenFGA SDK method documentation',
'openfga://docs/{sdk}/section/{sectionName}' => 'Get OpenFGA documentation section',
'openfga://docs/{sdk}/chunk/{chunkId}' => 'Get OpenFGA specific content chunk',
],
) {
}
/**
* Create and serialize the response in one step.
*
* @param array<SdkDocumentation> $sdkDocumentation
* @param array<GuideDocumentation> $guidesDocumentation
* @param string $status
* @param int|null $totalSdks
* @param array<string, string> $endpoints
* @return array{status: string, sdk_documentation: array<array{sdk: string, name: string, sections: int, classes: int, chunks: int, uri: string}>, guides_documentation: array<array{type: string, name: string, sections: int, chunks: int, uri: string}>, total_sdks: int, endpoints: array<string, string>}
*/
public static function create(
array $sdkDocumentation,
array $guidesDocumentation,
string $status = '✅ OpenFGA Documentation Available',
?int $totalSdks = null,
array $endpoints = [
'openfga://docs' => 'List all OpenFGA documentation',
'openfga://docs/{sdk}' => 'Get OpenFGA SDK overview',
'openfga://docs/{sdk}/class/{className}' => 'Get OpenFGA SDK class documentation',
'openfga://docs/{sdk}/method/{className}/{methodName}' => 'Get OpenFGA SDK method documentation',
'openfga://docs/{sdk}/section/{sectionName}' => 'Get OpenFGA documentation section',
'openfga://docs/{sdk}/chunk/{chunkId}' => 'Get OpenFGA specific content chunk',
],
): array {
return (new self($sdkDocumentation, $guidesDocumentation, $status, $totalSdks, $endpoints))->jsonSerialize();
}
/**
* Serialize the response to JSON format.
*
* @return array{status: string, sdk_documentation: array<array{sdk: string, name: string, sections: int, classes: int, chunks: int, uri: string}>, guides_documentation: array<array{type: string, name: string, sections: int, chunks: int, uri: string}>, total_sdks: int, endpoints: array<string, string>}
*/
#[Override]
public function jsonSerialize(): array
{
return [
'status' => $this->status,
'sdk_documentation' => array_map(static fn (SdkDocumentation $doc): array => $doc->jsonSerialize(), $this->sdkDocumentation),
'guides_documentation' => array_map(static fn (GuideDocumentation $doc): array => $doc->jsonSerialize(), $this->guidesDocumentation),
'total_sdks' => $this->totalSdks ?? count($this->sdkDocumentation) + count($this->guidesDocumentation),
'endpoints' => $this->endpoints,
];
}
}