Compare commits

..

3 Commits

3 changed files with 27 additions and 8 deletions

View File

@ -39,6 +39,10 @@ func (e *Entry) checkAuthors() error {
return nil return nil
} }
func (e *Entry) AddExtension(name string, value any) {
e.Extensions = append(e.Extensions, &ExtensionElement{XMLName: xml.Name{Local: name}, Value: value})
}
func (e *Entry) Check() error { func (e *Entry) Check() error {
if e.ID == nil { if e.ID == nil {
return errors.New("no id element of entry") return errors.New("no id element of entry")
@ -132,7 +136,3 @@ func (e *Entry) Check() error {
return nil return nil
} }
func (e *Entry) AddExtension(name string, value any) {
e.Extensions = append(e.Extensions, &ExtensionElement{XMLName: xml.Name{Local: name}, Value: value})
}

View File

@ -25,6 +25,10 @@ type Feed struct {
Entries []*Entry `xml:"entry,omitempty"` Entries []*Entry `xml:"entry,omitempty"`
} }
func (f *Feed) AddExtension(name string, value any) {
f.Extensions = append(f.Extensions, &ExtensionElement{XMLName: xml.Name{Local: name}, Value: value})
}
func (f *Feed) Check() error { func (f *Feed) Check() error {
if f.ID == nil { if f.ID == nil {
return errors.New("no id element of feed") return errors.New("no id element of feed")
@ -156,10 +160,6 @@ func (f *Feed) Standardize() {
} }
} }
func (f *Feed) AddExtension(name string, value any) {
f.Extensions = append(f.Extensions, &ExtensionElement{XMLName: xml.Name{Local: name}, Value: value})
}
func (f *Feed) ToXML(encoding string) (string, error) { func (f *Feed) ToXML(encoding string) (string, error) {
xml, err := xml.MarshalIndent(f, "", " ") xml, err := xml.MarshalIndent(f, "", " ")
if err != nil { if err != nil {

View File

@ -1,8 +1,11 @@
package atomfeed package atomfeed
import ( import (
"encoding/xml"
"errors" "errors"
"fmt" "fmt"
"net/mail"
"net/url"
) )
type Person struct { type Person struct {
@ -17,11 +20,27 @@ func NewPerson(name string) *Person {
return &Person{Name: name} return &Person{Name: name}
} }
func (p *Person) AddExtension(name string, value any) {
p.Extensions = append(p.Extensions, &ExtensionElement{XMLName: xml.Name{Local: name}, Value: value})
}
func (p *Person) Check() error { func (p *Person) Check() error {
if p.Name == "" { if p.Name == "" {
return errors.New("name element of person element empty") return errors.New("name element of person element empty")
} }
if p.URI != "" {
if _, err := url.ParseRequestURI(string(p.URI)); err != nil {
return fmt.Errorf("email element of person %v not correctly formatted", p.Name)
}
}
if p.Email != "" {
if _, err := mail.ParseAddress(string(p.Email)); err != nil {
return fmt.Errorf("email element of person %v not correctly formatted", p.Name)
}
}
if p.Extensions != nil { if p.Extensions != nil {
for i, e := range p.Extensions { for i, e := range p.Extensions {
if err := e.Check(); err != nil { if err := e.Check(); err != nil {