| 127 | |
| 128 | |
| 129 | void JSONEncoder::writeValue(const Value *v) { |
| 130 | switch (v->type()) { |
| 131 | case kNull: |
| 132 | if (v->isUndefined()) { |
| 133 | comma(); |
| 134 | _out << slice("undefined"); |
| 135 | } else { |
| 136 | writeNull(); |
| 137 | } |
| 138 | break; |
| 139 | case kBoolean: |
| 140 | writeBool(v->asBool()); |
| 141 | break; |
| 142 | case kNumber: |
| 143 | if (v->isInteger()) { |
| 144 | auto i = v->asInt(); |
| 145 | if (v->isUnsigned()) |
| 146 | writeUInt(i); |
| 147 | else |
| 148 | writeInt(i); |
| 149 | } else if (v->isDouble()) { |
| 150 | writeDouble(v->asDouble()); |
| 151 | } else { |
| 152 | writeFloat(v->asFloat()); |
| 153 | } |
| 154 | break; |
| 155 | case kString: |
| 156 | writeString(v->asString()); |
| 157 | break; |
| 158 | case kData: |
| 159 | writeData(v->asData()); |
| 160 | break; |
| 161 | case kArray: |
| 162 | beginArray(); |
| 163 | for (auto iter = v->asArray()->begin(); iter; ++iter) |
| 164 | writeValue(iter.value()); |
| 165 | endArray(); |
| 166 | break; |
| 167 | case kDict: |
| 168 | writeDict(v->asDict()); |
| 169 | break; |
| 170 | default: |
| 171 | FleeceException::_throw(UnknownValue, "illegal typecode in Value; corrupt data?"); |
| 172 | } |
| 173 | } |
| 174 | |
| 175 | } } |
nothing calls this directly
no test coverage detected