package getsvc import ( "context" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" ) func (a *assembler) assembleHeader(ctx context.Context, writer ObjectWriter) (*objectSDK.Object, error) { var sourceObjectIDs []oid.ID sourceObjectID, ok := a.splitInfo.Link() if ok { sourceObjectIDs = append(sourceObjectIDs, sourceObjectID) } sourceObjectID, ok = a.splitInfo.LastPart() if ok { sourceObjectIDs = append(sourceObjectIDs, sourceObjectID) } if len(sourceObjectIDs) == 0 { return nil, objectSDK.NewSplitInfoError(a.splitInfo) } for _, sourceObjectID = range sourceObjectIDs { obj, err := a.getParent(ctx, sourceObjectID, writer) if err == nil { return obj, nil } } return nil, objectSDK.NewSplitInfoError(a.splitInfo) } func (a *assembler) getParent(ctx context.Context, sourceObjectID oid.ID, writer ObjectWriter) (*objectSDK.Object, error) { obj, err := a.objGetter.HeadObject(ctx, sourceObjectID) if err != nil { return nil, err } parent := obj.Parent() if parent == nil { return nil, objectSDK.NewSplitInfoError(a.splitInfo) } if err := writer.WriteHeader(ctx, parent); err != nil { return nil, err } return obj, nil }