code.icb4dc0.de/buildr/wasi-module-sdk-go@v0.0.0-20230524201105-cc52d195017b/state_proxy.go (about) 1 package sdk 2 3 import ( 4 "errors" 5 6 rpcv1 "code.icb4dc0.de/buildr/wasi-module-sdk-go/protocol/generated/rpc/v1" 7 8 "code.icb4dc0.de/buildr/wasi-module-sdk-go/mem" 9 ) 10 11 type StateProxy struct { 12 } 13 14 func (s StateProxy) Set(key, state []byte) error { 15 setCmd := &rpcv1.SetState{ 16 Key: key, 17 Data: state, 18 } 19 data, err := setCmd.MarshalVT() 20 if err != nil { 21 return err 22 } 23 24 result := _set_state(mem.DataToManagedPtr(data)) 25 if result == 0 { 26 return errors.New("unknown error occurred") 27 } 28 resultPtr := uint32(result >> 32) 29 resultSize := uint32(result) 30 31 if resultSize == 0 { 32 return nil 33 } 34 35 resultMsg := new(rpcv1.Result) 36 if err := resultMsg.UnmarshalVT(mem.PtrToData(resultPtr, resultSize)); err != nil { 37 return err 38 } 39 40 if !resultMsg.Success { 41 if resultMsg.Error != "" { 42 return errors.New(resultMsg.Error) 43 } 44 return errors.New("unknown error occurred") 45 } 46 47 return nil 48 } 49 50 func (s StateProxy) Get(key []byte) (state []byte, meta StateMetadata, err error) { 51 getCmd := &rpcv1.GetStateRequest{ 52 Key: key, 53 } 54 55 data, err := getCmd.MarshalVT() 56 if err != nil { 57 return nil, StateMetadata{}, err 58 } 59 60 result := _get_state(mem.DataToManagedPtr(data)) 61 if result == 0 { 62 return nil, StateMetadata{}, errors.New("error occurred while processing request") 63 } 64 resultPtr := uint32(result >> 32) 65 resultSize := uint32(result) 66 67 if resultSize == 0 { 68 return nil, StateMetadata{}, nil 69 } 70 71 getStateResult := new(rpcv1.GetStateResponse) 72 if err := getStateResult.UnmarshalVT(mem.PtrToData(resultPtr, resultSize)); err != nil { 73 return nil, StateMetadata{}, err 74 } 75 76 return getStateResult.Data, StateMetadata{}, nil 77 }