1- use tucana:: shared:: Value ;
2-
31use crate :: context:: signal:: Signal ;
42use crate :: { context:: Context , error:: RuntimeError , registry:: HandlerFn } ;
3+ use tucana:: shared:: Value ;
4+ use tucana:: shared:: value:: Kind ;
55
66pub fn collect_control_functions ( ) -> Vec < ( & ' static str , HandlerFn ) > {
77 vec ! [
88 ( "std::control::stop" , stop) ,
99 ( "std::control::return" , r#return) ,
10+ ( "std::control::if" , r#if) ,
11+ ( "std::control::if_else" , if_else) ,
1012 ]
1113}
1214
@@ -24,3 +26,63 @@ fn r#return(values: &[Value], _ctx: &mut Context) -> Signal {
2426
2527 Signal :: Return ( Value { kind : kind. clone ( ) } )
2628}
29+
30+ fn r#if ( values : & [ Value ] , _ctx : & mut Context ) -> Signal {
31+ let [
32+ Value {
33+ kind : Some ( Kind :: StringValue ( text) ) ,
34+ } ,
35+ ] = values
36+ else {
37+ return Signal :: Failure ( RuntimeError :: simple (
38+ "InvalidArgumentRuntimeError" ,
39+ format ! ( "Expected a string value but received {:?}" , values) ,
40+ ) ) ;
41+ } ;
42+
43+ let bool: bool = match text. to_lowercase ( ) . parse ( ) {
44+ Ok ( value) => value,
45+ Err ( _) => {
46+ return Signal :: Failure ( RuntimeError :: simple (
47+ "InvalidArgumentRuntimeError" ,
48+ format ! ( "Failed to parse boolean from string: {:?}" , text) ,
49+ ) ) ;
50+ }
51+ } ;
52+
53+ if bool {
54+ unimplemented ! ( )
55+ } else {
56+ unimplemented ! ( )
57+ }
58+ }
59+
60+ fn if_else ( values : & [ Value ] , _ctx : & mut Context ) -> Signal {
61+ let [
62+ Value {
63+ kind : Some ( Kind :: StringValue ( text) ) ,
64+ } ,
65+ ] = values
66+ else {
67+ return Signal :: Failure ( RuntimeError :: simple (
68+ "InvalidArgumentRuntimeError" ,
69+ format ! ( "Expected a string value but received {:?}" , values) ,
70+ ) ) ;
71+ } ;
72+
73+ let bool: bool = match text. to_lowercase ( ) . parse ( ) {
74+ Ok ( value) => value,
75+ Err ( _) => {
76+ return Signal :: Failure ( RuntimeError :: simple (
77+ "InvalidArgumentRuntimeError" ,
78+ format ! ( "Failed to parse boolean from string: {:?}" , text) ,
79+ ) ) ;
80+ }
81+ } ;
82+
83+ if bool {
84+ unimplemented ! ( )
85+ } else {
86+ unimplemented ! ( )
87+ }
88+ }
0 commit comments