Skip to content

Commit

Permalink
Update api spec (#216)
Browse files Browse the repository at this point in the history
* YOYO NEW API SPEC!

* Incorporate breaking changes

* I have generated the library!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Adam Chalmers <[email protected]>
  • Loading branch information
3 people committed Aug 9, 2023
1 parent c6827ad commit 08b8f9e
Show file tree
Hide file tree
Showing 7 changed files with 2,860 additions and 2,631 deletions.
4 changes: 2 additions & 2 deletions kittycad.rs.patch.json
Original file line number Diff line number Diff line change
Expand Up @@ -203,15 +203,15 @@
"op": "add",
"path": "/paths/~1modeling~1cmd/post/x-rust",
"value": {
"example": "/// Submit one modeling operation.\n/// \n/// Response depends on which command was submitted, so unfortunately the OpenAPI schema can't generate the right response type.\nuse std::str::FromStr;\nasync fn example_modeling_cmd() -> anyhow::Result<()> {\n let client = kittycad::Client::new_from_env();\n let result: serde_json::Value = client\n .modeling()\n .cmd(&kittycad::types::ModelingCmdReq {\n cmd: kittycad::types::ModelingCmd::ModelingCmdExport(kittycad::types::ModelingCmdExport {\n export: kittycad::types::Export {\n format: kittycad::types::OutputFormat::Gltf {\n storage: kittycad::types::Storage::Embedded,\n },\n },\n }),\n cmd_id: uuid::Uuid::from_str(\"d9797f8d-9ad6-4e08-90d7-2ec17e13471c\")?,\n file_id: \"some-string\".to_string(),\n })\n .await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n",
"example": "/// Submit one modeling operation.\n/// \n/// Response depends on which command was submitted, so unfortunately the OpenAPI schema can't generate the right response type.\nuse std::str::FromStr;\nasync fn example_modeling_cmd() -> anyhow::Result<()> {\n let client = kittycad::Client::new_from_env();\n let result: serde_json::Value = client\n .modeling()\n .cmd(&kittycad::types::ModelingCmdReq {\n cmd: kittycad::types::ModelingCmd::CameraDragEnd {\n interaction: kittycad::types::CameraDragInteractionType::Zoom,\n window: kittycad::types::Point2D {\n x: 3.14 as f64,\n y: 3.14 as f64,\n },\n },\n cmd_id: uuid::Uuid::from_str(\"d9797f8d-9ad6-4e08-90d7-2ec17e13471c\")?,\n file_id: \"some-string\".to_string(),\n })\n .await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n",
"libDocsLink": "https://docs.rs/kittycad/latest/kittycad/modeling/struct.Modeling.html#method.cmd"
}
},
{
"op": "add",
"path": "/paths/~1modeling~1cmd_batch/post/x-rust",
"value": {
"example": "/// Submit many modeling operations.\nuse std::str::FromStr;\nasync fn example_modeling_cmd_batch() -> anyhow::Result<()> {\n let client = kittycad::Client::new_from_env();\n let result: kittycad::types::ModelingOutcomes = client\n .modeling()\n .cmd_batch(&kittycad::types::ModelingCmdReqBatch {\n cmds: std::collections::HashMap::from([(\n \"some-key\".to_string(),\n kittycad::types::ModelingCmdReq {\n cmd: kittycad::types::ModelingCmd::ModelingCmdExport(\n kittycad::types::ModelingCmdExport {\n export: kittycad::types::Export {\n format: kittycad::types::OutputFormat::Gltf {\n storage: kittycad::types::Storage::Embedded,\n },\n },\n },\n ),\n cmd_id: uuid::Uuid::from_str(\"d9797f8d-9ad6-4e08-90d7-2ec17e13471c\")?,\n file_id: \"some-string\".to_string(),\n },\n )]),\n file_id: \"some-string\".to_string(),\n })\n .await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n",
"example": "/// Submit many modeling operations.\nuse std::str::FromStr;\nasync fn example_modeling_cmd_batch() -> anyhow::Result<()> {\n let client = kittycad::Client::new_from_env();\n let result: kittycad::types::ModelingOutcomes = client\n .modeling()\n .cmd_batch(&kittycad::types::ModelingCmdReqBatch {\n cmds: std::collections::HashMap::from([(\n \"some-key\".to_string(),\n kittycad::types::ModelingCmdReq {\n cmd: kittycad::types::ModelingCmd::CameraDragEnd {\n interaction: kittycad::types::CameraDragInteractionType::Zoom,\n window: kittycad::types::Point2D {\n x: 3.14 as f64,\n y: 3.14 as f64,\n },\n },\n cmd_id: uuid::Uuid::from_str(\"d9797f8d-9ad6-4e08-90d7-2ec17e13471c\")?,\n file_id: \"some-string\".to_string(),\n },\n )]),\n file_id: \"some-string\".to_string(),\n })\n .await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n",
"libDocsLink": "https://docs.rs/kittycad/latest/kittycad/modeling/struct.Modeling.html#method.cmd_batch"
}
},
Expand Down
45 changes: 42 additions & 3 deletions kittycad/src/modeling.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,19 @@ impl Modeling {
Self { client }
}

#[doc = "Submit one modeling operation.\n\nResponse depends on which command was submitted, so unfortunately the OpenAPI schema can't generate the right response type.\n\n```rust,no_run\nuse std::str::FromStr;\nasync fn example_modeling_cmd() -> anyhow::Result<()> {\n let client = kittycad::Client::new_from_env();\n let result: serde_json::Value = client\n .modeling()\n .cmd(&kittycad::types::ModelingCmdReq {\n cmd: kittycad::types::ModelingCmd::ModelingCmdExport(kittycad::types::ModelingCmdExport {\n export: kittycad::types::Export {\n format: kittycad::types::OutputFormat::Gltf {\n storage: kittycad::types::Storage::Embedded,\n },\n },\n }),\n cmd_id: uuid::Uuid::from_str(\"d9797f8d-9ad6-4e08-90d7-2ec17e13471c\")?,\n file_id: \"some-string\".to_string(),\n })\n .await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n```"]
#[doc = "Submit one modeling operation.\n\nResponse depends on which command was submitted, so \
unfortunately the OpenAPI schema can't generate the right response \
type.\n\n```rust,no_run\nuse std::str::FromStr;\nasync fn example_modeling_cmd() -> \
anyhow::Result<()> {\n let client = kittycad::Client::new_from_env();\n let \
result: serde_json::Value = client\n .modeling()\n \
.cmd(&kittycad::types::ModelingCmdReq {\n cmd: \
kittycad::types::ModelingCmd::CameraDragEnd {\n interaction: \
kittycad::types::CameraDragInteractionType::Zoom,\n window: \
kittycad::types::Point2D {\n x: 3.14 as f64,\n \
y: 3.14 as f64,\n },\n },\n cmd_id: \
uuid::Uuid::from_str(\"d9797f8d-9ad6-4e08-90d7-2ec17e13471c\")?,\n \
file_id: \"some-string\".to_string(),\n })\n .await?;\n \
println!(\"{:?}\", result);\n Ok(())\n}\n```"]
#[tracing::instrument]
pub async fn cmd<'a>(
&'a self,
Expand All @@ -39,7 +51,7 @@ impl Modeling {
}
}

#[doc = "Submit many modeling operations.\n\n```rust,no_run\nuse std::str::FromStr;\nasync fn example_modeling_cmd_batch() -> anyhow::Result<()> {\n let client = kittycad::Client::new_from_env();\n let result: kittycad::types::ModelingOutcomes = client\n .modeling()\n .cmd_batch(&kittycad::types::ModelingCmdReqBatch {\n cmds: std::collections::HashMap::from([(\n \"some-key\".to_string(),\n kittycad::types::ModelingCmdReq {\n cmd: kittycad::types::ModelingCmd::ModelingCmdExport(\n kittycad::types::ModelingCmdExport {\n export: kittycad::types::Export {\n format: kittycad::types::OutputFormat::Gltf {\n storage: kittycad::types::Storage::Embedded,\n },\n },\n },\n ),\n cmd_id: uuid::Uuid::from_str(\"d9797f8d-9ad6-4e08-90d7-2ec17e13471c\")?,\n file_id: \"some-string\".to_string(),\n },\n )]),\n file_id: \"some-string\".to_string(),\n })\n .await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n```"]
#[doc = "Submit many modeling operations.\n\n```rust,no_run\nuse std::str::FromStr;\nasync fn example_modeling_cmd_batch() -> anyhow::Result<()> {\n let client = kittycad::Client::new_from_env();\n let result: kittycad::types::ModelingOutcomes = client\n .modeling()\n .cmd_batch(&kittycad::types::ModelingCmdReqBatch {\n cmds: std::collections::HashMap::from([(\n \"some-key\".to_string(),\n kittycad::types::ModelingCmdReq {\n cmd: kittycad::types::ModelingCmd::CameraDragEnd {\n interaction: kittycad::types::CameraDragInteractionType::Zoom,\n window: kittycad::types::Point2D {\n x: 3.14 as f64,\n y: 3.14 as f64,\n },\n },\n cmd_id: uuid::Uuid::from_str(\"d9797f8d-9ad6-4e08-90d7-2ec17e13471c\")?,\n file_id: \"some-string\".to_string(),\n },\n )]),\n file_id: \"some-string\".to_string(),\n })\n .await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n```"]
#[tracing::instrument]
pub async fn cmd_batch<'a>(
&'a self,
Expand Down Expand Up @@ -68,16 +80,43 @@ impl Modeling {

#[doc = "Open a websocket which accepts modeling commands.\n\nPass those commands to the \
engine via websocket, and pass responses back to the client. Basically, this is a \
websocket proxy between the frontend/client and the engine."]
websocket proxy between the frontend/client and the engine.\n\n**Parameters:**\n\n- \
`fps: Option<u32>`: Frames per second of the video feed.\n- `unlocked_framerate: \
Option<bool>`: If true, engine will render video frames as fast as it can.\n- \
`video_res_height: Option<u32>`: Height of the video feed. Must be a multiple of \
4.\n- `video_res_width: Option<u32>`: Width of the video feed. Must be a multiple of \
4."]
#[tracing::instrument]
pub async fn commands_ws<'a>(
&'a self,
fps: Option<u32>,
unlocked_framerate: Option<bool>,
video_res_height: Option<u32>,
video_res_width: Option<u32>,
) -> Result<reqwest::Upgraded, crate::types::error::Error> {
let mut req = self.client.client_http1_only.request(
http::Method::GET,
format!("{}/{}", self.client.base_url, "ws/modeling/commands"),
);
req = req.bearer_auth(&self.client.token);
let mut query_params = vec![];
if let Some(p) = fps {
query_params.push(("fps", format!("{}", p)));
}

if let Some(p) = unlocked_framerate {
query_params.push(("unlocked_framerate", format!("{}", p)));
}

if let Some(p) = video_res_height {
query_params.push(("video_res_height", format!("{}", p)));
}

if let Some(p) = video_res_width {
query_params.push(("video_res_width", format!("{}", p)));
}

req = req.query(&query_params);
req = req
.header(reqwest::header::CONNECTION, "Upgrade")
.header(reqwest::header::UPGRADE, "websocket")
Expand Down
20 changes: 7 additions & 13 deletions kittycad/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ use futures::TryStreamExt;
use pretty_assertions::assert_eq;
use tokio_tungstenite::tungstenite::Message as WsMsg;

use crate::types::{
ExtendPath, ModelingCmd, ModelingCmdExtendPath, ModelingCmdReq, PathSegment, Point3D,
};
use crate::types::{ModelingCmd, ModelingCmdReq, PathSegment, Point3D};

fn test_client() -> crate::Client {
crate::Client::new_from_env()
Expand Down Expand Up @@ -186,7 +184,7 @@ async fn test_modeling_websocket() {

let client = test_client();

let ws = match client.modeling().commands_ws().await {
let ws = match client.modeling().commands_ws(None, None, None, None).await {
Ok(ws) => ws,
Err(crate::types::error::Error::UnexpectedResponse(resp)) => {
let txt = resp.text().await.unwrap();
Expand All @@ -207,9 +205,7 @@ async fn test_modeling_websocket() {
write
.send(WsMsg::Text(
serde_json::to_string(&ModelingCmdReq {
cmd: ModelingCmd::ModelingCmdStartPath(
crate::types::ModelingCmdStartPath::StartPath,
),
cmd: ModelingCmd::StartPath {},
cmd_id: path_id,
file_id: Default::default(),
})
Expand Down Expand Up @@ -240,12 +236,10 @@ async fn test_modeling_websocket() {
write
.send(WsMsg::Text(
serde_json::to_string(&ModelingCmdReq {
cmd: ModelingCmd::ModelingCmdExtendPath(ModelingCmdExtendPath {
extend_path: ExtendPath {
path: path_id,
segment: PathSegment::Line { end: point },
},
}),
cmd: ModelingCmd::ExtendPath {
path: path_id,
segment: PathSegment::Line { end: point },
},
cmd_id: Uuid::new_v4(),
file_id: Default::default(),
})
Expand Down
Loading

0 comments on commit 08b8f9e

Please sign in to comment.