ODCSImporter

Struct ODCSImporter 

Source
pub struct ODCSImporter { /* private fields */ }
Expand description

ODCS parser service for parsing Open Data Contract Standard YAML files. Handles ODCS v3.1.0 (primary format) and legacy ODCL formats (converted to ODCS).

Implementations§

Source§

impl ODCSImporter

Source

pub fn new() -> Self

Create a new ODCS parser instance.

§Example
use data_modelling_core::import::odcs::ODCSImporter;

let mut importer = ODCSImporter::new();
Source

pub fn import( &mut self, yaml_content: &str, ) -> Result<ImportResult, ImportError>

Import ODCS/ODCL YAML content and create Table (SDK interface).

Supports ODCS v3.1.0 (primary), legacy ODCL formats (converted to ODCS), and Liquibase formats.

§Arguments
  • yaml_content - ODCS/ODCL YAML content as a string
§Returns

An ImportResult containing the extracted table and any parse errors.

§Example
use data_modelling_core::import::odcs::ODCSImporter;

let mut importer = ODCSImporter::new();
let yaml = r#"
apiVersion: v3.1.0
kind: DataContract
id: 550e8400-e29b-41d4-a716-446655440000
version: 1.0.0
name: users
schema:
  - name: users
    properties:
      - name: id
        logicalType: bigint
"#;
let result = importer.import(yaml).unwrap();
assert_eq!(result.tables.len(), 1);
Source

pub fn import_contract( &mut self, yaml_content: &str, ) -> Result<ODCSContract, ImportError>

Import ODCS YAML content and return an ODCSContract (new v2 API).

This method returns the native ODCS contract structure, which properly models the ODCS v3.1.0 three-level hierarchy:

  • Contract level (apiVersion, domain, etc.)
  • Schema level (tables/views with physicalName, businessName, etc.)
  • Property level (columns with all metadata)

This API provides lossless round-trip import/export and supports multi-table contracts.

§Arguments
  • yaml_content - ODCS YAML content as a string
§Returns

An ODCSContract containing the full contract with all schemas and properties.

§Example
use data_modelling_core::import::odcs::ODCSImporter;

let mut importer = ODCSImporter::new();
let yaml = r#"
apiVersion: v3.1.0
kind: DataContract
id: 550e8400-e29b-41d4-a716-446655440000
version: 1.0.0
name: my-contract
domain: retail
schema:
  - name: users
    physicalName: tbl_users
    properties:
      - name: id
        logicalType: integer
        primaryKey: true
      - name: email
        logicalType: string
        required: true
"#;
let contract = importer.import_contract(yaml).unwrap();
assert_eq!(contract.name, "my-contract");
assert_eq!(contract.schema.len(), 1);
assert_eq!(contract.schema[0].name, "users");
Source

pub fn parse_table( &mut self, yaml_content: &str, ) -> Result<(Table, Vec<ParserError>)>

Parse ODCS/ODCL YAML content and create Table (public method for native app use).

This method returns the full Table object with all metadata, suitable for use in native applications that need direct access to the parsed table structure. For API use, prefer the import() method which returns ImportResult.

§Returns

Returns a tuple of (Table, list of errors/warnings). Errors list is empty if parsing is successful.

Source

pub fn parse_struct_type_from_string( &self, field_name: &str, type_str: &str, field_data: &Map<String, JsonValue>, ) -> Result<Vec<Column>>

Parse STRUCT type definition from string (e.g., “ARRAY<STRUCT<ID: STRING, NAME: STRING>>”). Parse STRUCT type from string and create nested columns This is public so it can be used by SQL importer to parse STRUCT types

Trait Implementations§

Source§

impl Default for ODCSImporter

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more