storj.io/uplink@v1.13.0/private/metaclient/stream.go (about)

     1  // Copyright (C) 2019 Storj Labs, Inc.
     2  // See LICENSE for copying information.
     3  
     4  package metaclient
     5  
     6  import (
     7  	"time"
     8  
     9  	"storj.io/common/pb"
    10  )
    11  
    12  // MutableStream is for manipulating stream information.
    13  type MutableStream struct {
    14  	info Object
    15  
    16  	dynamic         bool
    17  	dynamicMetadata SerializableMeta
    18  	dynamicExpires  time.Time
    19  }
    20  
    21  // SerializableMeta is an interface for getting pb.SerializableMeta.
    22  type SerializableMeta interface {
    23  	Metadata() ([]byte, error)
    24  }
    25  
    26  // BucketName returns streams bucket name.
    27  func (stream *MutableStream) BucketName() string { return stream.info.Bucket.Name }
    28  
    29  // Path returns streams path.
    30  func (stream *MutableStream) Path() string { return stream.info.Path }
    31  
    32  // Info returns object info about the stream.
    33  func (stream *MutableStream) Info() Object { return stream.info }
    34  
    35  // Expires returns stream expiration time.
    36  func (stream *MutableStream) Expires() time.Time {
    37  	if stream.dynamic {
    38  		return stream.dynamicExpires
    39  	}
    40  	return stream.info.Expires
    41  }
    42  
    43  // Metadata returns metadata associated with the stream.
    44  func (stream *MutableStream) Metadata() ([]byte, error) {
    45  	if stream.dynamic {
    46  		return stream.dynamicMetadata.Metadata()
    47  	}
    48  
    49  	if stream.info.ContentType != "" {
    50  		if stream.info.Metadata == nil {
    51  			stream.info.Metadata = make(map[string]string)
    52  			stream.info.Metadata[contentTypeKey] = stream.info.ContentType
    53  		} else if _, found := stream.info.Metadata[contentTypeKey]; !found {
    54  			stream.info.Metadata[contentTypeKey] = stream.info.ContentType
    55  		}
    56  	}
    57  	if stream.info.Metadata == nil {
    58  		return []byte{}, nil
    59  	}
    60  	return pb.Marshal(&pb.SerializableMeta{
    61  		UserDefined: stream.info.Metadata,
    62  	})
    63  }