// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_RESOURCESAVER_HPP #define NAZARA_RESOURCESAVER_HPP #include #include #include #include #include #include #include #include namespace Nz { class Stream; template class ResourceSaver { static_assert(std::is_base_of::value, "ResourceParameters must be a base of Parameters"); friend Type; public: using ExtensionGetter = bool (*)(const std::string& extension); using FormatQuerier = bool (*)(const std::string& format); using FileSaver = bool (*)(const Type& resource, const std::filesystem::path& filePath, const Parameters& parameters); using StreamSaver = bool (*)(const Type& resource, const std::string& format, Stream& stream, const Parameters& parameters); ResourceSaver() = delete; ~ResourceSaver() = delete; static bool IsFormatSupported(const std::string& extension); static bool SaveToFile(const Type& resource, const std::filesystem::path& filePath, const Parameters& parameters = Parameters()); static bool SaveToStream(const Type& resource, Stream& stream, const std::string& format, const Parameters& parameters = Parameters()); static void RegisterSaver(FormatQuerier formatQuerier, StreamSaver streamSaver, FileSaver fileSaver = nullptr); static void UnregisterSaver(FormatQuerier formatQuerier, StreamSaver streamSaver, FileSaver fileSaver = nullptr); private: using Saver = std::tuple; using SaverList = std::list; }; } #include #endif // NAZARA_RESOURCESAVER_HPP