Files
mlib/example/ex11-json-net.c
2023-03-05 18:30:47 +01:00

83 lines
2.1 KiB
C

// Based on https://github.com/nanopb/nanopb/blob/master/examples/simple/simple.c
#include <stdio.h>
#include "m-serial-json.h"
#include "m-tuple.h"
#include "m-string.h"
// Define a structure with one field
TUPLE_DEF2(SimpleMessage,
(lucky_number, int))
int main(void)
{
string_t buffer;
m_serial_return_code_t status;
/* Let's define a string 'buffer' that will receive the JSON representation of our message*/
string_init(buffer);
/* Encode our message */
{
SimpleMessage_t message;
SimpleMessage_init(message);
/* Create a stream that will write to our string buffer. */
m_serial_str_json_write_t stream;
m_serial_str_json_write_init(stream, buffer);
/* Fill in the lucky number */
message->lucky_number = 13;
/* Now we are ready to encode the message! */
status = SimpleMessage_out_serial(stream, message);
/* Then just check for any errors.. */
if (status != M_SERIAL_OK_DONE)
{
printf("Encoding failed: %d\n", status);
return 1;
}
/* Clear the objets */
m_serial_str_json_write_clear(stream);
SimpleMessage_clear(message);
}
/* Now we could transmit the message over network, store it in a file
* It is represented in a string 'buffer'
* but we are doing it right now.
*/
{
/* Allocate another space for the decoded message. */
SimpleMessage_t message;
SimpleMessage_init(message);
/* Create a stream that reads from the buffer. */
m_serial_str_json_read_t stream;
m_serial_str_json_read_init(stream, string_get_cstr(buffer));
/* Now we are ready to decode the message. */
status = SimpleMessage_in_serial(message, stream);
/* Check for errors... */
if (status != M_SERIAL_OK_DONE)
{
printf("Decoding failed: %d\n", status);
return 1;
}
/* Print the data contained in the message. */
printf("Your lucky number was %d!\n", message->lucky_number);
/* Clear the objets */
m_serial_str_json_read_clear(stream);
SimpleMessage_clear(message);
}
string_clear(buffer);
return 0;
}