flarrow_runtime/plugins/
url_scheme_default.rs

1use std::sync::Arc;
2
3use crate::prelude::*;
4
5#[derive(UrlSchemePlugin)]
6pub struct DefaultUrlSchemePlugin {}
7
8#[url_scheme_plugin(runtime = "default_runtime")]
9impl UrlSchemePlugin for DefaultUrlSchemePlugin {
10    async fn new() -> Result<Self>
11    where
12        Self: Sized,
13    {
14        Ok(DefaultUrlSchemePlugin {})
15    }
16
17    fn target(&self) -> Vec<String> {
18        vec!["file".to_string(), "builtin".to_string()]
19    }
20
21    #[allow(clippy::too_many_arguments)]
22    async fn load(
23        &self,
24        url: Url,
25
26        inputs: Inputs,
27        outputs: Outputs,
28        queries: Queries,
29        queryables: Queryables,
30        configuration: serde_yml::Value,
31        file_ext: Arc<FileExtManager>,
32    ) -> Result<flarrow_runtime_core::prelude::RuntimeNode> {
33        match url.scheme() {
34            "file" => {
35                let path = url
36                    .to_file_path()
37                    .map_err(|_| eyre::eyre!("Url '{}' cannot be made into a path buf", url))?;
38
39                file_ext
40                    .load(path, inputs, outputs, queries, queryables, configuration)
41                    .await
42            }
43            "builtin" => {
44                // TODO!!
45                eyre::bail!("Builtin url scheme is not supported yet!")
46            }
47            _ => Err(eyre::eyre!(
48                "Url scheme '{}' is not supported",
49                url.scheme()
50            )),
51        }
52    }
53}