Commit 199a5bc8 authored by Murali Vilayannur's avatar Murali Vilayannur Committed by Facebook Github Bot

Expose an interface to expose a given settings' metadata info

Summary:
We don't have a way to get the metadata associated with a given setting name
from outside. This is useful to know the expected type associated with a
given setting name.

Reviewed By: alikhtarov

Differential Revision: D7721340

fbshipit-source-id: e9ad07dd03c172f6f2d4bde5164614ca987c4fd8
parent fc471c5e
......@@ -63,8 +63,7 @@ bool setFromString(
return true;
}
Optional<std::pair<std::string, std::string>> getAsString(
StringPiece settingName) {
Optional<SettingsInfo> getAsString(StringPiece settingName) {
auto mapPtr = detail::settingsMap().rlock();
auto it = mapPtr->find(settingName.str());
if (it == mapPtr->end()) {
......@@ -73,6 +72,15 @@ Optional<std::pair<std::string, std::string>> getAsString(
return it->second->getAsString();
}
Optional<SettingMetadata> getSettingsMeta(StringPiece settingName) {
auto mapPtr = detail::settingsMap().rlock();
auto it = mapPtr->find(settingName.str());
if (it == mapPtr->end()) {
return folly::none;
}
return it->second->meta();
}
bool resetToDefault(StringPiece settingName) {
auto mapPtr = detail::settingsMap().rlock();
auto it = mapPtr->find(settingName.str());
......
......@@ -167,10 +167,20 @@ bool setFromString(
folly::StringPiece reason);
/**
* @return If the setting exists, the current (to<string>(value),
* reason) pair. Empty Optional otherwise.
* Type that encapsulates the current pair of (to<string>(value), reason)
*/
folly::Optional<std::pair<std::string, std::string>> getAsString(
using SettingsInfo = std::pair<std::string, std::string>;
/**
* @return If the setting exists, the current setting information.
* Empty Optional otherwise.
*/
folly::Optional<SettingsInfo> getAsString(folly::StringPiece settingName);
/**
* @return If the setting exists, returns the current settings metadata.
* Empty Optional otherwise.
*/
folly::Optional<SettingMetadata> getSettingsMeta(
folly::StringPiece settingName);
/**
......
......@@ -59,6 +59,26 @@ TEST(Settings, basic) {
EXPECT_EQ(res->first, "200");
EXPECT_EQ(res->second, "remote_set");
{
auto meta = folly::settings::getSettingsMeta("follytest_public_flag_to_a");
EXPECT_TRUE(meta.hasValue());
const auto& md = meta.value();
EXPECT_EQ(md.project, "follytest");
EXPECT_EQ(md.name, "public_flag_to_a");
EXPECT_EQ(md.typeStr, "int");
EXPECT_EQ(md.typeId, typeid(int));
}
{
auto meta = folly::settings::getSettingsMeta("follytest_some_flag");
EXPECT_TRUE(meta.hasValue());
const auto& md = meta.value();
EXPECT_EQ(md.project, "follytest");
EXPECT_EQ(md.name, "some_flag");
EXPECT_EQ(md.typeStr, "std::string");
EXPECT_EQ(md.typeId, typeid(std::string));
}
res = folly::settings::getAsString("follytest_nonexisting");
EXPECT_FALSE(res.hasValue());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment