github.com/lingyao2333/mo-zero@v1.4.1/core/stores/mongo/pipe.go (about) 1 package mongo 2 3 import ( 4 "time" 5 6 "github.com/globalsign/mgo" 7 "github.com/lingyao2333/mo-zero/core/breaker" 8 ) 9 10 type ( 11 // Pipe interface represents a mongo pipe. 12 Pipe interface { 13 All(result interface{}) error 14 AllowDiskUse() Pipe 15 Batch(n int) Pipe 16 Collation(collation *mgo.Collation) Pipe 17 Explain(result interface{}) error 18 Iter() Iter 19 One(result interface{}) error 20 SetMaxTime(d time.Duration) Pipe 21 } 22 23 promisedPipe struct { 24 *mgo.Pipe 25 promise keepablePromise 26 } 27 28 rejectedPipe struct{} 29 ) 30 31 func (p promisedPipe) All(result interface{}) error { 32 return p.promise.keep(p.Pipe.All(result)) 33 } 34 35 func (p promisedPipe) AllowDiskUse() Pipe { 36 p.Pipe.AllowDiskUse() 37 return p 38 } 39 40 func (p promisedPipe) Batch(n int) Pipe { 41 p.Pipe.Batch(n) 42 return p 43 } 44 45 func (p promisedPipe) Collation(collation *mgo.Collation) Pipe { 46 p.Pipe.Collation(collation) 47 return p 48 } 49 50 func (p promisedPipe) Explain(result interface{}) error { 51 return p.promise.keep(p.Pipe.Explain(result)) 52 } 53 54 func (p promisedPipe) Iter() Iter { 55 return promisedIter{ 56 Iter: p.Pipe.Iter(), 57 promise: p.promise, 58 } 59 } 60 61 func (p promisedPipe) One(result interface{}) error { 62 return p.promise.keep(p.Pipe.One(result)) 63 } 64 65 func (p promisedPipe) SetMaxTime(d time.Duration) Pipe { 66 p.Pipe.SetMaxTime(d) 67 return p 68 } 69 70 func (p rejectedPipe) All(result interface{}) error { 71 return breaker.ErrServiceUnavailable 72 } 73 74 func (p rejectedPipe) AllowDiskUse() Pipe { 75 return p 76 } 77 78 func (p rejectedPipe) Batch(n int) Pipe { 79 return p 80 } 81 82 func (p rejectedPipe) Collation(collation *mgo.Collation) Pipe { 83 return p 84 } 85 86 func (p rejectedPipe) Explain(result interface{}) error { 87 return breaker.ErrServiceUnavailable 88 } 89 90 func (p rejectedPipe) Iter() Iter { 91 return rejectedIter{} 92 } 93 94 func (p rejectedPipe) One(result interface{}) error { 95 return breaker.ErrServiceUnavailable 96 } 97 98 func (p rejectedPipe) SetMaxTime(d time.Duration) Pipe { 99 return p 100 }