import * as KeyValueStore from "@effect/platform/KeyValueStore";
import type * as Clock from "effect/Clock";
import * as Context from "effect/Context";
import * as Duration from "effect/Duration";
import * as Effect from "effect/Effect";
import type * as Exit from "effect/Exit";
import * as Layer from "effect/Layer";
import * as Option from "effect/Option";
import * as ParseResult from "effect/ParseResult";
import * as PrimaryKey from "effect/PrimaryKey";
import * as Schema from "effect/Schema";
import type * as Scope from "effect/Scope";
/**
* @since 1.0.0
* @category type ids
*/
export declare const ErrorTypeId: unique symbol;
/**
* @since 1.0.0
* @category type ids
*/
export type ErrorTypeId = typeof ErrorTypeId;
/**
* @since 1.0.0
* @category errors
*/
export type PersistenceError = PersistenceParseError | PersistenceBackingError;
declare const PersistenceParseError_base: new >(args: import("effect/Types").Simplify) => import("effect/Cause").YieldableError & Record & {
readonly _tag: "PersistenceError";
} & Readonly;
/**
* @since 1.0.0
* @category errors
*/
export declare class PersistenceParseError extends PersistenceParseError_base<{
readonly reason: "ParseError";
readonly method: string;
readonly error: ParseResult.ParseError["issue"];
}> {
/**
* @since 1.0.0
*/
static make(method: string, error: ParseResult.ParseError["issue"]): PersistenceParseError;
get message(): string;
}
declare const PersistenceBackingError_base: new >(args: import("effect/Types").Simplify) => import("effect/Cause").YieldableError & Record & {
readonly _tag: "PersistenceError";
} & Readonly;
/**
* @since 1.0.0
* @category errors
*/
export declare class PersistenceBackingError extends PersistenceBackingError_base<{
readonly reason: "BackingError";
readonly method: string;
readonly cause: unknown;
}> {
/**
* @since 1.0.0
*/
static make(method: string, cause: unknown): PersistenceBackingError;
get message(): "BackingError";
}
/**
* @since 1.0.0
* @category type ids
*/
export declare const BackingPersistenceTypeId: unique symbol;
/**
* @since 1.0.0
* @category type ids
*/
export type BackingPersistenceTypeId = typeof BackingPersistenceTypeId;
/**
* @since 1.0.0
* @category models
*/
export interface BackingPersistence {
readonly [BackingPersistenceTypeId]: BackingPersistenceTypeId;
readonly make: (storeId: string) => Effect.Effect;
}
/**
* @since 1.0.0
* @category models
*/
export interface BackingPersistenceStore {
readonly get: (key: string) => Effect.Effect, PersistenceError>;
readonly getMany: (key: Array) => Effect.Effect>, PersistenceError>;
readonly set: (key: string, value: unknown, ttl: Option.Option) => Effect.Effect;
readonly setMany: (entries: ReadonlyArray]>) => Effect.Effect;
readonly remove: (key: string) => Effect.Effect;
readonly clear: Effect.Effect;
}
/**
* @since 1.0.0
* @category tags
*/
export declare const BackingPersistence: Context.Tag;
/**
* @since 1.0.0
* @category type ids
*/
export declare const ResultPersistenceTypeId: unique symbol;
/**
* @since 1.0.0
* @category type ids
*/
export type ResultPersistenceTypeId = typeof ResultPersistenceTypeId;
/**
* @since 1.0.0
* @category models
*/
export interface ResultPersistence {
readonly [ResultPersistenceTypeId]: ResultPersistenceTypeId;
readonly make: (options: {
readonly storeId: string;
readonly timeToLive?: (key: ResultPersistence.KeyAny, exit: Exit.Exit) => Duration.DurationInput;
}) => Effect.Effect;
}
/**
* @since 1.0.0
* @category models
*/
export interface ResultPersistenceStore {
readonly get: (key: ResultPersistence.Key) => Effect.Effect>, PersistenceError, R>;
readonly getMany: (key: ReadonlyArray>) => Effect.Effect>>, PersistenceError, R>;
readonly set: (key: ResultPersistence.Key, value: Exit.Exit) => Effect.Effect;
readonly setMany: (entries: Iterable, Exit.Exit]>) => Effect.Effect;
readonly remove: (key: ResultPersistence.Key) => Effect.Effect;
readonly clear: Effect.Effect;
}
/**
* @since 1.0.0
* @category models
*/
export interface Persistable extends Schema.WithResult, PrimaryKey.PrimaryKey {
}
/**
* @since 1.0.0
* @category models
*/
export declare namespace ResultPersistence {
/**
* @since 1.0.0
* @category models
*/
interface Key extends Schema.WithResult, PrimaryKey.PrimaryKey {
}
/**
* @since 1.0.0
* @category models
*/
type KeyAny = Persistable;
/**
* @since 1.0.0
* @category models
*/
type TimeToLiveArgs = A extends infer K ? K extends Persistable ? [request: K, exit: Exit.Exit<_A["Type"], _E["Type"]>] : never : never;
}
/**
* @since 1.0.0
* @category tags
*/
export declare const ResultPersistence: Context.Tag;
/**
* @since 1.0.0
* @category layers
*/
export declare const layerResult: Layer.Layer;
/**
* @since 1.0.0
* @category layers
*/
export declare const layerMemory: Layer.Layer;
/**
* @since 1.0.0
* @category layers
*/
export declare const layerKeyValueStore: Layer.Layer;
/**
* @since 1.0.0
* @category layers
*/
export declare const layerResultMemory: Layer.Layer;
/**
* @since 1.0.0
* @category layers
*/
export declare const layerResultKeyValueStore: Layer.Layer;
/**
* @since 1.0.0
*/
export declare const unsafeTtlToExpires: (clock: Clock.Clock, ttl: Option.Option) => number | null;
export {};
//# sourceMappingURL=Persistence.d.ts.map