use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::{
common::config::Config, field::FieldsManager, record::RecordsManager, view::ViewsManager,
};
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct Data {
#[serde(rename = "pageNum")]
pub page_num: usize,
#[serde(rename = "pageSize")]
pub page_size: usize,
pub records: Vec<Record>,
pub total: usize,
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct Record {
#[serde(rename = "recordId")]
pub record_id: String,
#[serde(rename = "createdAt")]
pub created_at: usize,
#[serde(rename = "updatedAt")]
pub updated_at: usize,
pub fields: FieldContext,
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct FieldContext {
#[serde(flatten)]
pub fields: HashMap<String, serde_json::Value>,
}
pub struct DatasheetManager {
pub space_id: String,
pub datasheet_id: String,
pub views: ViewsManager,
pub fields: FieldsManager,
pub records: RecordsManager,
pub config: Config,
}
pub struct DatasheetsManager {
pub space_id: String,
pub config: Config,
}
impl DatasheetsManager {
pub fn datasheet(&self, datasheet_id: &str) -> DatasheetManager {
DatasheetManager {
space_id: self.space_id.clone(),
datasheet_id: datasheet_id.into(),
views: ViewsManager {
datasheet_id: datasheet_id.into(),
config: self.config.clone(),
},
fields: FieldsManager {
space_id: self.space_id.clone(),
datasheet_id: datasheet_id.into(),
view_id: None,
config: self.config.clone(),
},
records: RecordsManager {
space_id: self.space_id.clone(),
datasheet_id: datasheet_id.into(),
view_id: None,
config: self.config.clone(),
},
config: self.config.clone(),
}
}
pub fn with_view(&self, datasheet_id: &str, view_id: &str) -> DatasheetManager {
DatasheetManager {
space_id: self.space_id.clone(),
datasheet_id: datasheet_id.into(),
views: ViewsManager {
datasheet_id: datasheet_id.into(),
config: self.config.clone(),
},
fields: FieldsManager {
space_id: self.space_id.clone(),
datasheet_id: datasheet_id.into(),
view_id: Some(view_id.into()),
config: self.config.clone(),
},
records: RecordsManager {
space_id: self.space_id.clone(),
datasheet_id: datasheet_id.into(),
view_id: Some(view_id.into()),
config: self.config.clone(),
},
config: self.config.clone(),
}
}
}