@@ -75,12 +75,17 @@ use mock_ffi::*;
7575pub 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 ) ]
127132pub 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 ) ]
133140pub 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 ) ]
140150pub 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 ) ]
151168pub 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 ) ]
193237pub 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 {
222267pub 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