@@ -165,20 +165,21 @@ impl<'a> Interpreter<'a> {
165
165
}
166
166
}
167
167
168
- fn eval_complex ( & self , expr : & Value ) -> Result < PdlResult , PdlError > {
168
+ /// Traverse the given JSON Value, applying `self.eval()` to the value elements within.
169
+ fn eval_json ( & self , expr : & Value ) -> Result < PdlResult , PdlError > {
169
170
match expr {
170
171
Value :: Null => Ok ( "" . into ( ) ) ,
171
172
Value :: Bool ( b) => Ok ( PdlResult :: Bool ( * b) ) ,
172
173
Value :: Number ( n) => Ok ( PdlResult :: Number ( n. clone ( ) ) ) ,
173
174
Value :: String ( s) => self . eval ( s) ,
174
175
Value :: Array ( a) => Ok ( PdlResult :: List (
175
176
a. iter ( )
176
- . map ( |v| self . eval_complex ( v) )
177
+ . map ( |v| self . eval_json ( v) )
177
178
. collect :: < Result < _ , _ > > ( ) ?,
178
179
) ) ,
179
180
Value :: Object ( o) => Ok ( PdlResult :: Dict (
180
181
o. iter ( )
181
- . map ( |( k, v) | match self . eval_complex ( v) {
182
+ . map ( |( k, v) | match self . eval_json ( v) {
182
183
Ok ( v) => Ok ( ( k. clone ( ) , v) ) ,
183
184
Err ( e) => Err ( e) ,
184
185
} )
@@ -197,7 +198,7 @@ impl<'a> Interpreter<'a> {
197
198
s, x
198
199
) ) ) ,
199
200
} ,
200
- ListOrString :: List ( l) => l. iter ( ) . map ( |v| self . eval_complex ( v) ) . collect ( ) ,
201
+ ListOrString :: List ( l) => l. iter ( ) . map ( |v| self . eval_json ( v) ) . collect ( ) ,
201
202
}
202
203
}
203
204
@@ -225,6 +226,7 @@ impl<'a> Interpreter<'a> {
225
226
Ok ( ( trace, messages, PdlBlock :: String ( msg. clone ( ) ) ) )
226
227
}
227
228
229
+ /// If `file_path` is not absolute, join it with self.cwd
228
230
fn path_to ( & self , file_path : & String ) -> PathBuf {
229
231
let mut path = self . cwd . clone ( ) ;
230
232
path. push ( file_path) ;
@@ -247,7 +249,7 @@ impl<'a> Interpreter<'a> {
247
249
) ) )
248
250
}
249
251
} else {
250
- //self.eval_complex (value)
252
+ //self.eval_json (value)
251
253
Ok ( value. clone ( ) )
252
254
} ?;
253
255
@@ -302,7 +304,7 @@ impl<'a> Interpreter<'a> {
302
304
let res = match self . eval ( & block. call ) ? {
303
305
PdlResult :: Closure ( c) => {
304
306
if let Some ( args) = & block. args {
305
- match self . eval_complex ( args) ? {
307
+ match self . eval_json ( args) ? {
306
308
PdlResult :: Dict ( m) => {
307
309
self . push_and_extend_scope_with ( m, c. scope ) ;
308
310
Ok ( ( ) )
@@ -572,6 +574,7 @@ impl<'a> Interpreter<'a> {
572
574
}
573
575
}
574
576
577
+ /// Transform a JSON Value into a PdlResult object
575
578
fn resultify ( & self , value : & Value ) -> PdlResult {
576
579
match value {
577
580
Value :: Null => "" . into ( ) ,
@@ -589,6 +592,7 @@ impl<'a> Interpreter<'a> {
589
592
}
590
593
}
591
594
595
+ /// Run a PdlBlock::Data
592
596
async fn run_data ( & mut self , block : & DataBlock , _context : Context ) -> Interpretation {
593
597
if self . debug {
594
598
eprintln ! ( "Data raw={:?} {:?}" , block. raw, block. data) ;
@@ -599,7 +603,7 @@ impl<'a> Interpreter<'a> {
599
603
let result = self . def ( & block. def , & self . resultify ( & block. data ) , & block. parser ) ?;
600
604
Ok ( ( result, vec ! [ ] , PdlBlock :: Data ( trace) ) )
601
605
} else {
602
- let result = self . def ( & block. def , & self . eval_complex ( & block. data ) ?, & block. parser ) ?;
606
+ let result = self . def ( & block. def , & self . eval_json ( & block. data ) ?, & block. parser ) ?;
603
607
trace. data = from_str ( to_string ( & result) ?. as_str ( ) ) ?;
604
608
Ok ( ( result, vec ! [ ] , PdlBlock :: Data ( trace) ) )
605
609
}
@@ -786,6 +790,7 @@ impl<'a> Interpreter<'a> {
786
790
) )
787
791
}
788
792
793
+ /// Run a PdlBlock::Array
789
794
async fn run_array ( & mut self , block : & ArrayBlock , context : Context ) -> Interpretation {
790
795
let mut result_items = vec ! [ ] ;
791
796
let mut all_messages = vec ! [ ] ;
@@ -807,6 +812,7 @@ impl<'a> Interpreter<'a> {
807
812
) )
808
813
}
809
814
815
+ /// Run a PdlBlock::Message
810
816
async fn run_message ( & mut self , block : & MessageBlock , context : Context ) -> Interpretation {
811
817
let ( content_result, content_messages, content_trace) =
812
818
self . run ( & block. content , context) . await ?;
@@ -865,6 +871,7 @@ pub fn run_sync(program: &PdlBlock, cwd: Option<PathBuf>, debug: bool) -> Interp
865
871
. map_err ( |err| Box :: < dyn Error > :: from ( err. to_string ( ) ) )
866
872
}
867
873
874
+ /// Read in a file from disk and parse it as a PDL program
868
875
fn parse_file ( path : & PathBuf ) -> Result < PdlBlock , PdlError > {
869
876
from_reader ( File :: open ( path) ?)
870
877
. map_err ( |err| Box :: < dyn Error + Send + Sync > :: from ( err. to_string ( ) ) )
0 commit comments