1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 16:04:59 +00:00
serenity/Userland/Libraries/LibCore/ResourceImplementation.h
Andrew Kaster 0d417cd604 LibCore: Add Resource for platform agnostic application resource loading
The first implementation is simply raw files.
2023-10-17 11:02:01 -06:00

36 lines
1.1 KiB
C++

/*
* 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&);
Optional<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 Optional<String> filesystem_path_for_resource_scheme(String const&) = 0;
static bool is_directory(StringView filesystem_path);
static NonnullRefPtr<Resource> make_resource(String full_path, NonnullOwnPtr<Core::MappedFile>);
static NonnullRefPtr<Resource> make_resource(String full_path, ByteBuffer);
static NonnullRefPtr<Resource> make_directory_resource(String full_path);
};
}