use async_trait::async_trait;
use serde_json::Value as JsonValue;
#[derive(Debug, Clone)]
pub struct ProtocolInput {
pub openapi_spec: Option<crate::generation::OpenApiContext>,
pub config: ProtocolConfig,
pub role: crate::protocols::Role,
pub language: crate::generation::Language,
}
#[derive(Debug, Clone)]
pub struct ProtocolConfig {
pub project_name: String,
pub version: Option<String>,
pub options: std::collections::HashMap<String, JsonValue>,
}
#[async_trait]
pub trait ProtocolHandler: Send + Sync {
fn protocol(&self) -> crate::protocols::Protocol;
async fn prepare_context(
&self,
input: ProtocolInput,
) -> Result<crate::generation::GenerationContext, crate::protocols::ProtocolError>;
fn validate_configuration(
&self,
config: &ProtocolConfig,
) -> Result<(), crate::protocols::ProtocolError>;
}