Roles¶
A role is one capability the library needs filled, defined as a vtable in
SolidSyslog<Role>Definition.h. A platform adapter, a Core implementation, or
your own code fills it. Every role has a Null fallback, so an unfilled slot
degrades safely instead of dangling at link time.
There are twelve. Each page below is that role's contract — the vtable itself, and a generated diagram of the backends that realise it.
Networking¶
| Role | Does |
|---|---|
| Resolver | turn a host and port into an address |
| Datagram | send one UDP payload |
| Stream | carry bytes over a connection — plain TCP, or TLS layered over it |
| Sender | frame a record and deliver it |
Storage¶
| Role | Does |
|---|---|
| Buffer | hold records between Log and Service |
| Store | store and forward across an outage |
| BlockDevice | block-indexed storage beneath a Store |
| File | the file primitive beneath a BlockDevice |
OS primitives¶
| Role | Does |
|---|---|
| Mutex | guard a Buffer shared across tasks |
| AtomicCounter | the RFC 5424 sequenceId source |
Evidence and integrity¶
| Role | Does |
|---|---|
| StructuredData | emit one RFC 5424 SD element |
| SecurityPolicy | seal and open stored records |
Bring your own¶
Filling a role is implementing its vtable. Porting puts the twelve contracts side by side, each with its Null fallback and a reference implementation.
Which platform fills a role on your target is the platform × capability matrix.
Or let us fill it.
Nothing shipped backs the role you need? We write the platform adapter for you — and the tests that prove it against the contract. Talk to us about it.