kodiak-taxonomy
Get things organized with this powerful, yet easy to use taxonomy.
This library crate is a building block of the Kodiak project, thus the naming of the crate.
Although, Kodiak has some quite specific requirements for a taxonomy, kodiak-taxonomy
is kept generic,
provides value on its own and might be of interest for other projects as well.
A taxonomy[^Wikipedia] is a classification scheme to organize things according to their types. Often, taxonomies offer a strictly hierarchical organization providing a tree-like structure. However, in practice, such taxonomies limit our ability to model our complex reality.
When looking for a powerful taxonomy which overcomes such limitations, kodiak-taxonomy
might be a good fit
for you. So, feel free to use it. If you consider using kodiak-taxonomy
in your project but are missing functionality
or have any other concerns, don't hesitate to file an issue on GitHub.
We are looking forward to your feedback.
You may be looking for:
Impressions
todo: show two examples of taxonomies supported by kodiak-taxonomy
Provide additional examples in EXAMPLES.md and link to it.
TL;DR
Kodiak's specific requirements regarding its taxonomy:
- An element can have more than one superordinate element
- The top of the taxonomy allows multiple elements, i.e. users are free to create multiple root-nodes
- Elements might be complemented by arbitrary metadata (still todo: not implemented yet)
- Edges (a tuple of a super and its sub element) might be complemented with arbitrary attributes (still todo: not implemented yet)
Known issues / limitations
-
🏗️ Version 0.1.0 does not yet power other projects, so API has not yet proven it's power in practice. -
🚧 Code is fully covered by unit tests, however, some integration tests are still missing and documentation has room for improvement. - Rust API Guidelines have not yet been considered.
-
🐧 Version 0.1.x is developed and tested on Linux only.
Roadmap and future considerations
Version 0.7.0 (planned)
- Add performance consideration of public functions to the documentation.
Version 0.6.0 (planned)
- Implement Iterator trait.
- Implement Display trait for Node.
Version 0.5.0 (planned)
- Implement Serde's Serialize and Deserialize.
Version 0.4.0 (planned)
- Add support for arbitrary metadata / attributes at the Node and Edge level.
Version 0.3.0 (in progress)
- Re-thing the API: implement
Taxonomy
as a thin wrapper around std::collections::HashMap and get rid of TaxonomyError (see CHECKLIST_RUST_API_CONFORMANCE) - Improve documentation (see CHECKLIST_RUST_API_CONFORMANCE)
- Publish Software Bill of Material (SBOM) together with any future release.
- Use LLVM engine of Tarpaulin to check code coverage.
Version 0.2.0 (delivered)
- Review and follow Rust API Guidelines.
- Improve documentation: e.g. comply to C-LINK from Rust API Guidelines.
- Full code coverage with tests, measured by tarpaulin and added as a badge to GitHub project
- Switch to
#![forbid(unsafe_code)]
Version 0.1.0 (delivered)
- Initial release.
Additional resources
- Homepage polarlabs: polarlabs.io
- Crate: crates.io/kodiak-taxonomy
- API documentation: docs.rs/kodiak-taxonomy
Contributing
See CONTRIBUTING for more details.
Appendix
Cargo Geiger Safety Report
Metric output format: x/y
x = unsafe code used by the build
y = total unsafe code found in the crate
Symbols:
🔒 = No `unsafe` usage found, declares #![forbid(unsafe_code)]
❓ = No `unsafe` usage found, missing #![forbid(unsafe_code)]
☢️ = `unsafe` usage found
Functions Expressions Impls Traits Methods Dependency
0/0 0/0 0/0 0/0 0/0 🔒 kodiak-taxonomy 0.2.0
0/0 0/0 0/0 0/0 0/0
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://opensource.org/licenses/Apache-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.