code wiki / (root) / nx_compare_growth_json_20260910.nx

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}