# `mcquery`
A tool for querying Minecraft servers

## What does this crate provide?
 - An asynchronous, [`tokio`](https://tokio.rs/)-based library
 - Two examples (basic and full queries)

## Usage
To perform a query, call `Query::get_basic` or `Query::get_full`. The
returned response will either be a `BasicQueryResponse` or a `FullQueryResponse`
respectively.

## Examples
```rust
use mcquery::Query;
use std::time::Duration;

#[tokio::main]
async fn main() -> std::io::Result<()> {
    let mut basic_query_buffer = [0; 128];
    let basic_query = Query::get_basic(
        "example.com:25565",
        Duration::from_secs(5),
        &mut basic_buffer
    ).await?;

    println!("{:#?}", basic_query);

    let mut full_query_buffer = [0; 1024];
    let full_query = Query::get_full(
        "example.com:25565",
        Duration::from_secs(5),
        &mut buffer
    ).await?;

    println!("{:#?}", full_query);

    Ok(())
}
```

## Participation
Feel free to help resolve issues, create new ones, or open a pull request.

## What's next?
 - Synchronous queries for those who want them
 - A `Packet` trait (currently async trait functions are not supported by Rust)
   or `Request`/`Response` structs

## Development resources
Thank you to the [Tokio project](https://tokio.rs/) and the [Minecraft Developer
Wiki](https://wiki.vg/)
for providing a great asynchronous runtime and useful documentation! Without them,
this crate wouldn't be possible.

## License
This project is either licensed under the MIT or the Apache 2.0 license.