code cleanup
This commit is contained in:
parent
5565fa39c1
commit
b4f75b149a
7 changed files with 84 additions and 72 deletions
|
@ -1,4 +1,5 @@
|
||||||
use crate::{ApiResponse, SteamIdResponse};
|
use crate::responses::api_response::ApiResponse;
|
||||||
|
use crate::responses::steam_id_response::SteamIdResponse;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
|
12
src/game.rs
Normal file
12
src/game.rs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||||
|
pub struct Game {
|
||||||
|
pub appid: u32,
|
||||||
|
pub name: Option<String>,
|
||||||
|
pub playtime_2weeks: Option<u32>,
|
||||||
|
pub playtime_forever: Option<u32>,
|
||||||
|
pub img_icon_url: Option<String>,
|
||||||
|
pub img_logo_url: Option<String>,
|
||||||
|
pub has_community_visible_stats: Option<bool>,
|
||||||
|
}
|
51
src/gamelist.rs
Normal file
51
src/gamelist.rs
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
use crate::config::Config;
|
||||||
|
use crate::game::Game;
|
||||||
|
use crate::responses::api_response::ApiResponse;
|
||||||
|
use rand::seq::IteratorRandom;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct GameList {
|
||||||
|
pub game_count: i32,
|
||||||
|
pub games: Vec<Game>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GameList {
|
||||||
|
pub fn new() -> GameList {
|
||||||
|
GameList {
|
||||||
|
game_count: 0,
|
||||||
|
games: Vec::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn update(&mut self) {
|
||||||
|
let config = Config::new();
|
||||||
|
match reqwest::blocking::get(format!("https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key={}&steamid={}&format=json&include_appinfo=true",
|
||||||
|
config.steam_api_key,
|
||||||
|
config.get_steam_id(Some(&config.user.username))
|
||||||
|
)) {
|
||||||
|
Ok(res) => {
|
||||||
|
match res.text() {
|
||||||
|
Ok(text) => {
|
||||||
|
let api_response: ApiResponse<GameList>= serde_json::from_str(&text).unwrap();
|
||||||
|
self.games = api_response.response.games;
|
||||||
|
},
|
||||||
|
Err(_) => println!("Error getting list") ,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) => println!("Error getting list") ,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn pick(&self) -> Option<Game> {
|
||||||
|
self.games.iter().choose(&mut rand::rng()).cloned()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn pick_unplayed(&self) -> Option<Game> {
|
||||||
|
self.games
|
||||||
|
.iter()
|
||||||
|
.filter(|&game| game.playtime_forever == Some(0))
|
||||||
|
.choose(&mut rand::rng())
|
||||||
|
.cloned()
|
||||||
|
}
|
||||||
|
}
|
75
src/main.rs
75
src/main.rs
|
@ -1,77 +1,10 @@
|
||||||
mod config;
|
mod config;
|
||||||
|
mod game;
|
||||||
|
mod gamelist;
|
||||||
|
mod responses;
|
||||||
|
|
||||||
use crate::config::Config;
|
use crate::gamelist::GameList;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use rand::seq::IteratorRandom;
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
struct ApiResponse<T> {
|
|
||||||
response: T,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
struct SteamIdResponse {
|
|
||||||
steamid: String,
|
|
||||||
success: u8,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
|
||||||
struct Game {
|
|
||||||
appid: u32,
|
|
||||||
name: Option<String>,
|
|
||||||
playtime_2weeks: Option<u32>,
|
|
||||||
playtime_forever: Option<u32>,
|
|
||||||
img_icon_url: Option<String>,
|
|
||||||
img_logo_url: Option<String>,
|
|
||||||
has_community_visible_stats: Option<bool>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
struct GameList {
|
|
||||||
game_count: i32,
|
|
||||||
games: Vec<Game>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl GameList {
|
|
||||||
fn new() -> GameList {
|
|
||||||
GameList {
|
|
||||||
game_count: 0,
|
|
||||||
games: Vec::new(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn update(&mut self) {
|
|
||||||
let config = Config::new();
|
|
||||||
match reqwest::blocking::get(format!("https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key={}&steamid={}&format=json&include_appinfo=true",
|
|
||||||
config.steam_api_key,
|
|
||||||
config.get_steam_id(Some(&config.user.username))
|
|
||||||
)) {
|
|
||||||
Ok(res) => {
|
|
||||||
match res.text() {
|
|
||||||
Ok(text) => {
|
|
||||||
let api_response: ApiResponse<GameList>= serde_json::from_str(&text).unwrap();
|
|
||||||
self.games = api_response.response.games;
|
|
||||||
},
|
|
||||||
Err(_) => println!("Error getting list") ,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(_) => println!("Error getting list") ,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn pick(&self) -> Option<Game> {
|
|
||||||
self.games.iter().choose(&mut rand::rng()).cloned()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn pick_unplayed(&self) -> Option<Game> {
|
|
||||||
self.games
|
|
||||||
.iter()
|
|
||||||
.filter(|&game| game.playtime_forever == Some(0))
|
|
||||||
.choose(&mut rand::rng())
|
|
||||||
.cloned()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
struct Args {
|
struct Args {
|
||||||
|
|
6
src/responses/api_response.rs
Normal file
6
src/responses/api_response.rs
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct ApiResponse<T> {
|
||||||
|
pub response: T,
|
||||||
|
}
|
2
src/responses/mod.rs
Normal file
2
src/responses/mod.rs
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
pub mod api_response;
|
||||||
|
pub mod steam_id_response;
|
7
src/responses/steam_id_response.rs
Normal file
7
src/responses/steam_id_response.rs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct SteamIdResponse {
|
||||||
|
pub steamid: String,
|
||||||
|
success: u8,
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue