Compare commits

...

2 commits

Author SHA1 Message Date
3e585d7559
chore(torn-api): update scheme 2025-07-10 17:54:54 +02:00
3819ed1b7d
feat(codegen): properly transform all property names which collide with
keywords
2025-07-10 17:53:44 +02:00
5 changed files with 341 additions and 84 deletions

4
Cargo.lock generated
View file

@ -2294,7 +2294,7 @@ dependencies = [
[[package]] [[package]]
name = "torn-api" name = "torn-api"
version = "1.7.0" version = "1.7.1"
dependencies = [ dependencies = [
"bon", "bon",
"bytes", "bytes",
@ -2316,7 +2316,7 @@ dependencies = [
[[package]] [[package]]
name = "torn-api-codegen" name = "torn-api-codegen"
version = "0.7.0" version = "0.7.1"
dependencies = [ dependencies = [
"heck", "heck",
"indexmap", "indexmap",

View file

@ -1,7 +1,7 @@
[package] [package]
name = "torn-api-codegen" name = "torn-api-codegen"
authors = ["Pyrit [2111649]"] authors = ["Pyrit [2111649]"]
version = "0.7.0" version = "0.7.1"
edition = "2021" edition = "2021"
description = "Contains the v2 torn API model descriptions and codegen for the bindings" description = "Contains the v2 torn API model descriptions and codegen for the bindings"
license-file = { workspace = true } license-file = { workspace = true }

View file

@ -273,7 +273,60 @@ impl Property {
let name = &self.name; let name = &self.name;
let (name, serde_attr) = match name.as_str() { 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), "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 => ( name if name != self.field_name => (
format_ident!("{}", self.field_name), format_ident!("{}", self.field_name),
Some(quote! { #[serde(rename = #name)]}), Some(quote! { #[serde(rename = #name)]}),

View file

@ -1,6 +1,6 @@
[package] [package]
name = "torn-api" name = "torn-api"
version = "1.7.0" version = "1.7.1"
edition = "2021" edition = "2021"
description = "Auto-generated bindings for the v2 torn api" description = "Auto-generated bindings for the v2 torn api"
license-file = { workspace = true } license-file = { workspace = true }

View file

@ -3,7 +3,7 @@
"info": { "info": {
"title": "Torn API", "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.", "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": [ "servers": [
{ {
@ -2953,7 +2953,7 @@
"content": { "content": {
"application/json": { "application/json": {
"schema": { "schema": {
"$ref": "#/components/schemas/FactionRacketsReponse" "$ref": "#/components/schemas/FactionRacketsResponse"
} }
} }
} }
@ -3551,7 +3551,7 @@
"content": { "content": {
"application/json": { "application/json": {
"schema": { "schema": {
"$ref": "#/components/schemas/FactionTerritoriesReponse" "$ref": "#/components/schemas/FactionTerritoriesResponse"
} }
} }
} }
@ -3599,7 +3599,7 @@
"content": { "content": {
"application/json": { "application/json": {
"schema": { "schema": {
"$ref": "#/components/schemas/FactionTerritoriesReponse" "$ref": "#/components/schemas/FactionTerritoriesResponse"
} }
} }
} }
@ -4304,7 +4304,7 @@
"$ref": "#/components/schemas/FactionTerritoryWarReportResponse" "$ref": "#/components/schemas/FactionTerritoryWarReportResponse"
}, },
{ {
"$ref": "#/components/schemas/FactionTerritoriesReponse" "$ref": "#/components/schemas/FactionTerritoriesResponse"
}, },
{ {
"$ref": "#/components/schemas/FactionUpgradesResponse" "$ref": "#/components/schemas/FactionUpgradesResponse"
@ -4319,7 +4319,7 @@
"$ref": "#/components/schemas/FactionContributorsResponse" "$ref": "#/components/schemas/FactionContributorsResponse"
}, },
{ {
"$ref": "#/components/schemas/FactionRacketsReponse" "$ref": "#/components/schemas/FactionRacketsResponse"
}, },
{ {
"$ref": "#/components/schemas/FactionRankedWarResponse" "$ref": "#/components/schemas/FactionRankedWarResponse"
@ -6773,6 +6773,45 @@
"x-stability": "Stable" "x-stability": "Stable"
} }
}, },
"/torn/organizedcrimes": {
"get": {
"tags": [
"Torn"
],
"summary": "Get organized crimes information",
"description": "Requires public access key. <br> 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": { "/torn/properties": {
"get": { "get": {
"tags": [ "tags": [
@ -7148,7 +7187,7 @@
"$ref": "#/components/schemas/TornTerritoriesResponse" "$ref": "#/components/schemas/TornTerritoriesResponse"
}, },
{ {
"$ref": "#/components/schemas/TornTerritoriesNoLinksReponse" "$ref": "#/components/schemas/TornTerritoriesNoLinksResponse"
}, },
{ {
"$ref": "#/components/schemas/TornItemModsResponse" "$ref": "#/components/schemas/TornItemModsResponse"
@ -11851,6 +11890,9 @@
"type": "integer", "type": "integer",
"format": "int32" "format": "int32"
}, },
"OrganizedCrimeName": {
"type": "string"
},
"PropertyTypeId": { "PropertyTypeId": {
"type": "integer", "type": "integer",
"format": "int32" "format": "int32"
@ -13643,24 +13685,26 @@
], ],
"properties": { "properties": {
"properties": { "properties": {
"type": "object", "type": "array",
"oneOf": [ "items": {
{ "oneOf": [
"$ref": "#/components/schemas/UserPropertyBasicDetails" {
}, "$ref": "#/components/schemas/UserPropertyBasicDetails"
{ },
"$ref": "#/components/schemas/UserPropertyDetailsExtended" {
}, "$ref": "#/components/schemas/UserPropertyDetailsExtended"
{ },
"$ref": "#/components/schemas/UserPropertyDetailsExtendedRented" {
}, "$ref": "#/components/schemas/UserPropertyDetailsExtendedRented"
{ },
"$ref": "#/components/schemas/UserPropertyDetailsExtendedForRent" {
}, "$ref": "#/components/schemas/UserPropertyDetailsExtendedForRent"
{ },
"$ref": "#/components/schemas/UserPropertyDetailsExtendedForSale" {
} "$ref": "#/components/schemas/UserPropertyDetailsExtendedForSale"
] }
]
}
}, },
"_metadata": { "_metadata": {
"$ref": "#/components/schemas/RequestMetadataWithLinks" "$ref": "#/components/schemas/RequestMetadataWithLinks"
@ -14450,7 +14494,7 @@
"races": { "races": {
"type": "array", "type": "array",
"items": { "items": {
"$ref": "#/components/schemas/RacingRaceDetailsResponse" "$ref": "#/components/schemas/RacingRaceDetails"
} }
}, },
"_metadata": { "_metadata": {
@ -18986,10 +19030,10 @@
}, },
"FactionTerritoriesOwnershipResponse": { "FactionTerritoriesOwnershipResponse": {
"required": [ "required": [
"territoryownership" "territoryOwnership"
], ],
"properties": { "properties": {
"territoryownership": { "territoryOwnership": {
"type": "array", "type": "array",
"items": { "items": {
"$ref": "#/components/schemas/FactionTerritoryOwnership" "$ref": "#/components/schemas/FactionTerritoryOwnership"
@ -19059,7 +19103,7 @@
}, },
"type": "object" "type": "object"
}, },
"FactionRacketsReponse": { "FactionRacketsResponse": {
"required": [ "required": [
"rackets" "rackets"
], ],
@ -19129,7 +19173,7 @@
}, },
"type": "object" "type": "object"
}, },
"FactionTerritoriesReponse": { "FactionTerritoriesResponse": {
"required": [ "required": [
"territory" "territory"
], ],
@ -20075,37 +20119,51 @@
"format": "int32" "format": "int32"
}, },
"stats": { "stats": {
"required": [ "oneOf": [
"strength", {
"speed", "required": [
"dexterity", "strength",
"defense" "speed",
], "dexterity",
"properties": { "defense"
"strength": { ],
"type": "integer", "properties": {
"format": "int64" "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", "type": "null"
"format": "int64"
},
"dexterity": {
"type": "integer",
"format": "int64"
},
"defense": {
"type": "integer",
"format": "int64"
} }
}, ]
"type": "object"
} }
}, },
"type": "object" "type": "object"
}, },
"message": { "message": {
"type": "string" "oneOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}, },
"valid_until": { "valid_until": {
"type": "integer", "type": "integer",
@ -20752,7 +20810,7 @@
] ]
}, },
"name": { "name": {
"type": "string" "$ref": "#/components/schemas/OrganizedCrimeName"
}, },
"difficulty": { "difficulty": {
"type": "integer", "type": "integer",
@ -23218,32 +23276,38 @@
}, },
"type": "object" "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": { "RacingRaceDetailsResponse": {
"required": [
"race"
],
"properties": { "properties": {
"race": { "race": {
"allOf": [ "$ref": "#/components/schemas/RacingRaceDetails"
{
"$ref": "#/components/schemas/Race"
},
{
"required": [
"is_official",
"results"
],
"properties": {
"results": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RacerDetails"
}
},
"is_official": {
"type": "boolean"
}
},
"type": "object"
}
]
} }
}, },
"type": "object" "type": "object"
@ -23311,6 +23375,144 @@
}, },
"type": "object" "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": { "TornProperties": {
"properties": { "properties": {
"properties": { "properties": {
@ -23611,7 +23813,7 @@
}, },
"type": "object" "type": "object"
}, },
"TornTerritoriesNoLinksReponse": { "TornTerritoriesNoLinksResponse": {
"required": [ "required": [
"territory" "territory"
], ],
@ -23668,7 +23870,8 @@
"enhancer_id", "enhancer_id",
"enhancer_name", "enhancer_name",
"unique_outcomes_count", "unique_outcomes_count",
"unique_outcomes_ids" "unique_outcomes_ids",
"notes"
], ],
"properties": { "properties": {
"id": { "id": {
@ -24813,6 +25016,7 @@
"logcategories", "logcategories",
"logtypes", "logtypes",
"lookup", "lookup",
"organizedcrimes",
"properties", "properties",
"subcrimes", "subcrimes",
"territory", "territory",