Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp15/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp15/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp15/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2015 - D - Storage Error

Error

Eine kurze Einführung in Enumeration in Rust an einem Beispiel der Server Architektur

Ein Enum⁵ der verschiedene Fehler in die in Speicher und Engine Elementen auftauchen können bündelt.

Das enum-Schlüsselwort wird zum Deklarieren einer Enumeration verwendet. Dies ist ein eigener Typ, der aus einer Gruppe benannter Konstanten, der so genannten Enumeratorliste, besteht. Hier werden Mehrere verschiedene Fehler-Typen in einer Enumeration gebündelt, dies erleichtert die Rückgabe und die Behandlung von Fehlern, und ermöglicht es Fehler an Stellen zu behandeln wo sie nicht aufgetaucht sind.

pub enum Error {
    Io(io::Error),
    BinEn(EncodingError),
    BinDe(DecodingError),
    Byteorder(::byteorder::Error),
    Utf8Error(FromUtf8Error),
    Utf8StrError(Utf8Error),
    NulError(NulError),
    WrongMagicNmbr,
    Engine,
    LoadDataBase,
    RemoveColumn,
    AddColumn,
    InvalidType,
    InterruptedRead,
    OutOfBounds,
    MissingPrimaryKey,
    InvalidColumn,
    NotAPrimaryKey,
    NoImplementation,
    WrongLength,
    NoOperationPossible,
    InvalidState,
    EndOfFile,
    BeginningOfFile,
    PrimaryKeyValueExists,
    FoundNoPrimaryKey,
    PrimaryKeyNotAllowed,
}

Enumerationen können auch Funktionen implementieren oder wie hier eine Autokonvertierungs Funktion um Fehler anderer Enumerationen in diese zu konvertieren. Das 'impl ... for' Statement definiert das folgende Funktionen von 'From' für Error definiert werden sollen. Für mehr Informationen über 'From' siehe die Rust Dokumentation: From

impl From<NulError> for Error {
    fn from(err: NulError) -> Error {
        Error::NulError(err)
    }
}
 
 
impl From<Utf8Error> for Error {
    fn from(err: Utf8Error) -> Error {
        Error::Utf8StrError(err)
    }
}
 
impl From<FromUtf8Error> for Error {
    fn from(err: FromUtf8Error) -> Error {
        Error::Utf8Error(err)
    }
}
 
 
impl From<io::Error> for Error {
    fn from(err: io::Error) -> Error {
        Error::Io(err)
    }
}
 
impl  From<EncodingError> for Error {
    fn from(err: EncodingError) -> Error {
        Error::BinEn(err)
    }
}
 
impl From<DecodingError> for Error {
    fn from(err: DecodingError) -> Error {
        Error::BinDe(err)
    }
}
 
impl From<::byteorder::Error> for Error {
    fn from(err: ::byteorder::Error) -> Error {
        Error::Byteorder(err)
    }
}

Enumerationen können mittels einem 'match' geprüft werden, wobei das 'match' in Rust einem switch in anderen Programmiersprachen gleicht siehe: Match

match Error {
    LoadDataBase => println("Fehler beim Laden der Datenbank!"),
    NotAPrimaryKey => println("Eingabe ist kein Primärschlüssel!"),
    //..... and so on
}

Autor: Dennis Lindner
Gruppe: Mathias Flüggen, Dennis Lindner, Heiner Rieping


Page last modified on September 24, 2015, at 02:27 PM