package go_zrfu import ( "fmt" cbor "github.com/fxamacker/cbor/v2" ) type ZRFUCaller struct { lib *ZRFUDyLib } func NewZRFUCaller(lib *ZRFUDyLib) (*ZRFUCaller, error) { c := &ZRFUCaller{ lib: lib, } _, err := lib.procCall(lib.procPCInit) if err != nil { return nil, fmt.Errorf("error in init proc caller: %v", err) } return c, nil } func (c *ZRFUCaller) CallN(procName string) error { pnbv, err := NewBytesVec(c.lib) if err != nil { return fmt.Errorf("error in call proc: FuncName: NewBytesVec: %v", err) } defer pnbv.Close() cben := cbor.NewEncoder(pnbv) err = cben.Encode(procName) if err != nil { return fmt.Errorf("error in call proc: FuncName: CBOREncoding: %v", err) } _, err = c.lib.procCall(c.lib.procPCCall, pnbv.HandlePtr(), 0, 0) if err != nil { return fmt.Errorf("error in call proc: ProcCall: %v", err) } return nil } func (c *ZRFUCaller) CallAR(procName string, argData interface{}, retData interface{}) error { pnbv, err := NewBytesVec(c.lib) if err != nil { return fmt.Errorf("error in call proc: FuncName: NewBytesVec: %v", err) } defer pnbv.Close() argbv, err := NewBytesVec(c.lib) if err != nil { return fmt.Errorf("error in call proc: Args: NewBytesVec: %v", err) } defer argbv.Close() retbv, err := NewBytesVec(c.lib) if err != nil { return fmt.Errorf("error in call proc: RetVal: NewBytesVec: %v", err) } defer retbv.Close() cben := cbor.NewEncoder(pnbv) err = cben.Encode(procName) if err != nil { return fmt.Errorf("error in call proc: FuncName: CBOREncoding: %v", err) } argen := cbor.NewEncoder(argbv) err = argen.Encode(argData) if err != nil { return fmt.Errorf("error in call proc: Args: CBOREncoding: %v", err) } _, err = c.lib.procCall(c.lib.procPCCall, pnbv.HandlePtr(), argbv.HandlePtr(), retbv.HandlePtr()) if err != nil { return fmt.Errorf("error in call proc: ProcCall: %v", err) } retde := cbor.NewDecoder(retbv) err = retde.Decode(retData) if err != nil { return fmt.Errorf("error in call proc: RetVal: CBORDecoding: %v", err) } return nil } func (c *ZRFUCaller) CallA(procName string, argData interface{}) error { pnbv, err := NewBytesVec(c.lib) if err != nil { return fmt.Errorf("error in call proc: FuncName: NewBytesVec: %v", err) } defer pnbv.Close() argbv, err := NewBytesVec(c.lib) if err != nil { return fmt.Errorf("error in call proc: Args: NewBytesVec: %v", err) } defer argbv.Close() cben := cbor.NewEncoder(pnbv) err = cben.Encode(procName) if err != nil { return fmt.Errorf("error in call proc: FuncName: CBOREncoding: %v", err) } argen := cbor.NewEncoder(argbv) err = argen.Encode(argData) if err != nil { return fmt.Errorf("error in call proc: Args: CBOREncoding: %v", err) } _, err = c.lib.procCall(c.lib.procPCCall, pnbv.HandlePtr(), argbv.HandlePtr(), 0) if err != nil { return fmt.Errorf("error in call proc: ProcCall: %v", err) } return nil } func (c *ZRFUCaller) CallR(procName string, retData interface{}) error { pnbv, err := NewBytesVec(c.lib) if err != nil { return fmt.Errorf("error in call proc: FuncName: NewBytesVec: %v", err) } defer pnbv.Close() retbv, err := NewBytesVec(c.lib) if err != nil { return fmt.Errorf("error in call proc: RetVal: NewBytesVec: %v", err) } defer retbv.Close() cben := cbor.NewEncoder(pnbv) err = cben.Encode(procName) if err != nil { return fmt.Errorf("error in call proc: FuncName: CBOREncoding: %v", err) } _, err = c.lib.procCall(c.lib.procPCCall, pnbv.HandlePtr(), 0, retbv.HandlePtr()) if err != nil { return fmt.Errorf("error in call proc: ProcCall: %v", err) } retde := cbor.NewDecoder(retbv) err = retde.Decode(retData) if err != nil { return fmt.Errorf("error in call proc: RetVal: CBORDecoding: %v", err) } return nil }