use serde::Deserialize;
use super::{
super::{percent_encode, Client, NoQuery},
TableSchema,
};
use crate::common::*;
use crate::drivers::bigquery_shared::{BqTable, TableName};
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
struct Table {
schema: TableSchema,
}
#[instrument(level = "trace")]
pub(crate) async fn schema(name: &TableName) -> Result<BqTable> {
trace!("fetching schema for {:?}", name);
let url = format!(
"https://bigquery.googleapis.com/bigquery/v2/projects/{}/datasets/{}/tables/{}",
percent_encode(name.project()),
percent_encode(name.dataset()),
percent_encode(name.table()),
);
let client = Client::new().await?;
let table = client.get::<Table, _, _>(&url, NoQuery).await?;
Ok(BqTable {
name: name.to_owned(),
columns: table.schema.fields,
})
}