use super::common::*;
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct Membership {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`attributes`](Membership::attributes).")
)]
pub attributes: Option<Attributes>,
#[builder(setter(doc = "Sets [`created_at`](Membership::created_at)."))]
pub created_at: crate::datetime::DateTime,
#[builder(setter(into, doc = "Sets [`id`](Membership::id)."))]
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`invite`](Membership::invite).")
)]
pub invite: Option<Invite>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`metadata`](Membership::metadata).")
)]
pub metadata: Option<Metadata>,
#[deprecated(
note = "Permissions include only legacy permissions, please use roles instead. Member access is based on their roles within a given resource and the permissions these roles grant."
)]
#[builder(setter(doc = "Sets [`permissions`](Membership::permissions)."))]
pub permissions: Vec<String>,
#[builder(setter(doc = "Sets [`resource`](Membership::resource)."))]
pub resource: MembershipResource,
#[builder(setter(into, doc = "Sets [`resource_id`](Membership::resource_id)."))]
pub resource_id: String,
#[builder(setter(doc = "Sets [`roles`](Membership::roles)."))]
pub roles: Vec<String>,
#[builder(setter(doc = "Sets [`status`](Membership::status)."))]
pub status: MembershipStatus,
#[serde(rename = "type")]
#[builder(setter(into, doc = "Sets [`r#type`](Membership::r#type)."))]
pub r#type: ResourceType,
#[builder(setter(doc = "Sets [`updated_at`](Membership::updated_at)."))]
pub updated_at: crate::datetime::DateTime,
}
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct MembershipResource {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`attributes`](MembershipResource::attributes)."
)
)]
pub attributes: Option<Attributes>,
#[builder(setter(doc = "Sets [`created_at`](MembershipResource::created_at)."))]
pub created_at: crate::datetime::DateTime,
#[builder(setter(into, doc = "Sets [`id`](MembershipResource::id)."))]
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`logo`](MembershipResource::logo).")
)]
pub logo: Option<String>,
#[builder(setter(into, doc = "Sets [`name`](MembershipResource::name)."))]
pub name: String,
#[serde(rename = "type")]
#[builder(setter(into, doc = "Sets [`r#type`](MembershipResource::r#type)."))]
pub r#type: ResourceType,
#[builder(setter(doc = "Sets [`updated_at`](MembershipResource::updated_at)."))]
pub updated_at: crate::datetime::DateTime,
}
pub type ResourceType = String;
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ListParams {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`offset`](ListParams::offset).")
)]
pub offset: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`limit`](ListParams::limit).")
)]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`kind`](ListParams::kind).")
)]
pub kind: Option<ResourceType>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`status`](ListParams::status).")
)]
pub status: Option<MembershipStatus>,
#[serde(rename = "resource.type")]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`resource_type`](ListParams::resource_type)."
)
)]
pub resource_type: Option<ResourceType>,
#[serde(rename = "resource.attributes.sandbox")]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`resource_attributes_sandbox`](ListParams::resource_attributes_sandbox)."
)
)]
pub resource_attributes_sandbox: Option<bool>,
#[serde(rename = "resource.name")]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`resource_name`](ListParams::resource_name)."
)
)]
pub resource_name: Option<String>,
#[serde(rename = "resource.id")]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`resource_id`](ListParams::resource_id)."
)
)]
pub resource_id: Option<String>,
#[serde(rename = "resource.parent.id")]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`resource_parent_id`](ListParams::resource_parent_id)."
)
)]
pub resource_parent_id: Option<String>,
#[serde(rename = "resource.parent.type")]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`resource_parent_type`](ListParams::resource_parent_type)."
)
)]
pub resource_parent_type: Option<ResourceType>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`roles`](ListParams::roles).")
)]
pub roles: Option<Vec<String>>,
}
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ListResponse {
#[builder(setter(doc = "Sets [`items`](ListResponse::items)."))]
pub items: Vec<Membership>,
#[builder(setter(doc = "Sets [`total_count`](ListResponse::total_count)."))]
pub total_count: i64,
}
use crate::client::Client;
#[derive(Debug, PartialEq)]
pub enum ListErrorBody {
BadRequest(Problem),
Unauthorized(Problem),
}
impl crate::error::ProblemDetails for ListErrorBody {
fn problem(&self) -> Option<&crate::resources::common::Problem> {
match self {
Self::BadRequest(problem) => Some(problem),
Self::Unauthorized(problem) => Some(problem),
}
}
}
#[derive(Debug)]
pub struct MembershipsClient<'a> {
client: &'a Client,
}
impl<'a> MembershipsClient<'a> {
pub(crate) fn new(client: &'a Client) -> Self {
Self { client }
}
pub fn client(&self) -> &Client {
self.client
}
pub async fn list(
&self,
params: ListParams,
) -> crate::error::SdkResult<ListResponse, ListErrorBody> {
let path = "/v0.1/memberships";
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.get(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.offset {
request = request.query(&[("offset", value)]);
}
if let Some(ref value) = params.limit {
request = request.query(&[("limit", value)]);
}
if let Some(ref value) = params.kind {
request = request.query(&[("kind", value)]);
}
if let Some(ref value) = params.status {
request = request.query(&[("status", value)]);
}
if let Some(ref value) = params.resource_type {
request = request.query(&[("resource.type", value)]);
}
if let Some(ref value) = params.resource_attributes_sandbox {
request = request.query(&[("resource.attributes.sandbox", value)]);
}
if let Some(ref value) = params.resource_name {
request = request.query(&[("resource.name", value)]);
}
if let Some(ref value) = params.resource_id {
request = request.query(&[("resource.id", value)]);
}
if let Some(ref value) = params.resource_parent_id {
request = request.query(&[("resource.parent.id", value)]);
}
if let Some(ref value) = params.resource_parent_type {
request = request.query(&[("resource.parent.type", value)]);
}
if let Some(ref value) = params.roles {
request = request.query(&[("roles", value)]);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: ListResponse = response.json().await?;
Ok(data)
}
reqwest::StatusCode::BAD_REQUEST => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Problem>(raw).map(ListErrorBody::BadRequest)
})
.await)
}
reqwest::StatusCode::UNAUTHORIZED => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Problem>(raw).map(ListErrorBody::Unauthorized)
})
.await)
}
_ => Err(crate::error::SdkError::unexpected_response(response).await),
}
}
}