All checks were successful
* 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
62 lines
1.3 KiB
Go
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])
|
|
}
|
|
}
|
|
}
|