#pragma once
#include <functional>
#include <map>
#include <string>
#include <utility>
#include <c10/macros/Export.h>
namespace c10d::control_plane {
class TORCH_API Request {
public:
virtual ~Request() = default;
virtual const std::string& body() const = 0;
virtual const std::multimap<std::string, std::string>& params() const = 0;
};
class TORCH_API Response {
public:
virtual ~Response() = default;
virtual void setContent(
std::string&& content,
const std::string& content_type) = 0;
virtual void setStatus(int status) = 0;
};
using HandlerFunc = std::function<void(const Request&, Response&)>;
TORCH_API void registerHandler(const std::string& name, HandlerFunc f);
TORCH_API HandlerFunc getHandler(const std::string& name);
TORCH_API std::vector<std::string> getHandlerNames();
class TORCH_API RegisterHandler {
public:
RegisterHandler(const std::string& name, HandlerFunc f) {
registerHandler(name, std::move(f));
}
RegisterHandler(const RegisterHandler&) = delete;
RegisterHandler(RegisterHandler&&) = delete;
RegisterHandler& operator=(const RegisterHandler&) = delete;
RegisterHandler& operator=(RegisterHandler&&) = delete;
};
}