xref: /aosp_15_r20/external/spdx-tools/tvloader/parser2v1/parse_relationship.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2
3package parser2v1
4
5import (
6	"fmt"
7	"strings"
8)
9
10func (parser *tvParser2_1) parsePairForRelationship2_1(tag string, value string) error {
11	if parser.rln == nil {
12		return fmt.Errorf("no relationship struct created in parser rln pointer")
13	}
14
15	if tag == "Relationship" {
16		// parse the value to see if it's a valid relationship format
17		sp := strings.SplitN(value, " ", -1)
18
19		// filter out any purely-whitespace items
20		var rp []string
21		for _, v := range sp {
22			v = strings.TrimSpace(v)
23			if v != "" {
24				rp = append(rp, v)
25			}
26		}
27
28		if len(rp) != 3 {
29			return fmt.Errorf("invalid relationship format for %s", value)
30		}
31
32		aID, err := extractDocElementID(strings.TrimSpace(rp[0]))
33		if err != nil {
34			return err
35		}
36		parser.rln.RefA = aID
37		parser.rln.Relationship = strings.TrimSpace(rp[1])
38		bID, err := extractDocElementID(strings.TrimSpace(rp[2]))
39		if err != nil {
40			return err
41		}
42		parser.rln.RefB = bID
43		return nil
44	}
45
46	if tag == "RelationshipComment" {
47		parser.rln.RelationshipComment = value
48		return nil
49	}
50
51	return fmt.Errorf("received unknown tag %v in Relationship section", tag)
52}
53