/**
 * 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 { FlatDataSection } from './FlatDataSection.js';
import type { PrimitiveType } from '../../../domain/PrimitiveType.js';
export declare abstract class FlatDataDataType {
    readonly _correspondingPrimitiveType?: PrimitiveType | undefined;
    constructor(correspondingPrimitiveType?: PrimitiveType);
    abstract get hashCode(): string;
}
export declare class FlatDataBoolean extends FlatDataDataType implements Hashable {
    trueString?: string | undefined;
    falseString?: string | undefined;
    get hashCode(): string;
}
export declare class FlatDataString extends FlatDataDataType implements Hashable {
    get hashCode(): string;
}
export declare class FlatDataNumber extends FlatDataDataType implements Hashable {
    get hashCode(): string;
}
export declare class FlatDataInteger extends FlatDataNumber implements Hashable {
    get hashCode(): string;
}
export declare class FlatDataFloat extends FlatDataNumber implements Hashable {
    get hashCode(): string;
}
export declare class FlatDataDecimal extends FlatDataNumber implements Hashable {
    get hashCode(): string;
}
export declare class FlatDataDate extends FlatDataDataType implements Hashable {
    dateFormat?: string[] | undefined;
    timeZone?: string | undefined;
    get hashCode(): string;
}
export declare class FlatDataDateTime extends FlatDataDate implements Hashable {
    get hashCode(): string;
}
export declare class FlatDataStrictDate extends FlatDataDate implements Hashable {
    get hashCode(): string;
}
export declare class FlatDataRecordField implements Hashable {
    label: string;
    flatDataDataType: FlatDataDataType;
    optional: boolean;
    address?: string | undefined;
    constructor(label: string, flatDataDataType: FlatDataDataType, optional: boolean);
    get hashCode(): string;
}
/**
 * NOTE: the fact that we have `fields` in `FlatDataRecordType` like this is misleading. What we should have and what Dave
 * also agreed on is that we will have another class `X` that is the super type of `RootFlatDataRecordType` and contains `fields`
 * instead of `FlatDataRecordType` as `FlatDataRecordType` is just a normal type like `FlatDataBoolean` that signals the driver
 * to look for a record type.
 *
 * As for `RootFlatDataRecordType` it should extends `X` so that we remain open for the possibility that flat data can have embedded
 * structure. Also `X` should not have name, as it can be embedded.
 */
export declare class FlatDataRecordType extends FlatDataDataType implements Hashable {
    fields: FlatDataRecordField[];
    get hashCode(): string;
}
export declare class RootFlatDataRecordType extends FlatDataRecordType implements Hashable {
    readonly _OWNER: FlatDataSection;
    constructor(owner: FlatDataSection);
    get hashCode(): string;
}
//# sourceMappingURL=FlatDataDataType.d.ts.map