convertToValue<T> static method

T? convertToValue<T>(
  1. Pointer<JSContext> context,
  2. JsEvalResult evalResult
)

Implementation

static T? convertToValue<T>(
    Pointer<JSContext> context, JsEvalResult evalResult) {
  Type type = getTypeForJsValue(evalResult.rawResult);

  if (_jsIsArray(context, evalResult.rawResult) == 1) {
    Pointer<JSValueConst>? stringifiedValue = calloc();
    Pointer<Pointer<Utf8NullTerminated>> stringResultPointer = calloc();
    _jSJSONStringify(
      context,
      evalResult.rawResult,
      stringifiedValue,
      stringResultPointer,
    );
    final stringResult =
        Utf8NullTerminated.fromUtf8(stringResultPointer.value);
    return jsonDecode(stringResult);
  }
  switch (type) {
    case int:
      return int.parse(evalResult.stringResult) as T;
    case bool:
      return (evalResult.stringResult == "true") as T;
    case String:
      return (evalResult.stringResult) as T;
    case Null:
      return null;
    case Object:
      Pointer<JSValueConst>? stringifiedValue = calloc<JSValueConst>();
      Pointer<Pointer<Utf8NullTerminated>> stringResultPointer = calloc();

      _jSJSONStringify(
        context,
        evalResult.rawResult,
        stringifiedValue,
        stringResultPointer,
      );
      final stringResult =
          Utf8NullTerminated.fromUtf8(stringResultPointer.value);
      return jsonDecode(stringResult);
  }
  return null;
}