[#94] rpc: Introduce ObjectService.Patch method

Signed-off-by: Airat Arifullin <a.arifullin@yadro.com>
This commit is contained in:
Airat Arifullin 2024-07-24 17:45:30 +03:00 committed by Evgenii Stratonikov
parent 9b90d139c5
commit 8580b49c8d
2 changed files with 39 additions and 3 deletions

View file

@ -1336,7 +1336,7 @@ func (r *PatchRequestBodyPatch) StableMarshal(buf []byte) []byte {
var offset int var offset int
offset += proto.NestedStructureMarshal(patchRequestBodyPatchRangeField, buf[offset:], r.Range) offset += proto.NestedStructureMarshal(patchRequestBodyPatchRangeField, buf[offset:], r.Range)
offset += proto.BytesMarshal(patchRequestBodyPatchChunkField, buf[offset:], r.Chunk) proto.BytesMarshal(patchRequestBodyPatchChunkField, buf[offset:], r.Chunk)
return buf return buf
} }
@ -1372,7 +1372,7 @@ func (r *PatchRequestBody) StableMarshal(buf []byte) []byte {
offset += proto.NestedStructureMarshal(patchRequestBodyNewAttrsField, buf[offset:], &r.NewAttributes[i]) offset += proto.NestedStructureMarshal(patchRequestBodyNewAttrsField, buf[offset:], &r.NewAttributes[i])
} }
offset += proto.BoolMarshal(patchRequestBodyReplaceAttrField, buf[offset:], r.ReplaceAttributes) offset += proto.BoolMarshal(patchRequestBodyReplaceAttrField, buf[offset:], r.ReplaceAttributes)
offset += proto.NestedStructureMarshal(patchRequestBodyPatchField, buf[offset:], r.Patch) proto.NestedStructureMarshal(patchRequestBodyPatchField, buf[offset:], r.Patch)
return buf return buf
} }
@ -1418,7 +1418,7 @@ func (r *PatchResponseBody) StableMarshal(buf []byte) []byte {
} }
var offset int var offset int
offset += proto.NestedStructureMarshal(patchResponseBodyObjectIDField, buf[offset:], r.ObjectID) proto.NestedStructureMarshal(patchResponseBodyObjectIDField, buf[offset:], r.ObjectID)
return buf return buf
} }

View file

@ -18,6 +18,7 @@ const (
rpcObjectHead = "Head" rpcObjectHead = "Head"
rpcObjectDelete = "Delete" rpcObjectDelete = "Delete"
rpcObjectPutSingle = "PutSingle" rpcObjectPutSingle = "PutSingle"
rpcObjectPatch = "Patch"
) )
// PutRequestWriter is an object.PutRequest // PutRequestWriter is an object.PutRequest
@ -205,3 +206,38 @@ func PutSingleObject(
return resp, nil return resp, nil
} }
// PatchRequestWriter is an object.PatchRequest
// message streaming component.
type PatchRequestWriter struct {
wc client.MessageWriterCloser
resp message.Message
}
// Write writes req to the stream.
func (w *PatchRequestWriter) Write(req *object.PatchRequest) error {
return w.wc.WriteMessage(req)
}
// Close closes the stream.
func (w *PatchRequestWriter) Close() error {
return w.wc.Close()
}
// Patch executes ObjectService.Patch RPC.
func Patch(
cli *client.Client,
resp *object.PatchResponse,
opts ...client.CallOption,
) (*PatchRequestWriter, error) {
wc, err := client.OpenClientStream(cli, common.CallMethodInfoClientStream(serviceObject, rpcObjectPatch), resp, opts...)
if err != nil {
return nil, err
}
return &PatchRequestWriter{
wc: wc,
resp: resp,
}, nil
}