From 3819ed1b7dda1ad2f76a0016145e7db9fc7cba6a Mon Sep 17 00:00:00 2001 From: pyrite Date: Thu, 10 Jul 2025 17:53:44 +0200 Subject: [PATCH 1/2] feat(codegen): properly transform all property names which collide with keywords --- Cargo.lock | 2 +- torn-api-codegen/Cargo.toml | 2 +- torn-api-codegen/src/model/object.rs | 53 ++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4fb4ef..182d283 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2316,7 +2316,7 @@ dependencies = [ [[package]] name = "torn-api-codegen" -version = "0.7.0" +version = "0.7.1" dependencies = [ "heck", "indexmap", diff --git a/torn-api-codegen/Cargo.toml b/torn-api-codegen/Cargo.toml index ad3162d..8f3c0fd 100644 --- a/torn-api-codegen/Cargo.toml +++ b/torn-api-codegen/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "torn-api-codegen" authors = ["Pyrit [2111649]"] -version = "0.7.0" +version = "0.7.1" edition = "2021" description = "Contains the v2 torn API model descriptions and codegen for the bindings" license-file = { workspace = true } diff --git a/torn-api-codegen/src/model/object.rs b/torn-api-codegen/src/model/object.rs index b7f454f..5a69f29 100644 --- a/torn-api-codegen/src/model/object.rs +++ b/torn-api-codegen/src/model/object.rs @@ -273,7 +273,60 @@ impl Property { let name = &self.name; let (name, serde_attr) = match name.as_str() { + // https://doc.rust-lang.org/reference/keywords.html#r-lex.keywords + "as" => (format_ident!("r#as"), None), + "break" => (format_ident!("r#break"), None), + "const" => (format_ident!("r#const"), None), + "continue" => (format_ident!("r#continue"), None), + "crate" => (format_ident!("r#crate"), None), + "else" => (format_ident!("r#else"), None), + "enum" => (format_ident!("r#enum"), None), + "extern" => (format_ident!("r#extern"), None), + "false" => (format_ident!("r#false"), None), + "fn" => (format_ident!("r#fn"), None), + "for" => (format_ident!("r#for"), None), + "if" => (format_ident!("r#if"), None), + "impl" => (format_ident!("r#impl"), None), + "in" => (format_ident!("r#in"), None), + "let" => (format_ident!("r#let"), None), + "loop" => (format_ident!("r#loop"), None), + "match" => (format_ident!("r#match"), None), + "mod" => (format_ident!("r#mod"), None), + "move" => (format_ident!("r#move"), None), + "mut" => (format_ident!("r#mut"), None), + "pub" => (format_ident!("r#pub"), None), + "ref" => (format_ident!("r#ref"), None), + "return" => (format_ident!("r#return"), None), + "self" => (format_ident!("r#self"), None), + "Self" => (format_ident!("r#Self"), None), + "static" => (format_ident!("r#static"), None), + "struct" => (format_ident!("r#struct"), None), + "super" => (format_ident!("r#super"), None), + "trait" => (format_ident!("r#trait"), None), + "true" => (format_ident!("r#true"), None), "type" => (format_ident!("r#type"), None), + "unsafe" => (format_ident!("r#unsafe"), None), + "use" => (format_ident!("r#use"), None), + "where" => (format_ident!("r#where"), None), + "while" => (format_ident!("r#while"), None), + "async" => (format_ident!("r#async"), None), + "await" => (format_ident!("r#await"), None), + "dyn" => (format_ident!("r#dyn"), None), + "abstract" => (format_ident!("r#abstract"), None), + "become" => (format_ident!("r#become"), None), + "box" => (format_ident!("r#box"), None), + "do" => (format_ident!("r#do"), None), + "final" => (format_ident!("r#final"), None), + "macro" => (format_ident!("r#macro"), None), + "override" => (format_ident!("r#override"), None), + "priv" => (format_ident!("r#priv"), None), + "typeof" => (format_ident!("r#typeof"), None), + "unsized" => (format_ident!("r#unsized"), None), + "virtual" => (format_ident!("r#virtual"), None), + "yield" => (format_ident!("r#yield"), None), + "try" => (format_ident!("r#try"), None), + "gen" => (format_ident!("r#gen"), None), + name if name != self.field_name => ( format_ident!("{}", self.field_name), Some(quote! { #[serde(rename = #name)]}), From 3e585d75599cb7b8f6b5b43bd3c156d3dbb206a7 Mon Sep 17 00:00:00 2001 From: pyrite Date: Thu, 10 Jul 2025 17:54:54 +0200 Subject: [PATCH 2/2] chore(torn-api): update scheme --- Cargo.lock | 2 +- torn-api/Cargo.toml | 2 +- torn-api/openapi.json | 364 ++++++++++++++++++++++++++++++++---------- 3 files changed, 286 insertions(+), 82 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 182d283..b9428c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2294,7 +2294,7 @@ dependencies = [ [[package]] name = "torn-api" -version = "1.7.0" +version = "1.7.1" dependencies = [ "bon", "bytes", diff --git a/torn-api/Cargo.toml b/torn-api/Cargo.toml index ee47443..61870c5 100644 --- a/torn-api/Cargo.toml +++ b/torn-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "torn-api" -version = "1.7.0" +version = "1.7.1" edition = "2021" description = "Auto-generated bindings for the v2 torn api" license-file = { workspace = true } diff --git a/torn-api/openapi.json b/torn-api/openapi.json index 6fb982b..c2c9a3d 100644 --- a/torn-api/openapi.json +++ b/torn-api/openapi.json @@ -3,7 +3,7 @@ "info": { "title": "Torn API", "description": "\n * The development of Torn's API v2 is still ongoing.\n * If selections remain unaltered, they will default to the API v1 version.\n * Unlike API v1, API v2 accepts both selections and IDs as path and query parameters.\n * If any discrepancies or errors are found, please submit a [bug report](https://www.torn.com/forums.php#/p=forums&f=19&b=0&a=0) on the Torn Forums.\n * In case you're using bots to check for changes on openapi.json file, make sure to specificy a custom user-agent header - CloudFlare sometimes prevents requests from default user-agents.", - "version": "1.11.4" + "version": "2.0.2" }, "servers": [ { @@ -2953,7 +2953,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FactionRacketsReponse" + "$ref": "#/components/schemas/FactionRacketsResponse" } } } @@ -3551,7 +3551,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FactionTerritoriesReponse" + "$ref": "#/components/schemas/FactionTerritoriesResponse" } } } @@ -3599,7 +3599,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FactionTerritoriesReponse" + "$ref": "#/components/schemas/FactionTerritoriesResponse" } } } @@ -4304,7 +4304,7 @@ "$ref": "#/components/schemas/FactionTerritoryWarReportResponse" }, { - "$ref": "#/components/schemas/FactionTerritoriesReponse" + "$ref": "#/components/schemas/FactionTerritoriesResponse" }, { "$ref": "#/components/schemas/FactionUpgradesResponse" @@ -4319,7 +4319,7 @@ "$ref": "#/components/schemas/FactionContributorsResponse" }, { - "$ref": "#/components/schemas/FactionRacketsReponse" + "$ref": "#/components/schemas/FactionRacketsResponse" }, { "$ref": "#/components/schemas/FactionRankedWarResponse" @@ -6773,6 +6773,45 @@ "x-stability": "Stable" } }, + "/torn/organizedcrimes": { + "get": { + "tags": [ + "Torn" + ], + "summary": "Get organized crimes information", + "description": "Requires public access key.
Return the details about released faction organized crimes.", + "operationId": "b64b8cf22cd9e9c8916bc01439f6b069", + "parameters": [ + { + "$ref": "#/components/parameters/ApiTimestamp" + }, + { + "$ref": "#/components/parameters/ApiComment" + }, + { + "$ref": "#/components/parameters/ApiKeyPublic" + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TornOrganizedCrimeResponse" + } + } + } + } + }, + "security": [ + { + "api_key": [] + } + ], + "x-stability": "Unstable" + } + }, "/torn/properties": { "get": { "tags": [ @@ -7148,7 +7187,7 @@ "$ref": "#/components/schemas/TornTerritoriesResponse" }, { - "$ref": "#/components/schemas/TornTerritoriesNoLinksReponse" + "$ref": "#/components/schemas/TornTerritoriesNoLinksResponse" }, { "$ref": "#/components/schemas/TornItemModsResponse" @@ -11851,6 +11890,9 @@ "type": "integer", "format": "int32" }, + "OrganizedCrimeName": { + "type": "string" + }, "PropertyTypeId": { "type": "integer", "format": "int32" @@ -13643,24 +13685,26 @@ ], "properties": { "properties": { - "type": "object", - "oneOf": [ - { - "$ref": "#/components/schemas/UserPropertyBasicDetails" - }, - { - "$ref": "#/components/schemas/UserPropertyDetailsExtended" - }, - { - "$ref": "#/components/schemas/UserPropertyDetailsExtendedRented" - }, - { - "$ref": "#/components/schemas/UserPropertyDetailsExtendedForRent" - }, - { - "$ref": "#/components/schemas/UserPropertyDetailsExtendedForSale" - } - ] + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/UserPropertyBasicDetails" + }, + { + "$ref": "#/components/schemas/UserPropertyDetailsExtended" + }, + { + "$ref": "#/components/schemas/UserPropertyDetailsExtendedRented" + }, + { + "$ref": "#/components/schemas/UserPropertyDetailsExtendedForRent" + }, + { + "$ref": "#/components/schemas/UserPropertyDetailsExtendedForSale" + } + ] + } }, "_metadata": { "$ref": "#/components/schemas/RequestMetadataWithLinks" @@ -14450,7 +14494,7 @@ "races": { "type": "array", "items": { - "$ref": "#/components/schemas/RacingRaceDetailsResponse" + "$ref": "#/components/schemas/RacingRaceDetails" } }, "_metadata": { @@ -18986,10 +19030,10 @@ }, "FactionTerritoriesOwnershipResponse": { "required": [ - "territoryownership" + "territoryOwnership" ], "properties": { - "territoryownership": { + "territoryOwnership": { "type": "array", "items": { "$ref": "#/components/schemas/FactionTerritoryOwnership" @@ -19059,7 +19103,7 @@ }, "type": "object" }, - "FactionRacketsReponse": { + "FactionRacketsResponse": { "required": [ "rackets" ], @@ -19129,7 +19173,7 @@ }, "type": "object" }, - "FactionTerritoriesReponse": { + "FactionTerritoriesResponse": { "required": [ "territory" ], @@ -20075,37 +20119,51 @@ "format": "int32" }, "stats": { - "required": [ - "strength", - "speed", - "dexterity", - "defense" - ], - "properties": { - "strength": { - "type": "integer", - "format": "int64" + "oneOf": [ + { + "required": [ + "strength", + "speed", + "dexterity", + "defense" + ], + "properties": { + "strength": { + "type": "integer", + "format": "int64" + }, + "speed": { + "type": "integer", + "format": "int64" + }, + "dexterity": { + "type": "integer", + "format": "int64" + }, + "defense": { + "type": "integer", + "format": "int64" + } + }, + "type": "object" }, - "speed": { - "type": "integer", - "format": "int64" - }, - "dexterity": { - "type": "integer", - "format": "int64" - }, - "defense": { - "type": "integer", - "format": "int64" + { + "type": "null" } - }, - "type": "object" + ] } }, "type": "object" }, "message": { - "type": "string" + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, "valid_until": { "type": "integer", @@ -20752,7 +20810,7 @@ ] }, "name": { - "type": "string" + "$ref": "#/components/schemas/OrganizedCrimeName" }, "difficulty": { "type": "integer", @@ -23218,32 +23276,38 @@ }, "type": "object" }, + "RacingRaceDetails": { + "allOf": [ + { + "$ref": "#/components/schemas/Race" + }, + { + "required": [ + "is_official", + "results" + ], + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RacerDetails" + } + }, + "is_official": { + "type": "boolean" + } + }, + "type": "object" + } + ] + }, "RacingRaceDetailsResponse": { + "required": [ + "race" + ], "properties": { "race": { - "allOf": [ - { - "$ref": "#/components/schemas/Race" - }, - { - "required": [ - "is_official", - "results" - ], - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RacerDetails" - } - }, - "is_official": { - "type": "boolean" - } - }, - "type": "object" - } - ] + "$ref": "#/components/schemas/RacingRaceDetails" } }, "type": "object" @@ -23311,6 +23375,144 @@ }, "type": "object" }, + "TornOrganizedCrimeResponse": { + "required": [ + "organizedcrimes" + ], + "properties": { + "organizedcrimes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TornOrganizedCrime" + } + } + }, + "type": "object" + }, + "TornOrganizedCrime": { + "required": [ + "name", + "description", + "difficulty", + "spawn", + "scope", + "slots", + "prerequisite" + ], + "properties": { + "name": { + "$ref": "#/components/schemas/OrganizedCrimeName" + }, + "description": { + "type": "string" + }, + "difficulty": { + "type": "integer", + "format": "int32" + }, + "spawn": { + "$ref": "#/components/schemas/TornOrganizedCrimeSpawn" + }, + "scope": { + "$ref": "#/components/schemas/TornOrganizedCrimeScope" + }, + "prerequisite": { + "oneOf": [ + { + "$ref": "#/components/schemas/OrganizedCrimeName" + }, + { + "type": "null" + } + ] + }, + "slots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TornOrganizedCrimeSlot" + } + } + }, + "type": "object" + }, + "TornOrganizedCrimeSpawn": { + "required": [ + "level", + "name" + ], + "properties": { + "level": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "TornOrganizedCrimeScope": { + "required": [ + "cost", + "return" + ], + "properties": { + "cost": { + "type": "integer", + "format": "int32" + }, + "return": { + "type": "integer", + "format": "int32" + } + }, + "type": "object" + }, + "TornOrganizedCrimeSlot": { + "required": [ + "id", + "name", + "required_item" + ], + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "required_item": { + "oneOf": [ + { + "$ref": "#/components/schemas/TornOrganizedCrimeRequiredItem" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" + }, + "TornOrganizedCrimeRequiredItem": { + "required": [ + "id", + "name", + "is_used" + ], + "properties": { + "id": { + "$ref": "#/components/schemas/ItemId" + }, + "name": { + "type": "string" + }, + "is_used": { + "type": "boolean" + } + }, + "type": "object" + }, "TornProperties": { "properties": { "properties": { @@ -23611,7 +23813,7 @@ }, "type": "object" }, - "TornTerritoriesNoLinksReponse": { + "TornTerritoriesNoLinksResponse": { "required": [ "territory" ], @@ -23668,7 +23870,8 @@ "enhancer_id", "enhancer_name", "unique_outcomes_count", - "unique_outcomes_ids" + "unique_outcomes_ids", + "notes" ], "properties": { "id": { @@ -24813,6 +25016,7 @@ "logcategories", "logtypes", "lookup", + "organizedcrimes", "properties", "subcrimes", "territory",