5 #ifndef __XDR_XDRPP_RPC_MSG_HH_INCLUDED__ 6 #define __XDR_XDRPP_RPC_MSG_HH_INCLUDED__ 1 12 enum auth_flavor : std::int32_t {
22 using case_type = std::int32_t;
23 static Constexpr
const bool is_enum =
true;
24 static Constexpr
const bool is_numeric =
false;
25 static const char *enum_name(::xdr::auth_flavor val) {
27 case ::xdr::AUTH_NONE:
31 case ::xdr::AUTH_SHORT:
35 case ::xdr::RPCSEC_GSS:
41 static const std::vector<int32_t> &enum_values() {
42 static const std::vector<int32_t> _xdr_enum_vec = {
59 template<
typename _flavor_T,
62 std::enable_if<std::is_constructible<auth_flavor, _flavor_T>::value
63 && std::is_constructible<xdr::opaque_vec<400>, _body_T>::value
67 : flavor(std::forward<_flavor_T>(_flavor)),
68 body(std::forward<_body_T>(_body)) {}
73 decltype(::xdr::opaque_auth::flavor),
74 &::xdr::opaque_auth::flavor>,
75 field_ptr<::xdr::opaque_auth,
76 decltype(::xdr::opaque_auth::body),
77 &::xdr::opaque_auth::body>> {
78 template<
typename Archive>
static void 79 save(Archive &ar, const ::xdr::opaque_auth &obj) {
80 archive(ar, obj.flavor,
"flavor");
81 archive(ar, obj.body,
"body");
83 template<
typename Archive>
static void 85 archive(ar, obj.flavor,
"flavor");
86 archive(ar, obj.body,
"body");
92 enum msg_type : std::int32_t {
99 using case_type = std::int32_t;
100 static Constexpr
const bool is_enum =
true;
101 static Constexpr
const bool is_numeric =
false;
102 static const char *enum_name(::xdr::msg_type val) {
112 static const std::vector<int32_t> &enum_values() {
113 static const std::vector<int32_t> _xdr_enum_vec = {
117 return _xdr_enum_vec;
122 enum reply_stat : std::int32_t {
129 using case_type = std::int32_t;
130 static Constexpr
const bool is_enum =
true;
131 static Constexpr
const bool is_numeric =
false;
132 static const char *enum_name(::xdr::reply_stat val) {
134 case ::xdr::MSG_ACCEPTED:
135 return "MSG_ACCEPTED";
136 case ::xdr::MSG_DENIED:
142 static const std::vector<int32_t> &enum_values() {
143 static const std::vector<int32_t> _xdr_enum_vec = {
147 return _xdr_enum_vec;
152 enum accept_stat : std::int32_t {
163 using case_type = std::int32_t;
164 static Constexpr
const bool is_enum =
true;
165 static Constexpr
const bool is_numeric =
false;
166 static const char *enum_name(::xdr::accept_stat val) {
170 case ::xdr::PROG_UNAVAIL:
171 return "PROG_UNAVAIL";
172 case ::xdr::PROG_MISMATCH:
173 return "PROG_MISMATCH";
174 case ::xdr::PROC_UNAVAIL:
175 return "PROC_UNAVAIL";
176 case ::xdr::GARBAGE_ARGS:
177 return "GARBAGE_ARGS";
178 case ::xdr::SYSTEM_ERR:
184 static const std::vector<int32_t> &enum_values() {
185 static const std::vector<int32_t> _xdr_enum_vec = {
188 ::xdr::PROG_MISMATCH,
193 return _xdr_enum_vec;
198 enum reject_stat : std::int32_t {
205 using case_type = std::int32_t;
206 static Constexpr
const bool is_enum =
true;
207 static Constexpr
const bool is_numeric =
false;
208 static const char *enum_name(::xdr::reject_stat val) {
210 case ::xdr::RPC_MISMATCH:
211 return "RPC_MISMATCH";
212 case ::xdr::AUTH_ERROR:
218 static const std::vector<int32_t> &enum_values() {
219 static const std::vector<int32_t> _xdr_enum_vec = {
223 return _xdr_enum_vec;
228 enum auth_stat : std::int32_t {
231 AUTH_REJECTEDCRED = 2,
233 AUTH_REJECTEDVERF = 4,
235 AUTH_INVALIDRESP = 6,
237 AUTH_KERB_GENERIC = 8,
242 RPCSEC_GSS_CREDPROBLEM = 13,
243 RPCSEC_GSS_CTXPROBLEM = 14,
248 using case_type = std::int32_t;
249 static Constexpr
const bool is_enum =
true;
250 static Constexpr
const bool is_numeric =
false;
251 static const char *enum_name(::xdr::auth_stat val) {
255 case ::xdr::AUTH_BADCRED:
256 return "AUTH_BADCRED";
257 case ::xdr::AUTH_REJECTEDCRED:
258 return "AUTH_REJECTEDCRED";
259 case ::xdr::AUTH_BADVERF:
260 return "AUTH_BADVERF";
261 case ::xdr::AUTH_REJECTEDVERF:
262 return "AUTH_REJECTEDVERF";
263 case ::xdr::AUTH_TOOWEAK:
264 return "AUTH_TOOWEAK";
265 case ::xdr::AUTH_INVALIDRESP:
266 return "AUTH_INVALIDRESP";
267 case ::xdr::AUTH_FAILED:
268 return "AUTH_FAILED";
269 case ::xdr::AUTH_KERB_GENERIC:
270 return "AUTH_KERB_GENERIC";
271 case ::xdr::AUTH_TIMEEXPIRE:
272 return "AUTH_TIMEEXPIRE";
273 case ::xdr::AUTH_TKT_FILE:
274 return "AUTH_TKT_FILE";
275 case ::xdr::AUTH_DECODE:
276 return "AUTH_DECODE";
277 case ::xdr::AUTH_NET_ADDR:
278 return "AUTH_NET_ADDR";
279 case ::xdr::RPCSEC_GSS_CREDPROBLEM:
280 return "RPCSEC_GSS_CREDPROBLEM";
281 case ::xdr::RPCSEC_GSS_CTXPROBLEM:
282 return "RPCSEC_GSS_CTXPROBLEM";
287 static const std::vector<int32_t> &enum_values() {
288 static const std::vector<int32_t> _xdr_enum_vec = {
291 ::xdr::AUTH_REJECTEDCRED,
293 ::xdr::AUTH_REJECTEDVERF,
295 ::xdr::AUTH_INVALIDRESP,
297 ::xdr::AUTH_KERB_GENERIC,
298 ::xdr::AUTH_TIMEEXPIRE,
299 ::xdr::AUTH_TKT_FILE,
301 ::xdr::AUTH_NET_ADDR,
302 ::xdr::RPCSEC_GSS_CREDPROBLEM,
303 ::xdr::RPCSEC_GSS_CTXPROBLEM
305 return _xdr_enum_vec;
311 std::uint32_t rpcvers{};
312 std::uint32_t prog{};
313 std::uint32_t vers{};
314 std::uint32_t proc{};
319 template<
typename _rpcvers_T,
326 std::enable_if<std::is_constructible<std::uint32_t, _rpcvers_T>::value
327 && std::is_constructible<std::uint32_t, _prog_T>::value
328 && std::is_constructible<std::uint32_t, _vers_T>::value
329 && std::is_constructible<std::uint32_t, _proc_T>::value
330 && std::is_constructible<opaque_auth, _cred_T>::value
331 && std::is_constructible<opaque_auth, _verf_T>::value
333 explicit call_body(_rpcvers_T &&_rpcvers,
339 : rpcvers(std::forward<_rpcvers_T>(_rpcvers)),
340 prog(std::forward<_prog_T>(_prog)),
341 vers(std::forward<_vers_T>(_vers)),
342 proc(std::forward<_proc_T>(_proc)),
343 cred(std::forward<_cred_T>(_cred)),
344 verf(std::forward<_verf_T>(_verf)) {}
349 decltype(::xdr::call_body::rpcvers),
350 &::xdr::call_body::rpcvers>,
351 field_ptr<::xdr::call_body,
352 decltype(::xdr::call_body::prog),
353 &::xdr::call_body::prog>,
354 field_ptr<::xdr::call_body,
355 decltype(::xdr::call_body::vers),
356 &::xdr::call_body::vers>,
357 field_ptr<::xdr::call_body,
358 decltype(::xdr::call_body::proc),
359 &::xdr::call_body::proc>,
360 field_ptr<::xdr::call_body,
361 decltype(::xdr::call_body::cred),
362 &::xdr::call_body::cred>,
363 field_ptr<::xdr::call_body,
364 decltype(::xdr::call_body::verf),
365 &::xdr::call_body::verf>> {
366 template<
typename Archive>
static void 367 save(Archive &ar, const ::xdr::call_body &obj) {
368 archive(ar, obj.rpcvers,
"rpcvers");
369 archive(ar, obj.prog,
"prog");
370 archive(ar, obj.vers,
"vers");
371 archive(ar, obj.proc,
"proc");
372 archive(ar, obj.cred,
"cred");
373 archive(ar, obj.verf,
"verf");
375 template<
typename Archive>
static void 377 archive(ar, obj.rpcvers,
"rpcvers");
378 archive(ar, obj.prog,
"prog");
379 archive(ar, obj.vers,
"vers");
380 archive(ar, obj.proc,
"proc");
381 archive(ar, obj.cred,
"cred");
382 archive(ar, obj.verf,
"verf");
392 std::uint32_t high{};
395 template<
typename _low_T,
398 std::enable_if<std::is_constructible<std::uint32_t, _low_T>::value
399 && std::is_constructible<std::uint32_t, _high_T>::value
403 : low(std::forward<_low_T>(_low)),
404 high(std::forward<_high_T>(_high)) {}
409 _xdr_case_type stat_;
416 static const std::vector<accept_stat> &_xdr_discriminant_values() {
417 static const std::vector<accept_stat> _xdr_disc_vec {};
418 return _xdr_disc_vec;
420 static Constexpr
int _xdr_field_number(_xdr_case_type which) {
421 return which == SUCCESS ? 1
422 : which == PROG_MISMATCH ? 2
425 template<
typename _F,
typename..._A>
static bool 426 _xdr_with_mem_ptr(_F &_f, _xdr_case_type _which, _A&&..._a) {
429 _f(&_reply_data_t::results_, std::forward<_A>(_a)...);
432 _f(&_reply_data_t::mismatch_info_, std::forward<_A>(_a)...);
439 _xdr_case_type _xdr_discriminant()
const {
return stat_; }
440 void _xdr_discriminant(_xdr_case_type which,
bool validate =
true) {
441 int fnum = _xdr_field_number(which);
444 if (fnum != _xdr_field_number(stat_)) {
452 explicit _reply_data_t(accept_stat which = accept_stat{}) : stat_(which) {
464 if (_xdr_field_number(stat_)
465 == _xdr_field_number(source.stat_))
469 stat_ = std::numeric_limits<_xdr_case_type>::max();
472 stat_ = source.stat_;
476 if (_xdr_field_number(stat_)
477 == _xdr_field_number(source.stat_))
482 stat_ = std::numeric_limits<_xdr_case_type>::max();
486 stat_ = source.stat_;
490 accept_stat stat()
const {
return accept_stat(stat_); }
491 _reply_data_t &stat(accept_stat _xdr_d,
bool _xdr_validate =
true) {
492 _xdr_discriminant(_xdr_d, _xdr_validate);
497 if (_xdr_field_number(stat_) == 1)
502 if (_xdr_field_number(stat_) == 1)
507 if (_xdr_field_number(stat_) == 2)
508 return mismatch_info_;
512 if (_xdr_field_number(stat_) == 2)
513 return mismatch_info_;
522 template<
typename _verf_T,
523 typename _reply_data_T,
525 std::enable_if<std::is_constructible<opaque_auth, _verf_T>::value
526 && std::is_constructible<_reply_data_t, _reply_data_T>::value
529 _reply_data_T &&_reply_data)
530 : verf(std::forward<_verf_T>(_verf)),
531 reply_data(std::forward<_reply_data_T>(_reply_data)) {}
535 :
xdr_struct_base<field_ptr<::xdr::accepted_reply::_reply_data_t::_mismatch_info_t,
536 decltype(::xdr::accepted_reply::_reply_data_t::_mismatch_info_t::low),
537 &::xdr::accepted_reply::_reply_data_t::_mismatch_info_t::low>,
538 field_ptr<::xdr::accepted_reply::_reply_data_t::_mismatch_info_t,
539 decltype(::xdr::accepted_reply::_reply_data_t::_mismatch_info_t::high),
540 &::xdr::accepted_reply::_reply_data_t::_mismatch_info_t::high>> {
541 template<
typename Archive>
static void 542 save(Archive &ar, const ::xdr::accepted_reply::_reply_data_t::_mismatch_info_t &obj) {
543 archive(ar, obj.low,
"low");
544 archive(ar, obj.high,
"high");
546 template<
typename Archive>
static void 548 archive(ar, obj.low,
"low");
549 archive(ar, obj.high,
"high");
554 static Constexpr
const bool is_class =
true;
555 static Constexpr
const bool is_union =
true;
559 using case_type = ::xdr::accepted_reply::_reply_data_t::_xdr_case_type;
560 using discriminant_type = decltype(std::declval<union_type>().stat());
562 static const char *union_field_name(case_type which) {
563 switch (union_type::_xdr_field_number(which)) {
567 return "mismatch_info";
571 static const char *union_field_name(
const union_type &u) {
572 return union_field_name(u._xdr_discriminant());
575 static std::size_t serial_size(const ::xdr::accepted_reply::_reply_data_t &obj) {
576 std::size_t size = 0;
577 if (!obj._xdr_with_mem_ptr(
field_size, obj._xdr_discriminant(), obj, size))
581 template<
typename Archive>
static void 582 save(Archive &ar, const ::xdr::accepted_reply::_reply_data_t &obj) {
585 union_field_name(obj)))
588 template<
typename Archive>
static void 590 discriminant_type which;
594 union_field_name(which));
600 decltype(::xdr::accepted_reply::verf),
601 &::xdr::accepted_reply::verf>,
602 field_ptr<::xdr::accepted_reply,
603 decltype(::xdr::accepted_reply::reply_data),
604 &::xdr::accepted_reply::reply_data>> {
605 template<
typename Archive>
static void 606 save(Archive &ar, const ::xdr::accepted_reply &obj) {
607 archive(ar, obj.verf,
"verf");
608 archive(ar, obj.reply_data,
"reply_data");
610 template<
typename Archive>
static void 612 archive(ar, obj.verf,
"verf");
613 archive(ar, obj.reply_data,
"reply_data");
622 std::uint32_t high{};
625 template<
typename _low_T,
628 std::enable_if<std::is_constructible<std::uint32_t, _low_T>::value
629 && std::is_constructible<std::uint32_t, _high_T>::value
633 : low(std::forward<_low_T>(_low)),
634 high(std::forward<_high_T>(_high)) {}
639 _xdr_case_type stat_;
646 static const std::vector<reject_stat> &_xdr_discriminant_values() {
647 static const std::vector<reject_stat> _xdr_disc_vec {
651 return _xdr_disc_vec;
653 static Constexpr
int _xdr_field_number(_xdr_case_type which) {
654 return which == RPC_MISMATCH ? 1
655 : which == AUTH_ERROR ? 2
658 template<
typename _F,
typename..._A>
static bool 659 _xdr_with_mem_ptr(_F &_f, _xdr_case_type _which, _A&&..._a) {
662 _f(&rejected_reply::mismatch_info_, std::forward<_A>(_a)...);
665 _f(&rejected_reply::rj_why_, std::forward<_A>(_a)...);
671 _xdr_case_type _xdr_discriminant()
const {
return stat_; }
672 void _xdr_discriminant(_xdr_case_type which,
bool validate =
true) {
673 int fnum = _xdr_field_number(which);
676 if (fnum != _xdr_field_number(stat_)) {
684 explicit rejected_reply(reject_stat which = reject_stat{}) : stat_(which) {
696 if (_xdr_field_number(stat_)
697 == _xdr_field_number(source.stat_))
701 stat_ = std::numeric_limits<_xdr_case_type>::max();
704 stat_ = source.stat_;
708 if (_xdr_field_number(stat_)
709 == _xdr_field_number(source.stat_))
714 stat_ = std::numeric_limits<_xdr_case_type>::max();
718 stat_ = source.stat_;
722 reject_stat stat()
const {
return reject_stat(stat_); }
723 rejected_reply &stat(reject_stat _xdr_d,
bool _xdr_validate =
true) {
724 _xdr_discriminant(_xdr_d, _xdr_validate);
729 if (_xdr_field_number(stat_) == 1)
730 return mismatch_info_;
734 if (_xdr_field_number(stat_) == 1)
735 return mismatch_info_;
738 auth_stat &rj_why() {
739 if (_xdr_field_number(stat_) == 2)
743 const auth_stat &rj_why()
const {
744 if (_xdr_field_number(stat_) == 2)
752 decltype(::xdr::rejected_reply::_mismatch_info_t::low),
753 &::xdr::rejected_reply::_mismatch_info_t::low>,
754 field_ptr<::xdr::rejected_reply::_mismatch_info_t,
755 decltype(::xdr::rejected_reply::_mismatch_info_t::high),
756 &::xdr::rejected_reply::_mismatch_info_t::high>> {
757 template<
typename Archive>
static void 758 save(Archive &ar, const ::xdr::rejected_reply::_mismatch_info_t &obj) {
759 archive(ar, obj.low,
"low");
760 archive(ar, obj.high,
"high");
762 template<
typename Archive>
static void 764 archive(ar, obj.low,
"low");
765 archive(ar, obj.high,
"high");
770 static Constexpr
const bool is_class =
true;
771 static Constexpr
const bool is_union =
true;
775 using case_type = ::xdr::rejected_reply::_xdr_case_type;
776 using discriminant_type = decltype(std::declval<union_type>().stat());
778 static const char *union_field_name(case_type which) {
779 switch (union_type::_xdr_field_number(which)) {
781 return "mismatch_info";
787 static const char *union_field_name(
const union_type &u) {
788 return union_field_name(u._xdr_discriminant());
791 static std::size_t serial_size(const ::xdr::rejected_reply &obj) {
792 std::size_t size = 0;
793 if (!obj._xdr_with_mem_ptr(
field_size, obj._xdr_discriminant(), obj, size))
797 template<
typename Archive>
static void 798 save(Archive &ar, const ::xdr::rejected_reply &obj) {
801 union_field_name(obj)))
804 template<
typename Archive>
static void 806 discriminant_type which;
810 union_field_name(which));
819 _xdr_case_type stat_;
826 static const std::vector<reply_stat> &_xdr_discriminant_values() {
827 static const std::vector<reply_stat> _xdr_disc_vec {
831 return _xdr_disc_vec;
833 static Constexpr
int _xdr_field_number(_xdr_case_type which) {
834 return which == MSG_ACCEPTED ? 1
835 : which == MSG_DENIED ? 2
838 template<
typename _F,
typename..._A>
static bool 839 _xdr_with_mem_ptr(_F &_f, _xdr_case_type _which, _A&&..._a) {
842 _f(&reply_body::areply_, std::forward<_A>(_a)...);
845 _f(&reply_body::rreply_, std::forward<_A>(_a)...);
851 _xdr_case_type _xdr_discriminant()
const {
return stat_; }
852 void _xdr_discriminant(_xdr_case_type which,
bool validate =
true) {
853 int fnum = _xdr_field_number(which);
856 if (fnum != _xdr_field_number(stat_)) {
864 explicit reply_body(reply_stat which = reply_stat{}) : stat_(which) {
876 if (_xdr_field_number(stat_)
877 == _xdr_field_number(source.stat_))
881 stat_ = std::numeric_limits<_xdr_case_type>::max();
884 stat_ = source.stat_;
888 if (_xdr_field_number(stat_)
889 == _xdr_field_number(source.stat_))
894 stat_ = std::numeric_limits<_xdr_case_type>::max();
898 stat_ = source.stat_;
902 reply_stat stat()
const {
return reply_stat(stat_); }
903 reply_body &stat(reply_stat _xdr_d,
bool _xdr_validate =
true) {
904 _xdr_discriminant(_xdr_d, _xdr_validate);
909 if (_xdr_field_number(stat_) == 1)
914 if (_xdr_field_number(stat_) == 1)
919 if (_xdr_field_number(stat_) == 2)
924 if (_xdr_field_number(stat_) == 2)
931 static Constexpr
const bool is_class =
true;
932 static Constexpr
const bool is_union =
true;
936 using case_type = ::xdr::reply_body::_xdr_case_type;
937 using discriminant_type = decltype(std::declval<union_type>().stat());
939 static const char *union_field_name(case_type which) {
940 switch (union_type::_xdr_field_number(which)) {
948 static const char *union_field_name(
const union_type &u) {
949 return union_field_name(u._xdr_discriminant());
952 static std::size_t serial_size(const ::xdr::reply_body &obj) {
953 std::size_t size = 0;
954 if (!obj._xdr_with_mem_ptr(
field_size, obj._xdr_discriminant(), obj, size))
958 template<
typename Archive>
static void 959 save(Archive &ar, const ::xdr::reply_body &obj) {
962 union_field_name(obj)))
965 template<
typename Archive>
static void 967 discriminant_type which;
971 union_field_name(which));
981 _xdr_case_type mtype_;
988 static const std::vector<msg_type> &_xdr_discriminant_values() {
989 static const std::vector<msg_type> _xdr_disc_vec {
993 return _xdr_disc_vec;
995 static Constexpr
int _xdr_field_number(_xdr_case_type which) {
996 return which == CALL ? 1
1000 template<
typename _F,
typename..._A>
static bool 1001 _xdr_with_mem_ptr(_F &_f, _xdr_case_type _which, _A&&..._a) {
1004 _f(&_body_t::cbody_, std::forward<_A>(_a)...);
1007 _f(&_body_t::rbody_, std::forward<_A>(_a)...);
1013 _xdr_case_type _xdr_discriminant()
const {
return mtype_; }
1014 void _xdr_discriminant(_xdr_case_type which,
bool validate =
true) {
1015 int fnum = _xdr_field_number(which);
1018 if (fnum != _xdr_field_number(mtype_)) {
1026 explicit _body_t(msg_type which = msg_type{}) : mtype_(which) {
1038 if (_xdr_field_number(mtype_)
1039 == _xdr_field_number(source.mtype_))
1043 mtype_ = std::numeric_limits<_xdr_case_type>::max();
1046 mtype_ = source.mtype_;
1050 if (_xdr_field_number(mtype_)
1051 == _xdr_field_number(source.mtype_))
1056 mtype_ = std::numeric_limits<_xdr_case_type>::max();
1060 mtype_ = source.mtype_;
1064 msg_type mtype()
const {
return msg_type(mtype_); }
1065 _body_t &mtype(msg_type _xdr_d,
bool _xdr_validate =
true) {
1066 _xdr_discriminant(_xdr_d, _xdr_validate);
1071 if (_xdr_field_number(mtype_) == 1)
1076 if (_xdr_field_number(mtype_) == 1)
1081 if (_xdr_field_number(mtype_) == 2)
1086 if (_xdr_field_number(mtype_) == 2)
1092 std::uint32_t xid{};
1096 template<
typename _xid_T,
1099 std::enable_if<std::is_constructible<std::uint32_t, _xid_T>::value
1100 && std::is_constructible<_body_t, _body_T>::value
1102 explicit rpc_msg(_xid_T &&_xid,
1104 : xid(std::forward<_xid_T>(_xid)),
1105 body(std::forward<_body_T>(_body)) {}
1109 static Constexpr
const bool is_class =
true;
1110 static Constexpr
const bool is_union =
true;
1114 using case_type = ::xdr::rpc_msg::_body_t::_xdr_case_type;
1115 using discriminant_type = decltype(std::declval<union_type>().mtype());
1117 static const char *union_field_name(case_type which) {
1118 switch (union_type::_xdr_field_number(which)) {
1126 static const char *union_field_name(
const union_type &u) {
1127 return union_field_name(u._xdr_discriminant());
1130 static std::size_t serial_size(const ::xdr::rpc_msg::_body_t &obj) {
1131 std::size_t size = 0;
1132 if (!obj._xdr_with_mem_ptr(
field_size, obj._xdr_discriminant(), obj, size))
1136 template<
typename Archive>
static void 1137 save(Archive &ar, const ::xdr::rpc_msg::_body_t &obj) {
1140 union_field_name(obj)))
1143 template<
typename Archive>
static void 1145 discriminant_type which;
1149 union_field_name(which));
1155 decltype(::xdr::rpc_msg::xid),
1156 &::xdr::rpc_msg::xid>,
1157 field_ptr<::xdr::rpc_msg,
1158 decltype(::xdr::rpc_msg::body),
1159 &::xdr::rpc_msg::body>> {
1160 template<
typename Archive>
static void 1161 save(Archive &ar, const ::xdr::rpc_msg &obj) {
1162 archive(ar, obj.xid,
"xid");
1163 archive(ar, obj.body,
"body");
1165 template<
typename Archive>
static void 1167 archive(ar, obj.xid,
"xid");
1168 archive(ar, obj.body,
"body");
1176 #endif // !__XDR_XDRPP_RPC_MSG_HH_INCLUDED__ Constexpr const field_constructor_t field_constructor
Passed to the auto-generated _xdr_with_mem_ptr static method to construct the active union field (or ...
Type definitions for xdrc compiler output.
static Constexpr const bool is_class
T is an XDR struct or union.
Constexpr const field_size_t field_size
Passed to _xdr_with_mem_ptr to compute the size of the active union field.
Attempt to access wrong field of a union.
Constexpr const field_destructor_t field_destructor
Passed to _xdr_with_mem_ptr to destroy the active union field.
Most of the xdrpp library is encapsulated in the xdr namespace.
static Constexpr const bool is_union
T is an XDR union.
Constexpr const field_assigner_t field_assigner
Passed to _xdr_with_mem_ptr to assign to the active union field.
Default traits for use as supertype of specializations of xdr_traits for integral types...
static Constexpr const bool is_enum
T is an XDR enum or bool (traits have enum_name).
Attempt to set invalid value for a union discriminant.
Default xdr_traits values for actual XDR types, used as a supertype for most xdr::xdr_traits speciali...
void archive(Archive &ar, T &&t, const char *name=nullptr)
By default, this function simply applies ar (which must be a function object) to t.
Metadata for all marshalable XDR types.
void validate(const T &t)
If this function template is specialized, it provides a means of placing extra restrictions on XDR da...
static Constexpr const bool is_numeric
T is one of [u]int{32,64}_t, float, or double.
static Constexpr const bool has_fixed_size
T has a fixed size.
Constexpr const field_archiver_t field_archiver
Passed to _xdr_with_mem_ptr to archive the active union field.