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