import { Observable } from 'rxjs';
export interface EditableDataStreamInterface<DataType> {
    /**
     * Values observable
     */
    values: Observable<DataType>;
    /**
     * Read value.
     * It may also trigger a value changed event
     */
    read(): Promise<DataType>;
    /**
     * Write given value
     * @param value
     */
    write(value: DataType): Promise<any>;
}
export interface DataSourceProviderInterface {
    getAvailableStreamIds(): string[];
    /**
     * @deprecated no usefull anymore as getStream() can return any type including an editable stream
     * @param streamId
     * @returns
     */
    getEditableStream(streamId: string): Observable<undefined | EditableDataStreamInterface<unknown>>;
    getStream<T = unknown>(streamId: string): Observable<T>;
    /**
     * Notify value on given data stream
     * @param streamId
     * @param value
     */
    notifyValue<T>(streamId: string, value: T): void;
}
