1 //
2 // VarHolder.cpp
3 //
4 // Library: Foundation
5 // Package: Core
6 // Module:  VarHolder
7 //
8 // Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
9 // and Contributors.
10 //
11 // SPDX-License-Identifier:	BSL-1.0
12 //
13 
14 
15 #include "Poco/Dynamic/VarHolder.h"
16 #include "Poco/Dynamic/Var.h"
17 #include "Poco/JSONString.h"
18 
19 
20 namespace Poco {
21 namespace Dynamic {
22 
23 
VarHolder()24 VarHolder::VarHolder()
25 {
26 }
27 
28 
~VarHolder()29 VarHolder::~VarHolder()
30 {
31 }
32 
33 
34 namespace Impl {
35 
36 
escape(std::string & target,const std::string & source)37 void escape(std::string& target, const std::string& source)
38 {
39 	target = toJSON(source);
40 }
41 
42 
isJSONString(const Var & any)43 bool isJSONString(const Var& any)
44 {
45 	return any.type() == typeid(std::string) ||
46 		any.type() == typeid(char) ||
47 		any.type() == typeid(char*) ||
48 		any.type() == typeid(Poco::DateTime) ||
49 		any.type() == typeid(Poco::LocalDateTime) ||
50 		any.type() == typeid(Poco::Timestamp);
51 }
52 
53 
appendJSONString(std::string & val,const Var & any)54 void appendJSONString(std::string& val, const Var& any)
55 {
56 	std::string json;
57 	escape(json, any.convert<std::string>());
58 	val.append(json);
59 }
60 
61 
appendJSONKey(std::string & val,const Var & any)62 void appendJSONKey(std::string& val, const Var& any)
63 {
64 	return appendJSONString(val, any);
65 }
66 
67 
appendJSONValue(std::string & val,const Var & any)68 void appendJSONValue(std::string& val, const Var& any)
69 {
70 	if (any.isEmpty())
71 	{
72 		val.append("null");
73 	}
74 	else
75 	{
76 		bool isStr = isJSONString(any);
77 		if (isStr)
78 		{
79 			appendJSONString(val, any.convert<std::string>());
80 		}
81 		else
82 		{
83 			val.append(any.convert<std::string>());
84 		}
85 	}
86 }
87 
88 
89 } // namespace Impl
90 
91 
92 } } // namespace Poco::Dynamic
93