xref: /aosp_15_r20/external/spdx-tools/tvloader/parser2v3/parse_annotation.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2*ba677afaSXin Li
3*ba677afaSXin Lipackage parser2v3
4*ba677afaSXin Li
5*ba677afaSXin Liimport (
6*ba677afaSXin Li	"fmt"
7*ba677afaSXin Li)
8*ba677afaSXin Li
9*ba677afaSXin Lifunc (parser *tvParser2_3) parsePairForAnnotation2_3(tag string, value string) error {
10*ba677afaSXin Li	if parser.ann == nil {
11*ba677afaSXin Li		return fmt.Errorf("no annotation struct created in parser ann pointer")
12*ba677afaSXin Li	}
13*ba677afaSXin Li
14*ba677afaSXin Li	switch tag {
15*ba677afaSXin Li	case "Annotator":
16*ba677afaSXin Li		subkey, subvalue, err := extractSubs(value)
17*ba677afaSXin Li		if err != nil {
18*ba677afaSXin Li			return err
19*ba677afaSXin Li		}
20*ba677afaSXin Li		if subkey == "Person" || subkey == "Organization" || subkey == "Tool" {
21*ba677afaSXin Li			parser.ann.Annotator.AnnotatorType = subkey
22*ba677afaSXin Li			parser.ann.Annotator.Annotator = subvalue
23*ba677afaSXin Li			return nil
24*ba677afaSXin Li		}
25*ba677afaSXin Li		return fmt.Errorf("unrecognized Annotator type %v", subkey)
26*ba677afaSXin Li	case "AnnotationDate":
27*ba677afaSXin Li		parser.ann.AnnotationDate = value
28*ba677afaSXin Li	case "AnnotationType":
29*ba677afaSXin Li		parser.ann.AnnotationType = value
30*ba677afaSXin Li	case "SPDXREF":
31*ba677afaSXin Li		deID, err := extractDocElementID(value)
32*ba677afaSXin Li		if err != nil {
33*ba677afaSXin Li			return err
34*ba677afaSXin Li		}
35*ba677afaSXin Li		parser.ann.AnnotationSPDXIdentifier = deID
36*ba677afaSXin Li	case "AnnotationComment":
37*ba677afaSXin Li		parser.ann.AnnotationComment = value
38*ba677afaSXin Li	default:
39*ba677afaSXin Li		return fmt.Errorf("received unknown tag %v in Annotation section", tag)
40*ba677afaSXin Li	}
41*ba677afaSXin Li
42*ba677afaSXin Li	return nil
43*ba677afaSXin Li}
44