use serde::{Deserialize, Serialize};
use std::fmt::Display;
use crate::macros::{
impl_display_for_serialize, impl_enum_string_serialization,
};
#[derive(Debug, Default, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct Tool {
#[serde(rename = "type")]
pub _type: ToolType,
pub function: Function,
}
impl_display_for_serialize!(Tool);
impl Tool {
pub fn new(function: Function) -> Self {
Self {
_type: ToolType::Function,
function,
}
}
}
impl From<Function> for Tool {
fn from(value: Function) -> Self {
Self::new(value)
}
}
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub enum ToolType {
Function,
}
impl Default for ToolType {
fn default() -> Self {
ToolType::Function
}
}
impl Display for ToolType {
fn fmt(
&self,
f: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
match self {
| ToolType::Function => {
write!(f, "function")
},
}
}
}
impl_enum_string_serialization!(
ToolType,
Function => "function"
);
#[derive(Debug, Default, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct Function {
pub description: Option<String>,
pub name: String,
pub parameters: Option<serde_json::Map<String, serde_json::Value>>,
}
impl_display_for_serialize!(Function);