farmsim 0.1.0

Bindings/API schemas for all compatible Farming Simulator titles
Documentation
use serde::{
  Deserialize,
  Serialize
};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CareerSavegame {
  pub settings: Option<Settings>,
  pub map: Option<Map>,
  #[serde(rename = "introductionHelp")]
  pub introduction_help: Option<IntroductionHelp>,
  pub statistics: Option<Statistics>,
  #[serde(rename = "mapsSplitShapeFileIds")]
  pub maps_split_shape_file_ids: Option<MapsSplitShapeFileIds>,
  #[serde(rename = "slotSystem")]
  pub slot_system: Option<SlotSystem>,
  #[serde(rename = "mod", default)]
  pub mods: Vec<Mod>
}

// todo; apply game-specific feature flags to some data fields would have
//       to verify the data payload against FS22 server to double check.

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Settings {
  pub savegame_name: String,
  pub creation_date: String,
  pub map_id: String,
  pub map_title: String,
  pub save_date_formatted: String,
  pub save_date: String,
  pub initial_money: i32,
  pub initial_loan: i32,
  pub economic_difficulty: String,
  pub has_initially_owned_farmlands: bool,
  pub load_default_farm: bool,
  pub start_with_guided_tour: bool,
  pub traffic_enabled: bool,
  pub stop_and_go_braking: bool,
  pub trailer_fill_limit: bool,
  pub automatic_motor_start_enabled: bool,
  pub growth_mode: i8,
  pub planned_days_per_period: i8,
  pub fruit_destruction: bool,
  pub plowing_required_enabled: bool,
  pub stones_enabled: bool,
  pub weeds_enabled: bool,
  pub lime_required: bool,
  pub is_snow_enabled: bool,
  pub fuel_usage: i8,
  pub helper_buy_fuel: bool,
  pub helper_buy_seeds: bool,
  pub helper_buy_fertilizer: bool,
  pub helper_slurry_source: i8,
  pub helper_manure_source: i8,
  pub density_map_revision: i8,
  pub terrain_texture_revision: i8,
  pub terrain_lod_texture_revision: i8,
  pub split_shapes_revision: i8,
  pub tip_collision_revision: i8,
  pub placement_collision_revision: i8,
  pub navigation_collision_revision: i8,
  pub map_density_map_revision: i8,
  pub map_terrain_texture_revision: i8,
  pub map_terrain_lod_texture_revision: i8,
  pub map_split_shapes_revision: i8,
  pub map_tip_collision_revision: i8,
  pub map_placement_collision_revision: i8,
  pub map_navigation_collision_revision: i8,
  pub disaster_destruction_state: String,
  pub dirt_interval: i8,
  pub time_scale: f32,
  pub auto_save_interval: f32
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Map {
  #[serde(rename = "foundHelpIcons")]
  pub found_help_icons: String
}

/// Two other fields are not shown as they aren't visible in the payload.<br>
/// If you have such data, please kindly contribute.<br>
/// Remaining fields: `shownElements` and `shownHints`
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntroductionHelp {
  #[serde(rename = "@active")]
  pub active: String
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Statistics {
  pub money:     i32,
  #[serde(rename = "playTime")]
  pub play_time: f32
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapsSplitShapeFileIds {
  #[serde(rename = "@count")]
  pub count: String,
  #[serde(rename = "id", default)]
  pub ids:   Vec<SplitShapeId>
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SplitShapeId {
  #[serde(rename = "@id")]
  pub id: String
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SlotSystem {
  #[serde(rename = "@slotUsage")]
  pub slot_usage: String
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Mod {
  #[serde(rename = "@modName")]
  pub mod_name:  String,
  #[serde(rename = "@title")]
  pub title:     String,
  #[serde(rename = "@version")]
  pub version:   String,
  #[serde(rename = "@required")]
  pub required:  String,
  #[serde(rename = "@fileHash")]
  pub file_hash: String
}