use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use crate::schema::{NonEmptyString, RunxSchema};
pub const BASE_OUTPUT_FIELDS: &[&str] = &["raw", "skill_claim", "stdout", "stderr", "status"];
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
#[serde(rename_all = "lowercase")]
pub enum OutputType {
String,
Number,
Integer,
Boolean,
Array,
Object,
Null,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
#[serde(deny_unknown_fields)]
pub struct OutputFieldSpec {
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub field_type: Option<OutputType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub required: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wrap_as: Option<NonEmptyString>,
#[serde(rename = "enum", skip_serializing_if = "Option::is_none")]
pub enum_values: Option<Vec<String>>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
#[serde(untagged)]
pub enum OutputField {
Type(OutputType),
Spec(OutputFieldSpec),
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
#[serde(transparent)]
#[runx_schema(spec_id = "https://runx.ai/spec/output.schema.json")]
pub struct Output(pub BTreeMap<String, OutputField>);