Re-sync with internal repository
[hiphop-php.git] / third-party / mcrouter / src / mcrouter / lib / routes / NullRoute.h
blob18946f5df01b4f1f1c645ec2613b988156e72ced
1 /*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
8 #pragma once
10 #include <memory>
11 #include <string>
12 #include <vector>
14 #include "mcrouter/lib/Reply.h"
15 #include "mcrouter/lib/RouteHandleTraverser.h"
16 #include "mcrouter/lib/config/RouteHandleBuilder.h"
18 namespace folly {
19 struct dynamic;
22 namespace facebook {
23 namespace memcache {
25 template <class RouteHandleIf>
26 class RouteHandleFactory;
28 /**
29 * Returns the default reply for each request right away
31 template <class RouteHandleIf>
32 struct NullRoute {
33 static std::string routeName() {
34 return "null";
37 template <class Request>
38 bool traverse(const Request&, const RouteHandleTraverser<RouteHandleIf>&)
39 const {
40 return false;
43 template <class Request>
44 static ReplyT<Request> route(const Request& req) {
45 return createReply(DefaultReply, req);
49 namespace mcrouter {
51 template <class RouteHandleIf>
52 std::shared_ptr<RouteHandleIf> createNullRoute() {
53 return makeRouteHandle<RouteHandleIf, NullRoute>();
56 template <class RouteHandleIf>
57 std::shared_ptr<RouteHandleIf> makeNullRoute(
58 RouteHandleFactory<RouteHandleIf>&,
59 const folly::dynamic&) {
60 return createNullRoute<RouteHandleIf>();
63 template <class RouteHandleIf>
64 std::shared_ptr<RouteHandleIf> makeNullOrSingletonRoute(
65 std::vector<std::shared_ptr<RouteHandleIf>> rh) {
66 assert(rh.size() <= 1);
67 if (rh.empty()) {
68 return createNullRoute<RouteHandleIf>();
70 return std::move(rh[0]);
73 } // namespace mcrouter
74 } // namespace memcache
75 } // namespace facebook