#include "../include/net.go.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void print_and_free(const char* label, char* s) {
if (s == NULL) {
printf("%s: <null>\n", label);
return;
}
printf("%s: %s\n", label, s);
net_free_string(s);
}
int main(void) {
{
const char* caps =
"{\"tags\": [\"hardware.gpu\", \"hardware.memory_gb=lots\","
" \"compute.gpu\"], \"metadata\": {\"region\": \"us-east\"}}";
char* report = NULL;
size_t report_len = 0;
int rc = net_validate_capabilities(caps, &report, &report_len);
if (rc != 0) {
fprintf(stderr, "validate_capabilities returned %d\n", rc);
return 1;
}
print_and_free("[validate] report", report);
}
{
const char* pred =
"{\"nodes\":["
"{\"kind\":\"exists\",\"key\":{\"axis\":\"hardware\",\"key\":\"gpu\"}},"
"{\"kind\":\"metadata_equals\",\"key\":\"region\",\"value\":\"us-east\"},"
"{\"kind\":\"and\",\"children\":[0,1]}"
"],\"root_idx\":2}";
const char* tags = "[\"hardware.gpu\"]";
const char* metadata = "{\"region\":\"us-east\"}";
int rc = net_predicate_evaluate(pred, tags, metadata);
printf("[evaluate] result: %d (1=match, 0=no-match, <0=error)\n", rc);
}
{
const char* pred =
"{\"nodes\":["
"{\"kind\":\"exists\",\"key\":{\"axis\":\"hardware\",\"key\":\"gpu\"}},"
"{\"kind\":\"metadata_equals\",\"key\":\"region\",\"value\":\"us-east\"},"
"{\"kind\":\"and\",\"children\":[0,1]}"
"],\"root_idx\":2}";
int result = -1;
char* trace = NULL;
size_t trace_len = 0;
int rc = net_predicate_evaluate_with_trace(
pred, "[\"hardware.gpu\"]", "{\"region\":\"us-east\"}",
&result, &trace, &trace_len);
if (rc != 0) {
fprintf(stderr, "evaluate_with_trace returned %d\n", rc);
return 1;
}
printf("[trace] result=%d\n", result);
print_and_free("[trace] tree", trace);
}
{
const char* pred =
"{\"nodes\":["
"{\"kind\":\"metadata_equals\",\"key\":\"region\",\"value\":\"us-east\"}"
"],\"root_idx\":0}";
const char* contexts =
"[{\"tags\":[],\"metadata\":{\"region\":\"us-east\"}},"
"{\"tags\":[],\"metadata\":{\"region\":\"us-west\"}},"
"{\"tags\":[],\"metadata\":{\"region\":\"us-east\"}}]";
char* report = NULL;
size_t report_len = 0;
int rc = net_predicate_aggregate_debug_report(pred, contexts, &report, &report_len);
if (rc != 0) {
fprintf(stderr, "aggregate_debug_report returned %d\n", rc);
return 1;
}
print_and_free("[report] aggregated", report);
}
{
const char* report =
"{"
"\"total_candidates\":10,"
"\"matched\":4,"
"\"clause_stats\":["
"{\"label\":\"MetadataEquals(api_key=sk-secret-1)\",\"evaluated\":10,\"matched\":4},"
"{\"label\":\"Exists(hardware.gpu)\",\"evaluated\":10,\"matched\":8}"
"]}";
const char* keys = "[\"api_key\"]";
char* redacted = NULL;
size_t redacted_len = 0;
int rc = net_predicate_redact_metadata_keys(report, keys, &redacted, &redacted_len);
if (rc != 0) {
fprintf(stderr, "redact_metadata_keys returned %d\n", rc);
return 1;
}
print_and_free("[redact] result", redacted);
}
{
const char* pred =
"{\"nodes\":["
"{\"kind\":\"exists\",\"key\":{\"axis\":\"hardware\",\"key\":\"gpu\"}}"
"],\"root_idx\":0}";
char* name = NULL;
size_t name_len = 0;
char* value = NULL;
size_t value_len = 0;
int rc = net_predicate_to_where_header(
pred, &name, &name_len, &value, &value_len);
if (rc != 0) {
fprintf(stderr, "to_where_header returned %d\n", rc);
return 1;
}
printf("[where] name=%.*s value_len=%zu\n",
(int)name_len, name, value_len);
printf("[where] value=%.*s\n", (int)value_len, value);
net_free_string(name);
net_free_string(value);
}
return 0;
}