1use super::target;
3#[allow(unused_imports)]
4use super::types::*;
5#[allow(unused_imports)]
6use serde::{Deserialize, Serialize};
7#[allow(unused_imports)]
8use serde_json::Value as Json;
9pub type BrowserContextId = String;
10pub type WindowId = JsUInt;
11#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
12pub enum WindowState {
13 #[serde(rename = "normal")]
14 Normal,
15 #[serde(rename = "minimized")]
16 Minimized,
17 #[serde(rename = "maximized")]
18 Maximized,
19 #[serde(rename = "fullscreen")]
20 Fullscreen,
21}
22#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
23pub enum PermissionType {
24 #[serde(rename = "ar")]
25 Ar,
26 #[serde(rename = "audioCapture")]
27 AudioCapture,
28 #[serde(rename = "automaticFullscreen")]
29 AutomaticFullscreen,
30 #[serde(rename = "backgroundFetch")]
31 BackgroundFetch,
32 #[serde(rename = "backgroundSync")]
33 BackgroundSync,
34 #[serde(rename = "cameraPanTiltZoom")]
35 CameraPanTiltZoom,
36 #[serde(rename = "capturedSurfaceControl")]
37 CapturedSurfaceControl,
38 #[serde(rename = "clipboardReadWrite")]
39 ClipboardReadWrite,
40 #[serde(rename = "clipboardSanitizedWrite")]
41 ClipboardSanitizedWrite,
42 #[serde(rename = "displayCapture")]
43 DisplayCapture,
44 #[serde(rename = "durableStorage")]
45 DurableStorage,
46 #[serde(rename = "geolocation")]
47 Geolocation,
48 #[serde(rename = "handTracking")]
49 HandTracking,
50 #[serde(rename = "idleDetection")]
51 IdleDetection,
52 #[serde(rename = "keyboardLock")]
53 KeyboardLock,
54 #[serde(rename = "localFonts")]
55 LocalFonts,
56 #[serde(rename = "localNetworkAccess")]
57 LocalNetworkAccess,
58 #[serde(rename = "midi")]
59 Midi,
60 #[serde(rename = "midiSysex")]
61 MidiSysex,
62 #[serde(rename = "nfc")]
63 Nfc,
64 #[serde(rename = "notifications")]
65 Notifications,
66 #[serde(rename = "paymentHandler")]
67 PaymentHandler,
68 #[serde(rename = "periodicBackgroundSync")]
69 PeriodicBackgroundSync,
70 #[serde(rename = "pointerLock")]
71 PointerLock,
72 #[serde(rename = "protectedMediaIdentifier")]
73 ProtectedMediaIdentifier,
74 #[serde(rename = "sensors")]
75 Sensors,
76 #[serde(rename = "smartCard")]
77 SmartCard,
78 #[serde(rename = "speakerSelection")]
79 SpeakerSelection,
80 #[serde(rename = "storageAccess")]
81 StorageAccess,
82 #[serde(rename = "topLevelStorageAccess")]
83 TopLevelStorageAccess,
84 #[serde(rename = "videoCapture")]
85 VideoCapture,
86 #[serde(rename = "vr")]
87 Vr,
88 #[serde(rename = "wakeLockScreen")]
89 WakeLockScreen,
90 #[serde(rename = "wakeLockSystem")]
91 WakeLockSystem,
92 #[serde(rename = "webAppInstallation")]
93 WebAppInstallation,
94 #[serde(rename = "webPrinting")]
95 WebPrinting,
96 #[serde(rename = "windowManagement")]
97 WindowManagement,
98}
99#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
100pub enum PermissionSetting {
101 #[serde(rename = "granted")]
102 Granted,
103 #[serde(rename = "denied")]
104 Denied,
105 #[serde(rename = "prompt")]
106 Prompt,
107}
108#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
109pub enum BrowserCommandId {
110 #[serde(rename = "openTabSearch")]
111 OpenTabSearch,
112 #[serde(rename = "closeTabSearch")]
113 CloseTabSearch,
114 #[serde(rename = "openGlic")]
115 OpenGlic,
116}
117#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
118pub enum PrivacySandboxApi {
119 #[serde(rename = "BiddingAndAuctionServices")]
120 BiddingAndAuctionServices,
121 #[serde(rename = "TrustedKeyValue")]
122 TrustedKeyValue,
123}
124#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
125pub enum SetDownloadBehaviorBehaviorOption {
126 #[serde(rename = "deny")]
127 Deny,
128 #[serde(rename = "allow")]
129 Allow,
130 #[serde(rename = "allowAndName")]
131 AllowAndName,
132 #[serde(rename = "default")]
133 Default,
134}
135#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
136pub enum DownloadProgressStateOption {
137 #[serde(rename = "inProgress")]
138 InProgress,
139 #[serde(rename = "completed")]
140 Completed,
141 #[serde(rename = "canceled")]
142 Canceled,
143}
144#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
145pub struct Bounds {
146 #[serde(skip_serializing_if = "Option::is_none")]
147 #[serde(default)]
148 #[serde(rename = "left")]
149 pub left: Option<JsUInt>,
150 #[serde(skip_serializing_if = "Option::is_none")]
151 #[serde(default)]
152 #[serde(rename = "top")]
153 pub top: Option<JsUInt>,
154 #[serde(skip_serializing_if = "Option::is_none")]
155 #[serde(default)]
156 #[serde(rename = "width")]
157 pub width: Option<JsUInt>,
158 #[serde(skip_serializing_if = "Option::is_none")]
159 #[serde(default)]
160 #[serde(rename = "height")]
161 pub height: Option<JsUInt>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 #[serde(rename = "windowState")]
164 pub window_state: Option<WindowState>,
165}
166#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
167pub struct PermissionDescriptor {
168 #[serde(default)]
169 #[serde(rename = "name")]
170 pub name: String,
171 #[serde(skip_serializing_if = "Option::is_none")]
172 #[serde(default)]
173 #[serde(rename = "sysex")]
174 pub sysex: Option<bool>,
175 #[serde(skip_serializing_if = "Option::is_none")]
176 #[serde(default)]
177 #[serde(rename = "userVisibleOnly")]
178 pub user_visible_only: Option<bool>,
179 #[serde(skip_serializing_if = "Option::is_none")]
180 #[serde(default)]
181 #[serde(rename = "allowWithoutSanitization")]
182 pub allow_without_sanitization: Option<bool>,
183 #[serde(skip_serializing_if = "Option::is_none")]
184 #[serde(default)]
185 #[serde(rename = "allowWithoutGesture")]
186 pub allow_without_gesture: Option<bool>,
187 #[serde(skip_serializing_if = "Option::is_none")]
188 #[serde(default)]
189 #[serde(rename = "panTiltZoom")]
190 pub pan_tilt_zoom: Option<bool>,
191}
192#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
193pub struct Bucket {
194 #[serde(default)]
195 #[serde(rename = "low")]
196 pub low: JsUInt,
197 #[serde(default)]
198 #[serde(rename = "high")]
199 pub high: JsUInt,
200 #[serde(default)]
201 #[serde(rename = "count")]
202 pub count: JsUInt,
203}
204#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
205pub struct Histogram {
206 #[serde(default)]
207 #[serde(rename = "name")]
208 pub name: String,
209 #[serde(default)]
210 #[serde(rename = "sum")]
211 pub sum: JsUInt,
212 #[serde(default)]
213 #[serde(rename = "count")]
214 pub count: JsUInt,
215 #[serde(rename = "buckets")]
216 pub buckets: Vec<Bucket>,
217}
218#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
219pub struct SetPermission {
220 #[serde(rename = "permission")]
221 pub permission: PermissionDescriptor,
222 #[serde(rename = "setting")]
223 pub setting: PermissionSetting,
224 #[serde(skip_serializing_if = "Option::is_none")]
225 #[serde(default)]
226 #[serde(rename = "origin")]
227 pub origin: Option<String>,
228 #[serde(skip_serializing_if = "Option::is_none")]
229 #[serde(rename = "browserContextId")]
230 pub browser_context_id: Option<BrowserContextId>,
231}
232#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
233pub struct GrantPermissions {
234 #[serde(rename = "permissions")]
235 pub permissions: Vec<PermissionType>,
236 #[serde(skip_serializing_if = "Option::is_none")]
237 #[serde(default)]
238 #[serde(rename = "origin")]
239 pub origin: Option<String>,
240 #[serde(skip_serializing_if = "Option::is_none")]
241 #[serde(rename = "browserContextId")]
242 pub browser_context_id: Option<BrowserContextId>,
243}
244#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
245pub struct ResetPermissions {
246 #[serde(skip_serializing_if = "Option::is_none")]
247 #[serde(rename = "browserContextId")]
248 pub browser_context_id: Option<BrowserContextId>,
249}
250#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
251pub struct SetDownloadBehavior {
252 #[serde(rename = "behavior")]
253 pub behavior: SetDownloadBehaviorBehaviorOption,
254 #[serde(skip_serializing_if = "Option::is_none")]
255 #[serde(rename = "browserContextId")]
256 pub browser_context_id: Option<BrowserContextId>,
257 #[serde(skip_serializing_if = "Option::is_none")]
258 #[serde(default)]
259 #[serde(rename = "downloadPath")]
260 pub download_path: Option<String>,
261 #[serde(skip_serializing_if = "Option::is_none")]
262 #[serde(default)]
263 #[serde(rename = "eventsEnabled")]
264 pub events_enabled: Option<bool>,
265}
266#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
267pub struct CancelDownload {
268 #[serde(default)]
269 #[serde(rename = "guid")]
270 pub guid: String,
271 #[serde(skip_serializing_if = "Option::is_none")]
272 #[serde(rename = "browserContextId")]
273 pub browser_context_id: Option<BrowserContextId>,
274}
275#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
276#[serde(rename_all = "camelCase")]
277pub struct Close(pub Option<serde_json::Value>);
278#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
279#[serde(rename_all = "camelCase")]
280pub struct Crash(pub Option<serde_json::Value>);
281#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
282#[serde(rename_all = "camelCase")]
283pub struct CrashGpuProcess(pub Option<serde_json::Value>);
284#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
285#[serde(rename_all = "camelCase")]
286pub struct GetVersion(pub Option<serde_json::Value>);
287#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
288#[serde(rename_all = "camelCase")]
289pub struct GetBrowserCommandLine(pub Option<serde_json::Value>);
290#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
291pub struct GetHistograms {
292 #[serde(skip_serializing_if = "Option::is_none")]
293 #[serde(default)]
294 #[serde(rename = "query")]
295 pub query: Option<String>,
296 #[serde(skip_serializing_if = "Option::is_none")]
297 #[serde(default)]
298 #[serde(rename = "delta")]
299 pub delta: Option<bool>,
300}
301#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
302pub struct GetHistogram {
303 #[serde(default)]
304 #[serde(rename = "name")]
305 pub name: String,
306 #[serde(skip_serializing_if = "Option::is_none")]
307 #[serde(default)]
308 #[serde(rename = "delta")]
309 pub delta: Option<bool>,
310}
311#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
312pub struct GetWindowBounds {
313 #[serde(rename = "windowId")]
314 pub window_id: WindowId,
315}
316#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
317pub struct GetWindowForTarget {
318 #[serde(skip_serializing_if = "Option::is_none")]
319 #[serde(rename = "targetId")]
320 pub target_id: Option<target::TargetId>,
321}
322#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
323pub struct SetWindowBounds {
324 #[serde(rename = "windowId")]
325 pub window_id: WindowId,
326 #[serde(rename = "bounds")]
327 pub bounds: Bounds,
328}
329#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
330pub struct SetContentsSize {
331 #[serde(rename = "windowId")]
332 pub window_id: WindowId,
333 #[serde(skip_serializing_if = "Option::is_none")]
334 #[serde(default)]
335 #[serde(rename = "width")]
336 pub width: Option<JsUInt>,
337 #[serde(skip_serializing_if = "Option::is_none")]
338 #[serde(default)]
339 #[serde(rename = "height")]
340 pub height: Option<JsUInt>,
341}
342#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
343pub struct SetDockTile {
344 #[serde(skip_serializing_if = "Option::is_none")]
345 #[serde(default)]
346 #[serde(rename = "badgeLabel")]
347 pub badge_label: Option<String>,
348 #[serde(skip_serializing_if = "Option::is_none")]
349 #[serde(rename = "image")]
350 pub image: Option<Vec<u8>>,
351}
352#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
353pub struct ExecuteBrowserCommand {
354 #[serde(rename = "commandId")]
355 pub command_id: BrowserCommandId,
356}
357#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
358pub struct AddPrivacySandboxEnrollmentOverride {
359 #[serde(default)]
360 #[serde(rename = "url")]
361 pub url: String,
362}
363#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
364pub struct AddPrivacySandboxCoordinatorKeyConfig {
365 #[serde(rename = "api")]
366 pub api: PrivacySandboxApi,
367 #[serde(default)]
368 #[serde(rename = "coordinatorOrigin")]
369 pub coordinator_origin: String,
370 #[serde(default)]
371 #[serde(rename = "keyConfig")]
372 pub key_config: String,
373 #[serde(skip_serializing_if = "Option::is_none")]
374 #[serde(rename = "browserContextId")]
375 pub browser_context_id: Option<BrowserContextId>,
376}
377#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
378#[serde(rename_all = "camelCase")]
379pub struct SetPermissionReturnObject {}
380#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
381#[serde(rename_all = "camelCase")]
382pub struct GrantPermissionsReturnObject {}
383#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
384#[serde(rename_all = "camelCase")]
385pub struct ResetPermissionsReturnObject {}
386#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
387#[serde(rename_all = "camelCase")]
388pub struct SetDownloadBehaviorReturnObject {}
389#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
390#[serde(rename_all = "camelCase")]
391pub struct CancelDownloadReturnObject {}
392#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
393#[serde(rename_all = "camelCase")]
394pub struct CloseReturnObject {}
395#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
396#[serde(rename_all = "camelCase")]
397pub struct CrashReturnObject {}
398#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
399#[serde(rename_all = "camelCase")]
400pub struct CrashGpuProcessReturnObject {}
401#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
402pub struct GetVersionReturnObject {
403 #[serde(default)]
404 #[serde(rename = "protocolVersion")]
405 pub protocol_version: String,
406 #[serde(default)]
407 #[serde(rename = "product")]
408 pub product: String,
409 #[serde(default)]
410 #[serde(rename = "revision")]
411 pub revision: String,
412 #[serde(default)]
413 #[serde(rename = "userAgent")]
414 pub user_agent: String,
415 #[serde(default)]
416 #[serde(rename = "jsVersion")]
417 pub js_version: String,
418}
419#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
420pub struct GetBrowserCommandLineReturnObject {
421 #[serde(rename = "arguments")]
422 pub arguments: Vec<String>,
423}
424#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
425pub struct GetHistogramsReturnObject {
426 #[serde(rename = "histograms")]
427 pub histograms: Vec<Histogram>,
428}
429#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
430pub struct GetHistogramReturnObject {
431 #[serde(rename = "histogram")]
432 pub histogram: Histogram,
433}
434#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
435pub struct GetWindowBoundsReturnObject {
436 #[serde(rename = "bounds")]
437 pub bounds: Bounds,
438}
439#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
440pub struct GetWindowForTargetReturnObject {
441 #[serde(rename = "windowId")]
442 pub window_id: WindowId,
443 #[serde(rename = "bounds")]
444 pub bounds: Bounds,
445}
446#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
447#[serde(rename_all = "camelCase")]
448pub struct SetWindowBoundsReturnObject {}
449#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
450#[serde(rename_all = "camelCase")]
451pub struct SetContentsSizeReturnObject {}
452#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
453#[serde(rename_all = "camelCase")]
454pub struct SetDockTileReturnObject {}
455#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
456#[serde(rename_all = "camelCase")]
457pub struct ExecuteBrowserCommandReturnObject {}
458#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
459#[serde(rename_all = "camelCase")]
460pub struct AddPrivacySandboxEnrollmentOverrideReturnObject {}
461#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
462#[serde(rename_all = "camelCase")]
463pub struct AddPrivacySandboxCoordinatorKeyConfigReturnObject {}
464impl Method for SetPermission {
465 const NAME: &'static str = "Browser.setPermission";
466 type ReturnObject = SetPermissionReturnObject;
467}
468impl Method for GrantPermissions {
469 const NAME: &'static str = "Browser.grantPermissions";
470 type ReturnObject = GrantPermissionsReturnObject;
471}
472impl Method for ResetPermissions {
473 const NAME: &'static str = "Browser.resetPermissions";
474 type ReturnObject = ResetPermissionsReturnObject;
475}
476impl Method for SetDownloadBehavior {
477 const NAME: &'static str = "Browser.setDownloadBehavior";
478 type ReturnObject = SetDownloadBehaviorReturnObject;
479}
480impl Method for CancelDownload {
481 const NAME: &'static str = "Browser.cancelDownload";
482 type ReturnObject = CancelDownloadReturnObject;
483}
484impl Method for Close {
485 const NAME: &'static str = "Browser.close";
486 type ReturnObject = CloseReturnObject;
487}
488impl Method for Crash {
489 const NAME: &'static str = "Browser.crash";
490 type ReturnObject = CrashReturnObject;
491}
492impl Method for CrashGpuProcess {
493 const NAME: &'static str = "Browser.crashGpuProcess";
494 type ReturnObject = CrashGpuProcessReturnObject;
495}
496impl Method for GetVersion {
497 const NAME: &'static str = "Browser.getVersion";
498 type ReturnObject = GetVersionReturnObject;
499}
500impl Method for GetBrowserCommandLine {
501 const NAME: &'static str = "Browser.getBrowserCommandLine";
502 type ReturnObject = GetBrowserCommandLineReturnObject;
503}
504impl Method for GetHistograms {
505 const NAME: &'static str = "Browser.getHistograms";
506 type ReturnObject = GetHistogramsReturnObject;
507}
508impl Method for GetHistogram {
509 const NAME: &'static str = "Browser.getHistogram";
510 type ReturnObject = GetHistogramReturnObject;
511}
512impl Method for GetWindowBounds {
513 const NAME: &'static str = "Browser.getWindowBounds";
514 type ReturnObject = GetWindowBoundsReturnObject;
515}
516impl Method for GetWindowForTarget {
517 const NAME: &'static str = "Browser.getWindowForTarget";
518 type ReturnObject = GetWindowForTargetReturnObject;
519}
520impl Method for SetWindowBounds {
521 const NAME: &'static str = "Browser.setWindowBounds";
522 type ReturnObject = SetWindowBoundsReturnObject;
523}
524impl Method for SetContentsSize {
525 const NAME: &'static str = "Browser.setContentsSize";
526 type ReturnObject = SetContentsSizeReturnObject;
527}
528impl Method for SetDockTile {
529 const NAME: &'static str = "Browser.setDockTile";
530 type ReturnObject = SetDockTileReturnObject;
531}
532impl Method for ExecuteBrowserCommand {
533 const NAME: &'static str = "Browser.executeBrowserCommand";
534 type ReturnObject = ExecuteBrowserCommandReturnObject;
535}
536impl Method for AddPrivacySandboxEnrollmentOverride {
537 const NAME: &'static str = "Browser.addPrivacySandboxEnrollmentOverride";
538 type ReturnObject = AddPrivacySandboxEnrollmentOverrideReturnObject;
539}
540impl Method for AddPrivacySandboxCoordinatorKeyConfig {
541 const NAME: &'static str = "Browser.addPrivacySandboxCoordinatorKeyConfig";
542 type ReturnObject = AddPrivacySandboxCoordinatorKeyConfigReturnObject;
543}
544pub mod events {
545 #[allow(unused_imports)]
546 use super::super::types::*;
547 #[allow(unused_imports)]
548 use serde::{Deserialize, Serialize};
549 #[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
550 pub struct DownloadWillBeginEvent {
551 pub params: DownloadWillBeginEventParams,
552 }
553 #[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
554 pub struct DownloadWillBeginEventParams {
555 #[serde(rename = "frameId")]
556 pub frame_id: super::super::page::FrameId,
557 #[serde(default)]
558 #[serde(rename = "guid")]
559 pub guid: String,
560 #[serde(default)]
561 #[serde(rename = "url")]
562 pub url: String,
563 #[serde(default)]
564 #[serde(rename = "suggestedFilename")]
565 pub suggested_filename: String,
566 }
567 #[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
568 pub struct DownloadProgressEvent {
569 pub params: DownloadProgressEventParams,
570 }
571 #[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
572 pub struct DownloadProgressEventParams {
573 #[serde(default)]
574 #[serde(rename = "guid")]
575 pub guid: String,
576 #[serde(default)]
577 #[serde(rename = "totalBytes")]
578 pub total_bytes: JsFloat,
579 #[serde(default)]
580 #[serde(rename = "receivedBytes")]
581 pub received_bytes: JsFloat,
582 #[serde(rename = "state")]
583 pub state: super::DownloadProgressStateOption,
584 #[serde(skip_serializing_if = "Option::is_none")]
585 #[serde(default)]
586 #[serde(rename = "filePath")]
587 pub file_path: Option<String>,
588 }
589}