reinhardt_admin/types/
responses.rs1use crate::types::models::{ColumnInfo, FilterInfo, ModelInfo};
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct DashboardResponse {
10 pub site_name: String,
12 pub site_header: String,
14 pub url_prefix: String,
16 pub login_url: String,
18 pub logout_url: String,
20 pub models: Vec<ModelInfo>,
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub csrf_token: Option<String>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct ListResponse {
30 pub model_name: String,
32 pub count: u64,
34 pub page: u64,
36 pub page_size: u64,
38 pub total_pages: u64,
40 pub results: Vec<HashMap<String, serde_json::Value>>,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub available_filters: Option<Vec<FilterInfo>>,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub columns: Option<Vec<ColumnInfo>>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct DetailResponse {
53 pub model_name: String,
55 pub data: HashMap<String, serde_json::Value>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct MutationResponse {
62 pub success: bool,
64 pub message: String,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub affected: Option<u64>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub data: Option<HashMap<String, serde_json::Value>>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct BulkDeleteResponse {
77 pub success: bool,
79 pub deleted: u64,
81 pub message: String,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct ImportResponse {
88 pub success: bool,
90 pub imported: u64,
92 pub updated: u64,
94 pub skipped: u64,
96 pub failed: u64,
98 pub message: String,
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub errors: Option<Vec<String>>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
107#[non_exhaustive]
108pub struct ExportResponse {
109 #[serde(with = "serde_bytes")]
111 pub data: Vec<u8>,
112 pub filename: String,
114 pub content_type: String,
116 pub truncated: bool,
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub total_count: Option<u64>,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
125pub struct LoginResponse {
126 pub token: String,
128 pub username: String,
130 pub user_id: String,
132 pub is_staff: bool,
134 pub is_superuser: bool,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct FieldsResponse {
141 pub model_name: String,
143 pub fields: Vec<crate::types::models::FieldInfo>,
145 #[serde(skip_serializing_if = "Option::is_none")]
148 pub values: Option<HashMap<String, serde_json::Value>>,
149}