github.com/abemedia/appcast@v0.4.0/integrations/yum/types.go (about) 1 package yum 2 3 import ( 4 "encoding/xml" 5 "strconv" 6 ) 7 8 type RepoMD struct { 9 XMLName xml.Name `xml:"http://linux.duke.edu/metadata/repo repomd"` 10 Revision int `xml:"revision,omitempty"` 11 Data []Data `xml:"data"` 12 } 13 14 type Data struct { 15 Type string `xml:"type,attr"` 16 Checksum Checksum `xml:"checksum"` 17 OpenChecksum Checksum `xml:"open-checksum"` 18 Location Location `xml:"location"` 19 Timestamp int `xml:"timestamp"` 20 Size int `xml:"size,omitempty"` 21 OpenSize int `xml:"open-size,omitempty"` 22 } 23 24 type Checksum struct { 25 Type string `xml:"type,attr"` 26 PkgID string `xml:"pkgid,attr,omitempty"` 27 Value string `xml:",chardata"` 28 } 29 30 type Location struct { 31 HREF string `xml:"href,attr"` 32 } 33 34 type MetaData struct { 35 Package []Package `xml:"package"` 36 } 37 38 func (r *MetaData) MarshalXML(enc *xml.Encoder, _ xml.StartElement) error { 39 err := enc.EncodeToken(xml.StartElement{ 40 Name: xml.Name{Local: "metadata"}, 41 Attr: []xml.Attr{ 42 {Name: xml.Name{Local: "xmlns"}, Value: "http://linux.duke.edu/metadata/common"}, 43 {Name: xml.Name{Local: "xmlns:rpm"}, Value: "http://linux.duke.edu/metadata/rpm"}, 44 {Name: xml.Name{Local: "packages"}, Value: strconv.Itoa(len(r.Package))}, 45 }, 46 }) 47 if err != nil { 48 return err 49 } 50 51 err = enc.EncodeElement(r.Package, xml.StartElement{Name: xml.Name{Local: "package"}}) 52 if err != nil { 53 return err 54 } 55 56 return enc.EncodeToken(xml.EndElement{Name: xml.Name{Local: "metadata"}}) 57 } 58 59 type Package struct { 60 Type string `xml:"type,attr"` 61 Name string `xml:"name"` 62 Arch string `xml:"arch"` 63 Version Version `xml:"version"` 64 Checksum Checksum `xml:"checksum"` 65 Summary string `xml:"summary"` 66 Description string `xml:"description"` 67 Packager string `xml:"packager,omitempty"` 68 URL string `xml:"url,omitempty"` 69 Time Time `xml:"time"` 70 Size Size `xml:"size"` 71 Location Location `xml:"location"` 72 Format Format `xml:"format"` 73 } 74 75 type Time struct { 76 File int `xml:"file,attr"` 77 Build int `xml:"build,attr"` 78 } 79 80 type Format struct { 81 License string `xml:"rpm:license,omitempty"` 82 Vendor string `xml:"rpm:vendor,omitempty"` 83 Group string `xml:"rpm:group,omitempty"` 84 BuildHost string `xml:"rpm:buildhost,omitempty"` 85 SourceRPM string `xml:"rpm:sourcerpm,omitempty"` 86 HeaderRange HeaderRange `xml:"rpm:header-range"` 87 Provides *Entries `xml:"rpm:provides,omitempty"` 88 Obsoletes *Entries `xml:"rpm:obsoletes,omitempty"` 89 Requires *Entries `xml:"rpm:requires,omitempty"` 90 Conflicts *Entries `xml:"rpm:conflicts,omitempty"` 91 Files []string `xml:"file,omitempty"` 92 } 93 94 func (f *Format) UnmarshalXML(dec *xml.Decoder, start xml.StartElement) error { 95 type entries struct { 96 Entries []Entry `xml:"entry"` 97 } 98 var data struct { 99 License string `xml:"license"` 100 Vendor string `xml:"vendor"` 101 Group string `xml:"group"` 102 BuildHost string `xml:"buildhost"` 103 SourceRPM string `xml:"sourcerpm"` 104 HeaderRange HeaderRange `xml:"header-range"` 105 Provides *entries `xml:"provides"` 106 Obsoletes *entries `xml:"obsoletes"` 107 Requires *entries `xml:"requires"` 108 Conflicts *entries `xml:"conflicts"` 109 Files []string `xml:"file"` 110 } 111 if err := dec.DecodeElement(&data, &start); err != nil { 112 return err 113 } 114 115 *f = Format{ 116 License: data.License, 117 Vendor: data.Vendor, 118 Group: data.Group, 119 BuildHost: data.BuildHost, 120 SourceRPM: data.SourceRPM, 121 HeaderRange: data.HeaderRange, 122 Provides: (*Entries)(data.Provides), 123 Obsoletes: (*Entries)(data.Obsoletes), 124 Requires: (*Entries)(data.Requires), 125 Conflicts: (*Entries)(data.Conflicts), 126 Files: data.Files, 127 } 128 129 return nil 130 } 131 132 type HeaderRange struct { 133 Start int `xml:"start,attr"` 134 End int `xml:"end,attr"` 135 } 136 137 type Entries struct { 138 Entries []Entry `xml:"rpm:entry,omitempty"` 139 } 140 141 type Entry struct { 142 Name string `xml:"name,attr"` 143 Flags string `xml:"flags,attr,omitempty"` 144 Epoch string `xml:"epoch,attr,omitempty"` 145 Ver string `xml:"ver,attr,omitempty"` 146 Rel string `xml:"rel,attr,omitempty"` 147 Pre string `xml:"pre,attr,omitempty"` 148 } 149 150 type Size struct { 151 Package int `xml:"package,attr"` 152 Installed int `xml:"installed,attr"` 153 Archive int `xml:"archive,attr"` 154 } 155 156 type FileLists struct { 157 Packages string `xml:"packages,attr"` 158 Package []FileListsPackage `xml:"package"` 159 } 160 161 func (r *FileLists) MarshalXML(enc *xml.Encoder, _ xml.StartElement) error { 162 err := enc.EncodeToken(xml.StartElement{ 163 Name: xml.Name{Local: "filelists"}, 164 Attr: []xml.Attr{ 165 {Name: xml.Name{Local: "xmlns"}, Value: "http://linux.duke.edu/metadata/filelists"}, 166 {Name: xml.Name{Local: "packages"}, Value: strconv.Itoa(len(r.Package))}, 167 }, 168 }) 169 if err != nil { 170 return err 171 } 172 173 err = enc.EncodeElement(r.Package, xml.StartElement{Name: xml.Name{Local: "package"}}) 174 if err != nil { 175 return err 176 } 177 178 return enc.EncodeToken(xml.EndElement{Name: xml.Name{Local: "filelists"}}) 179 } 180 181 type FileListsPackage struct { 182 Name string `xml:"name,attr"` 183 PkgID string `xml:"pkgid,attr"` 184 Arch string `xml:"arch,attr"` 185 Version Version `xml:"version"` 186 Files []File `xml:"file"` 187 } 188 189 type File struct { 190 Type string `xml:"type,attr,omitempty"` 191 Path string `xml:",chardata"` 192 } 193 194 type Version struct { 195 Ver string `xml:"ver,attr"` 196 Rel string `xml:"rel,attr"` 197 Epoch string `xml:"epoch,attr"` 198 } 199 200 type Other struct { 201 Package []OtherPackage `xml:"package"` 202 } 203 204 func (r *Other) MarshalXML(enc *xml.Encoder, _ xml.StartElement) error { 205 err := enc.EncodeToken(xml.StartElement{ 206 Name: xml.Name{Local: "other"}, 207 Attr: []xml.Attr{ 208 {Name: xml.Name{Local: "xmlns"}, Value: "http://linux.duke.edu/metadata/other"}, 209 {Name: xml.Name{Local: "packages"}, Value: strconv.Itoa(len(r.Package))}, 210 }, 211 }) 212 if err != nil { 213 return err 214 } 215 216 err = enc.EncodeElement(r.Package, xml.StartElement{Name: xml.Name{Local: "package"}}) 217 if err != nil { 218 return err 219 } 220 221 return enc.EncodeToken(xml.EndElement{Name: xml.Name{Local: "other"}}) 222 } 223 224 type OtherPackage struct { 225 Name string `xml:"name,attr"` 226 PkgID string `xml:"pkgid,attr"` 227 Arch string `xml:"arch,attr"` 228 Version Version `xml:"version"` 229 }