| 97 | } |
| 98 | |
| 99 | void writeValueToJSONWriter(const Value& value, JSONWriter& writer) { |
| 100 | switch (value.getType()) { |
| 101 | case ValueType::Null: |
| 102 | case ValueType::Undefined: |
| 103 | writer.writeNull(); |
| 104 | break; |
| 105 | case ValueType::InternedString: |
| 106 | writer.writeString(value.toStringBox().toStringView()); |
| 107 | break; |
| 108 | case ValueType::StaticString: { |
| 109 | auto utf8Storage = value.getStaticString()->utf8Storage(); |
| 110 | writer.writeString(utf8Storage.toStringView()); |
| 111 | } break; |
| 112 | case ValueType::Error: |
| 113 | writer.writeString(value.toStringBox().toStringView()); |
| 114 | break; |
| 115 | case ValueType::TypedObject: |
| 116 | return writeTypedObjectToJSONWriter(*value.getTypedObject(), writer); |
| 117 | case ValueType::ProxyTypedObject: |
| 118 | return writeTypedObjectToJSONWriter(*value.getProxyObject()->getTypedObject(), writer); |
| 119 | case ValueType::ValdiObject: { |
| 120 | auto* valueConvertible = dynamic_cast<ValueConvertible*>(value.getValdiObject().get()); |
| 121 | if (valueConvertible != nullptr) { |
| 122 | return writeValueToJSONWriter(valueConvertible->toValue(), writer); |
| 123 | } else { |
| 124 | writer.writeString(value.toStringBox().toStringView()); |
| 125 | } |
| 126 | } break; |
| 127 | case ValueType::Function: |
| 128 | writer.writeString(value.toStringBox().toStringView()); |
| 129 | break; |
| 130 | case ValueType::Int: |
| 131 | case ValueType::Long: |
| 132 | writer.writeInt(value.toLong()); |
| 133 | break; |
| 134 | case ValueType::Double: |
| 135 | writer.writeDouble(value.toDouble()); |
| 136 | break; |
| 137 | case ValueType::Bool: |
| 138 | writer.writeBool(value.toBool()); |
| 139 | break; |
| 140 | case ValueType::Map: { |
| 141 | writer.writeBeginObject(); |
| 142 | |
| 143 | auto isFirst = true; |
| 144 | for (const auto& it : *value.getMap()) { |
| 145 | if (!isFirst) { |
| 146 | writer.writeComma(); |
| 147 | } |
| 148 | isFirst = false; |
| 149 | writer.writeProperty(it.first.toStringView()); |
| 150 | writeValueToJSONWriter(it.second, writer); |
| 151 | } |
| 152 | |
| 153 | writer.writeEndObject(); |
| 154 | } break; |
| 155 | case ValueType::Array: { |
| 156 | writer.writeArray(*value.getArray(), [&](const auto& item) { writeValueToJSONWriter(item, writer); }); |
no test coverage detected