1
1
package bedgovcf
2
2
3
3
import (
4
- "errors"
5
4
"fmt"
6
5
"log"
7
6
"math"
@@ -10,7 +9,7 @@ import (
10
9
"strings"
11
10
)
12
11
13
- func resolveField (configValues []string , bedValues []string , bedHeader []string ) (error , string ) {
12
+ func resolveField (configValues []string , bedValues []string , bedHeader []string ) (string , error ) {
14
13
15
14
input := []string {}
16
15
for _ , v := range configValues {
@@ -33,38 +32,38 @@ func resolveField(configValues []string, bedValues []string, bedHeader []string)
33
32
if strings .HasPrefix (input [0 ], "~" ) {
34
33
function = configValues [0 ][1 :]
35
34
} else {
36
- return nil , strings .Join (input , " " )
35
+ return strings .Join (input , " " ), nil
37
36
}
38
37
39
38
switch function {
40
39
case "round" :
41
40
// ~round <value>
42
41
float , err := strconv .ParseFloat (input [1 ], 64 )
43
42
if err != nil {
44
- return errors . New ( fmt .Sprintf ( "Failed to parse the value (%v) to a float: %v" , input [1 ], err )), ""
43
+ return "" , fmt .Errorf ( "failed to parse the value (%v) to a float: %v" , input [1 ], err )
45
44
}
46
45
round := math .Round (float )
47
46
if round == - 0 {
48
47
round = 0
49
48
}
50
- return nil , fmt . Sprintf ( "%v" , round )
49
+ return strconv . FormatFloat ( round , 'f' , - 1 , 64 ), nil
51
50
case "sum" :
52
51
// ~sum <value1> <value2> ...
53
52
var sum float64
54
53
for _ , v := range input [1 :] {
55
54
float , err := strconv .ParseFloat (v , 64 )
56
55
if err != nil {
57
- return errors . New ( fmt .Sprintf ( "Failed to parse the value (%v) to a float: %v" , v , err )), ""
56
+ return "" , fmt .Errorf ( "failed to parse the value (%v) to a float: %v" , v , err )
58
57
}
59
58
sum += float
60
59
}
61
60
62
- return nil , strconv .FormatFloat (sum , 'g ' , - 1 , 64 )
61
+ return strconv .FormatFloat (sum , 'f ' , - 1 , 64 ), nil
63
62
case "min" :
64
63
// ~min <startValue> <valueToSubstract1> <valueToSubstract2> ...
65
64
min , err := strconv .ParseFloat (input [1 ], 64 )
66
65
if err != nil {
67
- return errors . New ( fmt .Sprintf ( "Failed to parse the value (%v) to a float: %v" , input [1 ], err )), ""
66
+ return "" , fmt .Errorf ( "failed to parse the value (%v) to a float: %v" , input [1 ], err )
68
67
}
69
68
for _ , v := range input [2 :] {
70
69
float , err := strconv .ParseFloat (v , 64 )
@@ -73,7 +72,7 @@ func resolveField(configValues []string, bedValues []string, bedHeader []string)
73
72
}
74
73
min -= float
75
74
}
76
- return nil , strconv .FormatFloat (min , 'g ' , - 1 , 64 )
75
+ return strconv .FormatFloat (min , 'f ' , - 1 , 64 ), nil
77
76
case "if" :
78
77
// ~if <value1> <operator> <value2> <value_if_true> <value_if_false>
79
78
// supported operators: > < >= <= ==
@@ -88,15 +87,15 @@ func resolveField(configValues []string, bedValues []string, bedHeader []string)
88
87
89
88
floatOperators := []string {"<" , ">" , "<=" , ">=" }
90
89
if slices .Contains (floatOperators , operator ) && (err1 != nil || err2 != nil ) {
91
- return errors . New ( fmt .Sprintf ( "Failed to parse the values (%v and %v) to a float: %v and %v" , v1 , v2 , err1 , err2 )), ""
90
+ return "" , fmt .Errorf ( "failed to parse the values (%v and %v) to a float: %v and %v" , v1 , v2 , err1 , err2 )
92
91
}
93
92
94
93
vFalseResolved := ""
95
94
var err error
96
95
if strings .HasPrefix (vFalse [0 ], "~" ) {
97
- err , vFalseResolved = resolveField (vFalse , bedValues , bedHeader )
96
+ vFalseResolved , err = resolveField (vFalse , bedValues , bedHeader )
98
97
if err != nil {
99
- return err , ""
98
+ return "" , err
100
99
}
101
100
} else {
102
101
vFalseResolved = strings .Join (vFalse , " " )
@@ -105,43 +104,43 @@ func resolveField(configValues []string, bedValues []string, bedHeader []string)
105
104
switch operator {
106
105
case "<" :
107
106
if floatV1 < floatV2 {
108
- return nil , vTrue
107
+ return vTrue , nil
109
108
} else {
110
- return nil , vFalseResolved
109
+ return vFalseResolved , nil
111
110
}
112
111
case ">" :
113
112
if floatV1 > floatV2 {
114
- return nil , vTrue
113
+ return vTrue , nil
115
114
} else {
116
- return nil , vFalseResolved
115
+ return vFalseResolved , nil
117
116
}
118
117
case ">=" :
119
118
if floatV1 >= floatV2 {
120
- return nil , vTrue
119
+ return vTrue , nil
121
120
} else {
122
- return nil , vFalseResolved
121
+ return vFalseResolved , nil
123
122
}
124
123
case "<=" :
125
124
if floatV1 <= floatV2 {
126
- return nil , vTrue
125
+ return vTrue , nil
127
126
} else {
128
- return nil , vFalseResolved
127
+ return vFalseResolved , nil
129
128
}
130
129
case "==" :
131
130
if v1 == v2 {
132
- return nil , vTrue
131
+ return vTrue , nil
133
132
} else {
134
- return nil , vFalseResolved
133
+ return vFalseResolved , nil
135
134
}
136
135
case "!=" :
137
136
if v1 != v2 {
138
- return nil , vTrue
137
+ return vTrue , nil
139
138
} else {
140
- return nil , vFalseResolved
139
+ return vFalseResolved , nil
141
140
}
142
141
}
143
142
}
144
143
145
- err := errors . New ( fmt .Sprintf ( "The function %v is not supported" , function ) )
146
- return err , ""
144
+ err := fmt .Errorf ( "the function %v is not supported" , function )
145
+ return "" , err
147
146
}
0 commit comments