temper_std/json/
mod.rs

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}