xref: /freebsd-src/contrib/libxo/tests/core/test_06.c (revision 8f0ea33f2bbf3a6aa80235f0a02fa5f2780c2b17)
1*31337658SMarcel Moolenaar /*
2*31337658SMarcel Moolenaar  * Copyright (c) 2014, Juniper Networks, Inc.
3*31337658SMarcel Moolenaar  * All rights reserved.
4*31337658SMarcel Moolenaar  * This SOFTWARE is licensed under the LICENSE provided in the
5*31337658SMarcel Moolenaar  * ../Copyright file. By downloading, installing, copying, or otherwise
6*31337658SMarcel Moolenaar  * using the SOFTWARE, you agree to be bound by the terms of that
7*31337658SMarcel Moolenaar  * LICENSE.
8*31337658SMarcel Moolenaar  * Phil Shafer, July 2014
9*31337658SMarcel Moolenaar  */
10*31337658SMarcel Moolenaar 
11*31337658SMarcel Moolenaar #include <stdio.h>
12*31337658SMarcel Moolenaar #include <stdlib.h>
13*31337658SMarcel Moolenaar #include <string.h>
14*31337658SMarcel Moolenaar 
15*31337658SMarcel Moolenaar #include "xo.h"
16*31337658SMarcel Moolenaar 
17*31337658SMarcel Moolenaar xo_info_t info[] = {
18*31337658SMarcel Moolenaar     { "employee", "object", "Employee data" },
19*31337658SMarcel Moolenaar     { "first-name", "string", "First name of employee" },
20*31337658SMarcel Moolenaar     { "last-name", "string", "Last name of employee" },
21*31337658SMarcel Moolenaar     { "department", "number", "Department number" },
22*31337658SMarcel Moolenaar };
23*31337658SMarcel Moolenaar int info_count = (sizeof(info) / sizeof(info[0]));
24*31337658SMarcel Moolenaar 
25*31337658SMarcel Moolenaar int
main(int argc,char ** argv)26*31337658SMarcel Moolenaar main (int argc, char **argv)
27*31337658SMarcel Moolenaar {
28*31337658SMarcel Moolenaar     struct employee {
29*31337658SMarcel Moolenaar 	const char *e_first;
30*31337658SMarcel Moolenaar 	const char *e_last;
31*31337658SMarcel Moolenaar 	unsigned e_dept;
32*31337658SMarcel Moolenaar     } employees[] = {
33*31337658SMarcel Moolenaar 	{ "Terry", "Jones", 660 },
34*31337658SMarcel Moolenaar 	{ "Leslie", "Patterson", 341 },
35*31337658SMarcel Moolenaar 	{ "Ashley", "Smith", 1440 },
36*31337658SMarcel Moolenaar 	{ NULL, NULL }
37*31337658SMarcel Moolenaar     }, *ep = employees;
38*31337658SMarcel Moolenaar 
39*31337658SMarcel Moolenaar     argc = xo_parse_args(argc, argv);
40*31337658SMarcel Moolenaar     if (argc < 0)
41*31337658SMarcel Moolenaar 	return 1;
42*31337658SMarcel Moolenaar 
43*31337658SMarcel Moolenaar     xo_set_info(NULL, info, info_count);
44*31337658SMarcel Moolenaar 
45*31337658SMarcel Moolenaar     xo_set_flags(NULL, XOF_DTRT);
46*31337658SMarcel Moolenaar 
47*31337658SMarcel Moolenaar     xo_open_container("employees");
48*31337658SMarcel Moolenaar     xo_open_list("employee");
49*31337658SMarcel Moolenaar 
50*31337658SMarcel Moolenaar     for ( ; ep->e_first; ep++) {
51*31337658SMarcel Moolenaar 	xo_open_instance("employee");
52*31337658SMarcel Moolenaar 	xo_emit("{:first-name} {:last-name} works in dept #{:department/%u}\n",
53*31337658SMarcel Moolenaar 		ep->e_first, ep->e_last, ep->e_dept);
54*31337658SMarcel Moolenaar 	xo_close_instance_d();
55*31337658SMarcel Moolenaar     }
56*31337658SMarcel Moolenaar 
57*31337658SMarcel Moolenaar     xo_close_list_d();
58*31337658SMarcel Moolenaar     xo_close_container_d();
59*31337658SMarcel Moolenaar 
60*31337658SMarcel Moolenaar     xo_finish();
61*31337658SMarcel Moolenaar 
62*31337658SMarcel Moolenaar     return 0;
63*31337658SMarcel Moolenaar }
64