null, 'metadata' => null, 'basicMessage' => $message, ]; parent::__construct($message, $code, $optionalArgs['previous']); $this->status = $status; $this->metadata = $optionalArgs['metadata']; $this->basicMessage = $optionalArgs['basicMessage']; } public function getStatus() { return $this->status; } /** * @param \stdClass $status * @return ApiException */ public static function createFromStdClass($status) { $metadata = property_exists($status, 'metadata') ? $status->metadata : null; return self::create( $status->details, $status->code, $metadata, Serializer::decodeMetadata($metadata) ); } /** * @param string $basicMessage * @param int $rpcCode * @param array|null $metadata * @param \Exception $previous * @return ApiException */ public static function createFromApiResponse( $basicMessage, $rpcCode, array $metadata = null, \Exception $previous = null ) { return self::create( $basicMessage, $rpcCode, $metadata, Serializer::decodeMetadata($metadata), $previous ); } /** * Construct an ApiException with a useful message, including decoded metadata. * * @param string $basicMessage * @param int $rpcCode * @param mixed[] $metadata * @param array $decodedMetadata * @param \Exception|null $previous * @return ApiException */ private static function create($basicMessage, $rpcCode, $metadata, array $decodedMetadata, $previous = null) { $rpcStatus = ApiStatus::statusFromRpcCode($rpcCode); $messageData = [ 'message' => $basicMessage, 'code' => $rpcCode, 'status' => $rpcStatus, 'details' => $decodedMetadata ]; $message = json_encode($messageData, JSON_PRETTY_PRINT); return new ApiException($message, $rpcCode, $rpcStatus, [ 'previous' => $previous, 'metadata' => $metadata, 'basicMessage' => $basicMessage, ]); } /** * @param Status $status * @return ApiException */ public static function createFromRpcStatus(Status $status) { return self::create( $status->getMessage(), $status->getCode(), $status->getDetails(), Serializer::decodeAnyMessages($status->getDetails()) ); } /** * @return null|string */ public function getBasicMessage() { return $this->basicMessage; } /** * @return mixed[] */ public function getMetadata() { return $this->metadata; } /** * String representation of ApiException * @return string */ public function __toString() { return __CLASS__ . ": $this->message\n"; } }