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