@@ -120,3 +120,84 @@ pub extern "C" fn eval_ruby_script_returning_json1(
120120 }
121121 }
122122}
123+
124+ #[ unsafe( no_mangle) ]
125+ pub extern "C" fn eval_ruby_script_returning_json2 (
126+ text_ptr : * const c_char ,
127+ arg1_ptr : * const c_char ,
128+ arg2_ptr : * const c_char ,
129+ ) -> * const c_char {
130+ unsafe {
131+ let text = cstr_to_str ( text_ptr) ;
132+ let arg1 = cstr_to_str ( arg1_ptr) ;
133+ let arg2 = cstr_to_str ( arg2_ptr) ;
134+ match eval_ruby_script_with_setup ( text, |vm| {
135+ let arg1_str = RObject :: string ( arg1. to_string ( ) ) . to_refcount_assigned ( ) ;
136+ let arg1_json = mrubyedge_serde_json:: mrb_json_class_load ( vm, & [ arg1_str] )
137+ . unwrap_or_else ( |_| RObject :: nil ( ) . to_refcount_assigned ( ) ) ;
138+ vm. globals . insert ( "$arg1" . to_string ( ) , arg1_json) ;
139+
140+ let arg2_str = RObject :: string ( arg2. to_string ( ) ) . to_refcount_assigned ( ) ;
141+ let arg2_json = mrubyedge_serde_json:: mrb_json_class_load ( vm, & [ arg2_str] )
142+ . unwrap_or_else ( |_| RObject :: nil ( ) . to_refcount_assigned ( ) ) ;
143+ vm. globals . insert ( "$arg2" . to_string ( ) , arg2_json) ;
144+ } ) {
145+ Some ( result) => {
146+ let s: String = ( & * result) . try_into ( ) . unwrap_or_default ( ) ;
147+ match CString :: new ( s) {
148+ Ok ( cstring) => {
149+ let ptr = cstring. as_ptr ( ) ;
150+ LAST_STRING_RESULT = Some ( cstring) ;
151+ ptr
152+ }
153+ Err ( _) => std:: ptr:: null ( ) ,
154+ }
155+ }
156+ None => std:: ptr:: null ( ) ,
157+ }
158+ }
159+ }
160+
161+ #[ unsafe( no_mangle) ]
162+ pub extern "C" fn eval_ruby_script_returning_json3 (
163+ text_ptr : * const c_char ,
164+ arg1_ptr : * const c_char ,
165+ arg2_ptr : * const c_char ,
166+ arg3_ptr : * const c_char ,
167+ ) -> * const c_char {
168+ unsafe {
169+ let text = cstr_to_str ( text_ptr) ;
170+ let arg1 = cstr_to_str ( arg1_ptr) ;
171+ let arg2 = cstr_to_str ( arg2_ptr) ;
172+ let arg3 = cstr_to_str ( arg3_ptr) ;
173+ match eval_ruby_script_with_setup ( text, |vm| {
174+ let arg1_str = RObject :: string ( arg1. to_string ( ) ) . to_refcount_assigned ( ) ;
175+ let arg1_json = mrubyedge_serde_json:: mrb_json_class_load ( vm, & [ arg1_str] )
176+ . unwrap_or_else ( |_| RObject :: nil ( ) . to_refcount_assigned ( ) ) ;
177+ vm. globals . insert ( "$arg1" . to_string ( ) , arg1_json) ;
178+
179+ let arg2_str = RObject :: string ( arg2. to_string ( ) ) . to_refcount_assigned ( ) ;
180+ let arg2_json = mrubyedge_serde_json:: mrb_json_class_load ( vm, & [ arg2_str] )
181+ . unwrap_or_else ( |_| RObject :: nil ( ) . to_refcount_assigned ( ) ) ;
182+ vm. globals . insert ( "$arg2" . to_string ( ) , arg2_json) ;
183+
184+ let arg3_str = RObject :: string ( arg3. to_string ( ) ) . to_refcount_assigned ( ) ;
185+ let arg3_json = mrubyedge_serde_json:: mrb_json_class_load ( vm, & [ arg3_str] )
186+ . unwrap_or_else ( |_| RObject :: nil ( ) . to_refcount_assigned ( ) ) ;
187+ vm. globals . insert ( "$arg3" . to_string ( ) , arg3_json) ;
188+ } ) {
189+ Some ( result) => {
190+ let s: String = ( & * result) . try_into ( ) . unwrap_or_default ( ) ;
191+ match CString :: new ( s) {
192+ Ok ( cstring) => {
193+ let ptr = cstring. as_ptr ( ) ;
194+ LAST_STRING_RESULT = Some ( cstring) ;
195+ ptr
196+ }
197+ Err ( _) => std:: ptr:: null ( ) ,
198+ }
199+ }
200+ None => std:: ptr:: null ( ) ,
201+ }
202+ }
203+ }
0 commit comments