diff options
Diffstat (limited to 'tvloader/parser2v1/parser.go')
-rw-r--r-- | tvloader/parser2v1/parser.go | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/tvloader/parser2v1/parser.go b/tvloader/parser2v1/parser.go index f4a5ae1..70f4819 100644 --- a/tvloader/parser2v1/parser.go +++ b/tvloader/parser2v1/parser.go @@ -59,12 +59,44 @@ func (parser *tvParser2_1) parsePairFromStart2_1(tag string, value string) error // create an SPDX Document data struct if we don't have one already if parser.doc == nil { - parser.doc = &spdx.Document2_1{} + parser.doc = &spdx.Document2_1{ + ExternalDocumentReferences: []spdx.ExternalDocumentRef2_1{}, + } } - // move to Creation Info parser state - parser.st = psCreationInfo2_1 + switch tag { + case "SPDXVersion": + parser.doc.SPDXVersion = value + case "DataLicense": + parser.doc.DataLicense = value + case "SPDXID": + eID, err := extractElementID(value) + if err != nil { + return err + } + parser.doc.SPDXIdentifier = eID + case "DocumentName": + parser.doc.DocumentName = value + case "DocumentNamespace": + parser.doc.DocumentNamespace = value + case "ExternalDocumentRef": + documentRefID, uri, alg, checksum, err := extractExternalDocumentReference(value) + if err != nil { + return err + } + edr := spdx.ExternalDocumentRef2_1{ + DocumentRefID: documentRefID, + URI: uri, + Checksum: spdx.Checksum{Algorithm: spdx.ChecksumAlgorithm(alg), Value: checksum}, + } + parser.doc.ExternalDocumentReferences = append(parser.doc.ExternalDocumentReferences, edr) + case "DocumentComment": + parser.doc.DocumentComment = value + default: + // move to Creation Info parser state + parser.st = psCreationInfo2_1 + return parser.parsePairFromCreationInfo2_1(tag, value) + } - // and ask Creation Info subfunc to parse - return parser.parsePairFromCreationInfo2_1(tag, value) + return nil } |