@@ -406,119 +406,38 @@ class QueryWrap final : public AsyncWrap {
406406 QueryWrap<Traits>** callback_ptr_ = nullptr ;
407407};
408408
409- struct AnyTraits final {
410- static constexpr const char * name = " resolveAny" ;
411- static int Send (QueryWrap<AnyTraits>* wrap, const char * name);
412- static v8::Maybe<int > Parse (QueryWrap<AnyTraits>* wrap,
413- const std::unique_ptr<ResponseData>& response);
414- };
415-
416- struct ATraits final {
417- static constexpr const char * name = " resolve4" ;
418- static int Send (QueryWrap<ATraits>* wrap, const char * name);
419- static v8::Maybe<int > Parse (QueryWrap<ATraits>* wrap,
420- const std::unique_ptr<ResponseData>& response);
421- };
422-
423- struct AaaaTraits final {
424- static constexpr const char * name = " resolve6" ;
425- static int Send (QueryWrap<AaaaTraits>* wrap, const char * name);
426- static v8::Maybe<int > Parse (QueryWrap<AaaaTraits>* wrap,
427- const std::unique_ptr<ResponseData>& response);
428- };
429-
430- struct CaaTraits final {
431- static constexpr const char * name = " resolveCaa" ;
432- static int Send (QueryWrap<CaaTraits>* wrap, const char * name);
433- static v8::Maybe<int > Parse (QueryWrap<CaaTraits>* wrap,
434- const std::unique_ptr<ResponseData>& response);
435- };
436-
437- struct CnameTraits final {
438- static constexpr const char * name = " resolveCname" ;
439- static int Send (QueryWrap<CnameTraits>* wrap, const char * name);
440- static v8::Maybe<int > Parse (QueryWrap<CnameTraits>* wrap,
441- const std::unique_ptr<ResponseData>& response);
442- };
443-
444- struct MxTraits final {
445- static constexpr const char * name = " resolveMx" ;
446- static int Send (QueryWrap<MxTraits>* wrap, const char * name);
447- static v8::Maybe<int > Parse (QueryWrap<MxTraits>* wrap,
448- const std::unique_ptr<ResponseData>& response);
449- };
450-
451- struct NsTraits final {
452- static constexpr const char * name = " resolveNs" ;
453- static int Send (QueryWrap<NsTraits>* wrap, const char * name);
454- static v8::Maybe<int > Parse (QueryWrap<NsTraits>* wrap,
455- const std::unique_ptr<ResponseData>& response);
456- };
457-
458- struct TlsaTraits final {
459- static constexpr const char * name = " resolveTlsa" ;
460- static int Send (QueryWrap<TlsaTraits>* wrap, const char * name);
461- static v8::Maybe<int > Parse (QueryWrap<TlsaTraits>* wrap,
462- const std::unique_ptr<ResponseData>& response);
463- };
464-
465- struct TxtTraits final {
466- static constexpr const char * name = " resolveTxt" ;
467- static int Send (QueryWrap<TxtTraits>* wrap, const char * name);
468- static v8::Maybe<int > Parse (QueryWrap<TxtTraits>* wrap,
469- const std::unique_ptr<ResponseData>& response);
470- };
471-
472- struct SrvTraits final {
473- static constexpr const char * name = " resolveSrv" ;
474- static int Send (QueryWrap<SrvTraits>* wrap, const char * name);
475- static v8::Maybe<int > Parse (QueryWrap<SrvTraits>* wrap,
476- const std::unique_ptr<ResponseData>& response);
477- };
478-
479- struct PtrTraits final {
480- static constexpr const char * name = " resolvePtr" ;
481- static int Send (QueryWrap<PtrTraits>* wrap, const char * name);
482- static v8::Maybe<int > Parse (QueryWrap<PtrTraits>* wrap,
483- const std::unique_ptr<ResponseData>& response);
484- };
485-
486- struct NaptrTraits final {
487- static constexpr const char * name = " resolveNaptr" ;
488- static int Send (QueryWrap<NaptrTraits>* wrap, const char * name);
489- static v8::Maybe<int > Parse (QueryWrap<NaptrTraits>* wrap,
490- const std::unique_ptr<ResponseData>& response);
491- };
492-
493- struct SoaTraits final {
494- static constexpr const char * name = " resolveSoa" ;
495- static int Send (QueryWrap<SoaTraits>* wrap, const char * name);
496- static v8::Maybe<int > Parse (QueryWrap<SoaTraits>* wrap,
497- const std::unique_ptr<ResponseData>& response);
498- };
499-
500- struct ReverseTraits final {
501- static constexpr const char * name = " reverse" ;
502- static int Send (QueryWrap<ReverseTraits>* wrap, const char * name);
503- static v8::Maybe<int > Parse (QueryWrap<ReverseTraits>* wrap,
504- const std::unique_ptr<ResponseData>& response);
505- };
506-
507- using QueryAnyWrap = QueryWrap<AnyTraits>;
508- using QueryAWrap = QueryWrap<ATraits>;
509- using QueryAaaaWrap = QueryWrap<AaaaTraits>;
510- using QueryCaaWrap = QueryWrap<CaaTraits>;
511- using QueryCnameWrap = QueryWrap<CnameTraits>;
512- using QueryMxWrap = QueryWrap<MxTraits>;
513- using QueryNsWrap = QueryWrap<NsTraits>;
514- using QueryTlsaWrap = QueryWrap<TlsaTraits>;
515- using QueryTxtWrap = QueryWrap<TxtTraits>;
516- using QuerySrvWrap = QueryWrap<SrvTraits>;
517- using QueryPtrWrap = QueryWrap<PtrTraits>;
518- using QueryNaptrWrap = QueryWrap<NaptrTraits>;
519- using QuerySoaWrap = QueryWrap<SoaTraits>;
520- using GetHostByAddrWrap = QueryWrap<ReverseTraits>;
521-
409+ #define QUERY_TYPES (V ) \
410+ V (Reverse, reverse, getHostByAddr) \
411+ V (A, resolve4, queryA) \
412+ V (Any, resolveAny, queryAny) \
413+ V (Aaaa, resolve6, queryAaaa) \
414+ V (Caa, resolveCaa, queryCaa) \
415+ V (Cname, resolveCname, queryCname) \
416+ V (Mx, resolveMx, queryMx) \
417+ V (Naptr, resolveNaptr, queryNaptr) \
418+ V (Ns, resolveNs, queryNs) \
419+ V (Ptr, resolvePtr, queryPtr) \
420+ V (Srv, resolveSrv, querySrv) \
421+ V (Soa, resolveSoa, querySoa) \
422+ V (Tlsa, resolveTlsa, queryTlsa) \
423+ V (Txt, resolveTxt, queryTxt)
424+
425+ // All query type handlers share the same basic structure, so we can simplify
426+ // the code a bit by using a macro to define that structure.
427+ #define TYPE_TRAITS (Name, label ) \
428+ struct Name ##Traits final { \
429+ static constexpr const char * name = #label; \
430+ static int Send (QueryWrap<Name##Traits>* wrap, const char * name); \
431+ static v8::Maybe<int > Parse ( \
432+ QueryWrap<Name##Traits>* wrap, \
433+ const std::unique_ptr<ResponseData>& response); \
434+ }; \
435+ using Query##Name##Wrap = QueryWrap<Name##Traits>;
436+
437+ #define V (NAME, LABEL, _ ) TYPE_TRAITS(NAME, LABEL)
438+ QUERY_TYPES (V)
439+ #undef V
440+ #undef TYPE_TRAITS
522441} // namespace cares_wrap
523442} // namespace node
524443
0 commit comments