summaryrefslogtreecommitdiffstats
path: root/intl/l10n/rust/l10nregistry-rs/src/source/fetcher.rs
blob: 3a022990a6bb96df849efcb50cc9a7e2285eff50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use async_trait::async_trait;
use fluent_fallback::types::ResourceId;
use std::io;

/// The users of [`FileSource`] implement this trait to provide loading of
/// resources, returning the contents of a resource as a
/// `String`. [`FileSource`] handles the conversion from string representation
/// into `FluentResource`.
///
/// [`FileSource`]: source/struct.FileSource.html
#[async_trait(?Send)]
pub trait FileFetcher {
    /// Return the `String` representation for `path`. This version is
    /// blocking.
    ///
    /// See [`fetch`](#tymethod.fetch).
    fn fetch_sync(&self, resource_id: &ResourceId) -> io::Result<String>;

    /// Return the `String` representation for `path`.
    ///
    /// On success, returns `Poll::Ready(Ok(..))`.
    ///
    /// If no resource is available to be fetched, the method returns
    /// `Poll::Pending` and arranges for the current task (via
    /// `cx.waker().wake_by_ref()`) to receive a notification when the resource
    /// is available.
    ///
    /// See [`fetch_sync`](#tymethod.fetch_sync)
    async fn fetch(&self, path: &ResourceId) -> io::Result<String>;
}