/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { type Hashable } from '@finos/legend-shared';
import type { Type } from '../packageableElements/domain/Type.js';
import type { PackageableElementReference } from '../packageableElements/PackageableElementReference.js';
import type { RelationalCSVData } from './RelationalCSVData.js';
import type { INTERNAL__UnknownEmbeddedData } from './INTERNAL__UnknownEmbeddedData.js';
import type { PackageableElement } from '../packageableElements/PackageableElement.js';
export interface EmbeddedDataVisitor<T> {
    visit_EmbeddedData(data: EmbeddedData): T;
    visit_INTERNAL__UnknownEmbeddedData(data: INTERNAL__UnknownEmbeddedData): T;
    visit_ExternalFormatData(data: ExternalFormatData): T;
    visit_ModelStoreData(data: ModelStoreData): T;
    visit_RelationElementsData(data: RelationElementsData): T;
    visit_DataElementReference(data: DataElementReference): T;
    visit_RelationalCSVData(data: RelationalCSVData): T;
}
export declare abstract class EmbeddedData implements Hashable {
    abstract get hashCode(): string;
    abstract accept_EmbeddedDataVisitor<T>(visitor: EmbeddedDataVisitor<T>): T;
}
export declare class DataElementReference extends EmbeddedData implements Hashable {
    dataElement: PackageableElementReference<PackageableElement>;
    get hashCode(): string;
    accept_EmbeddedDataVisitor<T>(visitor: EmbeddedDataVisitor<T>): T;
}
export declare class ExternalFormatData extends EmbeddedData implements Hashable {
    contentType: string;
    data: string;
    get hashCode(): string;
    accept_EmbeddedDataVisitor<T>(visitor: EmbeddedDataVisitor<T>): T;
}
export declare abstract class ModelData implements Hashable {
    model: PackageableElementReference<Type>;
    abstract get hashCode(): string;
}
export declare class ModelEmbeddedData extends ModelData implements Hashable {
    data: EmbeddedData;
    get hashCode(): string;
}
export declare class ModelInstanceData extends ModelData {
    /**
     * Studio does not process value specification, they are left in raw JSON form
     * TODO: we may want to build out the instance `objects` once we build out the form
     *
     * @discrepancy model
     */
    instances: object;
    get hashCode(): string;
}
export declare class ModelStoreData extends EmbeddedData implements Hashable {
    modelData: ModelData[] | undefined;
    get hashCode(): string;
    accept_EmbeddedDataVisitor<T>(visitor: EmbeddedDataVisitor<T>): T;
}
export declare class RelationRowTestData implements Hashable {
    values: string[];
    get hashCode(): string;
}
export declare class RelationElement implements Hashable {
    columns: string[];
    paths: string[];
    rows: RelationRowTestData[];
    get hashCode(): string;
}
export declare class RelationElementsData extends EmbeddedData implements Hashable {
    relationElements: RelationElement[];
    get hashCode(): string;
    accept_EmbeddedDataVisitor<T>(visitor: EmbeddedDataVisitor<T>): T;
}
//# sourceMappingURL=EmbeddedData.d.ts.map