field_builder.rs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. use flowy_grid_data_model::entities::{FieldMeta, FieldType};
  2. pub struct FieldBuilder {
  3. field_meta: FieldMeta,
  4. type_options_builder: Box<dyn TypeOptionsBuilder>,
  5. }
  6. impl FieldBuilder {
  7. pub fn new<T: TypeOptionsBuilder + 'static>(type_options_builder: T) -> Self {
  8. let field_meta = FieldMeta::new("Name", "", FieldType::RichText);
  9. Self {
  10. field_meta,
  11. type_options_builder: Box::new(type_options_builder),
  12. }
  13. }
  14. pub fn name(mut self, name: &str) -> Self {
  15. self.field_meta.name = name.to_owned();
  16. self
  17. }
  18. pub fn desc(mut self, desc: &str) -> Self {
  19. self.field_meta.desc = desc.to_owned();
  20. self
  21. }
  22. pub fn field_type(mut self, field_type: FieldType) -> Self {
  23. self.field_meta.field_type = field_type;
  24. self
  25. }
  26. pub fn visibility(mut self, visibility: bool) -> Self {
  27. self.field_meta.visibility = visibility;
  28. self
  29. }
  30. pub fn width(mut self, width: i32) -> Self {
  31. self.field_meta.width = width;
  32. self
  33. }
  34. pub fn frozen(mut self, frozen: bool) -> Self {
  35. self.field_meta.frozen = frozen;
  36. self
  37. }
  38. pub fn build(mut self) -> FieldMeta {
  39. assert_eq!(self.field_meta.field_type, self.type_options_builder.field_type());
  40. let type_options = self.type_options_builder.build();
  41. self.field_meta.type_option = type_options;
  42. self.field_meta
  43. }
  44. }
  45. pub trait TypeOptionsBuilder {
  46. fn field_type(&self) -> FieldType;
  47. fn build(&self) -> String;
  48. }