Skip to content

http.frm.body

请求体绑定(P6-C;JSON typed 绑定 + multipart/form-data)

语义登记(v1 口径,偏离/志向逐条):

① JSON 绑定面(jv_/jk_ 便捷面;T53 后 std/json 内部恒经 jget_ Result 数值面——发射臂 union 载荷 64 位+位双关闭环,跨模块 Result 数值载荷保真): body_json(text, cap) = 解析入口(text.len > cap 即拒,先于 parse); parse 的 Result[List,] match 为发射面已证形(json_fidelity d 先例, Err-Str 载荷绿)。字段提取【只】走 jv_/jk_(值 jv_ 带默认 / kind jk_*)。字符串面 = qtag(qtag=="s") + qval(载荷原文)。required 语义 = breq_i64:rc 1 ok / 0 noent / 2 他类(kind 细分经 bj_i64_kind);带默认语义 = bj_i64。

② multipart/form-data(RFC 2046 §5.1):字节道 List[I32](router.ct body 绑定字节道登记同向 —— 二进制文件件 Str 载不下)。解析: delimiter = CRLF "--" boundary 行首锚定(RFC 2046 §5.1.1 「delimiters 于行首」—— 【行中 boundary 字节即惰性数据】,无歧义不另拒;组合层 生成侧仍须选与内容不相交的 boundary,签发纪律登记);首 delimiter 前的 preamble 丢弃;transport padding(LWSP)容忍;close delimiter "--bnd--" 后 epilogue 丢弃;【缺 close delimiter → Err】(why 4, 题面钉);首 delimiter 缺 → why 3;part 头区 CRLFCRLF 缺 → why 5; Content-Disposition 缺 name / 非 form-data 型 → why 6;part 数超 4 槽 → why 7(槽上限同路由参数 4 槽先例);总量 cap 先验 → why 1。 boundary 提取 = Content-Type 参数扫描(CI;quoted/unquoted 双形; RFC 2046 bchars 域 1..70、尾空格拒 —— 构造期校验注入面封口)。 name/filename = quoted-string(反斜杠转义登记缺席,从严拒)/ token 双形;filename 缺 = 表单字段(空串)。part 数据面 = 原始字节(mp_data, 文件件)+ 可印 Str 便捷面(mp_field,表格构建域 —— 出域即 "",与 frm_slice_str 域一致,歧义登记)。大文件流式 = P8(内存版,总量 cap)。

use 面:std.json 单叶(jv_/jk_/qtag/qval/parse;消费方若自用 std.json 再 use 本模块 = 同叶双径 E5020,禁)。byte_at/byte_slice = 内建。【utf8_enc 内建禁用】(P6-C 实证:解释臂恒产 U+FFFD 替换列, 双臂劈叉 —— auth.ct 头注同款登记;单字节 Str 构建 = bd_ch 表格面)。 私铸助手 bd_ 前缀(auth.ct au_ 前缀异名 —— 两模块同 fixture 并用时 use 合并单一命名空间,同名 decl 即 E5030,规避)。

pub struct

struct BJson

Field Type
rc I64
why I64
emsg Str
es List[List[Str]]

struct BStr

字符串读取(qtag/qval 面;rc 1 ok / 0 noent / 2 非字符串)

Field Type
rc I64
v Str

struct BI64

required 读取(rc 1 ok / 0 noent / 2 他类 —— kind 细分经 bj_i64_kind)

Field Type
rc I64
v I64

struct MpB

boundary 提取结果(rc 1 + 值 / 0)

Field Type
rc I64
v Str

struct MpParse

Field Type
rc I64
why I64
n I64
nm0 Str
nm1 Str
nm2 Str
nm3 Str
fn0 Str
fn1 Str
fn2 Str
fn3 Str
d0 List[I32]
d1 List[I32]
d2 List[I32]
d3 List[I32]
dl0 I64
dl1 I64
dl2 I64
dl3 I64

pub fn

Signature Returns Description
body_err_ok() I64 why 码
body_err_parse() I64 —
body_err_cap() I64 —
bj_rc(b: BJson) I64 —
bj_why(b: BJson) I64 —
bj_emsg(b: BJson) Str —
body_json(text: Str, cap: I64) BJson 解析入口(cap = text.len 上限,先验后析;Err 载荷原文面 bj_emsg)
bj_i64(b: BJson, path: Str, dft: I64) I64 带默认读取(jv_ 便捷面;dft 域)
bj_f64(b: BJson, path: Str, dft: F64) F64 —
bj_bool(b: BJson, path: Str, dft: Bool) Bool —
bj_i64_kind(b: BJson, path: Str) Str kind 查询("ok" 或 noent/null/type/frac/range/syn)
bj_bool_kind(b: BJson, path: Str) Str —
bs_rc(x: BStr) I64 —
bs_v(x: BStr) Str —
bj_str(b: BJson, path: Str) BStr —
bi_rc(x: BI64) I64 —
bi_v(x: BI64) I64 —
breq_i64(b: BJson, path: Str) BI64 —
mp_err_ok() I64 why 码
mp_err_cap() I64 —
mp_err_bnd() I64 —
mp_err_nofirst() I64 —
mp_err_noclose() I64 —
mp_err_hdr() I64 —
mp_err_disp() I64 —
mp_err_many() I64 —
mp_err_delim() I64 —
mp_err_over() I64 —
mb_rc(x: MpB) I64 —
mb_v(x: MpB) Str —
mp_boundary(ct: Str) MpB Content-Type → boundary(CI 参数扫描;quoted/unquoted;OWS 容忍)
mp_rc(p: MpParse) I64 —
mp_why(p: MpParse) I64 —
mp_n(p: MpParse) I64 —
mp_name(p: MpParse, k: I64) Str —
mp_fname(p: MpParse, k: I64) Str —
mp_data(p: MpParse, k: I64) List[I32] —
mp_dlen(p: MpParse, k: I64) I64 —
mp_field(p: MpParse, k: I64) Str part 数据便捷 Str 面(可印表格域;出域/文件件 → "")
mp_parse(body: List[I32], blen: I64, bnd: Str, cap: I64) MpParse 主入口:body 字节道 + 长度 + boundary + 总量 cap。语义见头注②。