xref: /freebsd/contrib/libxo/tests/core/test_03.c (revision 76afb20c58adb296f09857aed214b91464242264)
131337658SMarcel Moolenaar /*
231337658SMarcel Moolenaar  * Copyright (c) 2014, Juniper Networks, Inc.
331337658SMarcel Moolenaar  * All rights reserved.
431337658SMarcel Moolenaar  * This SOFTWARE is licensed under the LICENSE provided in the
531337658SMarcel Moolenaar  * ../Copyright file. By downloading, installing, copying, or otherwise
631337658SMarcel Moolenaar  * using the SOFTWARE, you agree to be bound by the terms of that
731337658SMarcel Moolenaar  * LICENSE.
831337658SMarcel Moolenaar  * Phil Shafer, July 2014
931337658SMarcel Moolenaar  */
1031337658SMarcel Moolenaar 
1131337658SMarcel Moolenaar #include <stdio.h>
1231337658SMarcel Moolenaar #include <stdlib.h>
1331337658SMarcel Moolenaar #include <string.h>
1431337658SMarcel Moolenaar 
1531337658SMarcel Moolenaar #include "xo.h"
16*76afb20cSPhil Shafer #include "xo_encoder.h"
1731337658SMarcel Moolenaar 
1831337658SMarcel Moolenaar xo_info_t info[] = {
1931337658SMarcel Moolenaar     { "employee", "object", "Employee data" },
2031337658SMarcel Moolenaar     { "first-name", "string", "First name of employee" },
2131337658SMarcel Moolenaar     { "last-name", "string", "Last name of employee" },
2231337658SMarcel Moolenaar     { "department", "number", "Department number" },
2331337658SMarcel Moolenaar };
2431337658SMarcel Moolenaar int info_count = (sizeof(info) / sizeof(info[0]));
2531337658SMarcel Moolenaar 
2631337658SMarcel Moolenaar int
main(int argc,char ** argv)2731337658SMarcel Moolenaar main (int argc, char **argv)
2831337658SMarcel Moolenaar {
29ee5cf116SPhil Shafer     unsigned opt_count = 1;
30ee5cf116SPhil Shafer     unsigned opt_extra = 0;
31ee5cf116SPhil Shafer 
3231337658SMarcel Moolenaar     struct employee {
3331337658SMarcel Moolenaar 	const char *e_first;
3431337658SMarcel Moolenaar 	const char *e_last;
3531337658SMarcel Moolenaar 	unsigned e_dept;
3631337658SMarcel Moolenaar     } employees[] = {
3731337658SMarcel Moolenaar 	{ "Terry", "Jones", 660 },
3831337658SMarcel Moolenaar 	{ "Leslie", "Patterson", 341 },
3931337658SMarcel Moolenaar 	{ "Ashley", "Smith", 1440 },
4031337658SMarcel Moolenaar 	{ NULL, NULL }
41ee5cf116SPhil Shafer     }, *ep;
4231337658SMarcel Moolenaar 
4331337658SMarcel Moolenaar     argc = xo_parse_args(argc, argv);
4431337658SMarcel Moolenaar     if (argc < 0)
4531337658SMarcel Moolenaar 	return 1;
4631337658SMarcel Moolenaar 
47ee5cf116SPhil Shafer     for (argc = 1; argv[argc]; argc++) {
48*76afb20cSPhil Shafer 	if (xo_streq(argv[argc], "count")) {
49ee5cf116SPhil Shafer 	    if (argv[argc + 1])
50ee5cf116SPhil Shafer 		opt_count = atoi(argv[++argc]);
51*76afb20cSPhil Shafer 	} else if (xo_streq(argv[argc], "extra")) {
52ee5cf116SPhil Shafer 	    if (argv[argc + 1])
53ee5cf116SPhil Shafer 		opt_extra = atoi(argv[++argc]);
54ee5cf116SPhil Shafer 	}
55ee5cf116SPhil Shafer     }
56ee5cf116SPhil Shafer 
5731337658SMarcel Moolenaar     xo_set_info(NULL, info, info_count);
5831337658SMarcel Moolenaar 
5931337658SMarcel Moolenaar     xo_open_container("employees");
6031337658SMarcel Moolenaar     xo_open_list("employee");
6131337658SMarcel Moolenaar 
62ee5cf116SPhil Shafer     xo_emit("[{:extra/%*s}]\n", opt_extra, "");
63ee5cf116SPhil Shafer 
64ee5cf116SPhil Shafer     xo_emit("{T:/%13s} {T:/%5s} {T:/%6s} {T:/%7s} {T:/%8s}  {T:Size(s)}\n",
65ee5cf116SPhil Shafer 	    "Type", "InUse", "MemUse", "HighUse", "Requests");
66ee5cf116SPhil Shafer     xo_open_list("memory");
67ee5cf116SPhil Shafer     xo_open_instance("memory");
68ee5cf116SPhil Shafer 
69ee5cf116SPhil Shafer #define PRIu64 "llu"
70ee5cf116SPhil Shafer #define TO_ULL(_x) ((unsigned long long) _x)
71ee5cf116SPhil Shafer     xo_emit("{k:type/%13s} {:in-use/%5" PRIu64 "} "
72ee5cf116SPhil Shafer 	    "{:memory-use/%5" PRIu64 "}{U:K} {:high-use/%7s} "
73ee5cf116SPhil Shafer 	    "{:requests/%8" PRIu64 "}  ",
74ee5cf116SPhil Shafer 	    "name", TO_ULL(12345), TO_ULL(54321), "-", TO_ULL(32145));
75ee5cf116SPhil Shafer 
76ee5cf116SPhil Shafer     int first = 1, i;
77ee5cf116SPhil Shafer #if 0
78ee5cf116SPhil Shafer     xo_open_list("size");
79ee5cf116SPhil Shafer     for (i = 0; i < 32; i++) {
80ee5cf116SPhil Shafer 	if (!first)
81ee5cf116SPhil Shafer 	    xo_emit(",");
82ee5cf116SPhil Shafer 	xo_emit("{l:size/%d}", 1 << (i + 4));
83ee5cf116SPhil Shafer 	first = 0;
84ee5cf116SPhil Shafer     }
85ee5cf116SPhil Shafer     xo_close_list("size");
86ee5cf116SPhil Shafer #endif
87ee5cf116SPhil Shafer     xo_close_instance("memory");
88ee5cf116SPhil Shafer     xo_emit("\n");
89ee5cf116SPhil Shafer     xo_close_list("memory");
90ee5cf116SPhil Shafer 
91ee5cf116SPhil Shafer     while (opt_count-- != 0) {
92ee5cf116SPhil Shafer 	for (ep = employees; ep->e_first; ep++) {
9331337658SMarcel Moolenaar 	    xo_open_instance("employee");
94ee5cf116SPhil Shafer 	    xo_emit("{:first-name} {:last-name} works in "
95ee5cf116SPhil Shafer 		    "dept #{:department/%u}\n",
9631337658SMarcel Moolenaar 		    ep->e_first, ep->e_last, ep->e_dept);
9731337658SMarcel Moolenaar 	    xo_close_instance("employee");
9831337658SMarcel Moolenaar 	}
99ee5cf116SPhil Shafer     }
100ee5cf116SPhil Shafer 
101ee5cf116SPhil Shafer     xo_emit("done\n");
10231337658SMarcel Moolenaar 
10331337658SMarcel Moolenaar     xo_close_list("employee");
10431337658SMarcel Moolenaar     xo_close_container("employees");
10531337658SMarcel Moolenaar 
10631337658SMarcel Moolenaar     xo_finish();
10731337658SMarcel Moolenaar 
10831337658SMarcel Moolenaar     return 0;
10931337658SMarcel Moolenaar }
110