8次发布
0.2.1 | 2023年11月5日 |
---|---|
0.2.0 | 2023年11月5日 |
0.1.5 | 2023年10月11日 |
#23 in #builder-pattern
61 每月下载量
55KB
1.5K SLoC
ABS数据API Rust客户端
这个Rust库提供了一种方便的方式与澳大利亚统计局(ABS)数据API https://api.gov.au/assets/APIs/abs/DataAPI.openapi.html 进行交互。它利用构建器类型对API进行流畅的请求。
免责声明
- 非官方:此库未得到澳大利亚政府在任何形式的认可、赞助或推广。
- alpha:此库目前处于alpha阶段且不完全。此外,它所依赖的API也处于beta阶段。
功能
- 请求构建器模式:使用构建器类型构建请求是流畅的。
- 强类型模型:为ABS接口提供强类型模型,最小化运行时错误。
示例
将以下内容添加到您的 Cargo.toml
[dependencies]
abs_data = "0.2.1"
示例请求
use abs_data::{
builders::{
dataflow_identifier_builder::DataflowIdentifierBuilder,
datakey_builder::DataKeyBuilder, sdmx_data_request_builder::SdmxDataRequestBuilder,
sdmx_meta_request_builder::SdmxMetaRequestBuilder,
},
models::typed::{
datakey::DataKey, datakey_dimension::DataKeyDimension, detail::Detail, period::Period,
structure_type::StructureType,
},
result::Result,
};
async fn get_dynamic_meta_and_use_for_request() -> Result<()> {
let meta_response = SdmxMetaRequestBuilder::new(&StructureType::DataFlow)
.build()
.send()
.await?;
let dataflow = &meta_response.data.dataflows.unwrap()[10]; // Select desired dataflow
let dataflow_identifier = DataflowIdentifierBuilder::new(&dataflow.id)
.agency_id(&dataflow.agency_id)
.version(&dataflow.version)
.build();
let _response = SdmxDataRequestBuilder::new(&dataflow_identifier)
.detail(&Detail::DataOnly)
.start_period(&Period::Year(2012))
.end_period(&Period::Year(2022))
.build()
.send()
.await?;
Ok(())
}
async fn get_all_data_for_structure_id_without_filter() -> Result<()> {
let dataflow_identifier = DataflowIdentifierBuilder::new("CPI").build();
let _response = SdmxDataRequestBuilder::new(&dataflow_identifier) // Avoid 500 response with data only detail (issue with beta api)
.build()
.send()
.await?;
Ok(())
}
async fn get_datakeys_for_structure_id() -> Result<()> {
let dataflow_identifier = DataflowIdentifierBuilder::new("CPI").build();
let _response = SdmxDataRequestBuilder::new(&dataflow_identifier)
.detail(&Detail::SeriesKeysOnly)
.build()
.send()
.await?;
Ok(())
}
async fn get_data_with_custom_datakey() -> Result<()> {
let dataflow_identifier = DataflowIdentifierBuilder::new("CPI").build();
let _response = SdmxDataRequestBuilder::new(&dataflow_identifier)
.data_key(&DataKey::parse("1.40066.10.8.Q")?)
.detail(&Detail::DataOnly)
.build()
.send()
.await?;
Ok(())
}
async fn get_data_with_datakey_builder_validation() -> Result<()> {
let dataflow_identifier = DataflowIdentifierBuilder::new("CPI").build();
let key = DataKeyBuilder::new(&dataflow_identifier)
.add(&DataKeyDimension::new("MEASURE", "1"))
.add(&DataKeyDimension::new("INDEX", "40066"))
.add(&DataKeyDimension::new("REGION", "8"))
.add(&DataKeyDimension::new("FREQ", "Q"))
.add(&DataKeyDimension::new("TSEST", "10"))
.build()
.await?;
assert_eq!(key, DataKey::parse("1.40066.10.8.Q")?);
let _response = SdmxDataRequestBuilder::new(&dataflow_identifier)
.data_key(&key)
.detail(&Detail::DataOnly)
.build()
.send()
.await?;
Ok(())
}
依赖项
~5–20MB
~274K SLoC