carddav: implement REPORT addressbook-multiget

This commit is contained in:
Simon Ser
2020-01-19 11:05:56 +01:00
parent 402593c5c6
commit 60e5d57cda
3 changed files with 103 additions and 6 deletions

View File

@@ -2,6 +2,7 @@ package carddav
import (
"encoding/xml"
"fmt"
"github.com/emersion/go-webdav/internal"
)
@@ -12,6 +13,8 @@ var (
addressBookName = xml.Name{namespace, "addressbook"}
addressBookHomeSetName = xml.Name{namespace, "addressbook-home-set"}
addressBookDescriptionName = xml.Name{namespace, "addressbook-description"}
addressBookQueryName = xml.Name{namespace, "addressbook-query"}
addressBookMultigetName = xml.Name{namespace, "addressbook-multiget"}
)
type addressbookHomeSet struct {
@@ -69,3 +72,24 @@ type addressDataResp struct {
XMLName xml.Name `xml:"urn:ietf:params:xml:ns:carddav address-data"`
Data []byte `xml:",chardata"`
}
type reportReq struct {
Query *addressbookQuery
Multiget *addressbookMultiget
}
func (r *reportReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
var v interface{}
switch start.Name {
case addressBookQueryName:
r.Query = &addressbookQuery{}
v = r.Query
case addressBookMultigetName:
r.Multiget = &addressbookMultiget{}
v = r.Multiget
default:
return fmt.Errorf("carddav: unsupported REPORT root %q %q", start.Name.Space, start.Name.Local)
}
return d.DecodeElement(v, &start)
}