Skip to main content

origin_sdk/protocol/
mod.rs

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// Model definitions
49
50#[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// Message definitions
94
95#[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// Request -> Response mapping
279
280#[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}