adding better json tests and encoding
This commit is contained in:
parent
627b5bca33
commit
880f1cd147
|
@ -45,6 +45,19 @@ template <> struct JsonEncodeImpl<MessagePrimitive<std::string>> {
|
|||
}
|
||||
};
|
||||
|
||||
template <> struct JsonEncodeImpl<MessagePrimitive<bool>> {
|
||||
static Error encode(typename MessagePrimitive<bool>::Reader data,
|
||||
Buffer &buffer) {
|
||||
std::string str = data.get() ? "true" : "false";
|
||||
Error error = buffer.push(
|
||||
*reinterpret_cast<const uint8_t *>(str.data()), str.size());
|
||||
if (error.failed()) {
|
||||
return error;
|
||||
}
|
||||
return noError();
|
||||
}
|
||||
};
|
||||
|
||||
template <typename... T> struct JsonEncodeImpl<MessageList<T...>> {
|
||||
template <size_t i = 0>
|
||||
static typename std::enable_if<i == sizeof...(T), Error>::type
|
||||
|
@ -273,6 +286,21 @@ template <typename T> struct JsonDecodeImpl<MessagePrimitive<T>> {
|
|||
// MessagePrimitive<T>::Builder){}
|
||||
static Error decode(typename MessagePrimitive<T>::Builder,
|
||||
DynamicMessage::DynamicReader) {
|
||||
|
||||
// This is also a valid null implementation :)
|
||||
return noError();
|
||||
}
|
||||
};
|
||||
template <> struct JsonDecodeImpl<MessagePrimitive<bool>> {
|
||||
// static void decode(BufferView view, typename
|
||||
// MessagePrimitive<T>::Builder){}
|
||||
static Error decode(typename MessagePrimitive<bool>::Builder data,
|
||||
DynamicMessage::DynamicReader reader) {
|
||||
if (reader.type() != DynamicMessage::Type::Bool) {
|
||||
return criticalError("Not a boolean");
|
||||
}
|
||||
DynamicMessageBool::Reader b_reader = reader.as<DynamicMessageBool>();
|
||||
data.set(b_reader.get());
|
||||
return noError();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -40,7 +40,8 @@ GIN_TEST("JSON List Encoding"){
|
|||
typedef MessageStruct<
|
||||
MessageStructMember<MessagePrimitive<uint32_t>, decltype("test_uint"_t)>,
|
||||
MessageStructMember<MessagePrimitive<std::string>, decltype("test_string"_t)>,
|
||||
MessageStructMember<MessagePrimitive<std::string>, decltype("test_name"_t)>
|
||||
MessageStructMember<MessagePrimitive<std::string>, decltype("test_name"_t)>,
|
||||
MessageStructMember<MessagePrimitive<bool>, decltype("test_bool"_t)>
|
||||
> TestStruct;
|
||||
|
||||
GIN_TEST("JSON Struct Encoding"){
|
||||
|
@ -61,7 +62,7 @@ GIN_TEST("JSON Struct Encoding"){
|
|||
RingBuffer temp_buffer;
|
||||
codec.encode<TestStruct>(root.asReader(), temp_buffer);
|
||||
|
||||
std::string expected_result{"{\"test_uint\":23,\"test_string\":\"foo\",\"test_name\":\"test_name\"}"};
|
||||
std::string expected_result{"{\"test_uint\":23,\"test_string\":\"foo\",\"test_name\":\"test_name\",\"test_bool\":false}"};
|
||||
|
||||
std::string tmp_string = temp_buffer.toString();
|
||||
GIN_EXPECT(tmp_string == expected_result, std::string{"Bad encoding:\n"} + tmp_string);
|
||||
|
@ -119,7 +120,8 @@ GIN_TEST("JSON Struct Decoding"){
|
|||
{
|
||||
"test_string" :"banana" ,
|
||||
"test_uint" : 5,
|
||||
"test_name" : "keldu"
|
||||
"test_name" : "keldu",
|
||||
"test_bool" : true
|
||||
})";
|
||||
|
||||
auto builder = heapMessageBuilder();
|
||||
|
@ -135,6 +137,7 @@ GIN_TEST("JSON Struct Decoding"){
|
|||
GIN_EXPECT( reader.get<decltype("test_string"_t)>().get() == "banana", "Test String has wrong value" );
|
||||
GIN_EXPECT( reader.get<decltype("test_uint"_t)>().get() == 5, "Test Unsigned has wrong value" );
|
||||
GIN_EXPECT( reader.get<decltype("test_name"_t)>().get() == "keldu", "Test Name has wrong value" );
|
||||
GIN_EXPECT( reader.get<decltype("test_bool"_t)>().get() == true, "Test Bool has wrong value" );
|
||||
}
|
||||
|
||||
typedef MessageStruct<
|
||||
|
@ -149,7 +152,8 @@ GIN_TEST("JSON Struct Decoding Two layer"){
|
|||
"test_struct" :{
|
||||
"test_string" : "banana",
|
||||
"test_uint": 40,
|
||||
"test_name":"HaDiKo"
|
||||
"test_name":"HaDiKo",
|
||||
"test_bool" :false
|
||||
},
|
||||
"test_uint": 5,
|
||||
"test_name" : "keldu"
|
||||
|
@ -171,6 +175,7 @@ GIN_TEST("JSON Struct Decoding Two layer"){
|
|||
GIN_EXPECT( inner_reader.get<decltype("test_string"_t)>().get() == "banana", "Test String has wrong value" );
|
||||
GIN_EXPECT( inner_reader.get<decltype("test_uint"_t)>().get() == 40, "Test Unsigned has wrong value" );
|
||||
GIN_EXPECT( inner_reader.get<decltype("test_name"_t)>().get() == "HaDiKo", "Test Name has wrong value" );
|
||||
GIN_EXPECT( inner_reader.get<decltype("test_bool"_t)>().get() == false, "Test Bool has wrong value" );
|
||||
GIN_EXPECT( reader.get<decltype("test_uint"_t)>().get() == 5, "Test Unsigned has wrong value" );
|
||||
GIN_EXPECT( reader.get<decltype("test_name"_t)>().get() == "keldu", "Test Name has wrong value" );
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue