5 #ifndef PACKIO_CONFIG_H
6 #define PACKIO_CONFIG_H
8 #include <unordered_map>
10 #if defined(PACKIO_STANDALONE_ASIO)
12 #else // defined(PACKIO_STANDALONE_ASIO)
13 #include <boost/asio.hpp>
14 #endif // defined(PACKIO_STANDALONE_ASIO)
16 #define PACKIO_HAS_MSGPACK __has_include(<msgpack.hpp>)
17 #define PACKIO_HAS_NLOHMANN_JSON __has_include(<nlohmann/json.hpp>)
21 #if defined(PACKIO_STANDALONE_ASIO)
22 namespace net = ::asio;
23 using error_code = std::error_code;
24 using system_error = std::system_error;
25 using error_category = std::error_category;
26 #else // defined(PACKIO_STANDALONE_ASIO)
27 namespace net = ::boost::asio;
28 using error_code = boost::system::error_code;
29 using system_error = boost::system::system_error;
30 using error_category = boost::system::error_category;
31 #endif // defined(PACKIO_STANDALONE_ASIO)
33 #if defined(BOOST_ASIO_HAS_CO_AWAIT) || defined(ASIO_HAS_CO_AWAIT) \
34 || defined(PACKIO_DOCUMENTATION)
35 #define PACKIO_HAS_CO_AWAIT 1
38 #if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) || defined(ASIO_HAS_LOCAL_SOCKETS) \
39 || defined(PACKIO_DOCUMENTATION)
40 #define PACKIO_HAS_LOCAL_SOCKETS 1
43 #if defined(BOOST_ASIO_DEFAULT_COMPLETION_TOKEN)
44 #define PACKIO_DEFAULT_COMPLETION_TOKEN(e) \
45 BOOST_ASIO_DEFAULT_COMPLETION_TOKEN(e)
46 #elif defined(ASIO_DEFAULT_COMPLETION_TOKEN)
47 #define PACKIO_DEFAULT_COMPLETION_TOKEN(e) ASIO_DEFAULT_COMPLETION_TOKEN(e)
48 #elif defined(PACKIO_DOCUMENTATION)
49 #define PACKIO_DEFAULT_COMPLETION_TOKEN(e) \
50 = typename net::default_completion_token<e>::type()
52 #define PACKIO_DEFAULT_COMPLETION_TOKEN(e)
53 #endif // defined(BOOST_ASIO_DEFAULT_COMPLETION_TOKEN)
55 #if defined(BOOST_ASIO_DEFAULT_COMPLETION_TOKEN_TYPE)
56 #define PACKIO_DEFAULT_COMPLETION_TOKEN_TYPE(e) \
57 BOOST_ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(e)
58 #elif defined(ASIO_DEFAULT_COMPLETION_TOKEN_TYPE)
59 #define PACKIO_DEFAULT_COMPLETION_TOKEN_TYPE(e) \
60 ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(e)
61 #elif defined(PACKIO_DOCUMENTATION)
62 #define PACKIO_DEFAULT_COMPLETION_TOKEN(e) \
63 = typename net::default_completion_token<e>::type
65 #define PACKIO_DEFAULT_COMPLETION_TOKEN_TYPE(e)
66 #endif // defined(BOOST_ASIO_DEFAULT_COMPLETION_TOKEN_TYPE)
68 #if defined(BOOST_ASIO_COMPLETION_TOKEN_FOR)
69 #define PACKIO_COMPLETION_TOKEN_FOR(s) BOOST_ASIO_COMPLETION_TOKEN_FOR(s)
70 #elif defined(ASIO_COMPLETION_TOKEN_FOR)
71 #define PACKIO_COMPLETION_TOKEN_FOR(s) ASIO_COMPLETION_TOKEN_FOR(s)
73 #define PACKIO_COMPLETION_TOKEN_FOR(s) typename
74 #endif // defined (BOOST_ASIO_COMPLETION_TOKEN_FOR)
76 template <
typename... Args>
77 using default_map = std::unordered_map<Args...>;
78 using default_mutex = std::mutex;
82 #endif // PACKIO_CONFIG_H