diff --git a/src/common/bitsery/ext/boost-path.h b/src/common/bitsery/ext/boost-path.h new file mode 100644 index 00000000..fe149bc2 --- /dev/null +++ b/src/common/bitsery/ext/boost-path.h @@ -0,0 +1,65 @@ +// yabridge: a Wine VST bridge +// Copyright (C) 2020 Robbert van der Helm +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#pragma once + +#ifdef __WINE__ +#include "../wine-host/boost-fix.h" +#endif +#include + +#include +#include + +namespace bitsery { +namespace ext { + +// TODO: There's probably a better way to do all of this + +/** + * An adapter for serializing and deserializing filesystem paths since they're + * not mutable. + */ +class BoostPath { + public: + template + void serialize(Ser& ser, const boost::filesystem::path& path, Fnc&&) const { + auto path_str = path.string(); + ser.text1b(path_str, 4096); + } + + template + void deserialize(Des& des, boost::filesystem::path& path, Fnc&&) const { + boost::filesystem::path::string_type path_str{}; + des.text1b(path_str, 4096); + path = path_str; + } +}; + +} // namespace ext + +namespace traits { + +template <> +struct ExtensionTraits { + using TValue = void; + static constexpr bool SupportValueOverload = false; + static constexpr bool SupportObjectOverload = true; + static constexpr bool SupportLambdaOverload = false; +}; + +} // namespace traits +} // namespace bitsery