/* * Copyright 2022 Haiku Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _B_HTTP_RESULT_H_ #define _B_HTTP_RESULT_H_ #include #include #include class BDataIO; namespace BPrivate { namespace Network { class BHttpFields; struct HttpResultPrivate; struct BHttpBody { std::optional text; }; enum class BHttpStatusClass : int16 { Invalid = 000, Informational = 100, Success = 200, Redirection = 300, ClientError = 400, ServerError = 500 }; enum class BHttpStatusCode : int16 { Unknown = 0, // Informational status codes Continue = 100, SwitchingProtocols, // Success status codes Ok = 200, Created, Accepted, NonAuthoritativeInformation, NoContent, ResetContent, PartialContent, // Redirection status codes MultipleChoice = 300, MovedPermanently, Found, SeeOther, NotModified, UseProxy, TemporaryRedirect = 307, PermanentRedirect, // Client error status codes BadRequest = 400, Unauthorized, PaymentRequired, Forbidden, NotFound, MethodNotAllowed, NotAcceptable, ProxyAuthenticationRequired, RequestTimeout, Conflict, Gone, LengthRequired, PreconditionFailed, RequestEntityTooLarge, RequestUriTooLarge, UnsupportedMediaType, RequestedRangeNotSatisfiable, ExpectationFailed, // Server error status codes InternalServerError = 500, NotImplemented, BadGateway, ServiceUnavailable, GatewayTimeout, }; struct BHttpStatus { int16 code = 0; BString text; // Helpers BHttpStatusClass StatusClass() const noexcept; BHttpStatusCode StatusCode() const noexcept; }; class BHttpResult { public: // Constructors and destructor BHttpResult(const BHttpResult& other) = delete; BHttpResult(BHttpResult&& other) noexcept; ~BHttpResult(); // Assignment operators BHttpResult& operator=(const BHttpResult& other) = delete; BHttpResult& operator=(BHttpResult&& other) noexcept; // Blocking Access Functions const BHttpStatus& Status() const; const BHttpFields& Fields() const; BHttpBody& Body() const; // Check if data is available yet bool HasStatus() const; bool HasFields() const; bool HasBody() const; bool IsCompleted() const; // Identity int32 Identity() const; private: friend class BHttpSession; BHttpResult(std::shared_ptr data); std::shared_ptr fData; }; } // namespace Network } // namespace BPrivate #endif // _B_HTTP_RESPONSE_H_