Skip to content

Commit 1c37194

Browse files
author
Vsevolod
committed
added core types; not yet all
1 parent a9dc7b3 commit 1c37194

File tree

5 files changed

+1728
-109
lines changed

5 files changed

+1728
-109
lines changed

module/move/gspread/src/gcore/client.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ mod private
77
use std::cell::RefCell;
88
use former::Former;
99

10-
use crate::{gcore::methods::{sheet::SpreadSheetMethod, values::SpreadSheetValuesMethod}, *};
10+
use crate::{gcore::methods::{batch_update::SpreadSheetBatchUpdate, sheet::SpreadSheetMethod, values::SpreadSheetValuesMethod}, *};
1111
use gcore::Secret;
1212

1313

@@ -84,7 +84,7 @@ mod private
8484
pub endpoint : &'a str,
8585
}
8686

87-
impl< S : Secret > Client< '_, S >
87+
impl< 'a, S : Secret > Client< 'a, S >
8888
{
8989
pub fn spreadsheet( &self ) -> SpreadSheetValuesMethod< S >
9090
{
@@ -101,6 +101,19 @@ mod private
101101
client : self
102102
}
103103
}
104+
105+
pub fn batch_update< 'b >( &'a self, spreadsheet_id : &'b str ) -> SpreadSheetBatchUpdate< 'a, 'b, S >
106+
{
107+
SpreadSheetBatchUpdate
108+
{
109+
client : self,
110+
spreadsheet_id,
111+
requests : Default::default(),
112+
include_spreadsheet_in_response : Default::default(),
113+
response_ranges : Default::default(),
114+
response_include_grid_data : Default::default()
115+
}
116+
}
104117
}
105118

106119
}

module/move/gspread/src/gcore/methods.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ crate::mod_interface!
55
{
66
layer sheet;
77
layer values;
8+
layer batch_update;
89
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
mod private
2+
{
3+
use crate::{gcore::{DeleteDimensionRequest, Error, Request, Response, Result}, *};
4+
use gcore::{Secret, Client};
5+
6+
pub struct SpreadSheetBatchUpdate< 'a, 'b, S : Secret >
7+
{
8+
pub client : &'a Client< 'a, S >,
9+
pub requests : Vec< Request >,
10+
pub spreadsheet_id : &'b str,
11+
pub include_spreadsheet_in_response : bool,
12+
pub response_ranges : Vec< String >,
13+
pub response_include_grid_data : bool
14+
}
15+
16+
impl< 'a, 'b, S : Secret > SpreadSheetBatchUpdate< 'a, 'b, S >
17+
{
18+
pub fn delete_dimension
19+
(
20+
mut self,
21+
req : DeleteDimensionRequest
22+
) -> SpreadSheetBatchUpdate< 'a, 'b, S >
23+
{
24+
self.requests.push( Request::DeleteDimension( req ) );
25+
self
26+
}
27+
28+
pub async fn doit( &self ) -> Result< Response >
29+
{
30+
let endpoint = format!
31+
(
32+
"{}/{}:batchUpdate",
33+
self.client.endpoint,
34+
self.spreadsheet_id
35+
);
36+
37+
let body = BatchUpdateRequest
38+
{
39+
requests : self.requests.clone(),
40+
include_spreadsheet_in_response : self.include_spreadsheet_in_response,
41+
response_ranges : self.response_ranges.clone(),
42+
response_include_grid_data : self.response_include_grid_data
43+
};
44+
45+
let token = match &self.client.auth
46+
{
47+
Some( auth_data ) =>
48+
{
49+
let mut token_ref = auth_data.token.borrow_mut();
50+
51+
if let Some( token ) = &*token_ref
52+
{
53+
token.clone()
54+
}
55+
else
56+
{
57+
let new_token = auth_data
58+
.secret
59+
.get_token()
60+
.await
61+
.map_err( | err | Error::ApiError( err.to_string() ) )?;
62+
63+
*token_ref = Some( new_token.clone() );
64+
65+
new_token
66+
}
67+
}
68+
None => "".to_string()
69+
};
70+
71+
let response = reqwest::Client::new()
72+
.post( endpoint )
73+
.json( &body )
74+
.bearer_auth( token )
75+
.send()
76+
.await
77+
.map_err( | err | Error::ApiError( err.to_string() ) )?;
78+
79+
if !response.status().is_success()
80+
{
81+
let response_text = response
82+
.text()
83+
.await
84+
.map_err( | err | Error::ParseError( err.to_string() ) )?;
85+
86+
return Err( Error::ApiError( response_text ) );
87+
}
88+
89+
let response_parsed = response.json::< Response >()
90+
.await
91+
.map_err( | err | Error::ParseError( err.to_string() ) )?;
92+
93+
Ok( response_parsed )
94+
}
95+
}
96+
97+
#[ derive( Debug, ser::Serialize, ser::Deserialize ) ]
98+
pub struct BatchUpdateRequest
99+
{
100+
/// A list of updates to apply to the spreadsheet. Requests will be applied in the order they are specified. If any request is not valid, no requests will be applied.
101+
requests : Vec< Request >,
102+
/// Determines if the update response should include the spreadsheet resource.
103+
#[ serde( rename = "includeSpreadsheetInResponse" ) ]
104+
include_spreadsheet_in_response : bool,
105+
/// Limits the ranges included in the response spreadsheet. Meaningful only if includeSpreadsheetInResponse is 'true'.
106+
#[ serde( rename = "resoponseRanges" ) ]
107+
response_ranges : Vec< String >,
108+
/// True if grid data should be returned. Meaningful only if includeSpreadsheetInResponse is 'true'. This parameter is ignored if a field mask was set in the request.
109+
#[ serde( rename = "responseIncludeGridData" ) ]
110+
response_include_grid_data : bool
111+
}
112+
113+
#[ derive( Debug, ser::Serialize, ser::Deserialize ) ]
114+
pub struct BatchUpdateResponse
115+
{
116+
#[ serde( rename = "spreadsheetId" ) ]
117+
spreadsheet_id : Option< String >,
118+
replies : Option< Vec< Response > >,
119+
updated_spreadsheet : Option< >
120+
}
121+
}
122+
123+
crate::mod_interface!
124+
{
125+
own use
126+
{
127+
SpreadSheetBatchUpdate
128+
};
129+
}

module/move/gspread/src/gcore/methods/sheet.rs

Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -66,21 +66,6 @@ mod private
6666
_dest : dest
6767
}
6868
}
69-
70-
pub fn delete_dimension< 'a >
71-
(
72-
&'a self,
73-
spreadsheet_id : &'a str,
74-
request : DeleteDimensionRequest
75-
) -> SheetDeleteDimensionMethod< 'a, S >
76-
{
77-
SheetDeleteDimensionMethod
78-
{
79-
client : self.client,
80-
spreadsheet_id : spreadsheet_id,
81-
request : request
82-
}
83-
}
8469
}
8570

8671
/// # SheetCopyMethod
@@ -191,96 +176,13 @@ mod private
191176
}
192177
}
193178

194-
pub struct SheetDeleteDimensionMethod< 'a, S : Secret >
195-
{
196-
client : &'a Client< 'a, S >,
197-
spreadsheet_id : &'a str,
198-
request : DeleteDimensionRequest
199-
}
200-
201-
impl< S : Secret > SheetDeleteDimensionMethod< '_, S >
202-
{
203-
pub async fn doit( &self ) -> Result< Response >
204-
{
205-
let endpoint = format!
206-
(
207-
"{}/{}:batchUpdate",
208-
self.client.endpoint,
209-
self.spreadsheet_id
210-
);
211-
212-
let token = match &self.client.auth
213-
{
214-
Some( auth_data ) =>
215-
{
216-
let mut token_ref = auth_data.token.borrow_mut();
217-
218-
if let Some( token ) = &*token_ref
219-
{
220-
token.clone()
221-
}
222-
else
223-
{
224-
let new_token = auth_data
225-
.secret
226-
.get_token()
227-
.await
228-
.map_err( | err | Error::ApiError( err.to_string() ) )?;
229-
230-
*token_ref = Some( new_token.clone() );
231-
232-
new_token
233-
}
234-
}
235-
None => "".to_string()
236-
};
237-
238-
let response = reqwest::Client::new()
239-
.post( endpoint )
240-
.json( &self.request )
241-
.bearer_auth( token )
242-
.send()
243-
.await
244-
.map_err( | err | Error::ApiError( err.to_string() ) )?;
245-
246-
let response_parsed = response.json::< Response >()
247-
.await
248-
.map_err( | err | Error::ParseError( err.to_string() ) )?;
249-
250-
Ok( response_parsed )
251-
}
252-
}
253-
254179
#[ derive( Debug, ser::Serialize, ser::Deserialize ) ]
255180
pub struct BatchUpdateResponse
256181
{
257182
#[ serde( rename = "spreadsheetId" ) ]
258183
spreadsheet_id : Option< String >,
259184
}
260185

261-
#[ derive( Debug, ser::Serialize, ser::Deserialize ) ]
262-
pub enum Request
263-
{
264-
#[ serde( rename = "deleteDimension" ) ]
265-
DeleteDimension( DeleteDimensionRequest )
266-
}
267-
268-
#[ derive( Debug, ser::Serialize, ser::Deserialize ) ]
269-
pub struct BatchUpdateRequest
270-
{
271-
/// A list of updates to apply to the spreadsheet. Requests will be applied in the order they are specified. If any request is not valid, no requests will be applied.
272-
requests : Vec< Request >,
273-
/// Determines if the update response should include the spreadsheet resource.
274-
#[ serde( rename = "includeSpreadsheetInResponse" ) ]
275-
include_spreadsheet_in_response : bool,
276-
/// Limits the ranges included in the response spreadsheet. Meaningful only if includeSpreadsheetInResponse is 'true'.
277-
#[ serde( rename = "resoponseRanges" ) ]
278-
response_ranges : Vec< String >,
279-
/// True if grid data should be returned. Meaningful only if includeSpreadsheetInResponse is 'true'. This parameter is ignored if a field mask was set in the request.
280-
#[ serde( rename = "responseIncludeGridData" ) ]
281-
response_include_grid_data : bool
282-
}
283-
284186
#[ derive( Debug, ser::Serialize, ser::Deserialize ) ]
285187
pub struct SheetCopyRequest
286188
{

0 commit comments

Comments
 (0)