in src/nodejs/NodeJsHelper.cpp [230:397]
HRESULT InspectableToLocalValue(
v8::Isolate* isolate,
foundation::IInspectable *pValue,
Local<Value>& localValue)
{
if (pValue == nullptr)
{
localValue = Null(isolate);
return S_OK;
}
IAsyncOperation *pAsyncOperation;
IObjectDispatch *pPropertyData;
IObservableObject *pObservableObject;
ICommand *pCommand;
IObservableCollection *pObservableCollection;
IPropertyValue *pPropertyValue;
IDictionary *pDictionary;
if (SUCCEEDED(foundation::QueryWeakReference(pValue, IID_IPropertyValue, &pPropertyValue)))
{
PropertyType propertyType;
pPropertyValue->get_Type(&propertyType);
switch (propertyType)
{
case foundation::PropertyType_Empty:
break;
case foundation::PropertyType_UInt8:
break;
case foundation::PropertyType_Int16:
case foundation::PropertyType_Int32:
{
INT32 value;
_IFR_(pv_util::GetInt32Value(pValue, &value));
localValue = Integer::New(isolate, value);
return S_OK;
}
case foundation::PropertyType_UInt16:
case foundation::PropertyType_UInt32:
{
UINT32 value;
_IFR_(pv_util::GetUInt32Value(pValue, &value));
localValue = Uint32::New(isolate, value);
return S_OK;
}
break;
case foundation::PropertyType_Int64:
break;
case foundation::PropertyType_UInt64:
break;
case foundation::PropertyType_Single:
break;
case foundation::PropertyType_Double:
break;
case foundation::PropertyType_Char16:
break;
case foundation::PropertyType_Boolean:
{
boolean value;
_IFR_(pv_util::GetBooleanValue(pValue, &value));
localValue = Boolean::New(isolate, value ? true : false);
return S_OK;
}
case foundation::PropertyType_String:
{
HStringPtr value;
_IFR_(pv_util::GetStringValue(pValue, value.GetAddressOf()));
#ifdef __UTF16_STRINGS
localValue = v8::String::NewFromUtf8(isolate, foundation::to_utf8_string(value).c_str()).ToLocalChecked();
#else
localValue = v8::String::NewFromUtf8(isolate, value.GetRawBuffer().c_str());
#endif
return S_OK;
}
case foundation::PropertyType_Inspectable:
break;
case foundation::PropertyType_DateTime:
break;
case foundation::PropertyType_TimeSpan:
break;
case foundation::PropertyType_Guid:
break;
case foundation::PropertyType_Point:
break;
case foundation::PropertyType_Size:
break;
case foundation::PropertyType_Rect:
break;
case foundation::PropertyType_OtherType:
break;
case foundation::PropertyType_UInt8Array:
break;
case foundation::PropertyType_Int16Array:
break;
case foundation::PropertyType_UInt16Array:
break;
case foundation::PropertyType_Int32Array:
break;
case foundation::PropertyType_UInt32Array:
break;
case foundation::PropertyType_Int64Array:
break;
case foundation::PropertyType_UInt64Array:
break;
case foundation::PropertyType_SingleArray:
break;
case foundation::PropertyType_DoubleArray:
break;
case foundation::PropertyType_Char16Array:
break;
case foundation::PropertyType_BooleanArray:
break;
case foundation::PropertyType_StringArray:
break;
case foundation::PropertyType_InspectableArray:
break;
case foundation::PropertyType_DateTimeArray:
break;
case foundation::PropertyType_TimeSpanArray:
break;
case foundation::PropertyType_GuidArray:
break;
case foundation::PropertyType_PointArray:
break;
case foundation::PropertyType_SizeArray:
break;
case foundation::PropertyType_RectArray:
break;
case foundation::PropertyType_OtherTypeArray:
break;
default:
break;
}
}
else if (SUCCEEDED(foundation::QueryWeakReference(pValue, &pAsyncOperation)))
{
localValue = AsyncOperationWrap::Create(pAsyncOperation);
return S_OK;
}
else if (SUCCEEDED(foundation::QueryWeakReference(pValue, &pCommand)))
{
localValue = CommandWrap::Create(pCommand);
return S_OK;
}
else if (SUCCEEDED(foundation::QueryWeakReference(pValue, &pObservableCollection)))
{
localValue = ObservableCollectionWrap::Create(pObservableCollection);
return S_OK;
}
else if (SUCCEEDED(foundation::QueryWeakReference(pValue, &pObservableObject)))
{
localValue = ObservableObjectWrap::Create(pObservableObject);
return S_OK;
}
else if (SUCCEEDED(foundation::QueryWeakReference(pValue, &pPropertyData)))
{
localValue = ObjectDispatchWrap::Create(pPropertyData);
return S_OK;
}
else if (SUCCEEDED(foundation::QueryWeakReference(pValue, &pDictionary)))
{
localValue = DictionaryWrap::Create(pDictionary);
return S_OK;
}
return E_NOTIMPL;
}