/** * Copyright (c) 2015-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include #include #include #include #include namespace facebook { namespace react { inline void fromDynamic(const folly::dynamic &value, bool &result) { result = value.getBool(); } inline void fromDynamic(const folly::dynamic &value, int &result) { result = value.getInt(); } inline void fromDynamic(const folly::dynamic &value, std::string &result) { result = value.getString(); } template inline T convertRawProp( const RawProps &rawProps, const std::string &name, const T &sourceValue, const T &defaultValue = T() ) { auto &&iterator = rawProps.find(name); if (iterator == rawProps.end()) { return sourceValue; } auto &&value = iterator->second; // Special case: `null` always means `the prop was removed, use default value`. if (value.isNull()) { return defaultValue; } T result; fromDynamic(value, result); return result; } template inline static folly::Optional convertRawProp( const RawProps &rawProps, const std::string &name, const folly::Optional &sourceValue, const folly::Optional &defaultValue = {} ) { auto &&iterator = rawProps.find(name); if (iterator == rawProps.end()) { return sourceValue; } auto &&value = iterator->second; // Special case: `null` always means `the prop was removed, use default value`. if (value.isNull()) { return defaultValue; } T result; fromDynamic(value, result); return result; } } // namespace react } // namespace facebook