#![allow(
clippy::all,
clippy::pedantic,
clippy::nursery,
dead_code,
unused_imports,
unused_variables,
reason = "mechanically generated contract text: the OAS is emitted in full (every DTO, param struct and route, whether or not this workspace consumes it yet), so style and dead-code lints do not apply — the hand-written runtime and the implementing adapter carry the lint bar"
)]
#![allow(
clippy::disallowed_types,
reason = "adjudicated free-form JSON slots: serde_json::Value is workspace-banned (#1694); a generated carrier exists only where the spec leaves the slot open — `allow`, not `expect`, because a carrier may sit inside a feature-gated region and fire only under that feature"
)]
use serde::{Deserialize, Serialize};
pub type QueryParameters = std::collections::BTreeMap<String, serde_json::Value>;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResultSetMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub _href: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub _type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub _schema_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub _created: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub _generator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub _executed_aql: Option<String>,
#[serde(flatten)]
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResultSetColumn {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(flatten)]
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
}
pub type ResultSetRow = Vec<serde_json::Value>;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResultSet {
#[serde(skip_serializing_if = "Option::is_none")]
pub meta: Option<ResultSetMetadata>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<super::common::QueryName>,
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<super::common::Aql>,
#[serde(skip_serializing_if = "Option::is_none")]
pub columns: Option<Vec<ResultSetColumn>>,
pub rows: Vec<ResultSetRow>,
#[serde(flatten)]
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
}
pub type Offset = i64;
pub type Fetch = i64;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdhocQueryExecute {
pub q: super::common::Aql,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<Offset>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fetch: Option<Fetch>,
#[serde(skip_serializing_if = "Option::is_none")]
pub query_parameters: Option<QueryParameters>,
#[serde(flatten)]
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Query {
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<Offset>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fetch: Option<Fetch>,
#[serde(skip_serializing_if = "Option::is_none")]
pub query_parameters: Option<QueryParameters>,
#[serde(flatten)]
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryExecuteAdhocQueryParams {
pub q: super::common::Aql,
#[serde(skip_serializing_if = "Option::is_none")]
pub ehr_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fetch: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub query_parameters: Option<QueryParameters>,
#[serde(rename = "Accept")]
#[serde(skip_serializing_if = "Option::is_none")]
pub accept: Option<String>,
}
impl QueryExecuteAdhocQueryParams {
pub const PARAMS: &'static [crate::rest::routes::Param] = &[
crate::rest::routes::Param {
name: "q",
location: crate::rest::routes::ParamLocation::Query,
required: true,
explode: true,
kind: crate::rest::routes::ParamKind::Text,
identifier: None,
},
crate::rest::routes::Param {
name: "ehr_id",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Uuid,
identifier: None,
},
crate::rest::routes::Param {
name: "offset",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Integer,
identifier: None,
},
crate::rest::routes::Param {
name: "fetch",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Integer,
identifier: None,
},
crate::rest::routes::Param {
name: "query_parameters",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Object,
identifier: None,
},
crate::rest::routes::Param {
name: "Accept",
location: crate::rest::routes::ParamLocation::Header,
required: false,
explode: false,
kind: crate::rest::routes::ParamKind::Enum(&["application/json"]),
identifier: None,
},
];
pub fn from_request(
_matched: &crate::rest::routes::RouteMatch,
query: Option<&str>,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
let query = crate::rest::decode::QueryPairs::parse(query)?;
Self::from_parts(&query, headers)
}
pub(crate) fn from_parts(
query: &crate::rest::decode::QueryPairs,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
Ok(Self {
q: query.required("q")?,
ehr_id: query.optional("ehr_id")?,
offset: query.optional("offset")?,
fetch: query.optional("fetch")?,
query_parameters: query
.members("query_parameters", &["q", "ehr_id", "offset", "fetch"])?,
accept: crate::rest::decode::header_optional(headers, "Accept")?,
})
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryExecuteAdhocQueryBodyParams {
#[serde(rename = "Accept")]
#[serde(skip_serializing_if = "Option::is_none")]
pub accept: Option<String>,
#[serde(rename = "Content-Type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
}
impl QueryExecuteAdhocQueryBodyParams {
pub const PARAMS: &'static [crate::rest::routes::Param] = &[
crate::rest::routes::Param {
name: "Accept",
location: crate::rest::routes::ParamLocation::Header,
required: false,
explode: false,
kind: crate::rest::routes::ParamKind::Enum(&["application/json"]),
identifier: None,
},
crate::rest::routes::Param {
name: "Content-Type",
location: crate::rest::routes::ParamLocation::Header,
required: false,
explode: false,
kind: crate::rest::routes::ParamKind::Enum(&["application/json"]),
identifier: None,
},
];
pub fn from_request(
_matched: &crate::rest::routes::RouteMatch,
_query: Option<&str>,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
Self::from_parts(headers)
}
pub(crate) fn from_parts(
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
Ok(Self {
accept: crate::rest::decode::header_optional(headers, "Accept")?,
content_type: crate::rest::decode::header_optional(headers, "Content-Type")?,
})
}
}
pub fn query_execute_adhoc_query_body_request_body(
content_type: Option<&http::HeaderValue>,
body: &[u8],
) -> Result<AdhocQueryExecute, crate::rest::runtime::ApiError> {
crate::rest::decode::json_body(content_type, body)
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryExecuteStoredQueryParams {
pub qualified_query_name: super::common::QueryName,
#[serde(skip_serializing_if = "Option::is_none")]
pub ehr_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fetch: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub query_parameters: Option<QueryParameters>,
#[serde(rename = "Accept")]
#[serde(skip_serializing_if = "Option::is_none")]
pub accept: Option<String>,
}
impl QueryExecuteStoredQueryParams {
pub const PARAMS: &'static [crate::rest::routes::Param] = &[
crate::rest::routes::Param {
name: "qualified_query_name",
location: crate::rest::routes::ParamLocation::Path,
required: true,
explode: false,
kind: crate::rest::routes::ParamKind::Text,
identifier: None,
},
crate::rest::routes::Param {
name: "ehr_id",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Uuid,
identifier: None,
},
crate::rest::routes::Param {
name: "offset",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Integer,
identifier: None,
},
crate::rest::routes::Param {
name: "fetch",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Integer,
identifier: None,
},
crate::rest::routes::Param {
name: "query_parameters",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Object,
identifier: None,
},
crate::rest::routes::Param {
name: "Accept",
location: crate::rest::routes::ParamLocation::Header,
required: false,
explode: false,
kind: crate::rest::routes::ParamKind::Enum(&["application/json"]),
identifier: None,
},
];
pub fn from_request(
matched: &crate::rest::routes::RouteMatch,
query: Option<&str>,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
let path = crate::rest::decode::PathValues::from_route(matched)?;
let query = crate::rest::decode::QueryPairs::parse(query)?;
Self::from_parts(&path, &query, headers)
}
pub(crate) fn from_parts(
path: &crate::rest::decode::PathValues,
query: &crate::rest::decode::QueryPairs,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
Ok(Self {
qualified_query_name: path.value("qualified_query_name")?,
ehr_id: query.optional("ehr_id")?,
offset: query.optional("offset")?,
fetch: query.optional("fetch")?,
query_parameters: query.members("query_parameters", &["ehr_id", "offset", "fetch"])?,
accept: crate::rest::decode::header_optional(headers, "Accept")?,
})
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryExecuteStoredQueryBodyParams {
pub qualified_query_name: super::common::QueryName,
#[serde(rename = "Accept")]
#[serde(skip_serializing_if = "Option::is_none")]
pub accept: Option<String>,
#[serde(rename = "Content-Type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
}
impl QueryExecuteStoredQueryBodyParams {
pub const PARAMS: &'static [crate::rest::routes::Param] = &[
crate::rest::routes::Param {
name: "qualified_query_name",
location: crate::rest::routes::ParamLocation::Path,
required: true,
explode: false,
kind: crate::rest::routes::ParamKind::Text,
identifier: None,
},
crate::rest::routes::Param {
name: "Accept",
location: crate::rest::routes::ParamLocation::Header,
required: false,
explode: false,
kind: crate::rest::routes::ParamKind::Enum(&["application/json"]),
identifier: None,
},
crate::rest::routes::Param {
name: "Content-Type",
location: crate::rest::routes::ParamLocation::Header,
required: false,
explode: false,
kind: crate::rest::routes::ParamKind::Enum(&["application/json"]),
identifier: None,
},
];
pub fn from_request(
matched: &crate::rest::routes::RouteMatch,
_query: Option<&str>,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
let path = crate::rest::decode::PathValues::from_route(matched)?;
Self::from_parts(&path, headers)
}
pub(crate) fn from_parts(
path: &crate::rest::decode::PathValues,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
Ok(Self {
qualified_query_name: path.value("qualified_query_name")?,
accept: crate::rest::decode::header_optional(headers, "Accept")?,
content_type: crate::rest::decode::header_optional(headers, "Content-Type")?,
})
}
}
pub fn query_execute_stored_query_body_request_body(
content_type: Option<&http::HeaderValue>,
body: &[u8],
) -> Result<Query, crate::rest::runtime::ApiError> {
crate::rest::decode::json_body(content_type, body)
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryExecuteStoredQueryVersionParams {
pub qualified_query_name: super::common::QueryName,
pub version: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub ehr_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fetch: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub query_parameters: Option<QueryParameters>,
#[serde(rename = "Accept")]
#[serde(skip_serializing_if = "Option::is_none")]
pub accept: Option<String>,
}
impl QueryExecuteStoredQueryVersionParams {
pub const PARAMS: &'static [crate::rest::routes::Param] = &[
crate::rest::routes::Param {
name: "qualified_query_name",
location: crate::rest::routes::ParamLocation::Path,
required: true,
explode: false,
kind: crate::rest::routes::ParamKind::Text,
identifier: None,
},
crate::rest::routes::Param {
name: "version",
location: crate::rest::routes::ParamLocation::Path,
required: true,
explode: false,
kind: crate::rest::routes::ParamKind::Text,
identifier: None,
},
crate::rest::routes::Param {
name: "ehr_id",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Uuid,
identifier: None,
},
crate::rest::routes::Param {
name: "offset",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Integer,
identifier: None,
},
crate::rest::routes::Param {
name: "fetch",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Integer,
identifier: None,
},
crate::rest::routes::Param {
name: "query_parameters",
location: crate::rest::routes::ParamLocation::Query,
required: false,
explode: true,
kind: crate::rest::routes::ParamKind::Object,
identifier: None,
},
crate::rest::routes::Param {
name: "Accept",
location: crate::rest::routes::ParamLocation::Header,
required: false,
explode: false,
kind: crate::rest::routes::ParamKind::Enum(&["application/json"]),
identifier: None,
},
];
pub fn from_request(
matched: &crate::rest::routes::RouteMatch,
query: Option<&str>,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
let path = crate::rest::decode::PathValues::from_route(matched)?;
let query = crate::rest::decode::QueryPairs::parse(query)?;
Self::from_parts(&path, &query, headers)
}
pub(crate) fn from_parts(
path: &crate::rest::decode::PathValues,
query: &crate::rest::decode::QueryPairs,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
Ok(Self {
qualified_query_name: path.value("qualified_query_name")?,
version: path.value("version")?,
ehr_id: query.optional("ehr_id")?,
offset: query.optional("offset")?,
fetch: query.optional("fetch")?,
query_parameters: query.members("query_parameters", &["ehr_id", "offset", "fetch"])?,
accept: crate::rest::decode::header_optional(headers, "Accept")?,
})
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryExecuteStoredQueryVersionBodyParams {
pub qualified_query_name: super::common::QueryName,
pub version: String,
#[serde(rename = "Accept")]
#[serde(skip_serializing_if = "Option::is_none")]
pub accept: Option<String>,
#[serde(rename = "Content-Type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
}
impl QueryExecuteStoredQueryVersionBodyParams {
pub const PARAMS: &'static [crate::rest::routes::Param] = &[
crate::rest::routes::Param {
name: "qualified_query_name",
location: crate::rest::routes::ParamLocation::Path,
required: true,
explode: false,
kind: crate::rest::routes::ParamKind::Text,
identifier: None,
},
crate::rest::routes::Param {
name: "version",
location: crate::rest::routes::ParamLocation::Path,
required: true,
explode: false,
kind: crate::rest::routes::ParamKind::Text,
identifier: None,
},
crate::rest::routes::Param {
name: "Accept",
location: crate::rest::routes::ParamLocation::Header,
required: false,
explode: false,
kind: crate::rest::routes::ParamKind::Enum(&["application/json"]),
identifier: None,
},
crate::rest::routes::Param {
name: "Content-Type",
location: crate::rest::routes::ParamLocation::Header,
required: false,
explode: false,
kind: crate::rest::routes::ParamKind::Enum(&["application/json"]),
identifier: None,
},
];
pub fn from_request(
matched: &crate::rest::routes::RouteMatch,
_query: Option<&str>,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
let path = crate::rest::decode::PathValues::from_route(matched)?;
Self::from_parts(&path, headers)
}
pub(crate) fn from_parts(
path: &crate::rest::decode::PathValues,
headers: &http::HeaderMap,
) -> Result<Self, crate::rest::runtime::ApiError> {
Ok(Self {
qualified_query_name: path.value("qualified_query_name")?,
version: path.value("version")?,
accept: crate::rest::decode::header_optional(headers, "Accept")?,
content_type: crate::rest::decode::header_optional(headers, "Content-Type")?,
})
}
}
pub fn query_execute_stored_query_version_body_request_body(
content_type: Option<&http::HeaderValue>,
body: &[u8],
) -> Result<Query, crate::rest::runtime::ApiError> {
crate::rest::decode::json_body(content_type, body)
}
#[derive(Debug, Clone, Default)]
pub struct QueryExecuteAdhocQueryOkHeaders {
pub etag: Option<String>,
pub content_type: Option<String>,
}
impl crate::rest::runtime::ResponseHeaders for QueryExecuteAdhocQueryOkHeaders {
fn into_header_map(self) -> Result<http::HeaderMap, crate::rest::runtime::HeaderError> {
let mut map = http::HeaderMap::new();
crate::rest::runtime::set_header(&mut map, "ETag", self.etag)?;
crate::rest::runtime::set_header(&mut map, "Content-Type", self.content_type)?;
Ok(map)
}
}
#[derive(Debug, Clone, Default)]
pub struct QueryExecuteAdhocQueryBodyOkHeaders {
pub etag: Option<String>,
pub content_type: Option<String>,
}
impl crate::rest::runtime::ResponseHeaders for QueryExecuteAdhocQueryBodyOkHeaders {
fn into_header_map(self) -> Result<http::HeaderMap, crate::rest::runtime::HeaderError> {
let mut map = http::HeaderMap::new();
crate::rest::runtime::set_header(&mut map, "ETag", self.etag)?;
crate::rest::runtime::set_header(&mut map, "Content-Type", self.content_type)?;
Ok(map)
}
}
#[derive(Debug, Clone, Default)]
pub struct QueryExecuteStoredQueryOkHeaders {
pub etag: Option<String>,
pub content_type: Option<String>,
}
impl crate::rest::runtime::ResponseHeaders for QueryExecuteStoredQueryOkHeaders {
fn into_header_map(self) -> Result<http::HeaderMap, crate::rest::runtime::HeaderError> {
let mut map = http::HeaderMap::new();
crate::rest::runtime::set_header(&mut map, "ETag", self.etag)?;
crate::rest::runtime::set_header(&mut map, "Content-Type", self.content_type)?;
Ok(map)
}
}
#[derive(Debug, Clone, Default)]
pub struct QueryExecuteStoredQueryBodyOkHeaders {
pub etag: Option<String>,
pub content_type: Option<String>,
}
impl crate::rest::runtime::ResponseHeaders for QueryExecuteStoredQueryBodyOkHeaders {
fn into_header_map(self) -> Result<http::HeaderMap, crate::rest::runtime::HeaderError> {
let mut map = http::HeaderMap::new();
crate::rest::runtime::set_header(&mut map, "ETag", self.etag)?;
crate::rest::runtime::set_header(&mut map, "Content-Type", self.content_type)?;
Ok(map)
}
}
#[derive(Debug, Clone, Default)]
pub struct QueryExecuteStoredQueryVersionOkHeaders {
pub etag: Option<String>,
pub content_type: Option<String>,
}
impl crate::rest::runtime::ResponseHeaders for QueryExecuteStoredQueryVersionOkHeaders {
fn into_header_map(self) -> Result<http::HeaderMap, crate::rest::runtime::HeaderError> {
let mut map = http::HeaderMap::new();
crate::rest::runtime::set_header(&mut map, "ETag", self.etag)?;
crate::rest::runtime::set_header(&mut map, "Content-Type", self.content_type)?;
Ok(map)
}
}
#[derive(Debug, Clone, Default)]
pub struct QueryExecuteStoredQueryVersionBodyOkHeaders {
pub etag: Option<String>,
pub content_type: Option<String>,
}
impl crate::rest::runtime::ResponseHeaders for QueryExecuteStoredQueryVersionBodyOkHeaders {
fn into_header_map(self) -> Result<http::HeaderMap, crate::rest::runtime::HeaderError> {
let mut map = http::HeaderMap::new();
crate::rest::runtime::set_header(&mut map, "ETag", self.etag)?;
crate::rest::runtime::set_header(&mut map, "Content-Type", self.content_type)?;
Ok(map)
}
}
#[cfg(feature = "rest-server")]
pub mod server {
use super::*;
#[derive(Debug, Clone)]
pub enum QueryExecuteAdhocQueryResponse {
Ok {
body: ResultSet,
headers: QueryExecuteAdhocQueryOkHeaders,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteAdhocQueryBodyResponse {
Ok {
body: ResultSet,
headers: QueryExecuteAdhocQueryBodyOkHeaders,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteStoredQueryResponse {
Ok {
body: ResultSet,
headers: QueryExecuteStoredQueryOkHeaders,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteStoredQueryBodyResponse {
Ok {
body: ResultSet,
headers: QueryExecuteStoredQueryBodyOkHeaders,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteStoredQueryVersionResponse {
Ok {
body: ResultSet,
headers: QueryExecuteStoredQueryVersionOkHeaders,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteStoredQueryVersionBodyResponse {
Ok {
body: ResultSet,
headers: QueryExecuteStoredQueryVersionBodyOkHeaders,
},
}
#[async_trait::async_trait]
pub trait QueryApi {
async fn query_execute_adhoc_query(
&self,
params: QueryExecuteAdhocQueryParams,
) -> Result<QueryExecuteAdhocQueryResponse, crate::rest::runtime::Refusal> {
Err(crate::rest::runtime::ApiError::NotImplemented.into())
}
async fn query_execute_adhoc_query_body(
&self,
params: QueryExecuteAdhocQueryBodyParams,
body: AdhocQueryExecute,
) -> Result<QueryExecuteAdhocQueryBodyResponse, crate::rest::runtime::Refusal> {
Err(crate::rest::runtime::ApiError::NotImplemented.into())
}
async fn query_execute_stored_query(
&self,
params: QueryExecuteStoredQueryParams,
) -> Result<QueryExecuteStoredQueryResponse, crate::rest::runtime::Refusal> {
Err(crate::rest::runtime::ApiError::NotImplemented.into())
}
async fn query_execute_stored_query_body(
&self,
params: QueryExecuteStoredQueryBodyParams,
body: Query,
) -> Result<QueryExecuteStoredQueryBodyResponse, crate::rest::runtime::Refusal> {
Err(crate::rest::runtime::ApiError::NotImplemented.into())
}
async fn query_execute_stored_query_version(
&self,
params: QueryExecuteStoredQueryVersionParams,
) -> Result<QueryExecuteStoredQueryVersionResponse, crate::rest::runtime::Refusal> {
Err(crate::rest::runtime::ApiError::NotImplemented.into())
}
async fn query_execute_stored_query_version_body(
&self,
params: QueryExecuteStoredQueryVersionBodyParams,
body: Query,
) -> Result<QueryExecuteStoredQueryVersionBodyResponse, crate::rest::runtime::Refusal>
{
Err(crate::rest::runtime::ApiError::NotImplemented.into())
}
}
pub fn router<S>(api: std::sync::Arc<S>) -> axum::Router
where
S: QueryApi + Send + Sync + 'static,
{
axum::Router::new()
.route(
"/query/aql",
axum::routing::on(
axum::routing::MethodFilter::GET,
handle_query_execute_adhoc_query::<S>,
),
)
.route(
"/query/aql",
axum::routing::on(
axum::routing::MethodFilter::POST,
handle_query_execute_adhoc_query_body::<S>,
),
)
.route(
"/query/{p2}",
axum::routing::on(
axum::routing::MethodFilter::GET,
handle_query_execute_stored_query::<S>,
),
)
.route(
"/query/{p2}",
axum::routing::on(
axum::routing::MethodFilter::POST,
handle_query_execute_stored_query_body::<S>,
),
)
.route(
"/query/{p2}/{p3}",
axum::routing::on(
axum::routing::MethodFilter::GET,
handle_query_execute_stored_query_version::<S>,
),
)
.route(
"/query/{p2}/{p3}",
axum::routing::on(
axum::routing::MethodFilter::POST,
handle_query_execute_stored_query_version_body::<S>,
),
)
.with_state(api)
}
async fn handle_query_execute_adhoc_query<S>(
axum::extract::State(api): axum::extract::State<std::sync::Arc<S>>,
headers: http::HeaderMap,
axum::extract::RawQuery(query): axum::extract::RawQuery,
) -> axum::response::Response
where
S: QueryApi + Send + Sync + 'static,
{
let served: Result<axum::response::Response, crate::rest::runtime::Refusal> = async {
let query = crate::rest::decode::QueryPairs::parse(query.as_deref())?;
let params = QueryExecuteAdhocQueryParams::from_parts(&query, &headers)?;
let reply: crate::rest::server::Reply =
match api.query_execute_adhoc_query(params).await? {
QueryExecuteAdhocQueryResponse::Ok { body, headers } => {
let mut reply = crate::rest::server::Reply::new(http::StatusCode::OK);
reply.json(&body)?;
reply.headers(headers)?;
reply
}
};
Ok(reply.finish())
}
.await;
crate::rest::server::respond(served)
}
async fn handle_query_execute_adhoc_query_body<S>(
axum::extract::State(api): axum::extract::State<std::sync::Arc<S>>,
headers: http::HeaderMap,
body: axum::body::Bytes,
) -> axum::response::Response
where
S: QueryApi + Send + Sync + 'static,
{
let served: Result<axum::response::Response, crate::rest::runtime::Refusal> = async {
let params = QueryExecuteAdhocQueryBodyParams::from_parts(&headers)?;
let body = query_execute_adhoc_query_body_request_body(
headers.get(http::header::CONTENT_TYPE),
&body,
)?;
let reply: crate::rest::server::Reply =
match api.query_execute_adhoc_query_body(params, body).await? {
QueryExecuteAdhocQueryBodyResponse::Ok { body, headers } => {
let mut reply = crate::rest::server::Reply::new(http::StatusCode::OK);
reply.json(&body)?;
reply.headers(headers)?;
reply
}
};
Ok(reply.finish())
}
.await;
crate::rest::server::respond(served)
}
async fn handle_query_execute_stored_query<S>(
axum::extract::State(api): axum::extract::State<std::sync::Arc<S>>,
headers: http::HeaderMap,
axum::extract::RawQuery(query): axum::extract::RawQuery,
path: Result<
axum::extract::RawPathParams,
axum::extract::rejection::RawPathParamsRejection,
>,
) -> axum::response::Response
where
S: QueryApi + Send + Sync + 'static,
{
let served: Result<axum::response::Response, crate::rest::runtime::Refusal> = async {
let path = crate::rest::server::path_captures(path, &[("p2", "qualified_query_name")])?;
let query = crate::rest::decode::QueryPairs::parse(query.as_deref())?;
let params = QueryExecuteStoredQueryParams::from_parts(&path, &query, &headers)?;
let reply: crate::rest::server::Reply =
match api.query_execute_stored_query(params).await? {
QueryExecuteStoredQueryResponse::Ok { body, headers } => {
let mut reply = crate::rest::server::Reply::new(http::StatusCode::OK);
reply.json(&body)?;
reply.headers(headers)?;
reply
}
};
Ok(reply.finish())
}
.await;
crate::rest::server::respond(served)
}
async fn handle_query_execute_stored_query_body<S>(
axum::extract::State(api): axum::extract::State<std::sync::Arc<S>>,
headers: http::HeaderMap,
path: Result<
axum::extract::RawPathParams,
axum::extract::rejection::RawPathParamsRejection,
>,
body: axum::body::Bytes,
) -> axum::response::Response
where
S: QueryApi + Send + Sync + 'static,
{
let served: Result<axum::response::Response, crate::rest::runtime::Refusal> = async {
let path = crate::rest::server::path_captures(path, &[("p2", "qualified_query_name")])?;
let params = QueryExecuteStoredQueryBodyParams::from_parts(&path, &headers)?;
let body = query_execute_stored_query_body_request_body(
headers.get(http::header::CONTENT_TYPE),
&body,
)?;
let reply: crate::rest::server::Reply =
match api.query_execute_stored_query_body(params, body).await? {
QueryExecuteStoredQueryBodyResponse::Ok { body, headers } => {
let mut reply = crate::rest::server::Reply::new(http::StatusCode::OK);
reply.json(&body)?;
reply.headers(headers)?;
reply
}
};
Ok(reply.finish())
}
.await;
crate::rest::server::respond(served)
}
async fn handle_query_execute_stored_query_version<S>(
axum::extract::State(api): axum::extract::State<std::sync::Arc<S>>,
headers: http::HeaderMap,
axum::extract::RawQuery(query): axum::extract::RawQuery,
path: Result<
axum::extract::RawPathParams,
axum::extract::rejection::RawPathParamsRejection,
>,
) -> axum::response::Response
where
S: QueryApi + Send + Sync + 'static,
{
let served: Result<axum::response::Response, crate::rest::runtime::Refusal> = async {
let path = crate::rest::server::path_captures(
path,
&[("p2", "qualified_query_name"), ("p3", "version")],
)?;
let query = crate::rest::decode::QueryPairs::parse(query.as_deref())?;
let params = QueryExecuteStoredQueryVersionParams::from_parts(&path, &query, &headers)?;
let reply: crate::rest::server::Reply =
match api.query_execute_stored_query_version(params).await? {
QueryExecuteStoredQueryVersionResponse::Ok { body, headers } => {
let mut reply = crate::rest::server::Reply::new(http::StatusCode::OK);
reply.json(&body)?;
reply.headers(headers)?;
reply
}
};
Ok(reply.finish())
}
.await;
crate::rest::server::respond(served)
}
async fn handle_query_execute_stored_query_version_body<S>(
axum::extract::State(api): axum::extract::State<std::sync::Arc<S>>,
headers: http::HeaderMap,
path: Result<
axum::extract::RawPathParams,
axum::extract::rejection::RawPathParamsRejection,
>,
body: axum::body::Bytes,
) -> axum::response::Response
where
S: QueryApi + Send + Sync + 'static,
{
let served: Result<axum::response::Response, crate::rest::runtime::Refusal> = async {
let path = crate::rest::server::path_captures(
path,
&[("p2", "qualified_query_name"), ("p3", "version")],
)?;
let params = QueryExecuteStoredQueryVersionBodyParams::from_parts(&path, &headers)?;
let body = query_execute_stored_query_version_body_request_body(
headers.get(http::header::CONTENT_TYPE),
&body,
)?;
let reply: crate::rest::server::Reply = match api
.query_execute_stored_query_version_body(params, body)
.await?
{
QueryExecuteStoredQueryVersionBodyResponse::Ok { body, headers } => {
let mut reply = crate::rest::server::Reply::new(http::StatusCode::OK);
reply.json(&body)?;
reply.headers(headers)?;
reply
}
};
Ok(reply.finish())
}
.await;
crate::rest::server::respond(served)
}
}
#[cfg(feature = "rest-client")]
pub mod client {
use super::*;
#[derive(Debug, Clone)]
pub enum QueryExecuteAdhocQueryOutcome {
Ok {
body: ResultSet,
headers: QueryExecuteAdhocQueryOkHeaders,
},
BadRequest {
body: crate::rest::client::ErrorBody,
},
RequestTimeout {
body: crate::rest::client::ErrorBody,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteAdhocQueryBodyOutcome {
Ok {
body: ResultSet,
headers: QueryExecuteAdhocQueryBodyOkHeaders,
},
BadRequest {
body: crate::rest::client::ErrorBody,
},
RequestTimeout {
body: crate::rest::client::ErrorBody,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteStoredQueryOutcome {
Ok {
body: ResultSet,
headers: QueryExecuteStoredQueryOkHeaders,
},
BadRequest {
body: crate::rest::client::ErrorBody,
},
NotFound {
body: crate::rest::client::ErrorBody,
},
RequestTimeout {
body: crate::rest::client::ErrorBody,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteStoredQueryBodyOutcome {
Ok {
body: ResultSet,
headers: QueryExecuteStoredQueryBodyOkHeaders,
},
BadRequest {
body: crate::rest::client::ErrorBody,
},
NotFound {
body: crate::rest::client::ErrorBody,
},
RequestTimeout {
body: crate::rest::client::ErrorBody,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteStoredQueryVersionOutcome {
Ok {
body: ResultSet,
headers: QueryExecuteStoredQueryVersionOkHeaders,
},
BadRequest {
body: crate::rest::client::ErrorBody,
},
NotFound {
body: crate::rest::client::ErrorBody,
},
RequestTimeout {
body: crate::rest::client::ErrorBody,
},
}
#[derive(Debug, Clone)]
pub enum QueryExecuteStoredQueryVersionBodyOutcome {
Ok {
body: ResultSet,
headers: QueryExecuteStoredQueryVersionBodyOkHeaders,
},
BadRequest {
body: crate::rest::client::ErrorBody,
},
NotFound {
body: crate::rest::client::ErrorBody,
},
RequestTimeout {
body: crate::rest::client::ErrorBody,
},
}
#[derive(Debug, Clone)]
pub struct QueryClient<'c, T> {
client: &'c crate::rest::client::Client<T>,
options: crate::rest::client::CallOptions,
}
impl<'c, T: crate::rest::client::Transport> QueryClient<'c, T> {
#[must_use]
pub fn new(client: &'c crate::rest::client::Client<T>) -> Self {
Self {
client,
options: crate::rest::client::CallOptions::default(),
}
}
#[must_use]
pub fn with_options(mut self, options: crate::rest::client::CallOptions) -> Self {
self.options = options;
self
}
pub async fn query_execute_adhoc_query(
&self,
params: &QueryExecuteAdhocQueryParams,
) -> Result<QueryExecuteAdhocQueryOutcome, crate::rest::client::ClientError> {
let mut request =
crate::rest::client::Request::new(http::Method::GET, String::from("/query/aql"));
{
let value = ¶ms.q;
request.query("q", value);
}
if let Some(value) = params.ehr_id.as_ref() {
request.query("ehr_id", value);
}
if let Some(value) = params.offset.as_ref() {
request.query("offset", value);
}
if let Some(value) = params.fetch.as_ref() {
request.query("fetch", value);
}
if let Some(value) = params.query_parameters.as_ref() {
for (member, item) in value {
match item {
serde_json::Value::String(text) => request.query(member, text),
other => request.query(member, other),
}
}
}
if let Some(value) = params.accept.as_ref() {
request.header("Accept", &value.to_string())?;
}
request.apply_options(&self.options);
let answer = self.client.execute(request).await?;
match answer.status() {
http::StatusCode::OK => Ok(QueryExecuteAdhocQueryOutcome::Ok {
body: answer.json()?,
headers: QueryExecuteAdhocQueryOkHeaders {
etag: answer.header("ETag"),
content_type: answer.header("Content-Type"),
},
}),
http::StatusCode::BAD_REQUEST => Ok(QueryExecuteAdhocQueryOutcome::BadRequest {
body: answer.error_body(),
}),
http::StatusCode::REQUEST_TIMEOUT => {
Ok(QueryExecuteAdhocQueryOutcome::RequestTimeout {
body: answer.error_body(),
})
}
_ => Err(answer.into_undocumented()),
}
}
pub async fn query_execute_adhoc_query_body(
&self,
params: &QueryExecuteAdhocQueryBodyParams,
body: &AdhocQueryExecute,
) -> Result<QueryExecuteAdhocQueryBodyOutcome, crate::rest::client::ClientError> {
let mut request =
crate::rest::client::Request::new(http::Method::POST, String::from("/query/aql"));
if let Some(value) = params.accept.as_ref() {
request.header("Accept", &value.to_string())?;
}
if let Some(value) = params.content_type.as_ref() {
request.header("Content-Type", &value.to_string())?;
}
request.json_body(body, params.content_type.as_deref())?;
request.apply_options(&self.options);
let answer = self.client.execute(request).await?;
match answer.status() {
http::StatusCode::OK => Ok(QueryExecuteAdhocQueryBodyOutcome::Ok {
body: answer.json()?,
headers: QueryExecuteAdhocQueryBodyOkHeaders {
etag: answer.header("ETag"),
content_type: answer.header("Content-Type"),
},
}),
http::StatusCode::BAD_REQUEST => {
Ok(QueryExecuteAdhocQueryBodyOutcome::BadRequest {
body: answer.error_body(),
})
}
http::StatusCode::REQUEST_TIMEOUT => {
Ok(QueryExecuteAdhocQueryBodyOutcome::RequestTimeout {
body: answer.error_body(),
})
}
_ => Err(answer.into_undocumented()),
}
}
pub async fn query_execute_stored_query(
&self,
params: &QueryExecuteStoredQueryParams,
) -> Result<QueryExecuteStoredQueryOutcome, crate::rest::client::ClientError> {
let mut request = crate::rest::client::Request::new(
http::Method::GET,
format!(
"/query/{}",
crate::rest::client::path_segment(¶ms.qualified_query_name)
),
);
if let Some(value) = params.ehr_id.as_ref() {
request.query("ehr_id", value);
}
if let Some(value) = params.offset.as_ref() {
request.query("offset", value);
}
if let Some(value) = params.fetch.as_ref() {
request.query("fetch", value);
}
if let Some(value) = params.query_parameters.as_ref() {
for (member, item) in value {
match item {
serde_json::Value::String(text) => request.query(member, text),
other => request.query(member, other),
}
}
}
if let Some(value) = params.accept.as_ref() {
request.header("Accept", &value.to_string())?;
}
request.apply_options(&self.options);
let answer = self.client.execute(request).await?;
match answer.status() {
http::StatusCode::OK => Ok(QueryExecuteStoredQueryOutcome::Ok {
body: answer.json()?,
headers: QueryExecuteStoredQueryOkHeaders {
etag: answer.header("ETag"),
content_type: answer.header("Content-Type"),
},
}),
http::StatusCode::BAD_REQUEST => Ok(QueryExecuteStoredQueryOutcome::BadRequest {
body: answer.error_body(),
}),
http::StatusCode::NOT_FOUND => Ok(QueryExecuteStoredQueryOutcome::NotFound {
body: answer.error_body(),
}),
http::StatusCode::REQUEST_TIMEOUT => {
Ok(QueryExecuteStoredQueryOutcome::RequestTimeout {
body: answer.error_body(),
})
}
_ => Err(answer.into_undocumented()),
}
}
pub async fn query_execute_stored_query_body(
&self,
params: &QueryExecuteStoredQueryBodyParams,
body: &Query,
) -> Result<QueryExecuteStoredQueryBodyOutcome, crate::rest::client::ClientError> {
let mut request = crate::rest::client::Request::new(
http::Method::POST,
format!(
"/query/{}",
crate::rest::client::path_segment(¶ms.qualified_query_name)
),
);
if let Some(value) = params.accept.as_ref() {
request.header("Accept", &value.to_string())?;
}
if let Some(value) = params.content_type.as_ref() {
request.header("Content-Type", &value.to_string())?;
}
request.json_body(body, params.content_type.as_deref())?;
request.apply_options(&self.options);
let answer = self.client.execute(request).await?;
match answer.status() {
http::StatusCode::OK => Ok(QueryExecuteStoredQueryBodyOutcome::Ok {
body: answer.json()?,
headers: QueryExecuteStoredQueryBodyOkHeaders {
etag: answer.header("ETag"),
content_type: answer.header("Content-Type"),
},
}),
http::StatusCode::BAD_REQUEST => {
Ok(QueryExecuteStoredQueryBodyOutcome::BadRequest {
body: answer.error_body(),
})
}
http::StatusCode::NOT_FOUND => Ok(QueryExecuteStoredQueryBodyOutcome::NotFound {
body: answer.error_body(),
}),
http::StatusCode::REQUEST_TIMEOUT => {
Ok(QueryExecuteStoredQueryBodyOutcome::RequestTimeout {
body: answer.error_body(),
})
}
_ => Err(answer.into_undocumented()),
}
}
pub async fn query_execute_stored_query_version(
&self,
params: &QueryExecuteStoredQueryVersionParams,
) -> Result<QueryExecuteStoredQueryVersionOutcome, crate::rest::client::ClientError>
{
let mut request = crate::rest::client::Request::new(
http::Method::GET,
format!(
"/query/{}/{}",
crate::rest::client::path_segment(¶ms.qualified_query_name),
crate::rest::client::path_segment(¶ms.version)
),
);
if let Some(value) = params.ehr_id.as_ref() {
request.query("ehr_id", value);
}
if let Some(value) = params.offset.as_ref() {
request.query("offset", value);
}
if let Some(value) = params.fetch.as_ref() {
request.query("fetch", value);
}
if let Some(value) = params.query_parameters.as_ref() {
for (member, item) in value {
match item {
serde_json::Value::String(text) => request.query(member, text),
other => request.query(member, other),
}
}
}
if let Some(value) = params.accept.as_ref() {
request.header("Accept", &value.to_string())?;
}
request.apply_options(&self.options);
let answer = self.client.execute(request).await?;
match answer.status() {
http::StatusCode::OK => Ok(QueryExecuteStoredQueryVersionOutcome::Ok {
body: answer.json()?,
headers: QueryExecuteStoredQueryVersionOkHeaders {
etag: answer.header("ETag"),
content_type: answer.header("Content-Type"),
},
}),
http::StatusCode::BAD_REQUEST => {
Ok(QueryExecuteStoredQueryVersionOutcome::BadRequest {
body: answer.error_body(),
})
}
http::StatusCode::NOT_FOUND => {
Ok(QueryExecuteStoredQueryVersionOutcome::NotFound {
body: answer.error_body(),
})
}
http::StatusCode::REQUEST_TIMEOUT => {
Ok(QueryExecuteStoredQueryVersionOutcome::RequestTimeout {
body: answer.error_body(),
})
}
_ => Err(answer.into_undocumented()),
}
}
pub async fn query_execute_stored_query_version_body(
&self,
params: &QueryExecuteStoredQueryVersionBodyParams,
body: &Query,
) -> Result<QueryExecuteStoredQueryVersionBodyOutcome, crate::rest::client::ClientError>
{
let mut request = crate::rest::client::Request::new(
http::Method::POST,
format!(
"/query/{}/{}",
crate::rest::client::path_segment(¶ms.qualified_query_name),
crate::rest::client::path_segment(¶ms.version)
),
);
if let Some(value) = params.accept.as_ref() {
request.header("Accept", &value.to_string())?;
}
if let Some(value) = params.content_type.as_ref() {
request.header("Content-Type", &value.to_string())?;
}
request.json_body(body, params.content_type.as_deref())?;
request.apply_options(&self.options);
let answer = self.client.execute(request).await?;
match answer.status() {
http::StatusCode::OK => Ok(QueryExecuteStoredQueryVersionBodyOutcome::Ok {
body: answer.json()?,
headers: QueryExecuteStoredQueryVersionBodyOkHeaders {
etag: answer.header("ETag"),
content_type: answer.header("Content-Type"),
},
}),
http::StatusCode::BAD_REQUEST => {
Ok(QueryExecuteStoredQueryVersionBodyOutcome::BadRequest {
body: answer.error_body(),
})
}
http::StatusCode::NOT_FOUND => {
Ok(QueryExecuteStoredQueryVersionBodyOutcome::NotFound {
body: answer.error_body(),
})
}
http::StatusCode::REQUEST_TIMEOUT => {
Ok(QueryExecuteStoredQueryVersionBodyOutcome::RequestTimeout {
body: answer.error_body(),
})
}
_ => Err(answer.into_undocumented()),
}
}
}
}
pub const ROUTES: &[(&str, &str, &str)] = &[
("GET", "/query/aql", "query_execute_adhoc_query"),
("POST", "/query/aql", "query_execute_adhoc_query_body"),
(
"GET",
"/query/{qualified_query_name}",
"query_execute_stored_query",
),
(
"POST",
"/query/{qualified_query_name}",
"query_execute_stored_query_body",
),
(
"GET",
"/query/{qualified_query_name}/{version}",
"query_execute_stored_query_version",
),
(
"POST",
"/query/{qualified_query_name}/{version}",
"query_execute_stored_query_version_body",
),
];
pub const ROUTE_PARAMS: &[&[crate::rest::routes::Param]] = &[
QueryExecuteAdhocQueryParams::PARAMS,
QueryExecuteAdhocQueryBodyParams::PARAMS,
QueryExecuteStoredQueryParams::PARAMS,
QueryExecuteStoredQueryBodyParams::PARAMS,
QueryExecuteStoredQueryVersionParams::PARAMS,
QueryExecuteStoredQueryVersionBodyParams::PARAMS,
];
const _: () = assert!(
ROUTE_PARAMS.len() == ROUTES.len(),
"ROUTE_PARAMS carries one row per ROUTES entry"
);
pub const ROUTE_REQUEST_MEDIA: &[&[&str]] = &[
&[],
&["application/json"],
&[],
&["application/json"],
&[],
&["application/json"],
];
const _: () = assert!(
ROUTE_REQUEST_MEDIA.len() == ROUTES.len(),
"ROUTE_REQUEST_MEDIA carries one row per ROUTES entry"
);