Skip to content

Commit aea57b0

Browse files
author
Vsevolod
committed
fixed: error handling for all actions
1 parent 9a0921b commit aea57b0

File tree

8 files changed

+102
-62
lines changed

8 files changed

+102
-62
lines changed

module/move/gspread/src/actions/gspread.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,18 @@ mod private
3636
(
3737
String
3838
),
39+
40+
#[ error( "Invalid JSON format:\n{0}" ) ]
41+
InvalidJSON
42+
(
43+
String
44+
),
45+
46+
#[ error( "Parse error:\n{0}" ) ]
47+
ParseError
48+
(
49+
String
50+
)
3951
}
4052

4153
pub fn get_spreadsheet_id_from_url

module/move/gspread/src/actions/gspread_cells_set.rs

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
mod private
66
{
77
use crate::*;
8+
use actions::gspread::
9+
{
10+
Error,
11+
Result
12+
};
813
use google_sheets4::api::
914
{
1015
BatchUpdateValuesRequest,
@@ -29,11 +34,11 @@ mod private
2934
fn parse_json
3035
(
3136
json_str : &str
32-
) -> Result< ParsedJson, String >
37+
) -> Result< ParsedJson >
3338
{
3439
serde_json::from_str::< ParsedJson >( json_str ).map_err
3540
(
36-
| err | format!( "Failed to parse JSON: {}", err )
41+
| error | Error::InvalidJSON( format!( "Failed to parse JSON: {}", error ) )
3742
)
3843
}
3944

@@ -42,7 +47,7 @@ mod private
4247
fn check_select_row_by_key
4348
(
4449
key : &str
45-
) -> Result< (), String >
50+
) -> Result< () >
4651
{
4752
let keys = vec![ "id" ];
4853
if keys.contains( &key )
@@ -51,22 +56,28 @@ mod private
5156
}
5257
else
5358
{
54-
Err( format!( "Invalid select_row_by_key: '{}'. Allowed keys: {:?}", key, keys ) )
59+
Err
60+
(
61+
Error::ParseError( format!( "Invalid select_row_by_key: '{}'. Allowed keys: {:?}", key, keys ) )
62+
)
5563
}
5664
}
5765

5866
fn is_all_uppercase_letters
5967
(
6068
s : &str
61-
) -> Result< (), String >
69+
) -> Result< () >
6270
{
6371
if s.chars().all( | c | c.is_ascii_uppercase() )
6472
{
6573
Ok( () )
6674
}
6775
else
6876
{
69-
Err( format!( "The string '{}' contains invalid characters. Only uppercase letters (A-Z) are allowed.", s ) )
77+
Err
78+
(
79+
Error::ParseError( format!( "The string '{}' contains invalid characters. Only uppercase letters (A-Z) are allowed.", s ) )
80+
)
7081
}
7182
}
7283

@@ -77,7 +88,7 @@ mod private
7788
json_str : &str,
7889
spreadsheet_id : &str,
7990
table_name : &str
80-
) -> Result< String, String >
91+
) -> Result< String >
8192
{
8293
check_select_row_by_key( select_row_by_key )?;
8394

@@ -86,7 +97,8 @@ mod private
8697
let row_id = pairs
8798
.columns
8899
.remove( select_row_by_key )
89-
.ok_or_else( || format!( "Key '{}' not found in JSON", select_row_by_key ) )?;
100+
.ok_or_else( || Error::ParseError( format!( "Key '{}' not found in JSON", select_row_by_key ) ) )?;
101+
90102

91103
let mut value_ranges= Vec::new();
92104

@@ -112,18 +124,17 @@ mod private
112124
..Default::default()
113125
};
114126

115-
let result = hub
127+
match hub
116128
.spreadsheets()
117129
.values_batch_update( req, spreadsheet_id )
118130
.doit()
119-
.await;
120-
121-
match result
131+
.await
122132
{
123133
Ok( _ ) => Ok( format!( "Cells were sucsessfully updated!" ) ),
124-
Err( error ) => Err( format!( "{}", error ) )
134+
Err( error ) => Err( Error::ApiError( error ) )
125135
}
126136
}
137+
127138
}
128139

129140
crate::mod_interface!

module/move/gspread/src/actions/gspread_get_header.rs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ mod private
1010
use std::fmt;
1111
use crate::*;
1212
use client::SheetsType;
13-
use actions::gspread::Result;
13+
use actions::gspread::
14+
{
15+
Error,
16+
Result
17+
};
1418
use format_tools::AsTable;
1519
use util::display_table::display_header;
1620
use ser::JsonValue;
@@ -37,19 +41,27 @@ mod private
3741
(
3842
hub : &SheetsType,
3943
spreadsheet_id : &str,
40-
table_name: &str) -> Result< Vec< Vec< JsonValue > > >
44+
table_name : &str
45+
) -> Result< Vec< Vec< JsonValue > > >
4146
{
42-
let result = hub
47+
match hub
4348
.spreadsheets()
4449
.values_get( spreadsheet_id, format!( "{}!A1:Z1", table_name ).as_str() )
4550
.doit()
46-
.await?
47-
.1
48-
.values
49-
.unwrap_or_else( | | Vec::new() );
50-
51-
Ok( result )
51+
.await
52+
{
53+
Ok( ( _, response ) ) =>
54+
{
55+
match response.values
56+
{
57+
Some( values ) => Ok( values ),
58+
None => Ok( Vec::new() )
59+
}
60+
},
61+
Err( error ) => Err( Error::ApiError( error ) )
62+
}
5263
}
64+
5365
}
5466

5567
crate::mod_interface!

module/move/gspread/src/actions/gspread_get_rows.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ mod private
99
{
1010
use crate::*;
1111
use client::SheetsType;
12-
use actions::gspread::Result;
12+
use actions::gspread::
13+
{
14+
Error,
15+
Result
16+
};
1317
use ser::JsonValue;
1418

1519
pub async fn action
@@ -19,16 +23,22 @@ mod private
1923
table_name : &str
2024
) -> Result< Vec< Vec < JsonValue > > >
2125
{
22-
let result = hub
26+
match hub
2327
.spreadsheets()
2428
.values_get( spreadsheet_id, format!( "{}!A2:Z", table_name ).as_str() )
2529
.doit()
26-
.await?
27-
.1
28-
.values
29-
.unwrap_or_else( | | Vec::new() );
30-
31-
Ok( result )
30+
.await
31+
{
32+
Ok( ( _, response ) ) =>
33+
{
34+
match response.values
35+
{
36+
Some( values ) => Ok( values ),
37+
None => Ok( Vec::new() )
38+
}
39+
},
40+
Err( error ) => Err( Error::ApiError( error ) )
41+
}
3242
}
3343
}
3444

module/move/gspread/src/commands/gspread_cell.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,14 @@ mod private
6565
}
6666
};
6767

68-
let result = actions::gspread_cell_get::action
68+
match actions::gspread_cell_get::action
6969
(
7070
hub,
7171
spreadsheet_id,
7272
tab.as_str(),
7373
cel.as_str()
74-
).await;
75-
76-
match result
74+
)
75+
.await
7776
{
7877
Ok( value ) => println!( "Value: {}", value ),
7978
Err( error ) => println!( "Error: {}", error ),
@@ -92,16 +91,15 @@ mod private
9291
}
9392
};
9493

95-
let result = actions::gspread_cell_set::action
94+
match actions::gspread_cell_set::action
9695
(
9796
hub,
9897
spreadsheet_id,
9998
tab.as_str(),
10099
cel.as_str(),
101100
val.as_str()
102-
).await;
103-
104-
match result
101+
)
102+
.await
105103
{
106104
Ok( msg ) => println!( "{}", msg ),
107105
Err( error ) => println!( "Error:\n{}", error ),

module/move/gspread/src/commands/gspread_cells.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,18 @@ mod private
5151
}
5252
};
5353

54-
let result = actions::gspread_cells_set::action
54+
match actions::gspread_cells_set::action
5555
(
5656
&hub,
5757
select_row_by_key.as_str(),
5858
json.as_str(),
5959
spreadsheet_id,
6060
tab.as_str()
61-
).await;
62-
63-
match result
61+
)
62+
.await
6463
{
6564
Ok( msg ) => println!( "{}", msg ),
66-
Err( error ) => println!( "{}", error )
65+
Err( error ) => println!( "Error:\n{}", error )
6766
}
6867
}
6968
}

module/move/gspread/src/commands/gspread_header.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,13 @@ mod private
5151
}
5252
};
5353

54-
let result = actions::gspread_get_header::action
55-
(
56-
hub,
57-
spreadsheet_id,
58-
tab.as_str()
59-
).await;
60-
61-
match result
54+
match actions::gspread_get_header::action
55+
(
56+
hub,
57+
spreadsheet_id,
58+
tab.as_str()
59+
)
60+
.await
6261
{
6362
Ok( header ) =>
6463
{
@@ -67,9 +66,9 @@ mod private
6766
.map( | row | RowWrapper{ max_len: row.len(), row } )
6867
.collect();
6968

70-
println!( "Header: \n {}", Report{ rows: header_wrapped } );
69+
println!( "Header:\n{}", Report{ rows: header_wrapped } );
7170
}
72-
Err( error ) => println!( "Error: {}", error ),
71+
Err( error ) => eprintln!( "Error:\n{}", error ),
7372
}
7473
}
7574
}

module/move/gspread/src/commands/gspread_rows.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,26 +50,25 @@ mod private
5050
}
5151
};
5252

53-
let result = actions::gspread_get_rows::action
53+
match actions::gspread_get_rows::action
5454
(
5555
hub,
5656
spreadsheet_id,
5757
tab.as_str()
58-
).await;
59-
60-
match result
58+
)
59+
.await
6160
{
6261
Ok( rows ) =>
6362
{
6463
let max_len = rows.iter().map(|row| row.len()).max().unwrap_or(0);
6564
let rows_wrapped: Vec<RowWrapper> = rows
66-
.into_iter()
67-
.map(|row| RowWrapper { row, max_len })
68-
.collect();
65+
.into_iter()
66+
.map(|row| RowWrapper { row, max_len })
67+
.collect();
6968

70-
println!( "Rows: \n {}", Report{ rows: rows_wrapped } );
69+
println!( "Rows:\n{}", Report{ rows: rows_wrapped } );
7170
}
72-
Err( error ) => println!( "Error: {}", error ),
71+
Err( error ) => eprintln!( "Error:\n{}", error ),
7372
}
7473
}
7574
}

0 commit comments

Comments
 (0)