view.rs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. use crate::entities::view::{View, ViewDataType};
  2. use crate::entities::{RepeatedView, TrashType, ViewExtData, ViewFilter, ViewGroup, ViewSort};
  3. use crate::revision::TrashRevision;
  4. use serde::{Deserialize, Serialize};
  5. #[derive(Default, Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
  6. pub struct ViewRevision {
  7. pub id: String,
  8. pub belong_to_id: String,
  9. pub name: String,
  10. pub desc: String,
  11. #[serde(default)]
  12. pub data_type: ViewDataType,
  13. pub version: i64,
  14. pub belongings: Vec<ViewRevision>,
  15. pub modified_time: i64,
  16. pub create_time: i64,
  17. #[serde(default)]
  18. pub ext_data: String,
  19. #[serde(default)]
  20. pub thumbnail: String,
  21. #[serde(default = "default_plugin_type")]
  22. pub plugin_type: i32,
  23. }
  24. fn default_plugin_type() -> i32 {
  25. 0
  26. }
  27. impl std::convert::From<ViewRevision> for View {
  28. fn from(view_serde: ViewRevision) -> Self {
  29. View {
  30. id: view_serde.id,
  31. belong_to_id: view_serde.belong_to_id,
  32. name: view_serde.name,
  33. data_type: view_serde.data_type,
  34. modified_time: view_serde.modified_time,
  35. create_time: view_serde.create_time,
  36. plugin_type: view_serde.plugin_type,
  37. }
  38. }
  39. }
  40. impl std::convert::From<ViewRevision> for TrashRevision {
  41. fn from(view_rev: ViewRevision) -> Self {
  42. TrashRevision {
  43. id: view_rev.id,
  44. name: view_rev.name,
  45. modified_time: view_rev.modified_time,
  46. create_time: view_rev.create_time,
  47. ty: TrashType::TrashView,
  48. }
  49. }
  50. }
  51. #[derive(Serialize, Deserialize)]
  52. pub struct ViewExtDataRevision {
  53. pub filter: ViewFilterRevision,
  54. pub group: ViewGroupRevision,
  55. pub sort: ViewSortRevision,
  56. }
  57. #[derive(Serialize, Deserialize)]
  58. pub struct ViewFilterRevision {
  59. pub field_id: String,
  60. }
  61. #[derive(Serialize, Deserialize)]
  62. pub struct ViewGroupRevision {
  63. pub group_field_id: String,
  64. pub sub_group_field_id: Option<String>,
  65. }
  66. #[derive(Serialize, Deserialize)]
  67. pub struct ViewSortRevision {
  68. field_id: String,
  69. }
  70. impl std::convert::From<String> for ViewExtData {
  71. fn from(s: String) -> Self {
  72. match serde_json::from_str::<ViewExtDataRevision>(&s) {
  73. Ok(data) => data.into(),
  74. Err(err) => {
  75. log::error!("{:?}", err);
  76. ViewExtData::default()
  77. }
  78. }
  79. }
  80. }
  81. impl std::convert::From<ViewExtDataRevision> for ViewExtData {
  82. fn from(rev: ViewExtDataRevision) -> Self {
  83. ViewExtData {
  84. filter: rev.filter.into(),
  85. group: rev.group.into(),
  86. sort: rev.sort.into(),
  87. }
  88. }
  89. }
  90. impl std::convert::From<ViewFilterRevision> for ViewFilter {
  91. fn from(rev: ViewFilterRevision) -> Self {
  92. ViewFilter { field_id: rev.field_id }
  93. }
  94. }
  95. impl std::convert::From<ViewGroupRevision> for ViewGroup {
  96. fn from(rev: ViewGroupRevision) -> Self {
  97. ViewGroup {
  98. group_field_id: rev.group_field_id,
  99. sub_group_field_id: rev.sub_group_field_id,
  100. }
  101. }
  102. }
  103. impl std::convert::From<ViewSortRevision> for ViewSort {
  104. fn from(rev: ViewSortRevision) -> Self {
  105. ViewSort { field_id: rev.field_id }
  106. }
  107. }
  108. impl std::convert::From<Vec<ViewRevision>> for RepeatedView {
  109. fn from(values: Vec<ViewRevision>) -> Self {
  110. let items = values.into_iter().map(|value| value.into()).collect::<Vec<View>>();
  111. RepeatedView { items }
  112. }
  113. }