use rustify_derive::Endpoint;
use std::fmt::Debug;
use super::responses::{
GenerateCredentialsResponse, GetConfigurationResponse, ListRolesResponse, ReadLeaseResponse,
ReadRoleResponse, RotateRootCredentialsResponse,
};
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(path = "{self.mount}/config/root", method = "POST", builder = "true")]
#[builder(setter(into, strip_option), default)]
pub struct SetConfigurationRequest {
#[endpoint(skip)]
pub mount: String,
pub max_retries: Option<i32>,
pub access_key: String,
pub secret_key: String,
pub region: Option<String>,
pub iam_endpoint: Option<String>,
pub sts_endpoint: Option<String>,
pub username_template: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/config/root",
method = "GET",
builder = "true",
response = "GetConfigurationResponse"
)]
#[builder(setter(into, strip_option), default)]
pub struct GetConfigurationRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/config/rotate-root",
method = "POST",
builder = "true",
response = "RotateRootCredentialsResponse"
)]
#[builder(setter(into, strip_option), default)]
pub struct RotateRootCredentialsRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(path = "{self.mount}/config/lease", method = "POST", builder = "true")]
#[builder(setter(into, strip_option), default)]
pub struct ConfigureLeaseRequest {
#[endpoint(skip)]
pub mount: String,
pub lease: String,
pub lease_max: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/config/lease",
method = "GET",
response = "ReadLeaseResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ReadLeaseRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/roles/{self.name}",
method = "POST",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct CreateUpdateRoleRequest {
#[endpoint(skip)]
pub mount: String,
pub name: String,
pub credential_type: String,
pub role_arns: Option<Vec<String>>,
pub policy_arns: Option<Vec<String>>,
pub policy_document: String,
pub iam_groups: Option<Vec<String>>,
pub iam_tags: Option<Vec<String>>,
pub default_sts_ttl: Option<u32>,
pub max_sts_ttl: Option<u32>,
pub user_path: Option<String>,
pub permissions_boundary_arn: Option<String>,
pub policy: Option<String>,
pub arn: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/roles/{self.name}",
method = "GET",
response = "ReadRoleResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ReadRoleRequest {
#[endpoint(skip)]
pub mount: String,
pub name: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/roles",
method = "LIST",
response = "ListRolesResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ListRolesRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/roles/{self.name}",
method = "DELETE",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct DeleteRoleRequest {
#[endpoint(skip)]
pub mount: String,
pub name: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/creds/{self.name}",
method = "GET",
response = "GenerateCredentialsResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct GenerateCredentialsRequest {
#[endpoint(skip)]
pub mount: String,
pub name: String,
pub role_arn: Option<String>,
pub role_session_name: Option<String>,
pub ttl: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/sts/{self.name}",
method = "POST",
response = "GenerateCredentialsResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct GenerateCredentialsStsRequest {
#[endpoint(skip)]
pub mount: String,
pub name: String,
pub role_arn: Option<String>,
pub role_session_name: Option<String>,
pub ttl: Option<String>,
}