#include <stdio.h>
#include "../../include/aam.h"
static void print_find_obj(const AamlHandle *h, const char *key)
{
char *val = aam_find_obj(h, key);
if (val) {
printf(" find_obj (\"%s\") → \"%s\"\n", key, val);
aam_string_free(val);
} else {
printf(" find_obj (\"%s\") → (not found)\n", key);
}
}
static void print_find_key(const AamlHandle *h, const char *value)
{
char *key = aam_find_key(h, value);
if (key) {
printf(" find_key (\"%s\") → \"%s\"\n", value, key);
aam_string_free(key);
} else {
printf(" find_key (\"%s\") → (not found)\n", value);
}
}
static void print_find_deep(const AamlHandle *h, const char *key)
{
char *val = aam_find_deep(h, key);
if (val) {
printf(" find_deep(\"%s\") → \"%s\"\n", key, val);
aam_string_free(val);
} else {
printf(" find_deep(\"%s\") → (not found)\n", key);
}
}
int main(void)
{
puts("═══════════════════════════════════════════════════════");
puts(" aam-rs C example — basic API");
puts("═══════════════════════════════════════════════════════\n");
AamlHandle *h = aam_new();
if (!h) {
fputs("error: aam_new() returned NULL\n", stderr);
return 1;
}
const char *content =
"app_name = my_app\n"
"version = 1.0.0\n"
"log_level = debug\n"
"theme = dark\n"
"debug = dark\n"
"timeout = 30\n"
"alias_a = alias_b\n"
"alias_b = alias_c\n"
"alias_c = terminal_value\n";
puts("▶ 1. aam_parse() — inline string");
if (aam_parse(h, content) != 0) {
fprintf(stderr, " parse error: %s\n", aam_last_error(h));
aam_free(h);
return 1;
}
puts(" ✔ parsed successfully\n");
puts("▶ 2. aam_find_obj() — forward lookup (key → value)");
print_find_obj(h, "app_name");
print_find_obj(h, "version");
print_find_obj(h, "log_level");
print_find_obj(h, "missing_key");
putchar('\n');
puts("▶ 3. aam_find_key() — reverse lookup (value → key)");
print_find_key(h, "my_app");
print_find_key(h, "dark");
print_find_key(h, "no_such_value");
putchar('\n');
puts("▶ 4. aam_find_deep() — follows alias chain until terminal");
puts(" alias_a → alias_b → alias_c → terminal_value");
print_find_deep(h, "alias_a");
print_find_deep(h, "alias_b");
print_find_deep(h, "alias_c");
print_find_deep(h, "app_name");
putchar('\n');
puts("▶ 5. aam_last_error() — trigger a parse error");
if (aam_parse(h, "@import /no/such/file.aam") != 0) {
printf(" ✔ got expected error: %s\n", aam_last_error(h));
}
putchar('\n');
aam_free(h);
puts("═══════════════════════════════════════════════════════");
puts(" Done.");
puts("═══════════════════════════════════════════════════════");
return 0;
}