MojErr MojService::CategoryHandler::addMethod(const MojChar* methodName, Callback callback, bool pub, const MojChar* schemaJson) { MojAssert(methodName && callback); MojString str; MojErr err = str.assign(methodName); MojErrCheck(err); MojRefCountedPtr<MojSchema> schema; if (schemaJson) { MojObject schemaObj; err = schemaObj.fromJson(schemaJson); MojErrCheck(err); // add implicit $activity property MojObject properties; schemaObj.get(MojSchema::PropertiesKey, properties); MojObject activityProp; err = activityProp.putBool(MojSchema::OptionalKey, true); MojErrCheck(err); err = properties.put(_T("$activity"), activityProp); MojErrCheck(err); err = schemaObj.put(MojSchema::PropertiesKey, properties); MojErrCheck(err); schema.reset(new MojSchema); MojAllocCheck(schema.get()); err = schema->fromObject(schemaObj); MojErrCheck(err); } MojAssert(!m_callbackMap.contains(str)); err = m_callbackMap.put(str, CallbackInfo(callback, schema.get(), pub)); MojErrCheck(err); return MojErrNone; }
MojErr MojDbIndex::createExtractor(const MojObject& propObj, MojRefCountedPtr<MojDbExtractor>& extractorOut) { LOG_TRACE("Entering function %s", __FUNCTION__); MojAssert(!isOpen()); // type MojString type; bool found = false; MojErr err = propObj.get(TypeKey, type, found); MojErrCheck(err); if (found && type == MultiKey) { extractorOut.reset(new MojDbMultiExtractor); MojAllocCheck(extractorOut.get()); } else { extractorOut.reset(new MojDbPropExtractor); MojAllocCheck(extractorOut.get()); } err = extractorOut->fromObject(propObj, m_locale); MojErrCheck(err); return MojErrNone; }