bbox_processes_server/
service.rs1use 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 "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}