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
//! AWS API wrapper for Vantage — incubating.
//!
//! Treat AWS API endpoints as Vantage `TableSource`s. Build an
//! [`AwsAccount`], hand it to a `Table`, and encode the operation in
//! the table name as `{protocol}/{array_key}:{service}/{target}`:
//!
//! ```text
//! json1/logGroups:logs/Logs_20140328.DescribeLogGroups
//! │ │ │ └── X-Amz-Target header value
//! │ │ └─────── service code (also URL hostname segment)
//! │ └────────────── response field that holds the row array
//! └────────────────────── wire protocol
//!
//! query/Users:iam/2010-05-08.ListUsers
//! │ │ │ │
//! │ │ │ └── "VERSION.Action" — both go in the form body
//! │ │ └──────── service code (also URL hostname segment)
//! │ └───────────── response element name (Query lists wrap in <member>)
//! └─────────────────── wire protocol
//! ```
//!
//! Two protocols ship today: **JSON-1.1** for CloudWatch, ECS, KMS,
//! DynamoDB control-plane, etc.; and **Query** (form-encoded request,
//! XML response) for IAM, STS, EC2, ELBv1, SES, etc. Both are routed
//! through the same `AwsAccount` `TableSource`, so relations span
//! services and protocols freely.
//!
//! Conditions on the table fold into the request body. v0 is
//! read-only, first-page only — pagination and writes arrive later.
//!
//! Ready-made models live under [`models`] if you want to skip the
//! table-name dance and start querying.
//!
//! ```no_run
//! # use vantage_aws::{AwsAccount, eq};
//! # use vantage_table::table::Table;
//! # use vantage_types::EmptyEntity;
//! # async fn run() -> vantage_core::Result<()> {
//! // env vars first, falling back to ~/.aws/credentials [default]
//! let aws = AwsAccount::from_default()?;
//!
//! let mut groups: Table<AwsAccount, EmptyEntity> = Table::new(
//! "json1/logGroups:logs/Logs_20140328.DescribeLogGroups",
//! aws,
//! );
//! groups.add_condition(eq("logGroupNamePrefix", "/aws/lambda/"));
//! # Ok(()) }
//! ```
pub use AwsAccount;
pub use ;
pub use AwsOperation;
pub use ;