/**
 * Wireguard control mechanisms.
 *
 * @since 1.0.0
 */
import * as CommandExecutor from "@effect/platform/CommandExecutor";
import * as PlatformError from "@effect/platform/Error";
import * as FileSystem from "@effect/platform/FileSystem";
import * as Path from "@effect/platform/Path";
import * as Socket from "@effect/platform/Socket";
import * as Cause from "effect/Cause";
import * as Context from "effect/Context";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import * as ParseResult from "effect/ParseResult";
import * as Resolver from "effect/RequestResolver";
import * as Scope from "effect/Scope";
import * as exec from "node:child_process";
import * as WireguardConfig from "./WireguardConfig.js";
import * as WireguardInterface from "./WireguardInterface.js";
/**
 * @since 1.0.0
 * @category Models
 */
export interface WireguardControlImpl {
    readonly up: (wireguardConfig: WireguardConfig.WireguardConfig, wireguardInterface: WireguardInterface.WireguardInterface) => Effect.Effect<WireguardInterface.WireguardInterface, Socket.SocketError | ParseResult.ParseError | PlatformError.PlatformError | Cause.TimeoutException, FileSystem.FileSystem | Path.Path | CommandExecutor.CommandExecutor>;
    readonly down: (wireguardConfig: WireguardConfig.WireguardConfig, wireguardInterface: WireguardInterface.WireguardInterface, wireguardGoProcess?: exec.ChildProcess) => Effect.Effect<WireguardInterface.WireguardInterface, PlatformError.PlatformError | ParseResult.ParseError | Cause.TimeoutException, FileSystem.FileSystem | Path.Path | CommandExecutor.CommandExecutor>;
    readonly upScoped: (wireguardConfig: WireguardConfig.WireguardConfig, wireguardInterface: WireguardInterface.WireguardInterface) => Effect.Effect<WireguardInterface.WireguardInterface, Socket.SocketError | ParseResult.ParseError | PlatformError.PlatformError | Cause.TimeoutException, FileSystem.FileSystem | Path.Path | Scope.Scope | CommandExecutor.CommandExecutor>;
    readonly getConfigRequestResolver: Resolver.RequestResolver<WireguardConfig.WireguardGetConfigRequest, never>;
    readonly setConfigRequestResolver: Resolver.RequestResolver<WireguardConfig.WireguardSetConfigRequest, never>;
}
/**
 * @since 1.0.0
 * @category Tags
 */
export interface WireguardControl {
    readonly _: unique symbol;
}
/**
 * @since 1.0.0
 * @category Tags
 */
export declare const WireguardControl: Context.Tag<WireguardControl, WireguardControlImpl>;
/**
 * @since 1.0.0
 * @category Constructors
 */
export declare const makeUserspaceLayer: () => WireguardControlImpl;
/**
 * @since 1.0.0
 * @category Constructors
 */
export declare const makeBundledWgQuickLayer: (options: {
    sudo: boolean;
}) => WireguardControlImpl;
/**
 * @since 1.0.0
 * @category Layers
 */
export declare const UserspaceLayer: Layer.Layer<WireguardControl, never, never>;
/**
 * @since 1.0.0
 * @category Layers
 */
export declare const BundledWgQuickLayer: Layer.Layer<WireguardControl, never, never>;
//# sourceMappingURL=WireguardControl.d.ts.map