diff --git a/README.md b/README.md index 21a903b..ee1aa30 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,136 @@ # atom -An extensible implementation of an Atom feed that aims to be very close to RFC4287. +An extensible Atom feed generator library that aims to be very close to +RFC4287. It diligently checks for compliance with the standard and provides +functions for easy creation and extension of elements. + +## Installation + +To install the latest version of the module, use the following command: + +``` +go get git.streifling.com/jason/atom@latest +``` + +## Usage + +This library provides easy to use functions to create and extend elements of an +Atom feed. The intended way of using it entails using these functions. + +``` +package main + +import ( + "fmt" + "log" + + "git.streifling.com/jason/atom" +) + +func main() { + feed, err := atom.NewFeed("Example Feed") + if err != nil { + log.Fatalln(err) + } + + author := atom.NewPerson("John Doe") + author.Email = "john.doe@example.com" + feed.AddAuthor(author) + + entry, err := atom.NewEntry("First Entry") + if err != nil { + log.Fatalln(err) + } + content, err := atom.NewContent(atom.InlineText, "text", "This is the content of the first entry.") + if err != nil { + log.Fatalln(err) + } + entry.Content = content + feed.AddEntry(entry) + + if err := feed.Check(); err != nil { + log.Fatalln(err) + } + + feedString, err := feed.ToXML("utf-8") + if err != nil { + log.Fatalln(err) + } + fmt.Println(feedString) +} +``` + +It is also possible to use this library in a way similar to what other +libraries would provide. + +``` +package main + +import ( + "fmt" + "log" + "time" + + "git.streifling.com/jason/atom" +) + +func main() { + now := time.Now() + + feed := &atom.Feed{ + Title: &atom.PlainText{ + Type: "text", + Text: "Example Feed", + }, + ID: &atom.ID{URI: "urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6"}, + Updated: &atom.Date{DateTime: atom.DateTime(now)}, + Authors: []*atom.Person{ + { + Name: "John Doe", + Email: "john.doe@example.com", + }, + }, + Entries: []*atom.Entry{ + { + Title: &atom.PlainText{ + Type: "text", + Text: "First Entry", + }, + ID: &atom.ID{URI: "urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a"}, + Updated: &atom.Date{DateTime: atom.DateTime(now)}, + Content: &atom.InlineTextContent{ + Type: "text", + Text: "This is the content of the first entry.", + }, + }, + }, + } + + feedString, err := feed.ToXML("utf-8") + if err != nil { + log.Fatalln(err) + } + fmt.Println(feedString) +} +``` + +The output of both ways of using it being an RFC4287 compliant Atom feed: + +``` + + + + John Doe + john.doe@example.com + + urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6 + Example Feed + 2024-10-18T05:49:08+02:00 + + This is the content of the first entry. + urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a + First Entry + 2006-01-02T15:04:05+07:00 + + +```