123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- 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
- }
|