reasoninglayer 0.2.1

Rust client SDK for the Reasoning Layer API
Documentation
//! Data source DTOs.

use std::collections::BTreeMap;

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SourceSummaryDto {
    pub available: bool,
    pub source_id: String,
    pub source_type: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoveredFeatureDto {
    #[serde(default)]
    pub constraints: Vec<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub is_identifier: bool,
    pub is_relation: bool,
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub relation_target: Option<String>,
    pub required: bool,
    pub source_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub type_hint: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoveredSortDto {
    pub confidence: f64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default)]
    pub features: Vec<DiscoveredFeatureDto>,
    pub name: String,
    pub source_name: String,
    #[serde(default)]
    pub suggested_parents: Vec<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoveredSourceRelationDto {
    pub cardinality: String,
    pub confidence: f64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub inverse_name: Option<String>,
    pub relation_name: String,
    pub source_sort: String,
    pub target_sort: String,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct StructuredIngestionStatsDto {
    pub columns_discovered: u64,
    pub documents_rendered: u64,
    pub elapsed_ms: u64,
    pub entities_created: u64,
    pub entities_extracted: u64,
    pub records_processed: u64,
    pub relations_created: u64,
    pub relations_discovered: u64,
    pub sorts_created: u64,
    pub tables_discovered: u64,
    pub terms_created: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegisterSourceRequest {
    pub source_id: String,
    pub source_name: String,
    pub source_type: String,
    #[serde(default)]
    pub config: BTreeMap<String, serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegisterSourceResponse {
    pub success: bool,
    pub source_id: String,
    pub source_type: String,
    pub message: String,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListSourcesResponse {
    #[serde(default)]
    pub sources: Vec<SourceSummaryDto>,
    pub total: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SourceDetailResponse {
    pub source_id: String,
    pub source_type: String,
    pub available: bool,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiscoverSchemaRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sample_size: Option<u32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub include_sample_data: Option<bool>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiscoverSchemaResponse {
    pub source_id: String,
    #[serde(default)]
    pub sorts: Vec<DiscoveredSortDto>,
    #[serde(default)]
    pub relations: Vec<DiscoveredSourceRelationDto>,
    pub total_columns: u64,
    #[serde(default)]
    pub warnings: Vec<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IngestFromSourceRequest {
    pub owner_id: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub type_filter: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub max_records_per_type: Option<u32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub batch_size: Option<u32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub records_per_document: Option<u32>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IngestFromSourceResponse {
    pub success: bool,
    pub source_id: String,
    pub source_type: String,
    #[serde(default)]
    pub stats: StructuredIngestionStatsDto,
    #[serde(default)]
    pub errors: Vec<String>,
}