inline optional<Value> toValue(v8::Local<v8::Value> value) { if (value->IsFalse()) { return { false }; } else if (value->IsTrue()) { return { true }; } else if (value->IsString()) { return { std::string(*Nan::Utf8String(value)) }; } else if (value->IsUint32()) { return { std::uint64_t(value->Uint32Value()) }; } else if (value->IsInt32()) { return { std::int64_t(value->Int32Value()) }; } else if (value->IsNumber()) { return { value->NumberValue() }; } else { return {}; } }