use crate::core::error::{AnthropicError, Error};
use crate::resources::messages::{ContentBlock, Message, ParsedMessage};
pub fn parse_message(message: &Message) -> Result<ParsedMessage, Error> {
let mut parsed_output = None;
for block in &message.content {
if let Some(json) = extract_json_from_block(block) {
parsed_output = Some(json);
break;
}
}
Ok(ParsedMessage {
message: message.clone(),
parsed_output,
})
}
fn extract_json_from_block(block: &ContentBlock) -> Option<serde_json::Value> {
if block.block_type != "text" {
return None;
}
let text = block.fields.get("text")?.as_str()?;
serde_json::from_str(text).ok()
}
pub fn validate_parsed_output(
value: &serde_json::Value,
_schema: &serde_json::Value,
) -> Result<(), Error> {
if value.is_null() {
return Err(Error::Anthropic(AnthropicError(
"parsed output is null".into(),
)));
}
Ok(())
}