载入中...
搜索中...
未找到
ResourceReader.cpp
浏览该文件的文档.
2
3#include <string>
4#include <utility>
5
6namespace eve::filesystem {
7namespace {
8
9[[nodiscard]] Result<std::vector<std::uint8_t>> unsupported(const ResourceUri& uri) {
10 return Result<std::vector<std::uint8_t>>::failure(
12 "filesystem ResourceReader has no provider for this resource namespace", uri.format()));
13}
14
15[[nodiscard]] Result<std::vector<std::uint8_t>> readFailure(const ResourceUri& uri) {
16 return Result<std::vector<std::uint8_t>>::failure(
17 Diagnostic::error(DiagnosticCode::Failed, "filesystem provider could not read resource", uri.format()));
18}
19
20template <typename T>
21[[nodiscard]] Result<T> propagate(const Status& status) {
23}
24
25} // namespace
26
28 if (uri.scheme() != UriScheme::Project) return unsupported(uri);
29
30 std::vector<std::uint8_t> bytes;
31 if (!filesystem_.readFile(std::string(uri.path()), bytes)) return readFailure(uri);
32 return Result<std::vector<std::uint8_t>>::success(std::move(bytes));
33}
34
35Result<std::vector<std::uint8_t>> ResourceReader::read(std::string_view legacyPathOrUri) const {
36 if (legacyPathOrUri.find("://") != std::string_view::npos) {
37 auto parsed = ResourceUri::parse(legacyPathOrUri);
38 if (!parsed.ok()) return propagate<std::vector<std::uint8_t>>(parsed.status());
39 return read(std::move(parsed).takeValue());
40 }
41
42 auto converted = ResourceUri::fromLegacyProjectPath(legacyPathOrUri);
43 if (!converted.ok()) return propagate<std::vector<std::uint8_t>>(converted.status());
44 return read(std::move(converted).takeValue());
45}
46
47} // namespace eve::filesystem
wgpu::PopErrorScopeStatus status
std::uint64_t bytes
std::string uri
Filesystem consumer for strongly typed resource locators.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
A semantically named resource locator.
Definition Uri.h:101
static Result< ResourceUri > fromLegacyProjectPath(std::string_view path)
Explicitly convert a legacy project-relative path.
Definition Uri.cpp:187
static Result< ResourceUri > parse(std::string_view text)
Parse a supported resource URI.
Definition Uri.cpp:168
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Result< std::vector< std::uint8_t > > read(const ResourceUri &uri) const
Read a supported project resource by typed URI.
virtual bool readFile(const std::string &path, std::vector< uint8_t > &out)=0
Reads an entire file.