github.com/alibabacloud-go/tea@v1.3.10/utils/progress.go (about) 1 package utils 2 3 // ProgressEventType defines transfer progress event type 4 type ProgressEventType int 5 6 const ( 7 // TransferStartedEvent transfer started, set TotalBytes 8 TransferStartedEvent ProgressEventType = 1 + iota 9 // TransferDataEvent transfer data, set ConsumedBytes anmd TotalBytes 10 TransferDataEvent 11 // TransferCompletedEvent transfer completed 12 TransferCompletedEvent 13 // TransferFailedEvent transfer encounters an error 14 TransferFailedEvent 15 ) 16 17 // ProgressEvent defines progress event 18 type ProgressEvent struct { 19 ConsumedBytes int64 20 TotalBytes int64 21 RwBytes int64 22 EventType ProgressEventType 23 } 24 25 // ProgressListener listens progress change 26 type ProgressListener interface { 27 ProgressChanged(event *ProgressEvent) 28 } 29 30 // -------------------- Private -------------------- 31 32 func NewProgressEvent(eventType ProgressEventType, consumed, total int64, rwBytes int64) *ProgressEvent { 33 return &ProgressEvent{ 34 ConsumedBytes: consumed, 35 TotalBytes: total, 36 RwBytes: rwBytes, 37 EventType: eventType} 38 } 39 40 // publishProgress 41 func PublishProgress(listener ProgressListener, event *ProgressEvent) { 42 if listener != nil && event != nil { 43 listener.ProgressChanged(event) 44 } 45 } 46 47 func GetProgressListener(obj interface{}) ProgressListener { 48 if obj == nil { 49 return nil 50 } 51 listener, ok := obj.(ProgressListener) 52 if !ok { 53 return nil 54 } 55 return listener 56 } 57 58 type ReaderTracker struct { 59 CompletedBytes int64 60 }