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  }