Skip to content

Commit 3e6ca2c

Browse files
Add Submitter record parsing and serialization.
1 parent 442aa0a commit 3e6ca2c

File tree

7 files changed

+235
-1901
lines changed

7 files changed

+235
-1901
lines changed

gedcom/gedcom.pb.go

Lines changed: 171 additions & 87 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gedcom/gedcom.proto

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ message Gedcom {
77
HeaderType Header = 1;
88
repeated Individual Individuals = 2;
99
repeated Family Families = 3;
10+
repeated Submitter Submitters = 4;
1011

1112
message HeaderType {
1213
string Source = 1;
@@ -50,5 +51,10 @@ message Gedcom {
5051
string MotherId = 3;
5152
repeated string ChildIds = 4;
5253
}
54+
55+
message Submitter {
56+
string Id = 1;
57+
string Name = 2;
58+
}
5359
}
5460

gedcom/interpret.go

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (g *ConcurrencySafeGedcom) InterpretHeader(headerLines []*Line) error {
7070
//
7171
// * SOURCE_RECORD (SOUR)
7272
//
73-
// * SUBMITTER_RECORD (SUBN)
73+
// * SUBMITTER_RECORD (SUBM)
7474
//
7575
func (g *ConcurrencySafeGedcom) InterpretRecord(recordLines []*Line, waitGroup *sync.WaitGroup) {
7676
tag, err := recordLines[0].Tag()
@@ -90,8 +90,8 @@ func (g *ConcurrencySafeGedcom) InterpretRecord(recordLines []*Line, waitGroup *
9090
// TODO
9191
case "SOUR":
9292
// TODO
93-
case "SUBN":
94-
// TODO
93+
case "SUBM":
94+
g.interpretSubmitterRecord(recordLines)
9595
}
9696
waitGroup.Done()
9797
}
@@ -207,6 +207,39 @@ func (g *ConcurrencySafeGedcom) interpretFamilyRecord(recordLines []*Line) {
207207
g.unlock()
208208
}
209209

210+
func (g *ConcurrencySafeGedcom) interpretSubmitterRecord(recordLines []*Line) {
211+
xRefID := recordLines[0].XRefID()
212+
submitterInstance := Gedcom_Submitter{
213+
Id: xRefID,
214+
}
215+
rootLevel, err := recordLines[0].Level()
216+
if err != nil {
217+
return
218+
}
219+
for _, line := range recordLines[1:] {
220+
level, err := line.Level()
221+
if err != nil {
222+
continue
223+
}
224+
if level <= rootLevel {
225+
break // end of record
226+
}
227+
228+
tag, err := line.Tag()
229+
if err != nil {
230+
continue
231+
}
232+
switch tag {
233+
case "NAME":
234+
submitterInstance.Name = line.Value()
235+
}
236+
}
237+
g.lock()
238+
g.Gedcom.Submitters = append(g.Gedcom.Submitters, &submitterInstance)
239+
g.unlock()
240+
241+
}
242+
210243
func logError(firstLine *Line, structureKind string, err error) {
211244
l, toStringErr := firstLine.ToString()
212245
if toStringErr != nil {

gedcom/serialize.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,24 @@ func (g *ConcurrencySafeGedcom) ToSerializedGedcom() (*bytes.Buffer, error) {
192192
}
193193
}
194194

195+
submitterLevel := rootLevel
196+
for _, submitter := range g.Submitters {
197+
err := createAndWriteLine(submitterLevel, submitter.Id, "SUBM", "", &lineCounter, buf)
198+
if err != nil {
199+
log.Println(err)
200+
continue
201+
}
202+
203+
if submitter.Name != "" {
204+
nameLevel := submitterLevel + 1
205+
err := createAndWriteLine(nameLevel, "", "NAME", submitter.Name, &lineCounter, buf)
206+
if err != nil {
207+
log.Println(err)
208+
continue
209+
}
210+
}
211+
}
212+
195213
err = createAndWriteLine(rootLevel, "", "TRLR", "", &lineCounter, buf)
196214
if err != nil {
197215
log.Println(err)

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ require (
88
github.com/joho/godotenv v1.3.0
99
golang.org/x/net v0.0.0-20200202094626-16171245cfb2
1010
google.golang.org/grpc v1.32.0
11+
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 // indirect
1112
google.golang.org/protobuf v1.25.0
1213
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
8080
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
8181
google.golang.org/grpc v1.32.0 h1:zWTV+LMdc3kaiJMSTOFz2UgSBgx8RNQoTGiZu3fR9S0=
8282
google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
83+
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE=
84+
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
8385
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
8486
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
8587
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=

0 commit comments

Comments
 (0)