11use phper:: {
2+ alloc:: EBox ,
23 arrays:: Array ,
3- classes:: { StdClass , This } ,
4+ classes:: StdClass ,
45 functions:: Argument ,
56 ini:: Policy ,
67 modules:: { Module , ModuleArgs } ,
8+ objects:: Object ,
79 php_get_module,
8- values:: { SetVal , Val } ,
10+ values:: Val ,
911} ;
1012
1113fn module_init ( _args : ModuleArgs ) -> bool {
1214 true
1315}
1416
15- fn say_hello ( arguments : & mut [ Val ] ) -> impl SetVal {
16- let name = arguments[ 0 ] . as_string ( ) ;
17- format ! ( "Hello, {}!\n " , name)
17+ fn say_hello ( arguments : & mut [ Val ] ) -> phper :: Result < String > {
18+ let name = arguments[ 0 ] . as_string_value ( ) ? ;
19+ Ok ( format ! ( "Hello, {}!\n " , name) )
1820}
1921
2022fn throw_exception ( _: & mut [ Val ] ) -> phper:: Result < ( ) > {
2123 Err ( phper:: Error :: other ( "I am sorry" ) )
2224}
2325
2426#[ php_get_module]
25- pub fn get_module ( module : & mut Module ) {
26- // set module metadata
27- module. set_name ( env ! ( "CARGO_PKG_NAME" ) ) ;
28- module. set_version ( env ! ( "CARGO_PKG_VERSION" ) ) ;
29- module. set_author ( env ! ( "CARGO_PKG_AUTHORS" ) ) ;
27+ pub fn get_module ( ) -> Module {
28+ let mut module = Module :: new (
29+ env ! ( "CARGO_PKG_NAME" ) ,
30+ env ! ( "CARGO_PKG_VERSION" ) ,
31+ env ! ( "CARGO_PKG_AUTHORS" ) ,
32+ ) ;
3033
3134 // register module ini
3235 module. add_bool_ini ( "hello.enable" , false , Policy :: All ) ;
@@ -48,35 +51,37 @@ pub fn get_module(module: &mut Module) {
4851 |_: & mut [ Val ] | {
4952 let mut arr = Array :: new ( ) ;
5053
51- let mut hello_enable = Val :: new ( Module :: get_bool_ini ( "hello.enable" ) ) ;
52- arr. insert ( "hello.enable" , & mut hello_enable) ;
54+ let hello_enable = Val :: new ( Module :: get_bool_ini ( "hello.enable" ) ) ;
55+ arr. insert ( "hello.enable" , hello_enable) ;
5356
54- let mut hello_description = Val :: new ( Module :: get_str_ini ( "hello.description" ) ) ;
55- arr. insert ( "hello.description" , & mut hello_description) ;
57+ let hello_description = Val :: new ( Module :: get_str_ini ( "hello.description" ) ) ;
58+ arr. insert ( "hello.description" , hello_description) ;
5659
57- arr
60+ EBox :: new ( arr)
5861 } ,
5962 vec ! [ ] ,
6063 ) ;
6164
6265 // register classes
6366 let mut foo_class = StdClass :: new ( ) ;
64- foo_class. add_property ( "foo" , 100 ) ;
67+ foo_class. add_property ( "foo" , " 100" . to_string ( ) ) ;
6568 foo_class. add_method (
6669 "getFoo" ,
67- |this : & mut This , _: & mut [ Val ] | {
70+ |this : & mut Object , _: & mut [ Val ] | -> phper :: Result < Val > {
6871 let prop = this. get_property ( "foo" ) ;
69- Val :: from_val ( prop)
72+ Ok ( Val :: new ( prop. as_string_value ( ) ? ) )
7073 } ,
7174 vec ! [ ] ,
7275 ) ;
7376 foo_class. add_method (
7477 "setFoo" ,
75- |this : & mut This , arguments : & mut [ Val ] | {
76- let prop = this. get_property ( "foo" ) ;
77- prop . set ( & arguments [ 0 ] ) ;
78+ |this : & mut Object , arguments : & mut [ Val ] | -> phper :: Result < ( ) > {
79+ this. set_property ( "foo" , arguments [ 0 ] . as_string_value ( ) ? ) ;
80+ Ok ( ( ) )
7881 } ,
7982 vec ! [ Argument :: by_val( "foo" ) ] ,
8083 ) ;
8184 module. add_class ( "FooClass" , foo_class) ;
85+
86+ module
8287}
0 commit comments