6#ifndef _ZFI_ZFSerializableUtil_h_
7#define _ZFI_ZFSerializableUtil_h_
17#define ZFSerializableUtilErrorOccurredAt(outErrorHint, outErrorPos, errorPos, fmt, ...) \
18 ZFSerializableUtil::_ZFP_errorOccurredAt(outErrorHint, outErrorPos, errorPos, zfstr(fmt, ##__VA_ARGS__))
22#define ZFSerializableUtilErrorOccurred(outErrorHint, fmt, ...) \
23 ZFSerializableUtil::_ZFP_errorOccurred(outErrorHint, zfstr(fmt, ##__VA_ARGS__))
185#define _ZFP_ZFSerializableUtilSerializeFromData_check(outErrorHint, outErrorPos)
186#define _ZFP_ZFSerializableUtilSerializeFromData_require(outErrorHint, outErrorPos) , outErrorHint, outErrorPos
187#define _ZFP_ZFSerializableUtilSerializeFromData_(check_or_require, outErrorHint, outErrorPos) \
188 _ZFP_ZFSerializableUtilSerializeFromData_##check_or_require(outErrorHint, outErrorPos)
189#define _ZFP_ZFSerializableUtilSerializeFromData(check_or_require, outErrorHint, outErrorPos) \
190 _ZFP_ZFSerializableUtilSerializeFromData_(check_or_require, outErrorHint, outErrorPos)
193#define ZFSerializableUtilSerializeAttrFromData(serializableData, outErrorHint, outErrorPos, \
194 check_or_require, key, TypeName, value, failAction) \
196 zfstring valueString = ZFSerializableUtil::check_or_require##Attr(serializableData, key \
197 _ZFP_ZFSerializableUtilSerializeFromData(check_or_require, outErrorHint, outErrorPos)); \
198 if(valueString != zfnull) { \
199 if(!TypeName##FromStringT(value, valueString)) { \
200 ZFSerializableUtilErrorOccurredAt(outErrorHint, outErrorPos, serializableData, \
201 "failed to convert from \"%s\"", valueString); \
207#define ZFSerializableUtilSerializeAttrToData(serializableData, outErrorHint, ref, \
208 key, TypeName, thisValue, refData, defaultValue, failAction) \
210 if((ref == zfnull && ZFComparerDefault(thisValue, defaultValue) != ZFCompareEqual) \
211 || (ref != zfnull && ZFComparerDefault(thisValue, refData) != ZFCompareEqual) \
213 zfstring valueString; \
214 if(!TypeName##ToStringT(valueString, thisValue)) { \
215 ZFSerializableUtilErrorOccurred(outErrorHint, \
216 "failed to convert %s to string", key); \
220 serializableData.attr(key, valueString); \
225#define ZFSerializableUtilSerializeAttrToDataNoRef(serializableData, outErrorHint, \
226 key, TypeName, thisValue, defaultValue, failAction) \
228 if(ZFComparerDefault(thisValue, defaultValue) != ZFCompareEqual) { \
229 zfstring valueString; \
230 if(!TypeName##ToStringT(valueString, thisValue)) { \
231 ZFSerializableUtilErrorOccurred(outErrorHint, \
232 "failed to convert %s to string", key); \
236 serializableData.attr(key, valueString); \
243#define ZFSerializableUtilSerializeCategoryFromData(serializableData, outErrorHint, outErrorPos, \
244 check_or_require, key, TypeName, value, failAction) \
246 ZFSerializableData valueData = ZFSerializableUtil::check_or_require##ElementByCategory(serializableData, key \
247 _ZFP_ZFSerializableUtilSerializeFromData(check_or_require, outErrorHint, outErrorPos)); \
248 if(valueData != zfnull) { \
249 if(!TypeName##FromDataT(value, valueData, outErrorHint, outErrorPos)) { \
255#define ZFSerializableUtilSerializeCategoryToData(serializableData, outErrorHint, ref, \
256 key, TypeName, thisValue, refData, defaultValue, failAction) \
258 if((ref == zfnull && ZFComparerDefault(thisValue, defaultValue) != ZFCompareEqual) \
259 || (ref != zfnull && ZFComparerDefault(thisValue, refData) != ZFCompareEqual) \
261 ZFSerializableData categoryData; \
262 if(!TypeName##ToDataT(categoryData, thisValue, outErrorHint)) { \
266 categoryData.category(key); \
267 serializableData.child(categoryData); \
272#define ZFSerializableUtilSerializeCategoryToDataNoRef(serializableData, outErrorHint, \
273 key, TypeName, thisValue, defaultValue, failAction) \
275 if(ZFComparerDefault(thisValue, defaultValue) != ZFCompareEqual) { \
276 ZFSerializableData categoryData; \
277 if(!TypeName##ToDataT(categoryData, thisValue, outErrorHint)) { \
281 categoryData.category(key); \
282 serializableData.child(categoryData); \
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
#define ZF_OUT_OPT
dummy macro that shows the param used as optional output
Definition ZFCoreTypeDef_ClassType.h:192
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:180
#define ZF_IN_OPT
dummy macro that shows the param used as optional input
Definition ZFCoreTypeDef_ClassType.h:184
_ZFT_t_zfbool zfbool
bool type
Definition ZFCoreTypeDef_CoreType.h:103
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
zft_zfstring< zfchar > zfstring
see zft_zfstring
Definition ZFCoreTypeDef_StringType.h:15
#define ZF_NAMESPACE_BEGIN_REGISTER(NameSpace, ParentNameSpace)
begin and register namespace
Definition ZFNamespace.h:48
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_END(NameSpace)
end namespace
Definition ZFNamespace.h:60
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
#define ZF_NAMESPACE_GLOBAL
namespace of ZFFramework
Definition ZFNamespace.h:96
default callback for output
const ZFOutput & ZFOutputDefault(void)
default output callback, output source must be zfchar *string
#define ZFSerializableKeyword_value
keyword for ZFSerializable to hold attribute or property's value, see ZFSerializableData::propertyVal...
Definition ZFSerializableData.h:48
#define ZFSerializableKeyword_prop
keyword for ZFSerializable to hold attribute or property's name, see ZFSerializableData::propertyName
Definition ZFSerializableData.h:43
#define ZFSerializableKeyword_category
keyword for ZFSerializable's to hold category, see ZFSerializableData::category
Definition ZFSerializableData.h:53
general output callback
Definition ZFIOCallback_output.h:37
ZFSerializable's data container, see ZFSerializable.
Definition ZFSerializableData.h:74
Definition ZFSerializableUtil.h:12
zfstring checkPropertyValue(const ZFSerializableData &serializableData)
util to check whether the serializable data contains property value attribute, auto mark as resolved
Definition ZFSerializableUtil.h:138
ZFSerializableData requireElementByCategory(const ZFSerializableData &serializableData, const zfstring &desiredElementCategory, zfstring *outErrorHint=zft_zfnull, ZFSerializableData *outErrorPos=zft_zfnull)
see checkElementByCategory, output error hint if failed, auto mark category as resolved
zfstring checkPropertyName(const ZFSerializableData &serializableData)
util to check whether the serializable data contains property name attribute, auto mark as resolved
Definition ZFSerializableUtil.h:119
zfstring requireItemClass(const ZFSerializableData &serializableData, const zfstring &desiredClass, zfstring *outErrorHint=zft_zfnull, ZFSerializableData *outErrorPos=zft_zfnull)
see checkItemClass, output error hint if failed
zfstring checkAttr(const ZFSerializableData &serializableData, const zfstring &desiredAttr)
util to check whether the serializable data contains desired attribute, auto mark as resolved
ZFSerializableData checkElementByCategory(const ZFSerializableData &serializableData, const zfstring &desiredElementCategory)
util to check whether the serializable data contains desired element, auto mark category as resolved
zfstring checkItemClass(const ZFSerializableData &serializableData, const zfstring &desiredClass)
util to check whether the serializable data contains desired attribute
zfbool printResolveStatus(const ZFSerializableData &serializableData, const ZFOutput &outputCallback=ZFOutputDefault())
util method to print resolve status of ZFSerializableData, for debug use only, output nothing if all ...
zfstring requireAttr(const ZFSerializableData &serializableData, const zfstring &desiredAttr, zfstring *outErrorHint=zft_zfnull, ZFSerializableData *outErrorPos=zft_zfnull)
see checkAttr, output error hint if failed, auto mark as resolved
zfstring requireCategory(const ZFSerializableData &serializableData, zfstring *outErrorHint=zft_zfnull, ZFSerializableData *outErrorPos=zft_zfnull)
see checkCategory, output error hint if failed, auto mark as resolved
Definition ZFSerializableUtil.h:164
zfstring requirePropertyName(const ZFSerializableData &serializableData, zfstring *outErrorHint=zft_zfnull, ZFSerializableData *outErrorPos=zft_zfnull)
see checkPropertyName, output error hint if failed, auto mark as resolved
Definition ZFSerializableUtil.h:126
ZFSerializableData requireElementByName(const ZFSerializableData &serializableData, const zfstring &desiredElementName, zfstring *outErrorHint=zft_zfnull, ZFSerializableData *outErrorPos=zft_zfnull)
see checkElementByName, output error hint if failed, auto mark name as resolved
zfstring requirePropertyValue(const ZFSerializableData &serializableData, zfstring *outErrorHint=zft_zfnull, ZFSerializableData *outErrorPos=zft_zfnull)
see checkPropertyValue, output error hint if failed, auto mark as resolved
Definition ZFSerializableUtil.h:145
ZFSerializableData checkElementByName(const ZFSerializableData &serializableData, const zfstring &desiredElementName)
util to check whether the serializable data contains desired element, auto mark name as resolved
zfstring checkCategory(const ZFSerializableData &serializableData)
util to check whether the serializable data contains category, auto mark as resolved
Definition ZFSerializableUtil.h:157