11use std:: ffi:: CString ;
22
3- #[ macro_use]
3+ // #[macro_use]
44extern crate redismodule;
5+
56use redismodule:: { Context , Command , RedisResult , RedisValue , RedisError } ;
67
78fn hello_mul ( _: & Context , args : Vec < String > ) -> RedisResult {
8- if args. len ( ) != 3 {
9+ if args. len ( ) < 3 {
910 return Err ( RedisError :: WrongArity ) ;
1011 }
1112
12- let m1 = parse_integer ( & args[ 1 ] ) ?;
13- let m2 = parse_integer ( & args[ 2 ] ) ?;
13+ let maybe_nums: Vec < _ > = args
14+ . into_iter ( )
15+ . skip ( 1 ) // The command itself
16+ . map ( parse_integer)
17+ . collect ( ) ;
18+
19+ let mut nums = vec ! [ ] ;
20+ for n in maybe_nums {
21+ nums. push ( n?) ;
22+ }
1423
15- let result = m1 * m2 ;
24+ nums . push ( nums . iter ( ) . product ( ) ) ;
1625
17- return Ok ( RedisValue :: Array (
18- vec ! [ m1, m2, result]
19- . into_iter ( )
20- . map ( |v| RedisValue :: Integer ( v) )
21- . collect ( ) ) ) ;
26+ return Ok ( RedisValue :: Array ( nums
27+ . into_iter ( )
28+ . map ( RedisValue :: Integer )
29+ . collect ( ) ) ) ;
2230}
2331
2432//////////////////////////////////////////////////////
2533
26- fn parse_integer ( arg : & str ) -> Result < i64 , RedisError > {
34+ fn parse_integer ( arg : String ) -> Result < i64 , RedisError > {
2735 arg. parse :: < i64 > ( )
2836 . map_err ( |_| RedisError :: String ( format ! ( "Couldn't parse as integer: {}" , arg) ) )
2937}
@@ -33,8 +41,8 @@ fn parse_integer(arg: &str) -> Result<i64, RedisError> {
3341const MODULE_NAME : & str = "hello" ;
3442const MODULE_VERSION : u32 = 1 ;
3543
44+ /*
3645redis_module!(MODULE_NAME, MODULE_VERSION, [
3746 Command::new("hello.mul", hello_mul, "write"),
3847]);
39-
40-
48+ */
0 commit comments