Skip to content
This repository has been archived by the owner on Aug 2, 2023. It is now read-only.

Create API to inspect ATC itself #28

Merged
merged 1 commit into from
Mar 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions api/atc/v1/atc.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
syntax = "proto3";

package atc.v1;

message Version {
uint64 major = 1;
uint64 minor = 2;
uint64 patch = 3;
string pre = 4;
}

message GetVersionRequest {}
message GetVersionResponse {
Version version = 1;
}

service AtcService {
rpc GetVersion(GetVersionRequest) returns (GetVersionResponse);
}
1 change: 1 addition & 0 deletions game/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ geo = "0.19.0"
parking_lot = "0.12.0"
prost = "0.9.0"
rand = "0.8.5"
semver = "1.0.6"
tokio = { version = "1.17.0", features = ["macros", "rt-multi-thread", "sync"] }
tokio-stream = { version = "0.1.8", features = ["sync"] }
tonic = "0.6.2"
72 changes: 72 additions & 0 deletions game/src/api/atc.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
use semver::Version as SemVer;
use tonic::{Request, Response, Status};

use atc::v1::{GetVersionRequest, GetVersionResponse, Version};

pub struct AtcService;

#[tonic::async_trait]
impl atc::v1::atc_service_server::AtcService for AtcService {
async fn get_version(
&self,
_request: Request<GetVersionRequest>,
) -> Result<Response<GetVersionResponse>, Status> {
let semver = SemVer::parse(env!("CARGO_PKG_VERSION")).unwrap();
let version = Version {
major: semver.major,
minor: semver.minor,
patch: semver.patch,
pre: semver.pre.to_string(),
};

Ok(Response::new(GetVersionResponse {
version: Some(version),
}))
}
}

#[cfg(test)]
mod tests {
use tonic::Request;

use atc::v1::atc_service_server::AtcService as ServiceTrait;
use atc::v1::GetVersionRequest;

use super::AtcService;

#[tokio::test]
async fn get_version() {
let response = AtcService
.get_version(Request::new(GetVersionRequest {}))
.await
.unwrap();

let version = response.into_inner().version.unwrap();

assert_eq!(
env!("CARGO_PKG_VERSION_MAJOR").parse::<u64>().unwrap(),
version.major
);
assert_eq!(
env!("CARGO_PKG_VERSION_MINOR").parse::<u64>().unwrap(),
version.minor
);
assert_eq!(
env!("CARGO_PKG_VERSION_PATCH").parse::<u64>().unwrap(),
version.patch
);
assert_eq!(env!("CARGO_PKG_VERSION_PRE"), version.pre);
}

#[test]
fn trait_send() {
fn assert_send<T: Send>() {}
assert_send::<AtcService>();
}

#[test]
fn trait_sync() {
fn assert_sync<T: Sync>() {}
assert_sync::<AtcService>();
}
}
12 changes: 8 additions & 4 deletions game/src/api/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,25 @@ use std::sync::Arc;

use tonic::transport::{Error, Server as GrpcServer};

use atc::v1::airplane_service_server::AirplaneServiceServer;
use atc::v1::event_service_server::EventServiceServer;
use atc::v1::game_service_server::GameServiceServer;
use atc::v1::map_service_server::MapServiceServer;
use ::atc::v1::airplane_service_server::AirplaneServiceServer;
use ::atc::v1::atc_service_server::AtcServiceServer;
use ::atc::v1::event_service_server::EventServiceServer;
use ::atc::v1::game_service_server::GameServiceServer;
use ::atc::v1::map_service_server::MapServiceServer;

use crate::command::CommandSender;
use crate::event::EventSender;
use crate::store::Store;
use crate::SharedGameState;

use self::airplane::AirplaneService;
use self::atc::AtcService;
use self::event::EventService;
use self::game::GameService;
use self::map::MapService;

mod airplane;
mod atc;
mod event;
mod game;
mod map;
Expand All @@ -40,6 +43,7 @@ impl Api {
command_sender.clone(),
store,
)))
.add_service(AtcServiceServer::new(AtcService))
.add_service(EventServiceServer::new(EventService::new(event_sender)))
.add_service(GameServiceServer::new(GameService::new(
command_sender,
Expand Down