use super::spec_parser::GraphQLSchema;
use anyhow::Result;
pub mod base;
pub mod elixir;
pub mod php;
pub mod python;
pub mod ruby;
pub mod rust;
pub mod typescript;
pub use base::sanitize_typescript_identifier;
pub use rust::RustGenerator;
pub trait GraphQLGenerator {
fn generate_types(&self, schema: &GraphQLSchema) -> Result<String>;
fn generate_resolvers(&self, schema: &GraphQLSchema) -> Result<String>;
fn generate_schema_definition(&self, schema: &GraphQLSchema) -> Result<String>;
fn generate_complete(&self, schema: &GraphQLSchema) -> Result<String> {
let types = self.generate_types(schema)?;
let resolvers = self.generate_resolvers(schema)?;
let schema_def = self.generate_schema_definition(schema)?;
Ok(format!("{types}\n{resolvers}\n{schema_def}"))
}
fn generate_type_signatures(&self, _schema: &GraphQLSchema) -> Result<String> {
anyhow::bail!("Type signature generation not supported for this language")
}
}