Re-sync with internal repository
[hiphop-php.git] / third-party / mcrouter / src / mcrouter / routes / AllSyncRouteFactory.h
blob879506c2750cbef446b6e317bd045d413dcc6dd6
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 <folly/dynamic.h>
12 #include "mcrouter/lib/config/RouteHandleBuilder.h"
13 #include "mcrouter/lib/config/RouteHandleFactory.h"
14 #include "mcrouter/lib/routes/AllSyncRoute.h"
15 #include "mcrouter/lib/routes/NullRoute.h"
17 namespace facebook {
18 namespace memcache {
19 namespace mcrouter {
21 namespace detail {
23 template <class RouterInfo>
24 typename RouterInfo::RouteHandlePtr makeAllSyncRoute(
25 std::vector<typename RouterInfo::RouteHandlePtr> rh) {
26 if (rh.empty()) {
27 return createNullRoute<typename RouterInfo::RouteHandleIf>();
30 if (rh.size() == 1) {
31 return std::move(rh[0]);
34 return makeRouteHandle<typename RouterInfo::RouteHandleIf, AllSyncRoute>(
35 std::move(rh));
38 } // namespace detail
40 template <class RouterInfo>
41 typename RouterInfo::RouteHandlePtr makeAllSyncRoute(
42 RouteHandleFactory<typename RouterInfo::RouteHandleIf>& factory,
43 const folly::dynamic& json) {
44 std::vector<typename RouterInfo::RouteHandlePtr> children;
45 if (json.isObject()) {
46 if (auto jchildren = json.get_ptr("children")) {
47 children = factory.createList(*jchildren);
49 } else {
50 children = factory.createList(json);
52 return detail::makeAllSyncRoute<RouterInfo>(std::move(children));
54 } // namespace mcrouter
55 } // namespace memcache
56 } // namespace facebook