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 friends;
12pub mod game;
13pub mod groups;
14pub mod invites;
15pub mod overlay;
16pub mod presence;
17pub mod profile;
18pub mod system;
19pub mod user;
20pub mod voip;
21
22use crate::protocol::achievements::*;
23use crate::protocol::auth::*;
24use crate::protocol::broadcast::*;
25use crate::protocol::chat::*;
26use crate::protocol::chunk::*;
27use crate::protocol::commerce::*;
28use crate::protocol::common::*;
29use crate::protocol::entitlements::*;
30use crate::protocol::friends::*;
31use crate::protocol::game::*;
32use crate::protocol::groups::*;
33use crate::protocol::invites::*;
34use crate::protocol::overlay::*;
35use crate::protocol::presence::*;
36use crate::protocol::profile::*;
37use crate::protocol::system::*;
38use crate::protocol::user::*;
39use crate::protocol::voip::*;
40use crate::request_response;
41
42// Model definitions
43
44#[derive(Debug, Serialize, Deserialize)]
45#[serde(rename = "LSX")]
46pub struct Lsx {
47    #[serde(rename = "$value")]
48    pub message: Message,
49}
50
51#[derive(Debug, Serialize, Deserialize)]
52#[serde(rename_all = "PascalCase")]
53pub enum Message {
54    Request(Request),
55    Response(Response),
56    Event(Event),
57}
58
59#[derive(Debug, Serialize, Deserialize)]
60pub struct Request {
61    #[serde(rename = "@id")]
62    pub id: String,
63    #[serde(rename = "@recipient", default)]
64    pub recipient: String,
65    #[serde(rename = "$value")]
66    pub body: RequestBody,
67}
68
69#[derive(Debug, Serialize, Deserialize)]
70pub struct Response {
71    #[serde(rename = "@id")]
72    pub id: String,
73    #[serde(rename = "@sender", default)]
74    pub sender: String,
75    #[serde(rename = "$value")]
76    pub body: ResponseBody,
77}
78
79#[derive(Debug, Serialize, Deserialize)]
80pub struct Event {
81    #[serde(rename = "@sender", default)]
82    pub sender: String,
83    #[serde(rename = "$value")]
84    pub body: EventBody,
85}
86
87// Message definitions
88
89#[derive(Debug, Serialize, Deserialize)]
90pub enum RequestBody {
91    AcceptFriendInvite(AcceptFriendInvite),
92    AcceptInvite(AcceptInvite),
93    AreChunksInstalled(AreChunksInstalled),
94    BlockUser(BlockUser),
95    BroadcastStart(BroadcastStart),
96    BroadcastStop(BroadcastStop),
97    ChallengeResponse(ChallengeResponse),
98    Checkout(Checkout),
99    ConsumeEntitlement(ConsumeEntitlement),
100    CreateChunk(CreateChunk),
101    CreateGroup(CreateGroup),
102    EnableVoip(EnableVoip),
103    EnterGroup(EnterGroup),
104    ExtendTrial(ExtendTrial),
105    GetAuthCode(GetAuthCode),
106    GetAllGameInfo(GetAllGameInfo),
107    GetBlockList(GetBlockList),
108    GetChunkPriority(GetChunkPriority),
109    GetConfig(GetConfig),
110    GetGroupInfo(GetGroupInfo),
111    GetInternetConnectedState(GetInternetConnectedState),
112    GetPresence(GetPresence),
113    GetPresenceVisibility(GetPresenceVisibility),
114    GetProfile(GetProfile),
115    GetSettings(GetSettings),
116    GetUserProfileByEmailorEaid(GetUserProfileByEmailorEaid),
117    GetUtcTime(GetUtcTime),
118    GetVoipStatus(GetVoipStatus),
119    GetWalletBalance(GetWalletBalance),
120    GoOnline(GoOnline),
121    GrantAchievement(GrantAchievement),
122    InviteUsersToGroup(InviteUsersToGroup),
123    IsFileDownloaded(IsFileDownloaded),
124    IsProgressiveInstallationAvailable(IsProgressiveInstallationAvailable),
125    LeaveGroup(LeaveGroup),
126    MuteUser(MuteUser),
127    PostAchievementEvents(PostAchievementEvents),
128    QueryAchievements(QueryAchievements),
129    QueryAreFriends(QueryAreFriends),
130    QueryChunkFiles(QueryChunkFiles),
131    QueryChunkStatus(QueryChunkStatus),
132    QueryContent(QueryContent),
133    QueryEntitlements(QueryEntitlements),
134    QueryFriends(QueryFriends),
135    QueryGroup(QueryGroup),
136    QueryImage(QueryImage),
137    QueryManifest(QueryManifest),
138    QueryMuteState(QueryMuteState),
139    QueryOffers(QueryOffers),
140    QueryPresence(QueryPresence),
141    RemoveFriend(RemoveFriend),
142    RemoveUsersFromGroup(RemoveUsersFromGroup),
143    RequestFriend(RequestFriend),
144    RestartGame(RestartGame),
145    SendChatMessage(SendChatMessage),
146    SendGameMessage(SendGameMessage),
147    SendGroupGameInvite(SendGroupGameInvite),
148    SendInvite(SendInvite),
149    SetChunkPriority(SetChunkPriority),
150    SetDownloaderUtilization(SetDownloaderUtilization),
151    SetPresence(SetPresence),
152    SetPresenceVisibility(SetPresenceVisibility),
153    ShowIgo(ShowIgo),
154    ShowIgoWindow(ShowIgoWindow),
155    StartGame(StartGame),
156    UnblockUser(UnblockUser),
157}
158
159#[derive(Debug, Serialize, Deserialize)]
160pub enum ResponseBody {
161    Achievement(Achievement),
162    AchievementSets(AchievementSets),
163    AreChunksInstalledResponse(AreChunksInstalledResponse),
164    AuthCode(AuthCode),
165    ChallengeAccepted(ChallengeAccepted),
166    ConsumeEntitlementResponse(ConsumeEntitlementResponse),
167    CreateChunkResponse(CreateChunkResponse),
168    ErrorSuccess(ErrorSuccess),
169    ExtendTrialResponse(ExtendTrialResponse),
170    GetAllGameInfoResponse(GetAllGameInfoResponse),
171    GetBlockListResponse(GetBlockListResponse),
172    GetChunkPriorityResponse(GetChunkPriorityResponse),
173    GetConfigResponse(GetConfigResponse),
174    GetPresenceResponse(GetPresenceResponse),
175    GetPresenceVisibilityResponse(GetPresenceVisibilityResponse),
176    GetProfileResponse(GetProfileResponse),
177    GetSettingsResponse(GetSettingsResponse),
178    GetUtcTimeResponse(GetUtcTimeResponse),
179    GetUserProfileByEmailorEaidResponse(GetUserProfileByEmailorEaidResponse),
180    GetVoipStatusResponse(GetVoipStatusResponse),
181    GetWalletBalanceResponse(GetWalletBalanceResponse),
182    GroupInfo(GroupInfo),
183    InternetConnectedState(InternetConnectedState),
184    IsFileDownloadedResponse(IsFileDownloadedResponse),
185    IsProgressiveInstallationAvailableResponse(IsProgressiveInstallationAvailableResponse),
186    QueryAreFriendsResponse(QueryAreFriendsResponse),
187    QueryChunkFilesResponse(QueryChunkFilesResponse),
188    QueryChunkStatusResponse(QueryChunkStatusResponse),
189    QueryContentResponse(QueryContentResponse),
190    QueryEntitlementsResponse(QueryEntitlementsResponse),
191    QueryFriendsResponse(QueryFriendsResponse),
192    QueryGroupResponse(QueryGroupResponse),
193    QueryImageResponse(QueryImageResponse),
194    QueryManifestResponse(QueryManifestResponse),
195    QueryMuteStateResponse(QueryMuteStateResponse),
196    QueryOffersResponse(QueryOffersResponse),
197    QueryPresenceResponse(QueryPresenceResponse),
198}
199
200#[derive(Debug, Serialize, Deserialize)]
201pub enum EventBody {
202    AchievementSets(AchievementSets),
203    BlockListUpdated(BlockListUpdated),
204    BroadcastEvent(BroadcastEvent),
205    Challenge(Challenge),
206    ChatMessageEvent(ChatMessageEvent),
207    ChatStateUpdateEvent(ChatStateUpdateEvent),
208    ChunkStatus(ChunkStatus),
209    CoreContentUpdated(CoreContentUpdated),
210    CurrentUserPresenceEvent(CurrentUserPresenceEvent),
211    GameMessageEvent(GameMessageEvent),
212    GetPresenceResponse(GetPresenceResponse),
213    GroupEnterEvent(GroupEnterEvent),
214    GroupEvent(GroupEvent),
215    GroupInviteEvent(GroupInviteEvent),
216    GroupLeaveEvent(GroupLeaveEvent),
217    IgoEvent(IgoEvent),
218    IgoUnavailable(IgoUnavailable),
219    Login(Login),
220    MinimizeRequest(MinimizeRequest),
221    MultiplayerInvite(MultiplayerInvite),
222    MultiplayerInvitePending(MultiplayerInvitePending),
223    OnlineStatusEvent(OnlineStatusEvent),
224    PresenceVisibilityEvent(PresenceVisibilityEvent),
225    ProfileEvent(ProfileEvent),
226    PurchaseEvent(PurchaseEvent),
227    QueryEntitlementsResponse(QueryEntitlementsResponse),
228    QueryFriendsResponse(QueryFriendsResponse),
229    RestoreRequest(RestoreRequest),
230    UserInvitedEvent(UserInvitedEvent),
231    VoipStatusEvent(VoipStatusEvent),
232}
233
234// Request -> Response mapping
235
236pub trait RequestResponse {
237    type Response;
238    fn extract_response(body: ResponseBody) -> Result<Self::Response, crate::sdk::SdkError>;
239}
240
241request_response! {
242    AcceptFriendInvite => ErrorSuccess,
243    AcceptInvite => ErrorSuccess,
244    AreChunksInstalled => AreChunksInstalledResponse,
245    BlockUser => ErrorSuccess,
246    BroadcastStart => ErrorSuccess,
247    BroadcastStop => ErrorSuccess,
248    ChallengeResponse => ChallengeAccepted,
249    Checkout => ErrorSuccess,
250    ConsumeEntitlement => ConsumeEntitlementResponse,
251    CreateChunk => CreateChunkResponse,
252    CreateGroup => GroupInfo,
253    EnableVoip => ErrorSuccess,
254    EnterGroup => GroupInfo,
255    ExtendTrial => ExtendTrialResponse,
256    GetAuthCode => AuthCode,
257    GetAllGameInfo => GetAllGameInfoResponse,
258    GetBlockList => GetBlockListResponse,
259    GetChunkPriority => GetChunkPriorityResponse,
260    GetConfig => GetConfigResponse,
261    GetGroupInfo => GroupInfo,
262    GetInternetConnectedState => InternetConnectedState,
263    GetPresence => GetPresenceResponse,
264    GetPresenceVisibility => GetPresenceVisibilityResponse,
265    GetProfile => GetProfileResponse,
266    GetSettings => GetSettingsResponse,
267    GetUserProfileByEmailorEaid => GetUserProfileByEmailorEaidResponse,
268    GetUtcTime => GetUtcTimeResponse,
269    GetVoipStatus => GetVoipStatusResponse,
270    GetWalletBalance => GetWalletBalanceResponse,
271    GoOnline => ErrorSuccess,
272    GrantAchievement => Achievement,
273    InviteUsersToGroup => ErrorSuccess,
274    IsFileDownloaded => IsFileDownloadedResponse,
275    IsProgressiveInstallationAvailable => IsProgressiveInstallationAvailableResponse,
276    LeaveGroup => ErrorSuccess,
277    MuteUser => ErrorSuccess,
278    PostAchievementEvents => ErrorSuccess,
279    QueryAchievements => AchievementSets,
280    QueryAreFriends => QueryAreFriendsResponse,
281    QueryChunkFiles => QueryChunkFilesResponse,
282    QueryChunkStatus => QueryChunkStatusResponse,
283    QueryContent => QueryContentResponse,
284    QueryEntitlements => QueryEntitlementsResponse,
285    QueryFriends => QueryFriendsResponse,
286    QueryGroup => QueryGroupResponse,
287    QueryImage => QueryImageResponse,
288    QueryManifest => QueryManifestResponse,
289    QueryMuteState => QueryMuteStateResponse,
290    QueryOffers => QueryOffersResponse,
291    QueryPresence => QueryPresenceResponse,
292    RemoveFriend => ErrorSuccess,
293    RemoveUsersFromGroup => ErrorSuccess,
294    RequestFriend => ErrorSuccess,
295    RestartGame => ErrorSuccess,
296    SendChatMessage => ErrorSuccess,
297    SendGameMessage => ErrorSuccess,
298    SendGroupGameInvite => ErrorSuccess,
299    SendInvite => ErrorSuccess,
300    SetChunkPriority => ErrorSuccess,
301    SetDownloaderUtilization => ErrorSuccess,
302    SetPresence => ErrorSuccess,
303    SetPresenceVisibility => ErrorSuccess,
304    ShowIgo => ErrorSuccess,
305    ShowIgoWindow => ErrorSuccess,
306    StartGame => ErrorSuccess,
307    UnblockUser => ErrorSuccess,
308}