// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later package spdx // ElementID represents the identifier string portion of an SPDX element // identifier. DocElementID should be used for any attributes which can // contain identifiers defined in a different SPDX document. // ElementIDs should NOT contain the mandatory 'SPDXRef-' portion. type ElementID string // DocElementID represents an SPDX element identifier that could be defined // in a different SPDX document, and therefore could have a "DocumentRef-" // portion, such as Relationships and Annotations. // ElementID is used for attributes in which a "DocumentRef-" portion cannot // appear, such as a Package or File definition (since it is necessarily // being defined in the present document). // DocumentRefID will be the empty string for elements defined in the // present document. // DocElementIDs should NOT contain the mandatory 'DocumentRef-' or // 'SPDXRef-' portions. type DocElementID struct { DocumentRefID string ElementRefID ElementID } // TODO: add equivalents for LicenseRef- identifiers // MakeDocElementID takes strings (without prefixes) for the DocumentRef- // and SPDXRef- identifiers, and returns a DocElementID. An empty string // should be used for the DocumentRef- portion if it is referring to the // present document. func MakeDocElementID(docRef string, eltRef string) DocElementID { return DocElementID{ DocumentRefID: docRef, ElementRefID: ElementID(eltRef), } } // RenderElementID takes an ElementID and returns the string equivalent, // with the SPDXRef- prefix reinserted. func RenderElementID(eID ElementID) string { return "SPDXRef-" + string(eID) } // RenderDocElementID takes a DocElementID and returns the string equivalent, // with the SPDXRef- prefix (and, if applicable, the DocumentRef- prefix) // reinserted. func RenderDocElementID(deID DocElementID) string { prefix := "" if deID.DocumentRefID != "" { prefix = "DocumentRef-" + deID.DocumentRefID + ":" } return prefix + "SPDXRef-" + string(deID.ElementRefID) }