aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent/formats/xcal.scm
blob: b70a8f6559c02ddbe9ec348a0397fa40ff20c071 (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
(define-module (vcomponent formats xcal)
  :use-module (sxml namespaced)
  :use-module (sxml namespaced util)
  :use-module ((vcomponent formats xcal output)
               :select (vcomponent->sxcal ns-wrap))
  :use-module ((vcomponent formats xcal parse)
               :select (sxcal->vcomponent))
  :use-module ((hnh util) :select (->))
  :export (serialize deserialize))

(define-public xcal (string->symbol "urn:ietf:params:xml:ns:icalendar-2.0"))

(define* (serialize component port key: (namespaces `((,xcal . xcal))))
  (-> (vcomponent->sxcal component)
      ns-wrap
      (namespaced-sxml->xml port: port
                            namespaces: namespaces)))


(define* (deserialize port)
  (-> port
      xml->namespaced-sxml
      root-element                      ; Strip potential *TOP*
      cadr                              ; Remove containing icalendar
      sxcal->vcomponent))