use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::metadata::Metadata;
use super::null_behavior::NullBehavior;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FunctionParameter {
pub name: String,
#[serde(rename = "type")]
pub type_name: String,
#[serde(default)]
pub optional: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Function {
pub id: String,
pub function: String,
#[serde(default, rename = "type", skip_serializing_if = "Option::is_none")]
pub type_name: Option<String>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub nullable: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub parameters: Vec<FunctionParameter>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub null_behavior: Option<NullBehavior>,
#[serde(default = "default_true", skip_serializing_if = "Clone::clone")]
pub deterministic: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub non_determinism_source: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
#[serde(default, flatten)]
pub extensions: IndexMap<String, Value>,
}
fn default_true() -> bool {
true
}