@@ -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