summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--models/models.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/models/models.go b/models/models.go
index fa3baf2..036a609 100644
--- a/models/models.go
+++ b/models/models.go
@@ -87,6 +87,39 @@ type BodyStructure struct {
 	DispositionParams map[string]string
 }
 
+//PartAtIndex returns the BodyStructure at the requested index
+func (bs *BodyStructure) PartAtIndex(index []int) (*BodyStructure, error) {
+	if len(index) == 0 {
+		return bs, nil
+	}
+	cur := index[0]
+	rest := index[1:]
+	// passed indexes are 1 based, we need to convert back to actual indexes
+	curidx := cur - 1
+	if curidx < 0 {
+		return nil, fmt.Errorf("invalid index, expected 1 based input")
+	}
+
+	// no children, base case
+	if len(bs.Parts) == 0 {
+		if len(rest) != 0 {
+			return nil, fmt.Errorf("more index levels given than available")
+		}
+		if cur == 1 {
+			return bs, nil
+		} else {
+			return nil, fmt.Errorf("invalid index %v for non multipart", cur)
+		}
+	}
+
+	if cur > len(bs.Parts) {
+		return nil, fmt.Errorf("invalid index %v, only have %v children",
+			cur, len(bs.Parts))
+	}
+
+	return bs.Parts[curidx].PartAtIndex(rest)
+}
+
 type Envelope struct {
 	Date      time.Time
 	Subject   string
n> ^
1b76245c ^
166e3c0d ^









1b76245c ^
e4630643 ^

166e3c0d ^



0f3706a4 ^






fa94f4d9 ^





5c7ed3d6 ^
cfb142b9 ^
5c7ed3d6 ^



13ba3def ^










08cf048f ^
13ba3def ^










795f5244 ^
166e3c0d ^
13ba3def ^
166e3c0d ^
1b76245c ^
e4630643 ^

166e3c0d ^






1b76245c ^
166e3c0d ^

5f98a10c ^
1b76245c ^
166e3c0d ^





aa088845 ^
48e40252 ^






614ea44b ^
de92036d ^
13ba3def ^

5aa38b52 ^
13ba3def ^
fc4a98dc ^

13ba3def ^
1b76245c ^
13ba3def ^

5aa38b52 ^





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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122