An unofficial collection of APIs used in FreeJam games and mods
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

307 lines
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)