5个版本 (3个重大更改)
0.4.0 | 2022年9月29日 |
---|---|
0.3.0 | 2018年7月13日 |
0.2.0 | 2018年7月10日 |
0.1.1 | 2018年6月3日 |
0.1.0 | 2018年6月3日 |
#673 in 网络编程
每月24次下载
用于4个crates(2 直接使用)
22KB
90 行
clap-port-flag
使用clap轻松为CLIs添加--port
标志。
用法
示例:基础
在src/main.rs
中包含以下代码
use clap::Parser;
use clap_port_flag::Port;
#[derive(Debug, Parser)]
struct Cli {
#[clap(flatten)]
port: Port,
}
fn main() {
let args = Cli::parse();
let _tcp_listener = args.port.bind().unwrap();
}
运行二进制文件时,它将提供以下输出
my-cool-app 0.2.0
Alice Person <[email protected]>
Application that does things over TCP.
USAGE:
main [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--listen-fd <fd> A previously opened network socket. [env: LISTEN_FD=]
-a, --address <hostname> The network address to listen to. [default: 127.0.0.1]
-p, --port <port> The network port to listen to. [env: PORT=]
示例:Hyper
use clap_port_flag::Port;
use futures::prelude::*;
use hyper::service::service_fn;
use hyper::{Body, Response, Request};
use clap::Parser;
#[derive(Debug, Parser)]
struct Cli {
#[clap(flatten)]
port: Port,
}
async fn hello(_: Request<Body>) -> Result<Response<String>, std::convert::Infallible> {
Ok(Response::new(String::from("Hello World!")))
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let args = Cli::parse();
let listener = args.port.bind()?;
let listener = tokio::net::TcpListener::from_std(listener)?;
let addr = listener.local_addr()?;
println!("Server listening on {}", addr);
let (stream, _) = listener.accept().await?;
if let Err(e) = hyper::server::conn::Http::new()
.serve_connection(stream, service_fn(hello))
.await
{
eprintln!("server error: {}", e);
}
Ok(())
}
安装
$ cargo add clap-port-flag
进一步阅读
致谢
此crate的原始版本由@TeXitoi在rust-lang-nursery/cli-wg#37中草拟。
许可证
MIT OR Apache-2.0
依赖关系
~1.2–1.7MB
~33K SLoC