export declare enum KeywordType {
    UserOwnedEvent = 0,
    DriverOwnedEvent = 1,
    Command = 2,
    Status = 3,
    Duplex = 4
}
export declare type kw_data_type = "bool" | "int" | "float" | "float duration" | "int duration" | "string" | "timestamp" | "ipaddress" | "enum" | "timecode" | "ref" | "device_tree_node";
export declare type data_type = "subtree" | "atomic subtree" | kw_data_type;
export declare type kw_type = "event" | "driver-owned event" | "status" | "command" | "duplex";
export declare type BranchName = string;
export declare type TargetTypeIdentifier = string;
export declare type FullKWLName = string;
export declare type OtherNodeProperties = {
    formatter?: string;
    filter?: string;
    visibility?: "basic" | "advanced" | "developer";
};
export interface CommonNodeProperties<DataType> {
    data_type: DataType;
    sys_name: string;
    brief?: string;
    desc?: string;
    persistent: boolean;
    other_properties: OtherNodeProperties;
}
export interface CommonConstantProperties<DataType> {
    data_type: DataType;
    path: string;
}
export interface ConstantBoolDescription extends CommonConstantProperties<"bool"> {
}
export interface ConstantIntDescription extends CommonConstantProperties<"int"> {
    min: number;
    max: number;
}
export interface ConstantStringDescription extends CommonConstantProperties<"string"> {
    maxlength: number;
}
export interface ConstantDurationDescription extends CommonConstantProperties<"int duration" | "float duration"> {
    min: number;
    max: number;
}
export interface ConstantIPAddressDescription extends CommonConstantProperties<"ipaddress"> {
}
export interface ConstantTimestampDescription extends CommonConstantProperties<"timestamp"> {
}
export declare type ConstantDescription = ConstantBoolDescription | ConstantIntDescription | ConstantStringDescription | ConstantDurationDescription | ConstantIPAddressDescription | ConstantTimestampDescription;
export declare type MaybeChildrenMaybeTypeIdentifier = {
    children?: ChildDescription<MaybeChildrenMaybeTypeIdentifier>[];
    type_identifier?: string;
};
export declare type MaybeAtomicChildrenMaybeTypeIdentifier = {
    children?: AtomicChildDescription<MaybeAtomicChildrenMaybeTypeIdentifier>[];
    type_identifier?: string;
};
export declare type RuntimeConstantIdentifier = string;
export declare type ContainerSize = number | RuntimeConstantIdentifier;
export declare type SubtreeDescription<ExtraProperties = MaybeChildrenMaybeTypeIdentifier> = CommonNodeProperties<"subtree"> & ExtraProperties & ({} | {
    array_size: ContainerSize;
} | {
    table_size: ContainerSize;
    named_rows: boolean;
});
export declare type AtomicSubtreeDescription<ExtraProperties = MaybeAtomicChildrenMaybeTypeIdentifier> = CommonNodeProperties<"atomic subtree"> & ExtraProperties & {
    kw_type: kw_type;
    array_size?: ContainerSize;
    optional: boolean;
};
export interface StringDescription extends CommonNodeProperties<"string"> {
    kw_type: kw_type;
    optional: boolean;
    array_size?: ContainerSize;
    max_length: number;
    default_value?: string;
}
export interface NumberDescription extends CommonNodeProperties<"int" | "float"> {
    kw_type: kw_type;
    optional: boolean;
    array_size?: ContainerSize;
    min: number;
    max: number;
    default_value?: number;
}
export interface DeviceTreeNodeDescription extends CommonNodeProperties<"device_tree_node"> {
    kw_type: kw_type;
    optional: boolean;
    array_size?: ContainerSize;
}
export interface ReferenceDescription extends CommonNodeProperties<"ref"> {
    kw_type: kw_type;
    optional: boolean;
    array_size?: ContainerSize;
    default_value?: string;
    target_type_identifier: string;
    target_type: "subtree";
    ref_perm: "mutating" | "non-mutating";
}
export interface EnumDescription extends CommonNodeProperties<"enum"> {
    kw_type: kw_type;
    optional: boolean;
    array_size?: ContainerSize;
    default_value?: string;
    enum_values: string[];
}
export interface BoolDescription extends CommonNodeProperties<"bool"> {
    kw_type: kw_type;
    optional: boolean;
    array_size?: ContainerSize;
    default_value?: boolean;
}
export interface DurationDescription extends CommonNodeProperties<"int duration" | "float duration"> {
    kw_type: kw_type;
    min: number;
    max: number;
    optional: boolean;
    array_size?: ContainerSize;
    default_value?: number;
}
export interface TimecodeDescription extends CommonNodeProperties<"timecode"> {
    kw_type: kw_type;
    optional: boolean;
    array_size?: ContainerSize;
    default_value?: number;
}
export interface TimestampDescription extends CommonNodeProperties<"timestamp"> {
    kw_type: kw_type;
    min?: number;
    max?: number;
    optional: boolean;
    array_size?: ContainerSize;
    default_value?: string;
}
export interface IPAddressDescription extends CommonNodeProperties<"ipaddress"> {
    kw_type: kw_type;
    optional: boolean;
    array_size?: ContainerSize;
    default_value?: string;
}
export declare type ComponentDescription<ExtraProperties = {}> = SubtreeDescription<ExtraProperties> & {
    ua_name: string;
    owning_module: string;
    bound_to?: string[];
};
export declare type KeywordDescription<ExtraScalarProperties> = (TimestampDescription | IPAddressDescription | BoolDescription | EnumDescription | StringDescription | NumberDescription | DeviceTreeNodeDescription | ReferenceDescription | DurationDescription | TimecodeDescription) & ExtraScalarProperties;
export declare type AtomicChildDescription<ExtraAtomicSubtreeProperties = {}, ExtraScalarProperties = {}> = AtomicSubtreeDescription<ExtraAtomicSubtreeProperties> | KeywordDescription<ExtraScalarProperties>;
export declare type ChildDescription<ExtraSubtreeProperties = {}, ExtraAtomicSubtreeProperties = {}, ExtraScalarProperties = {}> = SubtreeDescription<ExtraSubtreeProperties> | AtomicChildDescription<ExtraAtomicSubtreeProperties, ExtraScalarProperties>;
export declare type ConstantsDictionary = {
    [component_name: string]: {
        [constant_name: string]: ConstantDescription;
    };
};
export interface ErrorFeedbackChannel {
    kwl: string;
    owner: string;
}
export interface Schema {
    constants: ConstantsDictionary;
    error_feedback_channels: ErrorFeedbackChannel[];
    typedef_identifiers: string[];
    typedefs: {
        [typedef_name: string]: (SubtreeDescription | AtomicSubtreeDescription) & {
            common: boolean;
        };
    };
    keywords: ComponentDescription[];
}
