Skip to main content

bbox_processes_server/
service.rs

1use crate::config::ProcessesServiceCfg;
2use crate::dagster::DagsterBackend;
3use async_trait::async_trait;
4use bbox_core::cli::{NoArgs, NoCommands};
5use bbox_core::config::CoreServiceCfg;
6use bbox_core::metrics::{no_metrics, NoMetrics};
7use bbox_core::ogcapi::ApiLink;
8use bbox_core::service::OgcApiService;
9
10use log::info;
11
12#[derive(Clone, Default)]
13pub struct ProcessesService {
14    pub backend: Option<DagsterBackend>,
15}
16
17#[async_trait]
18impl OgcApiService for ProcessesService {
19    type Config = ProcessesServiceCfg;
20    type CliCommands = NoCommands;
21    type CliArgs = NoArgs;
22    type Metrics = NoMetrics;
23
24    async fn create(config: &Self::Config, _core_cfg: &CoreServiceCfg) -> Self {
25        if !config.has_backend() {
26            info!("Processing backend configuration missing - service disabled");
27        }
28        let backend = config
29            .dagster_backend
30            .clone()
31            .map(|_cfg| DagsterBackend::new());
32        ProcessesService { backend }
33    }
34    fn conformance_classes(&self) -> Vec<String> {
35        vec![
36            "http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core".to_string(),
37            "http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/json".to_string(),
38            // |Core|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core|
39            // |OGC Process Description|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/ogc-process-description|
40            // |JSON|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/json|
41            // |HTML|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/html|
42            // |OpenAPI Specification 3.0|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/oas30|
43            // |Job list|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/job-list|
44            // |Callback|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/callback|
45            // |Dismiss|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/dismiss|
46            "http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/oas30".to_string(),
47        ]
48    }
49    fn landing_page_links(&self, _api_base: &str) -> Vec<ApiLink> {
50        vec![ApiLink {
51            href: "/processes".to_string(),
52            rel: Some("processes".to_string()),
53            type_: Some("application/json".to_string()),
54            title: Some("OGC API processes list".to_string()),
55            hreflang: None,
56            length: None,
57        }]
58    }
59    fn openapi_yaml(&self) -> Option<&str> {
60        Some(include_str!("openapi.yaml"))
61    }
62    fn metrics(&self) -> &'static Self::Metrics {
63        no_metrics()
64    }
65}