github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/format/internal/cyclonedxutil/encoder.go (about) 1 package cyclonedxutil 2 3 import ( 4 "io" 5 6 "github.com/CycloneDX/cyclonedx-go" 7 8 "github.com/anchore/syft/syft/format/common/cyclonedxhelpers" 9 "github.com/anchore/syft/syft/sbom" 10 ) 11 12 const DefaultVersion = "1.5" 13 14 type Encoder struct { 15 version cyclonedx.SpecVersion 16 format cyclonedx.BOMFileFormat 17 pretty bool 18 } 19 20 func NewEncoder(version string, format cyclonedx.BOMFileFormat, pretty bool) (Encoder, error) { 21 specVersion, err := SpecVersionFromString(version) 22 if err != nil { 23 return Encoder{}, err 24 } 25 return Encoder{ 26 version: specVersion, 27 format: format, 28 pretty: pretty, 29 }, nil 30 } 31 32 func (e Encoder) Encode(writer io.Writer, s sbom.SBOM) error { 33 bom := cyclonedxhelpers.ToFormatModel(s) 34 enc := cyclonedx.NewBOMEncoder(writer, e.format) 35 enc.SetPretty(e.pretty) 36 enc.SetEscapeHTML(false) 37 38 return enc.EncodeVersion(bom, e.version) 39 }