use crate::async_trait;
use serde::{Deserialize, Serialize};
use shuttle_service::{
resource::{ProvisionResourceRequest, ResourceType},
DeploymentMetadata, Error, IntoResource, ResourceFactory, ResourceInputBuilder, SecretStore,
};
#[derive(Default)]
pub struct Metadata;
#[async_trait]
impl ResourceInputBuilder for Metadata {
type Input = DeploymentMetadata;
type Output = DeploymentMetadata;
async fn build(self, factory: &ResourceFactory) -> Result<Self::Input, Error> {
Ok(factory.get_metadata())
}
}
#[derive(Default)]
pub struct Secrets;
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct SecretsOutputWrapper(SecretStore);
#[async_trait]
impl ResourceInputBuilder for Secrets {
type Input = ProvisionResourceRequest;
type Output = SecretsOutputWrapper;
async fn build(self, _factory: &ResourceFactory) -> Result<Self::Input, Error> {
Ok(ProvisionResourceRequest {
r#type: ResourceType::Secrets,
config: serde_json::Value::Null,
})
}
}
#[async_trait]
impl IntoResource<SecretStore> for SecretsOutputWrapper {
async fn into_resource(self) -> Result<SecretStore, Error> {
Ok(self.0)
}
}