Skip to content

Commit 53b5284

Browse files
authored
Merge pull request #25 from blocklessnetwork/feat/bless-crawl-improvements
fix: bless-crawl skip serializing/deserializing none fields
2 parents 57cea3e + 3df9ce8 commit 53b5284

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

src/bless_crawl/mod.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,17 @@ use mock_ffi::*;
7575
pub struct ScrapeOptions {
7676
pub timeout: u32,
7777
pub wait_time: u32,
78+
#[serde(skip_serializing_if = "Option::is_none")]
7879
pub include_tags: Option<Vec<String>>,
80+
#[serde(skip_serializing_if = "Option::is_none")]
7981
pub exclude_tags: Option<Vec<String>>,
8082
pub only_main_content: bool,
8183
pub format: Format,
84+
#[serde(skip_serializing_if = "Option::is_none")]
8285
pub viewport: Option<Viewport>,
86+
#[serde(skip_serializing_if = "Option::is_none")]
8387
pub user_agent: Option<String>,
88+
#[serde(skip_serializing_if = "Option::is_none")]
8489
pub headers: Option<HashMap<String, String>>,
8590
}
8691

@@ -125,58 +130,97 @@ impl std::str::FromStr for Format {
125130

126131
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize)]
127132
pub struct Viewport {
133+
#[serde(skip_serializing_if = "Option::is_none")]
128134
pub width: Option<u32>,
135+
#[serde(skip_serializing_if = "Option::is_none")]
129136
pub height: Option<u32>,
130137
}
131138

132139
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize)]
133140
pub struct MapOptions {
141+
#[serde(skip_serializing_if = "Option::is_none")]
134142
pub link_types: Option<Vec<String>>,
143+
#[serde(skip_serializing_if = "Option::is_none")]
135144
pub base_url: Option<String>,
145+
#[serde(skip_serializing_if = "Option::is_none")]
136146
pub filter_extensions: Option<Vec<String>>,
137147
}
138148

139149
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize)]
140150
pub struct CrawlOptions {
151+
#[serde(skip_serializing_if = "Option::is_none")]
141152
pub limit: Option<u32>,
153+
#[serde(skip_serializing_if = "Option::is_none")]
142154
pub max_depth: Option<u8>,
155+
#[serde(skip_serializing_if = "Option::is_none")]
143156
pub exclude_paths: Option<Vec<String>>,
157+
#[serde(skip_serializing_if = "Option::is_none")]
144158
pub include_paths: Option<Vec<String>>,
159+
#[serde(skip_serializing_if = "Option::is_none")]
145160
pub follow_external: Option<bool>,
161+
#[serde(skip_serializing_if = "Option::is_none")]
146162
pub delay_between_requests: Option<u32>,
163+
#[serde(skip_serializing_if = "Option::is_none")]
147164
pub parallel_requests: Option<u32>,
148165
}
149166

150167
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
151168
pub struct PageMetadata {
169+
#[serde(skip_serializing_if = "Option::is_none")]
152170
pub title: Option<String>,
171+
#[serde(skip_serializing_if = "Option::is_none")]
153172
pub description: Option<String>,
154173
pub url: String,
155174
pub status_code: u16,
175+
#[serde(skip_serializing_if = "Option::is_none")]
156176
pub language: Option<String>,
177+
#[serde(skip_serializing_if = "Option::is_none")]
157178
pub keywords: Option<String>,
179+
#[serde(skip_serializing_if = "Option::is_none")]
158180
pub robots: Option<String>,
181+
#[serde(skip_serializing_if = "Option::is_none")]
159182
pub author: Option<String>,
183+
#[serde(skip_serializing_if = "Option::is_none")]
160184
pub creator: Option<String>,
185+
#[serde(skip_serializing_if = "Option::is_none")]
161186
pub publisher: Option<String>,
187+
#[serde(skip_serializing_if = "Option::is_none")]
162188
pub og_title: Option<String>,
189+
#[serde(skip_serializing_if = "Option::is_none")]
163190
pub og_description: Option<String>,
191+
#[serde(skip_serializing_if = "Option::is_none")]
164192
pub og_image: Option<String>,
193+
#[serde(skip_serializing_if = "Option::is_none")]
165194
pub og_url: Option<String>,
195+
#[serde(skip_serializing_if = "Option::is_none")]
166196
pub og_site_name: Option<String>,
197+
#[serde(skip_serializing_if = "Option::is_none")]
167198
pub og_type: Option<String>,
199+
#[serde(skip_serializing_if = "Option::is_none")]
168200
pub twitter_title: Option<String>,
201+
#[serde(skip_serializing_if = "Option::is_none")]
169202
pub twitter_description: Option<String>,
203+
#[serde(skip_serializing_if = "Option::is_none")]
170204
pub twitter_image: Option<String>,
205+
#[serde(skip_serializing_if = "Option::is_none")]
171206
pub twitter_card: Option<String>,
207+
#[serde(skip_serializing_if = "Option::is_none")]
172208
pub twitter_site: Option<String>,
209+
#[serde(skip_serializing_if = "Option::is_none")]
173210
pub twitter_creator: Option<String>,
211+
#[serde(skip_serializing_if = "Option::is_none")]
174212
pub favicon: Option<String>,
213+
#[serde(skip_serializing_if = "Option::is_none")]
175214
pub viewport: Option<String>,
215+
#[serde(skip_serializing_if = "Option::is_none")]
176216
pub referrer: Option<String>,
217+
#[serde(skip_serializing_if = "Option::is_none")]
177218
pub content_type: Option<String>,
219+
#[serde(skip_serializing_if = "Option::is_none")]
178220
pub scrape_id: Option<String>,
221+
#[serde(skip_serializing_if = "Option::is_none")]
179222
pub source_url: Option<String>,
223+
#[serde(skip_serializing_if = "Option::is_none")]
180224
pub proxy_used: Option<String>,
181225
}
182226

@@ -192,6 +236,7 @@ pub struct ScrapeData {
192236
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
193237
pub struct Response<T> {
194238
pub success: bool,
239+
#[serde(skip_serializing_if = "Option::is_none")]
195240
pub error: Option<String>,
196241
pub data: T,
197242
}
@@ -222,6 +267,7 @@ pub struct CrawlError {
222267
pub struct CrawlData<T> {
223268
pub root_url: String,
224269
pub pages: Vec<T>,
270+
#[serde(skip_serializing_if = "Option::is_none")]
225271
pub link_map: Option<MapData>,
226272
pub depth_reached: u8,
227273
pub total_pages: usize,

0 commit comments

Comments
 (0)