peridot/peridot/yummeta/primary.go

142 lines
5.6 KiB
Go

// Copyright (c) All respective contributors to the Peridot Project. All rights reserved.
// Copyright (c) 2021-2022 Rocky Enterprise Software Foundation, Inc. All rights reserved.
// Copyright (c) 2021-2022 Ctrl IQ, Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors
// may be used to endorse or promote products derived from this software without
// specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
package yummeta
import (
"encoding/xml"
"strings"
)
type PrimaryPackageVersion struct {
Epoch string `xml:"epoch,attr,omitempty"`
Ver string `xml:"ver,attr,omitempty"`
Rel string `xml:"rel,attr,omitempty"`
}
type PrimaryPackageChecksum struct {
Type string `xml:"type,attr,omitempty"`
PkgId string `xml:"pkgid,attr,omitempty"`
Value string `xml:",chardata"`
}
type PrimaryPackageTime struct {
File string `xml:"file,attr,omitempty"`
Build string `xml:"build,attr,omitempty"`
}
type PrimaryPackageSize struct {
Package string `xml:"package,attr,omitempty"`
Installed string `xml:"installed,attr,omitempty"`
Archive string `xml:"archive,attr,omitempty"`
}
type PrimaryPackageLocation struct {
Href string `xml:"href,attr,omitempty"`
}
type PrimaryRpmHeaderRange struct {
Start string `xml:"start,attr,omitempty"`
End string `xml:"end,attr,omitempty"`
}
type PrimaryRpmEntry struct {
Name string `xml:"name,attr,omitempty"`
Flags string `xml:"flags,attr,omitempty"`
Epoch string `xml:"epoch,attr,omitempty"`
Ver string `xml:"ver,attr,omitempty"`
Rel string `xml:"rel,attr,omitempty"`
}
type PrimaryRpmEntries struct {
RpmEntries []*PrimaryRpmEntry `xml:"rpm_entry,omitempty"`
}
type PrimaryRpmFile struct {
Type string `xml:"type,attr,omitempty"`
Value string `xml:",chardata"`
}
type PrimaryPackageFormat struct {
RpmLicense string `xml:"rpm_license,omitempty"`
RpmVendor string `xml:"rpm_vendor"`
RpmGroup string `xml:"rpm_group,omitempty"`
RpmBuildHost string `xml:"rpm_buildhost,omitempty"`
RpmSourceRpm string `xml:"rpm_sourcerpm,omitempty"`
RpmHeaderRange *PrimaryRpmHeaderRange `xml:"rpm_header-range,omitempty"`
RpmProvides *PrimaryRpmEntries `xml:"rpm_provides,omitempty"`
RpmRequires *PrimaryRpmEntries `xml:"rpm_requires,omitempty"`
RpmObsoletes *PrimaryRpmEntries `xml:"rpm_obsoletes,omitempty"`
RpmConflicts *PrimaryRpmEntries `xml:"rpm_conflicts,omitempty"`
RpmRecommends *PrimaryRpmEntries `xml:"rpm_recommends,omitempty"`
RpmSuggests *PrimaryRpmEntries `xml:"rpm_suggests,omitempty"`
RpmSupplements *PrimaryRpmEntries `xml:"rpm_supplements,omitempty"`
RpmEnhances *PrimaryRpmEntries `xml:"rpm_enhances,omitempty"`
File []*PrimaryRpmFile `xml:"file,omitempty"`
}
type PrimaryPackage struct {
Type string `xml:"type,attr,omitempty"`
Name string `xml:"name,omitempty"`
Arch string `xml:"arch,omitempty"`
Version *PrimaryPackageVersion `xml:"version,omitempty"`
Checksum *PrimaryPackageChecksum `xml:"checksum,omitempty"`
Summary string `xml:"summary,omitempty"`
Description string `xml:"description,omitempty"`
Packager string `xml:"packager,omitempty"`
Url string `xml:"url,omitempty"`
Time *PrimaryPackageTime `xml:"time,omitempty"`
Size *PrimaryPackageSize `xml:"size,omitempty"`
Location *PrimaryPackageLocation `xml:"location,omitempty"`
Format *PrimaryPackageFormat `xml:"format,omitempty"`
}
type PrimaryRoot struct {
XMLName xml.Name `xml:"metadata,omitempty"`
Xmlns string `xml:"xmlns,attr,omitempty"`
XmlnsRpm string `xml:"xmlns:rpm,attr,omitempty"`
Rpm string `xml:"rpm,attr,omitempty,omitempty"`
PackageCount int `xml:"packages,attr,omitempty"`
Packages []*PrimaryPackage `xml:"package,omitempty"`
}
func MarshalPrimary(primary *PrimaryRoot) ([]byte, error) {
ret, err := xml.Marshal(primary)
if err != nil {
return nil, err
}
return []byte(strings.ReplaceAll(string(ret), "rpm_", "rpm:")), nil
}
func UnmarshalPrimary(data []byte, primary *PrimaryRoot) error {
return xml.Unmarshal([]byte(strings.ReplaceAll(string(data), "rpm:", "rpm_")), primary)
}