1use anyhow::Result;
4use kcl_derive_docs::stdlib;
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7
8use crate::{
9 errors::KclError,
10 execution::{ExecState, KclValue},
11 std::args::{Args, TyF64},
12};
13
14#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
16#[ts(export)]
17#[serde(rename_all = "camelCase")]
18pub struct PolarCoordsData {
19 pub angle: f64,
21 pub length: TyF64,
23}
24
25pub async fn polar(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
27 let data: PolarCoordsData = args.get_data()?;
28 let result = inner_polar(&data)?;
29
30 args.make_user_val_from_f64_array(result.to_vec(), &data.length.ty)
31}
32
33#[stdlib {
48 name = "polar",
49}]
50fn inner_polar(data: &PolarCoordsData) -> Result<[f64; 2], KclError> {
51 let angle = data.angle.to_radians();
52 let x = data.length.n * angle.cos();
53 let y = data.length.n * angle.sin();
54 Ok([x, y])
55}