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

Method read_number

std/json/src/main/tokenizer.rs:152–174  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

150 }
151
152 fn read_number(&mut self) -> Result<Token, JsonError> {
153 let start = self.pos;
154 let mut is_float = false;
155 if self.src[self.pos] == b'-' { self.pos += 1; }
156 while self.pos < self.src.len() && self.src[self.pos].is_ascii_digit() { self.pos += 1; }
157 if self.pos < self.src.len() && self.src[self.pos] == b'.' {
158 is_float = true;
159 self.pos += 1;
160 while self.pos < self.src.len() && self.src[self.pos].is_ascii_digit() { self.pos += 1; }
161 }
162 if self.pos < self.src.len() && matches!(self.src[self.pos], b'e' | b'E') {
163 is_float = true;
164 self.pos += 1;
165 if self.pos < self.src.len() && matches!(self.src[self.pos], b'+' | b'-') { self.pos += 1; }
166 while self.pos < self.src.len() && self.src[self.pos].is_ascii_digit() { self.pos += 1; }
167 }
168 let text = core::str::from_utf8(&self.src[start..self.pos]).map_err(|_| self.err("non-utf8 number"))?.to_string();
169 if is_float {
170 text.parse::<f64>().map(|f| Token::Float(f, text.clone())).map_err(|_| JsonError { msg: "invalid float".to_string(), pos: start })
171 } else {
172 text.parse::<i128>().map(|i| Token::Int(i, text.clone())).map_err(|_| JsonError { msg: "integer overflow".to_string(), pos: start })
173 }
174 }
175}
176
177fn utf8_len(b: u8) -> Option<usize> {

Callers 2

next_tokenMethod · 0.80

Calls 2

lenMethod · 0.45
errMethod · 0.45

Tested by

no test coverage detected