1#[derive(Debug, Serialize, Deserialize)]
2pub struct Field {
3 pub id: String,
4 pub name: String,
5 pub r#type: FieldType,
6 pub desc: Option<String>,
7 pub property: Option<HashMap<String, serde_json::Value>>,
8}
9
10#[derive(Debug, Serialize, Deserialize)]
11pub struct FieldsRespSchema {
12 pub fields: Vec<Field>,
13}
14
15pub struct FieldsManager {
16 pub space_id: String,
17 pub datasheet_id: String,
18 pub view_id: Option<String>,
19 pub config: Config,
20}
21
22impl FieldsManager {
23 pub async fn query_all(&self) -> anyhow::Result<Vec<Field>, anyhow::Error> {
24 let url = format!(
25 "{}/datasheets/{}/fields{}",
26 self.config.get_url(),
27 self.datasheet_id,
28 match self.view_id.clone() {
29 Some(view_id) => format!("?viewId={}", view_id),
30 None => format!(""),
31 }
32 );
33 let client = reqwest::Client::new();
34 let resp = client
35 .get(&url)
36 .headers(self.config.clone().into())
37 .send()
38 .await?
39 .json::<ResponseSchema<FieldsRespSchema>>()
40 .await?;
41 match resp.code {
42 200 => anyhow::Ok(resp.data.unwrap().fields),
43 _ => Err(anyhow::Error::msg(format!(
44 "code: {}, success: {}, message: {}, request_url: {}",
45 resp.code, resp.success, resp.message, url
46 ))),
47 }
48 }
49}
50
51pub struct FieldManager {
52 pub space_id: String,
53 pub datasheet_id: String,
54 pub view_id: String,
55 pub field_id: String,
56 pub config: Config,
57}
58
59use std::collections::HashMap;
60
61use serde::{Deserialize, Serialize};
62
63use crate::common::{config::Config, http::ResponseSchema};
64
65#[derive(Debug, Serialize, Deserialize)]
66pub enum FieldType {
67 SingleText,
68 Text,
69 SingleSelect,
70 MultiSelect,
71 Number,
72 Currency,
73 Percent,
74 Datetime,
75 Attachment,
76 Member,
77 Checkbox,
78 Rating,
79 URL,
80 Phone,
81 Email,
82 WorkDoc,
83 OneWayLink,
84 TwoWayLink,
85 MagicLookUp,
86 Formula,
87 AutoNumber,
88 Button,
89 DateTime,
90}
91
92impl std::fmt::Display for FieldType {
93 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
94 write!(
95 f,
96 "{:?}",
97 match self {
98 FieldType::SingleText => "SingleText",
99 FieldType::Text => "Text",
100 FieldType::SingleSelect => "SingleSelect",
101 FieldType::MultiSelect => "MultiSelect",
102 FieldType::Number => "Number",
103 FieldType::Currency => "Currency",
104 FieldType::Percent => "Percent",
105 FieldType::Datetime => "Datetime",
106 FieldType::Attachment => "Attachment",
107 FieldType::Member => "Member",
108 FieldType::Checkbox => "Checkbox",
109 FieldType::Rating => "Rating",
110 FieldType::URL => "URL",
111 FieldType::Phone => "Phone",
112 FieldType::Email => "Email",
113 FieldType::WorkDoc => "WorkDoc",
114 FieldType::OneWayLink => "OneWayLink",
115 FieldType::TwoWayLink => "TwoWayLink",
116 FieldType::MagicLookUp => "MagicLookUp",
117 FieldType::Formula => "Formula",
118 FieldType::AutoNumber => "AutoNumber",
119 FieldType::Button => "Button",
120 FieldType::DateTime => "DateTime",
121 }
122 )
123 }
124}
125
126#[derive(Debug, Serialize, Deserialize)]
127pub struct Attachment {
128 id: String,
129 name: String,
130 size: usize,
131 mime_type: String,
132 token: String,
133 width: usize,
134 height: usize,
135 url: String,
136}
137#[derive(Debug, Serialize, Deserialize)]
138pub struct Member {
139 id: String,
140 r#type: i32,
141 name: String,
142 avatar: String,
143}
144#[derive(Debug, Serialize, Deserialize)]
145pub struct Url {
146 title: String,
147 text: String,
148 fafavicon: String,
149}
150#[derive(Debug, Serialize, Deserialize)]
151pub enum Formula {
152 Formula(String),
153 Number(f64),
154 Bool(bool),
155}
156#[derive(Debug, Serialize, Deserialize)]
157pub struct WorkDoc {
158 document_id: String,
159 title: String,
160}