#pragma once
#include "rust/cxx.h"
#include <mbgl/actor/scheduler.hpp>
#include <mbgl/storage/file_source.hpp>
#include <mbgl/storage/resource.hpp>
#include <mbgl/storage/response.hpp>
#include <atomic>
#include <functional>
#include <memory>
namespace mln {
namespace bridge {
using ResourceKind = mbgl::Resource::Kind;
using ErrorReason = mbgl::Response::Error::Reason;
using FileSourceType = mbgl::FileSourceType;
struct BoxedFileSource;
struct RawResourceRequest;
struct RawResponse;
struct RequestState {
mbgl::FileSource::Callback cb;
mbgl::Scheduler *scheduler = nullptr;
std::atomic<bool> cancelled{false};
};
struct ForwardState {
std::function<void()> cb;
};
void register_rust_file_source(FileSourceType source_type,
rust::Box<BoxedFileSource> source);
void responder_complete(std::shared_ptr<RequestState> state,
const RawResponse &response);
void responder_cancel(std::shared_ptr<RequestState> state);
void forward_complete(std::shared_ptr<ForwardState> state);
} }