Skip to main content

orvanta_api/models/
capabilities.rs

1/*
2 * Orvanta API
3 *
4 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5 *
6 * The version of the OpenAPI document: 6.5.0
7 * Contact: contact@orvanta.cloud
8 * Generated by: https://openapi-generator.tech
9 */
10
11use crate::models;
12use serde::{Deserialize, Serialize};
13
14/// Capabilities : What a migration connector declares it can do. The engine consults this before it starts, so an unsupported operation is refused up front instead of failing part-way through a run. Every field defaults to `false` for a connector that has not declared it -- an absent capability always reads as \"no\", never as an optimistic \"yes\". There is deliberately no per-field \"unknown\" state: unlike a write-permission probe (which can genuinely fail at runtime, and where the engine branches on the difference), a capability is a static statement a connector makes about itself, and \"not declared\" and \"cannot\" produce identical behaviour. Per connection, not per connector type -- two instances of the same connector may answer differently (a DuckDB store over Parquet has a schema, one over a headerless CSV does not).
15#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
16pub struct Capabilities {
17    /// The connector can enumerate a dataset's columns authoritatively. `false` means it has no schema authority at all (a headerless CSV, a schema-less collection) -- not that the dataset is missing; the mapping is then reported as unvalidated (a warning) rather than as every field being absent.
18    #[serde(rename = "schema_introspection")]
19    pub schema_introspection: bool,
20    /// The connector can page a dataset by a unique, total order, so batches are a stable partition with no skipped or duplicated rows. `false` makes it unusable as a source and blocks the run. Whether one particular table has such a key (e.g. a primary key) is a separate, per-table runtime error.
21    #[serde(rename = "stable_paging")]
22    pub stable_paging: bool,
23    /// The connector can resolve a dotted `ColumnMapping.source_column` (`profile.address.city`), not just a top-level name. A relational connector declares `false`, and any nested mapping entry is then an `Error`-severity issue naming the offending path.
24    #[serde(rename = "nested_source_paths")]
25    pub nested_source_paths: bool,
26    /// The connector can be a migration target at all. `false` is what \"this target is read-only\" is read from -- distinct from the per-table, per-connection question of whether the current role holds `INSERT`, which is probed separately and reported through `MappingReport`.
27    #[serde(rename = "writable")]
28    pub writable: bool,
29    /// A batch is applied atomically -- all rows or none. `false` does not block a run, but is warned about: a failure can leave a partially applied batch to reconcile by hand.
30    #[serde(rename = "transactional_batch")]
31    pub transactional_batch: bool,
32    /// The connector's page cursor is durable across a process restart. This is only the connector half of checkpoint/resume; the engine does not persist run state yet, so no run is resumable today regardless of this value. The dry-run report says which half is missing.
33    #[serde(rename = "resumable_cursor")]
34    pub resumable_cursor: bool,
35}
36
37impl Capabilities {
38    /// What a migration connector declares it can do. The engine consults this before it starts, so an unsupported operation is refused up front instead of failing part-way through a run. Every field defaults to `false` for a connector that has not declared it -- an absent capability always reads as \"no\", never as an optimistic \"yes\". There is deliberately no per-field \"unknown\" state: unlike a write-permission probe (which can genuinely fail at runtime, and where the engine branches on the difference), a capability is a static statement a connector makes about itself, and \"not declared\" and \"cannot\" produce identical behaviour. Per connection, not per connector type -- two instances of the same connector may answer differently (a DuckDB store over Parquet has a schema, one over a headerless CSV does not).
39    pub fn new(schema_introspection: bool, stable_paging: bool, nested_source_paths: bool, writable: bool, transactional_batch: bool, resumable_cursor: bool) -> Capabilities {
40        Capabilities {
41            schema_introspection,
42            stable_paging,
43            nested_source_paths,
44            writable,
45            transactional_batch,
46            resumable_cursor,
47        }
48    }
49}
50