use codegen::{ClassCodegen, Codegen, EnumCodegen, GetterCodegen, InterfaceCodegen, ServiceCodegen,
TupleCodegen};
use core::errors::Result;
use genco::Java;
use serialization::Serialization;
use std::mem;
pub struct Options {
pub nullable: bool,
pub immutable: bool,
pub build_setters: bool,
pub build_getters: bool,
pub build_constructor: bool,
pub build_hash_code: bool,
pub build_equals: bool,
pub build_to_string: bool,
pub uses_observer: bool,
pub serialization: Option<Serialization>,
pub async_container: Option<Java<'static>>,
pub suppress_service_methods: bool,
pub root_generators: Vec<Box<Codegen>>,
pub getter_generators: Vec<Box<GetterCodegen>>,
pub class_generators: Vec<Box<ClassCodegen>>,
pub service_generators: Vec<Box<ServiceCodegen>>,
pub tuple_generators: Vec<Box<TupleCodegen>>,
pub interface_generators: Vec<Box<InterfaceCodegen>>,
pub enum_generators: Vec<Box<EnumCodegen>>,
}
impl Options {
pub fn new() -> Self {
Self {
nullable: false,
immutable: true,
build_setters: true,
build_getters: true,
build_constructor: true,
build_hash_code: true,
build_equals: true,
build_to_string: true,
uses_observer: false,
serialization: None,
async_container: None,
suppress_service_methods: false,
root_generators: Vec::new(),
getter_generators: Vec::new(),
class_generators: Vec::new(),
service_generators: Vec::new(),
tuple_generators: Vec::new(),
interface_generators: Vec::new(),
enum_generators: Vec::new(),
}
}
pub fn serialization(&mut self, s: Serialization) -> Result<()> {
if let Some(old) = mem::replace(&mut self.serialization, Some(s)) {
return Err(format!(
"tried to set multiple serializaiton strategies: {} and {}",
old, s
).into());
}
Ok(())
}
pub fn get_serialization(&self) -> Result<Serialization> {
match self.serialization {
Some(s) => Ok(s),
None => return Err("no serialization method set".into()),
}
}
}