Added more error handling and necessary functions

This commit is contained in:
2024-10-19 12:28:09 +02:00
parent d4e7bce5e2
commit f4dfd6d060
22 changed files with 317 additions and 122 deletions

View File

@@ -1,6 +1,7 @@
package atom
import (
"errors"
"fmt"
"net/mail"
)
@@ -8,24 +9,43 @@ import (
type Person struct {
*CommonAttributes
Name string `xml:"name"`
URI IRI `xml:"uri,omitempty"`
Email EmailAddress `xml:"email,omitempty"`
URI string `xml:"uri,omitempty"` // IRI
Email string `xml:"email,omitempty"` // EmailAddress
Extensions []*ExtensionElement `xml:",any,omitempty"`
}
// NewPerson creates a new Person. It returns a *Person.
func NewPerson(name string) *Person {
return &Person{Name: name}
// NewPerson creates a new Person. It returns a *Person and an error.
func NewPerson(name string) (*Person, error) {
if name == "" {
return nil, errors.New("error creating new person: name string empty")
}
return &Person{Name: name}, nil
}
// AddExtension adds the Extension to the Person.
func (p *Person) AddExtension(e *ExtensionElement) {
// SetURI sets the URI element of the Person. It returns an error.
func (l *Link) SetURI(uri string) error {
if !isValidIRI(uri) {
return fmt.Errorf("uri %v not correctly formatted", uri)
}
return nil
}
// AddExtension adds the Extension to the Person. It returns an error.
func (p *Person) AddExtension(e *ExtensionElement) error {
if e == nil {
return errors.New("error adding extension element to person: *ExtensionElement is nil")
}
if p.Extensions == nil {
p.Extensions = make([]*ExtensionElement, 1)
p.Extensions[0] = e
} else {
p.Extensions = append(p.Extensions, e)
}
return nil
}
// Check checks the Person for incompatibilities with RFC4287. It returns an
@@ -42,7 +62,7 @@ func (p *Person) Check() error {
}
if p.Email != "" {
if _, err := mail.ParseAddress(string(p.Email)); err != nil {
if _, err := mail.ParseAddress(p.Email); err != nil {
return fmt.Errorf("email element of person %v not correctly formatted", p)
}
}