Return error if expected argument not provided

This commit is contained in:
Elara 2022-06-02 02:09:07 -07:00
parent 771c8c136e
commit e518b68d8c
1 changed files with 12 additions and 0 deletions

View File

@ -42,6 +42,7 @@ var (
ErrNoSuchMethod = errors.New("no such method was found") ErrNoSuchMethod = errors.New("no such method was found")
ErrInvalidMethod = errors.New("method invalid for lrpc call") ErrInvalidMethod = errors.New("method invalid for lrpc call")
ErrUnexpectedArgument = errors.New("argument provided but the function does not accept any arguments") ErrUnexpectedArgument = errors.New("argument provided but the function does not accept any arguments")
ErrArgNotProvided = errors.New("method expected an argument, but none was provided")
) )
// Server is an lrpc server // Server is an lrpc server
@ -152,6 +153,9 @@ func (s *Server) execute(pCtx context.Context, typ string, name string, arg any,
switch mtdType.NumOut() { switch mtdType.NumOut() {
case 0: // If method has no return values case 0: // If method has no return values
if mtdType.NumIn() == 2 { if mtdType.NumIn() == 2 {
if arg == nil {
return nil, nil, ErrArgNotProvided
}
// Call method with arg, ignore returned value // Call method with arg, ignore returned value
mtd.Call([]reflect.Value{ctxVal, reflect.ValueOf(arg)}) mtd.Call([]reflect.Value{ctxVal, reflect.ValueOf(arg)})
} else { } else {
@ -160,6 +164,10 @@ func (s *Server) execute(pCtx context.Context, typ string, name string, arg any,
} }
case 1: // If method has one return value case 1: // If method has one return value
if mtdType.NumIn() == 2 { if mtdType.NumIn() == 2 {
if arg == nil {
return nil, nil, ErrArgNotProvided
}
// Call method with arg, get returned values // Call method with arg, get returned values
out := mtd.Call([]reflect.Value{ctxVal, reflect.ValueOf(arg)}) out := mtd.Call([]reflect.Value{ctxVal, reflect.ValueOf(arg)})
@ -194,6 +202,10 @@ func (s *Server) execute(pCtx context.Context, typ string, name string, arg any,
} }
case 2: // If method has two return values case 2: // If method has two return values
if mtdType.NumIn() == 2 { if mtdType.NumIn() == 2 {
if arg == nil {
return nil, nil, ErrArgNotProvided
}
// Call method with arg and get returned values // Call method with arg and get returned values
out := mtd.Call([]reflect.Value{ctxVal, reflect.ValueOf(arg)}) out := mtd.Call([]reflect.Value{ctxVal, reflect.ValueOf(arg)})