MCPcopy Create free account
hub / github.com/dylan-sutton-chavez/edge-python / parse_object_pairs

Function parse_object_pairs

std/json/src/main/parser.rs:123–157  ·  view source on GitHub ↗
(tk: &mut Tokenizer, ctx: &LoadCtx)

Source from the content-addressed store, hash-verified

121}
122
123fn parse_object_pairs(tk: &mut Tokenizer, ctx: &LoadCtx) -> Result<Handle> {
124 let mut pairs: Vec<(Handle, Handle)> = Vec::new();
125 let first = tk.next_token().map_err(to_pdk_err)?;
126 if !matches!(first, Token::RBrace) {
127 let mut current = first;
128 loop {
129 let key_str = match current {
130 Token::Str(s) => s,
131 _ => return Err(value_err(tk.pos(), "object key must be a string")),
132 };
133 let key = encode(Value::Bytes(key_str.into_bytes()))?;
134 match tk.next_token().map_err(to_pdk_err)? {
135 Token::Colon => {}
136 _ => return Err(value_err(tk.pos(), "expected ':' after object key")),
137 }
138 let value = parse_value(tk, ctx)?;
139 pairs.push((key, value));
140 match tk.next_token().map_err(to_pdk_err)? {
141 Token::Comma => current = tk.next_token().map_err(to_pdk_err)?,
142 Token::RBrace => break,
143 _ => return Err(value_err(tk.pos(), "expected ',' or '}' in object")),
144 }
145 }
146 }
147 // Materialise as `list[list[key, val]]`; CPython hands `list[tuple]` but wasm-pdk has no `new_tuple` (the hook can `tuple(p) for p in pairs` if it needs them).
148 let list = Handle::new_list()?;
149 for (k, v) in pairs {
150 let pair = Handle::new_list()?;
151 pair.call("append", &[k.raw()])?;
152 pair.call("append", &[v.raw()])?;
153 list.call("append", &[pair.raw()])?;
154 }
155 let hook = ctx.object_pairs_hook.as_ref().unwrap();
156 hook.call("__call__", &[list.raw()])
157}
158
159fn apply_object_hook(dict: Handle, ctx: &LoadCtx) -> Result<Handle> {
160 if let Some(hook) = &ctx.object_hook {

Callers 1

parse_objectFunction · 0.85

Calls 9

value_errFunction · 0.85
BytesClass · 0.85
parse_valueFunction · 0.85
posMethod · 0.80
pushMethod · 0.80
encodeFunction · 0.50
next_tokenMethod · 0.45
callMethod · 0.45
rawMethod · 0.45

Tested by

no test coverage detected