1use temper_core::AnyValueTrait;
2use temper_core::AsAnyValue;
3use temper_core::Pair;
4pub (crate) fn init() -> temper_core::Result<()> {
5 static INIT_ONCE: std::sync::OnceLock<temper_core::Result<()>> = std::sync::OnceLock::new();
6 INIT_ONCE.get_or_init(| |{
7 NULL_INTERCHANGE_CONTEXT__INSTANCE.set(NullInterchangeContext::new()).unwrap_or_else(| _ | panic!());
8 let JSON_STATE_OPEN_OBJECT__366: i32 = 0;
9 let JSON_STATE_AFTER_KEY__367: i32 = 1;
10 let JSON_STATE_AFTER_PROPERTY__368: i32 = 2;
11 let JSON_STATE_OPEN_ARRAY__369: i32 = 3;
12 let JSON_STATE_AFTER_ELEMENT__370: i32 = 4;
13 let JSON_STATE_NO_VALUE__371: i32 = 5;
14 let JSON_STATE_ONE_VALUE__372: i32 = 6;
15 HEX_DIGITS.set(std::sync::Arc::new(vec![std::sync::Arc::new("0".to_string()), std::sync::Arc::new("1".to_string()), std::sync::Arc::new("2".to_string()), std::sync::Arc::new("3".to_string()), std::sync::Arc::new("4".to_string()), std::sync::Arc::new("5".to_string()), std::sync::Arc::new("6".to_string()), std::sync::Arc::new("7".to_string()), std::sync::Arc::new("8".to_string()), std::sync::Arc::new("9".to_string()), std::sync::Arc::new("a".to_string()), std::sync::Arc::new("b".to_string()), std::sync::Arc::new("c".to_string()), std::sync::Arc::new("d".to_string()), std::sync::Arc::new("e".to_string()), std::sync::Arc::new("f".to_string())])).unwrap_or_else(| _ | panic!());
16 let minInt64__374: i64 = -9223372036854775808;
17 Ok(())
18 }).clone()
19}
20static HEX_DIGITS: std::sync::OnceLock<temper_core::List<std::sync::Arc<String>>> = std::sync::OnceLock::new();
21fn hex_digits() -> temper_core::List<std::sync::Arc<String>> {
22 ( * HEX_DIGITS.get().unwrap()).clone()
23}
24pub trait InterchangeContextTrait: temper_core::AsAnyValue + temper_core::AnyValueTrait + std::marker::Send + std::marker::Sync {
25 fn clone_boxed(& self) -> InterchangeContext;
26 fn get_header(& self, headerName__376: std::sync::Arc<String>) -> Option<std::sync::Arc<String>>;
27}
28#[ derive(Clone)] pub struct InterchangeContext(std::sync::Arc<dyn InterchangeContextTrait>);
29impl InterchangeContext {
30pub fn new(selfish: impl InterchangeContextTrait + 'static) -> InterchangeContext {
31 InterchangeContext(std::sync::Arc::new(selfish))
32}
33}
34temper_core::impl_any_value_trait_for_interface!(InterchangeContext);
35impl std::ops::Deref for InterchangeContext {
36type Target = dyn InterchangeContextTrait;
37fn deref(& self) -> & Self::Target {
38 & ( * self.0)
39}
40}
41struct NullInterchangeContextStruct {}
42#[ derive(Clone)] pub struct NullInterchangeContext(std::sync::Arc<NullInterchangeContextStruct>);
43static NULL_INTERCHANGE_CONTEXT__INSTANCE: std::sync::OnceLock<NullInterchangeContext> = std::sync::OnceLock::new();
44impl NullInterchangeContext {
45pub fn get_header(& self, headerName__379: impl temper_core::ToArcString) -> Option<std::sync::Arc<String>> {
46 let headerName__379 = headerName__379.to_arc_string();
47 return None;
48}
49pub fn instance() -> NullInterchangeContext {
50 ( * NULL_INTERCHANGE_CONTEXT__INSTANCE.get().unwrap()).clone()
51}
52pub fn new() -> NullInterchangeContext {
53 let selfish = NullInterchangeContext(std::sync::Arc::new(NullInterchangeContextStruct {}));
54 return selfish;
55}
56}
57impl InterchangeContextTrait for NullInterchangeContext {
58fn clone_boxed(& self) -> InterchangeContext {
59 InterchangeContext::new(self.clone())
60}
61fn get_header(& self, headerName__379: std::sync::Arc<String>) -> Option<std::sync::Arc<String>> {
62 self.get_header(headerName__379)
63}
64}
65temper_core::impl_any_value_trait!(NullInterchangeContext, [InterchangeContext]);
66pub trait JsonProducerTrait: temper_core::AsAnyValue + temper_core::AnyValueTrait + std::marker::Send + std::marker::Sync {
67fn clone_boxed(& self) -> JsonProducer;
68fn interchange_context(& self) -> InterchangeContext;
69fn start_object(& self);
70fn end_object(& self);
71fn object_key(& self, key__389: std::sync::Arc<String>);
72fn start_array(& self);
73fn end_array(& self);
74fn null_value(& self);
75fn boolean_value(& self, x__398: bool);
76fn int32_value(& self, x__401: i32);
77fn int64_value(& self, x__404: i64);
78fn float64_value(& self, x__407: f64);
79fn numeric_token_value(& self, x__410: std::sync::Arc<String>);
80fn string_value(& self, x__413: std::sync::Arc<String>);
81fn parse_error_receiver(& self) -> Option<JsonParseErrorReceiver> {
82 return None;
83}
84}
85#[ derive(Clone)] pub struct JsonProducer(std::sync::Arc<dyn JsonProducerTrait>);
86impl JsonProducer {
87pub fn new(selfish: impl JsonProducerTrait + 'static) -> JsonProducer {
88 JsonProducer(std::sync::Arc::new(selfish))
89}
90}
91temper_core::impl_any_value_trait_for_interface!(JsonProducer);
92impl std::ops::Deref for JsonProducer {
93type Target = dyn JsonProducerTrait;
94fn deref(& self) -> & Self::Target {
95 & ( * self.0)
96}
97}
98pub enum JsonSyntaxTreeEnum {
99JsonObject(JsonObject), JsonArray(JsonArray), JsonBoolean(JsonBoolean), JsonNull(JsonNull), JsonString(JsonString), JsonNumeric(JsonNumeric)
100}
101pub trait JsonSyntaxTreeTrait: temper_core::AsAnyValue + temper_core::AnyValueTrait + std::marker::Send + std::marker::Sync {
102fn as_enum(& self) -> JsonSyntaxTreeEnum;
103fn clone_boxed(& self) -> JsonSyntaxTree;
104fn produce(& self, p__418: JsonProducer);
105}
106#[ derive(Clone)] pub struct JsonSyntaxTree(std::sync::Arc<dyn JsonSyntaxTreeTrait>);
107impl JsonSyntaxTree {
108pub fn new(selfish: impl JsonSyntaxTreeTrait + 'static) -> JsonSyntaxTree {
109 JsonSyntaxTree(std::sync::Arc::new(selfish))
110}
111}
112temper_core::impl_any_value_trait_for_interface!(JsonSyntaxTree);
113impl std::ops::Deref for JsonSyntaxTree {
114type Target = dyn JsonSyntaxTreeTrait;
115fn deref(& self) -> & Self::Target {
116 & ( * self.0)
117}
118}
119struct JsonObjectStruct {
120properties: temper_core::Map<std::sync::Arc<String>, temper_core::List<JsonSyntaxTree>>
121}
122#[ derive(Clone)] pub struct JsonObject(std::sync::Arc<JsonObjectStruct>);
123impl JsonObject {
124pub fn property_value_or_null(& self, propertyKey__422: impl temper_core::ToArcString) -> Option<JsonSyntaxTree> {
125 let propertyKey__422 = propertyKey__422.to_arc_string();
126 let return__209: Option<JsonSyntaxTree>;
127 let treeList__424: temper_core::List<JsonSyntaxTree> = temper_core::MappedTrait::get_or( & self.0.properties, propertyKey__422.clone(), std::sync::Arc::new(vec![]));
128 let lastIndex__425: i32 = temper_core::ListedTrait::len( & treeList__424).wrapping_sub(1);
129 if Some(lastIndex__425) >= Some(0) {
130 return__209 = Some(temper_core::ListedTrait::get( & treeList__424, lastIndex__425));
131 } else {
132 return__209 = None;
133 }
134 return return__209.clone();
135}
136pub fn property_value_or_bubble(& self, propertyKey__427: impl temper_core::ToArcString) -> temper_core::Result<JsonSyntaxTree> {
137 let propertyKey__427 = propertyKey__427.to_arc_string();
138 let return__210: JsonSyntaxTree;
139 let mut t___2518: Option<JsonSyntaxTree> = self.property_value_or_null(propertyKey__427.clone());
140 if t___2518.is_none() {
141 return Err(temper_core::Error::new());
142 } else {
143 return__210 = t___2518.clone().unwrap();
144 }
145 return Ok(return__210.clone());
146}
147pub fn produce(& self, p__430: JsonProducer) {
148 p__430.start_object();
149 #[ derive(Clone)] struct ClosureGroup___1 {
150 p__430: JsonProducer
151}
152impl ClosureGroup___1 {
153 fn fn__2513(& self, k__432: impl temper_core::ToArcString, vs__433: impl temper_core::ToList<JsonSyntaxTree>) {
154 let k__432 = k__432.to_arc_string();
155 let vs__433 = vs__433.to_list();
156 #[ derive(Clone)] struct ClosureGroup___2 {
157 p__430: JsonProducer, k__432: std::sync::Arc<String>
158 }
159 impl ClosureGroup___2 {
160 fn fn__2510(& self, v__434: JsonSyntaxTree) {
161 self.p__430.object_key(self.k__432.clone());
162 v__434.produce(self.p__430.clone());
163 }
164 }
165 let closure_group = ClosureGroup___2 {
166 p__430: self.p__430.clone(), k__432: k__432.clone()
167 };
168 let fn__2510 = {
169 let closure_group = closure_group.clone();
170 std::sync::Arc::new(move | v__434: JsonSyntaxTree | closure_group.fn__2510(v__434))
171 };
172 temper_core::listed::list_for_each( & vs__433, & ( * fn__2510.clone()));
173}
174}
175let closure_group = ClosureGroup___1 {
176p__430: p__430.clone()
177};
178let fn__2513 = {
179let closure_group = closure_group.clone();
180std::sync::Arc::new(move | k__432: std::sync::Arc<String>, vs__433: temper_core::List<JsonSyntaxTree> | closure_group.fn__2513(k__432, vs__433))
181};
182temper_core::MappedTrait::for_each( & self.0.properties, & ( * fn__2513.clone()));
183p__430.end_object();
184}
185pub fn new(properties__436: temper_core::Map<std::sync::Arc<String>, temper_core::List<JsonSyntaxTree>>) -> JsonObject {
186let properties;
187properties = properties__436.clone();
188let selfish = JsonObject(std::sync::Arc::new(JsonObjectStruct {
189 properties
190}));
191return selfish;
192}
193pub fn properties(& self) -> temper_core::Map<std::sync::Arc<String>, temper_core::List<JsonSyntaxTree>> {
194return self.0.properties.clone();
195}
196}
197impl JsonSyntaxTreeTrait for JsonObject {
198fn as_enum(& self) -> JsonSyntaxTreeEnum {
199 JsonSyntaxTreeEnum::JsonObject(self.clone())
200}
201fn clone_boxed(& self) -> JsonSyntaxTree {
202 JsonSyntaxTree::new(self.clone())
203}
204fn produce(& self, p__430: JsonProducer) {
205 self.produce(p__430)
206}
207}
208temper_core::impl_any_value_trait!(JsonObject, [JsonSyntaxTree]);
209struct JsonArrayStruct {
210elements: temper_core::List<JsonSyntaxTree>
211}
212#[ derive(Clone)] pub struct JsonArray(std::sync::Arc<JsonArrayStruct>);
213impl JsonArray {
214pub fn produce(& self, p__439: JsonProducer) {
215 p__439.start_array();
216 #[ derive(Clone)] struct ClosureGroup___3 {
217 p__439: JsonProducer
218}
219impl ClosureGroup___3 {
220 fn fn__2503(& self, v__441: JsonSyntaxTree) {
221 v__441.produce(self.p__439.clone());
222 }
223}
224let closure_group = ClosureGroup___3 {
225 p__439: p__439.clone()
226};
227let fn__2503 = {
228 let closure_group = closure_group.clone();
229 std::sync::Arc::new(move | v__441: JsonSyntaxTree | closure_group.fn__2503(v__441))
230};
231temper_core::listed::list_for_each( & self.0.elements, & ( * fn__2503.clone()));
232p__439.end_array();
233}
234pub fn new(elements__443: impl temper_core::ToList<JsonSyntaxTree>) -> JsonArray {
235let elements__443 = elements__443.to_list();
236let elements;
237elements = elements__443.clone();
238let selfish = JsonArray(std::sync::Arc::new(JsonArrayStruct {
239 elements
240}));
241return selfish;
242}
243pub fn elements(& self) -> temper_core::List<JsonSyntaxTree> {
244return self.0.elements.clone();
245}
246}
247impl JsonSyntaxTreeTrait for JsonArray {
248fn as_enum(& self) -> JsonSyntaxTreeEnum {
249 JsonSyntaxTreeEnum::JsonArray(self.clone())
250}
251fn clone_boxed(& self) -> JsonSyntaxTree {
252 JsonSyntaxTree::new(self.clone())
253}
254fn produce(& self, p__439: JsonProducer) {
255 self.produce(p__439)
256}
257}
258temper_core::impl_any_value_trait!(JsonArray, [JsonSyntaxTree]);
259struct JsonBooleanStruct {
260content: bool
261}
262#[ derive(Clone)] pub struct JsonBoolean(std::sync::Arc<JsonBooleanStruct>);
263impl JsonBoolean {
264pub fn produce(& self, p__446: JsonProducer) {
265 p__446.boolean_value(self.0.content);
266}
267pub fn new(content__449: bool) -> JsonBoolean {
268 let content;
269 content = content__449;
270 let selfish = JsonBoolean(std::sync::Arc::new(JsonBooleanStruct {
271 content
272 }));
273 return selfish;
274}
275pub fn content(& self) -> bool {
276 return self.0.content;
277}
278}
279impl JsonSyntaxTreeTrait for JsonBoolean {
280fn as_enum(& self) -> JsonSyntaxTreeEnum {
281 JsonSyntaxTreeEnum::JsonBoolean(self.clone())
282}
283fn clone_boxed(& self) -> JsonSyntaxTree {
284 JsonSyntaxTree::new(self.clone())
285}
286fn produce(& self, p__446: JsonProducer) {
287 self.produce(p__446)
288}
289}
290temper_core::impl_any_value_trait!(JsonBoolean, [JsonSyntaxTree]);
291struct JsonNullStruct {}
292#[ derive(Clone)] pub struct JsonNull(std::sync::Arc<JsonNullStruct>);
293impl JsonNull {
294pub fn produce(& self, p__451: JsonProducer) {
295 p__451.null_value();
296}
297pub fn new() -> JsonNull {
298 let selfish = JsonNull(std::sync::Arc::new(JsonNullStruct {}));
299 return selfish;
300}
301}
302impl JsonSyntaxTreeTrait for JsonNull {
303fn as_enum(& self) -> JsonSyntaxTreeEnum {
304 JsonSyntaxTreeEnum::JsonNull(self.clone())
305}
306fn clone_boxed(& self) -> JsonSyntaxTree {
307 JsonSyntaxTree::new(self.clone())
308}
309fn produce(& self, p__451: JsonProducer) {
310 self.produce(p__451)
311}
312}
313temper_core::impl_any_value_trait!(JsonNull, [JsonSyntaxTree]);
314struct JsonStringStruct {
315content: std::sync::Arc<String>
316}
317#[ derive(Clone)] pub struct JsonString(std::sync::Arc<JsonStringStruct>);
318impl JsonString {
319pub fn produce(& self, p__456: JsonProducer) {
320 p__456.string_value(self.0.content.clone());
321}
322pub fn new(content__459: impl temper_core::ToArcString) -> JsonString {
323 let content__459 = content__459.to_arc_string();
324 let content;
325 content = content__459.clone();
326 let selfish = JsonString(std::sync::Arc::new(JsonStringStruct {
327 content
328 }));
329 return selfish;
330}
331pub fn content(& self) -> std::sync::Arc<String> {
332 return self.0.content.clone();
333}
334}
335impl JsonSyntaxTreeTrait for JsonString {
336fn as_enum(& self) -> JsonSyntaxTreeEnum {
337 JsonSyntaxTreeEnum::JsonString(self.clone())
338}
339fn clone_boxed(& self) -> JsonSyntaxTree {
340 JsonSyntaxTree::new(self.clone())
341}
342fn produce(& self, p__456: JsonProducer) {
343 self.produce(p__456)
344}
345}
346temper_core::impl_any_value_trait!(JsonString, [JsonSyntaxTree]);
347pub enum JsonNumericEnum {
348JsonInt32(JsonInt32), JsonInt64(JsonInt64), JsonFloat64(JsonFloat64), JsonNumericToken(JsonNumericToken)
349}
350pub trait JsonNumericTrait: temper_core::AsAnyValue + temper_core::AnyValueTrait + std::marker::Send + std::marker::Sync + JsonSyntaxTreeTrait {
351fn as_enum(& self) -> JsonNumericEnum;
352fn clone_boxed(& self) -> JsonNumeric;
353fn as_json_numeric_token(& self) -> std::sync::Arc<String>;
354fn as_int32(& self) -> temper_core::Result<i32>;
355fn as_int64(& self) -> temper_core::Result<i64>;
356fn as_float64(& self) -> temper_core::Result<f64>;
357}
358#[ derive(Clone)] pub struct JsonNumeric(std::sync::Arc<dyn JsonNumericTrait>);
359impl JsonNumeric {
360pub fn new(selfish: impl JsonNumericTrait + 'static) -> JsonNumeric {
361 JsonNumeric(std::sync::Arc::new(selfish))
362}
363}
364temper_core::impl_any_value_trait_for_interface!(JsonNumeric);
365impl std::ops::Deref for JsonNumeric {
366type Target = dyn JsonNumericTrait;
367fn deref(& self) -> & Self::Target {
368 & ( * self.0)
369}
370}
371struct JsonInt32Struct {
372content: i32
373}
374#[ derive(Clone)] pub struct JsonInt32(std::sync::Arc<JsonInt32Struct>);
375impl JsonInt32 {
376pub fn produce(& self, p__470: JsonProducer) {
377 p__470.int32_value(self.0.content);
378}
379pub fn as_json_numeric_token(& self) -> std::sync::Arc<String> {
380 return temper_core::int_to_string(self.0.content, None);
381}
382pub fn as_int32(& self) -> i32 {
383 return self.0.content;
384}
385pub fn as_int64(& self) -> i64 {
386 return self.0.content as i64;
387}
388pub fn as_float64(& self) -> f64 {
389 return self.0.content as f64;
390}
391pub fn new(content__481: i32) -> JsonInt32 {
392 let content;
393 content = content__481;
394 let selfish = JsonInt32(std::sync::Arc::new(JsonInt32Struct {
395 content
396 }));
397 return selfish;
398}
399pub fn content(& self) -> i32 {
400 return self.0.content;
401}
402}
403impl JsonNumericTrait for JsonInt32 {
404fn as_enum(& self) -> JsonNumericEnum {
405 JsonNumericEnum::JsonInt32(self.clone())
406}
407fn clone_boxed(& self) -> JsonNumeric {
408 JsonNumeric::new(self.clone())
409}
410fn as_json_numeric_token(& self) -> std::sync::Arc<String> {
411 self.as_json_numeric_token()
412}
413fn as_int32(& self) -> temper_core::Result<i32> {
414 Ok(self.as_int32())
415}
416fn as_int64(& self) -> temper_core::Result<i64> {
417 Ok(self.as_int64())
418}
419fn as_float64(& self) -> temper_core::Result<f64> {
420 Ok(self.as_float64())
421}
422}
423impl JsonSyntaxTreeTrait for JsonInt32 {
424fn as_enum(& self) -> JsonSyntaxTreeEnum {
425 JsonSyntaxTreeEnum::JsonNumeric(JsonNumeric::new(self.clone()))
426}
427fn clone_boxed(& self) -> JsonSyntaxTree {
428 JsonSyntaxTree::new(self.clone())
429}
430fn produce(& self, p__470: JsonProducer) {
431 self.produce(p__470)
432}
433}
434temper_core::impl_any_value_trait!(JsonInt32, [JsonNumeric, JsonSyntaxTree]);
435struct JsonInt64Struct {
436content: i64
437}
438#[ derive(Clone)] pub struct JsonInt64(std::sync::Arc<JsonInt64Struct>);
439impl JsonInt64 {
440pub fn produce(& self, p__484: JsonProducer) {
441 p__484.int64_value(self.0.content);
442}
443pub fn as_json_numeric_token(& self) -> std::sync::Arc<String> {
444 return temper_core::int64_to_string(self.0.content, None);
445}
446pub fn as_int32(& self) -> temper_core::Result<i32> {
447 let return__240: i32;
448 return__240 = temper_core::int64_to_int32(self.0.content) ? ;
449 return Ok(return__240);
450}
451pub fn as_int64(& self) -> i64 {
452 return self.0.content;
453}
454pub fn as_float64(& self) -> temper_core::Result<f64> {
455 let return__242: f64;
456 return__242 = temper_core::int64_to_float64(self.0.content) ? ;
457 return Ok(return__242);
458}
459pub fn new(content__495: i64) -> JsonInt64 {
460 let content;
461 content = content__495;
462 let selfish = JsonInt64(std::sync::Arc::new(JsonInt64Struct {
463 content
464 }));
465 return selfish;
466}
467pub fn content(& self) -> i64 {
468 return self.0.content;
469}
470}
471impl JsonNumericTrait for JsonInt64 {
472fn as_enum(& self) -> JsonNumericEnum {
473 JsonNumericEnum::JsonInt64(self.clone())
474}
475fn clone_boxed(& self) -> JsonNumeric {
476 JsonNumeric::new(self.clone())
477}
478fn as_json_numeric_token(& self) -> std::sync::Arc<String> {
479 self.as_json_numeric_token()
480}
481fn as_int32(& self) -> temper_core::Result<i32> {
482 self.as_int32()
483}
484fn as_int64(& self) -> temper_core::Result<i64> {
485 Ok(self.as_int64())
486}
487fn as_float64(& self) -> temper_core::Result<f64> {
488 self.as_float64()
489}
490}
491impl JsonSyntaxTreeTrait for JsonInt64 {
492fn as_enum(& self) -> JsonSyntaxTreeEnum {
493 JsonSyntaxTreeEnum::JsonNumeric(JsonNumeric::new(self.clone()))
494}
495fn clone_boxed(& self) -> JsonSyntaxTree {
496 JsonSyntaxTree::new(self.clone())
497}
498fn produce(& self, p__484: JsonProducer) {
499 self.produce(p__484)
500}
501}
502temper_core::impl_any_value_trait!(JsonInt64, [JsonNumeric, JsonSyntaxTree]);
503struct JsonFloat64Struct {
504content: f64
505}
506#[ derive(Clone)] pub struct JsonFloat64(std::sync::Arc<JsonFloat64Struct>);
507impl JsonFloat64 {
508pub fn produce(& self, p__498: JsonProducer) {
509 p__498.float64_value(self.0.content);
510}
511pub fn as_json_numeric_token(& self) -> std::sync::Arc<String> {
512 return temper_core::float64::to_string(self.0.content);
513}
514pub fn as_int32(& self) -> temper_core::Result<i32> {
515 let return__247: i32;
516 return__247 = temper_core::float64::to_int(self.0.content) ? ;
517 return Ok(return__247);
518}
519pub fn as_int64(& self) -> temper_core::Result<i64> {
520 let return__248: i64;
521 return__248 = temper_core::float64::to_int64(self.0.content) ? ;
522 return Ok(return__248);
523}
524pub fn as_float64(& self) -> f64 {
525 return self.0.content;
526}
527pub fn new(content__509: f64) -> JsonFloat64 {
528 let content;
529 content = content__509;
530 let selfish = JsonFloat64(std::sync::Arc::new(JsonFloat64Struct {
531 content
532 }));
533 return selfish;
534}
535pub fn content(& self) -> f64 {
536 return self.0.content;
537}
538}
539impl JsonNumericTrait for JsonFloat64 {
540fn as_enum(& self) -> JsonNumericEnum {
541 JsonNumericEnum::JsonFloat64(self.clone())
542}
543fn clone_boxed(& self) -> JsonNumeric {
544 JsonNumeric::new(self.clone())
545}
546fn as_json_numeric_token(& self) -> std::sync::Arc<String> {
547 self.as_json_numeric_token()
548}
549fn as_int32(& self) -> temper_core::Result<i32> {
550 self.as_int32()
551}
552fn as_int64(& self) -> temper_core::Result<i64> {
553 self.as_int64()
554}
555fn as_float64(& self) -> temper_core::Result<f64> {
556 Ok(self.as_float64())
557}
558}
559impl JsonSyntaxTreeTrait for JsonFloat64 {
560fn as_enum(& self) -> JsonSyntaxTreeEnum {
561 JsonSyntaxTreeEnum::JsonNumeric(JsonNumeric::new(self.clone()))
562}
563fn clone_boxed(& self) -> JsonSyntaxTree {
564 JsonSyntaxTree::new(self.clone())
565}
566fn produce(& self, p__498: JsonProducer) {
567 self.produce(p__498)
568}
569}
570temper_core::impl_any_value_trait!(JsonFloat64, [JsonNumeric, JsonSyntaxTree]);
571struct JsonNumericTokenStruct {
572content: std::sync::Arc<String>
573}
574#[ derive(Clone)] pub struct JsonNumericToken(std::sync::Arc<JsonNumericTokenStruct>);
575impl JsonNumericToken {
576pub fn produce(& self, p__512: JsonProducer) {
577 p__512.numeric_token_value(self.0.content.clone());
578}
579pub fn as_json_numeric_token(& self) -> std::sync::Arc<String> {
580 return self.0.content.clone();
581}
582pub fn as_int32(& self) -> temper_core::Result<i32> {
583 let return__254: i32;
584 let mut t___1774: i32;
585 let mut t___1775: f64;
586 'ok___2559: {
587 'orelse___940: {
588 t___1774 = match temper_core::string::to_int( & self.0.content, None) {
589 Ok(x) => x,
590 _ => break 'orelse___940
591 };
592 return__254 = t___1774;
593 break 'ok___2559;
594 }
595 t___1775 = temper_core::string::to_float64( & self.0.content) ? ;
596 return__254 = temper_core::float64::to_int(t___1775) ? ;
597 }
598 return Ok(return__254);
599}
600pub fn as_int64(& self) -> temper_core::Result<i64> {
601 let return__255: i64;
602 let mut t___1770: i64;
603 let mut t___1771: f64;
604 'ok___2562: {
605 'orelse___941: {
606 t___1770 = match temper_core::string::to_int64( & self.0.content, None) {
607 Ok(x) => x,
608 _ => break 'orelse___941
609 };
610 return__255 = t___1770;
611 break 'ok___2562;
612 }
613 t___1771 = temper_core::string::to_float64( & self.0.content) ? ;
614 return__255 = temper_core::float64::to_int64(t___1771) ? ;
615 }
616 return Ok(return__255);
617}
618pub fn as_float64(& self) -> temper_core::Result<f64> {
619 let return__256: f64;
620 return__256 = temper_core::string::to_float64( & self.0.content) ? ;
621 return Ok(return__256);
622}
623pub fn new(content__523: impl temper_core::ToArcString) -> JsonNumericToken {
624 let content__523 = content__523.to_arc_string();
625 let content;
626 content = content__523.clone();
627 let selfish = JsonNumericToken(std::sync::Arc::new(JsonNumericTokenStruct {
628 content
629 }));
630 return selfish;
631}
632pub fn content(& self) -> std::sync::Arc<String> {
633 return self.0.content.clone();
634}
635}
636impl JsonNumericTrait for JsonNumericToken {
637fn as_enum(& self) -> JsonNumericEnum {
638 JsonNumericEnum::JsonNumericToken(self.clone())
639}
640fn clone_boxed(& self) -> JsonNumeric {
641 JsonNumeric::new(self.clone())
642}
643fn as_json_numeric_token(& self) -> std::sync::Arc<String> {
644 self.as_json_numeric_token()
645}
646fn as_int32(& self) -> temper_core::Result<i32> {
647 self.as_int32()
648}
649fn as_int64(& self) -> temper_core::Result<i64> {
650 self.as_int64()
651}
652fn as_float64(& self) -> temper_core::Result<f64> {
653 self.as_float64()
654}
655}
656impl JsonSyntaxTreeTrait for JsonNumericToken {
657fn as_enum(& self) -> JsonSyntaxTreeEnum {
658 JsonSyntaxTreeEnum::JsonNumeric(JsonNumeric::new(self.clone()))
659}
660fn clone_boxed(& self) -> JsonSyntaxTree {
661 JsonSyntaxTree::new(self.clone())
662}
663fn produce(& self, p__512: JsonProducer) {
664 self.produce(p__512)
665}
666}
667temper_core::impl_any_value_trait!(JsonNumericToken, [JsonNumeric, JsonSyntaxTree]);
668struct JsonTextProducerStruct {
669interchange_context: InterchangeContext, buffer: std::sync::Arc<std::sync::RwLock<String>>, stack: temper_core::ListBuilder<i32>, well_formed: bool
670}
671#[ derive(Clone)] pub struct JsonTextProducer(std::sync::Arc<std::sync::RwLock<JsonTextProducerStruct>>);
672impl JsonTextProducer {
673pub fn new(interchangeContext__938: Option<InterchangeContext>) -> JsonTextProducer {
674 let interchange_context;
675 let buffer;
676 let stack;
677 let well_formed;
678 let interchangeContext__529: InterchangeContext;
679 if interchangeContext__938.is_none() {
680 interchangeContext__529 = InterchangeContext::new(NullInterchangeContext::instance());
681 } else {
682 interchangeContext__529 = interchangeContext__938.clone().unwrap();
683 }
684 interchange_context = interchangeContext__529.clone();
685 let mut t___2470: std::sync::Arc<std::sync::RwLock<String>> = std::sync::Arc::new(std::sync::RwLock::new(String::new()));
686 buffer = t___2470.clone();
687 let mut t___2471: temper_core::ListBuilder<i32> = temper_core::listed::new_builder();
688 stack = t___2471.clone();
689 temper_core::listed::add( & stack, 5, None);
690 well_formed = true;
691 let selfish = JsonTextProducer(std::sync::Arc::new(std::sync::RwLock::new(JsonTextProducerStruct {
692 interchange_context, buffer, stack, well_formed
693 })));
694 return selfish;
695}
696fn state(& self) -> i32 {
697 let mut t___2468: i32 = temper_core::ListedTrait::len( & self.0.read().unwrap().stack);
698 return temper_core::ListedTrait::get_or( & self.0.read().unwrap().stack, t___2468.wrapping_sub(1), -1);
699}
700fn before_value(& self) {
701 let mut t___2461: i32;
702 let mut t___2464: i32;
703 let mut t___2466: i32;
704 let mut t___1728: bool;
705 let currentState__535: i32 = self.state();
706 if Some(currentState__535) == Some(3) {
707 t___2461 = temper_core::ListedTrait::len( & self.0.read().unwrap().stack);
708 temper_core::listed::set( & self.0.read().unwrap().stack, t___2461.wrapping_sub(1), 4);
709 } else {
710 if Some(currentState__535) == Some(4) {
711 temper_core::string::builder::append( & self.0.read().unwrap().buffer, ",");
712 } else {
713 if Some(currentState__535) == Some(1) {
714 t___2464 = temper_core::ListedTrait::len( & self.0.read().unwrap().stack);
715 temper_core::listed::set( & self.0.read().unwrap().stack, t___2464.wrapping_sub(1), 2);
716 } else {
717 if Some(currentState__535) == Some(5) {
718 t___2466 = temper_core::ListedTrait::len( & self.0.read().unwrap().stack);
719 temper_core::listed::set( & self.0.read().unwrap().stack, t___2466.wrapping_sub(1), 6);
720 } else {
721 if Some(currentState__535) == Some(6) {
722 t___1728 = true;
723 } else {
724 t___1728 = Some(currentState__535) == Some(2);
725 }
726 if t___1728 {
727 self.0.write().unwrap().well_formed = false;
728 }
729 }
730 }
731 }
732 }
733}
734pub fn start_object(& self) {
735 self.before_value();
736 temper_core::string::builder::append( & self.0.read().unwrap().buffer, "{");
737 temper_core::listed::add( & self.0.read().unwrap().stack, 0, None);
738}
739pub fn end_object(& self) {
740 let mut t___1716: bool;
741 temper_core::string::builder::append( & self.0.read().unwrap().buffer, "}");
742 let currentState__540: i32 = self.state();
743 if Some(0) == Some(currentState__540) {
744 t___1716 = true;
745 } else {
746 t___1716 = Some(2) == Some(currentState__540);
747 }
748 if t___1716 {
749 temper_core::listed::remove_last( & self.0.read().unwrap().stack);
750 } else {
751 self.0.write().unwrap().well_formed = false;
752 }
753}
754pub fn object_key(& self, key__542: impl temper_core::ToArcString) {
755 let key__542 = key__542.to_arc_string();
756 let mut t___2452: i32;
757 let currentState__544: i32 = self.state();
758 if ! (Some(currentState__544) == Some(0)) {
759 if Some(currentState__544) == Some(2) {
760 temper_core::string::builder::append( & self.0.read().unwrap().buffer, ",");
761 } else {
762 self.0.write().unwrap().well_formed = false;
763 }
764 }
765 encodeJsonString__351(key__542.clone(), self.0.read().unwrap().buffer.clone());
766 temper_core::string::builder::append( & self.0.read().unwrap().buffer, ":");
767 if Some(currentState__544) >= Some(0) {
768 t___2452 = temper_core::ListedTrait::len( & self.0.read().unwrap().stack);
769 temper_core::listed::set( & self.0.read().unwrap().stack, t___2452.wrapping_sub(1), 1);
770 }
771}
772pub fn start_array(& self) {
773 self.before_value();
774 temper_core::string::builder::append( & self.0.read().unwrap().buffer, "[");
775 temper_core::listed::add( & self.0.read().unwrap().stack, 3, None);
776}
777pub fn end_array(& self) {
778 let mut t___1704: bool;
779 temper_core::string::builder::append( & self.0.read().unwrap().buffer, "]");
780 let currentState__549: i32 = self.state();
781 if Some(3) == Some(currentState__549) {
782 t___1704 = true;
783 } else {
784 t___1704 = Some(4) == Some(currentState__549);
785 }
786 if t___1704 {
787 temper_core::listed::remove_last( & self.0.read().unwrap().stack);
788 } else {
789 self.0.write().unwrap().well_formed = false;
790 }
791}
792pub fn null_value(& self) {
793 self.before_value();
794 temper_core::string::builder::append( & self.0.read().unwrap().buffer, "null");
795}
796pub fn boolean_value(& self, x__553: bool) {
797 let mut t___1700: std::sync::Arc<String>;
798 self.before_value();
799 if x__553 {
800 t___1700 = std::sync::Arc::new("true".to_string());
801 } else {
802 t___1700 = std::sync::Arc::new("false".to_string());
803 }
804 temper_core::string::builder::append( & self.0.read().unwrap().buffer, t___1700.clone());
805}
806pub fn int32_value(& self, x__556: i32) {
807 self.before_value();
808 let mut t___2436: std::sync::Arc<String> = temper_core::int_to_string(x__556, None);
809 temper_core::string::builder::append( & self.0.read().unwrap().buffer, t___2436.clone());
810}
811pub fn int64_value(& self, x__559: i64) {
812 self.before_value();
813 let mut t___2433: std::sync::Arc<String> = temper_core::int64_to_string(x__559, None);
814 temper_core::string::builder::append( & self.0.read().unwrap().buffer, t___2433.clone());
815}
816pub fn float64_value(& self, x__562: f64) {
817 self.before_value();
818 let mut t___2430: std::sync::Arc<String> = temper_core::float64::to_string(x__562);
819 temper_core::string::builder::append( & self.0.read().unwrap().buffer, t___2430.clone());
820}
821pub fn numeric_token_value(& self, x__565: impl temper_core::ToArcString) {
822 let x__565 = x__565.to_arc_string();
823 self.before_value();
824 temper_core::string::builder::append( & self.0.read().unwrap().buffer, x__565.clone());
825}
826pub fn string_value(& self, x__568: impl temper_core::ToArcString) {
827 let x__568 = x__568.to_arc_string();
828 self.before_value();
829 encodeJsonString__351(x__568.clone(), self.0.read().unwrap().buffer.clone());
830}
831pub fn to_json_string(& self) -> temper_core::Result<std::sync::Arc<String>> {
832 let return__272: std::sync::Arc<String>;
833 let mut t___2423: i32;
834 let mut t___1689: bool;
835 let mut t___1690: bool;
836 if self.0.read().unwrap().well_formed {
837 if Some(temper_core::ListedTrait::len( & self.0.read().unwrap().stack)) == Some(1) {
838 t___2423 = self.state();
839 t___1689 = Some(t___2423) == Some(6);
840 } else {
841 t___1689 = false;
842 }
843 t___1690 = t___1689;
844 } else {
845 t___1690 = false;
846 }
847 if t___1690 {
848 return__272 = temper_core::string::builder::to_string( & self.0.read().unwrap().buffer);
849 } else {
850 return Err(temper_core::Error::new());
851 }
852 return Ok(return__272.clone());
853}
854pub fn interchange_context(& self) -> InterchangeContext {
855 return self.0.read().unwrap().interchange_context.clone();
856}
857}
858impl JsonProducerTrait for JsonTextProducer {
859fn clone_boxed(& self) -> JsonProducer {
860 JsonProducer::new(self.clone())
861}
862fn start_object(& self) {
863 self.start_object()
864}
865fn end_object(& self) {
866 self.end_object()
867}
868fn object_key(& self, key__542: std::sync::Arc<String>) {
869 self.object_key(key__542)
870}
871fn start_array(& self) {
872 self.start_array()
873}
874fn end_array(& self) {
875 self.end_array()
876}
877fn null_value(& self) {
878 self.null_value()
879}
880fn boolean_value(& self, x__553: bool) {
881 self.boolean_value(x__553)
882}
883fn int32_value(& self, x__556: i32) {
884 self.int32_value(x__556)
885}
886fn int64_value(& self, x__559: i64) {
887 self.int64_value(x__559)
888}
889fn float64_value(& self, x__562: f64) {
890 self.float64_value(x__562)
891}
892fn numeric_token_value(& self, x__565: std::sync::Arc<String>) {
893 self.numeric_token_value(x__565)
894}
895fn string_value(& self, x__568: std::sync::Arc<String>) {
896 self.string_value(x__568)
897}
898fn interchange_context(& self) -> InterchangeContext {
899 self.interchange_context()
900}
901}
902temper_core::impl_any_value_trait!(JsonTextProducer, [JsonProducer]);
903pub trait JsonParseErrorReceiverTrait: temper_core::AsAnyValue + temper_core::AnyValueTrait + std::marker::Send + std::marker::Sync {
904fn clone_boxed(& self) -> JsonParseErrorReceiver;
905fn explain_json_error(& self, explanation__588: std::sync::Arc<String>);
906}
907#[ derive(Clone)] pub struct JsonParseErrorReceiver(std::sync::Arc<dyn JsonParseErrorReceiverTrait>);
908impl JsonParseErrorReceiver {
909pub fn new(selfish: impl JsonParseErrorReceiverTrait + 'static) -> JsonParseErrorReceiver {
910 JsonParseErrorReceiver(std::sync::Arc::new(selfish))
911}
912}
913temper_core::impl_any_value_trait_for_interface!(JsonParseErrorReceiver);
914impl std::ops::Deref for JsonParseErrorReceiver {
915type Target = dyn JsonParseErrorReceiverTrait;
916fn deref(& self) -> & Self::Target {
917 & ( * self.0)
918}
919}
920struct JsonSyntaxTreeProducerStruct {
921stack: temper_core::ListBuilder<temper_core::ListBuilder<JsonSyntaxTree>>, error: Option<std::sync::Arc<String>>
922}
923#[ derive(Clone)] pub struct JsonSyntaxTreeProducer(std::sync::Arc<std::sync::RwLock<JsonSyntaxTreeProducerStruct>>);
924impl JsonSyntaxTreeProducer {
925pub fn interchange_context(& self) -> InterchangeContext {
926 return InterchangeContext::new(NullInterchangeContext::instance());
927}
928pub fn new() -> JsonSyntaxTreeProducer {
929 let stack;
930 let error;
931 let mut t___2419: temper_core::ListBuilder<temper_core::ListBuilder<JsonSyntaxTree>> = temper_core::listed::new_builder();
932 stack = t___2419.clone();
933 let mut t___2420: temper_core::ListBuilder<JsonSyntaxTree> = temper_core::listed::new_builder();
934 temper_core::listed::add( & stack, t___2420.clone(), None);
935 error = None;
936 let selfish = JsonSyntaxTreeProducer(std::sync::Arc::new(std::sync::RwLock::new(JsonSyntaxTreeProducerStruct {
937 stack, error
938 })));
939 return selfish;
940}
941fn store_value(& self, v__597: JsonSyntaxTree) {
942 let mut t___2416: i32;
943 if ! temper_core::ListedTrait::is_empty( & self.0.read().unwrap().stack) {
944 t___2416 = temper_core::ListedTrait::len( & self.0.read().unwrap().stack);
945 temper_core::listed::add( & temper_core::ListedTrait::get( & self.0.read().unwrap().stack, t___2416.wrapping_sub(1)), v__597.clone(), None);
946 }
947}
948pub fn start_object(& self) {
949 let mut t___2413: temper_core::ListBuilder<JsonSyntaxTree> = temper_core::listed::new_builder();
950 temper_core::listed::add( & self.0.read().unwrap().stack, t___2413.clone(), None);
951}
952pub fn end_object(& self) {
953 let return__283: ();
954 let mut t___2402: Option<temper_core::MapBuilder<std::sync::Arc<String>, temper_core::ListBuilder<JsonSyntaxTree>>>;
955 let mut t___2411: JsonObject;
956 let mut t___1656: JsonString;
957 let mut t___1658: JsonString;
958 let mut t___1664: temper_core::MapBuilder<std::sync::Arc<String>, temper_core::ListBuilder<JsonSyntaxTree>>;
959 let mut t___1666: temper_core::MapBuilder<std::sync::Arc<String>, temper_core::ListBuilder<JsonSyntaxTree>>;
960 let mut t___1668: temper_core::List<JsonSyntaxTree>;
961 let mut t___1669: temper_core::List<JsonSyntaxTree>;
962 let mut t___1671: temper_core::ListBuilder<JsonSyntaxTree>;
963 let mut t___1672: temper_core::ListBuilder<JsonSyntaxTree>;
964 'fn__602: {
965 if temper_core::ListedTrait::is_empty( & self.0.read().unwrap().stack) {
966 return__283 = ();
967 break 'fn__602;
968 }
969 let ls__603: temper_core::ListBuilder<JsonSyntaxTree> = temper_core::listed::remove_last( & self.0.read().unwrap().stack);
970 let m__604: temper_core::MapBuilder<std::sync::Arc<String>, temper_core::List<JsonSyntaxTree>> = temper_core::MapBuilder::new();
971 let mut multis__605: Option<temper_core::MapBuilder<std::sync::Arc<String>, temper_core::ListBuilder<JsonSyntaxTree>>> = None;
972 let mut i__606: i32 = 0;
973 let mut n__607: i32 = temper_core::ListedTrait::len( & ls__603) & -2;
974 'loop___2644: while Some(i__606) < Some(n__607) {
975 let postfixReturn___40: i32 = i__606;
976 i__606 = i__606.wrapping_add(1);
977 let keyTree__608: JsonSyntaxTree = temper_core::ListedTrait::get( & ls__603, postfixReturn___40);
978 if ! temper_core::is::<JsonString>(keyTree__608.clone()) {
979 break;
980 }
981 'ok___2574: {
982 'orelse___942: {
983 t___1656 = match temper_core::cast::<JsonString>(keyTree__608.clone()).ok_or_else(| | temper_core::Error::new()) {
984 Ok(x) => x,
985 _ => break 'orelse___942
986 };
987 t___1658 = t___1656.clone();
988 break 'ok___2574;
989 }
990 t___1658 = panic!();
991 }
992 let key__609: std::sync::Arc<String> = t___1658.content();
993 let postfixReturn___41: i32 = i__606;
994 i__606 = i__606.wrapping_add(1);
995 let value__610: JsonSyntaxTree = temper_core::ListedTrait::get( & ls__603, postfixReturn___41);
996 if temper_core::MappedTrait::has( & m__604, key__609.clone()) {
997 if multis__605.is_none() {
998 t___2402 = Some(temper_core::MapBuilder::new());
999 multis__605 = t___2402.clone();
1000 }
1001 'ok___2575: {
1002 'orelse___943: {
1003 if multis__605.is_none() {
1004 break 'orelse___943;
1005 } else {
1006 t___1664 = multis__605.clone().unwrap();
1007 }
1008 t___1666 = t___1664.clone();
1009 break 'ok___2575;
1010 }
1011 t___1666 = panic!();
1012 }
1013 let mb__611: temper_core::MapBuilder<std::sync::Arc<String>, temper_core::ListBuilder<JsonSyntaxTree>> = t___1666.clone();
1014 if ! temper_core::MappedTrait::has( & mb__611, key__609.clone()) {
1015 'ok___2576: {
1016 'orelse___944: {
1017 t___1668 = match temper_core::MappedTrait::get( & m__604, key__609.clone()) {
1018 Ok(x) => x,
1019 _ => break 'orelse___944
1020 };
1021 t___1669 = t___1668.clone();
1022 break 'ok___2576;
1023 }
1024 t___1669 = panic!();
1025 }
1026 temper_core::MapBuilder::set( & mb__611, key__609.clone(), temper_core::ListedTrait::to_list_builder( & t___1669));
1027 }
1028 'ok___2577: {
1029 'orelse___945: {
1030 t___1671 = match temper_core::MappedTrait::get( & mb__611, key__609.clone()) {
1031 Ok(x) => x,
1032 _ => break 'orelse___945
1033 };
1034 t___1672 = t___1671.clone();
1035 break 'ok___2577;
1036 }
1037 t___1672 = panic!();
1038 }
1039 temper_core::listed::add( & t___1672, value__610.clone(), None);
1040 } else {
1041 temper_core::MapBuilder::set( & m__604, key__609.clone(), std::sync::Arc::new(vec![value__610.clone()]));
1042 }
1043 }
1044 let multis__612: Option<temper_core::MapBuilder<std::sync::Arc<String>, temper_core::ListBuilder<JsonSyntaxTree>>> = multis__605.clone();
1045 if ! multis__612.is_none() {
1046 #[ derive(Clone)] struct ClosureGroup___4 {
1047 m__604: temper_core::MapBuilder<std::sync::Arc<String>, temper_core::List<JsonSyntaxTree>>
1048 }
1049 impl ClosureGroup___4 {
1050 fn fn__2392(& self, k__613: impl temper_core::ToArcString, vs__614: impl temper_core::ToListBuilder<JsonSyntaxTree>) {
1051 let k__613 = k__613.to_arc_string();
1052 let vs__614 = vs__614.to_list_builder();
1053 let mut t___2390: temper_core::List<JsonSyntaxTree> = temper_core::ListedTrait::to_list( & vs__614);
1054 temper_core::MapBuilder::set( & self.m__604, k__613.clone(), t___2390.clone());
1055 }
1056 }
1057 let closure_group = ClosureGroup___4 {
1058 m__604: m__604.clone()
1059 };
1060 let fn__2392 = {
1061 let closure_group = closure_group.clone();
1062 std::sync::Arc::new(move | k__613: std::sync::Arc<String>, vs__614: temper_core::ListBuilder<JsonSyntaxTree> | closure_group.fn__2392(k__613, vs__614))
1063 };
1064 temper_core::MappedTrait::for_each( & multis__612.clone().unwrap(), & ( * fn__2392.clone()));
1065 }
1066 t___2411 = JsonObject::new(temper_core::MappedTrait::to_map( & m__604));
1067 self.store_value(JsonSyntaxTree::new(t___2411.clone()));
1068 return__283 = ();
1069}
1070return return__283;
1071}
1072pub fn object_key(& self, key__616: impl temper_core::ToArcString) {
1073let key__616 = key__616.to_arc_string();
1074let mut t___2388: JsonString = JsonString::new(key__616.clone());
1075self.store_value(JsonSyntaxTree::new(t___2388.clone()));
1076}
1077pub fn start_array(& self) {
1078let mut t___2386: temper_core::ListBuilder<JsonSyntaxTree> = temper_core::listed::new_builder();
1079temper_core::listed::add( & self.0.read().unwrap().stack, t___2386.clone(), None);
1080}
1081pub fn end_array(& self) {
1082let return__286: ();
1083let mut t___2384: JsonArray;
1084'fn__621: {
1085 if temper_core::ListedTrait::is_empty( & self.0.read().unwrap().stack) {
1086 return__286 = ();
1087 break 'fn__621;
1088 }
1089 let ls__622: temper_core::ListBuilder<JsonSyntaxTree> = temper_core::listed::remove_last( & self.0.read().unwrap().stack);
1090 t___2384 = JsonArray::new(temper_core::ListedTrait::to_list( & ls__622));
1091 self.store_value(JsonSyntaxTree::new(t___2384.clone()));
1092 return__286 = ();
1093}
1094return return__286;
1095}
1096pub fn null_value(& self) {
1097let mut t___2379: JsonNull = JsonNull::new();
1098self.store_value(JsonSyntaxTree::new(t___2379.clone()));
1099}
1100pub fn boolean_value(& self, x__626: bool) {
1101let mut t___2377: JsonBoolean = JsonBoolean::new(x__626);
1102self.store_value(JsonSyntaxTree::new(t___2377.clone()));
1103}
1104pub fn int32_value(& self, x__629: i32) {
1105let mut t___2375: JsonInt32 = JsonInt32::new(x__629);
1106self.store_value(JsonSyntaxTree::new(t___2375.clone()));
1107}
1108pub fn int64_value(& self, x__632: i64) {
1109let mut t___2373: JsonInt64 = JsonInt64::new(x__632);
1110self.store_value(JsonSyntaxTree::new(t___2373.clone()));
1111}
1112pub fn float64_value(& self, x__635: f64) {
1113let mut t___2371: JsonFloat64 = JsonFloat64::new(x__635);
1114self.store_value(JsonSyntaxTree::new(t___2371.clone()));
1115}
1116pub fn numeric_token_value(& self, x__638: impl temper_core::ToArcString) {
1117let x__638 = x__638.to_arc_string();
1118let mut t___2369: JsonNumericToken = JsonNumericToken::new(x__638.clone());
1119self.store_value(JsonSyntaxTree::new(t___2369.clone()));
1120}
1121pub fn string_value(& self, x__641: impl temper_core::ToArcString) {
1122let x__641 = x__641.to_arc_string();
1123let mut t___2367: JsonString = JsonString::new(x__641.clone());
1124self.store_value(JsonSyntaxTree::new(t___2367.clone()));
1125}
1126pub fn to_json_syntax_tree(& self) -> temper_core::Result<JsonSyntaxTree> {
1127let mut t___1629: bool;
1128if Some(temper_core::ListedTrait::len( & self.0.read().unwrap().stack)) != Some(1) {
1129 t___1629 = true;
1130} else {
1131 t___1629 = ! self.0.read().unwrap().error.is_none();
1132}
1133if t___1629 {
1134 return Err(temper_core::Error::new());
1135}
1136let ls__645: temper_core::ListBuilder<JsonSyntaxTree> = temper_core::ListedTrait::get( & self.0.read().unwrap().stack, 0);
1137if Some(temper_core::ListedTrait::len( & ls__645)) != Some(1) {
1138 return Err(temper_core::Error::new());
1139}
1140return Ok(temper_core::ListedTrait::get( & ls__645, 0));
1141}
1142pub fn json_error(& self) -> Option<std::sync::Arc<String>> {
1143return self.0.read().unwrap().error.clone();
1144}
1145pub fn parse_error_receiver(& self) -> JsonParseErrorReceiver {
1146return JsonParseErrorReceiver::new(self.clone());
1147}
1148pub fn explain_json_error(& self, error__651: impl temper_core::ToArcString) {
1149let error__651 = error__651.to_arc_string();
1150self.0.write().unwrap().error = Some(error__651.clone());
1151}
1152}
1153impl JsonProducerTrait for JsonSyntaxTreeProducer {
1154fn clone_boxed(& self) -> JsonProducer {
1155 JsonProducer::new(self.clone())
1156}
1157fn parse_error_receiver(& self) -> Option<JsonParseErrorReceiver> {
1158 Some(self.parse_error_receiver())
1159}
1160fn start_object(& self) {
1161 self.start_object()
1162}
1163fn end_object(& self) {
1164 self.end_object()
1165}
1166fn object_key(& self, key__616: std::sync::Arc<String>) {
1167 self.object_key(key__616)
1168}
1169fn start_array(& self) {
1170 self.start_array()
1171}
1172fn end_array(& self) {
1173 self.end_array()
1174}
1175fn null_value(& self) {
1176 self.null_value()
1177}
1178fn boolean_value(& self, x__626: bool) {
1179 self.boolean_value(x__626)
1180}
1181fn int32_value(& self, x__629: i32) {
1182 self.int32_value(x__629)
1183}
1184fn int64_value(& self, x__632: i64) {
1185 self.int64_value(x__632)
1186}
1187fn float64_value(& self, x__635: f64) {
1188 self.float64_value(x__635)
1189}
1190fn numeric_token_value(& self, x__638: std::sync::Arc<String>) {
1191 self.numeric_token_value(x__638)
1192}
1193fn string_value(& self, x__641: std::sync::Arc<String>) {
1194 self.string_value(x__641)
1195}
1196fn interchange_context(& self) -> InterchangeContext {
1197 self.interchange_context()
1198}
1199}
1200impl JsonParseErrorReceiverTrait for JsonSyntaxTreeProducer {
1201fn clone_boxed(& self) -> JsonParseErrorReceiver {
1202 JsonParseErrorReceiver::new(self.clone())
1203}
1204fn explain_json_error(& self, error__651: std::sync::Arc<String>) {
1205 self.explain_json_error(error__651)
1206}
1207}
1208temper_core::impl_any_value_trait!(JsonSyntaxTreeProducer, [JsonProducer, JsonParseErrorReceiver]);
1209fn parseJsonValue__356(sourceText__670: impl temper_core::ToArcString, mut i__671: usize, out__672: JsonProducer) -> Option<usize> {
1210let sourceText__670 = sourceText__670.to_arc_string();
1211let return__302: Option<usize>;
1212let mut t___2201: usize;
1213let mut t___2204: i32;
1214let mut t___1412: bool;
1215'fn__673: {
1216 t___2201 = skipJsonSpaces__355(sourceText__670.clone(), i__671);
1217 i__671 = t___2201;
1218 if ! temper_core::string::has_index( & sourceText__670, i__671) {
1219 expectedTokenError__353(sourceText__670.clone(), i__671, out__672.clone(), "JSON value");
1220 return__302 = None;
1221 break 'fn__673;
1222 }
1223 t___2204 = temper_core::string::get( & sourceText__670, i__671);
1224 if Some(t___2204) == Some(123) {
1225 return__302 = parseJsonObject__357(sourceText__670.clone(), i__671, out__672.clone());
1226 } else {
1227 if Some(t___2204) == Some(91) {
1228 return__302 = parseJsonArray__358(sourceText__670.clone(), i__671, out__672.clone());
1229 } else {
1230 if Some(t___2204) == Some(34) {
1231 return__302 = parseJsonString__359(sourceText__670.clone(), i__671, out__672.clone());
1232 } else {
1233 if Some(t___2204) == Some(116) {
1234 t___1412 = true;
1235 } else {
1236 t___1412 = Some(t___2204) == Some(102);
1237 }
1238 if t___1412 {
1239 return__302 = parseJsonBoolean__362(sourceText__670.clone(), i__671, out__672.clone());
1240 } else {
1241 if Some(t___2204) == Some(110) {
1242 return__302 = parseJsonNull__363(sourceText__670.clone(), i__671, out__672.clone());
1243 } else {
1244 return__302 = parseJsonNumber__365(sourceText__670.clone(), i__671, out__672.clone());
1245 }
1246 }
1247 }
1248 }
1249 }
1250}
1251return return__302;
1252}
1253pub trait JsonAdapterTrait<T: Clone + std::marker::Send + std::marker::Sync + 'static>: temper_core::AsAnyValue + temper_core::AnyValueTrait + std::marker::Send + std::marker::Sync {
1254fn clone_boxed(& self) -> JsonAdapter<T>;
1255fn encode_to_json(& self, x__765: T, p__766: JsonProducer);
1256fn decode_from_json(& self, t__769: JsonSyntaxTree, ic__770: InterchangeContext) -> temper_core::Result<T>;
1257}
1258#[ derive(Clone)] pub struct JsonAdapter<T: Clone + std::marker::Send + std::marker::Sync + 'static>(std::sync::Arc<dyn JsonAdapterTrait<T>>);
1259impl<T: Clone + std::marker::Send + std::marker::Sync + 'static> JsonAdapter<T> {
1260pub fn new(selfish: impl JsonAdapterTrait<T> + 'static) -> JsonAdapter<T> {
1261 JsonAdapter(std::sync::Arc::new(selfish))
1262}
1263}
1264temper_core::impl_any_value_trait_for_interface!(JsonAdapter<T>);
1265impl<T: Clone + std::marker::Send + std::marker::Sync + 'static> std::ops::Deref for JsonAdapter<T> {
1266type Target = dyn JsonAdapterTrait<T>;
1267fn deref(& self) -> & Self::Target {
1268 & ( * self.0)
1269}
1270}
1271struct BooleanJsonAdapterStruct {}
1272#[ derive(Clone)] pub (crate) struct BooleanJsonAdapter(std::sync::Arc<BooleanJsonAdapterStruct>);
1273impl BooleanJsonAdapter {
1274pub fn encode_to_json(& self, x__773: bool, p__774: JsonProducer) {
1275 p__774.boolean_value(x__773);
1276}
1277pub fn decode_from_json(& self, t__777: JsonSyntaxTree, ic__778: InterchangeContext) -> temper_core::Result<bool> {
1278 let mut t___1391: JsonBoolean;
1279 t___1391 = temper_core::cast::<JsonBoolean>(t__777.clone()).ok_or_else(| | temper_core::Error::new()) ? ;
1280 return Ok(t___1391.content());
1281}
1282pub fn new() -> BooleanJsonAdapter {
1283 let selfish = BooleanJsonAdapter(std::sync::Arc::new(BooleanJsonAdapterStruct {}));
1284 return selfish;
1285}
1286}
1287impl JsonAdapterTrait<bool> for BooleanJsonAdapter {
1288fn clone_boxed(& self) -> JsonAdapter<bool> {
1289 JsonAdapter::new(self.clone())
1290}
1291fn encode_to_json(& self, x__773: bool, p__774: JsonProducer) {
1292 self.encode_to_json(x__773, p__774)
1293}
1294fn decode_from_json(& self, t__777: JsonSyntaxTree, ic__778: InterchangeContext) -> temper_core::Result<bool> {
1295 self.decode_from_json(t__777, ic__778)
1296}
1297}
1298temper_core::impl_any_value_trait!(BooleanJsonAdapter, [JsonAdapter<bool>]);
1299struct Float64JsonAdapterStruct {}
1300#[ derive(Clone)] pub (crate) struct Float64JsonAdapter(std::sync::Arc<Float64JsonAdapterStruct>);
1301impl Float64JsonAdapter {
1302pub fn encode_to_json(& self, x__783: f64, p__784: JsonProducer) {
1303 p__784.float64_value(x__783);
1304}
1305pub fn decode_from_json(& self, t__787: JsonSyntaxTree, ic__788: InterchangeContext) -> temper_core::Result<f64> {
1306 let return__323: f64;
1307 let mut t___1387: JsonNumeric;
1308 t___1387 = temper_core::cast::<JsonNumeric>(t__787.clone()).ok_or_else(| | temper_core::Error::new()) ? ;
1309 return__323 = t___1387.as_float64() ? ;
1310 return Ok(return__323);
1311}
1312pub fn new() -> Float64JsonAdapter {
1313 let selfish = Float64JsonAdapter(std::sync::Arc::new(Float64JsonAdapterStruct {}));
1314 return selfish;
1315}
1316}
1317impl JsonAdapterTrait<f64> for Float64JsonAdapter {
1318fn clone_boxed(& self) -> JsonAdapter<f64> {
1319 JsonAdapter::new(self.clone())
1320}
1321fn encode_to_json(& self, x__783: f64, p__784: JsonProducer) {
1322 self.encode_to_json(x__783, p__784)
1323}
1324fn decode_from_json(& self, t__787: JsonSyntaxTree, ic__788: InterchangeContext) -> temper_core::Result<f64> {
1325 self.decode_from_json(t__787, ic__788)
1326}
1327}
1328temper_core::impl_any_value_trait!(Float64JsonAdapter, [JsonAdapter<f64>]);
1329struct Int32JsonAdapterStruct {}
1330#[ derive(Clone)] pub (crate) struct Int32JsonAdapter(std::sync::Arc<Int32JsonAdapterStruct>);
1331impl Int32JsonAdapter {
1332pub fn encode_to_json(& self, x__793: i32, p__794: JsonProducer) {
1333 p__794.int32_value(x__793);
1334}
1335pub fn decode_from_json(& self, t__797: JsonSyntaxTree, ic__798: InterchangeContext) -> temper_core::Result<i32> {
1336 let return__328: i32;
1337 let mut t___1383: JsonNumeric;
1338 t___1383 = temper_core::cast::<JsonNumeric>(t__797.clone()).ok_or_else(| | temper_core::Error::new()) ? ;
1339 return__328 = t___1383.as_int32() ? ;
1340 return Ok(return__328);
1341}
1342pub fn new() -> Int32JsonAdapter {
1343 let selfish = Int32JsonAdapter(std::sync::Arc::new(Int32JsonAdapterStruct {}));
1344 return selfish;
1345}
1346}
1347impl JsonAdapterTrait<i32> for Int32JsonAdapter {
1348fn clone_boxed(& self) -> JsonAdapter<i32> {
1349 JsonAdapter::new(self.clone())
1350}
1351fn encode_to_json(& self, x__793: i32, p__794: JsonProducer) {
1352 self.encode_to_json(x__793, p__794)
1353}
1354fn decode_from_json(& self, t__797: JsonSyntaxTree, ic__798: InterchangeContext) -> temper_core::Result<i32> {
1355 self.decode_from_json(t__797, ic__798)
1356}
1357}
1358temper_core::impl_any_value_trait!(Int32JsonAdapter, [JsonAdapter<i32>]);
1359struct Int64JsonAdapterStruct {}
1360#[ derive(Clone)] pub (crate) struct Int64JsonAdapter(std::sync::Arc<Int64JsonAdapterStruct>);
1361impl Int64JsonAdapter {
1362pub fn encode_to_json(& self, x__803: i64, p__804: JsonProducer) {
1363 p__804.int64_value(x__803);
1364}
1365pub fn decode_from_json(& self, t__807: JsonSyntaxTree, ic__808: InterchangeContext) -> temper_core::Result<i64> {
1366 let return__333: i64;
1367 let mut t___1379: JsonNumeric;
1368 t___1379 = temper_core::cast::<JsonNumeric>(t__807.clone()).ok_or_else(| | temper_core::Error::new()) ? ;
1369 return__333 = t___1379.as_int64() ? ;
1370 return Ok(return__333);
1371}
1372pub fn new() -> Int64JsonAdapter {
1373 let selfish = Int64JsonAdapter(std::sync::Arc::new(Int64JsonAdapterStruct {}));
1374 return selfish;
1375}
1376}
1377impl JsonAdapterTrait<i64> for Int64JsonAdapter {
1378fn clone_boxed(& self) -> JsonAdapter<i64> {
1379 JsonAdapter::new(self.clone())
1380}
1381fn encode_to_json(& self, x__803: i64, p__804: JsonProducer) {
1382 self.encode_to_json(x__803, p__804)
1383}
1384fn decode_from_json(& self, t__807: JsonSyntaxTree, ic__808: InterchangeContext) -> temper_core::Result<i64> {
1385 self.decode_from_json(t__807, ic__808)
1386}
1387}
1388temper_core::impl_any_value_trait!(Int64JsonAdapter, [JsonAdapter<i64>]);
1389struct StringJsonAdapterStruct {}
1390#[ derive(Clone)] pub (crate) struct StringJsonAdapter(std::sync::Arc<StringJsonAdapterStruct>);
1391impl StringJsonAdapter {
1392pub fn encode_to_json(& self, x__813: impl temper_core::ToArcString, p__814: JsonProducer) {
1393 let x__813 = x__813.to_arc_string();
1394 p__814.string_value(x__813.clone());
1395}
1396pub fn decode_from_json(& self, t__817: JsonSyntaxTree, ic__818: InterchangeContext) -> temper_core::Result<std::sync::Arc<String>> {
1397 let mut t___1375: JsonString;
1398 t___1375 = temper_core::cast::<JsonString>(t__817.clone()).ok_or_else(| | temper_core::Error::new()) ? ;
1399 return Ok(t___1375.content());
1400}
1401pub fn new() -> StringJsonAdapter {
1402 let selfish = StringJsonAdapter(std::sync::Arc::new(StringJsonAdapterStruct {}));
1403 return selfish;
1404}
1405}
1406impl JsonAdapterTrait<std::sync::Arc<String>> for StringJsonAdapter {
1407fn clone_boxed(& self) -> JsonAdapter<std::sync::Arc<String>> {
1408 JsonAdapter::new(self.clone())
1409}
1410fn encode_to_json(& self, x__813: std::sync::Arc<String>, p__814: JsonProducer) {
1411 self.encode_to_json(x__813, p__814)
1412}
1413fn decode_from_json(& self, t__817: JsonSyntaxTree, ic__818: InterchangeContext) -> temper_core::Result<std::sync::Arc<String>> {
1414 self.decode_from_json(t__817, ic__818)
1415}
1416}
1417temper_core::impl_any_value_trait!(StringJsonAdapter, [JsonAdapter<std::sync::Arc<String>>]);
1418struct ListJsonAdapterStruct<T: Clone + std::marker::Send + std::marker::Sync + 'static> {
1419adapter_for_t: JsonAdapter<T>, phantom_T: std::marker::PhantomData<T>
1420}
1421#[ derive(Clone)] pub (crate) struct ListJsonAdapter<T: Clone + std::marker::Send + std::marker::Sync + 'static>(std::sync::Arc<ListJsonAdapterStruct<T>>);
1422impl<T: Clone + std::marker::Send + std::marker::Sync + 'static> ListJsonAdapter<T> {
1423pub fn encode_to_json(& self, x__824: impl temper_core::ToList<T>, p__825: JsonProducer) {
1424 let x__824 = x__824.to_list();
1425 p__825.start_array();
1426 #[ derive(Clone)] struct ClosureGroup___5<T> where T: Clone + std::marker::Send + std::marker::Sync + 'static {
1427 this__181: ListJsonAdapter<T>, p__825: JsonProducer, phantom_T: std::marker::PhantomData<T>
1428}
1429impl<T> ClosureGroup___5<T> where T: Clone + std::marker::Send + std::marker::Sync + 'static {
1430 fn fn__2174(& self, el__827: T) {
1431 self.this__181.0.adapter_for_t.encode_to_json(el__827.clone(), self.p__825.clone());
1432 }
1433}
1434let closure_group = ClosureGroup___5 {
1435 this__181: self.clone(), p__825: p__825.clone(), phantom_T: std::marker::PhantomData
1436};
1437let fn__2174 = {
1438 let closure_group = closure_group.clone();
1439 std::sync::Arc::new(move | el__827: T | closure_group.fn__2174(el__827))
1440};
1441temper_core::listed::list_for_each( & x__824, & ( * fn__2174.clone()));
1442p__825.end_array();
1443}
1444pub fn decode_from_json(& self, t__829: JsonSyntaxTree, ic__830: InterchangeContext) -> temper_core::Result<temper_core::List<T>> {
1445let mut t___1369: T;
1446let b__832: temper_core::ListBuilder<T> = temper_core::listed::new_builder();
1447let mut t___1364: JsonArray;
1448t___1364 = temper_core::cast::<JsonArray>(t__829.clone()).ok_or_else(| | temper_core::Error::new()) ? ;
1449let elements__833: temper_core::List<JsonSyntaxTree> = t___1364.elements();
1450let n__834: i32 = temper_core::ListedTrait::len( & elements__833);
1451let mut i__835: i32 = 0;
1452'loop___2648: while Some(i__835) < Some(n__834) {
1453 let el__836: JsonSyntaxTree = temper_core::ListedTrait::get( & elements__833, i__835);
1454 i__835 = i__835.wrapping_add(1);
1455 t___1369 = self.0.adapter_for_t.decode_from_json(el__836.clone(), ic__830.clone()) ? ;
1456 temper_core::listed::add( & b__832, t___1369.clone(), None);
1457}
1458return Ok(temper_core::ListedTrait::to_list( & b__832));
1459}
1460pub fn new(adapterForT__838: JsonAdapter<T>) -> ListJsonAdapter<T> {
1461let adapter_for_t;
1462adapter_for_t = adapterForT__838.clone();
1463let selfish = ListJsonAdapter(std::sync::Arc::new(ListJsonAdapterStruct {
1464 adapter_for_t, phantom_T: std::marker::PhantomData
1465}));
1466return selfish;
1467}
1468}
1469impl<T: Clone + std::marker::Send + std::marker::Sync + 'static> JsonAdapterTrait<temper_core::List<T>> for ListJsonAdapter<T> {
1470fn clone_boxed(& self) -> JsonAdapter<temper_core::List<T>> {
1471 JsonAdapter::new(self.clone())
1472}
1473fn encode_to_json(& self, x__824: temper_core::List<T>, p__825: JsonProducer) {
1474 self.encode_to_json(x__824, p__825)
1475}
1476fn decode_from_json(& self, t__829: JsonSyntaxTree, ic__830: InterchangeContext) -> temper_core::Result<temper_core::List<T>> {
1477 self.decode_from_json(t__829, ic__830)
1478}
1479}
1480temper_core::impl_any_value_trait!(ListJsonAdapter<T>, [JsonAdapter<temper_core::List<T>>]);
1481struct OrNullJsonAdapterStruct<T: Clone + std::marker::Send + std::marker::Sync + 'static> {
1482adapter_for_t: JsonAdapter<T>, phantom_T: std::marker::PhantomData<T>
1483}
1484#[ derive(Clone)] pub struct OrNullJsonAdapter<T: Clone + std::marker::Send + std::marker::Sync + 'static>(std::sync::Arc<OrNullJsonAdapterStruct<T>>);
1485impl<T: Clone + std::marker::Send + std::marker::Sync + 'static> OrNullJsonAdapter<T> {
1486pub fn encode_to_json(& self, x__843: Option<T>, p__844: JsonProducer) {
1487 if x__843.is_none() {
1488 p__844.null_value();
1489 } else {
1490 let x___962: T = x__843.clone().unwrap();
1491 self.0.adapter_for_t.encode_to_json(x___962.clone(), p__844.clone());
1492 }
1493}
1494pub fn decode_from_json(& self, t__847: JsonSyntaxTree, ic__848: InterchangeContext) -> temper_core::Result<Option<T>> {
1495 let return__350: Option<T>;
1496 if temper_core::is::<JsonNull>(t__847.clone()) {
1497 return__350 = None;
1498 } else {
1499 return__350 = Some(self.0.adapter_for_t.decode_from_json(t__847.clone(), ic__848.clone()) ? );
1500 }
1501 return Ok(return__350.clone());
1502}
1503pub fn new(adapterForT__851: JsonAdapter<T>) -> OrNullJsonAdapter<T> {
1504 let adapter_for_t;
1505 adapter_for_t = adapterForT__851.clone();
1506 let selfish = OrNullJsonAdapter(std::sync::Arc::new(OrNullJsonAdapterStruct {
1507 adapter_for_t, phantom_T: std::marker::PhantomData
1508 }));
1509 return selfish;
1510}
1511}
1512impl<T: Clone + std::marker::Send + std::marker::Sync + 'static> JsonAdapterTrait<Option<T>> for OrNullJsonAdapter<T> {
1513fn clone_boxed(& self) -> JsonAdapter<Option<T>> {
1514 JsonAdapter::new(self.clone())
1515}
1516fn encode_to_json(& self, x__843: Option<T>, p__844: JsonProducer) {
1517 self.encode_to_json(x__843, p__844)
1518}
1519fn decode_from_json(& self, t__847: JsonSyntaxTree, ic__848: InterchangeContext) -> temper_core::Result<Option<T>> {
1520 self.decode_from_json(t__847, ic__848)
1521}
1522}
1523temper_core::impl_any_value_trait!(OrNullJsonAdapter<T>, [JsonAdapter<Option<T>>]);
1524fn encodeHex4__352(cp__580: i32, buffer__581: std::sync::Arc<std::sync::RwLock<String>>) {
1525let b0__583: i32 = cp__580.wrapping_div(4096) & 15;
1526let b1__584: i32 = cp__580.wrapping_div(256) & 15;
1527let b2__585: i32 = cp__580.wrapping_div(16) & 15;
1528let b3__586: i32 = cp__580 & 15;
1529let mut t___2482: std::sync::Arc<String> = temper_core::ListedTrait::get( & hex_digits(), b0__583);
1530temper_core::string::builder::append( & buffer__581, t___2482.clone());
1531let mut t___2484: std::sync::Arc<String> = temper_core::ListedTrait::get( & hex_digits(), b1__584);
1532temper_core::string::builder::append( & buffer__581, t___2484.clone());
1533let mut t___2486: std::sync::Arc<String> = temper_core::ListedTrait::get( & hex_digits(), b2__585);
1534temper_core::string::builder::append( & buffer__581, t___2486.clone());
1535let mut t___2488: std::sync::Arc<String> = temper_core::ListedTrait::get( & hex_digits(), b3__586);
1536temper_core::string::builder::append( & buffer__581, t___2488.clone());
1537}
1538fn encodeJsonString__351(x__572: impl temper_core::ToArcString, buffer__573: std::sync::Arc<std::sync::RwLock<String>>) {
1539let x__572 = x__572.to_arc_string();
1540let mut t___1745: bool;
1541let mut t___1746: bool;
1542let mut t___1747: std::sync::Arc<String>;
1543let mut t___1748: std::sync::Arc<String>;
1544temper_core::string::builder::append( & buffer__573, "\"");
1545let mut i__575: usize = 0usize;
1546let mut emitted__576: usize = i__575;
1547'loop___2650: loop {
1548 if ! temper_core::string::has_index( & x__572, i__575) {
1549 break;
1550 }
1551 let cp__577: i32 = temper_core::string::get( & x__572, i__575);
1552 if Some(cp__577) == Some(8) {
1553 t___1748 = std::sync::Arc::new("\\b".to_string());
1554 } else {
1555 if Some(cp__577) == Some(9) {
1556 t___1748 = std::sync::Arc::new("\\t".to_string());
1557 } else {
1558 if Some(cp__577) == Some(10) {
1559 t___1748 = std::sync::Arc::new("\\n".to_string());
1560 } else {
1561 if Some(cp__577) == Some(12) {
1562 t___1748 = std::sync::Arc::new("\\f".to_string());
1563 } else {
1564 if Some(cp__577) == Some(13) {
1565 t___1748 = std::sync::Arc::new("\\r".to_string());
1566 } else {
1567 if Some(cp__577) == Some(34) {
1568 t___1748 = std::sync::Arc::new("\\\"".to_string());
1569 } else {
1570 if Some(cp__577) == Some(92) {
1571 t___1748 = std::sync::Arc::new("\\\\".to_string());
1572 } else {
1573 if Some(cp__577) < Some(32) {
1574 t___1746 = true;
1575 } else {
1576 if Some(55296) <= Some(cp__577) {
1577 t___1745 = Some(cp__577) <= Some(57343);
1578 } else {
1579 t___1745 = false;
1580 }
1581 t___1746 = t___1745;
1582 }
1583 if t___1746 {
1584 t___1747 = std::sync::Arc::new("\\u".to_string());
1585 } else {
1586 t___1747 = std::sync::Arc::new("".to_string());
1587 }
1588 t___1748 = t___1747.clone();
1589 }
1590 }
1591 }
1592 }
1593 }
1594 }
1595 }
1596 let replacement__578: std::sync::Arc<String> = t___1748.clone();
1597 let nextI__579: usize = temper_core::string::next( & x__572, i__575);
1598 if Some(replacement__578.as_str()) != Some("") {
1599 temper_core::string::builder::append_between( & buffer__573, x__572.clone(), emitted__576, i__575);
1600 temper_core::string::builder::append( & buffer__573, replacement__578.clone());
1601 if Some(replacement__578.as_str()) == Some("\\u") {
1602 encodeHex4__352(cp__577, buffer__573.clone());
1603 }
1604 emitted__576 = nextI__579;
1605 }
1606 i__575 = nextI__579;
1607}
1608temper_core::string::builder::append_between( & buffer__573, x__572.clone(), emitted__576, i__575);
1609temper_core::string::builder::append( & buffer__573, "\"");
1610}
1611fn storeJsonError__354(out__659: JsonProducer, explanation__660: impl temper_core::ToArcString) {
1612let explanation__660 = explanation__660.to_arc_string();
1613let mut t___2361: Option<JsonParseErrorReceiver> = out__659.parse_error_receiver();
1614if ! t___2361.is_none() {
1615 t___2361.clone().unwrap().explain_json_error(explanation__660.clone());
1616}
1617}
1618fn expectedTokenError__353(sourceText__653: impl temper_core::ToArcString, i__654: usize, out__655: JsonProducer, shortExplanation__656: impl temper_core::ToArcString) {
1619let sourceText__653 = sourceText__653.to_arc_string();
1620let shortExplanation__656 = shortExplanation__656.to_arc_string();
1621let mut t___2358: usize;
1622let mut t___2359: std::sync::Arc<String>;
1623let gotten__658: std::sync::Arc<String>;
1624if temper_core::string::has_index( & sourceText__653, i__654) {
1625 t___2358 = sourceText__653.len();
1626 t___2359 = temper_core::string::slice( & sourceText__653, i__654, t___2358);
1627 gotten__658 = std::sync::Arc::new(format!("`{}`", t___2359.clone()));
1628} else {
1629 gotten__658 = std::sync::Arc::new("end-of-file".to_string());
1630}
1631storeJsonError__354(out__655.clone(), std::sync::Arc::new(format!("Expected {}, but got {}", shortExplanation__656.clone(), gotten__658.clone())));
1632}
1633fn skipJsonSpaces__355(sourceText__667: impl temper_core::ToArcString, mut i__668: usize) -> usize {
1634let sourceText__667 = sourceText__667.to_arc_string();
1635let mut t___2355: i32;
1636let mut t___2356: usize;
1637let mut t___1616: bool;
1638let mut t___1617: bool;
1639let mut t___1618: bool;
1640'loop___2652: loop {
1641 if ! temper_core::string::has_index( & sourceText__667, i__668) {
1642 break;
1643 }
1644 t___2355 = temper_core::string::get( & sourceText__667, i__668);
1645 if Some(t___2355) == Some(9) {
1646 t___1618 = true;
1647 } else {
1648 if Some(t___2355) == Some(10) {
1649 t___1617 = true;
1650 } else {
1651 if Some(t___2355) == Some(13) {
1652 t___1616 = true;
1653 } else {
1654 t___1616 = Some(t___2355) == Some(32);
1655 }
1656 t___1617 = t___1616;
1657 }
1658 t___1618 = t___1617;
1659 }
1660 if ! t___1618 {
1661 break;
1662 }
1663 t___2356 = temper_core::string::next( & sourceText__667, i__668);
1664 i__668 = t___2356;
1665}
1666return i__668;
1667}
1668fn decodeHexUnsigned__361(sourceText__708: impl temper_core::ToArcString, start__709: usize, limit__710: usize) -> i32 {
1669let sourceText__708 = sourceText__708.to_arc_string();
1670let return__307: i32;
1671let mut t___2353: usize;
1672let mut t___1609: bool;
1673let mut t___1610: bool;
1674let mut t___1611: bool;
1675let mut t___1612: i32;
1676'fn__711: {
1677 let mut n__712: i32 = 0;
1678 let mut i__713: usize = start__709;
1679 'loop___2653: loop {
1680 if ! (Some(Some(i__713).cmp( & Some(limit__710)) as i32) < Some(0)) {
1681 break;
1682 }
1683 let cp__714: i32 = temper_core::string::get( & sourceText__708, i__713);
1684 if Some(48) <= Some(cp__714) {
1685 t___1609 = Some(cp__714) <= Some(48);
1686 } else {
1687 t___1609 = false;
1688 }
1689 if t___1609 {
1690 t___1612 = cp__714.wrapping_sub(48);
1691 } else {
1692 if Some(65) <= Some(cp__714) {
1693 t___1610 = Some(cp__714) <= Some(70);
1694 } else {
1695 t___1610 = false;
1696 }
1697 if t___1610 {
1698 t___1612 = cp__714.wrapping_sub(65).wrapping_add(10);
1699 } else {
1700 if Some(97) <= Some(cp__714) {
1701 t___1611 = Some(cp__714) <= Some(102);
1702 } else {
1703 t___1611 = false;
1704 }
1705 if t___1611 {
1706 t___1612 = cp__714.wrapping_sub(97).wrapping_add(10);
1707 } else {
1708 return__307 = -1;
1709 break 'fn__711;
1710 }
1711 }
1712 }
1713 let digit__715: i32 = t___1612;
1714 n__712 = n__712.wrapping_mul(16).wrapping_add(digit__715);
1715 t___2353 = temper_core::string::next( & sourceText__708, i__713);
1716 i__713 = t___2353;
1717 }
1718 return__307 = n__712;
1719}
1720return return__307;
1721}
1722fn parseJsonStringTo__360(sourceText__692: impl temper_core::ToArcString, mut i__693: usize, sb__694: std::sync::Arc<std::sync::RwLock<String>>, errOut__695: JsonProducer) -> Option<usize> {
1723let sourceText__692 = sourceText__692.to_arc_string();
1724let return__306: Option<usize>;
1725let mut t___2326: i32;
1726let mut t___2328: usize;
1727let mut t___2331: usize;
1728let mut t___2336: usize;
1729let mut t___2338: usize;
1730let mut t___2339: usize;
1731let mut t___2340: usize;
1732let mut t___2341: usize;
1733let mut t___2342: i32;
1734let mut t___2347: i32;
1735let mut t___2350: usize;
1736let mut t___1570: bool;
1737let mut t___1579: bool;
1738let mut t___1580: bool;
1739let mut t___1588: i32;
1740let mut t___1589: i32;
1741let mut t___1591: i32;
1742let mut t___1593: i32;
1743let mut t___1594: bool;
1744let mut t___1595: bool;
1745let mut t___1597: bool;
1746let mut t___1601: bool;
1747'fn__696: {
1748 if ! temper_core::string::has_index( & sourceText__692, i__693) {
1749 t___1570 = true;
1750 } else {
1751 t___2326 = temper_core::string::get( & sourceText__692, i__693);
1752 t___1570 = Some(t___2326) != Some(34);
1753 }
1754 if t___1570 {
1755 expectedTokenError__353(sourceText__692.clone(), i__693, errOut__695.clone(), "\"");
1756 return__306 = None;
1757 break 'fn__696;
1758 }
1759 t___2328 = temper_core::string::next( & sourceText__692, i__693);
1760 i__693 = t___2328;
1761 let mut leadSurrogate__697: i32 = -1;
1762 let mut consumed__698: usize = i__693;
1763 'loop___2654: loop {
1764 if ! temper_core::string::has_index( & sourceText__692, i__693) {
1765 break;
1766 }
1767 let cp__699: i32 = temper_core::string::get( & sourceText__692, i__693);
1768 if Some(cp__699) == Some(34) {
1769 break;
1770 }
1771 t___2331 = temper_core::string::next( & sourceText__692, i__693);
1772 let mut iNext__700: usize = t___2331;
1773 let end__701: usize = sourceText__692.len();
1774 let mut needToFlush__702: bool = false;
1775 if Some(cp__699) != Some(92) {
1776 t___1593 = cp__699;
1777 } else {
1778 needToFlush__702 = true;
1779 if ! temper_core::string::has_index( & sourceText__692, iNext__700) {
1780 expectedTokenError__353(sourceText__692.clone(), iNext__700, errOut__695.clone(), "escape sequence");
1781 return__306 = None;
1782 break 'fn__696;
1783 }
1784 let esc0__704: i32 = temper_core::string::get( & sourceText__692, iNext__700);
1785 t___2336 = temper_core::string::next( & sourceText__692, iNext__700);
1786 iNext__700 = t___2336;
1787 if Some(esc0__704) == Some(34) {
1788 t___1580 = true;
1789 } else {
1790 if Some(esc0__704) == Some(92) {
1791 t___1579 = true;
1792 } else {
1793 t___1579 = Some(esc0__704) == Some(47);
1794 }
1795 t___1580 = t___1579;
1796 }
1797 if t___1580 {
1798 t___1591 = esc0__704;
1799 } else {
1800 if Some(esc0__704) == Some(98) {
1801 t___1591 = 8;
1802 } else {
1803 if Some(esc0__704) == Some(102) {
1804 t___1591 = 12;
1805 } else {
1806 if Some(esc0__704) == Some(110) {
1807 t___1591 = 10;
1808 } else {
1809 if Some(esc0__704) == Some(114) {
1810 t___1591 = 13;
1811 } else {
1812 if Some(esc0__704) == Some(116) {
1813 t___1591 = 9;
1814 } else {
1815 if Some(esc0__704) == Some(117) {
1816 if temper_core::string::has_at_least( & sourceText__692, iNext__700, end__701, 4) {
1817 let startHex__706: usize = iNext__700;
1818 t___2338 = temper_core::string::next( & sourceText__692, iNext__700);
1819 iNext__700 = t___2338;
1820 t___2339 = temper_core::string::next( & sourceText__692, iNext__700);
1821 iNext__700 = t___2339;
1822 t___2340 = temper_core::string::next( & sourceText__692, iNext__700);
1823 iNext__700 = t___2340;
1824 t___2341 = temper_core::string::next( & sourceText__692, iNext__700);
1825 iNext__700 = t___2341;
1826 t___2342 = decodeHexUnsigned__361(sourceText__692.clone(), startHex__706, iNext__700);
1827 t___1588 = t___2342;
1828 } else {
1829 t___1588 = -1;
1830 }
1831 let hex__705: i32 = t___1588;
1832 if Some(hex__705) < Some(0) {
1833 expectedTokenError__353(sourceText__692.clone(), iNext__700, errOut__695.clone(), "four hex digits");
1834 return__306 = None;
1835 break 'fn__696;
1836 }
1837 t___1589 = hex__705;
1838 t___1591 = t___1589;
1839 } else {
1840 expectedTokenError__353(sourceText__692.clone(), iNext__700, errOut__695.clone(), "escape sequence");
1841 return__306 = None;
1842 break 'fn__696;
1843 }
1844 }
1845 }
1846 }
1847 }
1848 }
1849 }
1850 t___1593 = t___1591;
1851 }
1852 let mut decodedCp__703: i32 = t___1593;
1853 if Some(leadSurrogate__697) >= Some(0) {
1854 needToFlush__702 = true;
1855 let lead__707: i32 = leadSurrogate__697;
1856 if Some(56320) <= Some(decodedCp__703) {
1857 t___1594 = Some(decodedCp__703) <= Some(57343);
1858 } else {
1859 t___1594 = false;
1860 }
1861 if t___1594 {
1862 leadSurrogate__697 = -1;
1863 decodedCp__703 = (65536 as i32).wrapping_add(lead__707.wrapping_sub(55296).wrapping_mul(1024) | decodedCp__703.wrapping_sub(56320));
1864 }
1865 } else {
1866 if Some(55296) <= Some(decodedCp__703) {
1867 t___1595 = Some(decodedCp__703) <= Some(56319);
1868 } else {
1869 t___1595 = false;
1870 }
1871 if t___1595 {
1872 needToFlush__702 = true;
1873 }
1874 }
1875 if needToFlush__702 {
1876 temper_core::string::builder::append_between( & sb__694, sourceText__692.clone(), consumed__698, i__693);
1877 if Some(leadSurrogate__697) >= Some(0) {
1878 'ok___2592: {
1879 'orelse___946: {
1880 match temper_core::string::builder::append_code_point( & sb__694, leadSurrogate__697) {
1881 Ok(x) => x,
1882 _ => break 'orelse___946
1883 };
1884 break 'ok___2592;
1885 }
1886 return panic!();
1887 }
1888 }
1889 if Some(55296) <= Some(decodedCp__703) {
1890 t___1597 = Some(decodedCp__703) <= Some(56319);
1891 } else {
1892 t___1597 = false;
1893 }
1894 if t___1597 {
1895 leadSurrogate__697 = decodedCp__703;
1896 } else {
1897 leadSurrogate__697 = -1;
1898 'ok___2593: {
1899 'orelse___947: {
1900 match temper_core::string::builder::append_code_point( & sb__694, decodedCp__703) {
1901 Ok(x) => x,
1902 _ => break 'orelse___947
1903 };
1904 break 'ok___2593;
1905 }
1906 return panic!();
1907 }
1908 }
1909 consumed__698 = iNext__700;
1910 }
1911 i__693 = iNext__700;
1912 }
1913 if ! temper_core::string::has_index( & sourceText__692, i__693) {
1914 t___1601 = true;
1915 } else {
1916 t___2347 = temper_core::string::get( & sourceText__692, i__693);
1917 t___1601 = Some(t___2347) != Some(34);
1918 }
1919 if t___1601 {
1920 expectedTokenError__353(sourceText__692.clone(), i__693, errOut__695.clone(), "\"");
1921 return__306 = None;
1922 } else {
1923 if Some(leadSurrogate__697) >= Some(0) {
1924 'ok___2594: {
1925 'orelse___948: {
1926 match temper_core::string::builder::append_code_point( & sb__694, leadSurrogate__697) {
1927 Ok(x) => x,
1928 _ => break 'orelse___948
1929 };
1930 break 'ok___2594;
1931 }
1932 return panic!();
1933 }
1934 } else {
1935 temper_core::string::builder::append_between( & sb__694, sourceText__692.clone(), consumed__698, i__693);
1936 }
1937 t___2350 = temper_core::string::next( & sourceText__692, i__693);
1938 i__693 = t___2350;
1939 return__306 = Some(i__693);
1940 }
1941}
1942return return__306;
1943}
1944fn parseJsonObject__357(sourceText__674: impl temper_core::ToArcString, mut i__675: usize, out__676: JsonProducer) -> Option<usize> {
1945let sourceText__674 = sourceText__674.to_arc_string();
1946let return__303: Option<usize>;
1947let mut t___2296: i32;
1948let mut t___2299: usize;
1949let mut t___2300: usize;
1950let mut t___2302: i32;
1951let mut t___2306: std::sync::Arc<String>;
1952let mut t___2308: usize;
1953let mut t___2310: i32;
1954let mut t___2311: usize;
1955let mut t___2315: usize;
1956let mut t___2317: i32;
1957let mut t___2318: usize;
1958let mut t___2319: usize;
1959let mut t___2321: i32;
1960let mut t___1533: bool;
1961let mut t___1539: bool;
1962let mut t___1545: usize;
1963let mut t___1547: usize;
1964let mut t___1551: bool;
1965let mut t___1555: usize;
1966let mut t___1560: bool;
1967let mut t___1565: bool;
1968'fn__677: {
1969 'ok___2597: {
1970 'orelse___949: {
1971 if ! temper_core::string::has_index( & sourceText__674, i__675) {
1972 t___1533 = true;
1973 } else {
1974 t___2296 = temper_core::string::get( & sourceText__674, i__675);
1975 t___1533 = Some(t___2296) != Some(123);
1976 }
1977 if t___1533 {
1978 expectedTokenError__353(sourceText__674.clone(), i__675, out__676.clone(), "'{'");
1979 return__303 = None;
1980 break 'fn__677;
1981 }
1982 out__676.start_object();
1983 t___2299 = temper_core::string::next( & sourceText__674, i__675);
1984 t___2300 = skipJsonSpaces__355(sourceText__674.clone(), t___2299);
1985 i__675 = t___2300;
1986 if temper_core::string::has_index( & sourceText__674, i__675) {
1987 t___2302 = temper_core::string::get( & sourceText__674, i__675);
1988 t___1539 = Some(t___2302) != Some(125);
1989 } else {
1990 t___1539 = false;
1991 }
1992 if t___1539 {
1993 'loop___2655: loop {
1994 let keyBuffer__678: std::sync::Arc<std::sync::RwLock<String>> = std::sync::Arc::new(std::sync::RwLock::new(String::new()));
1995 let afterKey__679: Option<usize> = parseJsonStringTo__360(sourceText__674.clone(), i__675, keyBuffer__678.clone(), out__676.clone());
1996 if ! afterKey__679.is_some() {
1997 return__303 = None;
1998 break 'fn__677;
1999 }
2000 t___2306 = temper_core::string::builder::to_string( & keyBuffer__678);
2001 out__676.object_key(t___2306.clone());
2002 'ok___2598: {
2003 'orelse___950: {
2004 t___1545 = match temper_core::string::cast_as_index(afterKey__679).ok_or_else(| | temper_core::Error::new()) {
2005 Ok(x) => x,
2006 _ => break 'orelse___950
2007 };
2008 t___1547 = t___1545;
2009 break 'ok___2598;
2010 }
2011 t___1547 = panic!();
2012 }
2013 t___2308 = skipJsonSpaces__355(sourceText__674.clone(), t___1547);
2014 i__675 = t___2308;
2015 if temper_core::string::has_index( & sourceText__674, i__675) {
2016 t___2310 = temper_core::string::get( & sourceText__674, i__675);
2017 t___1551 = Some(t___2310) == Some(58);
2018 } else {
2019 t___1551 = false;
2020 }
2021 if t___1551 {
2022 t___2311 = temper_core::string::next( & sourceText__674, i__675);
2023 i__675 = t___2311;
2024 let afterPropertyValue__680: Option<usize> = parseJsonValue__356(sourceText__674.clone(), i__675, out__676.clone());
2025 if ! afterPropertyValue__680.is_some() {
2026 return__303 = None;
2027 break 'fn__677;
2028 }
2029 t___1555 = match temper_core::string::cast_as_index(afterPropertyValue__680).ok_or_else(| | temper_core::Error::new()) {
2030 Ok(x) => x,
2031 _ => break 'orelse___949
2032 };
2033 i__675 = t___1555;
2034 } else {
2035 expectedTokenError__353(sourceText__674.clone(), i__675, out__676.clone(), "':'");
2036 return__303 = None;
2037 break 'fn__677;
2038 }
2039 t___2315 = skipJsonSpaces__355(sourceText__674.clone(), i__675);
2040 i__675 = t___2315;
2041 if temper_core::string::has_index( & sourceText__674, i__675) {
2042 t___2317 = temper_core::string::get( & sourceText__674, i__675);
2043 t___1560 = Some(t___2317) == Some(44);
2044 } else {
2045 t___1560 = false;
2046 }
2047 if t___1560 {
2048 t___2318 = temper_core::string::next( & sourceText__674, i__675);
2049 t___2319 = skipJsonSpaces__355(sourceText__674.clone(), t___2318);
2050 i__675 = t___2319;
2051 } else {
2052 break;
2053 }
2054 }
2055 }
2056 if temper_core::string::has_index( & sourceText__674, i__675) {
2057 t___2321 = temper_core::string::get( & sourceText__674, i__675);
2058 t___1565 = Some(t___2321) == Some(125);
2059 } else {
2060 t___1565 = false;
2061 }
2062 if t___1565 {
2063 out__676.end_object();
2064 return__303 = Some(temper_core::string::next( & sourceText__674, i__675));
2065 } else {
2066 expectedTokenError__353(sourceText__674.clone(), i__675, out__676.clone(), "'}'");
2067 return__303 = None;
2068 }
2069 break 'ok___2597;
2070 }
2071 return__303 = panic!();
2072 }
2073}
2074return return__303;
2075}
2076fn parseJsonArray__358(sourceText__681: impl temper_core::ToArcString, mut i__682: usize, out__683: JsonProducer) -> Option<usize> {
2077let sourceText__681 = sourceText__681.to_arc_string();
2078let return__304: Option<usize>;
2079let mut t___2276: i32;
2080let mut t___2279: usize;
2081let mut t___2280: usize;
2082let mut t___2282: i32;
2083let mut t___2285: usize;
2084let mut t___2287: i32;
2085let mut t___2288: usize;
2086let mut t___2289: usize;
2087let mut t___2291: i32;
2088let mut t___1509: bool;
2089let mut t___1515: bool;
2090let mut t___1518: usize;
2091let mut t___1523: bool;
2092let mut t___1528: bool;
2093'fn__684: {
2094 'ok___2600: {
2095 'orelse___951: {
2096 if ! temper_core::string::has_index( & sourceText__681, i__682) {
2097 t___1509 = true;
2098 } else {
2099 t___2276 = temper_core::string::get( & sourceText__681, i__682);
2100 t___1509 = Some(t___2276) != Some(91);
2101 }
2102 if t___1509 {
2103 expectedTokenError__353(sourceText__681.clone(), i__682, out__683.clone(), "'['");
2104 return__304 = None;
2105 break 'fn__684;
2106 }
2107 out__683.start_array();
2108 t___2279 = temper_core::string::next( & sourceText__681, i__682);
2109 t___2280 = skipJsonSpaces__355(sourceText__681.clone(), t___2279);
2110 i__682 = t___2280;
2111 if temper_core::string::has_index( & sourceText__681, i__682) {
2112 t___2282 = temper_core::string::get( & sourceText__681, i__682);
2113 t___1515 = Some(t___2282) != Some(93);
2114 } else {
2115 t___1515 = false;
2116 }
2117 if t___1515 {
2118 'loop___2656: loop {
2119 let afterElementValue__685: Option<usize> = parseJsonValue__356(sourceText__681.clone(), i__682, out__683.clone());
2120 if ! afterElementValue__685.is_some() {
2121 return__304 = None;
2122 break 'fn__684;
2123 }
2124 t___1518 = match temper_core::string::cast_as_index(afterElementValue__685).ok_or_else(| | temper_core::Error::new()) {
2125 Ok(x) => x,
2126 _ => break 'orelse___951
2127 };
2128 i__682 = t___1518;
2129 t___2285 = skipJsonSpaces__355(sourceText__681.clone(), i__682);
2130 i__682 = t___2285;
2131 if temper_core::string::has_index( & sourceText__681, i__682) {
2132 t___2287 = temper_core::string::get( & sourceText__681, i__682);
2133 t___1523 = Some(t___2287) == Some(44);
2134 } else {
2135 t___1523 = false;
2136 }
2137 if t___1523 {
2138 t___2288 = temper_core::string::next( & sourceText__681, i__682);
2139 t___2289 = skipJsonSpaces__355(sourceText__681.clone(), t___2288);
2140 i__682 = t___2289;
2141 } else {
2142 break;
2143 }
2144 }
2145 }
2146 if temper_core::string::has_index( & sourceText__681, i__682) {
2147 t___2291 = temper_core::string::get( & sourceText__681, i__682);
2148 t___1528 = Some(t___2291) == Some(93);
2149 } else {
2150 t___1528 = false;
2151 }
2152 if t___1528 {
2153 out__683.end_array();
2154 return__304 = Some(temper_core::string::next( & sourceText__681, i__682));
2155 } else {
2156 expectedTokenError__353(sourceText__681.clone(), i__682, out__683.clone(), "']'");
2157 return__304 = None;
2158 }
2159 break 'ok___2600;
2160 }
2161 return__304 = panic!();
2162 }
2163}
2164return return__304;
2165}
2166fn parseJsonString__359(sourceText__686: impl temper_core::ToArcString, mut i__687: usize, out__688: JsonProducer) -> Option<usize> {
2167let sourceText__686 = sourceText__686.to_arc_string();
2168let mut t___2273: std::sync::Arc<String>;
2169let sb__690: std::sync::Arc<std::sync::RwLock<String>> = std::sync::Arc::new(std::sync::RwLock::new(String::new()));
2170let after__691: Option<usize> = parseJsonStringTo__360(sourceText__686.clone(), i__687, sb__690.clone(), out__688.clone());
2171if after__691.is_some() {
2172 t___2273 = temper_core::string::builder::to_string( & sb__690);
2173 out__688.string_value(t___2273.clone());
2174}
2175return after__691;
2176}
2177fn afterSubstring__364(string__730: impl temper_core::ToArcString, inString__731: usize, substring__732: impl temper_core::ToArcString) -> Option<usize> {
2178let string__730 = string__730.to_arc_string();
2179let substring__732 = substring__732.to_arc_string();
2180let return__310: Option<usize>;
2181let mut t___2268: usize;
2182let mut t___2269: usize;
2183'fn__733: {
2184 let mut i__734: usize = inString__731;
2185 let mut j__735: usize = 0usize;
2186 'loop___2657: loop {
2187 if ! temper_core::string::has_index( & substring__732, j__735) {
2188 break;
2189 }
2190 if ! temper_core::string::has_index( & string__730, i__734) {
2191 return__310 = None;
2192 break 'fn__733;
2193 }
2194 if Some(temper_core::string::get( & string__730, i__734)) != Some(temper_core::string::get( & substring__732, j__735)) {
2195 return__310 = None;
2196 break 'fn__733;
2197 }
2198 t___2268 = temper_core::string::next( & string__730, i__734);
2199 i__734 = t___2268;
2200 t___2269 = temper_core::string::next( & substring__732, j__735);
2201 j__735 = t___2269;
2202 }
2203 return__310 = Some(i__734);
2204}
2205return return__310;
2206}
2207fn parseJsonBoolean__362(sourceText__716: impl temper_core::ToArcString, mut i__717: usize, out__718: JsonProducer) -> Option<usize> {
2208let sourceText__716 = sourceText__716.to_arc_string();
2209let return__308: Option<usize>;
2210let mut t___2257: i32;
2211'fn__719: {
2212 let ch0__720: i32;
2213 if temper_core::string::has_index( & sourceText__716, i__717) {
2214 t___2257 = temper_core::string::get( & sourceText__716, i__717);
2215 ch0__720 = t___2257;
2216 } else {
2217 ch0__720 = 0;
2218 }
2219 let end__721: usize = sourceText__716.len();
2220 let keyword__722: Option<std::sync::Arc<String>>;
2221 let n__723: i32;
2222 if Some(ch0__720) == Some(102) {
2223 keyword__722 = Some(std::sync::Arc::new("false".to_string()));
2224 n__723 = 5;
2225 } else {
2226 if Some(ch0__720) == Some(116) {
2227 keyword__722 = Some(std::sync::Arc::new("true".to_string()));
2228 n__723 = 4;
2229 } else {
2230 keyword__722 = None;
2231 n__723 = 0;
2232 }
2233 }
2234 if ! keyword__722.is_none() {
2235 let keyword___958: std::sync::Arc<String> = keyword__722.clone().unwrap();
2236 if temper_core::string::has_at_least( & sourceText__716, i__717, end__721, n__723) {
2237 let after__724: Option<usize> = afterSubstring__364(sourceText__716.clone(), i__717, keyword___958.clone());
2238 if after__724.is_some() {
2239 return__308 = Some(temper_core::string::cast_as_index(after__724).unwrap());
2240 out__718.boolean_value(Some(n__723) == Some(4));
2241 break 'fn__719;
2242 }
2243 }
2244 }
2245 expectedTokenError__353(sourceText__716.clone(), i__717, out__718.clone(), "`false` or `true`");
2246 return__308 = None;
2247}
2248return return__308;
2249}
2250fn parseJsonNull__363(sourceText__725: impl temper_core::ToArcString, i__726: usize, out__727: JsonProducer) -> Option<usize> {
2251let sourceText__725 = sourceText__725.to_arc_string();
2252let return__309: Option<usize>;
2253'fn__728: {
2254 let after__729: Option<usize> = afterSubstring__364(sourceText__725.clone(), i__726, "null");
2255 if after__729.is_some() {
2256 return__309 = Some(temper_core::string::cast_as_index(after__729).unwrap());
2257 out__727.null_value();
2258 break 'fn__728;
2259 }
2260 expectedTokenError__353(sourceText__725.clone(), i__726, out__727.clone(), "`null`");
2261 return__309 = None;
2262}
2263return return__309;
2264}
2265fn parseJsonNumber__365(sourceText__736: impl temper_core::ToArcString, mut i__737: usize, out__738: JsonProducer) -> Option<usize> {
2266let sourceText__736 = sourceText__736.to_arc_string();
2267let return__311: Option<usize>;
2268let mut t___2212: i32;
2269let mut t___2213: usize;
2270let mut t___2215: i32;
2271let mut t___2217: usize;
2272let mut t___2218: f64;
2273let mut t___2219: i64;
2274let mut t___2222: usize;
2275let mut t___2223: f64;
2276let mut t___2224: i64;
2277let mut t___2228: i32;
2278let mut t___2229: usize;
2279let mut t___2232: usize;
2280let mut t___2233: f64;
2281let mut t___2236: i32;
2282let mut t___2237: usize;
2283let mut t___2241: usize;
2284let mut t___2244: usize;
2285let mut t___2246: i32;
2286let mut t___1420: bool;
2287let mut t___1425: bool;
2288let mut t___1426: bool;
2289let mut t___1434: bool;
2290let mut t___1437: f64;
2291let mut t___1439: i64;
2292let mut t___1442: bool;
2293let mut t___1443: bool;
2294let mut t___1446: bool;
2295let mut t___1450: bool;
2296let mut t___1453: f64;
2297let mut t___1456: bool;
2298let mut t___1460: bool;
2299let mut t___1464: bool;
2300let mut t___1466: bool;
2301let mut t___1467: bool;
2302let mut t___1469: bool;
2303let mut t___1472: bool;
2304let mut t___1473: f64;
2305let mut t___1474: bool;
2306let mut t___1475: bool;
2307'fn__739: {
2308 let mut isNegative__740: bool = false;
2309 let startOfNumber__741: usize = i__737;
2310 if temper_core::string::has_index( & sourceText__736, i__737) {
2311 t___2212 = temper_core::string::get( & sourceText__736, i__737);
2312 t___1420 = Some(t___2212) == Some(45);
2313 } else {
2314 t___1420 = false;
2315 }
2316 if t___1420 {
2317 isNegative__740 = true;
2318 t___2213 = temper_core::string::next( & sourceText__736, i__737);
2319 i__737 = t___2213;
2320 }
2321 let digit0__742: i32;
2322 if temper_core::string::has_index( & sourceText__736, i__737) {
2323 t___2215 = temper_core::string::get( & sourceText__736, i__737);
2324 digit0__742 = t___2215;
2325 } else {
2326 digit0__742 = -1;
2327 }
2328 if Some(digit0__742) < Some(48) {
2329 t___1425 = true;
2330 } else {
2331 t___1425 = Some(57) < Some(digit0__742);
2332 }
2333 if t___1425 {
2334 let error__743: std::sync::Arc<String>;
2335 if ! isNegative__740 {
2336 t___1426 = Some(digit0__742) != Some(46);
2337 } else {
2338 t___1426 = false;
2339 }
2340 if t___1426 {
2341 error__743 = std::sync::Arc::new("JSON value".to_string());
2342 } else {
2343 error__743 = std::sync::Arc::new("digit".to_string());
2344 }
2345 expectedTokenError__353(sourceText__736.clone(), i__737, out__738.clone(), error__743.clone());
2346 return__311 = None;
2347 break 'fn__739;
2348 }
2349 t___2217 = temper_core::string::next( & sourceText__736, i__737);
2350 i__737 = t___2217;
2351 let mut nDigits__744: i32 = 1;
2352 t___2218 = digit0__742.wrapping_sub(48) as f64;
2353 let mut tentativeFloat64__745: f64 = t___2218;
2354 t___2219 = digit0__742.wrapping_sub(48) as i64;
2355 let mut tentativeInt64__746: i64 = t___2219;
2356 let mut overflowInt64__747: bool = false;
2357 if Some(48) != Some(digit0__742) {
2358 'loop___2658: loop {
2359 if ! temper_core::string::has_index( & sourceText__736, i__737) {
2360 break;
2361 }
2362 let possibleDigit__748: i32 = temper_core::string::get( & sourceText__736, i__737);
2363 if Some(48) <= Some(possibleDigit__748) {
2364 t___1434 = Some(possibleDigit__748) <= Some(57);
2365 } else {
2366 t___1434 = false;
2367 }
2368 if t___1434 {
2369 t___2222 = temper_core::string::next( & sourceText__736, i__737);
2370 i__737 = t___2222;
2371 nDigits__744 = nDigits__744.wrapping_add(1);
2372 let nextDigit__749: i32 = possibleDigit__748.wrapping_sub(48);
2373 t___1437 = tentativeFloat64__745 * 10.0f64;
2374 t___2223 = nextDigit__749 as f64;
2375 tentativeFloat64__745 = t___1437 + t___2223;
2376 let oldInt64__750: i64 = tentativeInt64__746;
2377 t___1439 = tentativeInt64__746.wrapping_mul(10);
2378 t___2224 = nextDigit__749 as i64;
2379 tentativeInt64__746 = t___1439.wrapping_add(t___2224);
2380 if Some(tentativeInt64__746) < Some(oldInt64__750) {
2381 if Some((-9223372036854775808 as i64).wrapping_sub(oldInt64__750)) == Some((nextDigit__749 as i64).wrapping_neg()) {
2382 if isNegative__740 {
2383 t___1442 = Some(oldInt64__750) > Some(0);
2384 } else {
2385 t___1442 = false;
2386 }
2387 t___1443 = t___1442;
2388 } else {
2389 t___1443 = false;
2390 }
2391 if ! t___1443 {
2392 overflowInt64__747 = true;
2393 }
2394 }
2395 } else {
2396 break;
2397 }
2398 }
2399 }
2400 let mut nDigitsAfterPoint__751: i32 = 0;
2401 if temper_core::string::has_index( & sourceText__736, i__737) {
2402 t___2228 = temper_core::string::get( & sourceText__736, i__737);
2403 t___1446 = Some(46) == Some(t___2228);
2404 } else {
2405 t___1446 = false;
2406 }
2407 if t___1446 {
2408 t___2229 = temper_core::string::next( & sourceText__736, i__737);
2409 i__737 = t___2229;
2410 let afterPoint__752: usize = i__737;
2411 'loop___2659: loop {
2412 if ! temper_core::string::has_index( & sourceText__736, i__737) {
2413 break;
2414 }
2415 let possibleDigit__753: i32 = temper_core::string::get( & sourceText__736, i__737);
2416 if Some(48) <= Some(possibleDigit__753) {
2417 t___1450 = Some(possibleDigit__753) <= Some(57);
2418 } else {
2419 t___1450 = false;
2420 }
2421 if t___1450 {
2422 t___2232 = temper_core::string::next( & sourceText__736, i__737);
2423 i__737 = t___2232;
2424 nDigits__744 = nDigits__744.wrapping_add(1);
2425 nDigitsAfterPoint__751 = nDigitsAfterPoint__751.wrapping_add(1);
2426 t___1453 = tentativeFloat64__745 * 10.0f64;
2427 t___2233 = possibleDigit__753.wrapping_sub(48) as f64;
2428 tentativeFloat64__745 = t___1453 + t___2233;
2429 } else {
2430 break;
2431 }
2432 }
2433 if i__737 == afterPoint__752 {
2434 expectedTokenError__353(sourceText__736.clone(), i__737, out__738.clone(), "digit");
2435 return__311 = None;
2436 break 'fn__739;
2437 }
2438 }
2439 let mut nExponentDigits__754: i32 = 0;
2440 if temper_core::string::has_index( & sourceText__736, i__737) {
2441 t___2236 = temper_core::string::get( & sourceText__736, i__737);
2442 t___1456 = Some(101) == Some(t___2236 | 32);
2443 } else {
2444 t___1456 = false;
2445 }
2446 if t___1456 {
2447 t___2237 = temper_core::string::next( & sourceText__736, i__737);
2448 i__737 = t___2237;
2449 if ! temper_core::string::has_index( & sourceText__736, i__737) {
2450 expectedTokenError__353(sourceText__736.clone(), i__737, out__738.clone(), "sign or digit");
2451 return__311 = None;
2452 break 'fn__739;
2453 }
2454 let afterE__755: i32 = temper_core::string::get( & sourceText__736, i__737);
2455 if Some(afterE__755) == Some(43) {
2456 t___1460 = true;
2457 } else {
2458 t___1460 = Some(afterE__755) == Some(45);
2459 }
2460 if t___1460 {
2461 t___2241 = temper_core::string::next( & sourceText__736, i__737);
2462 i__737 = t___2241;
2463 }
2464 'loop___2660: loop {
2465 if ! temper_core::string::has_index( & sourceText__736, i__737) {
2466 break;
2467 }
2468 let possibleDigit__756: i32 = temper_core::string::get( & sourceText__736, i__737);
2469 if Some(48) <= Some(possibleDigit__756) {
2470 t___1464 = Some(possibleDigit__756) <= Some(57);
2471 } else {
2472 t___1464 = false;
2473 }
2474 if t___1464 {
2475 t___2244 = temper_core::string::next( & sourceText__736, i__737);
2476 i__737 = t___2244;
2477 nExponentDigits__754 = nExponentDigits__754.wrapping_add(1);
2478 } else {
2479 break;
2480 }
2481 }
2482 if Some(nExponentDigits__754) == Some(0) {
2483 expectedTokenError__353(sourceText__736.clone(), i__737, out__738.clone(), "exponent digit");
2484 return__311 = None;
2485 break 'fn__739;
2486 }
2487 }
2488 let afterExponent__757: usize = i__737;
2489 if Some(nExponentDigits__754) == Some(0) {
2490 if Some(nDigitsAfterPoint__751) == Some(0) {
2491 t___1466 = ! overflowInt64__747;
2492 } else {
2493 t___1466 = false;
2494 }
2495 t___1467 = t___1466;
2496 } else {
2497 t___1467 = false;
2498 }
2499 if t___1467 {
2500 let value__758: i64;
2501 if isNegative__740 {
2502 value__758 = tentativeInt64__746.wrapping_neg();
2503 } else {
2504 value__758 = tentativeInt64__746;
2505 }
2506 if Some(-2147483648) <= Some(value__758) {
2507 t___1469 = Some(value__758) <= Some(2147483647);
2508 } else {
2509 t___1469 = false;
2510 }
2511 if t___1469 {
2512 t___2246 = value__758 as i32;
2513 out__738.int32_value(t___2246);
2514 } else {
2515 out__738.int64_value(value__758);
2516 }
2517 return__311 = Some(i__737);
2518 break 'fn__739;
2519 }
2520 let numericTokenString__759: std::sync::Arc<String> = temper_core::string::slice( & sourceText__736, startOfNumber__741, i__737);
2521 let mut doubleValue__760: f64 = f64::NAN;
2522 if Some(nExponentDigits__754) != Some(0) {
2523 t___1472 = true;
2524 } else {
2525 t___1472 = Some(nDigitsAfterPoint__751) != Some(0);
2526 }
2527 if t___1472 {
2528 'ok___2601: {
2529 'orelse___953: {
2530 t___1473 = match temper_core::string::to_float64( & numericTokenString__759) {
2531 Ok(x) => x,
2532 _ => break 'orelse___953
2533 };
2534 doubleValue__760 = t___1473;
2535 break 'ok___2601;
2536 }
2537 }
2538 }
2539 if temper_core::float64::cmp_option(Some(doubleValue__760), Some(f64::NEG_INFINITY)) != 0{
2540 if temper_core::float64::cmp_option(Some(doubleValue__760), Some(f64::INFINITY)) != 0{
2541 t___1474 = temper_core::float64::cmp_option(Some(doubleValue__760), Some(f64::NAN)) != 0;
2542 } else {
2543 t___1474 = false;
2544 }
2545 t___1475 = t___1474;
2546 } else {
2547 t___1475 = false;
2548 }
2549 if t___1475 {
2550 out__738.float64_value(doubleValue__760);
2551 } else {
2552 out__738.numeric_token_value(numericTokenString__759.clone());
2553 }
2554 return__311 = Some(i__737);
2555}
2556return return__311;
2557}
2558pub fn parse_json_to_producer(sourceText__662: impl temper_core::ToArcString, out__663: JsonProducer) {
2559let sourceText__662 = sourceText__662.to_arc_string();
2560let mut t___2195: usize;
2561let mut t___2197: Option<JsonParseErrorReceiver>;
2562let mut t___2198: usize;
2563let mut t___2199: std::sync::Arc<String>;
2564let mut t___1402: bool;
2565let mut t___1405: usize;
2566let mut i__665: usize = 0usize;
2567let afterValue__666: Option<usize> = parseJsonValue__356(sourceText__662.clone(), i__665, out__663.clone());
2568if afterValue__666.is_some() {
2569 t___1405 = temper_core::string::cast_as_index(afterValue__666).unwrap();
2570 t___2195 = skipJsonSpaces__355(sourceText__662.clone(), t___1405);
2571 i__665 = t___2195;
2572 if temper_core::string::has_index( & sourceText__662, i__665) {
2573 t___2197 = out__663.parse_error_receiver();
2574 t___1402 = ! t___2197.is_none();
2575 } else {
2576 t___1402 = false;
2577 }
2578 if t___1402 {
2579 t___2198 = sourceText__662.len();
2580 t___2199 = temper_core::string::slice( & sourceText__662, i__665, t___2198);
2581 storeJsonError__354(out__663.clone(), std::sync::Arc::new(format!("Extraneous JSON `{}`", t___2199.clone())));
2582 }
2583}
2584}
2585pub fn parse_json(sourceText__761: impl temper_core::ToArcString) -> temper_core::Result<JsonSyntaxTree> {
2586let sourceText__761 = sourceText__761.to_arc_string();
2587let return__312: JsonSyntaxTree;
2588let p__763: JsonSyntaxTreeProducer = JsonSyntaxTreeProducer::new();
2589parse_json_to_producer(sourceText__761.clone(), JsonProducer::new(p__763.clone()));
2590return__312 = p__763.to_json_syntax_tree() ? ;
2591return Ok(return__312.clone());
2592}
2593pub fn boolean_json_adapter() -> JsonAdapter<bool> {
2594return JsonAdapter::new(BooleanJsonAdapter::new());
2595}
2596pub fn float64_json_adapter() -> JsonAdapter<f64> {
2597return JsonAdapter::new(Float64JsonAdapter::new());
2598}
2599pub fn int32_json_adapter() -> JsonAdapter<i32> {
2600return JsonAdapter::new(Int32JsonAdapter::new());
2601}
2602pub fn int64_json_adapter() -> JsonAdapter<i64> {
2603return JsonAdapter::new(Int64JsonAdapter::new());
2604}
2605pub fn string_json_adapter() -> JsonAdapter<std::sync::Arc<String>> {
2606return JsonAdapter::new(StringJsonAdapter::new());
2607}
2608pub fn list_json_adapter<T>(adapterForT__839: JsonAdapter<T>) -> JsonAdapter<temper_core::List<T>> where T: Clone + std::marker::Send + std::marker::Sync + 'static {
2609return JsonAdapter::new(ListJsonAdapter::new(adapterForT__839.clone()));
2610}