ZFPROPERTY_TYPE_DECLARE_SERIALIZE_TO_DEFINE(ZFCallback, ZFCallback) { if(v.callbackSerializeCustomType() != zfnull) { if(v.callbackSerializeCustomData() == zfnull) { ZFSerializableUtil::errorOccurred(outErrorHintToAppend, zfText("missing callback serialize custom data")); return zffalse; } serializableData.itemClassSet(ZFPropertyTypeId_ZFCallback); serializableData.attributeSet(ZFSerializableKeyword_ZFCallback_callbackType, v.callbackSerializeCustomType()); ZFSerializableData customData = v.callbackSerializeCustomData()->copy(); customData.categorySet(ZFSerializableKeyword_ZFCallback_callbackData); serializableData.elementAdd(customData); return zftrue; } switch(v.callbackType()) { case ZFCallbackTypeDummy: serializableData.itemClassSet(ZFSerializableKeyword_null); break; case ZFCallbackTypeMethod: { serializableData.itemClassSet(ZFPropertyTypeId_ZFCallback); ZFSerializableData methodData; if(!ZFMethodToSerializableData(methodData, v.callbackMethod(), outErrorHintToAppend)) { return zffalse; } methodData.categorySet(ZFSerializableKeyword_ZFCallback_method); serializableData.elementAdd(methodData); } break; case ZFCallbackTypeMemberMethod: { ZFSerializableUtil::errorOccurred(outErrorHintToAppend, zfText("member method callback is not supported")); return zffalse; } break; case ZFCallbackTypeRawFunction: serializableData.itemClassSet(ZFPropertyTypeId_ZFCallback); ZFSerializableUtil::errorOccurred(outErrorHintToAppend, zfText("raw function is not supported")); return zffalse; default: zfCoreCriticalShouldNotGoHere(); return zffalse; } return zftrue; }
zfbool ZFEnum::serializableOnSerializeCategoryToData(ZF_IN_OUT ZFSerializableData &ownerData, ZF_IN ZFSerializable *referencedOwnerOrNull, ZF_OUT_OPT zfstring *outErrorHintToAppend /* = zfnull */) { if(!zfsuperI(ZFSerializable)::serializableOnSerializeCategoryToData(ownerData, referencedOwnerOrNull, outErrorHintToAppend)) {return zffalse;} zfself *ref = ZFCastZFObject(zfself *, referencedOwnerOrNull); { // enum ZFSerializableData categoryData; categoryData.itemClassSet(ZFSerializableKeyword_node); categoryData.categorySet(ZFSerializableKeyword_ZFEnum_enum); categoryData.propertyValueSet(this->enumName()); zfbool needAdd = zftrue; if(ref != zfnull) { if(ref->enumValue() == this->enumValue()) { needAdd = zffalse; } } if(needAdd) { const ZFSerializableData *refInfo = this->serializableRefInfoGetForCategory(ZFSerializableKeyword_ZFEnum_enum); if(refInfo != zfnull) { ZFSerializableData tmpData; if(!refInfo->referenceLoadTo(tmpData, outErrorHintToAppend)) { return zffalse; } ZFSerializableUtil::resolveReferencedData(categoryData, *refInfo); } else if(this->enumValue() == ZFEnumValueInvalid) { needAdd = zffalse; } } if(needAdd) { ownerData.elementAdd(categoryData); } } return zftrue; }