diff --git a/cli/src/queries.rs b/cli/src/queries.rs index 1b52402..edea877 100644 --- a/cli/src/queries.rs +++ b/cli/src/queries.rs @@ -6,6 +6,8 @@ pub mod search_games; pub use search_games::*; pub mod tournament_sets; pub use tournament_sets::*; +pub mod player_info; +pub use player_info::*; use schema::schema; diff --git a/cli/src/queries/player_info.rs b/cli/src/queries/player_info.rs new file mode 100644 index 0000000..debe942 --- /dev/null +++ b/cli/src/queries/player_info.rs @@ -0,0 +1,49 @@ +use super::{PlayerId, QueryUnwrap}; +use cynic::GraphQlResponse; +use schema::schema; + +// Variables + +#[derive(cynic::QueryVariables, Debug)] +pub struct PlayerInfoVars { + pub id: PlayerId, +} + +// Query + +#[derive(cynic::QueryFragment, Debug)] +#[cynic(graphql_type = "Query", variables = "PlayerInfoVars")] +pub struct PlayerInfo { + #[arguments(id: $id)] + player: Option, +} + +#[derive(cynic::QueryFragment, Debug)] +struct Player { + gamer_tag: Option, + prefix: Option, +} + +// Unwrapping + +pub struct PlayerInfoResponse { + pub name: String, + pub prefix: Option, +} + +impl QueryUnwrap for PlayerInfo { + type VarsUnwrapped = PlayerInfoVars; + type Unwrapped = PlayerInfoResponse; + + fn wrap_vars(vars: PlayerInfoVars) -> PlayerInfoVars { + vars + } + + fn unwrap_response(response: GraphQlResponse) -> Option { + let player = response.data?.player?; + Some(PlayerInfoResponse { + name: player.gamer_tag?, + prefix: player.prefix.filter(|pr| !pr.is_empty()), + }) + } +}