summary refs log tree commit diff stats
path: root/feed.scm
blob: dae8e2ed87e8fcd6bfa37b090d4fb527cdf76c18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
;;; (planet feed) --- internal feed representation

(declare (module (planet feed))
         (import scheme (chicken base)
                 (chicken time posix)
                 uri-common)
         (export feed make-feed feed?
                 feed-url feed-title feed-updated feed-meta feed-items)
         (export item make-item item?
                 item-link item-title item-updated item-meta item-content)
         (export attachment make-attachment attachment?
                 attachment-url attachment-size attachment-mimetype))

(define-record-type feed
  (make-feed url
             title
             updated
             meta
             items)
  feed?
  (url feed-url (setter feed-url))             ; URI
  (title feed-title (setter feed-title))       ; String
  (updated feed-updated (setter feed-updated)) ; Date
  (meta feed-meta (setter feed-meta))          ; Alist: String -> String (?)
  (items feed-items (setter feed-items))       ; Items
  )

(define-record-type item
  (make-item link
             title
             updated
             meta
             content
             attachments)
  item?
  (link item-link (setter item-link))          ; URI
  (title item-title (setter item-title))       ; String
  (updated item-updated (setter item-updated)) ; Date
  (meta item-meta (setter item-meta))          ; Alist: String -> String
  (content item-content (setter item-content)) ; String
  (attachments item-attachments (setter item-attachments)) ; List: Attachment*
  )

(define-record-type attachment
  ;; Basically RSS <enclosure>
  (make-attachment url size mimetype)
  attachment?
  (url attachment-url (setter attachment-url))
  (size attachment-size (setter attachment-size))
  (mimetype attachment-mimetype (setter attachment-mimetype)))