@@ -406,119 +406,38 @@ class QueryWrap final : public AsyncWrap {
406
406
QueryWrap<Traits>** callback_ptr_ = nullptr ;
407
407
};
408
408
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
522
441
} // namespace cares_wrap
523
442
} // namespace node
524
443
0 commit comments