std.io.Error
class pub enum Error
An error type for I/O operations.
This type is typically constructed from raw OS error codes such as ENOENT
on
Unix systems. This enum doesn't define a constructor for every possible error.
Instead, we define a constructor for the most commonly used errors, and
represent other errors using the Other
constructor.
Constructors
AddressInUse
AddressInUse()
The address is already in use.
AddressUnavailable
AddressUnavailable()
The address isn't available.
AlreadyConnected
AlreadyConnected()
A connection is already established.
AlreadyExists
AlreadyExists()
A resource already exists.
BrokenPipe
BrokenPipe()
The operation failed because a pipe was closed.
ConnectionAborted
ConnectionAborted()
The connection was aborted by the remote server.
ConnectionRefused
ConnectionRefused()
The connection was refused by the remote server.
ConnectionReset
ConnectionReset()
The connection was reset by the remote server.
Deadlock
Deadlock()
An operation would result in a deadlock.
DirectoryNotEmpty
DirectoryNotEmpty()
A directory isn't empty.
FileTooLarge
FileTooLarge()
A file is too large.
HostUnreachable
HostUnreachable()
The remote host is unreachable.
InProgress
InProgress()
The operation is in progress.
Interrupted
Interrupted()
The operation was interrupted.
InvalidArgument
InvalidArgument()
One or more arguments are invalid.
InvalidFileName
InvalidFileName()
The file name is invalid.
InvalidSeek
InvalidSeek()
The seek operation is invalid.
IsADirectory
IsADirectory()
The resource is a directory.
NetworkDown
NetworkDown()
The network is down.
NotADirectory
NotADirectory()
The resource isn't a directory.
NotConnected
NotConnected()
A connection isn't established.
NotFound
NotFound()
The resource isn't found.
OutOfMemory
OutOfMemory()
The operation failed because not enough memory could be allocated.
PermissionDenied
PermissionDenied()
The operation failed because it lacked the necessary privileges.
ReadOnlyFilesystem
ReadOnlyFilesystem()
The filesystem is read-only.
ResourceBusy
ResourceBusy()
The resource is busy.
StorageFull
StorageFull()
The underlying storage is full.
TimedOut
TimedOut()
The operation timed out.
WouldBlock
WouldBlock()
The operation would block.
BadAddress
BadAddress()
A memory address used (e.g. as an argument) is in an invalid range.
InvalidData
InvalidData()
The data provided for the operation is invalid, such as when using an invalid TLS certificate or when a TLS socket encountered invalid TLS data (e.g. an invalid handshake message).
EndOfInput
EndOfInput()
The operation encountered the end of the input stream, but more input is required.
An example of where this error is encountered is when reading from a TLS
socket that was closed without sending the close_notify
message.
Other
Other(Int)
An error not covered by the other constructor.
The wrapped Int
is the raw error code.
Static methods
from_os_error
Show source codeHide source code
fn pub static from_os_error(code: Int) -> Error {
match code {
case errors.EPERM -> Error.PermissionDenied
case errors.ENOENT -> Error.NotFound
case errors.EINTR -> Error.Interrupted
case errors.EAGAIN -> Error.WouldBlock
case errors.ENOMEM -> Error.OutOfMemory
case errors.EACCES -> Error.PermissionDenied
case errors.EBUSY -> Error.ResourceBusy
case errors.EEXIST -> Error.AlreadyExists
case errors.ENOTDIR -> Error.NotADirectory
case errors.EISDIR -> Error.IsADirectory
case errors.EINVAL -> Error.InvalidArgument
case errors.EFBIG -> Error.FileTooLarge
case errors.ENOSPC -> Error.StorageFull
case errors.ESPIPE -> Error.InvalidSeek
case errors.EROFS -> Error.ReadOnlyFilesystem
case errors.EPIPE -> Error.BrokenPipe
case errors.EDEADLK -> Error.Deadlock
case errors.ENAMETOOLONG -> Error.InvalidFileName
case errors.ENOTEMPTY -> Error.DirectoryNotEmpty
case errors.ETIME -> Error.TimedOut
case errors.EADDRINUSE -> Error.AddressInUse
case errors.EADDRNOTAVAIL -> Error.AddressUnavailable
case errors.ENETDOWN -> Error.NetworkDown
case errors.ENETUNREACH -> Error.NetworkDown
case errors.ECONNABORTED -> Error.ConnectionAborted
case errors.ECONNRESET -> Error.ConnectionReset
case errors.EISCONN -> Error.AlreadyConnected
case errors.ENOTCONN -> Error.NotConnected
case errors.ETIMEDOUT -> Error.TimedOut
case errors.ECONNREFUSED -> Error.ConnectionRefused
case errors.EHOSTUNREACH -> Error.HostUnreachable
case errors.EINPROGRESS -> Error.InProgress
case errors.EFAULT -> Error.BadAddress
case INVALID_DATA -> Error.InvalidData
case UNEXPECTED_EOF -> Error.EndOfInput
case val -> Error.Other(val)
}
}
fn pub static from_os_error(code: Int) -> Error
Returns an Error
from a raw OS error code.
Examples
import std.unix.errors (ENOENT)
Error.from_os_error(ENOENT) # => Error.NotFound
last_os_error
Show source codeHide source code
fn pub static last_os_error -> Error {
from_os_error(inko_last_error as Int)
}
fn pub static last_os_error -> Error
Returns the last OS error produced by the current OS thread.
Instance methods
!=
Show source codeHide source code
fn pub !=(other: T) -> Bool {
(self == other).false?
}
fn pub !=(other: T) -> Bool
Returns true
if self
and the given object are not equal to each other.
==
Show source codeHide source code
fn pub ==(other: ref Error) -> Bool {
match (self, other) {
case (AddressInUse, AddressInUse) -> true
case (AddressUnavailable, AddressUnavailable) -> true
case (AlreadyConnected, AlreadyConnected) -> true
case (AlreadyExists, AlreadyExists) -> true
case (BrokenPipe, BrokenPipe) -> true
case (ConnectionAborted, ConnectionAborted) -> true
case (ConnectionRefused, ConnectionRefused) -> true
case (ConnectionReset, ConnectionReset) -> true
case (Deadlock, Deadlock) -> true
case (DirectoryNotEmpty, DirectoryNotEmpty) -> true
case (FileTooLarge, FileTooLarge) -> true
case (HostUnreachable, HostUnreachable) -> true
case (InProgress, InProgress) -> true
case (Interrupted, Interrupted) -> true
case (InvalidArgument, InvalidArgument) -> true
case (InvalidFileName, InvalidFileName) -> true
case (InvalidSeek, InvalidSeek) -> true
case (IsADirectory, IsADirectory) -> true
case (NetworkDown, NetworkDown) -> true
case (NotADirectory, NotADirectory) -> true
case (NotConnected, NotConnected) -> true
case (NotFound, NotFound) -> true
case (OutOfMemory, OutOfMemory) -> true
case (PermissionDenied, PermissionDenied) -> true
case (ReadOnlyFilesystem, ReadOnlyFilesystem) -> true
case (ResourceBusy, ResourceBusy) -> true
case (StorageFull, StorageFull) -> true
case (TimedOut, TimedOut) -> true
case (WouldBlock, WouldBlock) -> true
case (Other(a), Other(b)) -> a == b
case (InvalidData, InvalidData) -> true
case (EndOfInput, EndOfInput) -> true
case _ -> false
}
}
fn pub ==(other: ref Error) -> Bool
Returns true
if self
and the given object are equal to each other.
This operator is used to perform structural equality. This means two objects residing in different memory locations may be considered equal, provided their structure is equal. For example, two different arrays may be considered to have structural equality if they contain the exact same values.
fmt
Show source codeHide source code
fn pub fmt(formatter: mut Formatter) {
let name = match self {
case AddressInUse -> 'AddressInUse'
case AddressUnavailable -> 'AddressUnavailable'
case AlreadyConnected -> 'AlreadyConnected'
case AlreadyExists -> 'AlreadyExists'
case BrokenPipe -> 'BrokenPipe'
case ConnectionAborted -> 'ConnectionAborted'
case ConnectionRefused -> 'ConnectionRefused'
case ConnectionReset -> 'ConnectionReset'
case Deadlock -> 'Deadlock'
case DirectoryNotEmpty -> 'DirectoryNotEmpty'
case FileTooLarge -> 'FileTooLarge'
case HostUnreachable -> 'HostUnreachable'
case InProgress -> 'InProgress'
case Interrupted -> 'Interrupted'
case InvalidArgument -> 'InvalidArgument'
case InvalidFileName -> 'InvalidFileName'
case InvalidSeek -> 'InvalidSeek'
case IsADirectory -> 'IsADirectory'
case NetworkDown -> 'NetworkDown'
case NotADirectory -> 'NotADirectory'
case NotConnected -> 'NotConnected'
case NotFound -> 'NotFound'
case OutOfMemory -> 'OutOfMemory'
case PermissionDenied -> 'PermissionDenied'
case ReadOnlyFilesystem -> 'ReadOnlyFilesystem'
case ResourceBusy -> 'ResourceBusy'
case StorageFull -> 'StorageFull'
case TimedOut -> 'TimedOut'
case WouldBlock -> 'WouldBlock'
case BadAddress -> 'BadAddress'
case InvalidData -> 'InvalidData'
case EndOfInput -> 'EndOfInput'
case Other(code) -> {
formatter.tuple('Other').field(code).finish
return
}
}
formatter.tuple(name).finish
}
fn pub fmt(formatter: mut Formatter)
Formats self
in a human-readable format for debugging purposes.
to_string
Show source codeHide source code
fn pub to_string -> String {
match self {
case AddressInUse -> 'the address is already in use'
case AddressUnavailable -> "the address isn't available"
case AlreadyConnected -> 'the connection is already established'
case AlreadyExists -> 'the resource already exists'
case BrokenPipe -> 'the operation failed because a pipe was closed'
case ConnectionAborted -> 'the connection was terminated by the server'
case ConnectionRefused -> 'the connection was refused by the server'
case ConnectionReset -> 'the connection was reset by the server'
case Deadlock -> 'the resource would deadlock'
case DirectoryNotEmpty -> "the directory isn't empty"
case FileTooLarge -> 'the file is too large'
case HostUnreachable -> 'the host is unreachable'
case InProgress -> 'the operation is in progress'
case Interrupted -> 'the operation was interrupted'
case InvalidArgument -> 'one or more arguments are invalid'
case InvalidFileName -> 'the file name is too long'
case InvalidSeek -> 'the seek operation is invalid'
case IsADirectory -> 'the resource is a directory'
case NetworkDown -> 'the network is down'
case NotADirectory -> "the resource isn't a directory"
case NotConnected -> "a connection isn't established"
case NotFound -> "the resource isn't found"
case OutOfMemory -> 'we ran out of memory'
case PermissionDenied -> 'the operation lacks the necessary privileges'
case ReadOnlyFilesystem -> 'the file system is read-only'
case ResourceBusy -> 'the resource is busy'
case StorageFull -> 'the storage is full'
case TimedOut -> 'the operation timed out'
case WouldBlock -> 'the operation would block'
case BadAddress -> 'a memory address is in an invalid range'
case InvalidData -> "the data provided isn't valid for the operation"
case EndOfInput -> {
'the end of the input stream is reached, but more input is required'
}
case Other(code) -> 'an other error with code ${code} occurred'
}
}
fn pub to_string -> String
Converts self
to a String
.
Implemented traits
Equal
impl Equal[ref Error] for Error
Format
impl Format for Error
ToString
impl ToString for Error