/* * Copyright (c) 2023, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Core { class ResourceImplementation { public: ErrorOr> load_from_uri(StringView); Vector child_names(Resource const&); String filesystem_path(Resource const&); virtual ~ResourceImplementation() = default; static void install(OwnPtr); static ResourceImplementation& the(); protected: virtual ErrorOr> load_from_resource_scheme_uri(StringView) = 0; virtual Vector child_names_for_resource_scheme(Resource const&) = 0; virtual String filesystem_path_for_resource_scheme(String const&) = 0; static NonnullRefPtr make_resource(String full_path, NonnullOwnPtr, time_t modified_time); static NonnullRefPtr make_resource(String full_path, ByteBuffer, time_t modified_time); static NonnullRefPtr make_directory_resource(String full_path, time_t modified_time); }; }