use super::{
common::{ServiceCheck, SessionEntry},
responses::CreateSessionResponse,
};
use crate::api::Features;
use consulrs_derive::QueryEndpoint;
use derive_builder::Builder;
use rustify_derive::Endpoint;
use serde::Serialize;
use std::fmt::Debug;
#[derive(Builder, Clone, Debug, Default, Endpoint, QueryEndpoint, Serialize)]
#[endpoint(
path = "session/create",
method = "PUT",
response = "CreateSessionResponse",
builder = "true"
)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct CreateSessionRequest {
#[endpoint(skip)]
#[serde(skip)]
pub features: Option<Features>,
pub behavior: Option<String>,
pub create_index: Option<u64>,
#[serde(rename = "ID")]
pub id: Option<String>,
pub lock_delay: Option<String>,
pub name: Option<String>,
pub namespace: Option<String>,
pub node: Option<String>,
pub node_checks: Option<Vec<String>>,
pub service_checks: Option<Vec<ServiceCheck>>,
#[serde(rename = "TTL")]
pub ttl: Option<String>,
}
#[derive(Builder, Clone, Debug, Default, Endpoint, QueryEndpoint, Serialize)]
#[endpoint(path = "session/destroy/{self.uuid}", method = "PUT", builder = "true")]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct DeleteSessionRequest {
#[endpoint(skip)]
#[serde(skip)]
pub features: Option<Features>,
#[endpoint(skip)]
pub uuid: String,
#[endpoint(query)]
pub dc: Option<String>,
#[endpoint(query)]
pub ns: Option<String>,
}
#[derive(Builder, Clone, Debug, Default, Endpoint, QueryEndpoint, Serialize)]
#[endpoint(
path = "session/info/{self.uuid}",
response = "Vec<SessionEntry>",
builder = "true"
)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct ReadSessionRequest {
#[endpoint(skip)]
#[serde(skip)]
pub features: Option<Features>,
#[endpoint(skip)]
pub uuid: String,
#[endpoint(query)]
pub dc: Option<String>,
#[endpoint(query)]
pub ns: Option<String>,
}
#[derive(Builder, Clone, Debug, Default, Endpoint, QueryEndpoint, Serialize)]
#[endpoint(
path = "session/node/{self.node}",
response = "Vec<SessionEntry>",
builder = "true"
)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct ListNodeSessionsRequest {
#[endpoint(skip)]
#[serde(skip)]
pub features: Option<Features>,
#[endpoint(skip)]
pub node: String,
#[endpoint(query)]
pub dc: Option<String>,
#[endpoint(query)]
pub ns: Option<String>,
}
#[derive(Builder, Clone, Debug, Default, Endpoint, QueryEndpoint, Serialize)]
#[endpoint(
path = "session/list",
response = "Vec<SessionEntry>",
builder = "true"
)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct ListSessionsRequest {
#[endpoint(skip)]
#[serde(skip)]
pub features: Option<Features>,
#[endpoint(query)]
pub dc: Option<String>,
#[endpoint(query)]
pub ns: Option<String>,
}
#[derive(Builder, Clone, Debug, Default, Endpoint, QueryEndpoint, Serialize)]
#[endpoint(
path = "session/renew/{self.uuid}",
method = "PUT",
response = "Vec<SessionEntry>",
builder = "true"
)]
#[serde(rename_all = "PascalCase")]
#[builder(setter(into, strip_option), default)]
pub struct RenewSessionRequest {
#[endpoint(skip)]
#[serde(skip)]
pub features: Option<Features>,
#[endpoint(skip)]
pub uuid: String,
#[endpoint(query)]
pub dc: Option<String>,
#[endpoint(query)]
pub ns: Option<String>,
}