refactoring OnComplete
no need for pointer receiver for wrapper methods
Vladimir Bauer
2 years ago
| 0 | 0 | package decor |
| 1 | 1 | |
| 2 | 2 | var ( |
| 3 | _ Decorator = (*onCompleteWrapper)(nil) | |
| 4 | _ Wrapper = (*onCompleteWrapper)(nil) | |
| 3 | _ Decorator = onCompleteWrapper{} | |
| 4 | _ Wrapper = onCompleteWrapper{} | |
| 5 | 5 | ) |
| 6 | 6 | |
| 7 | // OnComplete returns decorator, which wraps provided decorator with | |
| 8 | // sole purpose to display provided message on complete event. | |
| 7 | // OnComplete wrap decorator. | |
| 8 | // Displays provided message on complete event. | |
| 9 | 9 | // |
| 10 | 10 | // `decorator` Decorator to wrap |
| 11 | // | |
| 12 | // `message` message to display on complete event | |
| 11 | // `message` message to display | |
| 13 | 12 | func OnComplete(decorator Decorator, message string) Decorator { |
| 14 | 13 | if decorator == nil { |
| 15 | 14 | return nil |
| 16 | 15 | } |
| 17 | d := &onCompleteWrapper{ | |
| 18 | Decorator: decorator, | |
| 19 | msg: message, | |
| 20 | } | |
| 21 | if md, ok := decorator.(*mergeDecorator); ok { | |
| 22 | d.Decorator, md.Decorator = md.Decorator, d | |
| 23 | return md | |
| 24 | } | |
| 25 | return d | |
| 16 | return onCompleteWrapper{decorator, message} | |
| 26 | 17 | } |
| 27 | 18 | |
| 28 | 19 | type onCompleteWrapper struct { |
| 30 | 21 | msg string |
| 31 | 22 | } |
| 32 | 23 | |
| 33 | func (d *onCompleteWrapper) Decor(s Statistics) string { | |
| 24 | func (d onCompleteWrapper) Decor(s Statistics) (string, int) { | |
| 34 | 25 | if s.Completed { |
| 35 | return d.GetConf().FormatMsg(d.msg) | |
| 26 | return d.Format(d.msg) | |
| 36 | 27 | } |
| 37 | 28 | return d.Decorator.Decor(s) |
| 38 | 29 | } |
| 39 | 30 | |
| 40 | func (d *onCompleteWrapper) Unwrap() Decorator { | |
| 31 | func (d onCompleteWrapper) Unwrap() Decorator { | |
| 41 | 32 | return d.Decorator |
| 42 | 33 | } |