nx_compare_growth_json_20260910.nx source
↩ module page · 104 lines · 6243 B
1// Caller-buffer JSON projection reuses the existing qualified JSON writer.
2import "nx_compare_growth_lib_20260910.nx"
3import "json_emit.nx"
4const CG_JSON_WRITER_WORDS: i64=5
5func cg_jkey(w: *JsonWriter,key: *u8) -> i64 { return json_emit_key(w,key,bf_slen(key)) }
6func cg_jstr(w: *JsonWriter,s: *u8) -> i64 { return json_emit_string(w,s,bf_slen(s)) }
7func cg_jfield(w: *JsonWriter,m: *CgModel,row: i64,col: i64,key: *u8) -> i64 {
8 if cg_jkey(w,key)<0 { return JE_ERR_OVERFLOW }
9 var o: i64=0; let n: i64=cg_field(m,row,col,&o)
10 return json_emit_string(w,((m.plan as i64)+o) as *u8,n)
11}
12func cg_jnull(w: *JsonWriter,key: *u8) -> i64 {
13 if cg_jkey(w,key)<0 { return JE_ERR_OVERFLOW }
14 return json_emit_null(w)
15}
16func cg_jrows(w: *JsonWriter,m: *CgModel,kind: i64) -> i64 {
17 if json_begin_array(w)<0 { return JE_ERR_OVERFLOW }
18 if m.error==0 {
19 var row: i64=0
20 while row<m.count {
21 if m.rows[row*CG_ROW_WORDS]==kind {
22 if json_begin_object(w)<0 { return JE_ERR_OVERFLOW }
23 if cg_jfield(w,m,row,2,"id" as *u8)<0 { return JE_ERR_OVERFLOW }
24 if kind==1 {
25 if cg_jfield(w,m,row,3,"rung_id" as *u8)<0 { return JE_ERR_OVERFLOW }
26 if cg_jfield(w,m,row,4,"entry_basis" as *u8)<0 { return JE_ERR_OVERFLOW }
27 if cg_jfield(w,m,row,5,"target_id" as *u8)<0 { return JE_ERR_OVERFLOW }
28 if cg_jfield(w,m,row,6,"research_refs_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
29 if cg_jfield(w,m,row,7,"learned_model_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
30 if cg_jfield(w,m,row,8,"questions_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
31 }
32 if kind==2 {
33 if cg_jfield(w,m,row,3,"path_id" as *u8)<0 { return JE_ERR_OVERFLOW }
34 if cg_jfield(w,m,row,4,"prerequisite_exercises_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
35 if cg_jfield(w,m,row,5,"contract_symbol_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
36 if cg_jfield(w,m,row,6,"tool_or_api_ref_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
37 if cg_jfield(w,m,row,7,"workload_ref_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
38 if cg_jfield(w,m,row,8,"resource_ref_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
39 if cg_jfield(w,m,row,9,"acceptance_ref_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
40 if cg_jfield(w,m,row,10,"failure_next_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
41 }
42 if kind==3 {
43 if cg_jfield(w,m,row,3,"path_id" as *u8)<0 { return JE_ERR_OVERFLOW }
44 if cg_jfield(w,m,row,4,"scope_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
45 if cg_jfield(w,m,row,5,"asserted_stage" as *u8)<0 { return JE_ERR_OVERFLOW }
46 if cg_jfield(w,m,row,6,"evidence_refs_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
47 if cg_jfield(w,m,row,7,"assessed_unix_text" as *u8)<0 { return JE_ERR_OVERFLOW }
48 if cg_jfield(w,m,row,8,"assessor_ref_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
49 if cg_jfield(w,m,row,9,"supersedes_assessment_id_authored" as *u8)<0 { return JE_ERR_OVERFLOW }
50 }
51 if cg_jnull(w,"evidence_validated_stage" as *u8)<0 { return JE_ERR_OVERFLOW }
52 if cg_jnull(w,"evidence_verified" as *u8)<0 { return JE_ERR_OVERFLOW }
53 if cg_jnull(w,"evidence_age_seconds" as *u8)<0 { return JE_ERR_OVERFLOW }
54 if cg_jnull(w,"investment_observed" as *u8)<0 { return JE_ERR_OVERFLOW }
55 if cg_jnull(w,"investment_uncertainty" as *u8)<0 { return JE_ERR_OVERFLOW }
56 if cg_jkey(w,"reference_resolution" as *u8)<0 { return JE_ERR_OVERFLOW }
57 if cg_jstr(w,"local_graph_only_external_refs_unresolved" as *u8)<0 { return JE_ERR_OVERFLOW }
58 if json_end_object(w)<0 { return JE_ERR_OVERFLOW }
59 }
60 row=row+1
61 }
62 }
63 return json_end_array(w)
64}
65func cg_json_write(w: *JsonWriter,m: *CgModel) -> i64 {
66 if json_begin_object(w)<0 { return JE_ERR_OVERFLOW }
67 if cg_jkey(w,"v" as *u8)<0 { return JE_ERR_OVERFLOW }
68 if json_emit_int(w,1)<0 { return JE_ERR_OVERFLOW }
69 if cg_jkey(w,"status" as *u8)<0 { return JE_ERR_OVERFLOW }
70 if m.error!=0 {
71 if cg_jstr(w,"invalid_authored_growth" as *u8)<0 { return JE_ERR_OVERFLOW }
72 } else {
73 if m.count==0 { if cg_jstr(w,"not_declared" as *u8)<0 { return JE_ERR_OVERFLOW } } else {
74 if cg_jstr(w,"authored_graph_valid" as *u8)<0 { return JE_ERR_OVERFLOW }
75 }
76 }
77 if cg_jkey(w,"code" as *u8)<0 { return JE_ERR_OVERFLOW }
78 if json_emit_int(w,m.error)<0 { return JE_ERR_OVERFLOW }
79 if cg_jkey(w,"error_growth_row" as *u8)<0 { return JE_ERR_OVERFLOW }
80 if json_emit_int(w,m.error_row)<0 { return JE_ERR_OVERFLOW }
81 if cg_jkey(w,"scope" as *u8)<0 { return JE_ERR_OVERFLOW }
82 if cg_jstr(w,"authored_growth_graph_not_behavior_or_mastery" as *u8)<0 { return JE_ERR_OVERFLOW }
83 if cg_jkey(w,"paths" as *u8)<0 { return JE_ERR_OVERFLOW }
84 if cg_jrows(w,m,CG_PATH)<0 { return JE_ERR_OVERFLOW }
85 if cg_jkey(w,"exercises" as *u8)<0 { return JE_ERR_OVERFLOW }
86 if cg_jrows(w,m,CG_EXERCISE)<0 { return JE_ERR_OVERFLOW }
87 if cg_jkey(w,"assessments" as *u8)<0 { return JE_ERR_OVERFLOW }
88 if cg_jrows(w,m,CG_ASSESSMENT)<0 { return JE_ERR_OVERFLOW }
89 return json_end_object(w)
90}
91func cg_json_into(m: *CgModel,buf: *u8,cap: i64) -> i64 {
92 if (m as i64)<=0 { return CG_E_INPUT }
93 if cap<=0 { return CG_E_CAPACITY }
94 if (buf as i64)<=0 { return CG_E_INPUT }
95 let w: *JsonWriter=sys_mmap(CG_JSON_WRITER_WORDS*8) as *JsonWriter
96 if (w as i64)<=0 { return CG_E_CAPACITY }
97 let rc: i64=json_writer_init(w,buf,cap)
98 if rc<0 { sys_munmap(w as *u8,CG_JSON_WRITER_WORDS*8); return rc }
99 let emitted: i64=cg_json_write(w,m)
100 let n: i64=w.pos
101 sys_munmap(w.prior,JE_MAX_DEPTH+16); sys_munmap(w as *u8,CG_JSON_WRITER_WORDS*8)
102 if emitted<0 { return emitted }
103 return n
104}