Skip to content

Commit 203ba6f

Browse files
committed
std::filesystem::path support
1 parent d1fcec8 commit 203ba6f

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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

Comments
 (0)