diff --git a/carddav/carddav.go b/carddav/carddav.go index 9f1d9a2..6840d95 100644 --- a/carddav/carddav.go +++ b/carddav/carddav.go @@ -1,3 +1,6 @@ +// Package carddav provides a client and server CardDAV implementation. +// +// CardDAV is defined in RFC 6352. package carddav import ( diff --git a/carddav/client.go b/carddav/client.go index bb34db3..cc86f67 100644 --- a/carddav/client.go +++ b/carddav/client.go @@ -45,6 +45,7 @@ func Discover(domain string) (string, error) { return u.String(), nil } +// Client provides access to a remote CardDAV server. type Client struct { *webdav.Client diff --git a/carddav/server.go b/carddav/server.go index 5470e75..24257f8 100644 --- a/carddav/server.go +++ b/carddav/server.go @@ -11,6 +11,7 @@ import ( // TODO: add support for multiple address books +// Backend is a CardDAV server backend. type Backend interface { AddressBook() (*AddressBook, error) GetAddressObject(href string) (*AddressObject, error) @@ -18,10 +19,13 @@ type Backend interface { QueryAddressObjects(query *AddressBookQuery) ([]AddressObject, error) } +// Handler handles CardDAV HTTP requests. It can be used to create a CardDAV +// server. type Handler struct { Backend Backend } +// ServeHTTP implements http.Handler. func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if h.Backend == nil { http.Error(w, "carddav: no backend available", http.StatusInternalServerError) diff --git a/client.go b/client.go index f070a78..a044b18 100644 --- a/client.go +++ b/client.go @@ -11,6 +11,7 @@ import ( "github.com/emersion/go-webdav/internal" ) +// Client provides access to a remote WebDAV filesystem. type Client struct { ic *internal.Client } diff --git a/server.go b/server.go index adb500e..e2603fe 100644 --- a/server.go +++ b/server.go @@ -17,16 +17,20 @@ type File interface { io.Seeker } +// FileSystem is a WebDAV server backend. type FileSystem interface { Open(name string) (File, error) Stat(name string) (os.FileInfo, error) Readdir(name string) ([]os.FileInfo, error) } +// Handler handles WebDAV HTTP requests. It can be used to create a WebDAV +// server. type Handler struct { FileSystem FileSystem } +// ServeHTTP implements http.Handler. func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if h.FileSystem == nil { http.Error(w, "webdav: no filesystem available", http.StatusInternalServerError) diff --git a/webdav.go b/webdav.go new file mode 100644 index 0000000..0699e62 --- /dev/null +++ b/webdav.go @@ -0,0 +1,4 @@ +// Package webdav provides a client and server WebDAV filesystem implementation. +// +// WebDAV is defined in RFC 4918. +package webdav