in shims/qpid-proton-cpp/src/qpidit/amqp_types_test/Receiver.cpp [149:258]
Json::Value Receiver::getValue(const std::string& amqpType, const proton::value& val) {
if (amqpType.compare("null") == 0) {
checkMessageType(val, proton::NULL_TYPE);
return "None";
}
if (amqpType.compare("boolean") == 0) {
checkMessageType(val, proton::BOOLEAN);
return proton::get<bool>(val) ? "True" : "False";
}
if (amqpType.compare("ubyte") == 0) {
checkMessageType(val, proton::UBYTE);
return toHexStr<uint8_t>(proton::get<uint8_t>(val));
}
if (amqpType.compare("ushort") == 0) {
checkMessageType(val, proton::USHORT);
return toHexStr<uint16_t>(proton::get<uint16_t>(val));
}
if (amqpType.compare("uint") == 0) {
checkMessageType(val, proton::UINT);
return toHexStr<uint32_t>(proton::get<uint32_t>(val));
}
if (amqpType.compare("ulong") == 0) {
checkMessageType(val, proton::ULONG);
return toHexStr<uint64_t>(proton::get<uint64_t>(val));
}
if (amqpType.compare("byte") == 0) {
checkMessageType(val, proton::BYTE);
return toHexStr<int8_t>(proton::get<int8_t>(val));
}
if (amqpType.compare("short") == 0) {
checkMessageType(val, proton::SHORT);
return toHexStr<int16_t>(proton::get<int16_t>(val));
}
if (amqpType.compare("int") == 0) {
checkMessageType(val, proton::INT);
return toHexStr<int32_t>(proton::get<int32_t>(val));
}
if (amqpType.compare("long") == 0) {
checkMessageType(val, proton::LONG);
return toHexStr<int64_t>(proton::get<int64_t>(val));
}
if (amqpType.compare("float") == 0) {
checkMessageType(val, proton::FLOAT);
float f = proton::get<float>(val);
return toHexStr<uint32_t>(*((uint32_t*)&f), true);
}
if (amqpType.compare("double") == 0) {
checkMessageType(val, proton::DOUBLE);
double d = proton::get<double>(val);
return toHexStr<uint64_t>(*((uint64_t*)&d), true);
}
if (amqpType.compare("decimal32") == 0) {
checkMessageType(val, proton::DECIMAL32);
return byteArrayToHexStr(proton::get<proton::decimal32>(val));
}
if (amqpType.compare("decimal64") == 0) {
checkMessageType(val, proton::DECIMAL64);
return byteArrayToHexStr(proton::get<proton::decimal64>(val));
}
if (amqpType.compare("decimal128") == 0) {
checkMessageType(val, proton::DECIMAL128);
return byteArrayToHexStr(proton::get<proton::decimal128>(val));
}
if (amqpType.compare("char") == 0) {
checkMessageType(val, proton::CHAR);
wchar_t c = proton::get<wchar_t>(val);
std::stringstream oss;
if (c < 0x7f && std::iswprint(c)) {
oss << (char)c;
} else {
oss << "0x" << std::hex << c;
}
return oss.str();
}
if (amqpType.compare("timestamp") == 0) {
checkMessageType(val, proton::TIMESTAMP);
std::ostringstream oss;
oss << "0x" << std::hex << proton::get<proton::timestamp>(val).milliseconds();
return oss.str();
}
if (amqpType.compare("uuid") == 0) {
checkMessageType(val, proton::UUID);
std::ostringstream oss;
oss << proton::get<proton::uuid>(val);
return oss.str();
}
if (amqpType.compare("binary") == 0) {
checkMessageType(val, proton::BINARY);
// Encode binary to base64 before returning value as string
return b64_encode(proton::get<proton::binary>(val));
}
if (amqpType.compare("string") == 0) {
checkMessageType(val, proton::STRING);
return proton::get<std::string>(val);
}
if (amqpType.compare("symbol") == 0) {
checkMessageType(val, proton::SYMBOL);
return proton::get<proton::symbol>(val);
}
if (amqpType.compare("list") == 0) {
throw qpidit::UnsupportedAmqpTypeError(amqpType);
}
if (amqpType.compare("map") == 0) {
throw qpidit::UnsupportedAmqpTypeError(amqpType);
}
if (amqpType.compare("array") == 0) {
throw qpidit::UnsupportedAmqpTypeError(amqpType);
}
throw qpidit::UnknownAmqpTypeError(amqpType);
}