...
1 package funk
2
3 import (
4 "fmt"
5 "reflect"
6 )
7
8 type chainBuilder struct {
9 collection interface{}
10 }
11
12 func (b *chainBuilder) Chunk(size int) Builder {
13 return &chainBuilder{Chunk(b.collection, size)}
14 }
15 func (b *chainBuilder) Compact() Builder {
16 return &chainBuilder{Compact(b.collection)}
17 }
18 func (b *chainBuilder) Drop(n int) Builder {
19 return &chainBuilder{Drop(b.collection, n)}
20 }
21 func (b *chainBuilder) Filter(predicate interface{}) Builder {
22 return &chainBuilder{Filter(b.collection, predicate)}
23 }
24 func (b *chainBuilder) Flatten() Builder {
25 return &chainBuilder{Flatten(b.collection)}
26 }
27 func (b *chainBuilder) FlattenDeep() Builder {
28 return &chainBuilder{FlattenDeep(b.collection)}
29 }
30 func (b *chainBuilder) Initial() Builder {
31 return &chainBuilder{Initial(b.collection)}
32 }
33 func (b *chainBuilder) Intersect(y interface{}) Builder {
34 return &chainBuilder{Intersect(b.collection, y)}
35 }
36 func (b *chainBuilder) Join(rarr interface{}, fnc JoinFnc) Builder {
37 return &chainBuilder{Join(b.collection, rarr, fnc)}
38 }
39 func (b *chainBuilder) Map(mapFunc interface{}) Builder {
40 return &chainBuilder{Map(b.collection, mapFunc)}
41 }
42 func (b *chainBuilder) FlatMap(mapFunc interface{}) Builder {
43 return &chainBuilder{FlatMap(b.collection, mapFunc)}
44 }
45 func (b *chainBuilder) Reverse() Builder {
46 return &chainBuilder{Reverse(b.collection)}
47 }
48 func (b *chainBuilder) Shuffle() Builder {
49 return &chainBuilder{Shuffle(b.collection)}
50 }
51 func (b *chainBuilder) Tail() Builder {
52 return &chainBuilder{Tail(b.collection)}
53 }
54 func (b *chainBuilder) Uniq() Builder {
55 return &chainBuilder{Uniq(b.collection)}
56 }
57 func (b *chainBuilder) Without(values ...interface{}) Builder {
58 return &chainBuilder{Without(b.collection, values...)}
59 }
60
61 func (b *chainBuilder) All() bool {
62 v := reflect.ValueOf(b.collection)
63 t := v.Type()
64
65 if t.Kind() != reflect.Array && t.Kind() != reflect.Slice {
66 panic(fmt.Sprintf("Type %s is not supported by Chain.All", t.String()))
67 }
68
69 c := make([]interface{}, v.Len())
70 for i := 0; i < v.Len(); i++ {
71 c[i] = v.Index(i).Interface()
72 }
73 return All(c...)
74 }
75 func (b *chainBuilder) Any() bool {
76 v := reflect.ValueOf(b.collection)
77 t := v.Type()
78
79 if t.Kind() != reflect.Array && t.Kind() != reflect.Slice {
80 panic(fmt.Sprintf("Type %s is not supported by Chain.Any", t.String()))
81 }
82
83 c := make([]interface{}, v.Len())
84 for i := 0; i < v.Len(); i++ {
85 c[i] = v.Index(i).Interface()
86 }
87 return Any(c...)
88 }
89 func (b *chainBuilder) Contains(elem interface{}) bool {
90 return Contains(b.collection, elem)
91 }
92 func (b *chainBuilder) Every(elements ...interface{}) bool {
93 return Every(b.collection, elements...)
94 }
95 func (b *chainBuilder) Find(predicate interface{}) interface{} {
96 return Find(b.collection, predicate)
97 }
98 func (b *chainBuilder) ForEach(predicate interface{}) {
99 ForEach(b.collection, predicate)
100 }
101 func (b *chainBuilder) ForEachRight(predicate interface{}) {
102 ForEachRight(b.collection, predicate)
103 }
104 func (b *chainBuilder) Head() interface{} {
105 return Head(b.collection)
106 }
107 func (b *chainBuilder) Keys() interface{} {
108 return Keys(b.collection)
109 }
110 func (b *chainBuilder) IndexOf(elem interface{}) int {
111 return IndexOf(b.collection, elem)
112 }
113 func (b *chainBuilder) IsEmpty() bool {
114 return IsEmpty(b.collection)
115 }
116 func (b *chainBuilder) Last() interface{} {
117 return Last(b.collection)
118 }
119 func (b *chainBuilder) LastIndexOf(elem interface{}) int {
120 return LastIndexOf(b.collection, elem)
121 }
122 func (b *chainBuilder) NotEmpty() bool {
123 return NotEmpty(b.collection)
124 }
125 func (b *chainBuilder) Product() float64 {
126 return Product(b.collection)
127 }
128 func (b *chainBuilder) Reduce(reduceFunc, acc interface{}) interface{} {
129 return Reduce(b.collection, reduceFunc, acc)
130 }
131 func (b *chainBuilder) Sum() float64 {
132 return Sum(b.collection)
133 }
134 func (b *chainBuilder) Type() reflect.Type {
135 return reflect.TypeOf(b.collection)
136 }
137 func (b *chainBuilder) Value() interface{} {
138 return b.collection
139 }
140 func (b *chainBuilder) Values() interface{} {
141 return Values(b.collection)
142 }
143
View as plain text