diff --git a/torn-api-codegen/src/model/mod.rs b/torn-api-codegen/src/model/mod.rs index 6b9c313..b6c823b 100644 --- a/torn-api-codegen/src/model/mod.rs +++ b/torn-api-codegen/src/model/mod.rs @@ -61,11 +61,11 @@ impl Model { #[cfg(test)] mod test { use super::*; - use crate::openapi::schema::OpenApiSchema; + use crate::openapi::schema::test::get_schema; #[test] fn resolve_newtypes() { - let schema = OpenApiSchema::read().unwrap(); + let schema = get_schema(); let user_id_schema = schema.components.schemas.get("UserId").unwrap(); @@ -100,7 +100,7 @@ mod test { #[test] fn resolve_all() { - let schema = OpenApiSchema::read().unwrap(); + let schema = get_schema(); let mut unresolved = vec![]; let total = schema.components.schemas.len(); diff --git a/torn-api-codegen/src/model/object.rs b/torn-api-codegen/src/model/object.rs index 8b96376..ffb6c5a 100644 --- a/torn-api-codegen/src/model/object.rs +++ b/torn-api-codegen/src/model/object.rs @@ -420,11 +420,11 @@ impl ObjectNamespace<'_> { mod test { use super::*; - use crate::openapi::schema::OpenApiSchema; + use crate::openapi::schema::test::get_schema; #[test] fn resolve_object() { - let schema = OpenApiSchema::read().unwrap(); + let schema = get_schema(); let attack = schema.components.schemas.get("FactionUpgrades").unwrap(); @@ -436,7 +436,7 @@ mod test { #[test] fn resolve_objects() { - let schema = OpenApiSchema::read().unwrap(); + let schema = get_schema(); let mut objects = 0; let mut unresolved = vec![]; diff --git a/torn-api-codegen/src/model/parameter.rs b/torn-api-codegen/src/model/parameter.rs index 613b8a9..733163f 100644 --- a/torn-api-codegen/src/model/parameter.rs +++ b/torn-api-codegen/src/model/parameter.rs @@ -342,13 +342,13 @@ The default value [Self::{}](self::{}#variant.{})"#, #[cfg(test)] mod test { - use crate::openapi::{path::OpenApiPathParameter, schema::OpenApiSchema}; + use crate::openapi::{path::OpenApiPathParameter, schema::test::get_schema}; use super::*; #[test] fn resolve_components() { - let schema = OpenApiSchema::read().unwrap(); + let schema = get_schema(); let mut parameters = 0; let mut unresolved = vec![]; @@ -376,7 +376,7 @@ mod test { #[test] fn resolve_inline() { - let schema = OpenApiSchema::read().unwrap(); + let schema = get_schema(); let mut params = 0; let mut unresolved = Vec::new(); @@ -404,7 +404,7 @@ mod test { #[test] fn codegen_inline() { - let schema = OpenApiSchema::read().unwrap(); + let schema = get_schema(); let mut params = 0; let mut unresolved = Vec::new(); diff --git a/torn-api-codegen/src/model/path.rs b/torn-api-codegen/src/model/path.rs index 04973de..7f534ce 100644 --- a/torn-api-codegen/src/model/path.rs +++ b/torn-api-codegen/src/model/path.rs @@ -592,11 +592,11 @@ impl PathNamespace<'_> { mod test { use super::*; - use crate::openapi::schema::OpenApiSchema; + use crate::openapi::schema::test::get_schema; #[test] fn resolve_paths() { - let schema = OpenApiSchema::read().unwrap(); + let schema = get_schema(); let mut paths = 0; let mut unresolved = vec![]; @@ -624,7 +624,7 @@ mod test { #[test] fn codegen_paths() { - let schema = OpenApiSchema::read().unwrap(); + let schema = get_schema(); let mut paths = 0; let mut unresolved = vec![]; diff --git a/torn-api-codegen/src/openapi/parameter.rs b/torn-api-codegen/src/openapi/parameter.rs index 0b341d2..857fd85 100644 --- a/torn-api-codegen/src/openapi/parameter.rs +++ b/torn-api-codegen/src/openapi/parameter.rs @@ -9,14 +9,14 @@ pub enum ParameterLocation { Path, } -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Deserialize, PartialEq, Eq)] #[serde(untagged)] pub enum OpenApiParameterDefault<'a> { Int(i32), Str(&'a str), } -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Deserialize, PartialEq, Eq)] pub struct OpenApiParameterSchema<'a> { #[serde(rename = "$ref")] pub ref_path: Option<&'a str>, @@ -29,7 +29,7 @@ pub struct OpenApiParameterSchema<'a> { pub items: Option>>, } -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Deserialize, PartialEq, Eq)] pub struct OpenApiParameter<'a> { pub name: &'a str, pub description: Option>, diff --git a/torn-api-codegen/src/openapi/path.rs b/torn-api-codegen/src/openapi/path.rs index e0d06f8..5df455a 100644 --- a/torn-api-codegen/src/openapi/path.rs +++ b/torn-api-codegen/src/openapi/path.rs @@ -1,10 +1,10 @@ use std::borrow::Cow; -use serde::{Deserialize, Deserializer}; +use serde::{Deserialize, Deserializer, Serialize}; use super::parameter::OpenApiParameter; -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Deserialize, PartialEq, Eq)] #[serde(untagged)] pub enum OpenApiPathParameter<'a> { Link { @@ -14,13 +14,13 @@ pub enum OpenApiPathParameter<'a> { Inline(OpenApiParameter<'a>), } -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Deserialize, PartialEq, Eq)] pub struct SchemaLink<'a> { #[serde(rename = "$ref")] pub ref_path: &'a str, } -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Deserialize, PartialEq, Eq)] #[serde(untagged)] pub enum OpenApiResponseBody<'a> { Schema(SchemaLink<'a>), @@ -30,6 +30,9 @@ pub enum OpenApiResponseBody<'a> { }, } +#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)] +pub struct OperationId(pub String); + fn deserialize_response_body<'de, D>(deserializer: D) -> Result, D::Error> where D: Deserializer<'de>, @@ -60,7 +63,8 @@ where Ok(responses.ok.content.json.schema) } -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] pub struct OpenApiPathBody<'a> { pub summary: Option>, pub description: Option>, @@ -72,6 +76,7 @@ pub struct OpenApiPathBody<'a> { deserialize_with = "deserialize_response_body" )] pub response_content: OpenApiResponseBody<'a>, + pub operation_id: Option, } #[derive(Debug, Clone, Deserialize)] diff --git a/torn-api-codegen/src/openapi/schema.rs b/torn-api-codegen/src/openapi/schema.rs index 2450f01..c06a76d 100644 --- a/torn-api-codegen/src/openapi/schema.rs +++ b/torn-api-codegen/src/openapi/schema.rs @@ -19,20 +19,12 @@ pub struct OpenApiSchema<'a> { pub components: Components<'a>, } -impl OpenApiSchema<'_> { - pub fn read() -> Result { - let s = include_str!("../../openapi.json"); - - serde_json::from_str(s) - } -} - #[cfg(test)] -mod test { +pub(crate) mod test { use super::*; - #[test] - fn read() { - OpenApiSchema::read().unwrap(); + pub(crate) fn get_schema() -> OpenApiSchema<'static> { + let s = include_str!("../../../torn-api/openapi.json"); + serde_json::from_str(s).unwrap() } } diff --git a/torn-api/Cargo.toml b/torn-api/Cargo.toml index 71fdb08..46b33a4 100644 --- a/torn-api/Cargo.toml +++ b/torn-api/Cargo.toml @@ -41,3 +41,4 @@ torn-api-codegen = { path = "../torn-api-codegen", version = "0.3.0" } syn = { workspace = true, features = ["parsing"] } proc-macro2 = { workspace = true } prettyplease = "0.2" +serde_json = { workspace = true } diff --git a/torn-api/build.rs b/torn-api/build.rs index 136a95e..cb27066 100644 --- a/torn-api/build.rs +++ b/torn-api/build.rs @@ -15,7 +15,8 @@ fn main() { let requests_dest = Path::new(&out_dir).join("requests.rs"); let scopes_dest = Path::new(&out_dir).join("scopes.rs"); - let schema = OpenApiSchema::read().unwrap(); + let s = include_str!("./openapi.json"); + let schema: OpenApiSchema = serde_json::from_str(s).unwrap(); let mut models_code = TokenStream::new(); diff --git a/torn-api-codegen/openapi.json b/torn-api/openapi.json similarity index 100% rename from torn-api-codegen/openapi.json rename to torn-api/openapi.json