view_update.rs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. use crate::{
  2. entities::view::parser::{ViewId, *},
  3. errors::WorkspaceError,
  4. };
  5. use flowy_derive::ProtoBuf;
  6. use flowy_document::entities::doc::{DocChangeset, UpdateDocParams};
  7. use std::convert::TryInto;
  8. #[derive(Default, ProtoBuf)]
  9. pub struct UpdateViewRequest {
  10. #[pb(index = 1)]
  11. pub view_id: String,
  12. #[pb(index = 2, one_of)]
  13. pub name: Option<String>,
  14. #[pb(index = 3, one_of)]
  15. pub desc: Option<String>,
  16. #[pb(index = 4, one_of)]
  17. pub thumbnail: Option<String>,
  18. #[pb(index = 5, one_of)]
  19. pub is_trash: Option<bool>,
  20. }
  21. #[derive(Default, ProtoBuf, Clone, Debug)]
  22. pub struct UpdateViewParams {
  23. #[pb(index = 1)]
  24. pub view_id: String,
  25. #[pb(index = 2, one_of)]
  26. pub name: Option<String>,
  27. #[pb(index = 3, one_of)]
  28. pub desc: Option<String>,
  29. #[pb(index = 4, one_of)]
  30. pub thumbnail: Option<String>,
  31. #[pb(index = 5, one_of)]
  32. pub is_trash: Option<bool>,
  33. }
  34. impl UpdateViewParams {
  35. pub fn new(view_id: &str) -> Self {
  36. Self {
  37. view_id: view_id.to_owned(),
  38. ..Default::default()
  39. }
  40. }
  41. pub fn trash(mut self) -> Self {
  42. self.is_trash = Some(true);
  43. self
  44. }
  45. pub fn name(mut self, name: &str) -> Self {
  46. self.name = Some(name.to_owned());
  47. self
  48. }
  49. pub fn desc(mut self, desc: &str) -> Self {
  50. self.desc = Some(desc.to_owned());
  51. self
  52. }
  53. }
  54. impl TryInto<UpdateViewParams> for UpdateViewRequest {
  55. type Error = WorkspaceError;
  56. fn try_into(self) -> Result<UpdateViewParams, Self::Error> {
  57. let view_id = ViewId::parse(self.view_id).map_err(|e| WorkspaceError::view_id().context(e))?.0;
  58. let name = match self.name {
  59. None => None,
  60. Some(name) => Some(ViewName::parse(name).map_err(|e| WorkspaceError::view_name().context(e))?.0),
  61. };
  62. let desc = match self.desc {
  63. None => None,
  64. Some(desc) => Some(ViewDesc::parse(desc).map_err(|e| WorkspaceError::view_desc().context(e))?.0),
  65. };
  66. let thumbnail = match self.thumbnail {
  67. None => None,
  68. Some(thumbnail) => Some(
  69. ViewThumbnail::parse(thumbnail)
  70. .map_err(|e| WorkspaceError::view_thumbnail().context(e))?
  71. .0,
  72. ),
  73. };
  74. Ok(UpdateViewParams {
  75. view_id,
  76. name,
  77. desc,
  78. thumbnail,
  79. is_trash: self.is_trash,
  80. })
  81. }
  82. }
  83. #[derive(Default, ProtoBuf)]
  84. pub struct SaveViewDataRequest {
  85. #[pb(index = 1)]
  86. pub view_id: String,
  87. #[pb(index = 2)]
  88. pub data: Vec<u8>,
  89. }
  90. impl TryInto<UpdateDocParams> for SaveViewDataRequest {
  91. type Error = WorkspaceError;
  92. fn try_into(self) -> Result<UpdateDocParams, Self::Error> {
  93. let view_id = ViewId::parse(self.view_id).map_err(|e| WorkspaceError::view_id().context(e))?.0;
  94. // Opti: Vec<u8> -> Delta -> Vec<u8>
  95. let data = DeltaData::parse(self.data).map_err(|e| WorkspaceError::view_data().context(e))?.0;
  96. Ok(UpdateDocParams {
  97. id: view_id,
  98. doc_data: data,
  99. })
  100. }
  101. }
  102. #[derive(Default, ProtoBuf)]
  103. pub struct ApplyChangesetRequest {
  104. #[pb(index = 1)]
  105. pub view_id: String,
  106. #[pb(index = 2)]
  107. pub data: Vec<u8>,
  108. }
  109. impl TryInto<DocChangeset> for ApplyChangesetRequest {
  110. type Error = WorkspaceError;
  111. fn try_into(self) -> Result<DocChangeset, Self::Error> {
  112. let view_id = ViewId::parse(self.view_id).map_err(|e| WorkspaceError::view_id().context(e))?.0;
  113. // Opti: Vec<u8> -> Delta -> Vec<u8>
  114. let data = DeltaData::parse(self.data).map_err(|e| WorkspaceError::view_data().context(e))?.0;
  115. Ok(DocChangeset { id: view_id, data })
  116. }
  117. }