refactor: extract ports/drivers/bins layers — clean dependency inversion
Separate abstractions from implementations following DIP:
servers/ drivers/
│ │
▼ ▼
ports/ (trait-only crates, zero deps)
New crates:
ports/ (abstractions):
- port-framebuffer: Framebuffer trait
- port-block-device: BlockDevice trait + SectorId
- port-input-device: InputDevice trait + InputEvent types
drivers/ (implementations depend on ports/):
- driver-framebuffer-virtio: VirtIO GPU framebuffer
- driver-framebuffer-mock: test double
- driver-block-virtio: VirtIO block device
bins/ (composition roots wire server + driver):
- display-qemu: DisplayServer<VirtioFramebuffer>
- storage-qemu: storage server with VirtIO block
Servers no longer own their hardware traits or driver code.
Neither server nor driver depends on the other — both point
inward to the port abstraction.
This commit is contained in:
60
Cargo.lock
generated
60
Cargo.lock
generated
@@ -49,14 +49,25 @@ version = "0.1.0"
|
||||
name = "contacts-server"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "display-qemu"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"display-server",
|
||||
"driver-framebuffer-virtio",
|
||||
"server-framework",
|
||||
"userspace",
|
||||
"userspace-rt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "display-server"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"driver-framebuffer-mock",
|
||||
"port-framebuffer",
|
||||
"server-framework",
|
||||
"types",
|
||||
"userspace",
|
||||
"userspace-rt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -66,6 +77,27 @@ dependencies = [
|
||||
"types",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "driver-block-virtio"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"port-block-device",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "driver-framebuffer-mock"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"port-framebuffer",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "driver-framebuffer-virtio"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"port-framebuffer",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "echo"
|
||||
version = "0.1.0"
|
||||
@@ -107,6 +139,7 @@ dependencies = [
|
||||
name = "input-server"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"port-input-device",
|
||||
"server-framework",
|
||||
"types",
|
||||
"userspace",
|
||||
@@ -170,6 +203,18 @@ dependencies = [
|
||||
"types",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "port-block-device"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "port-framebuffer"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "port-input-device"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "power-server"
|
||||
version = "0.1.0"
|
||||
@@ -205,14 +250,23 @@ dependencies = [
|
||||
"userspace-rt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "storage-qemu"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"storage-server",
|
||||
"userspace-rt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "storage-server"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"driver-block-virtio",
|
||||
"port-block-device",
|
||||
"server-framework",
|
||||
"types",
|
||||
"userspace",
|
||||
"userspace-rt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
Reference in New Issue
Block a user