(Map<String, Object> messages)
| 339 | } |
| 340 | |
| 341 | public static byte[] encodeData(Map<String, Object> messages) throws Exception { |
| 342 | ByteArrayOutputStream output = new ByteArrayOutputStream(); |
| 343 | TreeMap<String, String> orderedKeys = new TreeMap<String, String>(); |
| 344 | messages.keySet().stream().forEach(key -> { |
| 345 | |
| 346 | String[] keyval = key.split(":"); |
| 347 | String index = String.format("%s-%s", keyval[1], key); |
| 348 | orderedKeys.put(index, key); |
| 349 | }); |
| 350 | for (String key : orderedKeys.values()) { |
| 351 | |
| 352 | String[] keyval = key.split(":"); |
| 353 | long fieldNumber = Long.parseLong(keyval[0], 16); |
| 354 | String type = keyval[2]; |
| 355 | |
| 356 | switch (type) { |
| 357 | |
| 358 | case "Varint" : { |
| 359 | |
| 360 | new Key(fieldNumber, Key.Type.Variant).writeTo(output); |
| 361 | Object d = messages.get(key); |
| 362 | long var = 0; |
| 363 | if (d instanceof Integer) { |
| 364 | |
| 365 | var = ((Integer) d).longValue(); |
| 366 | } else if (d instanceof Long) { |
| 367 | |
| 368 | var = ((Long) d).longValue(); |
| 369 | } |
| 370 | writeVar(var, output); |
| 371 | break; |
| 372 | } |
| 373 | case "String" : { |
| 374 | |
| 375 | new Key(fieldNumber, Key.Type.LengthDelimited).writeTo(output); |
| 376 | String str = messages.get(key).toString(); |
| 377 | writeVar(str.getBytes().length, output); |
| 378 | output.write(str.getBytes()); |
| 379 | break; |
| 380 | } |
| 381 | case "32-bit" : { |
| 382 | |
| 383 | new Key(fieldNumber, Key.Type.Bit32).writeTo(output); |
| 384 | int bit32 = (int) messages.get(key); |
| 385 | output.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(bit32).array()); |
| 386 | break; |
| 387 | } |
| 388 | case "64-bit" : { |
| 389 | |
| 390 | new Key(fieldNumber, Key.Type.Bit64).writeTo(output); |
| 391 | Object d = messages.get(key); |
| 392 | long bit64 = 0; |
| 393 | if (d instanceof Integer) { |
| 394 | |
| 395 | bit64 = ((Integer) d).longValue(); |
| 396 | } else if (d instanceof Long) { |
| 397 | |
| 398 | bit64 = ((Long) d).longValue(); |
no test coverage detected