use rmcp::schemars;
use serde::Deserialize;
use serde_json::json;
use spider_transformations::transformation::content::{
transform_content_input, ReturnFormat, TransformConfig, TransformInput,
};
#[derive(Deserialize, schemars::JsonSchema)]
pub struct TransformParams {
pub html: String,
pub return_format: String,
pub url: Option<String>,
}
pub fn run(params: TransformParams) -> Result<String, String> {
let parsed_url = params
.url
.as_ref()
.and_then(|u| spider::url::Url::parse(u).ok());
let input = TransformInput {
url: parsed_url.as_ref(),
content: params.html.as_bytes(),
screenshot_bytes: None,
encoding: None,
selector_config: None,
ignore_tags: None,
};
let conf = TransformConfig {
return_format: ReturnFormat::from_str(¶ms.return_format),
..Default::default()
};
let content = transform_content_input(input, &conf);
serde_json::to_string_pretty(&json!({
"content": content,
"format": params.return_format,
}))
.map_err(|e| e.to_string())
}