commit
ad4456921d
29 changed files with 208 additions and 180 deletions
14
doc/src/05000-libraries.md
Normal file
14
doc/src/05000-libraries.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Libraries {#sec:libraries}
|
||||
|
||||
This section of the documentation is only relevant for developers and you might
|
||||
skip it if you're only a user of the imag tool.
|
||||
|
||||
The following sections contain a short documentation on what the several
|
||||
libraries are supposed to do.
|
||||
It is generated from the `README.md` files of each library and only gives a
|
||||
general overview what can be done with the library.
|
||||
For a more comprehensive documentation of the library, one might consult the
|
||||
appropriate documentation generated from the source of the library itself.
|
||||
|
||||
The documentation of the libraries is sorted _alphabetically_.
|
||||
|
11
doc/src/05100-lib-bookmark.md
Normal file
11
doc/src/05100-lib-bookmark.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
## libimagbookmark
|
||||
|
||||
This library crate implements functionality for bookmarks.
|
||||
|
||||
It uses `libimagentrylink` to create external links and therefor deduplicates
|
||||
equivalent external links (`libimagentrylink` deduplicates - you cannot store
|
||||
two different store entries for `https://imag-pim.org` in the store).
|
||||
|
||||
It supports bookmark collections and all basic functionality that one might
|
||||
need.
|
||||
|
4
doc/src/05100-lib-counter.md
Normal file
4
doc/src/05100-lib-counter.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
## libimagcounter
|
||||
|
||||
Library of "imag-counter", usable by other modules as well to implement counter
|
||||
functionality for entries.
|
16
doc/src/05100-lib-diary.md
Normal file
16
doc/src/05100-lib-diary.md
Normal file
|
@ -0,0 +1,16 @@
|
|||
## libimagdiary
|
||||
|
||||
This library crates implements a full diary.
|
||||
|
||||
One can have one or more diaries in the store, each diary can have unlimited
|
||||
entries.
|
||||
|
||||
### Future plans
|
||||
|
||||
The diary should be able to provide _daily_, _hourly_ and even _minutely_
|
||||
diary entries, so one can use the diary as normal "Dear diary,
|
||||
today..."-diary, or more fine-grained and more like a journal.
|
||||
|
||||
The internal file format as well as the store-path generation for this module is
|
||||
prepared for such functionality.
|
||||
|
9
doc/src/05100-lib-entryfilter.md
Normal file
9
doc/src/05100-lib-entryfilter.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
## libimagentryfilter
|
||||
|
||||
Helper library to filter lists of entries by certain predicated. Offers filters
|
||||
for filtering by header values and other predicates, plus this library offers
|
||||
logical operants to combine filters.
|
||||
|
||||
A commandline-to-filter DSL is planned for this, so commandline applications can
|
||||
use this to implement a uniform filter interface.
|
||||
|
5
doc/src/05100-lib-entrylink.md
Normal file
5
doc/src/05100-lib-entrylink.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## libimagentrylink
|
||||
|
||||
Linking library for linking entries with other entries. Used for "imag-link",
|
||||
the commandline utility, but intended for use in other binaries and libraries as
|
||||
well.
|
12
doc/src/05100-lib-entrylist.md
Normal file
12
doc/src/05100-lib-entrylist.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
## libimagentrylist
|
||||
|
||||
Library for listing entries in different manner.
|
||||
|
||||
This includes:
|
||||
|
||||
* Plain one-line-one-entry-path listing
|
||||
* Tree listing by submodule
|
||||
* Listing with metadata
|
||||
* One-line-one-entry
|
||||
* ASCII-Table
|
||||
|
9
doc/src/05100-lib-entrymarkdown.md
Normal file
9
doc/src/05100-lib-entrymarkdown.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
## libimagentrymarkdown
|
||||
|
||||
Helper crate to add useful functionality in a wrapper around
|
||||
[hoedown](https://crates.io/crates/hoedown) for imag.
|
||||
|
||||
Adds functionality to extract links, parse content into HTML and other things
|
||||
which might be useful for markdown rendering in imag.
|
||||
|
||||
|
6
doc/src/05100-lib-entrytag.md
Normal file
6
doc/src/05100-lib-entrytag.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
## libimagentrytag
|
||||
|
||||
Library for tagging entries. Used in "imag-tag" but should be used in all other
|
||||
modules which contain tagging functionality, so the backend and frontend look
|
||||
the same for all modules.
|
||||
|
21
doc/src/05100-lib-error.md
Normal file
21
doc/src/05100-lib-error.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
## libimagerror
|
||||
|
||||
In imag, we do not panic.
|
||||
|
||||
Whatever we do, if we fail as hard as possible, the end-user should _never ever_
|
||||
see a backtrace from a `panic!()`.
|
||||
|
||||
Anyways, the user _might_ see a error trace generated by imag.
|
||||
That is because imag is software for power-users, for nerds (I use the term
|
||||
"nerd" because for me it is a good thing - I do not want to offend anyone by
|
||||
using it).
|
||||
This target group can read backtraces without getting confused. `IO Error` and
|
||||
`Permission denied Error` are things that nerds can understand and they already
|
||||
know what to do in the most obvious cases (such as `Permission denied Error`).
|
||||
|
||||
This library crate is for generating error types and handle them in a nice way.
|
||||
It can be seen as mini-framework inside imag which was written to work with
|
||||
error types in a specified way. All imag crates _must_ use this library if they
|
||||
can return errors in any way, except the `libimagutil` - which is for the most
|
||||
basic utilities.
|
||||
|
7
doc/src/05100-lib-interaction.md
Normal file
7
doc/src/05100-lib-interaction.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
## libimaginteraction
|
||||
|
||||
A crate for more general interaction with the user (interactive commandline
|
||||
interface).
|
||||
|
||||
Offers functions for asking the user Y/N questions, for (numeric) values, etc.
|
||||
|
54
doc/src/05100-lib-ref.md
Normal file
54
doc/src/05100-lib-ref.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
## libimagref
|
||||
|
||||
This library crate contains functionality to generate _references_ within the
|
||||
imag store.
|
||||
|
||||
It can be used to create references to other files on the filesystem (reachable
|
||||
via a filesystem path). It differs from `libimagentrylink`/external linking as
|
||||
it is designed exclusively for filesystem references, not for URLs.
|
||||
|
||||
A reference can have several properties, for example can a reference track the
|
||||
content of a filesystem path by hashing the content with a hashsum (SHA1) and
|
||||
one can check whether a file was changed by that.
|
||||
As files can get big (think of `debian.iso`) _partial hashing_ is supported
|
||||
(think of "hash the first 2048 bytes of a file).
|
||||
|
||||
The library contains functionality to re-find a moved file automatically by
|
||||
checking the content hash which was stored before.
|
||||
|
||||
Permission changes can be tracked as well.
|
||||
|
||||
So this library helps to resemble something like a _symlink_.
|
||||
|
||||
### Limits
|
||||
|
||||
Please understand that this is _not_ intended to be a version control system or
|
||||
something like that.
|
||||
We also can not use _real symlinks_ as we need imag-store-objects to be able to
|
||||
link stuff.
|
||||
|
||||
### Usecase
|
||||
|
||||
This library offers functionality to refer to content outside of the store.
|
||||
It can be used to refer to _nearly static stuff_ pretty easily - think of a
|
||||
Maildir - you add new mails by fetching them, but you mostly do not remove mails
|
||||
and if you do you end up with a "null pointer" in the store, which can then be
|
||||
handled properly.
|
||||
|
||||
As this library supports custom hashes (you don't have to hash the full file,
|
||||
you can also parse the file and hash only _some_ content) this is pretty
|
||||
flexible.
|
||||
For example if you want to implement a imag module which tracks a certain kind
|
||||
of files which constantly change... but the first 5 lines do never change
|
||||
after the file is created - you can write a custom hasher that only uses the
|
||||
first 5 lines for the hash.
|
||||
|
||||
### Internals
|
||||
|
||||
Internally, in the store, the file gets created under
|
||||
`/ref/<hash of the path to the file to refer to>`.
|
||||
If the content of the file is hashed, we can still re-find the file via the
|
||||
content hash (which is stored in the header of the store entry).
|
||||
|
||||
The reference object can, after the path was re-found, be updated.
|
||||
|
11
doc/src/05100-lib-rt.md
Normal file
11
doc/src/05100-lib-rt.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
## libimagrt
|
||||
|
||||
This library provides utility functionality for the modules and the binary
|
||||
frontends, such as reading and parsing the configuration file, a builder
|
||||
helper for the commandline interface and such.
|
||||
|
||||
It also contains the store object and creates it from configuration.
|
||||
|
||||
the `libimagrt::runtime::Runtime` object is the first complex object that comes
|
||||
to live in a imag binary.
|
||||
|
11
doc/src/05100-lib-store.md
Normal file
11
doc/src/05100-lib-store.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
## libimagstore
|
||||
|
||||
The store is the heart of everything. Here lives the data, the complexity and
|
||||
the performance bottleneck.
|
||||
|
||||
The store offeres read/write access to all entries, a hook system to do
|
||||
on-the-fly modification of incoming/outgoing files and so on.
|
||||
|
||||
The store itself does not offer functionality, but has a commandline interface
|
||||
"imag-store" which can do basic things with the store.
|
||||
|
4
doc/src/05100-lib-util.md
Normal file
4
doc/src/05100-lib-util.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
## libimagutil
|
||||
|
||||
Utility library. Does not depend on other imag crates.
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
# libimagbookmark
|
||||
|
||||
This library crate implements functionality for bookmarks.
|
||||
|
||||
It uses `libimagentrylink` to create external links and therefor deduplicates
|
||||
equivalent external links (`libimagentrylink` deduplicates - you cannot store
|
||||
two different store entries for `https://imag-pim.org` in the store).
|
||||
|
||||
It supports bookmark collections and all basic functionality that one might
|
||||
need.
|
||||
|
1
libimagbookmark/README.md
Symbolic link
1
libimagbookmark/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-bookmark.md
|
|
@ -1,4 +0,0 @@
|
|||
# libimagcounter
|
||||
|
||||
Library of "imag-counter", usable by other modules as well to implement counter
|
||||
functionality for entries.
|
1
libimagcounter/README.md
Symbolic link
1
libimagcounter/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-counter.md
|
|
@ -1,16 +0,0 @@
|
|||
# libimagdiary
|
||||
|
||||
This library crates implements a full diary.
|
||||
|
||||
One can have one or more diaries in the store, each diary can have unlimited
|
||||
entries.
|
||||
|
||||
## Future plans
|
||||
|
||||
The diary should be able to provide _daily_, _hourly_ and even _minutely_
|
||||
diary entries, so one can use the diary as normal "Dear diary,
|
||||
today..."-diary, or more fine-grained and more like a journal.
|
||||
|
||||
The internal file format as well as the store-path generation for this module is
|
||||
prepared for such functionality.
|
||||
|
1
libimagdiary/README.md
Symbolic link
1
libimagdiary/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-diary.md
|
|
@ -1,9 +0,0 @@
|
|||
# libimagentryfilter
|
||||
|
||||
Helper library to filter lists of entries by certain predicated. Offers filters
|
||||
for filtering by header values and other predicates, plus this library offers
|
||||
logical operants to combine filters.
|
||||
|
||||
A commandline-to-filter DSL is planned for this, so commandline applications can
|
||||
use this to implement a uniform filter interface.
|
||||
|
1
libimagentryfilter/README.md
Symbolic link
1
libimagentryfilter/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-entryfilter.md
|
|
@ -1,5 +0,0 @@
|
|||
# libimagentrylink
|
||||
|
||||
Linking library for linking entries with other entries. Used for "imag-link",
|
||||
the commandline utility, but intended for use in other binaries and libraries as
|
||||
well.
|
1
libimagentrylink/README.md
Symbolic link
1
libimagentrylink/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-entrylink.md
|
|
@ -1,12 +0,0 @@
|
|||
# libimagentrylist
|
||||
|
||||
Library for listing entries in different manner.
|
||||
|
||||
This includes:
|
||||
|
||||
* Plain one-line-one-entry-path listing
|
||||
* Tree listing by submodule
|
||||
* Listing with metadata
|
||||
* One-line-one-entry
|
||||
* ASCII-Table
|
||||
|
1
libimagentrylist/README.md
Symbolic link
1
libimagentrylist/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-entrylist.md
|
|
@ -1,9 +0,0 @@
|
|||
# libimagentrymarkdown
|
||||
|
||||
Helper crate to add useful functionality in a wrapper around
|
||||
[hoedown](https://crates.io/crates/hoedown) for imag.
|
||||
|
||||
Adds functionality to extract links, parse content into HTML and other things
|
||||
which might be useful for markdown rendering in imag.
|
||||
|
||||
|
1
libimagentrymarkdown/README.md
Symbolic link
1
libimagentrymarkdown/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-entrymarkdown.md
|
|
@ -1,6 +0,0 @@
|
|||
# libimagentrytag
|
||||
|
||||
Library for tagging entries. Used in "imag-tag" but should be used in all other
|
||||
modules which contain tagging functionality, so the backend and frontend look
|
||||
the same for all modules.
|
||||
|
1
libimagentrytag/README.md
Symbolic link
1
libimagentrytag/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-entrytag.md
|
|
@ -1,21 +0,0 @@
|
|||
# libimagerror
|
||||
|
||||
In imag, we do not panic.
|
||||
|
||||
Whatever we do, if we fail as hard as possible, the end-user should _never ever_
|
||||
see a backtrace from a `panic!()`.
|
||||
|
||||
Anyways, the user _might_ see a error trace generated by imag.
|
||||
That is because imag is software for power-users, for nerds (I use the term
|
||||
"nerd" because for me it is a good thing - I do not want to offend anyone by
|
||||
using it).
|
||||
This target group can read backtraces without getting confused. `IO Error` and
|
||||
`Permission denied Error` are things that nerds can understand and they already
|
||||
know what to do in the most obvious cases (such as `Permission denied Error`).
|
||||
|
||||
This library crate is for generating error types and handle them in a nice way.
|
||||
It can be seen as mini-framework inside imag which was written to work with
|
||||
error types in a specified way. All imag crates _must_ use this library if they
|
||||
can return errors in any way, except the `libimagutil` - which is for the most
|
||||
basic utilities.
|
||||
|
1
libimagerror/README.md
Symbolic link
1
libimagerror/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-error.md
|
|
@ -1,7 +0,0 @@
|
|||
# libimaginteraction
|
||||
|
||||
A crate for more general interaction with the user (interactive commandline
|
||||
interface).
|
||||
|
||||
Offers functions for asking the user Y/N questions, for (numeric) values, etc.
|
||||
|
1
libimaginteraction/README.md
Symbolic link
1
libimaginteraction/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-interaction.md
|
|
@ -1,54 +0,0 @@
|
|||
# libimagref
|
||||
|
||||
This library crate contains functionality to generate _references_ within the
|
||||
imag store.
|
||||
|
||||
It can be used to create references to other files on the filesystem (reachable
|
||||
via a filesystem path). It differs from `libimagentrylink`/external linking as
|
||||
it is designed exclusively for filesystem references, not for URLs.
|
||||
|
||||
A reference can have several properties, for example can a reference track the
|
||||
content of a filesystem path by hashing the content with a hashsum (SHA1) and
|
||||
one can check whether a file was changed by that.
|
||||
As files can get big (think of `debian.iso`) _partial hashing_ is supported
|
||||
(think of "hash the first 2048 bytes of a file).
|
||||
|
||||
The library contains functionality to re-find a moved file automatically by
|
||||
checking the content hash which was stored before.
|
||||
|
||||
Permission changes can be tracked as well.
|
||||
|
||||
So this library helps to resemble something like a _symlink_.
|
||||
|
||||
## Limits
|
||||
|
||||
Please understand that this is _not_ intended to be a version control system or
|
||||
something like that.
|
||||
We also can not use _real symlinks_ as we need imag-store-objects to be able to
|
||||
link stuff.
|
||||
|
||||
## Usecase
|
||||
|
||||
This library offers functionality to refer to content outside of the store.
|
||||
It can be used to refer to _nearly static stuff_ pretty easily - think of a
|
||||
Maildir - you add new mails by fetching them, but you mostly do not remove mails
|
||||
and if you do you end up with a "null pointer" in the store, which can then be
|
||||
handled properly.
|
||||
|
||||
As this library supports custom hashes (you don't have to hash the full file,
|
||||
you can also parse the file and hash only _some_ content) this is pretty
|
||||
flexible.
|
||||
For example if you want to implement a imag module which tracks a certain kind
|
||||
of files which constantly change... but the first 5 lines do never change
|
||||
after the file is created - you can write a custom hasher that only uses the
|
||||
first 5 lines for the hash.
|
||||
|
||||
## Internals
|
||||
|
||||
Internally, in the store, the file gets created under
|
||||
`/ref/<hash of the path to the file to refer to>`.
|
||||
If the content of the file is hashed, we can still re-find the file via the
|
||||
content hash (which is stored in the header of the store entry).
|
||||
|
||||
The reference object can, after the path was re-found, be updated.
|
||||
|
1
libimagref/README.md
Symbolic link
1
libimagref/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-ref.md
|
|
@ -1,11 +0,0 @@
|
|||
# libimagrt
|
||||
|
||||
This library provides utility functionality for the modules and the binary
|
||||
frontends, such as reading and parsing the configuration file, a builder
|
||||
helper for the commandline interface and such.
|
||||
|
||||
It also contains the store object and creates it from configuration.
|
||||
|
||||
the `libimagrt::runtime::Runtime` object is the first complex object that comes
|
||||
to live in a imag binary.
|
||||
|
1
libimagrt/README.md
Symbolic link
1
libimagrt/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-rt.md
|
|
@ -1,11 +0,0 @@
|
|||
# libimagstore
|
||||
|
||||
The store is the heart of everything. Here lives the data, the complexity and
|
||||
the performance bottleneck.
|
||||
|
||||
The store offeres read/write access to all entries, a hook system to do
|
||||
on-the-fly modification of incoming/outgoing files and so on.
|
||||
|
||||
The store itself does not offer functionality, but has a commandline interface
|
||||
"imag-store" which can do basic things with the store.
|
||||
|
1
libimagstore/README.md
Symbolic link
1
libimagstore/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-store.md
|
|
@ -1,4 +0,0 @@
|
|||
# libimagutil
|
||||
|
||||
Utility library. Does not depend on other imag crates.
|
||||
|
1
libimagutil/README.md
Symbolic link
1
libimagutil/README.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../doc/src/05100-lib-util.md
|
Loading…
Reference in a new issue