extern crate self as tushare_api;
pub mod api;
pub mod basic_types;
pub mod client;
pub mod client_ex;
pub mod custom_date_format;
pub mod error;
pub mod logging;
pub mod models;
pub mod third_party_types;
pub mod traits;
pub mod types;
pub mod utils;
pub use api::Api;
pub use client::{HttpClientConfig, TushareClient, TushareClientBuilder};
pub use client_ex::{RetryConfig, TushareClientEx};
pub use error::{TushareError, TushareResult};
pub use logging::{LogConfig, LogLevel, Logger};
pub use traits::{FromOptionalTushareValue, FromTushareData, FromTushareValue};
pub use types::{TushareData, TushareEntityList, TushareRequest, TushareResponse};
pub use utils::response_to_vec;
pub use tushare_rs_pro_derive::FromTushareData as DeriveFromTushareData;
pub use serde_json;
#[cfg(test)]
mod tests {
use super::*;
use crate::types::TushareData;
use serde_json::json;
#[test]
fn test_api_serialization() {
let api = Api::StockBasic;
assert_eq!(api.name(), "stock_basic");
}
#[test]
fn test_tushare_request_creation() {
let request = TushareRequest::new(
Api::StockBasic,
vec![("list_status".to_string(), "L".to_string())],
vec!["ts_code".to_string(), "symbol".to_string()],
);
assert_eq!(request.api_name, Api::StockBasic);
assert_eq!(request.params.len(), 1);
assert_eq!(request.fields.len(), 2);
}
#[test]
fn test_tushare_response_creation() {
let response = TushareResponse {
request_id: "test123".to_string(),
code: 0,
msg: None,
data: Some(TushareData {
fields: vec!["ts_code".to_string(), "name".to_string()],
items: vec![
vec![json!("000001.SZ"), json!("平安银行")],
vec![json!("000002.SZ"), json!("万科A")],
],
has_more: false,
count: 2,
}),
};
assert_eq!(response.code, 0);
assert_eq!(
response
.data
.as_ref()
.map(|data| data.items.len())
.unwrap_or(0),
2
);
assert_eq!(
response
.data
.as_ref()
.map(|data| data.items.len())
.unwrap_or(0),
2
);
}
}