/**
 * @since 4.0.0
 */
import * as Data from "../../Data.js";
import * as Effect from "../../Effect.js";
import * as ErrorReporter from "../../ErrorReporter.js";
import { hasProperty } from "../../Predicate.js";
import * as Schema from "../../Schema.js";
import * as HttpServerRespondable from "../http/HttpServerRespondable.js";
import * as HttpServerResponse from "../http/HttpServerResponse.js";
import * as HttpApiSchema from "./HttpApiSchema.js";
const badRequestResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 400
});
const unauthorizedResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 401
});
const forbiddenResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 403
});
const notFoundResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 404
});
const methodNotAllowedResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 405
});
const notAcceptableResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 406
});
const requestTimeoutResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 408
});
const conflictResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 409
});
const goneResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 410
});
const internalServerErrorResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 500
});
const notImplementedResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 501
});
const serviceUnavailableResponse = /*#__PURE__*/HttpServerResponse.empty({
  status: 503
});
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class BadRequest extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/BadRequest")({
  _tag: /*#__PURE__*/Schema.tag("BadRequest")
}, {
  description: "BadRequest",
  httpApiStatus: 400
}) {
  [ErrorReporter.ignore] = true;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(badRequestResponse);
  }
  static singleton = /*#__PURE__*/new BadRequest();
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const BadRequestNoContent = /*#__PURE__*/BadRequest.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new BadRequest({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class Unauthorized extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/Unauthorized")({
  _tag: /*#__PURE__*/Schema.tag("Unauthorized")
}, {
  description: "Unauthorized",
  httpApiStatus: 401
}) {
  [ErrorReporter.ignore] = true;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(unauthorizedResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const UnauthorizedNoContent = /*#__PURE__*/Unauthorized.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new Unauthorized({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class Forbidden extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/Forbidden")({
  _tag: /*#__PURE__*/Schema.tag("Forbidden")
}, {
  description: "Forbidden",
  httpApiStatus: 403
}) {
  [ErrorReporter.ignore] = true;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(forbiddenResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const ForbiddenNoContent = /*#__PURE__*/Forbidden.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new Forbidden({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class NotFound extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/NotFound")({
  _tag: /*#__PURE__*/Schema.tag("NotFound")
}, {
  description: "NotFound",
  httpApiStatus: 404
}) {
  [ErrorReporter.ignore] = true;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(notFoundResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const NotFoundNoContent = /*#__PURE__*/NotFound.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new NotFound({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class MethodNotAllowed extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/MethodNotAllowed")({
  _tag: /*#__PURE__*/Schema.tag("MethodNotAllowed")
}, {
  description: "MethodNotAllowed",
  httpApiStatus: 405
}) {
  [ErrorReporter.ignore] = true;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(methodNotAllowedResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const MethodNotAllowedNoContent = /*#__PURE__*/MethodNotAllowed.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new MethodNotAllowed({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class NotAcceptable extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/NotAcceptable")({
  _tag: /*#__PURE__*/Schema.tag("NotAcceptable")
}, {
  description: "NotAcceptable",
  httpApiStatus: 406
}) {
  [ErrorReporter.ignore] = true;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(notAcceptableResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const NotAcceptableNoContent = /*#__PURE__*/NotAcceptable.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new NotAcceptable({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class RequestTimeout extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/RequestTimeout")({
  _tag: /*#__PURE__*/Schema.tag("RequestTimeout")
}, {
  description: "RequestTimeout",
  httpApiStatus: 408
}) {
  [ErrorReporter.ignore] = true;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(requestTimeoutResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const RequestTimeoutNoContent = /*#__PURE__*/RequestTimeout.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new RequestTimeout({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class Conflict extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/Conflict")({
  _tag: /*#__PURE__*/Schema.tag("Conflict")
}, {
  description: "Conflict",
  httpApiStatus: 409
}) {
  [ErrorReporter.ignore] = true;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(conflictResponse);
  }
}
/**
 * @since 4.0.0
 * @category NoContent errors
 */
export const ConflictNoContent = /*#__PURE__*/Conflict.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new Conflict({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class Gone extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/Gone")({
  _tag: /*#__PURE__*/Schema.tag("Gone")
}, {
  description: "Gone",
  httpApiStatus: 410
}) {
  [ErrorReporter.ignore] = true;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(goneResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const GoneNoContent = /*#__PURE__*/Gone.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new Gone({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class InternalServerError extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/InternalServerError")({
  _tag: /*#__PURE__*/Schema.tag("InternalServerError")
}, {
  description: "InternalServerError",
  httpApiStatus: 500
}) {
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(internalServerErrorResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const InternalServerErrorNoContent = /*#__PURE__*/InternalServerError.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new InternalServerError({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class NotImplemented extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/NotImplemented")({
  _tag: /*#__PURE__*/Schema.tag("NotImplemented")
}, {
  description: "NotImplemented",
  httpApiStatus: 501
}) {
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(notImplementedResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const NotImplementedNoContent = /*#__PURE__*/NotImplemented.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new NotImplemented({})
}));
/**
 * @category Built-in errors
 * @since 4.0.0
 */
export class ServiceUnavailable extends /*#__PURE__*/Schema.ErrorClass("effect/HttpApiError/ServiceUnavailable")({
  _tag: /*#__PURE__*/Schema.tag("ServiceUnavailable")
}, {
  description: "ServiceUnavailable",
  httpApiStatus: 503
}) {
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(serviceUnavailableResponse);
  }
}
/**
 * @category NoContent errors
 * @since 4.0.0
 */
export const ServiceUnavailableNoContent = /*#__PURE__*/ServiceUnavailable.pipe(/*#__PURE__*/HttpApiSchema.asNoContent({
  decode: () => new ServiceUnavailable({})
}));
/**
 * @category Parsing errors
 * @since 4.0.0
 */
export const HttpApiSchemaErrorTypeId = "~effect/httpapi/HttpApiError/HttpApiSchemaError";
/**
 * @category Parsing errors
 * @since 4.0.0
 */
export class HttpApiSchemaError extends /*#__PURE__*/Data.TaggedClass("HttpApiSchemaError") {
  [HttpApiSchemaErrorTypeId] = HttpApiSchemaErrorTypeId;
  static is(u) {
    return hasProperty(u, HttpApiSchemaErrorTypeId);
  }
  static wrap(kind, effect) {
    return Effect.mapError(effect, error => new HttpApiSchemaError({
      kind,
      cause: error
    }));
  }
  name = "HttpApiSchemaError";
  message = this.kind;
  [HttpServerRespondable.symbol]() {
    return Effect.succeed(badRequestResponse);
  }
}
//# sourceMappingURL=HttpApiError.js.map