@@ -3,6 +3,7 @@ use std::collections::{btree_map::Entry, BTreeMap};
33use anyhow:: Context ;
44use chrono:: { NaiveDate , Utc } ;
55use serde:: Serialize ;
6+ use sheets:: types:: GridData ;
67use tracing:: warn;
78
89use crate :: {
@@ -37,42 +38,13 @@ pub async fn get_mentoring_records(
3738 client : SheetsClient ,
3839 mentoring_records_sheet_id : & str ,
3940) -> Result < MentoringRecords , Error > {
40- let data = client
41- . get ( mentoring_records_sheet_id, true , & [ ] )
42- . await
43- . map_err ( |err| {
44- err. with_context ( || {
45- format ! (
46- "Failed to get spreadsheet with ID {}" ,
47- mentoring_records_sheet_id
48- )
49- } )
50- } ) ?;
51- let expected_sheet_title = "Feedback" ;
52- let sheet = data
53- . body
54- . sheets
55- . into_iter ( )
56- . find ( |sheet| {
57- sheet
58- . properties
59- . as_ref ( )
60- . map ( |properties| properties. title . as_str ( ) )
61- == Some ( expected_sheet_title)
62- } )
63- . ok_or_else ( || {
64- Error :: Fatal ( anyhow:: anyhow!(
65- "Couldn't find sheet '{}' in spreadsheet with ID {}" ,
66- expected_sheet_title,
67- mentoring_records_sheet_id
68- ) )
69- } ) ?;
41+ let sheet_data = get_mentoring_records_grid_data ( client, mentoring_records_sheet_id) . await ?;
7042
7143 let mut mentoring_records = MentoringRecords {
7244 records : BTreeMap :: new ( ) ,
7345 } ;
7446
75- for sheet_data in sheet . data {
47+ for sheet_data in sheet_data {
7648 if sheet_data. start_column != 0 || sheet_data. start_row != 0 {
7749 return Err ( Error :: Fatal ( anyhow:: anyhow!(
7850 "Start column and row were {} and {}, expected 0 and 0" ,
@@ -124,3 +96,45 @@ pub async fn get_mentoring_records(
12496 }
12597 Ok ( mentoring_records)
12698}
99+
100+ async fn get_mentoring_records_grid_data (
101+ client : SheetsClient ,
102+ mentoring_records_sheet_id : & str ,
103+ ) -> Result < Vec < GridData > , Error > {
104+ let data_result = client. get ( mentoring_records_sheet_id, true , & [ ] ) . await ;
105+ let data = match data_result {
106+ Ok ( data) => data,
107+ Err ( Error :: PotentiallyIgnorablePermissions ( _) ) => {
108+ return Ok ( Vec :: new ( ) ) ;
109+ }
110+ Err ( err) => {
111+ let err = err. with_context ( || {
112+ format ! (
113+ "Failed to get spreadsheet with ID {}" ,
114+ mentoring_records_sheet_id
115+ )
116+ } ) ;
117+ return Err ( err) ;
118+ }
119+ } ;
120+ let expected_sheet_title = "Feedback" ;
121+ let sheet = data
122+ . body
123+ . sheets
124+ . into_iter ( )
125+ . find ( |sheet| {
126+ sheet
127+ . properties
128+ . as_ref ( )
129+ . map ( |properties| properties. title . as_str ( ) )
130+ == Some ( expected_sheet_title)
131+ } )
132+ . ok_or_else ( || {
133+ Error :: Fatal ( anyhow:: anyhow!(
134+ "Couldn't find sheet '{}' in spreadsheet with ID {}" ,
135+ expected_sheet_title,
136+ mentoring_records_sheet_id
137+ ) )
138+ } ) ?;
139+ Ok ( sheet. data )
140+ }
0 commit comments