RaCoCo result: X::Red::Exceptions

# X::Red::Exceptions 45.8%

    use Red::Column;

    class X::Red is Exception {}

    class X::Red::RedDbNotDefined is X::Red {
        method message { Q[$*RED-DB wasn't defined] }
    }

    class X::Red::Defaults::FromConfNotFound is X::Red {
        has Str $.file = "./.red.json";
        method message { "Red configuration file ($!file) not found" }
    }

    class X::Red::Do is X::Red {
        has Str $.driver = "default"
    }

    class X::Red::Do::DriverNotDefined is X::Red::Do {
        method message { "Driver $.driver not specified" }
    }

    class X::Red::Do::DriverDefinedMoreThanOnce is X::Red::Do {
        method message { "Driver $.driver defined mor than once" }
    }

    class X::Red::Driver is X::Red {
        has Str $.driver = $*RED-DB.^name;
    }

    class X::Red::RelationshipNotColumn is X::Red {
        has Attribute   $.relationship;
        has             $.points-to;

        method message {
            "The relationship '$!relationship.name()' points to a {$!points-to.^name} ($!points-to.Str()). Should point to a column that is refering to another column."
        }
    }

    class X::Red::RelationshipNotRelated is X::Red {
        has Attribute   $.relationship;
        has Red::Column $.points-to;

        method message {
            "The relationship '$!relationship.name()' points to a column ('$!points-to.attr-name()') that does not refer to any where"
        }
    }

    class X::Red::InvalidTableName is X::Red::Driver {
        has Str $.table;

        method message { "'$!table' is an invalid table name for driver { $.driver }" }
    }

    class X::Red::UpdateNoId is X::Red::Driver {
        method message { "Update on a model without id isn't allowed" }
    }

    class X::Red::Driver::Mapped is X::Red::Driver {
        has Exception   $.orig-exception is required;
        has Str         $!orig-message   = $!orig-exception.message;
        has Backtrace   $!orig-backtrace = $!orig-exception.backtrace;

        method msg { !!! }

        method message {
            "{self.msg}\nOriginal error:\n{$!orig-message}"
        }

        method throw is hidden-from-backtrace {
            nextwith $!orig-backtrace
        }
    }

    class X::Red::Driver::Mapped::UnknownError is X::Red::Driver::Mapped {
        has Str @.fields;
        method msg {
            qq:to/END/
                Unknown Error!!!
                Please, copy this backtrace and open an issue on https://github.com/FCO/Red/issues/new
                Driver: { $.driver }
                Original error: { $.orig-exception.perl }
            END
        }
    }

    class X::Red::Driver::Mapped::Unique is X::Red::Driver::Mapped {
        has Str @.fields;
        method msg { "Unique constraint ({@!fields.join: ", "}) violated" }
    }

    class X::Red::Driver::Mapped::TableExists is X::Red::Driver::Mapped {
        has Str $.table is required;
        method msg { "Table $!table already exists" }
    }