summaryrefslogtreecommitdiff
path: root/src/sf.eiface/state.c
blob: 7d850561bb394d52fe346b5026bab984109177e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "state.h"

// FREE

void
Free_configuration(configuration *E)
{
	if(E->inet != NULL) free(E->inet);
}

void
Free_data(data *E)
{
	UNUSED(E);
}

// PARSE

char *
Parse_configuration(configuration *E, ucl_object_t const *root, char const *Position)
{
	char *Error;
	UCL_CHECK_ROOT(OBJECT);
	ucl_object_t const *inet = ucl_object_lookup(root, "inet");
	if(inet != NULL)
	{
		UCL_CHECK(inet, STRING);
		E->inet = strdup(ucl_object_tostring(inet));
	}
	return NULL;
error:
	return Error;
}

char *
Parse_data(data *E, ucl_object_t const *root, char const *Position)
{
	char *Error;
	UCL_CHECK_ROOT(OBJECT);
	ucl_object_t const *id = ucl_object_lookup(root, "id");
	UCL_CHECK(id, INT);
	s64 ID = ucl_object_toint(id);
	if(ID < 0 || ID > UINT32_MAX)
	{
		asprintf(&Error, "%s id invalid (%ld)", Position, ID);
		goto error;
	}
	E->ID = (u32)ID;
	return NULL;
error:
	return Error;
}

// SAVE

void
Save_data(jprint_state *S, data const *E)
{
	JPrintObjectBegin(S);
	JPrintMember(S, "id");
	JPrint_ssize_t(S, E->ID);
	JPrintObjectEnd(S);
}