frostfs-api-go/lock/grpc/types.go
Airat Arifullin 2511f4ca70
All checks were successful
Tests and linters / Tests (1.19) (pull_request) Successful in 1m39s
Tests and linters / Lint (pull_request) Successful in 1m46s
Tests and linters / Tests with -race (pull_request) Successful in 3m12s
Tests and linters / Tests (1.20) (pull_request) Successful in 7m6s
[#40] types: Generate StableMarshaler/StableSize methods for protobufs
* Add plugin option for protogen in Makefile
* Fix the generator for the plugin in util/protogen
* Erase convertable types, move helpful methods to gRPC protobufs
* Erase helpers for convertations
* Generate StableMarshlal/StableSize for protobufs by the protoc plugin

Signed-off-by: Airat Arifullin a.arifullin@yadro.com
2023-07-10 15:29:21 +03:00

62 lines
1.3 KiB
Go

package lock
import (
"errors"
"fmt"
object "git.frostfs.info/TrueCloudLab/aarifullin/v2/object/grpc"
refs "git.frostfs.info/TrueCloudLab/aarifullin/v2/refs/grpc"
"google.golang.org/protobuf/proto"
)
// SetMembers sets `members` field.
func (x *Lock) SetMembers(ids []*refs.ObjectID) {
x.Members = ids
}
func (x *Lock) Unmarshal(data []byte) error {
return proto.Unmarshal(data, x)
}
// WriteLock writes Lock to the Object as a payload content.
// The object must not be nil.
func WriteLock(obj *object.Object, lock *Lock) {
hdr := obj.GetHeader()
if hdr == nil {
hdr = new(object.Header)
obj.SetHeader(hdr)
}
hdr.SetObjectType(object.ObjectType_LOCK)
payload := lock.StableMarshal(nil)
obj.SetPayload(payload)
}
// ReadLock reads Lock from the Object payload content.
func ReadLock(lock *Lock, obj *object.Object) error {
payload := obj.GetPayload()
if len(payload) == 0 {
return errors.New("empty payload")
}
err := lock.Unmarshal(payload)
if err != nil {
return fmt.Errorf("decode lock content from payload: %w", err)
}
return nil
}
func (l *Lock) NumberOfMembers() int {
return len(l.GetMembers())
}
// IterateMembers passes members of the lock list to f.
func (x *Lock) IterateMembers(f func(*refs.ObjectID)) {
if x != nil {
for i := range x.Members {
f(x.Members[i])
}
}
}