#[cfg(test)]
mod test_examples_import {
    #[tokio::test(flavor = "multi_thread")]
    async fn test_mock_example_import0() {
        let tokens = crate::token::lexer("This is code.\nIt does other shit.\nimport").unwrap();
        let parser = crate::parser::Parser::new(tokens);
        let program = parser.ast().unwrap();
        let ctx = crate::executor::ExecutorContext {
            engine: std::sync::Arc::new(Box::new(
                crate::engine::conn_mock::EngineConnection::new()
                    .await
                    .unwrap(),
            )),
            fs: std::sync::Arc::new(crate::fs::FileManager::new()),
            stdlib: std::sync::Arc::new(crate::std::StdLib::new()),
            settings: Default::default(),
            is_mock: true,
        };
        ctx.run(&program, None).await.unwrap();
    }

    #[tokio::test(flavor = "multi_thread", worker_threads = 5)]
    async fn kcl_test_example_import0() {
        let code = "This is code.\nIt does other shit.\nimport";
        let result =
            crate::test_server::execute_and_snapshot(code, crate::settings::types::UnitLength::Mm)
                .await
                .unwrap();
        twenty_twenty::assert_image(
            &format!("tests/outputs/{}.png", "serial_test_example_import0"),
            &result,
            0.99,
        );
    }
}

#[allow(non_camel_case_types, missing_docs)]
#[doc = "Std lib function: import\nThis is some function.\nIt does shit."]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, schemars :: JsonSchema, ts_rs :: TS)]
#[ts(export)]
pub(crate) struct Import {}

#[allow(non_upper_case_globals, missing_docs)]
#[doc = "Std lib function: import\nThis is some function.\nIt does shit."]
pub(crate) const Import: Import = Import {};
fn boxed_import(
    args: crate::std::Args,
) -> std::pin::Pin<
    Box<
        dyn std::future::Future<
                Output = anyhow::Result<crate::executor::KclValue, crate::errors::KclError>,
            > + Send,
    >,
> {
    Box::pin(import(args))
}

impl crate::docs::StdLibFn for Import {
    fn name(&self) -> String {
        "import".to_string()
    }

    fn summary(&self) -> String {
        "This is some function.".to_string()
    }

    fn description(&self) -> String {
        "It does shit.".to_string()
    }

    fn tags(&self) -> Vec<String> {
        vec![]
    }

    fn args(&self) -> Vec<crate::docs::StdLibFnArg> {
        let mut settings = schemars::gen::SchemaSettings::openapi3();
        settings.inline_subschemas = true;
        let mut generator = schemars::gen::SchemaGenerator::new(settings);
        vec![crate::docs::StdLibFnArg {
            name: "args".to_string(),
            type_: "kittycad::types::InputFormat".to_string(),
            schema: <Option<kittycad::types::InputFormat>>::json_schema(&mut generator),
            required: false,
        }]
    }

    fn return_value(&self) -> Option<crate::docs::StdLibFnArg> {
        let mut settings = schemars::gen::SchemaSettings::openapi3();
        settings.inline_subschemas = true;
        let mut generator = schemars::gen::SchemaGenerator::new(settings);
        Some(crate::docs::StdLibFnArg {
            name: "".to_string(),
            type_: "number".to_string(),
            schema: <f64>::json_schema(&mut generator),
            required: true,
        })
    }

    fn unpublished(&self) -> bool {
        false
    }

    fn deprecated(&self) -> bool {
        false
    }

    fn examples(&self) -> Vec<String> {
        let code_blocks = vec!["This is code.\nIt does other shit.\nimport"];
        code_blocks
            .iter()
            .map(|cb| {
                let tokens = crate::token::lexer(cb).unwrap();
                let parser = crate::parser::Parser::new(tokens);
                let program = parser.ast().unwrap();
                let mut options: crate::ast::types::FormatOptions = Default::default();
                options.insert_final_newline = false;
                program.recast(&options, 0)
            })
            .collect::<Vec<String>>()
    }

    fn std_lib_fn(&self) -> crate::std::StdFn {
        boxed_import
    }

    fn clone_box(&self) -> Box<dyn crate::docs::StdLibFn> {
        Box::new(self.clone())
    }
}

#[doc = r" This is some function."]
#[doc = r" It does shit."]
#[doc = r""]
#[doc = r"     This is code."]
#[doc = r"     It does other shit."]
#[doc = r"     import"]
fn inner_import(
    #[doc = r" The args to do shit to."] args: Option<kittycad::types::InputFormat>,
) -> Result<Box<f64>> {
    args
}
