1- use std:: { convert :: TryInto , collections :: BTreeMap } ;
1+ use std:: { collections :: BTreeMap , convert :: TryInto } ;
22
33use serde_cbor:: value:: { from_value, Value } ;
44use witnet_data_structures:: radon_report:: ReportContext ;
55
66use crate :: {
77 error:: RadError ,
88 operators:: string,
9- types:: { array:: RadonArray , map:: RadonMap , string:: RadonString , RadonType , RadonTypes } ,
10- script:: { RadonScriptExecutionSettings , execute_radon_script, unpack_subscript, partial_results_extract} ,
9+ script:: {
10+ execute_radon_script, partial_results_extract, unpack_subscript,
11+ RadonScriptExecutionSettings ,
12+ } ,
13+ types:: { array:: RadonArray , map:: RadonMap , string:: RadonString , RadonType , RadonTypes } ,
1114} ;
1215
1316pub fn alter (
14- input : & RadonMap ,
17+ input : & RadonMap ,
1518 args : & [ Value ] ,
16- context : & mut ReportContext < RadonTypes >
19+ context : & mut ReportContext < RadonTypes > ,
1720) -> Result < RadonMap , RadError > {
1821 let wrong_args = || RadError :: WrongArguments {
1922 input_type : RadonMap :: radon_type_name ( ) ,
@@ -33,7 +36,7 @@ pub fn alter(
3336 Value :: Text ( key) => {
3437 input_keys. push ( key. clone ( ) ) ;
3538 }
36- _ => return Err ( wrong_args ( ) )
39+ _ => return Err ( wrong_args ( ) ) ,
3740 } ;
3841
3942 let subscript = args. get ( 1 ) . ok_or_else ( wrong_args) ?;
@@ -45,24 +48,22 @@ pub fn alter(
4548 inner : Box :: new ( e) ,
4649 } ;
4750 let subscript = unpack_subscript ( subscript) . map_err ( subscript_err) ?;
48-
49- let not_found = |key_str : & str | RadError :: MapKeyNotFound { key : String :: from ( key_str) } ;
51+
52+ let not_found = |key_str : & str | RadError :: MapKeyNotFound {
53+ key : String :: from ( key_str) ,
54+ } ;
5055
5156 let input_map = input. value ( ) ;
5257 let mut output_map = input. value ( ) . clone ( ) ;
5358 let mut reports = vec ! [ ] ;
54-
59+
5560 let settings = RadonScriptExecutionSettings :: tailored_to_stage ( & context. stage ) ;
5661 for key in input_keys {
5762 let value = input_map
5863 . get ( key. as_str ( ) )
5964 . ok_or_else ( || not_found ( key. as_str ( ) ) ) ?;
60- let report = execute_radon_script (
61- value. clone ( ) ,
62- subscript. as_slice ( ) ,
63- context,
64- settings
65- ) ?;
65+ let report =
66+ execute_radon_script ( value. clone ( ) , subscript. as_slice ( ) , context, settings) ?;
6667 // If there is an error while altering value, short-circuit and bubble up the error as it comes
6768 // from the radon script execution
6869 if let RadonTypes :: RadonError ( error) = & report. result {
@@ -71,14 +72,14 @@ pub fn alter(
7172 output_map. insert ( key, report. result . clone ( ) ) ;
7273 }
7374 reports. push ( report) ;
74- }
75-
75+ }
76+
7677 // Extract the partial results from the reports and put them in the execution context if needed
7778 partial_results_extract ( & subscript, & reports, context) ;
7879
7980 Ok ( RadonMap :: from ( output_map) )
8081 }
81- _ => Err ( wrong_args ( ) )
82+ _ => Err ( wrong_args ( ) ) ,
8283 }
8384}
8485
@@ -156,10 +157,10 @@ pub fn values(input: &RadonMap) -> RadonArray {
156157}
157158
158159pub fn pick ( input : & RadonMap , args : & [ Value ] ) -> Result < RadonMap , RadError > {
159- let not_found = |key_str : & str | RadError :: MapKeyNotFound {
160- key : String :: from ( key_str)
160+ let not_found = |key_str : & str | RadError :: MapKeyNotFound {
161+ key : String :: from ( key_str) ,
161162 } ;
162-
163+
163164 let wrong_args = || RadError :: WrongArguments {
164165 input_type : RadonMap :: radon_type_name ( ) ,
165166 operator : "Pick" . to_string ( ) ,
@@ -174,14 +175,15 @@ pub fn pick(input: &RadonMap, args: &[Value]) -> Result<RadonMap, RadError> {
174175 match first_arg {
175176 Value :: Array ( keys) => {
176177 for key in keys. iter ( ) {
177- let key_string = from_value :: < String > ( key. to_owned ( ) ) . map_err ( |_| wrong_args ( ) ) ?;
178+ let key_string =
179+ from_value :: < String > ( key. to_owned ( ) ) . map_err ( |_| wrong_args ( ) ) ?;
178180 input_keys. push ( key_string) ;
179181 }
180182 }
181183 Value :: Text ( key) => {
182184 input_keys. push ( key. clone ( ) ) ;
183185 }
184- _ => return Err ( wrong_args ( ) )
186+ _ => return Err ( wrong_args ( ) ) ,
185187 } ;
186188 }
187189
@@ -190,18 +192,17 @@ pub fn pick(input: &RadonMap, args: &[Value]) -> Result<RadonMap, RadError> {
190192 if let Some ( value) = input. value ( ) . get ( & key) {
191193 output_map. insert ( key, value. clone ( ) ) ;
192194 } else {
193- return Err ( not_found ( key. as_str ( ) ) )
195+ return Err ( not_found ( key. as_str ( ) ) ) ;
194196 }
195197 }
196198 Ok ( RadonMap :: from ( output_map) )
197199}
198200
199201pub fn stringify ( input : & RadonMap ) -> Result < RadonString , RadError > {
200- let json_string = serde_json:: to_string ( & input. value ( ) )
201- . map_err ( |_| RadError :: Decode {
202- from : "RadonMap" ,
203- to : "RadonString"
204- } ) ?;
202+ let json_string = serde_json:: to_string ( & input. value ( ) ) . map_err ( |_| RadError :: Decode {
203+ from : "RadonMap" ,
204+ to : "RadonString" ,
205+ } ) ?;
205206 Ok ( RadonString :: from ( json_string) )
206207}
207208
0 commit comments