# 🦀 lunaria-api [![GitHub release (latest by date)](https://img.shields.io/github/v/release/playlunaria/lunaria-api)](https://github.com/playlunaria/lunaria-api/releases) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/playlunaria/lunaria-api/rust)](https://github.com/playlunaria/lunaria-api/actions?query=workflow%3ARust) [![License](https://img.shields.io/crates/l/lunaria-api)](https://crates.io/crates/lunaria-api) _A Rust API client for the video game Lunaria._ [Lunaria] is a video game for programmers, and is played by writing code that interacts with the game through a [gRPC] API. This crate contains a [gRPC] client that is auto-generated from the [Protocol Buffers][protobuf] that declare [Lunaria's API][lunaria-api]. ## Getting Started First, add `lunaria-api` as a dependency to your `Cargo.toml`. Because `lunaria-api` wraps a client generated by [`tonic`][tonic], it must be added as a dependency as well. And if you are building a binary, you also need an async runtime like [`tokio`][tokio]. ```toml [dependencies] lunaria-api = "0.2.1" tokio = { version = "0.2.22", features = ["macros", "rt-threaded"] } tonic = "0.3.1" ``` Next, import `LunariaClient` and connect to the game server. Check out Lunaria's API specification below to learn about all the requests you can send, and the data they require and return: Here is an example that fetches the version of the game: ```rust use lunaria_api::lunaria::v1::lunaria_service_client::LunariaSerrviceClient; use lunaria_api::lunaria::v1::{GetVersionRequest, GetVersionResponse, Version}; use tonic::Request; #[tokio::main] async fn main() -> Result<(), Box> { // Specify the address and port of Lunaria's API let address = "http://127.0.0.1:1904"; // Initialize the client let mut lunaria = LunariaServiceClient::connect(address).await?; // Create a request to get the game's version and send it to the server let request = Request::new(GetVersionRequest {}); let grpc_response = lunaria.get_version(request).await?; let version_response = grpc_response.into_inner(); if let Some(version) = version_response.version { assert_eq!(0, version.major); assert_eq!(0, version.minor); assert_eq!(0, version.patch); } Ok(()) } ``` ## License Licensed under either of - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or ) - MIT license ([LICENSE-MIT](LICENSE-MIT) or ) at your option. ## Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. [grpc]: https://grpc.io [lunaria]: https://playlunaria.com [lunaria-api]: https://github.com/playlunaria/lunaria-api [protobuf]: https://developers.google.com/protocol-buffers/ [tokio]: https://github.com/tokio-rs/tokio [tonic]: https://github.com/hyperium/tonic