Skip to main content

fret_platform/
file_dialog.rs

1//! File dialog platform contracts.
2//!
3//! The portable contract is token-based, similar to external drops (ADR 0053).
4
5use crate::external_drop::ExternalDropReadLimits;
6use fret_core::{FileDialogDataEvent, FileDialogOptions, FileDialogSelection, FileDialogToken};
7
8pub type FileDialogReadLimits = ExternalDropReadLimits;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub enum FileDialogErrorKind {
12    Unsupported,
13    BackendError,
14}
15
16#[derive(Debug, Clone, PartialEq, Eq)]
17pub struct FileDialogError {
18    pub kind: FileDialogErrorKind,
19}
20
21pub trait FileDialogProvider {
22    fn open_files(
23        &mut self,
24        options: &FileDialogOptions,
25    ) -> Result<Option<FileDialogSelection>, FileDialogError>;
26
27    fn read_all(
28        &mut self,
29        token: FileDialogToken,
30        limits: FileDialogReadLimits,
31    ) -> Option<FileDialogDataEvent>;
32
33    fn release(&mut self, token: FileDialogToken);
34}