asdi 0.2.5

Another Simplistic Datalog Implementation (in Rust)
Documentation
@startuml

!include options.plantuml

class asdi::Program
hide "asdi::Program" members

class asdi::edb::RelationSet
hide "asdi::edb::RelationSet" members

class asdi::edb::Relation
hide "asdi::edb::Relation" members

class asdi::edb::Fact
hide "asdi::edb::Fact" members

class asdi::idb::RuleSet
hide "asdi::idb::RuleSet" members

class asdi::idb::Rule
hide "asdi::idb::Rule" members

class asdi::idb::query::QuerySet
hide "asdi::idb::query::QuerySet" members

class asdi::idb::query::Query
hide "asdi::idb::query::Query" members

namespace asdi::visitor {

    interface ProgramVisitor
    interface ProgramWriter
    interface RelationVisitor
    interface RuleVisitor
    interface QueryVisitor

    ProgramVisitor ..> RelationVisitor
    ProgramVisitor ..> RuleVisitor
    ProgramVisitor ..> QueryVisitor
    ProgramVisitor ..> asdi::Program
    ProgramVisitor ..> asdi::edb::RelationSet
    ProgramVisitor ..> asdi::idb::RuleSet
    ProgramVisitor ..> asdi::idb::query::QuerySet

    ProgramWriter --|> ProgramVisitor

    RelationVisitor ..> asdi::edb::Relation
    RelationVisitor ..> asdi::edb::Fact

    RuleVisitor ..> asdi::idb::Rule

    QueryVisitor ..> asdi::idb::query::Query


    class visitor << module >> {
        visit_program(program: &Program, visitor: &ProgramVisitor) : Result<()>
        format_program(program: &Program, visitor: &ProgramWriter) : Result<()>
    }

    visitor .right.> ProgramVisitor
    visitor .right.> ProgramWriter
}

@enduml