import type { OperationalMetric } from "../../generated-proto/pb_schema/camera_kit/v3/operational_metrics";
type MetricConstructor<T> = new (name: string, dimensions: MetricDimensions) => T;
declare const nameDelimiter = "_";
/** @internal */
export type MetricDimensions = Record<string, string | number>;
/** @internal */
export declare abstract class Metric {
    readonly name: string;
    readonly dimensions: MetricDimensions;
    constructor(name: string, dimensions?: MetricDimensions);
    child<ChildName extends string, T extends Metric>(constructor: MetricConstructor<T>, name: ChildName, dimensions?: MetricDimensions): T;
    abstract toOperationalMetric(): Required<OperationalMetric>[];
}
/** @internal */
export type JoinMetricNames<Parent extends string, Child extends string> = `${Parent}${typeof nameDelimiter}${Child}`;
/** @internal */
export declare function joinMetricNames(names: string[]): string;
/** @internal */
export declare function serializeMetricDimensions(dimensions: MetricDimensions): string;
export {};
//# sourceMappingURL=Metric.d.ts.map