use kittycad_execution_plan_macros::ExecutionPlanValue;
use parse_display::{Display, FromStr};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::coord;
#[derive(Clone, Debug, Deserialize, Eq, Hash, JsonSchema, PartialEq, Serialize)]
#[serde(rename = "StepExportOptions")]
pub struct ExportOptions {
    pub coords: coord::System,
    #[serde(skip)]
    pub created: Option<chrono::DateTime<chrono::Utc>>,
}
impl Default for ExportOptions {
    fn default() -> Self {
        Self {
            coords: *coord::KITTYCAD,
            created: None,
        }
    }
}
impl std::fmt::Display for ExportOptions {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(f, "coords: {}", self.coords)
    }
}
impl std::str::FromStr for ExportOptions {
    type Err = <coord::System as std::str::FromStr>::Err;
    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        Ok(Self {
            coords: <coord::System as std::str::FromStr>::from_str(s)?,
            created: None,
        })
    }
}
#[derive(
    Clone, Debug, Default, Eq, Hash, PartialEq, Serialize, Deserialize, JsonSchema, Display, FromStr, ExecutionPlanValue,
)]
#[display("")]
#[serde(rename = "StepImportOptions")]
pub struct ImportOptions {}