github.com/vmware/govmomi@v0.51.0/vim25/progress/tee.go (about)

     1  // © Broadcom. All Rights Reserved.
     2  // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package progress
     6  
     7  // Tee works like Unix tee; it forwards all progress reports it receives to the
     8  // specified sinks
     9  func Tee(s1, s2 Sinker) Sinker {
    10  	fn := func() chan<- Report {
    11  		d1 := s1.Sink()
    12  		d2 := s2.Sink()
    13  		u := make(chan Report)
    14  		go tee(u, d1, d2)
    15  		return u
    16  	}
    17  
    18  	return SinkFunc(fn)
    19  }
    20  
    21  func tee(u <-chan Report, d1, d2 chan<- Report) {
    22  	defer close(d1)
    23  	defer close(d2)
    24  
    25  	for r := range u {
    26  		d1 <- r
    27  		d2 <- r
    28  	}
    29  }