1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
use std::default;
use uber_api::{
create_delivery,
auth,
create_quote,
get_delivery,
update_delivery,
cancel_delivery,
list_deliveries,
pod_retrieval,
AuthRequest,
CreateDeliveryRequest,
UpdateDeliveryRequest,
CreateQuoteRequest,
PODRetrievalRequest,
models::general::{
ManifestItem,
RoboCourierSpecification,
TestSpecifications,
StructuredAddress,
VerificationRequirement,
SignatureRequirement
}
};
use clap::Parser;
#[derive(clap::StructOpt, Debug)]
#[structopt(
about = "Uber client",
name = "uber-client",
version = "0.1.0",
)]
struct CmdArgs {
#[structopt(long)]
client_id: String,
#[structopt(long)]
client_secret: String,
#[structopt(long)]
customer_id: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let CmdArgs {
client_id, client_secret, customer_id,
} = CmdArgs::parse();
println!(" client id => {}\n client_secret => {}\n customer_id => {}", client_id, client_secret, customer_id);
let auth_request = AuthRequest::new(&client_id, &client_secret);
let auth_response = auth(auth_request).await?;
let access_token = &auth_response.access_token;
println!("Access Key: => '{:#?}'", &auth_response);
// let street_address_1 = "123 Main St".to_string();
// let street_address_2 = "".to_string();
// let sublocality_level_1 = "".to_string();
// let dropoff_address = StructuredAddress {
// street_address: vec![street_address_1, street_address_2, sublocality_level_1].into_iter().filter(|s| !s.is_empty()).collect(),
// city: "San Francisco".to_string(),
// state: "CA".to_string(),
// zip_code: "94103".to_string(),
// country: Some("US".to_string()),
// };
// let body = serde_json::to_string(&dropoff_address)?;
// println!("json => {}",body);
// let dropoff_name = "Dropoff Location";
// let dropoff_phone_number = "+1-555-555-5555";
// let manifest_items = vec![ManifestItem::new("Robin", 1, "small")];
// let street_address_1 = "456 Market St".to_string();
// let street_address_2 = "".to_string();
// let sublocality_level_1 = "".to_string();
// let pickup_address = StructuredAddress {
// street_address: vec![street_address_1, street_address_2, sublocality_level_1].into_iter().filter(|s| !s.is_empty()).collect(),
// city: "San Francisco".to_string(),
// state: "CA".to_string(),
// zip_code: "94103".to_string(),
// country: Some("US".to_string()),
// ..Default::default()
// };
// let pickup_name = "Pickup Location";
// let pickup_phone_number = "+1-555-555-5555";
// let test_specifications = TestSpecifications {
// robo_courier_specification: RoboCourierSpecification {
// mode: "auto".to_owned()
// }
// };
// let dropoff_verification = VerificationRequirement{
// signature_requirement: Some(SignatureRequirement{
// enabled: true,
// collect_signer_name: true,
// collect_signer_relationship: true,
// }),
// ..Default::default()
// };
// let create_delivery_request = CreateDeliveryRequest{
// dropoff_address: serde_json::to_string(&dropoff_address).unwrap(),
// dropoff_name: dropoff_name.to_string(),
// dropoff_phone_number: dropoff_phone_number.to_string(),
// manifest_items,
// pickup_address: serde_json::to_string(&pickup_address).unwrap(),
// pickup_name: pickup_name.to_string(),
// pickup_phone_number: pickup_phone_number.to_string(),
// deliverable_action: Some("deliverable_action_meet_at_door".to_string()),
// test_specifications: Some(test_specifications),
// dropoff_verification: Some(dropoff_verification),
// undeliverable_action: Some("return".to_string()),
// ..Default::default()
// };
// let create_delivery_response = create_delivery(&access_token, &customer_id, create_delivery_request).await?;
// println!("Create Delivery Response => {:#?}", &create_delivery_response);
// let create_quote_request = CreateQuoteRequest::new(pickup_address, dropoff_address);
// let create_quote_response = create_quote(&access_token, &customer_id, create_quote_request).await?;
// println!("Create Quote Response => {:#?}", &create_quote_response);
// let delivery_id = create_delivery_response.id.unwrap();
// let get_delivery_response = get_delivery(&access_token, &customer_id, &delivery_id).await?;
// println!("Get Delivery Response => {:#?}", &get_delivery_response);
// let update_delivery_request = UpdateDeliveryRequest{
// tip_by_customer: Some(5),
// ..Default::default()
// };
// let update_delivery_response = update_delivery(&access_token, &customer_id, &delivery_id, update_delivery_request).await?;
// println!("Update Delivery Response => {:#?}", &update_delivery_response);
// let cancel_delivery_response = cancel_delivery(&access_token, &customer_id, &delivery_id).await?;
// println!("Cancel Delivery Response => {:#?}", &cancel_delivery_response);
// let list_deliveries_response = list_deliveries(&access_token, &customer_id, None, Some(1), None).await?;
// println!("List Deliveries Response => {:#?}", &list_deliveries_response);
// let pod_retrieval_request = PODRetrievalRequest {
// waypoint: "dropoff".to_string(),
// type_of_waypoint: "signature".to_string(),
// };
// let pod_retrieval_response = pod_retrieval(&access_token, &customer_id, &delivery_id, pod_retrieval_request).await?;
// println!("Pod Retrieval Response => {:#?}", &pod_retrieval_response);
Ok(())
}