llama-cpp-bindings-types 0.8.0

Shared value types for llama-cpp-bindings, free of llama.cpp/FFI dependencies
Documentation
use serde::Deserialize;
use serde::Serialize;

use crate::tool_call_arguments::ToolCallArguments;

#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct ParsedToolCall {
    pub id: String,
    pub name: String,
    pub arguments: ToolCallArguments,
}

impl ParsedToolCall {
    #[must_use]
    pub const fn new(id: String, name: String, arguments: ToolCallArguments) -> Self {
        Self {
            id,
            name,
            arguments,
        }
    }
}

#[cfg(test)]
mod tests {
    use serde_json::json;

    use super::ParsedToolCall;
    use crate::tool_call_arguments::ToolCallArguments;

    #[test]
    fn new_assigns_fields_in_order() {
        let parsed = ParsedToolCall::new(
            "id-1".to_owned(),
            "tool".to_owned(),
            ToolCallArguments::ValidJson(json!({})),
        );

        assert_eq!(parsed.id, "id-1");
        assert_eq!(parsed.name, "tool");
        assert_eq!(parsed.arguments, ToolCallArguments::ValidJson(json!({})));
    }

    #[test]
    fn default_is_empty_strings_and_invalid_arguments() {
        let parsed = ParsedToolCall::default();

        assert!(parsed.id.is_empty());
        assert!(parsed.name.is_empty());
        assert_eq!(
            parsed.arguments,
            ToolCallArguments::InvalidJson(String::new())
        );
    }
}