xref: /aosp_15_r20/external/spdx-tools/spdx/common/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 common
4*ba677afaSXin Li
5*ba677afaSXin Liimport (
6*ba677afaSXin Li	"encoding/json"
7*ba677afaSXin Li	"fmt"
8*ba677afaSXin Li	"strings"
9*ba677afaSXin Li)
10*ba677afaSXin Li
11*ba677afaSXin Litype Annotator struct {
12*ba677afaSXin Li	Annotator string
13*ba677afaSXin Li	// including AnnotatorType: one of "Person", "Organization" or "Tool"
14*ba677afaSXin Li	AnnotatorType string
15*ba677afaSXin Li}
16*ba677afaSXin Li
17*ba677afaSXin Li// UnmarshalJSON takes an annotator in the typical one-line format and parses it into an Annotator struct.
18*ba677afaSXin Li// This function is also used when unmarshalling YAML
19*ba677afaSXin Lifunc (a *Annotator) UnmarshalJSON(data []byte) error {
20*ba677afaSXin Li	// annotator will simply be a string
21*ba677afaSXin Li	annotatorStr := string(data)
22*ba677afaSXin Li	annotatorStr = strings.Trim(annotatorStr, "\"")
23*ba677afaSXin Li
24*ba677afaSXin Li	annotatorFields := strings.SplitN(annotatorStr, ": ", 2)
25*ba677afaSXin Li
26*ba677afaSXin Li	if len(annotatorFields) != 2 {
27*ba677afaSXin Li		return fmt.Errorf("failed to parse Annotator '%s'", annotatorStr)
28*ba677afaSXin Li	}
29*ba677afaSXin Li
30*ba677afaSXin Li	a.AnnotatorType = annotatorFields[0]
31*ba677afaSXin Li	a.Annotator = annotatorFields[1]
32*ba677afaSXin Li
33*ba677afaSXin Li	return nil
34*ba677afaSXin Li}
35*ba677afaSXin Li
36*ba677afaSXin Li// MarshalJSON converts the receiver into a slice of bytes representing an Annotator in string form.
37*ba677afaSXin Li// This function is also used when marshalling to YAML
38*ba677afaSXin Lifunc (a Annotator) MarshalJSON() ([]byte, error) {
39*ba677afaSXin Li	if a.Annotator != "" {
40*ba677afaSXin Li		return json.Marshal(fmt.Sprintf("%s: %s", a.AnnotatorType, a.Annotator))
41*ba677afaSXin Li	}
42*ba677afaSXin Li
43*ba677afaSXin Li	return []byte{}, nil
44*ba677afaSXin Li}
45