/**
 * Internet schemas for wireguard configuration.
 *
 * @since 1.0.0
 */
import * as Schema from "effect/Schema";
/**
 * Transforms a `number` of seconds into a `Duration`.
 *
 * @since 1.0.0
 * @category Schemas
 */
export declare const DurationFromSeconds: Schema.decodeTo<Schema.Duration, Schema.Int, never, never>;
/**
 * An IPv4 wireguard endpoint, which consists of an IPv4 address followed by a
 * nat port then an optional local port. If only one port is provided, it is
 * assumed that the nat port and listen port are the same.
 *
 * @since 1.0.0
 * @category Schemas
 * @example
 *     ```ts
 *
 *     import * as assert from "node:assert";
 *
 *     import * as Schema from "effect/Schema";
 *     import { IPv4Endpoint } from "the-wireguard-effect/InternetSchemas";
 *
 *     const decodeEndpoint = Schema.decodeSync(IPv4Endpoint);
 *     const endpoint1 = decodeEndpoint("1.2.3.4:51820");
 *     const endpoint2 = decodeEndpoint("1.2.3.4:51820:41820");
 *
 *     const endpoint3 = decodeEndpoint({
 *         ip: "1.2.3.4",
 *         port: 51820,
 *         family: "ipv4",
 *     });
 *
 *     const endpoint4 = decodeEndpoint({
 *         ip: "1.2.3.4",
 *         natPort: 51820,
 *         listenPort: 41820,
 *         family: "ipv4",
 *     });
 *     ```;
 */
export declare const IPv4Endpoint: Schema.decodeTo<Schema.Struct<{
    readonly address: Schema.decodeTo<Schema.Struct<{
        readonly family: Schema.Literal<"ipv4">;
        readonly ip: Schema.brand<Schema.String, "IPv4">;
    }>, Schema.String, never, never>;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly ip: Schema.String;
    readonly port: Schema.Number;
    readonly family: Schema.Literal<"ipv4">;
}>, Schema.Struct<{
    readonly ip: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
    readonly family: Schema.Literal<"ipv4">;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>;
/**
 * An IPv6 wireguard endpoint, which consists of an IPv6 address in square
 * brackets followed by a nat port then an optional local port. If only one port
 * is provided, it is assumed that the nat port and listen port are the same.
 *
 * @since 1.0.0
 * @category Schemas
 * @example
 *     ```ts
 *
 *     import * as assert from "node:assert";
 *
 *     import * as Schema from "effect/Schema";
 *     import { IPv6Endpoint } from "the-wireguard-effect/InternetSchemas";
 *
 *     const decodeEndpoint = Schema.decodeSync(IPv6Endpoint);
 *     const endpoint1 = decodeEndpoint(
 *         "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:51820"
 *     );
 *     const endpoint2 = decodeEndpoint(
 *         "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:51820:41820"
 *     );
 *
 *     const endpoint3 = decodeEndpoint({
 *         ip: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
 *         port: 51820,
 *         family: "ipv6",
 *     });
 *
 *     const endpoint4 = decodeEndpoint({
 *         ip: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
 *         natPort: 51820,
 *         listenPort: 41820,
 *         family: "ipv6",
 *     });
 *     ```;
 */
export declare const IPv6Endpoint: Schema.decodeTo<Schema.Struct<{
    readonly address: Schema.decodeTo<Schema.Struct<{
        readonly family: Schema.Literal<"ipv6">;
        readonly ip: Schema.brand<Schema.String, "IPv6">;
    }>, Schema.String, never, never>;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly ip: Schema.String;
    readonly port: Schema.Number;
    readonly family: Schema.Literal<"ipv6">;
}>, Schema.Struct<{
    readonly ip: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
    readonly family: Schema.Literal<"ipv6">;
}>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>;
/**
 * A hostname wireguard endpoint, which consists of a hostname followed by a\
 * Nat port then an optional local port. If only one port is provided, it is
 * assumed that the nat port and listen port are the same.
 *
 * @since 1.0.0
 * @category Schemas
 */
export declare const HostnameEndpoint: Schema.decodeTo<Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly host: Schema.String;
    readonly port: Schema.Number;
}>, Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>;
/**
 * A wireguard endpoint, which is either an IPv4 or IPv6 endpoint.
 *
 * @since 1.0.0
 * @category Schemas
 * @example
 *     import * as Schema from "effect/Schema";
 *
 *     import { Endpoint } from "the-wireguard-effect/InternetSchemas";
 *
 *     const decodeEndpoint = Schema.decodeSync(Endpoint);
 *     const endpoint1 = decodeEndpoint("1.2.3.4:51820");
 *     const endpoint2 = decodeEndpoint("1.2.3.4:51820:41820");
 *
 *     const endpoint3 = decodeEndpoint({
 *         ip: "1.2.3.4",
 *         port: 51820,
 *         family: "ipv4",
 *     });
 *
 *     const endpoint4: Endpoint = decodeEndpoint({
 *         ip: "1.2.3.4",
 *         natPort: 51820,
 *         listenPort: 41820,
 *         family: "ipv4",
 *     });
 *
 *     const endpoint5 = decodeEndpoint(
 *         "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:51820"
 *     );
 *     const endpoint6 = decodeEndpoint(
 *         "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:51820:41820"
 *     );
 *
 *     const endpoint7 = decodeEndpoint({
 *         ip: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
 *         port: 51820,
 *         family: "ipv6",
 *     });
 *
 *     const endpoint8: Endpoint = decodeEndpoint({
 *         ip: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
 *         natPort: 51820,
 *         listenPort: 41820,
 *         family: "ipv6",
 *     });
 *     ```;
 */
export declare const Endpoint: Schema.Union<readonly [Schema.decodeTo<Schema.Struct<{
    readonly address: Schema.decodeTo<Schema.Struct<{
        readonly family: Schema.Literal<"ipv4">;
        readonly ip: Schema.brand<Schema.String, "IPv4">;
    }>, Schema.String, never, never>;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly ip: Schema.String;
    readonly port: Schema.Number;
    readonly family: Schema.Literal<"ipv4">;
}>, Schema.Struct<{
    readonly ip: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
    readonly family: Schema.Literal<"ipv4">;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly address: Schema.decodeTo<Schema.Struct<{
        readonly family: Schema.Literal<"ipv6">;
        readonly ip: Schema.brand<Schema.String, "IPv6">;
    }>, Schema.String, never, never>;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly ip: Schema.String;
    readonly port: Schema.Number;
    readonly family: Schema.Literal<"ipv6">;
}>, Schema.Struct<{
    readonly ip: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
    readonly family: Schema.Literal<"ipv6">;
}>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly host: Schema.String;
    readonly port: Schema.Number;
}>, Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>]>;
/**
 * A wireguard setup data, which consists of an endpoint followed by an address.
 *
 * @since 1.0.0
 * @category Schemas
 * @example
 *     import * as Schema from "effect/Schema";
 *     import { SetupData } from "the-wireguard-effect/InternetSchemas";
 *
 *     const decodeSetupData = Schema.decodeSync(SetupData);
 *     const setupData = decodeSetupData(["1.1.1.1:51280", "10.0.0.1"]);
 *     ```;
 */
export declare const IPv4SetupData: Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{
    readonly address: Schema.decodeTo<Schema.Struct<{
        readonly family: Schema.Literal<"ipv4">;
        readonly ip: Schema.brand<Schema.String, "IPv4">;
    }>, Schema.String, never, never>;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly ip: Schema.String;
    readonly port: Schema.Number;
    readonly family: Schema.Literal<"ipv4">;
}>, Schema.Struct<{
    readonly ip: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
    readonly family: Schema.Literal<"ipv4">;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly family: Schema.Literal<"ipv4">;
    readonly ip: Schema.brand<Schema.String, "IPv4">;
}>, Schema.String, never, never>]>;
/**
 * A wireguard setup data, which consists of an endpoint followed by an address.
 *
 * @since 1.0.0
 * @category Schemas
 * @example
 *     import * as Schema from "effect/Schema";
 *     import { SetupData } from "the-wireguard-effect/InternetSchemas";
 *
 *     const decodeSetupData = Schema.decodeSync(SetupData);
 *     const setupData = decodeSetupData(["1.1.1.1:51280", "10.0.0.1"]);
 *     ```;
 */
export declare const IPv6SetupData: Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{
    readonly address: Schema.decodeTo<Schema.Struct<{
        readonly family: Schema.Literal<"ipv6">;
        readonly ip: Schema.brand<Schema.String, "IPv6">;
    }>, Schema.String, never, never>;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly ip: Schema.String;
    readonly port: Schema.Number;
    readonly family: Schema.Literal<"ipv6">;
}>, Schema.Struct<{
    readonly ip: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
    readonly family: Schema.Literal<"ipv6">;
}>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly family: Schema.Literal<"ipv6">;
    readonly ip: Schema.brand<Schema.String, "IPv6">;
}>, Schema.String, never, never>]>;
/**
 * A wireguard setup data, which consists of an endpoint followed by an address.
 *
 * @since 1.0.0
 * @category Schemas
 * @see {@link IPv4}
 * @see {@link HostnameEndpoint}
 */
export declare const HostnameIPv4SetupData: Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly host: Schema.String;
    readonly port: Schema.Number;
}>, Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly family: Schema.Literal<"ipv4">;
    readonly ip: Schema.brand<Schema.String, "IPv4">;
}>, Schema.String, never, never>]>;
/**
 * A wireguard setup data, which consists of an endpoint followed by an address.
 *
 * @since 1.0.0
 * @category Schemas
 * @see {@link IPv6}
 * @see {@link HostnameEndpoint}
 */
export declare const HostnameIPv6SetupData: Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly host: Schema.String;
    readonly port: Schema.Number;
}>, Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly family: Schema.Literal<"ipv6">;
    readonly ip: Schema.brand<Schema.String, "IPv6">;
}>, Schema.String, never, never>]>;
/**
 * A wireguard setup data, which consists of an endpoint followed by an address.
 *
 * @since 1.0.0
 * @category Schemas
 * @example
 *     ```ts
 *
 *     import * as assert from "node:assert";
 *
 *     import * as Schema from "effect/Schema";
 *     import { SetupData } from "the-wireguard-effect/InternetSchemas";
 *
 *     const decodeSetupData = Schema.decodeSync(SetupData);
 *     const setupData = decodeSetupData(["1.1.1.1:51280", "10.0.0.1"]);
 *     ```;
 *
 * @see {@link Address}
 * @see {@link Endpoint}
 */
export declare const SetupData: Schema.Union<readonly [Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{
    readonly address: Schema.decodeTo<Schema.Struct<{
        readonly family: Schema.Literal<"ipv4">;
        readonly ip: Schema.brand<Schema.String, "IPv4">;
    }>, Schema.String, never, never>;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly ip: Schema.String;
    readonly port: Schema.Number;
    readonly family: Schema.Literal<"ipv4">;
}>, Schema.Struct<{
    readonly ip: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
    readonly family: Schema.Literal<"ipv4">;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly family: Schema.Literal<"ipv4">;
    readonly ip: Schema.brand<Schema.String, "IPv4">;
}>, Schema.String, never, never>]>, Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{
    readonly address: Schema.decodeTo<Schema.Struct<{
        readonly family: Schema.Literal<"ipv6">;
        readonly ip: Schema.brand<Schema.String, "IPv6">;
    }>, Schema.String, never, never>;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly ip: Schema.String;
    readonly port: Schema.Number;
    readonly family: Schema.Literal<"ipv6">;
}>, Schema.Struct<{
    readonly ip: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
    readonly family: Schema.Literal<"ipv6">;
}>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.Literal<"[">, Schema.String, Schema.Literal<"]">, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly family: Schema.Literal<"ipv6">;
    readonly ip: Schema.brand<Schema.String, "IPv6">;
}>, Schema.String, never, never>]>, Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly host: Schema.String;
    readonly port: Schema.Number;
}>, Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly family: Schema.Literal<"ipv4">;
    readonly ip: Schema.brand<Schema.String, "IPv4">;
}>, Schema.String, never, never>]>, Schema.Tuple<readonly [Schema.decodeTo<Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.brand<Schema.Int, "Port">;
    readonly listenPort: Schema.brand<Schema.Int, "Port">;
}>, Schema.Union<readonly [Schema.Struct<{
    readonly host: Schema.String;
    readonly port: Schema.Number;
}>, Schema.Struct<{
    readonly host: Schema.String;
    readonly natPort: Schema.Number;
    readonly listenPort: Schema.Number;
}>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number]>, Schema.TemplateLiteral<readonly [Schema.String, Schema.Literal<":">, Schema.Number, Schema.Literal<":">, Schema.Number]>]>, never, never>, Schema.decodeTo<Schema.Struct<{
    readonly family: Schema.Literal<"ipv6">;
    readonly ip: Schema.brand<Schema.String, "IPv6">;
}>, Schema.String, never, never>]>]>;
//# sourceMappingURL=InternetSchemas.d.ts.map