radicle-cob 0.12.0

Radicle Collaborative Objects library
Documentation
# Collaborative Objects Collaborative objects are graphs of CRDTs. ## Basic Types The basic types that are found in `radicle-cob` are: * [`CollaborativeObject`] -- the computed object itself. * [`ObjectId`] -- the content-address for a single collaborative object. * [`TypeName`] -- the name for a collection of collaborative objects. * [`History`] -- the traversable history of the changes made to a single collaborative object. ## CRU Interface (No Delete) The main entry for manipulating [`CollaborativeObject`]s is by using the CRU like functions: * [`create`] * [`get`] * [`list`] * [`update`] ## Storage The storing of collaborative objects is based on a git backend. The previously mentioned functions all accept a [`Store`] as parameter. The `Store` itself is an accumulation of different storage capabilities: * [`object::Storage`] * [`change::Storage`] -- **Note**: there is already an implementation for this for [`git2::Repository`] for convenience. ## Resource The [`create`] and [`update`] functions take a `Resource`. It represents the type of resource the collaborative objects are relating to, for example a software project. ## History Traversal The [`History`] of a [`CollaborativeObject`] -- accessed via [`CollaborativeObject::history`] -- has a method [`History::traverse`] which provides a way of inspecting each [`Entry`] and building up a final value. This traversal is also the point at which the [`Entry::author`] and [`Entry::resource`] can be retrieved to apply any kind of filtering logic. For example, a specific `author`'s change may be egregious, spouting terrible libel about Radicle. It is at this point that the `actor`'s change can be filtered out from the final product of the traversal.