-
Notifications
You must be signed in to change notification settings - Fork 6
/
lines.go
67 lines (53 loc) · 1.08 KB
/
lines.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package parser
import "strings"
// LineType represents the different types of lines available in a policy file
type LineType int
const (
unknownLine LineType = iota
ruleLine
commentLine
assignmentLine
defaultAssignmentLine
emptyLine
)
func isComment(s string) bool {
return strings.HasPrefix(strings.TrimSpace(s), "#")
}
func isRule(s string) bool {
return len(strings.SplitN(s, ":", 2)) == 2
}
func isEmpty(s string) bool {
return len(strings.TrimSpace(s)) == 0
}
func isDefaultAssignment(s string) bool {
result := strings.SplitN(s, "=", 2)
if len(result) == 2 {
c := strings.TrimSpace(result[0])
switch c {
case "DEFAULT_POSITIVE", "DEFAULT_NEGATIVE", "DEFAULT_POLICY":
return true
}
}
return false
}
func isAssignment(s string) bool {
return len(strings.SplitN(s, "=", 2)) == 2
}
func lineType(s string) LineType {
if isComment(s) {
return commentLine
}
if isRule(s) {
return ruleLine
}
if isDefaultAssignment(s) {
return defaultAssignmentLine
}
if isAssignment(s) {
return assignmentLine
}
if isEmpty(s) {
return emptyLine
}
return unknownLine
}