headless_lms_chatbot/chatbot_tools/
argument_parsing.rs1use std::str::FromStr;
4
5use serde::{Deserialize, Deserializer};
6use uuid::Uuid;
7
8use crate::prelude::{BackendError, ChatbotError, ChatbotErrorType, ChatbotResult, chatbot_err};
9
10pub fn deserialize_to_optional_uuid_and_errors_to_none<'de, D>(
16 deserializer: D,
17) -> Result<Option<Uuid>, D::Error>
18where
19 D: Deserializer<'de>,
20{
21 let res = String::deserialize(deserializer)
22 .ok()
23 .and_then(|s| Uuid::from_str(&s).ok());
24 Ok(res)
25}
26
27pub fn parse_required_uuid(field_name: &str, value: &str) -> ChatbotResult<Uuid> {
30 Uuid::from_str(value).map_err(|e| {
31 chatbot_err!(
32 InvalidToolArguments,
33 format!("'{value}' is not a valid {field_name} (UUID)."),
34 e
35 )
36 })
37}