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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
//! Aliyun OpenAPI POP core SDK for Rust.
//!
//! ## Notes
//!
//! You must know your `AK`(`accessKeyId/accessKeySecret`), and the aliyun product's `endpoint` and `apiVersion`.
//!
//! For example, The [ECS OpenAPI](https://help.aliyun.com/document_detail/25490.html), the API version is `2014-05-26`.
//!
//! And the endpoint list can be found at [here](https://help.aliyun.com/document_detail/25489.html), the center endpoint is ecs.aliyuncs.com. Add http protocol `http` or `https`, should be `https://ecs.aliyuncs.com/`.
//!
//! ## Install
//!
//! Run the following Cargo command in your project directory:
//!
//! ```shell
//! cargo add aliyun-openapi-core-rust-sdk
//! ```
//!
//! Or add the following line to your Cargo.toml:
//!
//! ```toml
//! aliyun-openapi-core-rust-sdk = "1.0.0"
//! ```
//!
//! ## Usage
//!
//! The RPC style client:
//!
//! ```rust
//! use std::collections::HashMap;
//! use std::env;
//! use std::error::Error;
//!
//! use aliyun_openapi_core_rust_sdk::client::rpc::RPClient;
//! use serde::{Deserialize, Serialize};
//!
//! #[derive(Serialize, Deserialize, Debug)]
//! #[serde(rename_all = "PascalCase")]
//! struct Region {
//!     region_id: String,
//!     region_endpoint: String,
//!     local_name: String,
//! }
//!
//! #[derive(Serialize, Deserialize, Debug)]
//! #[serde(rename_all = "PascalCase")]
//! struct RegionList {
//!     request_id: String,
//!     regions: HashMap<String, Vec<Region>>,
//! }
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn Error>> {
//!     // create rpc style api client.
//!     let aliyun_openapi_client = RPClient::new(
//!         env::var("ACCESS_KEY_ID")?,
//!         env::var("ACCESS_KEY_SECRET")?,
//!         "https://ecs.aliyuncs.com/",
//!     );
//!
//!     // call `DescribeRegions` with empty queries, return `RegionList`
//!     let response = aliyun_openapi_client
//!         .clone()
//!         .version("2014-05-26")
//!         .get("DescribeRegions")
//!         .json::<RegionList>()
//!         .await?;
//!     println!("DescribeRegions response: {response:#?}");
//!
//!     // call `DescribeInstances` with queries, return `String`
//!     let response = aliyun_openapi_client
//!         .version("2014-05-26")
//!         .get("DescribeInstances")
//!         .query([("RegionId", "cn-hangzhou")])
//!         .text()
//!         .await?;
//!     println!("DescribeInstances response: {response}");
//!
//!     Ok(())
//! }
//! ```
//!
//! The ROA style client:
//!
//! ```rust
//! use std::collections::HashMap;
//! use std::env;
//! use std::error::Error;
//!
//! use aliyun_openapi_core_rust_sdk::client::roa::ROAClient;
//! use serde::{Deserialize, Serialize};
//! use serde_json::json;
//!
//! #[derive(Serialize, Deserialize, Debug)]
//! #[serde(rename_all = "PascalCase")]
//! struct TranslateData {
//!     word_count: String,
//!     translated: String,
//! }
//!
//! #[derive(Serialize, Deserialize, Debug)]
//! #[serde(rename_all = "PascalCase")]
//! struct Translate {
//!     request_id: String,
//!     data: TranslateData,
//!     code: String,
//! }
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn Error>> {
//!     // create roa style api client.
//!     let aliyun_openapi_client = ROAClient::new(
//!         env::var("ACCESS_KEY_ID")?,
//!         env::var("ACCESS_KEY_SECRET")?,
//!         "http://mt.aliyuncs.com",
//!     );
//!
//!     // create params.
//!     let mut params = HashMap::new();
//!     params.insert("SourceText", "你好");
//!     params.insert("SourceLanguage", "zh");
//!     params.insert("TargetLanguage", "en");
//!     params.insert("FormatType", "text");
//!     params.insert("Scene", "general");
//!
//!     // call `Translate` with json params, return `Translate`
//!     let response = aliyun_openapi_client
//!         .version("2018-04-08")
//!         .post("/api/translate/web/general")
//!         .header([("Content-Type".to_string(), "application/json".to_string())])?
//!         .body(json!(params).to_string())?
//!         .json::<Translate>()
//!         .await?;
//!
//!     println!("Translate response: {response:#?}");
//!
//!     Ok(())
//! }
//! ```
//!
//! ## Examples
//!
//! Export AK info to env, then run `cargo run --example <NAME>`:
//!
//! ```sh
//! export ACCESS_KEY_ID=<access_key_id>
//! export ACCESS_KEY_SECRET=<access_key_secret>
//!
//! # ecs example
//! cargo run --example ecs
//!
//! # rds example
//! cargo run --example rds
//!
//! # slb example
//! cargo run --example slb
//!
//! # vpc example
//! cargo run --example vpc
//!
//! # log service(SLS) example
//! cargo run --example log_service
//! ```
#![allow(deprecated)]

mod roa;
mod rpc;

#[deprecated(
    since = "1.0.0",
    note = "Please use the `aliyun_openapi_core_rust_sdk::client::roa::ROAClient` instead"
)]
pub use crate::roa::Client as ROAClient;

#[deprecated(
    since = "1.0.0",
    note = "Please use the `aliyun_openapi_core_rust_sdk::client::rpc::RPClient` instead"
)]
pub use crate::rpc::Client as RPClient;

pub mod client;