HRESULT InspectableToLocalValue()

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;
}