1use serde::{Deserialize, Serialize};
2
3pub mod achievements;
4pub mod auth;
5pub mod broadcast;
6pub mod chat;
7pub mod chunk;
8pub mod commerce;
9pub mod common;
10pub mod entitlements;
11pub mod errors;
12pub mod friends;
13pub mod game;
14pub mod groups;
15pub mod invites;
16pub mod overlay;
17pub mod permissions;
18pub mod presence;
19pub mod profile;
20pub mod steam;
21pub mod system;
22pub mod user;
23pub mod voip;
24
25use crate::protocol::achievements::*;
26use crate::protocol::auth::*;
27use crate::protocol::broadcast::*;
28use crate::protocol::chat::*;
29use crate::protocol::chunk::*;
30use crate::protocol::commerce::*;
31use crate::protocol::common::*;
32use crate::protocol::entitlements::*;
33use crate::protocol::friends::*;
34use crate::protocol::game::*;
35use crate::protocol::groups::*;
36use crate::protocol::invites::*;
37use crate::protocol::overlay::*;
38use crate::protocol::permissions::*;
39use crate::protocol::presence::*;
40use crate::protocol::profile::*;
41use crate::protocol::steam::*;
42use crate::protocol::system::*;
43use crate::protocol::user::*;
44use crate::protocol::voip::*;
45#[cfg(feature = "client")]
46use crate::request_response;
47
48#[derive(Debug, Serialize, Deserialize)]
51#[serde(rename = "LSX")]
52pub struct Lsx {
53 #[serde(rename = "$value")]
54 pub message: Message,
55}
56
57#[derive(Debug, Serialize, Deserialize)]
58#[serde(rename_all = "PascalCase")]
59pub enum Message {
60 Request(Request),
61 Response(Response),
62 Event(Event),
63}
64
65#[derive(Debug, Serialize, Deserialize)]
66pub struct Request {
67 #[serde(rename = "@id")]
68 pub id: String,
69 #[serde(rename = "@recipient", default)]
70 pub recipient: String,
71 #[serde(rename = "$value")]
72 pub body: RequestBody,
73}
74
75#[derive(Debug, Serialize, Deserialize)]
76pub struct Response {
77 #[serde(rename = "@id")]
78 pub id: String,
79 #[serde(rename = "@sender", default)]
80 pub sender: String,
81 #[serde(rename = "$value")]
82 pub body: ResponseBody,
83}
84
85#[derive(Debug, Serialize, Deserialize)]
86pub struct Event {
87 #[serde(rename = "@sender", default)]
88 pub sender: String,
89 #[serde(rename = "$value")]
90 pub body: EventBody,
91}
92
93#[derive(Debug, Serialize, Deserialize)]
96pub enum RequestBody {
97 AcceptFriendInvite(AcceptFriendInvite),
98 AcceptInvite(AcceptInvite),
99 AddRecentPlayers(AddRecentPlayers),
100 AreChunksInstalled(AreChunksInstalled),
101 BlockUser(BlockUser),
102 BroadcastStart(BroadcastStart),
103 BroadcastStop(BroadcastStop),
104 ChallengeResponse(ChallengeResponse),
105 CheckPermission(CheckPermission),
106 Checkout(Checkout),
107 ConsumeEntitlement(ConsumeEntitlement),
108 CreateChunk(CreateChunk),
109 CreateGroup(CreateGroup),
110 DetermineCommerceCurrency(DetermineCommerceCurrency),
111 EnableVoip(EnableVoip),
112 EnterGroup(EnterGroup),
113 ExtendTrial(ExtendTrial),
114 GetAllGameInfo(GetAllGameInfo),
115 GetAuthCode(GetAuthCode),
116 GetAuthToken(GetAuthToken),
117 GetBlockList(GetBlockList),
118 GetBroadcastStatus(GetBroadcastStatus),
119 GetCatalog(GetCatalog),
120 GetChunkPriority(GetChunkPriority),
121 GetConfig(GetConfig),
122 GetGameInfo(GetGameInfo),
123 GetGroupInfo(GetGroupInfo),
124 GetInternetConnectedState(GetInternetConnectedState),
125 GetPresence(GetPresence),
126 GetPresenceVisibility(GetPresenceVisibility),
127 GetProfile(GetProfile),
128 GetSetting(GetSetting),
129 GetSettings(GetSettings),
130 GetStore(GetStore),
131 GetUserProfileByEmailorEaid(GetUserProfileByEmailorEaid),
132 GetUtcTime(GetUtcTime),
133 GetVoipStatus(GetVoipStatus),
134 GetWalletBalance(GetWalletBalance),
135 GoOnline(GoOnline),
136 GrantAchievement(GrantAchievement),
137 InvalidateLicense(InvalidateLicense),
138 InviteUsersToGroup(InviteUsersToGroup),
139 IsFileDownloaded(IsFileDownloaded),
140 IsProgressiveInstallationAvailable(IsProgressiveInstallationAvailable),
141 LeaveGroup(LeaveGroup),
142 Logout(Logout),
143 MuteUser(MuteUser),
144 OverlayStateChanged(OverlayStateChanged),
145 PostAchievementEvents(PostAchievementEvents),
146 PostWincodes(PostWincodes),
147 QueryAchievements(QueryAchievements),
148 QueryAreFriends(QueryAreFriends),
149 QueryCategories(QueryCategories),
150 QueryChunkFiles(QueryChunkFiles),
151 QueryChunkStatus(QueryChunkStatus),
152 QueryContent(QueryContent),
153 QueryEntitlements(QueryEntitlements),
154 QueryFriends(QueryFriends),
155 QueryGroup(QueryGroup),
156 QueryImage(QueryImage),
157 QueryManifest(QueryManifest),
158 QueryMuteState(QueryMuteState),
159 QueryOffers(QueryOffers),
160 QueryPresence(QueryPresence),
161 RefreshEntitlements(RefreshEntitlements),
162 RemoveFriend(RemoveFriend),
163 RemoveUsersFromGroup(RemoveUsersFromGroup),
164 RequestFriend(RequestFriend),
165 RequestLicense(RequestLicense),
166 RestartGame(RestartGame),
167 SelectStore(SelectStore),
168 SendChatMessage(SendChatMessage),
169 SendGameMessage(SendGameMessage),
170 SendGroupGameInvite(SendGroupGameInvite),
171 SendInvite(SendInvite),
172 SetChunkPriority(SetChunkPriority),
173 SetDlcInstalledState(SetDlcInstalledState),
174 SetDownloaderUtilization(SetDownloaderUtilization),
175 SetPresence(SetPresence),
176 SetPresenceVisibility(SetPresenceVisibility),
177 SetSteamLocale(SetSteamLocale),
178 ShowIgo(ShowIgo),
179 ShowIgoWindow(ShowIgoWindow),
180 StartDownload(StartDownload),
181 StartGame(StartGame),
182 SteamAchievementErrorTelemetry(SteamAchievementErrorTelemetry),
183 SteamPurchaseConfirmation(SteamPurchaseConfirmation),
184 SubscribePresence(SubscribePresence),
185 UnblockUser(UnblockUser),
186 UnsubscribePresence(UnsubscribePresence),
187}
188
189#[derive(Debug, Serialize, Deserialize)]
190pub enum ResponseBody {
191 Achievement(Achievement),
192 AchievementSets(AchievementSets),
193 AreChunksInstalledResponse(AreChunksInstalledResponse),
194 AuthCode(AuthCode),
195 AuthToken(AuthToken),
196 BroadcastStatus(BroadcastStatus),
197 ChallengeAccepted(ChallengeAccepted),
198 CheckPermissionResponse(CheckPermissionResponse),
199 ConsumeEntitlementResponse(ConsumeEntitlementResponse),
200 CreateChunkResponse(CreateChunkResponse),
201 ErrorSuccess(ErrorSuccess),
202 ExtendTrialResponse(ExtendTrialResponse),
203 GetAllGameInfoResponse(GetAllGameInfoResponse),
204 GetBlockListResponse(GetBlockListResponse),
205 GetCatalogResponse(GetCatalogResponse),
206 GetChunkPriorityResponse(GetChunkPriorityResponse),
207 GetConfigResponse(GetConfigResponse),
208 GetGameInfoResponse(GetGameInfoResponse),
209 GetPresenceResponse(GetPresenceResponse),
210 GetPresenceVisibilityResponse(GetPresenceVisibilityResponse),
211 GetProfileResponse(GetProfileResponse),
212 GetSettingResponse(GetSettingResponse),
213 GetSettingsResponse(GetSettingsResponse),
214 GetStoreResponse(GetStoreResponse),
215 GetUserProfileByEmailorEaidResponse(GetUserProfileByEmailorEaidResponse),
216 GetUtcTimeResponse(GetUtcTimeResponse),
217 GetVoipStatusResponse(GetVoipStatusResponse),
218 GetWalletBalanceResponse(GetWalletBalanceResponse),
219 GroupEnterEvent(GroupEnterEvent),
220 GroupInfo(GroupInfo),
221 InternetConnectedState(InternetConnectedState),
222 IsFileDownloadedResponse(IsFileDownloadedResponse),
223 IsProgressiveInstallationAvailableResponse(IsProgressiveInstallationAvailableResponse),
224 QueryAreFriendsResponse(QueryAreFriendsResponse),
225 QueryCategoriesResponse(QueryCategoriesResponse),
226 QueryChunkFilesResponse(QueryChunkFilesResponse),
227 QueryChunkStatusResponse(QueryChunkStatusResponse),
228 QueryContentResponse(QueryContentResponse),
229 QueryEntitlementsResponse(QueryEntitlementsResponse),
230 QueryFriendsResponse(QueryFriendsResponse),
231 QueryGroupResponse(QueryGroupResponse),
232 QueryImageResponse(QueryImageResponse),
233 QueryManifestResponse(QueryManifestResponse),
234 QueryMuteStateResponse(QueryMuteStateResponse),
235 QueryOffersResponse(QueryOffersResponse),
236 QueryPresenceResponse(QueryPresenceResponse),
237 RequestLicenseResponse(RequestLicenseResponse),
238}
239
240#[derive(Debug, Serialize, Deserialize)]
241pub enum EventBody {
242 AchievementSets(AchievementSets),
243 BlockListUpdated(BlockListUpdated),
244 BroadcastEvent(BroadcastEvent),
245 Challenge(Challenge),
246 ChatMessageEvent(ChatMessageEvent),
247 ChatStateUpdateEvent(ChatStateUpdateEvent),
248 ChunkStatus(ChunkStatus),
249 CoreContentUpdated(CoreContentUpdated),
250 CurrentUserPresenceEvent(CurrentUserPresenceEvent),
251 FriendsEvent(FriendsEvent),
252 GameMessageEvent(GameMessageEvent),
253 GetPresenceResponse(GetPresenceResponse),
254 GroupEnterEvent(GroupEnterEvent),
255 GroupEvent(GroupEvent),
256 GroupInviteEvent(GroupInviteEvent),
257 GroupLeaveEvent(GroupLeaveEvent),
258 IgoEvent(IgoEvent),
259 IgoUnavailable(IgoUnavailable),
260 Login(Login),
261 MinimizeRequest(MinimizeRequest),
262 MultiplayerInvite(MultiplayerInvite),
263 MultiplayerInvitePending(MultiplayerInvitePending),
264 OnlineStatusEvent(OnlineStatusEvent),
265 PresenceEvent(PresenceEvent),
266 PresenceVisibilityEvent(PresenceVisibilityEvent),
267 ProfileEvent(ProfileEvent),
268 PurchaseEvent(PurchaseEvent),
269 QueryEntitlementsResponse(QueryEntitlementsResponse),
270 QueryFriendsResponse(QueryFriendsResponse),
271 RestoreRequest(RestoreRequest),
272 SteamAchievementEvent(SteamAchievementEvent),
273 SteamActivateOverlayToStoreEvent(SteamActivateOverlayToStoreEvent),
274 UserInvitedEvent(UserInvitedEvent),
275 VoipStatusEvent(VoipStatusEvent),
276}
277
278#[cfg(feature = "client")]
281pub trait RequestResponse {
282 type Response;
283 fn extract_response(body: ResponseBody) -> Result<Self::Response, crate::sdk::SdkError>;
284}
285
286#[cfg(feature = "client")]
287request_response! {
288 AcceptFriendInvite => ErrorSuccess,
289 AcceptInvite => ErrorSuccess,
290 AddRecentPlayers => ErrorSuccess,
291 AreChunksInstalled => AreChunksInstalledResponse,
292 BlockUser => ErrorSuccess,
293 BroadcastStart => ErrorSuccess,
294 BroadcastStop => ErrorSuccess,
295 ChallengeResponse => ChallengeAccepted,
296 CheckPermission => CheckPermissionResponse,
297 Checkout => ErrorSuccess,
298 ConsumeEntitlement => ConsumeEntitlementResponse,
299 CreateChunk => CreateChunkResponse,
300 CreateGroup => GroupEnterEvent,
301 DetermineCommerceCurrency => ErrorSuccess,
302 EnableVoip => ErrorSuccess,
303 EnterGroup => GroupInfo,
304 ExtendTrial => ExtendTrialResponse,
305 GetAllGameInfo => GetAllGameInfoResponse,
306 GetAuthCode => AuthCode,
307 GetAuthToken => AuthToken,
308 GetBlockList => GetBlockListResponse,
309 GetBroadcastStatus => BroadcastStatus,
310 GetCatalog => GetCatalogResponse,
311 GetChunkPriority => GetChunkPriorityResponse,
312 GetConfig => GetConfigResponse,
313 GetGameInfo => GetGameInfoResponse,
314 GetGroupInfo => GroupEnterEvent,
315 GetInternetConnectedState => InternetConnectedState,
316 GetPresence => GetPresenceResponse,
317 GetPresenceVisibility => GetPresenceVisibilityResponse,
318 GetProfile => GetProfileResponse,
319 GetSetting => GetSettingResponse,
320 GetSettings => GetSettingsResponse,
321 GetStore => GetStoreResponse,
322 GetUserProfileByEmailorEaid => GetUserProfileByEmailorEaidResponse,
323 GetUtcTime => GetUtcTimeResponse,
324 GetVoipStatus => GetVoipStatusResponse,
325 GetWalletBalance => GetWalletBalanceResponse,
326 GoOnline => ErrorSuccess,
327 GrantAchievement => Achievement,
328 InvalidateLicense => ErrorSuccess,
329 InviteUsersToGroup => ErrorSuccess,
330 IsFileDownloaded => IsFileDownloadedResponse,
331 IsProgressiveInstallationAvailable => IsProgressiveInstallationAvailableResponse,
332 LeaveGroup => ErrorSuccess,
333 Logout => ErrorSuccess,
334 MuteUser => ErrorSuccess,
335 OverlayStateChanged => ErrorSuccess,
336 PostAchievementEvents => ErrorSuccess,
337 PostWincodes => ErrorSuccess,
338 QueryAchievements => AchievementSets,
339 QueryAreFriends => QueryAreFriendsResponse,
340 QueryCategories => QueryCategoriesResponse,
341 QueryChunkFiles => QueryChunkFilesResponse,
342 QueryChunkStatus => QueryChunkStatusResponse,
343 QueryContent => QueryContentResponse,
344 QueryEntitlements => QueryEntitlementsResponse,
345 QueryFriends => QueryFriendsResponse,
346 QueryGroup => QueryGroupResponse,
347 QueryImage => QueryImageResponse,
348 QueryManifest => QueryManifestResponse,
349 QueryMuteState => QueryMuteStateResponse,
350 QueryOffers => QueryOffersResponse,
351 QueryPresence => QueryPresenceResponse,
352 RefreshEntitlements => ErrorSuccess,
353 RemoveFriend => ErrorSuccess,
354 RemoveUsersFromGroup => ErrorSuccess,
355 RequestFriend => ErrorSuccess,
356 RequestLicense => RequestLicenseResponse,
357 RestartGame => ErrorSuccess,
358 SelectStore => ErrorSuccess,
359 SendChatMessage => ErrorSuccess,
360 SendGameMessage => ErrorSuccess,
361 SendGroupGameInvite => ErrorSuccess,
362 SendInvite => ErrorSuccess,
363 SetChunkPriority => ErrorSuccess,
364 SetDlcInstalledState => ErrorSuccess,
365 SetDownloaderUtilization => ErrorSuccess,
366 SetPresence => ErrorSuccess,
367 SetPresenceVisibility => ErrorSuccess,
368 SetSteamLocale => ErrorSuccess,
369 ShowIgo => ErrorSuccess,
370 ShowIgoWindow => ErrorSuccess,
371 StartDownload => ErrorSuccess,
372 StartGame => ErrorSuccess,
373 SteamAchievementErrorTelemetry => ErrorSuccess,
374 SteamPurchaseConfirmation => ErrorSuccess,
375 SubscribePresence => ErrorSuccess,
376 UnblockUser => ErrorSuccess,
377 UnsubscribePresence => ErrorSuccess,
378}