use crate::codec::runtime::{
from_wire_configure_provider_response, from_wire_health_check_response,
from_wire_provider_identity, from_wire_start_runtime_provider_response,
to_wire_configure_provider_request,
};
use crate::generated::v1;
use crate::rpc_support::GestaltError;
pub type ProviderKind = i32;
pub mod provider_kind {
pub const PROVIDER_KIND_UNSPECIFIED: i32 = 0;
pub const PROVIDER_KIND_APP: i32 = 1;
pub const PROVIDER_KIND_AUTHENTICATION: i32 = 2;
pub const PROVIDER_KIND_INDEXEDDB: i32 = 3;
pub const PROVIDER_KIND_SECRETS: i32 = 4;
pub const PROVIDER_KIND_TELEMETRY: i32 = 5;
pub const PROVIDER_KIND_CACHE: i32 = 6;
pub const PROVIDER_KIND_S3: i32 = 7;
pub const PROVIDER_KIND_WORKFLOW: i32 = 8;
pub const PROVIDER_KIND_AUTHORIZATION: i32 = 9;
pub const PROVIDER_KIND_RUNTIME: i32 = 10;
pub const PROVIDER_KIND_AGENT: i32 = 11;
pub const PROVIDER_KIND_EXTERNAL_CREDENTIAL: i32 = 12;
pub const PROVIDER_KIND_TEST: i32 = 13;
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct ConfigureProviderRequest {
pub name: String,
pub config: Option<serde_json::Map<String, serde_json::Value>>,
pub protocol_version: i32,
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct ConfigureProviderResponse {
pub protocol_version: i32,
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct HealthCheckResponse {
pub ready: bool,
pub message: String,
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct ProviderIdentity {
pub kind: ProviderKind,
pub name: String,
pub display_name: String,
pub description: String,
pub version: String,
pub warnings: Vec<String>,
pub min_protocol_version: i32,
pub max_protocol_version: i32,
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct StartRuntimeProviderResponse {
pub protocol_version: i32,
}
pub struct ProviderLifecycle {
inner: v1::provider_lifecycle_client::ProviderLifecycleClient<tonic::transport::Channel>,
timeout: Option<std::time::Duration>,
}
impl ProviderLifecycle {
pub fn new(channel: tonic::transport::Channel) -> Self {
Self {
inner: v1::provider_lifecycle_client::ProviderLifecycleClient::new(channel),
timeout: None,
}
}
pub fn with_timeout(mut self, timeout: std::time::Duration) -> Self {
self.timeout = Some(timeout);
self
}
pub async fn get_provider_identity(&mut self) -> Result<ProviderIdentity, GestaltError> {
let mut tonic_request = tonic::Request::new(());
if let Some(timeout) = self.timeout {
tonic_request.set_timeout(timeout);
}
let response = self.inner.get_provider_identity(tonic_request).await?;
Ok(from_wire_provider_identity(response.into_inner()))
}
pub async fn configure_provider(
&mut self,
name: String,
protocol_version: i32,
config: Option<serde_json::Map<String, serde_json::Value>>,
) -> Result<i32, GestaltError> {
let request = ConfigureProviderRequest {
name,
protocol_version,
config,
};
let mut tonic_request = tonic::Request::new(to_wire_configure_provider_request(request));
if let Some(timeout) = self.timeout {
tonic_request.set_timeout(timeout);
}
let response = from_wire_configure_provider_response(
self.inner
.configure_provider(tonic_request)
.await?
.into_inner(),
);
Ok(response.protocol_version)
}
pub async fn configure_provider_raw(
&mut self,
request: ConfigureProviderRequest,
) -> Result<ConfigureProviderResponse, GestaltError> {
let mut tonic_request = tonic::Request::new(to_wire_configure_provider_request(request));
if let Some(timeout) = self.timeout {
tonic_request.set_timeout(timeout);
}
let response = self.inner.configure_provider(tonic_request).await?;
Ok(from_wire_configure_provider_response(response.into_inner()))
}
pub async fn health_check(&mut self) -> Result<HealthCheckResponse, GestaltError> {
let mut tonic_request = tonic::Request::new(());
if let Some(timeout) = self.timeout {
tonic_request.set_timeout(timeout);
}
let response = self.inner.health_check(tonic_request).await?;
Ok(from_wire_health_check_response(response.into_inner()))
}
pub async fn start_provider(&mut self) -> Result<i32, GestaltError> {
let mut tonic_request = tonic::Request::new(());
if let Some(timeout) = self.timeout {
tonic_request.set_timeout(timeout);
}
let response = from_wire_start_runtime_provider_response(
self.inner.start_provider(tonic_request).await?.into_inner(),
);
Ok(response.protocol_version)
}
pub async fn start_provider_raw(
&mut self,
) -> Result<StartRuntimeProviderResponse, GestaltError> {
let mut tonic_request = tonic::Request::new(());
if let Some(timeout) = self.timeout {
tonic_request.set_timeout(timeout);
}
let response = self.inner.start_provider(tonic_request).await?;
Ok(from_wire_start_runtime_provider_response(
response.into_inner(),
))
}
}