in DynamoDbEncryption/runtimes/java/src/main/sdkv1/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java [170:236]
private static AttributeValue unmarshall(final DataInputStream in)
throws IOException {
char type = in.readChar();
AttributeValue result = new AttributeValue();
switch (type) {
case '\0':
result.setNULL(Boolean.TRUE);
break;
case 'b':
result.setB(readBytes(in));
break;
case 'B':
result.setBS(readBytesList(in));
break;
case 'n':
result.setN(readString(in));
break;
case 'N':
result.setNS(readStringList(in));
break;
case 's':
result.setS(readString(in));
break;
case 'S':
result.setSS(readStringList(in));
break;
case '?':
final byte boolValue = in.readByte();
if (boolValue == TRUE_FLAG) {
result.setBOOL(Boolean.TRUE);
} else if (boolValue == FALSE_FLAG) {
result.setBOOL(Boolean.FALSE);
} else {
throw new IllegalArgumentException("Improperly formatted data");
}
break;
case 'L':
final int lCount = in.readInt();
final List<AttributeValue> l = new ArrayList<AttributeValue>(lCount);
for (int lIdx = 0; lIdx < lCount; lIdx++) {
l.add(unmarshall(in));
}
result.setL(l);
break;
case 'M':
final int mCount = in.readInt();
final Map<String, AttributeValue> m = new HashMap<
String,
AttributeValue
>();
for (int mIdx = 0; mIdx < mCount; mIdx++) {
final AttributeValue key = unmarshall(in);
if (key.getS() == null) {
throw new IllegalArgumentException("Improperly formatted data");
}
AttributeValue value = unmarshall(in);
m.put(key.getS(), value);
}
result.setM(m);
break;
default:
throw new IllegalArgumentException("Unsupported data encoding");
}
return result;
}