xref: /aosp_15_r20/external/spdx-tools/spdxlib/relationships.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2*ba677afaSXin Li
3*ba677afaSXin Lipackage spdxlib
4*ba677afaSXin Li
5*ba677afaSXin Liimport (
6*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/common"
7*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/v2_1"
8*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/v2_2"
9*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/v2_3"
10*ba677afaSXin Li)
11*ba677afaSXin Li
12*ba677afaSXin Li// FilterRelationships2_1 returns a slice of Element IDs returned by the given filter closure. The closure is passed
13*ba677afaSXin Li// one relationship at a time, and it can return an ElementID or nil.
14*ba677afaSXin Lifunc FilterRelationships2_1(doc *v2_1.Document, filter func(*v2_1.Relationship) *common.ElementID) ([]common.ElementID, error) {
15*ba677afaSXin Li	elementIDs := []common.ElementID{}
16*ba677afaSXin Li
17*ba677afaSXin Li	for _, relationship := range doc.Relationships {
18*ba677afaSXin Li		if id := filter(relationship); id != nil {
19*ba677afaSXin Li			elementIDs = append(elementIDs, *id)
20*ba677afaSXin Li		}
21*ba677afaSXin Li	}
22*ba677afaSXin Li
23*ba677afaSXin Li	return elementIDs, nil
24*ba677afaSXin Li}
25*ba677afaSXin Li
26*ba677afaSXin Li// FilterRelationships2_2 returns a slice of Element IDs returned by the given filter closure. The closure is passed
27*ba677afaSXin Li// one relationship at a time, and it can return an ElementID or nil.
28*ba677afaSXin Lifunc FilterRelationships2_2(doc *v2_2.Document, filter func(*v2_2.Relationship) *common.ElementID) ([]common.ElementID, error) {
29*ba677afaSXin Li	elementIDs := []common.ElementID{}
30*ba677afaSXin Li
31*ba677afaSXin Li	for _, relationship := range doc.Relationships {
32*ba677afaSXin Li		if id := filter(relationship); id != nil {
33*ba677afaSXin Li			elementIDs = append(elementIDs, *id)
34*ba677afaSXin Li		}
35*ba677afaSXin Li	}
36*ba677afaSXin Li
37*ba677afaSXin Li	return elementIDs, nil
38*ba677afaSXin Li}
39*ba677afaSXin Li
40*ba677afaSXin Li// FilterRelationships2_3 returns a slice of Element IDs returned by the given filter closure. The closure is passed
41*ba677afaSXin Li// one relationship at a time, and it can return an ElementID or nil.
42*ba677afaSXin Lifunc FilterRelationships2_3(doc *v2_3.Document, filter func(*v2_3.Relationship) *common.ElementID) ([]common.ElementID, error) {
43*ba677afaSXin Li	elementIDs := []common.ElementID{}
44*ba677afaSXin Li
45*ba677afaSXin Li	for _, relationship := range doc.Relationships {
46*ba677afaSXin Li		if id := filter(relationship); id != nil {
47*ba677afaSXin Li			elementIDs = append(elementIDs, *id)
48*ba677afaSXin Li		}
49*ba677afaSXin Li	}
50*ba677afaSXin Li
51*ba677afaSXin Li	return elementIDs, nil
52*ba677afaSXin Li}
53