2 个版本
0.5.0 | 2024 年 1 月 25 日 |
---|---|
0.5.0-crt1 | 2024 年 2 月 15 日 |
#140 in HTTP 服务器
每月 38,533 次下载
1.5MB
29K SLoC
Rust API for axum-containerssh
本 OpenAPI 文档描述了实现 ContainerSSH 身份验证和配置服务器所需的 API 端点。(有关详细信息,请参阅 https://github.com/containerssh/libcontainerssh。)
概述
此服务器是由 [openapi-generator](《https://openapi-generator.tech》)项目生成的。通过使用来自远程服务器的 OpenAPI-Spec,您可以轻松生成服务器存根。
要了解如何将其作为自己的项目,请参阅此处:README
- API 版本:0.5.0
- 构建日期:2024-01-25T16:54:36.302357845ZEtc/UTC
此自动生成的项目定义了一个 API crate axum-containerssh
,其中包含
- 一个定义 Rust 中 API 的
Api
特征。 - 表示底层数据模型的数据类型。
- Axum 路由器,它接受 HTTP 请求并调用每个操作的适当
Api
方法。- 包括请求验证(路径、查询、正文参数)。
使用生成的库
生成的库有一些可选功能,可以通过 Cargo 激活。
服务器
- 默认启用,并创建基于 Axum 的服务器实现的基本骨架。
- 要创建服务器堆栈,您需要提供一个 API 特征的实现以提供服务器功能。
转换
- 默认禁用,并为模型创建额外的 derive,允许在结构类似的对象之间进行“变形”。
有关如何在 Cargo.toml
中使用功能的说明,请参阅 https://doc.rust-lang.net.cn/cargo/reference/manifest.html#the-features-section。
示例
struct ServerImpl {
// database: sea_orm::DbConn,
}
#[allow(unused_variables)]
#[async_trait]
impl axum-containerssh::Api for ServerImpl {
// API implementation goes here
}
pub async fn start_server(addr: &str) {
// initialize tracing
tracing_subscriber::fmt::init();
// Init Axum router
let app = axum-containerssh::server::new(Arc::new(ServerImpl));
// Add layers to the router
let app = app.layer(...);
// Run the server with graceful shutdown
let listener = TcpListener::bind(addr).await.unwrap();
axum::serve(listener, app)
.with_graceful_shutdown(shutdown_signal())
.await
.unwrap();
}
async fn shutdown_signal() {
let ctrl_c = async {
signal::ctrl_c()
.await
.expect("failed to install Ctrl+C handler");
};
#[cfg(unix)]
let terminate = async {
signal::unix::signal(signal::unix::SignalKind::terminate())
.expect("failed to install signal handler")
.recv()
.await;
};
#[cfg(not(unix))]
let terminate = std::future::pending::<()>();
tokio::select! {
_ = ctrl_c => {},
_ = terminate => {},
}
}
依赖关系
~15–26MB
~452K SLoC