Expand description
A rst-common library is a simple Rust library that aggregate
all of common crates, such as serde, serde_json, etc.
§rst-common
A shortcut to common Rust crates.
§Motivation
The reason behind this crate is due to a lot of common crate libraries that I need to install
for each of my projects and there are a lot of common libraries I’ve been used to.
So I was just thinking that rather than I’m always repeat my activities, such as finding the library, register it manually, and so on, I was thinking that it will be nice if I only need to install a single crate which contains all of my favorite crates.
§Installation
Standard usage :
[dependencies]
rst-common = {version = "1.5.0"}Example install with-tokio feature
[dependencies]
rst-common = {version = "1.3.0", features: ["with-tokio"]}§Examples
You can look at to examples directory to look at how to use this library.
Codes
use rst_common::standard::uuid::Uuid;
fn main() {
let uid = Uuid::new_v4();
println!("{}", uid)
}§Special Crates
WARNING
Special crates means, there are spesific ways to use, like
thiserrorandserde. These crates need a “special” way to use because of theirproc_macrousages.
WARNING
Remove package
mockall
§thiserror
use rst_common::with_errors::thiserror:{self, Error};
#[derive(Error)]
enum MyError {
#[error("general error")]
GeneralError,
}Need to use self which give the compiler a signal that the Error macro comes from the thiserror and the crate exists
§serde
use rst_common::standard::serde::{self, Serialize, Deserialize};
#[derive(Debug, Serialize, Deserialize)]
#[serde(crate = "self::serde")]
struct Message {
msg: String,
}Spesific for the serde crate, since this crate depends on serde_derive which call the serde::, we need to explicitly tell the serde the used crate path.
§Version Requirements
All of used crates will follow these requirements
- All crates below of
1.x(<1.0.0), will maintain the version until the minor version, example:~0.1, which mean, all new updatedpatchversion should be automatically updated, but not forminorversion. The version~0.1will automatically update to0.1.1and so on, as long as theminorversion is equal. The reason behind this rule is, any version below of1.0.0assumed still under active development, and to maintain compatibility, it will be guarded using it’sminorversion. - All crates equal or greater than
1.x, will maintain the version using it’s major version, example:~1. For example, if we are using a crate that it’s version:1.0.1, this rule should be updated automatically for the next version of:1.0.2or even1.1.0, but it will not follow the version2.0.0(assumed changed onmajorversion will give us breaking compatibility)
INFO
If there are any updated versions to the supported crates, it will be updated manually through this library
For example, now we’re support tokio: ~1, it means if the tokio library release it’s new major version: 2.0.0, this crate will updated manually to support latest versions
§Categories (Feature Flags)
standardfullwith-tokiowith-tracingwith-loggingwith-errorswith-testswith-http-tokiowith-cryptography
This library actually is just re-export all common crates installed based on features you chose.
§standard feature
#[cfg(feature = "standard")]
pub mod standard {
pub use async_trait;
pub use chrono;
pub use dyn_clone;
pub use erased_serde;
pub use futures;
pub use serde;
pub use serde_json;
pub use uuid;
}§full feature
#[cfg(feature = "full")]
pub mod full {
pub use async_trait;
pub use chrono;
pub use dyn_clone;
pub use erased_serde;
pub use futures;
pub use serde;
pub use serde_json;
pub use uuid;
pub use tokio;
pub use tracing;
pub use tracing_subscriber;
pub use env_logger;
pub use log;
pub use anyhow;
pub use thiserror;
pub use mockall;
pub use table_test;
pub use axum;
pub use hyper;
pub use hyper_util;
pub use tower;
pub use tower_http;
pub use rand;
pub use rand_chacha;
pub use hex;
pub use chacha20poly1305;
pub use blake3;
pub use argon2;
pub use ring;
pub use ed25519_dalek;
pub use x25519_dalek;
}§with-tokio feature
#[cfg(feature = "with-tokio")]
pub mod with_tokio {
pub use tokio;
}§with-tracing feature
#[cfg(feature = "with-tracing")]
pub mod with_tracing {
pub use tracing;
pub use tracing_subscriber;
}§with-logging feature
#[cfg(feature = "with-logging")]
pub mod with_logging {
pub use env_logger;
pub use log;
}§with-errors feature
#[cfg(feature = "with-errors")]
pub mod with_errors {
pub use anyhow;
pub use thiserror;
}§with-tests feature
#[cfg(feature = "with-tests")]
pub mod with_tests {
pub use table_test;
}§with-http-tokio feature
#[cfg(feature = "with-http-tokio")]
pub mod with_http_tokio {
pub use axum;
pub use hyper;
pub use hyper_util;
pub use tower;
pub use tower_http;
}§with-cryptography feature
#[cfg(feature = "with-cryptography")]
pub mod with_cryptography {
pub use rand;
pub use rand_chacha;
pub use hex;
pub use chacha20poly1305;
pub use blake3;
pub use argon2;
pub use ring;
pub use sha2;
pub use ed25519_dalek;
pub use x25519_dalek;
}