Program Listing for File fetch_asset.hpp

Return to documentation for file (foxglove/include/foxglove/server/fetch_asset.hpp)

#pragma once

#include <functional>
#include <memory>
#include <string_view>
#include <vector>

struct foxglove_fetch_asset_responder;

namespace foxglove {

class FetchAssetResponder final {
public:
  void respondOk(const std::byte* data, size_t size) && noexcept;

  void respondOk(const std::vector<std::byte>& data) && noexcept {
    std::move(*this).respondOk(data.data(), data.size());
  };

  void respondError(std::string_view message) && noexcept;

  ~FetchAssetResponder() = default;
  FetchAssetResponder(FetchAssetResponder&&) noexcept = default;
  FetchAssetResponder& operator=(FetchAssetResponder&&) noexcept = default;
  FetchAssetResponder(const FetchAssetResponder&) = delete;
  FetchAssetResponder& operator=(const FetchAssetResponder&) = delete;

private:
  friend class WebSocketServer;

  struct Deleter {
    void operator()(foxglove_fetch_asset_responder* ptr) const noexcept;
  };

  std::unique_ptr<foxglove_fetch_asset_responder, Deleter> impl_;

  explicit FetchAssetResponder(foxglove_fetch_asset_responder* ptr)
      : impl_(ptr) {}
};

using FetchAssetHandler =
  std::function<void(std::string_view uri, FetchAssetResponder&& responder)>;

}  // namespace foxglove