1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
@startuml karuta-interface-layers
!theme plain
title Karuta Interface Architecture Layers
actor "Karuta Program" as Karuta
package "Language Bindings" {
[Karuta FFI] as FFI
[Erlang Ports] as Ports
[NIF (Native)] as NIF
}
package "Stable Contract Layer" {
component "domino.erl" as DominoAPI {
[create_database/1]
[execute/2]
[query/2]
[transaction/2]
}
}
package "Command Processor" {
[Command Parser] as CmdParser
[Validator] as Validator
[Executor] as Executor
}
package "Implementation Layer" {
component "operations.erl" as Ops {
[create_relation/3]
[create_tuple/3]
[get_tuples_iterator/2]
[etc...]
}
}
database "Mnesia Storage" as Storage
Karuta --> FFI
Karuta --> Ports
Karuta --> NIF
FFI --> DominoAPI
Ports --> DominoAPI
NIF --> DominoAPI
DominoAPI --> CmdParser
CmdParser --> Validator
Validator --> Executor
Executor --> Ops
Ops --> Storage
note right of DominoAPI
Stable, versioned interface
Command format:
{Verb, Entity, Name, Parameters}
Examples:
{create, relation, employee, Schema}
{insert, tuple, employee, Data}
{query, relation, employee, Constraints}
end note
@enduml
|