123456789101112131415161718192021222324252627282930313233343536373839 |
- // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
- package convert
- import (
- "fmt"
- "reflect"
- converter "github.com/anchore/go-struct-converter"
- "github.com/spdx/tools-golang/spdx/common"
- "github.com/spdx/tools-golang/spdx/v2/v2_1"
- "github.com/spdx/tools-golang/spdx/v2/v2_2"
- "github.com/spdx/tools-golang/spdx/v2/v2_3"
- )
- var DocumentChain = converter.NewChain(
- v2_1.Document{},
- v2_2.Document{},
- v2_3.Document{},
- )
- // Document converts from one document to another document
- // For example, converting a document to the latest version could be done like:
- //
- // sourceDoc := // e.g. a v2_2.Document from somewhere
- // var targetDoc spdx.Document // this can be any document version
- // err := convert.Document(sourceDoc, &targetDoc) // the target must be passed as a pointer
- func Document(from common.AnyDocument, to common.AnyDocument) error {
- if !IsPtr(to) {
- return fmt.Errorf("struct to convert to must be a pointer")
- }
- from = FromPtr(from)
- if reflect.TypeOf(from) == reflect.TypeOf(FromPtr(to)) {
- reflect.ValueOf(to).Elem().Set(reflect.ValueOf(from))
- return nil
- }
- return DocumentChain.Convert(from, to)
- }
|