Matthias Beyer
d4872f6da3
The previous iterator was implemented to simply fetch _all_ pathes from the filesystem, no matter what. With this implementation, this changes. The iterator now has functionality to optimize the iteration, if only a subdirectory of the store is required, for example `$STORE/foo`. This is done via functionality where the underlying iterator gets altered. First of all, the interface was changed to return a `Entries` object, which itself only covers the libimagstore-internal `PathIterator` type. This type was changed so that the backend implementation provides an "PathIterBuilder`, which builds the actual iterator object for the `PathIterator` type. The intermediate `StoreIdConstructingIterator` was merged into `PathIterator` for simplicity. The `Entries` type got functionality similar to the `StoreIdIteratorWithStore` type for easier transition to the new API. This should probably be removed at a later point, though. As the `walkdir::WalkDir` type is not as nice as it could be, iterators for two collections in the store could be built like this (untested): store .entries()? .in_collection("foo") .chain(store.entries()?.in_collection("bar")) Functionality to exclude subdirectories is not possible with the current `walkdir::WalkDir` implementation and has to be done during iteration, with filtering (as usual). Signed-off-by: Matthias Beyer <mail@beyermatthias.de> |
||
---|---|---|
.. | ||
src | ||
Cargo.toml | ||
README.md |
libimagwiki
The wiki library implements a complete wiki for personal use.
This basically is a note-taking functionality combined with linking.
Layout
The basic structure and layout is as simple as it gets:
/wiki
holds all wikis. The default wiki is /wiki/default
. Below that there
are entries. Entries can be in sub-collections, so
/wiki/default/cars/mustang
could be an entry.
+-------------+
| |
| WikiStore |
| |
+------+------+
1 |
|
| n
+------v------+
| |
| Wiki |
| |
+------+------+
1 |
|
| n
+------v------+
| | n
| Entry <------+
| | |
+------+------+ |
1 | |
| |
| |
+-------------+
The store offers an interface to get a Wiki. The wiki offers an interface to get entries from it.
Each Entry might link to a number of other entries within the same wiki. Cross-linking from one wiki entry to an entry of another wiki is technically possible, but not supported by the Entry itself (also read below).
When creating a new wiki, the main page is automatically created.
Autolinking
The Entry
structure offers an interface which can be used to automatically
detect links in the markdown.
The links are then automatically linked (as in libimagentrylink
).