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]) } } }