use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
#[derive(Debug, Clone, FromRow)]
pub struct CredentialEntry {
pub id: i64,
pub name: String,
#[sqlx(rename = "type")]
pub credential_type: String,
pub data: String,
#[sqlx(default)]
pub meta: Option<serde_json::Value>,
#[sqlx(default)]
pub tags: Option<Vec<String>>,
#[sqlx(default)]
pub description: Option<String>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CredentialCreateRequest {
pub name: String,
#[serde(rename = "type")]
pub credential_type: String,
pub data: serde_json::Value,
#[serde(default)]
pub meta: Option<serde_json::Value>,
#[serde(default)]
pub tags: Option<Vec<String>>,
#[serde(default)]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CredentialResponse {
pub id: String,
pub name: String,
#[serde(rename = "type")]
pub credential_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<serde_json::Value>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CredentialListResponse {
pub items: Vec<CredentialResponse>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<CredentialFilter>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CredentialFilter {
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub credential_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct GCPTokenRequest {
#[serde(default)]
pub scopes: Option<Vec<String>>,
#[serde(default)]
pub credential: Option<String>,
#[serde(default)]
pub credential_id: Option<String>,
#[serde(default)]
pub credentials_info: Option<serde_json::Value>,
#[serde(default)]
pub service_account_secret: Option<String>,
#[serde(default)]
pub credentials_path: Option<String>,
#[serde(default)]
pub use_metadata: Option<bool>,
#[serde(default)]
pub store_as: Option<String>,
#[serde(default)]
pub store_type: Option<String>,
#[serde(default)]
pub store_tags: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GCPTokenResponse {
pub access_token: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub token_expiry: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub scopes: Option<Vec<String>>,
}