A library for modelling artistic concepts. (Actually, it's just for learning about
using pub use
to re-export items in order to present a more convenient public API,
providing a more convenient alternative to a crate user than the internal hierarchy.)
This is from Chapter 14 Section 2 of the Rust book.
A crate that depends on this library could write something like this: ```rust use rustbookart::kinds::PrimaryColour; use rustbookart::utils::mix;
fn main() {
let red = PrimaryColour::Red;
let yellow = PrimaryColour::Yellow;
mix(red, yellow);
}
``
This would required the user of the
artcrate to figure out that colours are in the
kinds
module and
mixis in the
utilsmodule. That hierarchy is more useful to someone developing
the
art` crate than someone just using it in their own project.
Using the re-exports, a crate user could write this instead: ```rust use rustbookart::PrimaryColour; use rustbookart::mix;
fn main() { // --snip-- } ``` Re-exporting deeply nested modules and decoupling internal structure from what the user sees can improve the user's experience, and allows flexibility in the internal structure of the crate code.
Another reason for this crate is so I can learn about publishing to crates.io.
First, make a crates.io account and get an API token from crates.io/me, then run cargo login
<token>
. The token is saved in ~/.cargo/credentials.