Skip to content

Commit bd17d43

Browse files
committed
remove duplicate row struct
1 parent 83f4da3 commit bd17d43

File tree

2 files changed

+60
-114
lines changed

2 files changed

+60
-114
lines changed

src/catalog/postgres_manager.rs

Lines changed: 30 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,30 @@ pub struct PostgresCatalogManager {
1414
backend: CatalogBackend<Postgres>,
1515
}
1616

17+
/// Row type for secret metadata queries (Postgres handles timestamps natively)
18+
#[derive(sqlx::FromRow)]
19+
struct SecretMetadataRow {
20+
name: String,
21+
provider: String,
22+
provider_ref: Option<String>,
23+
status: String,
24+
created_at: DateTime<Utc>,
25+
updated_at: DateTime<Utc>,
26+
}
27+
28+
impl SecretMetadataRow {
29+
fn into_metadata(self) -> SecretMetadata {
30+
SecretMetadata {
31+
name: self.name,
32+
provider: self.provider,
33+
provider_ref: self.provider_ref,
34+
status: SecretStatus::from_str(&self.status).unwrap_or(SecretStatus::Active),
35+
created_at: self.created_at,
36+
updated_at: self.updated_at,
37+
}
38+
}
39+
}
40+
1741
impl PostgresCatalogManager {
1842
pub async fn new(connection_string: &str) -> Result<Self> {
1943
let pool = PgPoolOptions::new()
@@ -194,61 +218,27 @@ impl CatalogManager for PostgresCatalogManager {
194218
}
195219

196220
async fn get_secret_metadata(&self, name: &str) -> Result<Option<SecretMetadata>> {
197-
#[derive(sqlx::FromRow)]
198-
struct Row {
199-
name: String,
200-
provider: String,
201-
provider_ref: Option<String>,
202-
status: String,
203-
created_at: DateTime<Utc>,
204-
updated_at: DateTime<Utc>,
205-
}
206-
207-
let row: Option<Row> = sqlx::query_as(
221+
let row: Option<SecretMetadataRow> = sqlx::query_as(
208222
"SELECT name, provider, provider_ref, status, created_at, updated_at \
209223
FROM secrets WHERE name = $1 AND status = 'active'",
210224
)
211225
.bind(name)
212226
.fetch_optional(self.backend.pool())
213227
.await?;
214228

215-
Ok(row.map(|r| SecretMetadata {
216-
name: r.name,
217-
provider: r.provider,
218-
provider_ref: r.provider_ref,
219-
status: SecretStatus::from_str(&r.status).unwrap_or(SecretStatus::Active),
220-
created_at: r.created_at,
221-
updated_at: r.updated_at,
222-
}))
229+
Ok(row.map(SecretMetadataRow::into_metadata))
223230
}
224231

225232
async fn get_secret_metadata_any_status(&self, name: &str) -> Result<Option<SecretMetadata>> {
226-
#[derive(sqlx::FromRow)]
227-
struct Row {
228-
name: String,
229-
provider: String,
230-
provider_ref: Option<String>,
231-
status: String,
232-
created_at: DateTime<Utc>,
233-
updated_at: DateTime<Utc>,
234-
}
235-
236-
let row: Option<Row> = sqlx::query_as(
233+
let row: Option<SecretMetadataRow> = sqlx::query_as(
237234
"SELECT name, provider, provider_ref, status, created_at, updated_at \
238235
FROM secrets WHERE name = $1",
239236
)
240237
.bind(name)
241238
.fetch_optional(self.backend.pool())
242239
.await?;
243240

244-
Ok(row.map(|r| SecretMetadata {
245-
name: r.name,
246-
provider: r.provider,
247-
provider_ref: r.provider_ref,
248-
status: SecretStatus::from_str(&r.status).unwrap_or(SecretStatus::Active),
249-
created_at: r.created_at,
250-
updated_at: r.updated_at,
251-
}))
241+
Ok(row.map(SecretMetadataRow::into_metadata))
252242
}
253243

254244
async fn create_secret_metadata(&self, metadata: &SecretMetadata) -> Result<()> {
@@ -358,17 +348,7 @@ impl CatalogManager for PostgresCatalogManager {
358348
}
359349

360350
async fn list_secrets(&self) -> Result<Vec<SecretMetadata>> {
361-
#[derive(sqlx::FromRow)]
362-
struct Row {
363-
name: String,
364-
provider: String,
365-
provider_ref: Option<String>,
366-
status: String,
367-
created_at: DateTime<Utc>,
368-
updated_at: DateTime<Utc>,
369-
}
370-
371-
let rows: Vec<Row> = sqlx::query_as(
351+
let rows: Vec<SecretMetadataRow> = sqlx::query_as(
372352
"SELECT name, provider, provider_ref, status, created_at, updated_at \
373353
FROM secrets WHERE status = 'active' ORDER BY name",
374354
)
@@ -377,14 +357,7 @@ impl CatalogManager for PostgresCatalogManager {
377357

378358
Ok(rows
379359
.into_iter()
380-
.map(|r| SecretMetadata {
381-
name: r.name,
382-
provider: r.provider,
383-
provider_ref: r.provider_ref,
384-
status: SecretStatus::from_str(&r.status).unwrap_or(SecretStatus::Active),
385-
created_at: r.created_at,
386-
updated_at: r.updated_at,
387-
})
360+
.map(SecretMetadataRow::into_metadata)
388361
.collect())
389362
}
390363
}

src/catalog/sqlite_manager.rs

Lines changed: 30 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,30 @@ pub struct SqliteCatalogManager {
1414
catalog_path: String,
1515
}
1616

17+
/// Row type for secret metadata queries (SQLite stores timestamps as strings)
18+
#[derive(sqlx::FromRow)]
19+
struct SecretMetadataRow {
20+
name: String,
21+
provider: String,
22+
provider_ref: Option<String>,
23+
status: String,
24+
created_at: String,
25+
updated_at: String,
26+
}
27+
28+
impl SecretMetadataRow {
29+
fn into_metadata(self) -> SecretMetadata {
30+
SecretMetadata {
31+
name: self.name,
32+
provider: self.provider,
33+
provider_ref: self.provider_ref,
34+
status: SecretStatus::from_str(&self.status).unwrap_or(SecretStatus::Active),
35+
created_at: self.created_at.parse().unwrap_or_else(|_| Utc::now()),
36+
updated_at: self.updated_at.parse().unwrap_or_else(|_| Utc::now()),
37+
}
38+
}
39+
}
40+
1741
impl Debug for SqliteCatalogManager {
1842
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
1943
f.debug_struct("SqliteCatalogManager")
@@ -176,61 +200,27 @@ impl CatalogManager for SqliteCatalogManager {
176200
}
177201

178202
async fn get_secret_metadata(&self, name: &str) -> Result<Option<SecretMetadata>> {
179-
#[derive(sqlx::FromRow)]
180-
struct Row {
181-
name: String,
182-
provider: String,
183-
provider_ref: Option<String>,
184-
status: String,
185-
created_at: String,
186-
updated_at: String,
187-
}
188-
189-
let row: Option<Row> = sqlx::query_as(
203+
let row: Option<SecretMetadataRow> = sqlx::query_as(
190204
"SELECT name, provider, provider_ref, status, created_at, updated_at \
191205
FROM secrets WHERE name = ? AND status = 'active'",
192206
)
193207
.bind(name)
194208
.fetch_optional(self.backend.pool())
195209
.await?;
196210

197-
Ok(row.map(|r| SecretMetadata {
198-
name: r.name,
199-
provider: r.provider,
200-
provider_ref: r.provider_ref,
201-
status: SecretStatus::from_str(&r.status).unwrap_or(SecretStatus::Active),
202-
created_at: r.created_at.parse().unwrap_or_else(|_| Utc::now()),
203-
updated_at: r.updated_at.parse().unwrap_or_else(|_| Utc::now()),
204-
}))
211+
Ok(row.map(SecretMetadataRow::into_metadata))
205212
}
206213

207214
async fn get_secret_metadata_any_status(&self, name: &str) -> Result<Option<SecretMetadata>> {
208-
#[derive(sqlx::FromRow)]
209-
struct Row {
210-
name: String,
211-
provider: String,
212-
provider_ref: Option<String>,
213-
status: String,
214-
created_at: String,
215-
updated_at: String,
216-
}
217-
218-
let row: Option<Row> = sqlx::query_as(
215+
let row: Option<SecretMetadataRow> = sqlx::query_as(
219216
"SELECT name, provider, provider_ref, status, created_at, updated_at \
220217
FROM secrets WHERE name = ?",
221218
)
222219
.bind(name)
223220
.fetch_optional(self.backend.pool())
224221
.await?;
225222

226-
Ok(row.map(|r| SecretMetadata {
227-
name: r.name,
228-
provider: r.provider,
229-
provider_ref: r.provider_ref,
230-
status: SecretStatus::from_str(&r.status).unwrap_or(SecretStatus::Active),
231-
created_at: r.created_at.parse().unwrap_or_else(|_| Utc::now()),
232-
updated_at: r.updated_at.parse().unwrap_or_else(|_| Utc::now()),
233-
}))
223+
Ok(row.map(SecretMetadataRow::into_metadata))
234224
}
235225

236226
async fn create_secret_metadata(&self, metadata: &SecretMetadata) -> Result<()> {
@@ -344,17 +334,7 @@ impl CatalogManager for SqliteCatalogManager {
344334
}
345335

346336
async fn list_secrets(&self) -> Result<Vec<SecretMetadata>> {
347-
#[derive(sqlx::FromRow)]
348-
struct Row {
349-
name: String,
350-
provider: String,
351-
provider_ref: Option<String>,
352-
status: String,
353-
created_at: String,
354-
updated_at: String,
355-
}
356-
357-
let rows: Vec<Row> = sqlx::query_as(
337+
let rows: Vec<SecretMetadataRow> = sqlx::query_as(
358338
"SELECT name, provider, provider_ref, status, created_at, updated_at \
359339
FROM secrets WHERE status = 'active' ORDER BY name",
360340
)
@@ -363,14 +343,7 @@ impl CatalogManager for SqliteCatalogManager {
363343

364344
Ok(rows
365345
.into_iter()
366-
.map(|r| SecretMetadata {
367-
name: r.name,
368-
provider: r.provider,
369-
provider_ref: r.provider_ref,
370-
status: SecretStatus::from_str(&r.status).unwrap_or(SecretStatus::Active),
371-
created_at: r.created_at.parse().unwrap_or_else(|_| Utc::now()),
372-
updated_at: r.updated_at.parse().unwrap_or_else(|_| Utc::now()),
373-
})
346+
.map(SecretMetadataRow::into_metadata)
374347
.collect())
375348
}
376349
}

0 commit comments

Comments
 (0)