use serde::*;
use std::collections::HashMap;
#[derive(Serialize, Deserialize)]
pub struct Project {
#[serde(rename = "bgColor")]
pub bg_color: String,
#[serde(rename = "defaultGridSize")]
pub default_grid_size: i64,
#[serde(rename = "defaultLevelBgColor")]
pub default_level_bg_color: String,
#[serde(rename = "defaultPivotX")]
pub default_pivot_x: f64,
#[serde(rename = "defaultPivotY")]
pub default_pivot_y: f64,
pub defs: Option<Definitions>,
#[serde(rename = "exportPng")]
pub export_png: bool,
#[serde(rename = "exportTiled")]
pub export_tiled: bool,
#[serde(rename = "externalLevels")]
pub external_levels: bool,
#[serde(rename = "jsonVersion")]
pub json_version: String,
pub levels: Vec<Level>,
#[serde(rename = "minifyJson")]
pub minify_json: bool,
#[serde(rename = "nextUid")]
pub next_uid: i64,
#[serde(rename = "worldGridHeight")]
pub world_grid_height: i64,
#[serde(rename = "worldGridWidth")]
pub world_grid_width: i64,
#[serde(rename = "worldLayout")]
pub world_layout: Option<WorldLayout>,
}
#[derive(Serialize, Deserialize)]
pub struct Definitions {
pub entities: Vec<EntityDefinition>,
pub enums: Vec<EnumDefinition>,
#[serde(rename = "externalEnums")]
pub external_enums: Vec<EnumDefinition>,
pub layers: Vec<LayerDefinition>,
pub tilesets: Vec<TilesetDefinition>,
}
#[derive(Serialize, Deserialize)]
pub struct EntityDefinition {
pub color: String,
#[serde(rename = "fieldDefs")]
pub field_defs: Vec<FieldDefinition>,
pub height: i64,
pub identifier: String,
#[serde(rename = "limitBehavior")]
pub limit_behavior: Option<LimitBehavior>,
#[serde(rename = "maxPerLevel")]
pub max_per_level: i64,
#[serde(rename = "pivotX")]
pub pivot_x: f64,
#[serde(rename = "pivotY")]
pub pivot_y: f64,
#[serde(rename = "renderMode")]
pub render_mode: Option<RenderMode>,
#[serde(rename = "showName")]
pub show_name: bool,
#[serde(rename = "tileId")]
pub tile_id: Option<i64>,
#[serde(rename = "tileRenderMode")]
pub tile_render_mode: Option<TileRenderMode>,
#[serde(rename = "tilesetId")]
pub tileset_id: Option<i64>,
pub uid: i64,
pub width: i64,
}
#[derive(Serialize, Deserialize)]
pub struct FieldDefinition {
#[serde(rename = "__type")]
pub field_definition_type: String,
#[serde(rename = "acceptFileTypes")]
pub accept_file_types: Option<Vec<String>>,
#[serde(rename = "arrayMaxLength")]
pub array_max_length: Option<i64>,
#[serde(rename = "arrayMinLength")]
pub array_min_length: Option<i64>,
#[serde(rename = "canBeNull")]
pub can_be_null: bool,
#[serde(rename = "defaultOverride")]
pub default_override: Option<serde_json::Value>,
#[serde(rename = "editorAlwaysShow")]
pub editor_always_show: bool,
#[serde(rename = "editorDisplayMode")]
pub editor_display_mode: Option<EditorDisplayMode>,
#[serde(rename = "editorDisplayPos")]
pub editor_display_pos: Option<EditorDisplayPos>,
pub identifier: String,
#[serde(rename = "isArray")]
pub is_array: bool,
pub max: Option<f64>,
pub min: Option<f64>,
pub regex: Option<String>,
#[serde(rename = "type")]
pub purple_type: Option<serde_json::Value>,
pub uid: i64,
}
#[derive(Serialize, Deserialize)]
pub struct EnumDefinition {
#[serde(rename = "externalFileChecksum")]
pub external_file_checksum: Option<String>,
#[serde(rename = "externalRelPath")]
pub external_rel_path: Option<String>,
#[serde(rename = "iconTilesetUid")]
pub icon_tileset_uid: Option<i64>,
pub identifier: String,
pub uid: i64,
pub values: Vec<EnumValueDefinition>,
}
#[derive(Serialize, Deserialize)]
pub struct EnumValueDefinition {
#[serde(rename = "__tileSrcRect")]
pub tile_src_rect: Vec<i64>,
pub id: String,
#[serde(rename = "tileId")]
pub tile_id: Option<i64>,
}
#[derive(Serialize, Deserialize)]
pub struct LayerDefinition {
#[serde(rename = "__type")]
pub layer_definition_type: String,
#[serde(rename = "autoRuleGroups")]
pub auto_rule_groups: Vec<HashMap<String, Option<serde_json::Value>>>,
#[serde(rename = "autoSourceLayerDefUid")]
pub auto_source_layer_def_uid: Option<i64>,
#[serde(rename = "autoTilesetDefUid")]
pub auto_tileset_def_uid: Option<i64>,
#[serde(rename = "displayOpacity")]
pub display_opacity: f64,
#[serde(rename = "gridSize")]
pub grid_size: i64,
pub identifier: String,
#[serde(rename = "intGridValues")]
pub int_grid_values: Vec<LdtkIntGridValueDef>,
#[serde(rename = "pxOffsetX")]
pub px_offset_x: i64,
#[serde(rename = "pxOffsetY")]
pub px_offset_y: i64,
#[serde(rename = "tilePivotX")]
pub tile_pivot_x: f64,
#[serde(rename = "tilePivotY")]
pub tile_pivot_y: f64,
#[serde(rename = "tilesetDefUid")]
pub tileset_def_uid: Option<i64>,
#[serde(rename = "type")]
pub purple_type: Option<Type>,
pub uid: i64,
}
#[derive(Serialize, Deserialize)]
pub struct LdtkIntGridValueDef {
pub color: String,
pub identifier: Option<String>,
}
#[derive(Serialize, Deserialize)]
pub struct TilesetDefinition {
#[serde(rename = "cachedPixelData")]
pub cached_pixel_data: Option<HashMap<String, Option<serde_json::Value>>>,
pub identifier: String,
pub padding: i64,
#[serde(rename = "pxHei")]
pub px_hei: i64,
#[serde(rename = "pxWid")]
pub px_wid: i64,
#[serde(rename = "relPath")]
pub rel_path: String,
#[serde(rename = "savedSelections")]
pub saved_selections: Vec<HashMap<String, Option<serde_json::Value>>>,
pub spacing: i64,
#[serde(rename = "tileGridSize")]
pub tile_grid_size: i64,
pub uid: i64,
}
#[derive(Serialize, Deserialize)]
pub struct Level {
#[serde(rename = "__bgColor")]
pub bg_color: String,
#[serde(rename = "__bgPos")]
pub bg_pos: Option<LdtkLevelBgPosInfos>,
#[serde(rename = "__neighbours")]
pub neighbours: Vec<LdtkNeighbourLevel>,
#[serde(rename = "bgColor")]
pub level_bg_color: Option<String>,
#[serde(rename = "bgPivotX")]
pub bg_pivot_x: f64,
#[serde(rename = "bgPivotY")]
pub bg_pivot_y: f64,
#[serde(rename = "bgPos")]
pub level_bg_pos: Option<BgPos>,
#[serde(rename = "bgRelPath")]
pub bg_rel_path: Option<String>,
#[serde(rename = "externalRelPath")]
pub external_rel_path: Option<String>,
pub identifier: String,
#[serde(rename = "layerInstances")]
pub layer_instances: Option<Vec<LayerInstance>>,
#[serde(rename = "pxHei")]
pub px_hei: i64,
#[serde(rename = "pxWid")]
pub px_wid: i64,
pub uid: i64,
#[serde(rename = "worldX")]
pub world_x: i64,
#[serde(rename = "worldY")]
pub world_y: i64,
}
#[derive(Serialize, Deserialize)]
pub struct LdtkLevelBgPosInfos {
pub scale: Vec<f64>,
#[serde(rename = "subRect")]
pub sub_rect: Vec<f64>,
#[serde(rename = "topLeftPx")]
pub top_left_px: Vec<i64>,
}
#[derive(Serialize, Deserialize)]
pub struct LayerInstance {
#[serde(rename = "__cHei")]
pub c_hei: i64,
#[serde(rename = "__cWid")]
pub c_wid: i64,
#[serde(rename = "__gridSize")]
pub grid_size: i64,
#[serde(rename = "__identifier")]
pub identifier: String,
#[serde(rename = "__opacity")]
pub opacity: f64,
#[serde(rename = "__pxTotalOffsetX")]
pub px_total_offset_x: i64,
#[serde(rename = "__pxTotalOffsetY")]
pub px_total_offset_y: i64,
#[serde(rename = "__tilesetDefUid")]
pub tileset_def_uid: Option<i64>,
#[serde(rename = "__tilesetRelPath")]
pub tileset_rel_path: Option<String>,
#[serde(rename = "__type")]
pub layer_instance_type: String,
#[serde(rename = "autoLayerTiles")]
pub auto_layer_tiles: Vec<TileInstance>,
#[serde(rename = "entityInstances")]
pub entity_instances: Vec<EntityInstance>,
#[serde(rename = "gridTiles")]
pub grid_tiles: Vec<TileInstance>,
#[serde(rename = "intGrid")]
pub int_grid: Vec<LdtkIntGridValueInstance>,
#[serde(rename = "layerDefUid")]
pub layer_def_uid: i64,
#[serde(rename = "levelId")]
pub level_id: i64,
#[serde(rename = "pxOffsetX")]
pub px_offset_x: i64,
#[serde(rename = "pxOffsetY")]
pub px_offset_y: i64,
pub seed: i64,
}
#[derive(Serialize, Deserialize)]
pub struct TileInstance {
pub d: Vec<i64>,
pub f: i64,
pub px: Vec<i64>,
pub src: Vec<i64>,
pub t: i64,
}
#[derive(Serialize, Deserialize)]
pub struct EntityInstance {
#[serde(rename = "__grid")]
pub grid: Vec<i64>,
#[serde(rename = "__identifier")]
pub identifier: String,
#[serde(rename = "__pivot")]
pub pivot: Vec<f64>,
#[serde(rename = "__tile")]
pub tile: Option<LdtkEntityInstanceTile>,
#[serde(rename = "defUid")]
pub def_uid: i64,
#[serde(rename = "fieldInstances")]
pub field_instances: Vec<FieldInstance>,
pub px: Vec<i64>,
}
#[derive(Serialize, Deserialize)]
pub struct FieldInstance {
#[serde(rename = "__identifier")]
pub identifier: String,
#[serde(rename = "__type")]
pub field_instance_type: String,
#[serde(rename = "__value")]
pub value: Option<serde_json::Value>,
#[serde(rename = "defUid")]
pub def_uid: i64,
#[serde(rename = "realEditorValues")]
pub real_editor_values: Vec<Option<serde_json::Value>>,
}
#[derive(Serialize, Deserialize)]
pub struct LdtkEntityInstanceTile {
#[serde(rename = "srcRect")]
pub src_rect: Vec<i64>,
#[serde(rename = "tilesetUid")]
pub tileset_uid: i64,
}
#[derive(Serialize, Deserialize)]
pub struct LdtkIntGridValueInstance {
#[serde(rename = "coordId")]
pub coord_id: i64,
pub v: i64,
}
#[derive(Serialize, Deserialize)]
pub struct LdtkNeighbourLevel {
pub dir: String,
#[serde(rename = "levelUid")]
pub level_uid: i64,
}
#[derive(Serialize, Deserialize)]
pub enum EditorDisplayMode {
EntityTile,
Hidden,
NameAndValue,
PointPath,
PointStar,
RadiusGrid,
RadiusPx,
ValueOnly,
}
#[derive(Serialize, Deserialize)]
pub enum EditorDisplayPos {
Above,
Beneath,
Center,
}
#[derive(Serialize, Deserialize)]
pub enum LimitBehavior {
DiscardOldOnes,
MoveLastOne,
PreventAdding,
}
#[derive(Serialize, Deserialize)]
pub enum RenderMode {
Cross,
Ellipse,
Rectangle,
Tile,
}
#[derive(Serialize, Deserialize)]
pub enum TileRenderMode {
Crop,
Stretch,
}
#[derive(Serialize, Deserialize)]
pub enum Type {
AutoLayer,
Entities,
IntGrid,
Tiles,
}
#[derive(Serialize, Deserialize)]
pub enum BgPos {
Contain,
Cover,
CoverDirty,
Unscaled,
}
#[derive(Serialize, Deserialize)]
pub enum WorldLayout {
Free,
GridVania,
LinearHorizontal,
LinearVertical,
}