(
ctx: &Ctx<'js>,
value: Value<'js>,
replacer: Option<Value<'js>>,
indentation: Option<String>,
)
| 42 | } |
| 43 | |
| 44 | pub 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 => { |
no test coverage detected