1package funk 2 3import "reflect" 4 5type lazyBuilder struct { 6 exec func() interface{} 7} 8 9func (b *lazyBuilder) Chunk(size int) Builder { 10 return &lazyBuilder{func() interface{} { return Chunk(b.exec(), size) }} 11} 12func (b *lazyBuilder) Compact() Builder { 13 return &lazyBuilder{func() interface{} { return Compact(b.exec()) }} 14} 15func (b *lazyBuilder) Drop(n int) Builder { 16 return &lazyBuilder{func() interface{} { return Drop(b.exec(), n) }} 17} 18func (b *lazyBuilder) Filter(predicate interface{}) Builder { 19 return &lazyBuilder{func() interface{} { return Filter(b.exec(), predicate) }} 20} 21func (b *lazyBuilder) Flatten() Builder { 22 return &lazyBuilder{func() interface{} { return Flatten(b.exec()) }} 23} 24func (b *lazyBuilder) FlattenDeep() Builder { 25 return &lazyBuilder{func() interface{} { return FlattenDeep(b.exec()) }} 26} 27func (b *lazyBuilder) Initial() Builder { 28 return &lazyBuilder{func() interface{} { return Initial(b.exec()) }} 29} 30func (b *lazyBuilder) Intersect(y interface{}) Builder { 31 return &lazyBuilder{func() interface{} { return Intersect(b.exec(), y) }} 32} 33func (b *lazyBuilder) Join(rarr interface{}, fnc JoinFnc) Builder { 34 return &lazyBuilder{func() interface{} { return Join(b.exec(), rarr, fnc) }} 35} 36func (b *lazyBuilder) Map(mapFunc interface{}) Builder { 37 return &lazyBuilder{func() interface{} { return Map(b.exec(), mapFunc) }} 38} 39func (b *lazyBuilder) FlatMap(mapFunc interface{}) Builder { 40 return &lazyBuilder{func() interface{} { return FlatMap(b.exec(), mapFunc) }} 41} 42func (b *lazyBuilder) Reverse() Builder { 43 return &lazyBuilder{func() interface{} { return Reverse(b.exec()) }} 44} 45func (b *lazyBuilder) Shuffle() Builder { 46 return &lazyBuilder{func() interface{} { return Shuffle(b.exec()) }} 47} 48func (b *lazyBuilder) Tail() Builder { 49 return &lazyBuilder{func() interface{} { return Tail(b.exec()) }} 50} 51func (b *lazyBuilder) Uniq() Builder { 52 return &lazyBuilder{func() interface{} { return Uniq(b.exec()) }} 53} 54func (b *lazyBuilder) Without(values ...interface{}) Builder { 55 return &lazyBuilder{func() interface{} { return Without(b.exec(), values...) }} 56} 57 58func (b *lazyBuilder) All() bool { 59 return (&chainBuilder{b.exec()}).All() 60} 61func (b *lazyBuilder) Any() bool { 62 return (&chainBuilder{b.exec()}).Any() 63} 64func (b *lazyBuilder) Contains(elem interface{}) bool { 65 return Contains(b.exec(), elem) 66} 67func (b *lazyBuilder) Every(elements ...interface{}) bool { 68 return Every(b.exec(), elements...) 69} 70func (b *lazyBuilder) Find(predicate interface{}) interface{} { 71 return Find(b.exec(), predicate) 72} 73func (b *lazyBuilder) ForEach(predicate interface{}) { 74 ForEach(b.exec(), predicate) 75} 76func (b *lazyBuilder) ForEachRight(predicate interface{}) { 77 ForEachRight(b.exec(), predicate) 78} 79func (b *lazyBuilder) Head() interface{} { 80 return Head(b.exec()) 81} 82func (b *lazyBuilder) Keys() interface{} { 83 return Keys(b.exec()) 84} 85func (b *lazyBuilder) IndexOf(elem interface{}) int { 86 return IndexOf(b.exec(), elem) 87} 88func (b *lazyBuilder) IsEmpty() bool { 89 return IsEmpty(b.exec()) 90} 91func (b *lazyBuilder) Last() interface{} { 92 return Last(b.exec()) 93} 94func (b *lazyBuilder) LastIndexOf(elem interface{}) int { 95 return LastIndexOf(b.exec(), elem) 96} 97func (b *lazyBuilder) NotEmpty() bool { 98 return NotEmpty(b.exec()) 99} 100func (b *lazyBuilder) Product() float64 { 101 return Product(b.exec()) 102} 103func (b *lazyBuilder) Reduce(reduceFunc, acc interface{}) interface{} { 104 return Reduce(b.exec(), reduceFunc, acc) 105} 106func (b *lazyBuilder) Sum() float64 { 107 return Sum(b.exec()) 108} 109func (b *lazyBuilder) Type() reflect.Type { 110 return reflect.TypeOf(b.exec()) 111} 112func (b *lazyBuilder) Value() interface{} { 113 return b.exec() 114} 115func (b *lazyBuilder) Values() interface{} { 116 return Values(b.exec()) 117} 118