use camel_api::CamelError;
use camel_component_api::{Component, ComponentContext, Endpoint};
use camel_language_api::MinijinjaLimitsConfig;
use crate::config::ExternalTemplateLimitsConfig;
use crate::endpoint::TemplateEndpoint;
use crate::uri;
#[derive(Debug, Default)]
pub struct TemplateComponent {
limits: ExternalTemplateLimitsConfig,
render_limits: MinijinjaLimitsConfig,
}
impl TemplateComponent {
pub fn new(limits: ExternalTemplateLimitsConfig, render_limits: MinijinjaLimitsConfig) -> Self {
Self {
limits,
render_limits,
}
}
}
impl Component for TemplateComponent {
fn scheme(&self) -> &str {
"template"
}
fn create_endpoint(
&self,
uri_str: &str,
ctx: &dyn ComponentContext,
) -> Result<Box<dyn Endpoint>, CamelError> {
let config = uri::parse_template_uri(uri_str, self.limits.clone())?;
let limits = config.limits.resolve()?;
let route_id = ctx.route_id().unwrap_or("template-endpoint").to_string();
Ok(Box::new(TemplateEndpoint::new(
uri_str.to_string(),
config.entry_abs_path,
limits,
self.render_limits.clone(),
route_id,
)))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn component_scheme_is_template() {
let component = TemplateComponent::default();
assert_eq!(component.scheme(), "template");
}
}