#ifndef BW_CEF_V8_TO_STRING_HPP
#define BW_CEF_V8_TO_STRING_HPP
#include <string>
#include <vector>
class V8ToString {
public:
static CefString convert( CefRefPtr<CefV8Value> val ) {
if ( val->IsUndefined() )
return "undefined";
if ( val->IsNull() )
return "null";
if ( val->IsString() ) {
std::string string = "\"";
string += val->GetStringValue();
string += "\"";
return string;
}
if ( val->IsBool() )
return boolToString( val->GetBoolValue() );
if ( val->IsInt() )
return intoString( val->GetIntValue() );
if ( val->IsUInt() )
return intoString( val->GetUIntValue() );
if ( val->IsDouble() )
return intoString( val->GetDoubleValue() );
if ( val->IsArray() ) {
std::string string = "[";
for (int i = 0; i < val->GetArrayLength(); i++) {
if (i != 0) {
string += ",";
}
string += convert(val->GetValue(i));
}
string += "]";
return string;
}
if ( val->IsObject() ) {
std::vector<CefString> keys;
val->GetKeys(keys);
std::string string = "{";
for (size_t i = 0; i < keys.size(); i++) {
std::string key = keys[i];
if (i != 0) {
string += ",";
}
string += key + ":" + convert(val->GetValue(i)).ToString();
}
string += "}";
return string;
}
if ( val->IsDate() )
return "date";
if ( val->IsFunction() )
return "function";
return "unknown type";
}
protected:
static CefString boolToString( bool boolean ) {
if ( boolean )
return "true";
return "false";
}
template <class V>
static CefString intoString( const V& value ) {
std::string str = std::to_string( value );
return CefString( str );
}
};
#endif