context69_contracts/
sources.rs1use chrono::{DateTime, Utc};
2use rmcp::schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4use utoipa::ToSchema;
5
6use crate::Visibility;
7
8#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
9#[serde(rename_all = "snake_case")]
10pub enum SourceOriginStatusKind {
11 Unknown,
12 Connected,
13 Unreachable,
14 Misconfigured,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
18pub struct SourceStatus {
19 pub group_key: String,
20 pub project_key: String,
21 pub visibility: Visibility,
22 pub source_key: String,
23 pub display_name: String,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub description: Option<String>,
26 #[serde(default)]
27 pub example_queries: Vec<String>,
28 pub connection: String,
29 pub has_database_url: bool,
30 pub origin_status: SourceOriginStatusKind,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub origin_message: Option<String>,
33 pub sync_strategy: String,
34 pub connector_type: String,
35 pub base_query: String,
36 pub batch_size: i64,
37 pub last_cursor_updated_at: Option<DateTime<Utc>>,
38 pub last_cursor_external_id: Option<String>,
39 pub last_success_at: Option<DateTime<Utc>>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
43pub struct ListSourcesResponse {
44 pub sources: Vec<SourceStatus>,
45}