import * as Data from "effect/Data"; export class InvalidMetadata extends Data.TaggedError("InvalidMetadata") { readonly code = "invalid_metadata"; override readonly message = this.code; } export class InstallationNotFound extends Data.TaggedError( "InstallationNotFound", ) { readonly code = "installation_not_found"; override readonly message = this.code; } export class InstallationConflict extends Data.TaggedError( "InstallationConflict", ) { readonly code = "installation_conflict"; override readonly message = this.code; } export type RegistryFailure = InvalidMetadata | InstallationNotFound | InstallationConflict; export type RegistryError = RegistryFailure["code"]; export function isRegistryFailure(error: unknown): error is RegistryFailure { return ( error instanceof InvalidMetadata || error instanceof InstallationNotFound || error instanceof InstallationConflict ); } export function registryFailure(code: RegistryError): RegistryFailure { switch (code) { case "invalid_metadata": return new InvalidMetadata(); case "installation_not_found": return new InstallationNotFound(); case "installation_conflict": return new InstallationConflict(); } }