This month I’ve worked on missing CardDav support in existing libraries.
libdav itself, this has helped tidy up parts of the code that are
shared between the CalDav and CardDav. This wasn’t very complicated; the latter
is very similar to the former, so it was just making sure that all of the
little differences were tweaked currently. The recent rewrite of the parsers
helped a lot since I could reuse most of the code from the CalDav
I also have in mind eventually improving the
libdav’s WebDav client to make
it more usable as a stand-alone client. Even though that was not originally in
scope, I have some other projects in mind that could use this in future, and a
generic WebDav client could definitely be useful in the Rust ecosystem.
vstorage, this is the first storage that only handles items of a
type that are not calendars, which mostly confirms that the design of the
Storage types fits well.
Finally, I implemented live tests for CardDav servers. The code for live tests is still “just okay”, and implementing CardDav consisted mostly of copying a few tests and tweaking the bits that are different.
I’m happy to say that these tests yielded very positive results. Tests pass
with all the same servers I’d been testing so far. The only small issues
that I’ve found are essentially the same issues that I found for CalDav on
these servers (I have reported most of them, but have a few still pending). To
be clear: these issues are merely scenarios where servers don’t behave entirely
as expected, but don’t affect the functionality that’s required for
A weird quirk of WebDav is that it uses XML to encode requests and responses,
but these XMLs include
href elements which themselves are URL-encoded. These
can turn into a pain if not dealt with properly.
libdav encapsulates all the WebDav implementation, it
makes it easy to enforce a clear API boundary. I’ve updated all functions in
this library to clarify that all parameters and return values which include an
href are not URL-encoded. This means that, outside of
libdav, one never has
to worry about whether an
href is URL-encoded or not.
Internally, I’ve enforced a rule where an
href is decoded as soon as it is
parsed from the raw XML, and is encoded again only when actually serialising
a request. This also makes it less confusing what’s going on internally.
Last month I mentioned that I’ve been writing a parser to read the configuration format in the same syntax as the Python implementation of vdirsyncer. @untitaker provided me with some feedback on this and some insight on the existing format: the intent was to make the configuration format converge to toml and eventually make the configuration pure toml.
This really got me thinking that it is so close to toml that it might be a good moment to change the configuration format. This change would make migration a bit more work, but is also a good moment to lift some technical debt, add support for a few missing corner cases, and clear some ambiguity.
I’ve also been trying out
himalaya, and its configuration syntax for
credentials and alike is quite clear, so I want to draw some inspiration from
At this point, I’m rethinking the configuration as pure toml and taking a lot of notes on how the new format varies from the previous one. I intend to write a clear migration guide for people to switch without much hassle. I’ve considered the idea of writing a migration tool, but I don’t really know whether it makes sense yet or not (this will depend on the feedback from people when migrating over).
I’ve followed a suggestion on behalf of the FSFE and added SPDX headers to source files to facilitate re-usability by others wanting to copy an entire file into a different project.
I’m not convinced that anyone actually wants to do this at this stage, but the effort isn’t much I don’t see any issues with this.
I considered using the
reuse tool, which checks for this and other licensing
details, but it seems to be highly opinionated and brings into scope other
things which are not relevant to me.