MCPcopy Create free account
hub / github.com/awslabs/llrt / json_stringify_replacer_space

Function json_stringify_replacer_space

libs/llrt_json/src/stringify.rs:44–114  ·  view source on GitHub ↗
(
    ctx: &Ctx<'js>,
    value: Value<'js>,
    replacer: Option<Value<'js>>,
    indentation: Option<String>,
)

Source from the content-addressed store, hash-verified

42}
43
44pub fn json_stringify_replacer_space<'js>(
45 ctx: &Ctx<'js>,
46 value: Value<'js>,
47 replacer: Option<Value<'js>>,
48 indentation: Option<String>,
49) -> Result<Option<String>> {
50 let mut result = String::with_capacity(128);
51 let mut replacer_fn = None;
52 let mut include_keys_replacer = None;
53
54 let tmp_function;
55
56 let mut itoa_buffer = itoa::Buffer::new();
57 let mut ryu_buffer = ryu::Buffer::new();
58
59 if let Some(replacer) = replacer {
60 if let Some(function) = replacer.as_function() {
61 tmp_function = function.clone();
62 replacer_fn = Some(&tmp_function);
63 } else if let Some(array) = replacer.as_array() {
64 let mut filter = HashSet::with_capacity(array.len());
65 for value in array.clone().into_iter() {
66 let value = value?;
67 if let Some(string) = value.as_string() {
68 filter.insert(string.to_string()?);
69 } else if let Some(number) = value.as_int() {
70 filter.insert(itoa_buffer.format(number).to_string());
71 } else if let Some(number) = value.as_float() {
72 filter.insert(ryu_buffer.format(number).to_string());
73 }
74 }
75 include_keys_replacer = Some(filter);
76 }
77 }
78
79 let indentation = indentation.as_deref();
80 let include_keys_replacer = include_keys_replacer.as_ref();
81
82 let mut ancestors = Vec::with_capacity(10);
83
84 let mut context = StringifyContext {
85 ctx,
86 result: &mut result,
87 value: &value,
88 depth: 0,
89 indentation: None,
90 key: None,
91 index: None,
92 parent: None,
93 ancestors: &mut ancestors,
94 replacer_fn,
95 include_keys_replacer,
96 itoa_buffer: &mut itoa_buffer,
97 ryu_buffer: &mut ryu_buffer,
98 };
99
100 match write_primitive(&mut context, false)? {
101 PrimitiveStatus::Written => {

Callers 4

redefine_static_methodsFunction · 0.85
json_parserFunction · 0.85
json_stringifyFunction · 0.85
json_stringify_replacerFunction · 0.85

Calls 6

write_primitiveFunction · 0.85
iterateFunction · 0.85
formatMethod · 0.65
cloneMethod · 0.45
lenMethod · 0.45
to_stringMethod · 0.45

Tested by

no test coverage detected