|
1 | 1 | use crate::impl_type_option; |
2 | 2 | use crate::services::field::{BoxTypeOptionBuilder, TypeOptionBuilder}; |
3 | | -use crate::services::row::{CellContentChangeset, CellDataOperation, DecodedCellData, TypeOptionCellData}; |
| 3 | +use crate::services::row::{CellContentChangeset, CellDataOperation, DecodedCellData}; |
4 | 4 | use bytes::Bytes; |
5 | 5 | use flowy_derive::ProtoBuf; |
6 | | -use flowy_error::FlowyError; |
| 6 | +use flowy_error::{FlowyError, FlowyResult}; |
7 | 7 | use flowy_grid_data_model::entities::{ |
8 | 8 | CellMeta, FieldMeta, FieldType, TypeOptionDataDeserializer, TypeOptionDataEntry, |
9 | 9 | }; |
10 | 10 |
|
11 | 11 | use serde::{Deserialize, Serialize}; |
12 | | -use std::str::FromStr; |
13 | 12 |
|
14 | 13 | #[derive(Default)] |
15 | 14 | pub struct CheckboxTypeOptionBuilder(CheckboxTypeOption); |
@@ -43,23 +42,26 @@ impl_type_option!(CheckboxTypeOption, FieldType::Checkbox); |
43 | 42 | const YES: &str = "Yes"; |
44 | 43 | const NO: &str = "No"; |
45 | 44 |
|
46 | | -impl CellDataOperation<String> for CheckboxTypeOption { |
47 | | - fn decode_cell_data<T: Into<TypeOptionCellData>>( |
| 45 | +impl CellDataOperation<String, String> for CheckboxTypeOption { |
| 46 | + fn decode_cell_data<T>( |
48 | 47 | &self, |
49 | | - type_option_cell_data: T, |
| 48 | + encoded_data: T, |
50 | 49 | decoded_field_type: &FieldType, |
51 | 50 | _field_meta: &FieldMeta, |
52 | | - ) -> DecodedCellData { |
53 | | - let type_option_cell_data = type_option_cell_data.into(); |
| 51 | + ) -> FlowyResult<DecodedCellData> |
| 52 | + where |
| 53 | + T: Into<String>, |
| 54 | + { |
54 | 55 | if !decoded_field_type.is_checkbox() { |
55 | | - return DecodedCellData::default(); |
| 56 | + return Ok(DecodedCellData::default()); |
56 | 57 | } |
57 | | - let cell_data = type_option_cell_data.data; |
58 | | - if cell_data == YES || cell_data == NO { |
59 | | - return DecodedCellData::from_content(cell_data); |
| 58 | + |
| 59 | + let encoded_data = encoded_data.into(); |
| 60 | + if encoded_data == YES || encoded_data == NO { |
| 61 | + return Ok(DecodedCellData::from_content(encoded_data)); |
60 | 62 | } |
61 | 63 |
|
62 | | - DecodedCellData::default() |
| 64 | + Ok(DecodedCellData::default()) |
63 | 65 | } |
64 | 66 |
|
65 | 67 | fn apply_changeset<C>(&self, changeset: C, _cell_meta: Option<CellMeta>) -> Result<String, FlowyError> |
@@ -91,60 +93,48 @@ fn string_to_bool(bool_str: &str) -> bool { |
91 | 93 | #[cfg(test)] |
92 | 94 | mod tests { |
93 | 95 | use crate::services::field::type_options::checkbox_type_option::{NO, YES}; |
94 | | - use crate::services::field::CheckboxTypeOption; |
| 96 | + |
95 | 97 | use crate::services::field::FieldBuilder; |
96 | | - use crate::services::row::{apply_cell_data_changeset, decode_cell_data, CellDataOperation}; |
97 | | - use diesel::types::IsNull::No; |
| 98 | + use crate::services::row::{apply_cell_data_changeset, decode_cell_data_from_type_option_cell_data}; |
| 99 | + |
98 | 100 | use flowy_grid_data_model::entities::FieldType; |
99 | 101 |
|
100 | 102 | #[test] |
101 | 103 | fn checkout_box_description_test() { |
102 | 104 | let field_meta = FieldBuilder::from_field_type(&FieldType::Checkbox).build(); |
103 | 105 | let data = apply_cell_data_changeset("true", None, &field_meta).unwrap(); |
104 | 106 | assert_eq!( |
105 | | - decode_cell_data(data, &field_meta, &field_meta.field_type) |
106 | | - .unwrap() |
107 | | - .content, |
| 107 | + decode_cell_data_from_type_option_cell_data(data, &field_meta, &field_meta.field_type).content, |
108 | 108 | YES |
109 | 109 | ); |
110 | 110 |
|
111 | 111 | let data = apply_cell_data_changeset("1", None, &field_meta).unwrap(); |
112 | 112 | assert_eq!( |
113 | | - decode_cell_data(data, &field_meta, &field_meta.field_type) |
114 | | - .unwrap() |
115 | | - .content, |
| 113 | + decode_cell_data_from_type_option_cell_data(data, &field_meta, &field_meta.field_type).content, |
116 | 114 | YES |
117 | 115 | ); |
118 | 116 |
|
119 | 117 | let data = apply_cell_data_changeset("yes", None, &field_meta).unwrap(); |
120 | 118 | assert_eq!( |
121 | | - decode_cell_data(data, &field_meta, &field_meta.field_type) |
122 | | - .unwrap() |
123 | | - .content, |
| 119 | + decode_cell_data_from_type_option_cell_data(data, &field_meta, &field_meta.field_type).content, |
124 | 120 | YES |
125 | 121 | ); |
126 | 122 |
|
127 | 123 | let data = apply_cell_data_changeset("false", None, &field_meta).unwrap(); |
128 | 124 | assert_eq!( |
129 | | - decode_cell_data(data, &field_meta, &field_meta.field_type) |
130 | | - .unwrap() |
131 | | - .content, |
| 125 | + decode_cell_data_from_type_option_cell_data(data, &field_meta, &field_meta.field_type).content, |
132 | 126 | NO |
133 | 127 | ); |
134 | 128 |
|
135 | 129 | let data = apply_cell_data_changeset("no", None, &field_meta).unwrap(); |
136 | 130 | assert_eq!( |
137 | | - decode_cell_data(data, &field_meta, &field_meta.field_type) |
138 | | - .unwrap() |
139 | | - .content, |
| 131 | + decode_cell_data_from_type_option_cell_data(data, &field_meta, &field_meta.field_type).content, |
140 | 132 | NO |
141 | 133 | ); |
142 | 134 |
|
143 | 135 | let data = apply_cell_data_changeset("12", None, &field_meta).unwrap(); |
144 | 136 | assert_eq!( |
145 | | - decode_cell_data(data, &field_meta, &field_meta.field_type) |
146 | | - .unwrap() |
147 | | - .content, |
| 137 | + decode_cell_data_from_type_option_cell_data(data, &field_meta, &field_meta.field_type).content, |
148 | 138 | NO |
149 | 139 | ); |
150 | 140 | } |
|
0 commit comments