1 module carddav;
2 /+
3 struct AddressDataType
4 {
5 	string contentType;
6 	string version_;
7 }
8 
9 struct AddressBook struct
10 {
11 	string path;
12 	string name;
13 	string description;
14 	long maxResourceSize;
15 	AddressDataType[] supportedAddressData;
16 }
17 
18 func (ab *AddressBook) SupportsAddressData(contentType, version string) bool {
19 	if len(ab.SupportedAddressData) == 0 {
20 		return contentType == "text/vcard" && version == "3.0"
21 	}
22 	for _, t := range ab.SupportedAddressData {
23 		if t.ContentType == contentType && t.Version == version {
24 			return true
25 		}
26 	}
27 	return false
28 }
29 
30 struct AddressBookQuery
31 {
32 	AddressDataRequest dataRequest;
33 
34 	PropFilter[] propFilters;
35 	FilterTst filterTest; // defaults to FilterAnyOf
36 	int limit; // <= 0 means unlimited
37 }
38 
39 struct AddressDataRequest
40 {
41 	string[] props;
42 	bool allProp;
43 }
44 
45 type PropFilter struct {
46 	Name string
47 	Test FilterTest // defaults to FilterAnyOf
48 
49 	// if IsNotDefined is set, TextMatches and Params need to be unset
50 	IsNotDefined bool
51 	TextMatches  []TextMatch
52 	Params       []ParamFilter
53 }
54 
55 type ParamFilter struct {
56 	Name string
57 
58 	// if IsNotDefined is set, TextMatch needs to be unset
59 	IsNotDefined bool
60 	TextMatch    *TextMatch
61 }
62 
63 type TextMatch struct {
64 	Text            string
65 	NegateCondition bool
66 	MatchType       MatchType // defaults to MatchContains
67 }
68 
69 type FilterTest string
70 
71 const (
72 	FilterAnyOf FilterTest = "anyof"
73 	FilterAllOf FilterTest = "allof"
74 )
75 
76 type MatchType string
77 
78 const (
79 	MatchEquals     MatchType = "equals"
80 	MatchContains   MatchType = "contains"
81 	MatchStartsWith MatchType = "starts-with"
82 	MatchEndsWith   MatchType = "ends-with"
83 )
84 
85 type AddressBookMultiGet struct {
86 	Paths       []string
87 	DataRequest AddressDataRequest
88 }
89 
90 type AddressObject struct {
91 	Path    string
92 	ModTime time.Time
93 	ETag    string
94 	Card    vcard.Card
95 }
96 
97 //SyncQuery is the query struct represents a sync-collection request
98 type SyncQuery struct {
99 	DataRequest AddressDataRequest
100 	SyncToken   string
101 	Limit       int // <= 0 means unlimited
102 }
103 
104 //SyncResponse contains the returned sync-token for next time
105 type SyncResponse struct {
106 	SyncToken string
107 	Updated   []AddressObject
108 	Deleted   []string
109 }
110 +/