(
&self,
object_type: &str,
label_selector: &str,
limit: u32,
offset: u32,
)
| 421 | Ok(rows.into_iter().map(row_to_object_record).collect()) |
| 422 | } |
| 423 | pub async fn list_with_selector( |
| 424 | &self, |
| 425 | object_type: &str, |
| 426 | label_selector: &str, |
| 427 | limit: u32, |
| 428 | offset: u32, |
| 429 | ) -> PersistenceResult<Vec<ObjectRecord>> { |
| 430 | use super::parse_label_selector; |
| 431 | |
| 432 | let required_labels = parse_label_selector(label_selector)?; |
| 433 | let all_records = self.list(object_type, u32::MAX, 0).await?; |
| 434 | |
| 435 | let filtered: Vec<ObjectRecord> = all_records |
| 436 | .into_iter() |
| 437 | .filter(|record| { |
| 438 | let labels_json = record.labels.as_deref().unwrap_or("{}"); |
| 439 | let labels: std::collections::HashMap<String, String> = |
| 440 | serde_json::from_str(labels_json).unwrap_or_default(); |
| 441 | |
| 442 | required_labels |
| 443 | .iter() |
| 444 | .all(|(key, value)| labels.get(key).is_some_and(|v| v == value)) |
| 445 | }) |
| 446 | .skip(offset as usize) |
| 447 | .take(limit as usize) |
| 448 | .collect(); |
| 449 | |
| 450 | Ok(filtered) |
| 451 | } |
| 452 | pub async fn put_policy_revision( |
| 453 | &self, |
| 454 | id: &str, |
nothing calls this directly
no test coverage detected