Program Listing for File IApiServer.h

Return to documentation for file (axr.sdk/net/IApiServer.h)

// Copyright (C) AcceleratXR, Inc. All rights reserved.
//
// Author: Jean-Philippe Steinmetz <info@acceleratxr.com>
#pragma once

#include "../Configuration.h"
#include "../Exception.h"
#include "IHttpBody.h"
#include "HttpContent.h"

#include <any>
#include <initializer_list>
#include <map>
#include <variant>
#include <vector>

#include <cpprest/asyncrt_utils.h>

namespace axr {
namespace sdk {
namespace net {

enum class HttpMethod
{
    DELETE,
    GET,
    HEAD,
    POST,
    PUT,
    UPGRADE
};

class IHttpRequest
{
public:
    std::map<utility::string_t, utility::string_t> GetHeaders();
    void SetHeaders(std::map<utility::string_t, utility::string_t> Value);

    utility::string_t GetBody() const;
    HttpMethod GetMethod() const;
    utility::string_t GetPath() const;
};

class IHttpResponse
{
public:
};

typedef std::variant<std::monostate, utility::string_t, std::shared_ptr<Object>, pplx::task<void>, pplx::task<utility::string_t>, pplx::task<std::shared_ptr<Object>>> HandlerReturnType;

typedef std::function<HandlerReturnType(const IHttpRequest& Request, const IHttpResponse& Response)> RequestHandler;

class IApiServer
{
public:
    virtual pplx::task<void> Listen(uint16_t Port) = 0;

    virtual pplx::task<void> Stop() = 0;

    virtual void Use(RequestHandler Handler) = 0;

    virtual void Use(const utility::string_t& Method, const utility::string_t& Path, std::initializer_list<RequestHandler> Handlers) = 0;

    virtual void Delete(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;

    virtual void Get(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;

    virtual void Head(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;

    virtual void Post(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;

    virtual void Put(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;

    virtual void Upgrade(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;
};

} // namespace net
} // namespace sdk
} // namespace axr