Skip to main content

FilePicker

Trait FilePicker 

pub trait FilePicker: Send + Sync {
    // Required methods
    fn pick(&self, request: PickRequest) -> Receiver<PortalOutcome>;
    fn pick_multiple(&self, request: PickRequest) -> Receiver<MultiOutcome>;
    fn open_file(&self, request: PickRequest) -> Receiver<OpenFileOutcome>;
    fn launch(&self, request: LaunchRequest) -> Receiver<LaunchOutcome>;

    // Provided methods
    fn save_file(&self, request: PickRequest) -> Receiver<OpenFileOutcome> { ... }
    fn pick_contents(&self, request: PickRequest) -> Receiver<ContentsOutcome> { ... }
    fn save_contents(
        &self,
        request: PickRequest,
        bytes: Vec<u8>,
    ) -> Receiver<SaveOutcome> { ... }
}
Expand description

Host-provided file choosing and opening.

Every method returns a channel the UI thread drains once per frame, so an implementation may answer immediately, from a worker thread, or from a later host callback — it must never block the caller.

Required Methods§

fn pick(&self, request: PickRequest) -> Receiver<PortalOutcome>

A single-file Open, Save or folder chooser.

fn pick_multiple(&self, request: PickRequest) -> Receiver<MultiOutcome>

A multi-select Open chooser.

fn open_file(&self, request: PickRequest) -> Receiver<OpenFileOutcome>

A single-file Open chooser that delivers the already-open descriptor.

fn launch(&self, request: LaunchRequest) -> Receiver<LaunchOutcome>

Open a local path with its default handler, or reveal its folder.

Provided Methods§

fn save_file(&self, request: PickRequest) -> Receiver<OpenFileOutcome>

A Save chooser that delivers the chosen destination already open for writing, for hosts whose documents have no path the app can write to. Hosts that answer Save with a path keep this default refusal.

fn pick_contents(&self, request: PickRequest) -> Receiver<ContentsOutcome>

An Open chooser that delivers the chosen files’ contents. The default reads what pick or pick_multiple answers; a host without local paths (a browser page) implements it directly. Implementations must enforce the aggregate PickRequest::contents_byte_limit before reading unbounded contents.

fn save_contents( &self, request: PickRequest, bytes: Vec<u8>, ) -> Receiver<SaveOutcome>

A Save chooser that stores bytes. The default writes to the path pick answers.

Implementors§