/**
 * Effect service model for servers that accept socket connections and hand each
 * accepted connection to an Effect handler as a `Socket.Socket`.
 *
 * This module contains the shared, platform-independent contract for socket
 * servers: a bound `address`, a long-running `run` accept loop, the TCP and
 * Unix socket address models, and the server-level errors reported while
 * opening or running a server. Concrete transports, such as Node TCP servers or
 * WebSocket servers, provide this service through platform-specific layers.
 *
 * `SocketServer` is commonly used as the server transport for RPC protocols,
 * cluster runners, developer tools, and tests that need an ephemeral TCP port or
 * Unix-domain socket. A server address may differ from the requested listen
 * options after binding, for example when listening on port `0`, so consumers
 * should read the provided `address` from the service.
 *
 * The `run` effect represents the server accept loop and is expected to remain
 * alive until interrupted or until the providing scope is closed. Protocol
 * framing is intentionally outside this module: handlers receive a generic
 * `Socket.Socket`, so callers are responsible for choosing byte, string, raw
 * frame, or higher-level protocol adapters and for treating connection-level
 * failures separately from `SocketServerError` values.
 *
 * @since 4.0.0
 */
import * as Context from "../../Context.js";
import * as Data from "../../Data.js";
/**
 * Context service for a socket server, exposing its bound address and a run
 * loop that handles each accepted `Socket`.
 *
 * @category services
 * @since 4.0.0
 */
export class SocketServer extends /*#__PURE__*/Context.Service()("@effect/platform/SocketServer") {}
/**
 * Runtime type identifier attached to `SocketServerError` values.
 *
 * @category type IDs
 * @since 4.0.0
 */
export const ErrorTypeId = "@effect/platform/SocketServer/SocketServerError";
/**
 * Error reason for failures that occur while opening a socket server.
 *
 * @category errors
 * @since 4.0.0
 */
export class SocketServerOpenError extends /*#__PURE__*/Data.TaggedError("SocketServerOpenError") {
  get message() {
    return "Open";
  }
}
/**
 * Error reason for uncategorized socket server failures.
 *
 * @category errors
 * @since 4.0.0
 */
export class SocketServerUnknownError extends /*#__PURE__*/Data.TaggedError("SocketServerUnknownError") {
  get message() {
    return "Unknown";
  }
}
/**
 * Tagged socket server error that wraps a server error reason and exposes its
 * cause.
 *
 * @category errors
 * @since 4.0.0
 */
export class SocketServerError extends /*#__PURE__*/Data.TaggedError("SocketServerError") {
  constructor(props) {
    super({
      ...props,
      cause: props.reason.cause
    });
  }
  /**
   * Marks this value as a socket server error for runtime guards.
   *
   * @since 4.0.0
   */
  [ErrorTypeId] = ErrorTypeId;
  /**
   * Delegates the public message to the underlying socket server error reason.
   *
   * @since 4.0.0
   */
  get message() {
    return this.reason.message;
  }
}
//# sourceMappingURL=SocketServer.js.map