1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
use super::*;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct AppId(pub u32);
pub struct Apps<Manager> {
pub(crate) apps: *mut sys::ISteamApps,
pub(crate) _inner: Arc<Inner<Manager>>,
}
impl <Manager> Apps<Manager> {
pub fn is_app_installed(&self, app_id: AppId) -> bool {
unsafe {
sys::SteamAPI_ISteamApps_BIsAppInstalled(self.apps, app_id.0) != 0
}
}
pub fn is_dlc_installed(&self, app_id: AppId) -> bool {
unsafe {
sys::SteamAPI_ISteamApps_BIsDlcInstalled(self.apps, app_id.0) != 0
}
}
pub fn is_subscribed_app(&self, app_id: AppId) -> bool {
unsafe {
sys::SteamAPI_ISteamApps_BIsSubscribedApp(self.apps, app_id.0) != 0
}
}
pub fn is_subscribed_from_free_weekend(&self) -> bool {
unsafe {
sys::SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(self.apps) != 0
}
}
pub fn is_vac_banned(&self) -> bool {
unsafe {
sys::SteamAPI_ISteamApps_BIsVACBanned(self.apps) != 0
}
}
pub fn is_cybercafe(&self) -> bool {
unsafe {
sys::SteamAPI_ISteamApps_BIsCybercafe(self.apps) != 0
}
}
pub fn is_low_violence(&self) -> bool {
unsafe {
sys::SteamAPI_ISteamApps_BIsLowViolence(self.apps) != 0
}
}
pub fn is_subscribed(&self) -> bool {
unsafe {
sys::SteamAPI_ISteamApps_BIsSubscribed(self.apps) != 0
}
}
pub fn app_build_id(&self) -> i32 {
unsafe {
sys::SteamAPI_ISteamApps_GetAppBuildId(self.apps) as i32
}
}
pub fn app_install_dir(&self, app_id: AppId) -> String {
unsafe {
let buffer = vec![0; 2048];
sys::SteamAPI_ISteamApps_GetAppInstallDir(self.apps, app_id.0, buffer.as_ptr(), buffer.len() as u32);
let path = CStr::from_ptr(buffer.as_ptr());
path.to_string_lossy().into_owned()
}
}
pub fn app_owner(&self) -> SteamId {
unsafe {
SteamId(sys::SteamAPI_ISteamApps_GetAppOwner(self.apps))
}
}
pub fn available_game_languages(&self) -> Vec<String> {
unsafe {
let langs = sys::SteamAPI_ISteamApps_GetAvailableGameLanguages(self.apps);
let langs = CStr::from_ptr(langs);
let langs = langs.to_string_lossy();
langs.split(',')
.map(|v| v.to_owned())
.collect()
}
}
pub fn current_game_language(&self) -> Cow<str> {
unsafe {
let lang = sys::SteamAPI_ISteamApps_GetCurrentGameLanguage(self.apps);
let lang = CStr::from_ptr(lang);
lang.to_string_lossy()
}
}
pub fn current_beta_name(&self) -> Option<String> {
unsafe {
let buffer = vec![0; 256];
if sys::SteamAPI_ISteamApps_GetCurrentBetaName(self.apps, buffer.as_ptr(), buffer.len() as _) != 0 {
let path = CStr::from_ptr(buffer.as_ptr());
Some(path.to_string_lossy().into_owned())
} else {
None
}
}
}
}