#actix-web #restful #web-framework #rust

bin+lib zero4rs

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust

30 stable releases

new 1.2.0 Apr 23, 2024
1.1.30 Apr 4, 2024
1.1.28 Mar 30, 2024
1.1.0 Feb 9, 2024
0.1.0 Jan 28, 2024

#105 in HTTP server

Download history 4/week @ 2024-02-08 10/week @ 2024-02-15 31/week @ 2024-02-22 14/week @ 2024-02-29 1280/week @ 2024-03-07 740/week @ 2024-03-14 943/week @ 2024-03-21 259/week @ 2024-03-28 333/week @ 2024-04-04 6/week @ 2024-04-11 115/week @ 2024-04-18

791 downloads per month

MIT/Apache and LGPL-2.0-or-later

1MB
22K SLoC

⭐️ rust doc https://doc.rust-lang.org/

⭐️ macos 安装 cmake to compile kafka

$ sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install=/usr/local/bin

⭐️ GStreamer Binaries

$ gstreamer-1.0-1.20.4-universal.pkg and gstreamer-1.0-devel-1.20.4-universal.pkg
$ export PATH="/Library/Frameworks/GStreamer.framework/Versions/1.0/bin${PATH:+:$PATH}"

$ find /opt/homebrew/Cellar  -name gobject-2.0.pc
$ /opt/homebrew/Cellar/glib/2.80.0_2/lib/pkgconfig/gobject-2.0.pc
> export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/opt/homebrew/Cellar/glib/2.80.0_2/lib/pkgconfig

⭐️ 视频处理

$ brew install ffmpeg
$ sudo apt-get install libavutil-dev

⭐️ Homebrew Formulae

https://formulae.brew.sh/

⭐️ check pkg-config

pkg-config --list-all
pkg-config --modversion gobject-2.0

⭐️ 本程序依赖以下 Rust 工具

$ rustup toolchain install nightly --allow-downgrade
$ rustup component add clippy
$ rustup component add rustfmt

$ cargo install cargo-expand
$ cargo install cargo-udeps
$ cargo install cargo-watch
$ cargo install cargo-tarpaulin
$ cargo install watchexec-cli
$ cargo install cargo-tree
$ cargo install cargo-tarpaulin
$ cargo install cargo-bloat

$ cargo install cargo-edit
$ cargo install -f cargo-upgrades

$ cargo install sqlx-cli --no-default-features --features postgres
$ cargo install sqlx-cli --version 0.7.3 --force
$ cargo +nightly expand
$ cargo +nightly udeps

⭐️ check sqlx version

$ sqlx --version

⭐️ get last version

curl -L https://crates.io/api/v1/crates/zero4rs | jq .crate.max_stable_version
curl -L https://crates.io/api/v1/crates/zero4rs/1.1.18/readme

⭐️ 创建项目

$ cargo new <YOUR_PROJECT_NAME_HERE> --bin && cd <YOUR_PROJECT_NAME_HERE>

⭐️ 添加依赖

[dependencies]
log = "0.4.21"
awc = "3.4.0"
zero4rs = "1.1.29"
anyhow = "1.0.81"
lazy_static = "1.4.0"
clap = { version = "3.2.25", features = ["derive", "wrap_help"] }
actix-web = { version = "4.5.1", features = ["openssl"] }
actix-web-validator = "5.0.1"
actix-server = "2.3.0"
actix-request-identifier = "4.1.0"
actix-rt = "2.9.0"
mongodb = { version = "2.8.2", features = ["tokio-runtime"] }
serde = { version = "1.0.197", features = ["derive"] }
validator = { version = "0.16", features = ["derive"] }
struct-merge = "0.1.1"
serde_json = "1.0.115"
tokio = { version = "1.37.0", features = ["full"] }
tokio-stream = "0.1.15"

⭐️ 更新版本

cargo update
cargo upgrade

⭐️ 复制文件

$ mkdir dist
$ cp -rf ../../zero4rs/Makefile ./
$ cp -rf ../../zero4rs/Dockerfile ./
$ cp -rf ../../zero4rs/DockerfileBuild ./
$ cp -rf ../../zero4rs/docker-compose.yml ./
$ cp -rf ../../zero4rs/entrypoint.sh ./
$ cp -rf ../../zero4rs/RichMedias ./
$ cp -rf ../../zero4rs/resources ./
$ cp -rf ../../zero4rs/views ./
$ cp -rf ../../zero4rs/configuration ./
$ cp -rf ../../zero4rs/zero4rs.com+7-key.pem ./<YOUR_PROJECT_NAME_HERE>.com+7-key.pem
$ cp -rf ../../zero4rs/zero4rs.com+7.pem ./<YOUR_PROJECT_NAME_HERE>.com+7.pem
$ cp -rf ../../zero4rs/src/server ./src

⭐️ 替换名字

>> search and replace zero4rs to <YOUR_PROJECT_NAME_HERE> in below files
sed -i'.bak' -e 's/zero4rs/<YOUR_PROJECT_NAME_HERE>/g' Makefile
sed -i'.bak' -e 's/zero4rs/<YOUR_PROJECT_NAME_HERE>/g' Dockerfile
sed -i'.bak' -e 's/zero4rs/<YOUR_PROJECT_NAME_HERE>/g' DockerfileBuild
sed -i'.bak' -e 's/zero4rs/<YOUR_PROJECT_NAME_HERE>/g' docker-compose.yml
sed -i'.bak' -e 's/zero4rs/<YOUR_PROJECT_NAME_HERE>/g' entrypoint.sh
sed -i'.bak' -e 's/zero4rs/<YOUR_PROJECT_NAME_HERE>/g' configuration
sed -i'.bak' -e 's/crate/zero4rs/g' ./src/server/*
rm -rf *.bak && rm -rf ./configuration/*.bak && rm -rf ./src/server/*.bak

⭐️ copy main.rs

> // use zero4rs::core::auth0::auth;
> use <YOUR_PROJECT_NAME_HERE>::server::Application;
> use zero4rs::core::auth0::Protected;
> use zero4rs::core::url_dispatch::*;
>
> pub const P0: Protected = Protected::AnonymousUser;
>
> #[rustfmt::skip]
> #[actix_web::main]
> async fn main() {
>     Application::run("<YOUR_PROJECT_NAME_HERE>", |cfg, app_state| {
>         url_dispatch(cfg, app_state.clone(), "get", P0, "/health", || async { "Hello, server is alive and kicking." });
>     })
>     .await
> }

Dependencies

~174MB
~3M SLoC