MCPcopy Create free account
hub / github.com/AppFlowy-IO/AppFlowy-Collab / try_from_reader

Method try_from_reader

collab/src/database/template/csv.rs:34–78  ·  view source on GitHub ↗
(
    reader: impl io::Read,
    auto_field_type: bool,
    mut csv_resource: Option<CSVResource>,
  )

Source from the content-addressed store, hash-verified

32
33impl CSVTemplate {
34 pub fn try_from_reader(
35 reader: impl io::Read,
36 auto_field_type: bool,
37 mut csv_resource: Option<CSVResource>,
38 ) -> Result<Self, CollabError> {
39 let mut fields: Vec<CSVField> = vec![];
40
41 let mut reader = csv::Reader::from_reader(reader);
42 if let Ok(headers) = reader.headers() {
43 for header in headers {
44 fields.push(CSVField {
45 name: header.to_string(),
46 field_type: FieldType::RichText,
47 });
48 }
49 } else {
50 return Err(CollabError::DatabaseInvalidCsv("No header".to_string()));
51 }
52
53 let rows: Vec<Vec<String>> = reader
54 .records()
55 .flat_map(|r| r.ok())
56 .map(|record| {
57 record
58 .into_iter()
59 .filter_map(|s| Some(percent_decode_str(s).decode_utf8().ok()?.to_string()))
60 .collect::<Vec<String>>()
61 })
62 .collect();
63
64 if auto_field_type {
65 auto_detect_field_type(&mut fields, &rows, &csv_resource);
66 }
67
68 // filter out resources that are not used
69 filter_out_resources(&fields, &rows, &mut csv_resource);
70
71 Ok(CSVTemplate {
72 fields,
73 rows,
74 resource: csv_resource,
75 database_id: gen_database_id(),
76 view_id: gen_database_view_id(),
77 })
78 }
79
80 pub fn reset_view_id(&mut self, view_id: DatabaseViewId) {
81 self.view_id = view_id;

Callers

nothing calls this directly

Calls 6

auto_detect_field_typeFunction · 0.85
filter_out_resourcesFunction · 0.85
gen_database_idFunction · 0.85
gen_database_view_idFunction · 0.85
into_iterMethod · 0.80
pushMethod · 0.45

Tested by

no test coverage detected