An unofficial collection of APIs used in FreeJam games and mods
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

307 linhas
8.7KB

  1. use serde::{Deserialize, Serialize};
  2. pub mod order {
  3. pub const ASCENDING: &str = "ascending";
  4. pub const DESCENDING: &str = "descending";
  5. pub(super) fn default() -> &'static str {
  6. ASCENDING
  7. }
  8. }
  9. pub mod sort {
  10. pub const CPU_POWER: &str = "cpuPower";
  11. pub const FIRE_POWER: &str = "firePower";
  12. pub const ENGINE_POWER: &str = "enginePower";
  13. pub const PRICE: &str = "price";
  14. pub const DATE: &str = "date";
  15. pub const CLUSTER_COUNT: &str = "clusterCount";
  16. pub const VIEWS: &str = "views";
  17. pub const MOST_PURCHASED: &str = "mostPurchased";
  18. pub const DEFAULT: &str = "default";
  19. pub(super) fn default() -> &'static str {
  20. DEFAULT
  21. }
  22. }
  23. pub mod moderation {
  24. pub const NO_FILTER: &str = "none";
  25. pub const NEEDS_MODERATION: &str = "needsModeration";
  26. pub const MODERATED: &str = "moderatedOnly";
  27. pub(super) fn default() -> &'static str {
  28. NO_FILTER
  29. }
  30. }
  31. #[derive(Deserialize, Serialize, Debug, Clone)]
  32. pub struct ErrorPayload {
  33. #[serde(rename = "error")]
  34. pub error: isize,
  35. #[serde(rename = "errorMessage")]
  36. pub error_message: String,
  37. }
  38. // search endpoint
  39. #[derive(Deserialize, Serialize, Clone)]
  40. pub struct SearchPayload {
  41. #[serde(rename = "text")]
  42. pub text: Option<String>,
  43. #[serde(rename = "baseCpuMinimum")]
  44. pub base_minimum_cpu: Option<isize>,
  45. #[serde(rename = "baseCpuMaximum")]
  46. pub base_maximum_cpu: Option<isize>,
  47. #[serde(rename = "weaponCpuMinimum")]
  48. pub weapon_minimum_cpu: Option<isize>,
  49. #[serde(rename = "weaponCpuMaximum")]
  50. pub weapon_maximum_cpu: Option<isize>,
  51. #[serde(rename = "cosmeticCpuMinimum")]
  52. pub cosmetic_minimum_cpu: Option<isize>,
  53. #[serde(rename = "cosmeticCpuMaximum")]
  54. pub cosmetic_maximum_cpu: Option<isize>,
  55. #[serde(rename = "clusterMinimum")]
  56. pub cluster_minimum: Option<isize>,
  57. #[serde(rename = "clusterMaximum")]
  58. pub cluster_maximum: Option<isize>,
  59. #[serde(rename = "dateMinimum")]
  60. pub date_minimum: Option<String>,
  61. #[serde(rename = "dateMaximum")]
  62. pub date_maximum: Option<String>,
  63. #[serde(rename = "purchasedOnly")]
  64. pub purchased_only: Option<bool>,
  65. #[serde(rename = "creatorId")]
  66. pub creator_id: Option<String>, // GUID
  67. #[serde(rename = "page")]
  68. pub page: Option<isize>,
  69. #[serde(rename = "count")]
  70. pub count: Option<isize>,
  71. #[serde(rename = "sortBy", default="sort::default")]
  72. pub sort_by: &'static str,
  73. #[serde(rename = "orderBy", default="order::default")]
  74. pub order_by: &'static str,
  75. #[serde(rename = "modFilter", default="moderation::default")]
  76. pub moderation_filter: &'static str,
  77. }
  78. impl Default for SearchPayload {
  79. fn default() -> Self {
  80. Self {
  81. text: None,
  82. base_minimum_cpu: None,
  83. base_maximum_cpu: None,
  84. weapon_minimum_cpu: None,
  85. weapon_maximum_cpu: None,
  86. cosmetic_minimum_cpu: None,
  87. cosmetic_maximum_cpu: None,
  88. cluster_minimum: None,
  89. cluster_maximum: None,
  90. date_minimum: None,
  91. date_maximum: None,
  92. purchased_only: None,
  93. creator_id: None,
  94. page: None,
  95. count: None,
  96. sort_by: sort::DEFAULT,
  97. order_by: order::ASCENDING,
  98. moderation_filter: moderation::NO_FILTER,
  99. }
  100. }
  101. }
  102. #[derive(Deserialize, Serialize, Clone, Debug)]
  103. pub struct SearchResponse {
  104. #[serde(rename = "results")]
  105. pub results: Vec<SearchResponseItem>,
  106. }
  107. #[derive(Deserialize, Serialize, Clone, Debug)]
  108. pub struct SearchResponseItem {
  109. #[serde(rename = "robot")]
  110. pub robot: RobotInfo,
  111. #[serde(rename = "prices")]
  112. pub prices: Vec<RobotPrice>,
  113. #[serde(rename = "purchased")]
  114. pub purchased: bool,
  115. }
  116. #[derive(Deserialize, Serialize, Clone, Debug)]
  117. pub struct RobotInfo {
  118. #[serde(rename = "id")]
  119. pub id: String, // GUID
  120. #[serde(rename = "name")]
  121. pub name: String,
  122. #[serde(rename = "creatorId")]
  123. pub creator_id: String, // GUID
  124. #[serde(rename = "creatorName")]
  125. pub creator_name: String,
  126. #[serde(rename = "created")]
  127. pub created: String, // date
  128. #[serde(rename = "image")]
  129. pub image: Option<String>, // url
  130. #[serde(rename = "baseCpu")]
  131. pub base_cpu: isize,
  132. #[serde(rename = "weaponCpu")]
  133. pub weapon_cpu: isize,
  134. #[serde(rename = "cosmeticCpu")]
  135. pub cosmetic_cpu: isize,
  136. #[serde(rename = "clusterCount")]
  137. pub cluster_count: isize,
  138. #[serde(rename = "blockCounts")]
  139. pub block_counts: std::collections::HashMap<usize, usize>,
  140. #[serde(rename = "materialsUsed")]
  141. pub materials_used: std::collections::HashSet<isize>,
  142. #[serde(rename = "minimumOffsetX")]
  143. pub minimum_offset_x: f64,
  144. #[serde(rename = "minimumOffsetY")]
  145. pub minimum_offset_y: f64,
  146. #[serde(rename = "minimumOffsetZ")]
  147. pub minimum_offset_z: f64,
  148. #[serde(rename = "maximumOffsetX")]
  149. pub maximum_offset_x: f64,
  150. #[serde(rename = "maximumOffsetY")]
  151. pub maximum_offset_y: f64,
  152. #[serde(rename = "maximumOffsetZ")]
  153. pub maximum_offset_z: f64,
  154. }
  155. impl std::string::ToString for RobotInfo {
  156. fn to_string(&self) -> String {
  157. format!("{} ({}) by {} ({})", &self.name, &self.id, &self.creator_name, &self.creator_id)
  158. }
  159. }
  160. #[derive(Deserialize, Serialize, Clone, Debug)]
  161. pub struct RobotPrice {
  162. #[serde(rename = "currency")]
  163. pub currency: isize,
  164. #[serde(rename = "amount")]
  165. pub amount: isize,
  166. }
  167. // create robot endpoint
  168. #[derive(Deserialize, Serialize, Clone, Debug)]
  169. pub struct CreateRobotPayload {
  170. #[serde(rename = "name")]
  171. pub name: String,
  172. #[serde(rename = "data")]
  173. pub data: String, // base64
  174. #[serde(rename = "image")]
  175. pub image: String, // base64??
  176. #[serde(rename = "baseCpu")]
  177. pub base_cpu: isize,
  178. #[serde(rename = "weaponCpu")]
  179. pub weapon_cpu: isize,
  180. #[serde(rename = "cosmeticCpu")]
  181. pub cosmetic_cpu: isize,
  182. #[serde(rename = "clusterCount")]
  183. pub cluster_count: isize,
  184. #[serde(rename = "blockCounts")]
  185. pub block_counts: std::collections::HashMap<usize, usize>,
  186. #[serde(rename = "materialsUsed")]
  187. pub materials_used: std::collections::HashSet<isize>,
  188. #[serde(rename = "minimumOffsetX")]
  189. pub minimum_offset_x: f64,
  190. #[serde(rename = "minimumOffsetY")]
  191. pub minimum_offset_y: f64,
  192. #[serde(rename = "minimumOffsetZ")]
  193. pub minimum_offset_z: f64,
  194. #[serde(rename = "maximumOffsetX")]
  195. pub maximum_offset_x: f64,
  196. #[serde(rename = "maximumOffsetY")]
  197. pub maximum_offset_y: f64,
  198. #[serde(rename = "maximumOffsetZ")]
  199. pub maximum_offset_z: f64,
  200. }
  201. #[derive(Deserialize, Serialize, Clone, Debug)]
  202. pub struct CreateRobotResponse {
  203. #[serde(rename = "header")]
  204. pub header: RobotInfo,
  205. }
  206. // factory info endpoint
  207. // (no payload -- this is a GET request)
  208. #[derive(Deserialize, Serialize, Clone, Debug)]
  209. pub struct FactoryInfoResponse {
  210. #[serde(rename = "robotCount")]
  211. pub robot_count: isize,
  212. #[serde(rename = "robotLimit")]
  213. pub robot_limit: isize,
  214. #[serde(rename = "publishedRobotCount")]
  215. pub published_robot_count: isize,
  216. #[serde(rename = "publishedRobotLimit")]
  217. pub published_robot_limit: isize,
  218. }
  219. // publish robot endpoint
  220. #[derive(Deserialize, Serialize, Clone, Debug)]
  221. pub struct PublishRobotPayload {
  222. #[serde(rename = "name")]
  223. pub name: String,
  224. #[serde(rename = "description")]
  225. pub description: String,
  226. #[serde(rename = "techPoints")]
  227. pub techpoints: isize,
  228. #[serde(rename = "bloxCoin")]
  229. pub bloxcoin: isize,
  230. }
  231. #[derive(Deserialize, Serialize, Clone, Debug)]
  232. pub struct PublishRobotResponse {
  233. #[serde(rename = "header")]
  234. pub header: RobotInfo,
  235. #[serde(rename = "data")]
  236. pub data: String, // base64
  237. }
  238. // get my robots endpoint
  239. // (no payload -- this is a GET request)
  240. #[derive(Deserialize, Serialize, Clone, Debug)]
  241. pub struct MyRobotsResponse {
  242. #[serde(rename = "vehicles")]
  243. pub vehicles: Vec<RobotInfo>,
  244. }
  245. // get robot endpoint
  246. // (no payload -- this is a GET request)
  247. #[derive(Deserialize, Serialize, Clone, Debug)]
  248. pub struct GetRobotResponse {
  249. #[serde(rename = "header")]
  250. pub header: RobotInfo,
  251. #[serde(rename = "data")]
  252. pub data: String, // base64
  253. #[serde(rename = "description")]
  254. pub description: String,
  255. #[serde(rename = "created")]
  256. pub created: String, // date
  257. }
  258. // moderate robot endpoint
  259. #[derive(Deserialize, Serialize, Clone, Debug)]
  260. pub struct ModerateRobotPayload {
  261. #[serde(rename = "approve")]
  262. pub approve: bool,
  263. #[serde(rename = "reason")]
  264. pub reason: String,
  265. }
  266. // (no response)
  267. // report robot endpoint
  268. #[derive(Deserialize, Serialize, Clone, Debug)]
  269. pub struct ReportRobotPayload {
  270. #[serde(rename = "reason")]
  271. pub reason: String,
  272. }
  273. // (no response)