$arguments */ public function __construct( private readonly string $id, private readonly string $type, private readonly string $name, private readonly array $arguments, ) { } public function getId(): string { return $this->id; } public function getType(): string { return $this->type; } public function getName(): string { return $this->name; } /** * @return array */ public function getArguments(): array { return $this->arguments; } /** * @param array{ * id: string, * type: string, * function: array{ * name: string, * arguments: string * } * } $data */ public static function fromArray(array $data): self { $decodedArgs = json_decode($data['function']['arguments'], true); /** @var array $arguments */ $arguments = is_array($decodedArgs) ? $decodedArgs : []; return new self( id: $data['id'], type: $data['type'], name: $data['function']['name'], arguments: $arguments, ); } }