use std::collections::HashMap;
use super::CustomParamType;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct FunctionParameterDescription {
#[serde(rename = "title", skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(rename = "default", skip_serializing_if = "Option::is_none")]
pub default: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct FunctionParameters {
#[serde(rename = "custom_params", flatten)]
pub custom_params: ::std::collections::HashMap<String, FunctionParameterDescription>,
}
impl FunctionParameters {
pub fn new(
custom_params: ::std::collections::HashMap<String, FunctionParameterDescription>,
) -> FunctionParameters {
FunctionParameters {
custom_params,
}
}
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct FunctionParamsBuilder {
params: FunctionParameters,
}
impl Default for FunctionParamsBuilder {
fn default() -> Self {
Self::new()
}
}
impl FunctionParamsBuilder {
pub fn new() -> FunctionParamsBuilder {
let custom_params = HashMap::<String, FunctionParameterDescription>::new();
FunctionParamsBuilder {
params: FunctionParameters::new(custom_params),
}
}
pub fn max_inputs(self, _max_inputs: i32) -> Self {
self
}
pub fn max_outputs(self, _max_outputs: i32) -> Self {
self
}
pub fn custom_param<S: Into<String>>(
mut self,
name: S,
title: S,
r#type: CustomParamType,
default: Option<S>,
) -> Self {
let param = FunctionParameterDescription {
title: Some(title.into()),
default: default.map(|x| x.into()),
r#type: Some(r#type.to_string()),
};
self.params.custom_params.insert(name.into(), param);
self
}
pub fn build(self) -> FunctionParameters {
self.params
}
}