# State.world
```
type key = string
type value = list<u8> // Or application-defined type?
import load: func(key: key) -> result<value, error>
export serialize: func() -> result<list<(key, value)>, error>
```
# pubsub/Types.wit
```
enum error {...}
type channel-id = string // or UUID? or a Handle?
type message = list<u8>
```
# pubsub/Publish.wit
```
use { channel-id, message, error } from "pubsub/Types"
publish: func(channel: channel-id, message: message) -> result<(), error>
```
# pubsub/Subscribe.wit
```
use { channel-id, message, error } from "pubsub/Types"
subscribe: func(channel: channel-id) -> result<(), error>
```
# pubsub/Receive.wit
```
use { channel-id, message } from "pubsub/Types"
receive: func(channel: channel-id, message: message) -> ()
```
# WebSocket.world
```
extend "State"
export "pubsub/Receive"
use { request, response } from "http/Types"
enum error { ... }
type frame = list<u8>
type frames = list<frame>
export handle-connect: func(req: request, channel: channel-id)
-> response
export handle-disconnect: func() -> ()
import send-frames: func(frames: frames) -> result<(), error>
export receive-frames: func(frames: frames) -> ()
```