12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /*
- Copyright (c) 2014 VMware, Inc. All Rights Reserved.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package progress
- import "fmt"
- type prefixedReport struct {
- Report
- prefix string
- }
- func (r prefixedReport) Detail() string {
- if d := r.Report.Detail(); d != "" {
- return fmt.Sprintf("%s: %s", r.prefix, d)
- }
- return r.prefix
- }
- func prefixLoop(upstream <-chan Report, downstream chan<- Report, prefix string) {
- defer close(downstream)
- for r := range upstream {
- downstream <- prefixedReport{
- Report: r,
- prefix: prefix,
- }
- }
- }
- func Prefix(s Sinker, prefix string) Sinker {
- fn := func() chan<- Report {
- upstream := make(chan Report)
- downstream := s.Sink()
- go prefixLoop(upstream, downstream, prefix)
- return upstream
- }
- return SinkFunc(fn)
- }
|