Struct libdav::CardDavClient
source · pub struct CardDavClient<C>{
pub webdav_client: WebDavClient<C>,
}
Expand description
Client to communicate with a carddav server.
Instances are usually created via CardDavClient::new
.
use http::Uri;
use libdav::auth::{Auth, Password};
use hyper_rustls::HttpsConnectorBuilder;
let uri = Uri::try_from("https://example.com").unwrap();
let auth = Auth::Basic {
username: String::from("user"),
password: Some(Password::from("secret")),
};
let https = HttpsConnectorBuilder::new()
.with_native_roots()
.unwrap()
.https_or_http()
.enable_http1()
.build();
let webdav = WebDavClient::new(uri, auth, https);
// Optionally, perform bootstrap sequence here.
let client = CardDavClient::new(webdav);
If the real CardDav server needs to be resolved via bootstrapping, see
find_context_url
.
Fields§
§webdav_client: WebDavClient<C>
A WebDav client used to send requests.
Implementations§
source§impl<C> CardDavClient<C>
impl<C> CardDavClient<C>
sourcepub fn new(webdav_client: WebDavClient<C>) -> CardDavClient<C>
pub fn new(webdav_client: WebDavClient<C>) -> CardDavClient<C>
Create a new client instance.
sourcepub async fn new_via_bootstrap(
webdav_client: WebDavClient<C>,
) -> Result<CardDavClient<C>, BootstrapError>
pub async fn new_via_bootstrap( webdav_client: WebDavClient<C>, ) -> Result<CardDavClient<C>, BootstrapError>
Create a new client instance.
Creates a new client, with its base_url
set to the context path automatically discovered
via find_context_url
.
§Errors
Returns an error if:
- The URL has an invalid schema.
- The underlying call to
find_context_url
returns an error.
sourcepub async fn find_address_book_home_set(
&self,
principal: &Uri,
) -> Result<Vec<Uri>, FindHomeSetError>
pub async fn find_address_book_home_set( &self, principal: &Uri, ) -> Result<Vec<Uri>, FindHomeSetError>
Queries the server for the address book home set.
See: https://www.rfc-editor.org/rfc/rfc4791#section-6.2.1
§Errors
If there are any network errors or the response could not be parsed.
sourcepub async fn find_addressbooks(
&self,
address_book_home_set: &Uri,
) -> Result<Vec<FoundCollection>, WebDavError>
pub async fn find_addressbooks( &self, address_book_home_set: &Uri, ) -> Result<Vec<FoundCollection>, WebDavError>
Find address book collections under the given url
.
If url
is not specified, this client’s address book home set is used instead. If no
address book home set has been found, then the server’s context path will be used. When
using a client bootstrapped via automatic discovery, passing None
will usually yield the
expected results.
§Errors
If the HTTP call fails or parsing the XML response fails.
sourcepub async fn get_address_book_resources(
&self,
addressbook_href: impl AsRef<str>,
hrefs: impl IntoIterator<Item = impl AsRef<str>>,
) -> Result<Vec<FetchedResource>, WebDavError>
pub async fn get_address_book_resources( &self, addressbook_href: impl AsRef<str>, hrefs: impl IntoIterator<Item = impl AsRef<str>>, ) -> Result<Vec<FetchedResource>, WebDavError>
Fetches existing vcard resources.
§Errors
If there are any network errors or the response could not be parsed.
sourcepub async fn check_support(&self, url: &Uri) -> Result<(), CheckSupportError>
pub async fn check_support(&self, url: &Uri) -> Result<(), CheckSupportError>
Checks that the given URI advertises carddav support.
See: https://www.rfc-editor.org/rfc/rfc6352#section-6.1
§Errors
If there are any network issues or if the server does not explicitly advertise carddav support.
sourcepub async fn create_addressbook(
&self,
href: impl AsRef<str>,
) -> Result<(), WebDavError>
pub async fn create_addressbook( &self, href: impl AsRef<str>, ) -> Result<(), WebDavError>
Create an address book collection.
§Errors
Returns an error in case of network errors or if the server returns a failure status code.
Methods from Deref<Target = WebDavClient<C>>§
sourcepub fn relative_uri(&self, path: impl AsRef<str>) -> Result<Uri, Error>
pub fn relative_uri(&self, path: impl AsRef<str>) -> Result<Uri, Error>
Returns a new URI relative to the server’s root.
§Errors
If this client’s base_url
is invalid or the provided path
is not an acceptable path.
sourcepub async fn find_current_user_principal(
&self,
) -> Result<Option<Uri>, FindCurrentUserPrincipalError>
pub async fn find_current_user_principal( &self, ) -> Result<Option<Uri>, FindCurrentUserPrincipalError>
Resolves the current user’s principal resource.
Returns None
if the response’s status code is 404 or if no principal was found.
§Errors
- If the underlying HTTP request fails.
- If the response status code is neither success nor 404.
- If parsing the XML response fails.
- If the
href
cannot be parsed into a validUri
§See also
sourcepub async fn propfind(
&self,
url: &Uri,
properties: &[&PropertyName<'_, '_>],
depth: u8,
) -> Result<(Parts, Bytes), WebDavError>
pub async fn propfind( &self, url: &Uri, properties: &[&PropertyName<'_, '_>], depth: u8, ) -> Result<(Parts, Bytes), WebDavError>
Sends a PROPFIND
request.
This is a shortcut for simple PROPFIND
requests.
§Errors
If there are any network errors.
sourcepub async fn request(
&self,
request: Request<String>,
) -> Result<(Parts, Bytes), RequestError>
pub async fn request( &self, request: Request<String>, ) -> Result<(Parts, Bytes), RequestError>
Send a request to the server.
Sends a request, applying any necessary authentication and logging the response.
§Errors
Returns an error if the underlying http request fails or if streaming the response fails.
sourcepub async fn get_property(
&self,
href: &str,
property: &PropertyName<'_, '_>,
) -> Result<Option<String>, WebDavError>
pub async fn get_property( &self, href: &str, property: &PropertyName<'_, '_>, ) -> Result<Option<String>, WebDavError>
Fetch a single property.
§Common properties
names::ADDRESSBOOK_DESCRIPTION
names::CALENDAR_COLOUR
names::CALENDAR_DESCRIPTION
names::CALENDAR_ORDER
names::DISPLAY_NAME
§Quirks
The namespace of the value in the response from the server is ignored. This is a workaround
for an issue in cyrus-imapd
.
§Errors
- If there are any network errors or the response could not be parsed.
- If the requested property is missing in the response.
§See also
sourcepub async fn get_properties<'p>(
&self,
href: &str,
properties: &[&PropertyName<'p, 'p>],
) -> Result<Vec<(PropertyName<'p, 'p>, Option<String>)>, WebDavError>
pub async fn get_properties<'p>( &self, href: &str, properties: &[&PropertyName<'p, 'p>], ) -> Result<Vec<(PropertyName<'p, 'p>, Option<String>)>, WebDavError>
Fetch multiple properties for a single resource.
Values in the returned Vec
are in the same order as the properties
parameter.
§Quirks
Same as WebDavClient::get_property
.
§Errors
- If there are any network errors or the response could not be parsed.
- If the requested property is missing in the response.
§See also
sourcepub async fn set_property(
&self,
href: &str,
property: &PropertyName<'_, '_>,
value: Option<&str>,
) -> Result<Option<String>, WebDavError>
pub async fn set_property( &self, href: &str, property: &PropertyName<'_, '_>, value: Option<&str>, ) -> Result<Option<String>, WebDavError>
Sends a PROPUPDATE
query to the server.
Setting the value to None
will remove the property. Returns the new value as returned by
the server.
§Quirks
Same as WebDavClient::get_property
.
§Errors
If there are any network errors or the response could not be parsed.
§See also
WebDavClient::get_property
(contains a list of some included well-known properties)
sourcepub async fn find_context_path(
&self,
service: DiscoverableService,
host: &str,
port: u16,
) -> Result<Option<Uri>, ResolveContextPathError>
pub async fn find_context_path( &self, service: DiscoverableService, host: &str, port: u16, ) -> Result<Option<Uri>, ResolveContextPathError>
Resolve the default context path using a well-known path.
This only applies for servers supporting webdav extensions like caldav or carddav. Returns
Ok(None)
if the well-known path does not redirect to another location.
§Errors
- If the provided scheme, host and port cannot be used to construct a valid URL.
- If there are any network errors.
- If the response is not an HTTP redirection.
- If the
Location
header in the response is missing or invalid.
§See also
sourcepub async fn list_resources(
&self,
collection_href: &str,
) -> Result<Vec<ListedResource>, WebDavError>
pub async fn list_resources( &self, collection_href: &str, ) -> Result<Vec<ListedResource>, WebDavError>
Enumerates resources in a collection
§Errors
If there are any network errors or the response could not be parsed.
sourcepub async fn create_resource(
&self,
href: impl AsRef<str>,
data: Vec<u8>,
mime_type: impl AsRef<[u8]>,
) -> Result<Option<String>, WebDavError>
pub async fn create_resource( &self, href: impl AsRef<str>, data: Vec<u8>, mime_type: impl AsRef<[u8]>, ) -> Result<Option<String>, WebDavError>
Creates a new resource
Returns an Etag
if present in the response. If the Etag
is not included, it must be
requested in a follow-up request, and cannot be obtained race-free.
§Errors
If there are any network errors or the response could not be parsed.
sourcepub async fn update_resource(
&self,
href: impl AsRef<str>,
data: Vec<u8>,
etag: impl AsRef<str>,
mime_type: impl AsRef<[u8]>,
) -> Result<Option<String>, WebDavError>
pub async fn update_resource( &self, href: impl AsRef<str>, data: Vec<u8>, etag: impl AsRef<str>, mime_type: impl AsRef<[u8]>, ) -> Result<Option<String>, WebDavError>
Updates an existing resource
Returns an Etag
if present in the response. If the Etag
is not included, it must be
requested in a follow-up request, and cannot be obtained race-free.
§Errors
If there are any network errors or the response could not be parsed.
sourcepub async fn create_collection(
&self,
href: impl AsRef<str>,
resourcetypes: &[&PropertyName<'_, '_>],
) -> Result<(), WebDavError>
pub async fn create_collection( &self, href: impl AsRef<str>, resourcetypes: &[&PropertyName<'_, '_>], ) -> Result<(), WebDavError>
Creates a collection under path href
.
This function executes an Extended MKCOL.
Additional resource types may be specified via the resourcetypes
argument. The
DAV:collection
resource type is implied and MUST NOT be specified.
§Errors
If there are any network errors or the response could not be parsed.
sourcepub async fn delete(
&self,
href: impl AsRef<str>,
etag: impl AsRef<str>,
) -> Result<(), WebDavError>
pub async fn delete( &self, href: impl AsRef<str>, etag: impl AsRef<str>, ) -> Result<(), WebDavError>
Deletes the resource at href
.
The resource MAY be a collection. Because the implementation for deleting resources and collections is identical, this same function is used for both cases.
If the Etag does not match (i.e.: if the resource has been altered), the operation will fail and return an Error.
§Errors
If there are any network errors or the response could not be parsed.
sourcepub async fn force_delete(
&self,
href: impl AsRef<str>,
) -> Result<(), WebDavError>
pub async fn force_delete( &self, href: impl AsRef<str>, ) -> Result<(), WebDavError>
Force deletion of the resource at href
.
This function does not guarantee that a resource or collection has not been modified since it was last read. Use this function with care.
The resource MAY be a collection. Because the implementation for deleting resources and collections is identical, this same function covers both cases.
§Errors
If there are any network errors or the response could not be parsed.