RaCoCo result: MetamodelX::Red::Describable

# MetamodelX::Red::Describable 14.2%

    use Red::DB;
    use Red::Utils;
    use Red::Cli::Table;
    use Red::Cli::Column;

    =head2 MetamodelX::Red::Describable

    unit role MetamodelX::Red::Describable;

    method !create-column($_ --> Red::Cli::Column) {
        Red::Cli::Column.new:
            :name(.column-name // self.column-formatter: .attr-name),
            :formated-name(.attr-name),
            :type(get-RED-DB.default-type-for($_)),
            :perl-type(.type),
            :nullable(.nullable),
            :pk(.id),
            |(:references(%(table => .ref.attr.package.^table, column => .ref.name)) if .references)
    }

    #| Returns an object of type `Red::Cli::Table` that represents
    #| a database table of the caller.
    method describe(\model --> Red::Cli::Table) {
        Red::Cli::Table.new: :name(self.table(model)), :model-name(self.name(model)),
            :columns(self.columns>>.column.map({self!create-column($_)}).cache)
    }

    #| Returns the difference to transform this model to the database version.
    method diff-to-db(\model) {
        model.^describe.diff: $*RED-DB.schema-reader.table-definition: model.^table
    }

    #| Returns the difference to transform the DB table into this model.
    method diff-from-db(\model) {
        $*RED-DB.schema-reader.table-definition(model.^table).diff: model.^describe
    }

    #| Returns the difference between two models.
    method diff(\model, \other-model) {
        model.^describe.diff: other-model.^describe
    }