github.com/lineaje-labs/syft@v0.98.1-0.20231227153149-9e393f60ff1b/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  }