cser/
#include <stdio.h>
#include <string.h>
#include <errno.h>

#include "cser.h"

typedef long ID;
struct TestStruct_t {
	ID id;
	char* name;
	int hp;
	int hp_max;
};
typedef struct TestStruct_t TestStruct;

void
save_test(TestStruct* data) {
	FILE* file;

	file = fopen("test.txt", "w");

	cser_write_num(file, "id", data->id);
	cser_write_str(file, "name", data->name);
	cser_write_num(file, "hp", data->hp);
	cser_write_num(file, "maxhp", data->hp_max);

	fclose(file);
}

TestStruct*
load_test(void) {
	FILE* file;
	TestStruct* data;

	data = (TestStruct*)malloc(sizeof(TestStruct));
	if (data == NULL)
		return NULL;
	memset(data, 0, sizeof(TestStruct));

	file = fopen("test.txt", "r");
	if (file == NULL) {
		free (data);
		return NULL;
	}

	CSER_READ_BEGIN(file)
		CSER_READ_STR("name", data->name);
		CSER_READ_NUM("id", data->id);
		CSER_READ_NUM("hp", data->hp);
		CSER_READ_NUM("maxhp", data->hp_max);
	CSER_READ_END

	return data;
}

void
print_test (TestStruct* data) {
	printf("ID: %ld\n", data->id);
	printf("Name is '%s'\n", data->name);
	printf("HP: %d/%d\n", data->hp, data->hp_max);
}

int
main (void) {
	TestStruct* data;

	/* save */
	printf("Saving...\n");
	data = (TestStruct*)malloc(sizeof(TestStruct));
	if (data == NULL) {
		fprintf(stderr, "malloc(): %s\n", strerror(errno));
		return 1;
	}
	data->id = 500;
	data->name = "Elanthis";
	data->hp = 70;
	data->hp_max = 75;
	print_test(data);
	save_test(data);
	free(data);

	/* load */
	printf("Loading...\n");
	data = load_test();
	if (data == NULL) {
		fprintf(stderr, "load_data(): %s\n", strerror(errno));
		return 1;
	}
	print_test(data);
	free(data);

	return 0;
}