[Support] Allow JSON serialization of Optional<T> for supported T.
This is ported from r333881 to JSON's new home. llvm-svn: 336542
This commit is contained in:
parent
d93eaeb7c3
commit
7e4234fc97
|
@ -57,6 +57,7 @@ namespace json {
|
|||
class Array;
|
||||
class ObjectKey;
|
||||
class Value;
|
||||
template <typename T> Value toJSON(const llvm::Optional<T> &Opt);
|
||||
|
||||
/// An Object is a JSON object, which maps strings to heterogenous JSON values.
|
||||
/// It simulates DenseMap<ObjectKey, Value>. ObjectKey is a maybe-owned string.
|
||||
|
@ -579,6 +580,11 @@ bool fromJSON(const Value &E, std::map<std::string, T> &Out) {
|
|||
return false;
|
||||
}
|
||||
|
||||
// Allow serialization of Optional<T> for supported T.
|
||||
template <typename T> Value toJSON(const llvm::Optional<T> &Opt) {
|
||||
return Opt ? Value(*Opt) : Value(nullptr);
|
||||
}
|
||||
|
||||
/// Helper for mapping JSON objects onto protocol structs.
|
||||
///
|
||||
/// Example:
|
||||
|
|
|
@ -37,6 +37,8 @@ TEST(JSONTest, Constructors) {
|
|||
EXPECT_EQ(R"({"A":{"B":{}}})", s(Object{{"A", Object{{"B", Object{}}}}}));
|
||||
EXPECT_EQ(R"({"A":{"B":{"X":"Y"}}})",
|
||||
s(Object{{"A", Object{{"B", Object{{"X", "Y"}}}}}}));
|
||||
EXPECT_EQ("null", s(llvm::Optional<double>()));
|
||||
EXPECT_EQ("2.5", s(llvm::Optional<double>(2.5)));
|
||||
}
|
||||
|
||||
TEST(JSONTest, StringOwnership) {
|
||||
|
|
Loading…
Reference in New Issue