github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/rpc/object.go (about) 1 package rpc 2 3 import ( 4 "github.com/TrueCloudLab/frostfs-api-go/v2/object" 5 "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" 6 "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/common" 7 "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/message" 8 ) 9 10 const serviceObject = serviceNamePrefix + "object.ObjectService" 11 12 const ( 13 rpcObjectPut = "Put" 14 rpcObjectGet = "Get" 15 rpcObjectSearch = "Search" 16 rpcObjectRange = "GetRange" 17 rpcObjectHash = "GetRangeHash" 18 rpcObjectHead = "Head" 19 rpcObjectDelete = "Delete" 20 ) 21 22 // PutRequestWriter is an object.PutRequest 23 // message streaming component. 24 type PutRequestWriter struct { 25 wc client.MessageWriterCloser 26 27 resp message.Message 28 } 29 30 // Write writes req to the stream. 31 func (w *PutRequestWriter) Write(req *object.PutRequest) error { 32 return w.wc.WriteMessage(req) 33 } 34 35 // Close closes the stream. 36 func (w *PutRequestWriter) Close() error { 37 return w.wc.Close() 38 } 39 40 // PutObject executes ObjectService.Put RPC. 41 func PutObject( 42 cli *client.Client, 43 resp *object.PutResponse, 44 opts ...client.CallOption, 45 ) (*PutRequestWriter, error) { 46 wc, err := client.OpenClientStream(cli, common.CallMethodInfoClientStream(serviceObject, rpcObjectPut), resp, opts...) 47 if err != nil { 48 return nil, err 49 } 50 51 return &PutRequestWriter{ 52 wc: wc, 53 resp: resp, 54 }, nil 55 } 56 57 // GetResponseReader is an object.GetResponse 58 // stream reader. 59 type GetResponseReader struct { 60 r client.MessageReader 61 } 62 63 // Read reads response from the stream. 64 // 65 // Returns io.EOF of streaming is finished. 66 func (r *GetResponseReader) Read(resp *object.GetResponse) error { 67 return r.r.ReadMessage(resp) 68 } 69 70 // GetObject executes ObjectService.Get RPC. 71 func GetObject( 72 cli *client.Client, 73 req *object.GetRequest, 74 opts ...client.CallOption, 75 ) (*GetResponseReader, error) { 76 wc, err := client.OpenServerStream(cli, common.CallMethodInfoServerStream(serviceObject, rpcObjectGet), req, opts...) 77 if err != nil { 78 return nil, err 79 } 80 81 return &GetResponseReader{ 82 r: wc, 83 }, nil 84 } 85 86 // GetResponseReader is an object.SearchResponse 87 // stream reader. 88 type SearchResponseReader struct { 89 r client.MessageReader 90 } 91 92 // Read reads response from the stream. 93 // 94 // Returns io.EOF of streaming is finished. 95 func (r *SearchResponseReader) Read(resp *object.SearchResponse) error { 96 return r.r.ReadMessage(resp) 97 } 98 99 // SearchObjects executes ObjectService.Search RPC. 100 func SearchObjects( 101 cli *client.Client, 102 req *object.SearchRequest, 103 opts ...client.CallOption, 104 ) (*SearchResponseReader, error) { 105 wc, err := client.OpenServerStream(cli, common.CallMethodInfoServerStream(serviceObject, rpcObjectSearch), req, opts...) 106 if err != nil { 107 return nil, err 108 } 109 110 return &SearchResponseReader{ 111 r: wc, 112 }, nil 113 } 114 115 // GetResponseReader is an object.GetRangeResponse 116 // stream reader. 117 type ObjectRangeResponseReader struct { 118 r client.MessageReader 119 } 120 121 // Read reads response from the stream. 122 // 123 // Returns io.EOF of streaming is finished. 124 func (r *ObjectRangeResponseReader) Read(resp *object.GetRangeResponse) error { 125 return r.r.ReadMessage(resp) 126 } 127 128 // GetObjectRange executes ObjectService.GetRange RPC. 129 func GetObjectRange( 130 cli *client.Client, 131 req *object.GetRangeRequest, 132 opts ...client.CallOption, 133 ) (*ObjectRangeResponseReader, error) { 134 wc, err := client.OpenServerStream(cli, common.CallMethodInfoServerStream(serviceObject, rpcObjectRange), req, opts...) 135 if err != nil { 136 return nil, err 137 } 138 139 return &ObjectRangeResponseReader{ 140 r: wc, 141 }, nil 142 } 143 144 // HeadObject executes ObjectService.Head RPC. 145 func HeadObject( 146 cli *client.Client, 147 req *object.HeadRequest, 148 opts ...client.CallOption, 149 ) (*object.HeadResponse, error) { 150 resp := new(object.HeadResponse) 151 152 err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectHead), req, resp, opts...) 153 if err != nil { 154 return nil, err 155 } 156 157 return resp, nil 158 } 159 160 // DeleteObject executes ObjectService.Delete RPC. 161 func DeleteObject( 162 cli *client.Client, 163 req *object.DeleteRequest, 164 opts ...client.CallOption, 165 ) (*object.DeleteResponse, error) { 166 resp := new(object.DeleteResponse) 167 168 err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectDelete), req, resp, opts...) 169 if err != nil { 170 return nil, err 171 } 172 173 return resp, nil 174 } 175 176 // HashObjectRange executes ObjectService.GetRangeHash RPC. 177 func HashObjectRange( 178 cli *client.Client, 179 req *object.GetRangeHashRequest, 180 opts ...client.CallOption, 181 ) (*object.GetRangeHashResponse, error) { 182 resp := new(object.GetRangeHashResponse) 183 184 err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectHash), req, resp, opts...) 185 if err != nil { 186 return nil, err 187 } 188 189 return resp, nil 190 }