import {HttpMessage} from "@http4t/core/contract"; import {failure} from "@http4t/result"; import {MessageLens, RoutingError, RoutingResult} from "../lenses"; export class AlwaysFailLens implements MessageLens { constructor(private readonly error: (message: TMessage) => RoutingError) { } async get(message: TMessage): Promise> { return failure(this.error(message)); } async set(into: SetInto, value: T): Promise { return into; } } export function fail(error: RoutingError): MessageLens; export function fail(error: (message: TMessage) => RoutingError): MessageLens; export function fail(error: RoutingError | ((message: TMessage) => RoutingError)): MessageLens { return new AlwaysFailLens(typeof error === "function" ? error : () => error); }