1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Li// Example for: *tvloader*, *tvsaver* 4*ba677afaSXin Li 5*ba677afaSXin Li// This example demonstrates loading an SPDX tag-value file from disk into memory, 6*ba677afaSXin Li// and re-saving it to a different file on disk. 7*ba677afaSXin Li// Run project: go run example_load_save.go ../sample-docs/tv/hello.spdx test.spdx 8*ba677afaSXin Li 9*ba677afaSXin Lipackage main 10*ba677afaSXin Li 11*ba677afaSXin Liimport ( 12*ba677afaSXin Li "fmt" 13*ba677afaSXin Li "os" 14*ba677afaSXin Li 15*ba677afaSXin Li "github.com/spdx/tools-golang/tvloader" 16*ba677afaSXin Li "github.com/spdx/tools-golang/tvsaver" 17*ba677afaSXin Li) 18*ba677afaSXin Li 19*ba677afaSXin Lifunc main() { 20*ba677afaSXin Li 21*ba677afaSXin Li // check that we've received the right number of arguments 22*ba677afaSXin Li args := os.Args 23*ba677afaSXin Li if len(args) != 3 { 24*ba677afaSXin Li fmt.Printf("Usage: %v <spdx-file-in> <spdx-file-out>\n", args[0]) 25*ba677afaSXin Li fmt.Printf(" Load SPDX 2.2 tag-value file <spdx-file-in>, and\n") 26*ba677afaSXin Li fmt.Printf(" save it out to <spdx-file-out>.\n") 27*ba677afaSXin Li return 28*ba677afaSXin Li } 29*ba677afaSXin Li 30*ba677afaSXin Li // open the SPDX file 31*ba677afaSXin Li fileIn := args[1] 32*ba677afaSXin Li r, err := os.Open(fileIn) 33*ba677afaSXin Li if err != nil { 34*ba677afaSXin Li fmt.Printf("Error while opening %v for reading: %v", fileIn, err) 35*ba677afaSXin Li return 36*ba677afaSXin Li } 37*ba677afaSXin Li defer r.Close() 38*ba677afaSXin Li 39*ba677afaSXin Li // try to load the SPDX file's contents as a tag-value file, version 2.2 40*ba677afaSXin Li doc, err := tvloader.Load2_2(r) 41*ba677afaSXin Li if err != nil { 42*ba677afaSXin Li fmt.Printf("Error while parsing %v: %v", fileIn, err) 43*ba677afaSXin Li return 44*ba677afaSXin Li } 45*ba677afaSXin Li 46*ba677afaSXin Li // if we got here, the file is now loaded into memory. 47*ba677afaSXin Li fmt.Printf("Successfully loaded %s\n", fileIn) 48*ba677afaSXin Li 49*ba677afaSXin Li // we can now save it back to disk, using tvsaver. 50*ba677afaSXin Li 51*ba677afaSXin Li // create a new file for writing 52*ba677afaSXin Li fileOut := args[2] 53*ba677afaSXin Li w, err := os.Create(fileOut) 54*ba677afaSXin Li if err != nil { 55*ba677afaSXin Li fmt.Printf("Error while opening %v for writing: %v", fileOut, err) 56*ba677afaSXin Li return 57*ba677afaSXin Li } 58*ba677afaSXin Li defer w.Close() 59*ba677afaSXin Li 60*ba677afaSXin Li // try to save the document to disk as an SPDX tag-value file, version 2.2 61*ba677afaSXin Li err = tvsaver.Save2_2(doc, w) 62*ba677afaSXin Li if err != nil { 63*ba677afaSXin Li fmt.Printf("Error while saving %v: %v", fileOut, err) 64*ba677afaSXin Li return 65*ba677afaSXin Li } 66*ba677afaSXin Li 67*ba677afaSXin Li // it worked 68*ba677afaSXin Li fmt.Printf("Successfully saved %s\n", fileOut) 69*ba677afaSXin Li} 70