use syn;
use derive_builder_core::{DeprecationNotes, BuilderPattern, Builder, BuildMethod, Bindings};
use options::DefaultExpression;
#[derive(Debug, Clone)]
pub struct StructOptions {
pub builder_ident: syn::Ident,
pub builder_visibility: syn::Visibility,
pub builder_pattern: BuilderPattern,
pub build_target_ident: syn::Ident,
pub generics: syn::Generics,
pub deprecation_notes: DeprecationNotes,
pub struct_size_hint: usize,
pub bindings: Bindings,
pub default_expression: Option<DefaultExpression>,
}
impl StructOptions {
pub fn as_builder<'a>(&'a self) -> Builder<'a> {
Builder {
enabled: true,
ident: &self.builder_ident,
generics: Some(&self.generics),
visibility: &self.builder_visibility,
fields: Vec::with_capacity(self.struct_size_hint),
functions: Vec::with_capacity(self.struct_size_hint),
doc_comment: None,
deprecation_notes: self.deprecation_notes.clone(),
}
}
pub fn as_build_method<'a>(&'a self) -> BuildMethod<'a> {
let (_impl_generics, ty_generics, _where_clause) = self.generics.split_for_impl();
BuildMethod {
enabled: true,
ident: syn::Ident::new("build"),
visibility: &self.builder_visibility,
pattern: self.builder_pattern,
target_ty: &self.build_target_ident,
target_ty_generics: Some(ty_generics),
initializers: Vec::with_capacity(self.struct_size_hint),
doc_comment: None,
bindings: self.bindings,
default_struct: self.default_expression
.as_ref()
.map(|x| { x.parse_block(self.bindings.no_std) }),
}
}
}