#pragma once #include #include #include #include #include namespace mbgl { class Resource { public: enum Kind : uint8_t { Unknown = 0, Style, Source, Tile, Glyphs, SpriteImage, SpriteJSON, Image }; struct TileData { std::string urlTemplate; uint8_t pixelRatio; int32_t x; int32_t y; int8_t z; }; enum Necessity : bool { Optional = false, Required = true, }; Resource(Kind kind_, std::string url_, optional tileData_ = {}, Necessity necessity_ = Required) : kind(kind_), necessity(necessity_), url(std::move(url_)), tileData(std::move(tileData_)) { } static Resource style(const std::string& url); static Resource source(const std::string& url); static Resource tile(const std::string& urlTemplate, float pixelRatio, int32_t x, int32_t y, int8_t z, Tileset::Scheme scheme, Necessity = Required); static Resource glyphs(const std::string& urlTemplate, const FontStack& fontStack, const std::pair& glyphRange); static Resource spriteImage(const std::string& base, float pixelRatio); static Resource spriteJSON(const std::string& base, float pixelRatio); static Resource image(const std::string& url); Kind kind; Necessity necessity; std::string url; // Includes auxiliary data if this is a tile request. optional tileData; optional priorModified = {}; optional priorExpires = {}; optional priorEtag = {}; }; } // namespace mbgl