enum_template.rs 1021 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. use crate::proto::ast::FlowyEnum;
  2. use crate::util::get_tera;
  3. use tera::Context;
  4. pub struct EnumTemplate {
  5. context: Context,
  6. items: Vec<String>,
  7. }
  8. #[allow(dead_code)]
  9. impl EnumTemplate {
  10. pub fn new() -> Self {
  11. EnumTemplate {
  12. context: Context::new(),
  13. items: vec![],
  14. }
  15. }
  16. pub fn set_message_enum(&mut self, flowy_enum: &FlowyEnum) {
  17. self.context.insert("enum_name", &flowy_enum.name);
  18. flowy_enum.attrs.iter().for_each(|item| {
  19. self.items.push(format!(
  20. "{} = {};",
  21. item.attrs.enum_item_name, item.attrs.value
  22. ))
  23. })
  24. }
  25. pub fn render(&mut self) -> Option<String> {
  26. self.context.insert("items", &self.items);
  27. let tera = get_tera("proto/template/proto_file");
  28. match tera.render("enum.tera", &self.context) {
  29. Ok(r) => Some(r),
  30. Err(e) => {
  31. log::error!("{:?}", e);
  32. None
  33. }
  34. }
  35. }
  36. }