main.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. zrfu "git.swzry.com/zry/zry-rust-ffi-utils/go-zrfu"
  6. "io"
  7. )
  8. type TestCBORStruct struct {
  9. A string `cbor:"a"`
  10. B int64 `cbor:"b"`
  11. C map[string]string `cbor:"c"`
  12. D map[string]interface{} `cbor:"d"`
  13. }
  14. func main() {
  15. lib, err := zrfu.LoadDyLib("zrfu_test_rust.dll")
  16. if err != nil {
  17. fmt.Println("failed init dll: ", err)
  18. return
  19. }
  20. lib.SetDebugMode(true)
  21. bv1, err := zrfu.NewBytesVec(lib)
  22. defer bv1.Close()
  23. if err != nil {
  24. fmt.Println("failed new BytesVec: ", err)
  25. return
  26. }
  27. fmt.Println("Write 'neko: '...")
  28. n, err := bv1.Write([]byte("neko: "))
  29. if err != nil {
  30. fmt.Println("failed write to BytesVec: ", err)
  31. return
  32. }
  33. fmt.Println(n, "byte(s) written into BytesVec.")
  34. l, err := bv1.Len()
  35. if err != nil {
  36. fmt.Println("failed get length of BytesVec: ", err)
  37. return
  38. }
  39. fmt.Println("Now length=", l, " byte(s).")
  40. fmt.Println("Write 'nya~'...")
  41. n, err = bv1.Write([]byte("nya~"))
  42. if err != nil {
  43. fmt.Println("failed write to BytesVec: ", err)
  44. return
  45. }
  46. fmt.Println(n, "byte(s) written into BytesVec.")
  47. l, err = bv1.Len()
  48. if err != nil {
  49. fmt.Println("failed get length of BytesVec: ", err)
  50. return
  51. }
  52. fmt.Println("Now length=", l, " byte(s).")
  53. rdat, err := io.ReadAll(bv1)
  54. if err != nil {
  55. fmt.Println("failed read from BytesVec: ", err)
  56. return
  57. }
  58. fmt.Println("Read from BytesVec: ", string(rdat))
  59. fmt.Println("======== Call Func Test ========")
  60. caller, err := zrfu.NewZRFUCaller(lib)
  61. if err != nil {
  62. fmt.Println("failed init ZRFUCaller: ", err)
  63. return
  64. }
  65. fmt.Println("---- TestFuncAR ----")
  66. argar := &TestCBORStruct{
  67. A: "hello, TestFuncAR",
  68. B: 114514,
  69. C: map[string]string{
  70. "nya": "meow~",
  71. "hello": "world",
  72. },
  73. D: map[string]interface{}{
  74. "test": 1919.810,
  75. "satori": 5,
  76. },
  77. }
  78. var retar TestCBORStruct
  79. err = caller.CallAR("TestFuncAR", argar, &retar)
  80. if err != nil {
  81. fmt.Println("failed call proc: ", err)
  82. return
  83. }
  84. fmt.Println(" ---- TestFuncAR Result ----")
  85. JsonPrintUtil(retar)
  86. fmt.Println("---- TestFuncA ----")
  87. arga := &TestCBORStruct{
  88. A: "hello, TestFuncA",
  89. B: 1919810,
  90. C: map[string]string{
  91. "nya": "cat",
  92. "hello": "gensokyo",
  93. },
  94. D: map[string]interface{}{
  95. "test": 114.514,
  96. "satori": 5,
  97. },
  98. }
  99. err = caller.CallA("TestFuncA", arga)
  100. if err != nil {
  101. fmt.Println("failed call proc: ", err)
  102. return
  103. }
  104. fmt.Println("---- TestFuncR ----")
  105. var retr TestCBORStruct
  106. err = caller.CallR("TestFuncR", &retr)
  107. if err != nil {
  108. fmt.Println("failed call proc: ", err)
  109. return
  110. }
  111. fmt.Println(" ---- TestFuncR Result ----")
  112. JsonPrintUtil(retar)
  113. fmt.Println("---- TestFuncN ----")
  114. err = caller.CallN("TestFuncN")
  115. if err != nil {
  116. fmt.Println("failed call proc: ", err)
  117. return
  118. }
  119. }
  120. func JsonPrintUtil(v interface{}) {
  121. jd, err := json.MarshalIndent(v, "\t", " ")
  122. if err != nil {
  123. fmt.Println("Failed encode json for debug: ", err)
  124. return
  125. }
  126. fmt.Println(string(jd))
  127. }