mirror of
https://github.com/tribufu/rust-gamedig
synced 2026-05-18 09:35:50 +00:00
Feat: merge gamedig-cli partially & monorepo conversion
Related issue: #125
This commit is contained in:
commit
89222b1f44
71 changed files with 133 additions and 49 deletions
7
.github/labeler.yml
vendored
7
.github/labeler.yml
vendored
|
|
@ -5,10 +5,13 @@ ci:
|
|||
- .pre-commit-config.yaml
|
||||
|
||||
protocol:
|
||||
- src/protocols/**
|
||||
- crates/lib/src/protocols/**
|
||||
|
||||
game:
|
||||
- src/games/**
|
||||
- crates/lib/src/games/**
|
||||
|
||||
cli:
|
||||
- crates/cli/**
|
||||
|
||||
crate:
|
||||
- Cargo.toml
|
||||
|
|
|
|||
16
.github/workflows/ci.yml
vendored
16
.github/workflows/ci.yml
vendored
|
|
@ -31,9 +31,9 @@ jobs:
|
|||
shared-key: "cargo-deps"
|
||||
cache-targets: false
|
||||
- name: Run Build
|
||||
run: cargo build --verbose --bins --lib --examples --all-features
|
||||
run: cargo check --verbose --workspace --bins --lib --examples --all-features
|
||||
- name: Run Tests
|
||||
run: cargo test --verbose --bins --lib --examples --all-features
|
||||
run: cargo test --verbose --workspace --bins --lib --examples --all-features
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ "build_first" ]
|
||||
|
|
@ -61,9 +61,9 @@ jobs:
|
|||
shared-key: "cargo-deps"
|
||||
cache-targets: false
|
||||
- name: Run Build
|
||||
run: cargo build --verbose --bins --lib ${{ matrix.build_type }}
|
||||
run: cargo check --workspace --verbose --bins --lib ${{ matrix.build_type }}
|
||||
build_msrv:
|
||||
name: "Build using MSRV"
|
||||
name: "Build using MSRV (lib only)"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
|
@ -74,7 +74,7 @@ jobs:
|
|||
toolchain: 1.65.0
|
||||
override: true
|
||||
- name: Run MSRV
|
||||
run: cargo build
|
||||
run: cargo check -p gamedig
|
||||
formatting:
|
||||
name: "Check code formatting"
|
||||
runs-on: ubuntu-latest
|
||||
|
|
@ -105,10 +105,10 @@ jobs:
|
|||
uses: actions-rs/clippy-check@v1
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
args: --bins --lib --examples --all-features
|
||||
args: --workspace --bins --lib --examples --all-features
|
||||
if: ${{ !env.ACT }} # skip during local actions testing
|
||||
- name: Run clippy (local)
|
||||
run: cargo clippy --verbose --bins --lib --examples --all-features
|
||||
run: cargo clippy --workspace --verbose --bins --lib --examples --all-features
|
||||
if: ${{ env.ACT }} # only run during local actions testing
|
||||
doc:
|
||||
name: "Check rustdoc"
|
||||
|
|
@ -121,6 +121,6 @@ jobs:
|
|||
shared-key: "cargo-deps"
|
||||
cache-targets: false
|
||||
- name: "Run cargo doc"
|
||||
run: cargo doc
|
||||
run: cargo doc --workspace
|
||||
env:
|
||||
RUSTDOCFLAGS: "-D warnings"
|
||||
|
|
|
|||
2
.github/workflows/node-badge.yml
vendored
2
.github/workflows/node-badge.yml
vendored
|
|
@ -39,7 +39,7 @@ jobs:
|
|||
# Calculate how many of those games we have definitions for
|
||||
rust_games_count=0
|
||||
for game in $node_games; do
|
||||
if grep "\"$game\" *=>" ./src/games/definitions.rs; then
|
||||
if grep "\"$game\" *=>" ./crates/lib/src/games/definitions.rs; then
|
||||
rust_games_count=$(( rust_games_count + 1 ))
|
||||
fi
|
||||
done
|
||||
|
|
|
|||
|
|
@ -8,25 +8,25 @@ repos:
|
|||
language: system
|
||||
files: '[.]rs$'
|
||||
pass_filenames: false
|
||||
entry: rustup run --install nightly-2023-07-09 cargo-clippy -- -- -D warnings
|
||||
entry: rustup run --install nightly-2023-07-09 cargo-clippy -- --workspace --all-features -- -D warnings
|
||||
- id: build-no-features
|
||||
name: Check crate build with no features
|
||||
language: system
|
||||
files: '[.]rs$'
|
||||
pass_filenames: false
|
||||
entry: cargo build --no-default-features
|
||||
entry: cargo check --workspace --no-default-features
|
||||
- id: build-all-features
|
||||
name: Check crate builds with all features
|
||||
language: system
|
||||
files: '[.]rs$'
|
||||
pass_filenames: false
|
||||
entry: cargo build --all-features --lib --bins --examples
|
||||
entry: cargo check --workspace --all-features --lib --bins --examples
|
||||
- id: test
|
||||
name: Check tests pass
|
||||
language: system
|
||||
files: '[.]rs$'
|
||||
pass_filenames: false
|
||||
entry: cargo test --bins --lib --examples --all-features
|
||||
entry: cargo test --workspace --bins --lib --examples --all-features
|
||||
- id: format
|
||||
name: Check rustfmt
|
||||
language: system
|
||||
|
|
@ -34,11 +34,11 @@ repos:
|
|||
pass_filenames: false
|
||||
entry: rustup run --install nightly-2023-07-09 cargo-fmt --check
|
||||
- id: msrv
|
||||
name: Check MSRV compiles
|
||||
name: Check MSRV compiles (lib only)
|
||||
language: system
|
||||
files: '[.]rs$'
|
||||
pass_filenames: false
|
||||
entry: rustup run --install 1.65 cargo build
|
||||
entry: rustup run --install 1.65 cargo check -p gamedig
|
||||
- id: docs
|
||||
name: Check rustdoc compiles
|
||||
language: system
|
||||
|
|
|
|||
44
Cargo.toml
44
Cargo.toml
|
|
@ -1,35 +1,15 @@
|
|||
[package]
|
||||
name = "gamedig"
|
||||
version = "0.4.1"
|
||||
edition = "2021"
|
||||
authors = [
|
||||
"rust-GameDig contributors [https://github.com/gamedig/rust-gamedig/contributors]",
|
||||
"node-GameDig contributors [https://github.com/gamedig/node-gamedig/contributors]",
|
||||
]
|
||||
license = "MIT"
|
||||
description = "Query game servers and not only."
|
||||
homepage = "https://github.com/gamedig/rust-gamedig"
|
||||
documentation = "https://docs.rs/gamedig/latest/gamedig/"
|
||||
repository = "https://github.com/gamedig/rust-gamedig"
|
||||
readme = "README.md"
|
||||
keywords = ["server", "query", "game", "check", "status"]
|
||||
rust-version = "1.65.0"
|
||||
categories = ["parser-implementations", "parsing", "network-programming", "encoding"]
|
||||
[workspace]
|
||||
name = "gamedig-workspace"
|
||||
members = ["crates/cli", "crates/lib"]
|
||||
|
||||
[features]
|
||||
default = ["games", "services", "game_defs"]
|
||||
games = []
|
||||
services = []
|
||||
game_defs = ["dep:phf", "games"]
|
||||
serde = ["dep:serde", "serde/derive"]
|
||||
# Edition 2021, uses resolver = 2
|
||||
resolver = "2"
|
||||
|
||||
[dependencies]
|
||||
byteorder = "1.5"
|
||||
bzip2-rs = "0.1"
|
||||
crc32fast = "1.3"
|
||||
serde_json = "1.0"
|
||||
encoding_rs = "0.8"
|
||||
[profile.release]
|
||||
opt-level = 3
|
||||
debug = false
|
||||
rpath = true
|
||||
lto = true
|
||||
|
||||
serde = { version = "1.0", optional = true }
|
||||
|
||||
phf = { version = "0.11", optional = true, features = ["macros"] }
|
||||
[profile.release.package."*"]
|
||||
opt-level = 3
|
||||
|
|
|
|||
16
crates/cli/Cargo.toml
Normal file
16
crates/cli/Cargo.toml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
[package]
|
||||
name = "gamedig-cli"
|
||||
authors = [
|
||||
"rust-GameDig contributors [https://github.com/gamedig/rust-gamedig/contributors]",
|
||||
]
|
||||
description = "A command line interface for gamedig"
|
||||
license = "MIT"
|
||||
version = "0.4.1"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.1.11", features = ["derive"] }
|
||||
gamedig = { version = "*", path = "../lib" }
|
||||
thiserror = "1.0.43"
|
||||
16
crates/cli/src/error.rs
Normal file
16
crates/cli/src/error.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
pub type Result<T> = std::result::Result<T, Error>;
|
||||
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
pub enum Error {
|
||||
#[error("IO Error: {0}")]
|
||||
Io(#[from] std::io::Error),
|
||||
|
||||
#[error("Clap Error: {0}")]
|
||||
Clap(#[from] clap::Error),
|
||||
|
||||
#[error("Gamedig Error: {0}")]
|
||||
Gamedig(#[from] gamedig::errors::GDError),
|
||||
|
||||
#[error("Unknown Game: {0}")]
|
||||
UnknownGame(String),
|
||||
}
|
||||
34
crates/cli/src/main.rs
Normal file
34
crates/cli/src/main.rs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
use std::net::IpAddr;
|
||||
|
||||
use clap::Parser;
|
||||
use gamedig::games::*;
|
||||
|
||||
mod error;
|
||||
|
||||
use self::error::Result;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about)]
|
||||
struct Cli {
|
||||
#[arg(short, long)]
|
||||
game: String,
|
||||
|
||||
#[arg(short, long)]
|
||||
ip: IpAddr,
|
||||
|
||||
#[arg(short, long)]
|
||||
port: Option<u16>,
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let args = Cli::parse();
|
||||
|
||||
let game = match GAMES.get(&args.game) {
|
||||
Some(game) => game,
|
||||
None => return Err(error::Error::UnknownGame(args.game)),
|
||||
};
|
||||
|
||||
println!("{:#?}", query(game, &args.ip, args.port)?.as_json());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
35
crates/lib/Cargo.toml
Normal file
35
crates/lib/Cargo.toml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[package]
|
||||
name = "gamedig"
|
||||
version = "0.4.1"
|
||||
edition = "2021"
|
||||
authors = [
|
||||
"rust-GameDig contributors [https://github.com/gamedig/rust-gamedig/contributors]",
|
||||
"node-GameDig contributors [https://github.com/gamedig/node-gamedig/contributors]",
|
||||
]
|
||||
license = "MIT"
|
||||
description = "Query game servers and not only."
|
||||
homepage = "https://github.com/gamedig/rust-gamedig"
|
||||
documentation = "https://docs.rs/gamedig/latest/gamedig/"
|
||||
repository = "https://github.com/gamedig/rust-gamedig"
|
||||
readme = "README.md"
|
||||
keywords = ["server", "query", "game", "check", "status"]
|
||||
rust-version = "1.65.0"
|
||||
categories = ["parser-implementations", "parsing", "network-programming", "encoding"]
|
||||
|
||||
[features]
|
||||
default = ["games", "services", "game_defs"]
|
||||
games = []
|
||||
services = []
|
||||
game_defs = ["dep:phf", "games"]
|
||||
serde = ["dep:serde", "serde/derive"]
|
||||
|
||||
[dependencies]
|
||||
byteorder = "1.5"
|
||||
bzip2-rs = "0.1"
|
||||
crc32fast = "1.3"
|
||||
serde_json = "1.0"
|
||||
encoding_rs = "0.8"
|
||||
|
||||
serde = { version = "1.0", optional = true }
|
||||
|
||||
phf = { version = "0.11", optional = true, features = ["macros"] }
|
||||
Loading…
Add table
Add a link
Reference in a new issue