use actix_web::{web, HttpResponse, Responder};
use serde::{Deserialize, Serialize};
use serde_json::json;
use std::collections::HashMap;
use crate::catalog::MaintenanceInfo;
#[derive(Deserialize, Debug)]
#[allow(unused)]
pub struct ProvisionParams {
pub accepts_incomplete: Option<bool>,
}
#[derive(Deserialize, Debug)]
#[allow(unused)]
pub struct ServiceInstanceRequestBody {
pub service_id: String,
pub plan_id: String,
pub context: Option<HashMap<String, String>>,
pub organization_guid: String,
pub space_guid: String,
pub parameters: Option<HashMap<String, String>>,
pub maintenance_info: Option<MaintenanceInfo>,
}
#[derive(Serialize, Default, Debug)]
#[allow(unused)]
pub struct CreatedServiceIstance {
pub dashboard_url: Option<String>,
pub operation: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<ServiceInstanceMetadata>,
}
#[derive(Serialize, Default, Debug)]
#[allow(unused)]
pub struct ServiceInstanceMetadata {
pub labels: HashMap<String, String>,
}
pub async fn put_service_instance(
_instance_id: web::Path<String>,
web::Query(params): web::Query<ProvisionParams>,
web::Json(body): web::Json<ServiceInstanceRequestBody>,
) -> impl Responder {
log::info!("params {:?}, body:\n{:#?}", params, body);
HttpResponse::Created().json(CreatedServiceIstance::default())
}
#[derive(Deserialize, Debug)]
#[allow(unused)]
pub struct ServiceFetchParams {
pub service: Option<String>,
pub plan_id: Option<String>,
}
#[derive(Serialize, Default, Debug)]
#[allow(unused)]
pub struct ServiceIstance {
#[serde(skip_serializing_if = "Option::is_none")]
pub service_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dashboard_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub operation: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<ServiceInstanceMetadata>,
}
pub async fn get_service_instance(
_instance_id: web::Path<String>,
web::Query(params): web::Query<ServiceFetchParams>,
) -> impl Responder {
log::info!("params {:?}", params);
HttpResponse::Ok().json(ServiceIstance::default())
}
#[derive(Deserialize, Debug)]
#[allow(unused)]
pub struct ServiceUpdateRequestBody {
pub service_id: String,
pub plan_id: Option<String>,
pub context: Option<HashMap<String, String>>,
pub parameters: Option<HashMap<String, String>>,
pub previous_values: Option<PreviousValues>,
pub maintenance_info: Option<MaintenanceInfo>,
}
#[derive(Deserialize, Debug)]
#[allow(unused)]
pub struct PreviousValues {
pub service_id: Option<String>,
pub plan_id: Option<String>,
pub organization_id: Option<String>,
pub space_id: Option<String>,
pub maintenance_info: Option<MaintenanceInfo>,
}
pub async fn patch_service_instance(
_instance_id: web::Path<String>,
web::Query(params): web::Query<ProvisionParams>,
web::Json(body): web::Json<ServiceUpdateRequestBody>,
) -> impl Responder {
log::info!("params {:?}, body:\n{:#?}", params, body);
HttpResponse::Ok().json(CreatedServiceIstance::default())
}
#[derive(Deserialize, Debug)]
#[allow(unused)]
pub struct ServiceDeleteParams {
pub service_id: String,
pub plan_id: String,
pub accepts_incomplete: Option<bool>,
}
pub async fn delete_service_instance(
_instance_id: web::Path<String>,
web::Query(params): web::Query<ServiceDeleteParams>,
) -> impl Responder {
log::info!("params {:?}", params);
HttpResponse::Ok().json(json!({}))
}