|
| 1 | +/*! \file filesystem.hpp |
| 2 | + \brief Support for types found in \<filesystem\> |
| 3 | + \ingroup STLSupport */ |
| 4 | +/* |
| 5 | + Copyright (c) 2023, Francois Michaut |
| 6 | + All rights reserved. |
| 7 | +
|
| 8 | + Redistribution and use in source and binary forms, with or without |
| 9 | + modification, are permitted provided that the following conditions are met: |
| 10 | + * Redistributions of source code must retain the above copyright |
| 11 | + notice, this list of conditions and the following disclaimer. |
| 12 | + * Redistributions in binary form must reproduce the above copyright |
| 13 | + notice, this list of conditions and the following disclaimer in the |
| 14 | + documentation and/or other materials provided with the distribution. |
| 15 | + * Neither the name of the copyright holder nor the |
| 16 | + names of its contributors may be used to endorse or promote products |
| 17 | + derived from this software without specific prior written permission. |
| 18 | +
|
| 19 | + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| 20 | + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| 21 | + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 22 | + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY |
| 23 | + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| 24 | + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 25 | + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| 26 | + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 | + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| 28 | + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 | +*/ |
| 30 | +#ifndef CEREAL_TYPES_FILESYSTEM_HPP_ |
| 31 | +#define CEREAL_TYPES_FILESYSTEM_HPP_ |
| 32 | + |
| 33 | +#include "cereal/cereal.hpp" |
| 34 | +#include "cereal/types/string.hpp" |
| 35 | +#include <filesystem> |
| 36 | + |
| 37 | +namespace cereal |
| 38 | +{ |
| 39 | + //! Serialization for std::filesystem::path types, if binary data is supported |
| 40 | + template<class Archive> inline |
| 41 | + typename std::enable_if<traits::is_output_serializable<BinaryData<std::filesystem::path::value_type>, Archive>::value, void>::type |
| 42 | + CEREAL_SAVE_FUNCTION_NAME(Archive & ar, std::filesystem::path const & path) |
| 43 | + { |
| 44 | + // Save native path format |
| 45 | + ar(path.native()); |
| 46 | + } |
| 47 | + |
| 48 | + //! Serialization for std::filesystem::path types, if binary data is supported |
| 49 | + template<class Archive> inline |
| 50 | + typename std::enable_if<traits::is_input_serializable<BinaryData<std::filesystem::path::value_type>, Archive>::value, void>::type |
| 51 | + CEREAL_LOAD_FUNCTION_NAME(Archive & ar, std::filesystem::path & path) |
| 52 | + { |
| 53 | + // load native path string |
| 54 | + std::filesystem::path::string_type str; |
| 55 | + |
| 56 | + ar(str); |
| 57 | + path = std::move(str); |
| 58 | + } |
| 59 | + |
| 60 | +} // namespace cereal |
| 61 | + |
| 62 | +#endif // CEREAL_TYPES_FILESYSTEM_HPP_ |
0 commit comments