summaryrefslogtreecommitdiff
path: root/internal/event/interface_assertions.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-13 14:28:43 +0300
committerPaul Buetow <paul@buetow.org>2026-05-13 14:28:43 +0300
commita73b7973531f2b8632269a8c8359acf69ee61f45 (patch)
tree5f9e96b893fcf1a2ca774c76276a07ecfa565711 /internal/event/interface_assertions.go
parent27b94f917064948fa33141309a3f08deb40ffde2 (diff)
add compile-time interface assertions for public types (task c4)
Extend the var _ Interface = (*Concrete)(nil) coverage started in j3 to cover the remaining public types not yet guarded: - *file.FdFile → file.File (file/file.go) - streamrow.Row → globalfilter.Candidate (streamrow/row.go; adds globalfilter import — no cycle since globalfilter does not import streamrow) - *streamrow.RingBuffer → eventstream.Source (tui/eventstream/ringbuffer.go; already a type alias for streamrow.RingBuffer) - *probemanager.Manager → tui/probes.Manager (tui/probes/model.go) - All 9 generated *types.*Event types → event.Event in the new file internal/event/interface_assertions.go (non-generated, lives in the event package which already imports types, so no new import cycle) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/event/interface_assertions.go')
-rw-r--r--internal/event/interface_assertions.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/internal/event/interface_assertions.go b/internal/event/interface_assertions.go
new file mode 100644
index 0000000..77a43ea
--- /dev/null
+++ b/internal/event/interface_assertions.go
@@ -0,0 +1,44 @@
+package event
+
+import "ior/internal/types"
+
+// --- compile-time interface satisfaction assertions ---
+//
+// Every generated concrete event type in internal/types must satisfy the Event
+// interface (which composes EventIdentity and EventLifecycle). These assertions
+// live in the event package rather than in the generated file so they are not
+// overwritten by mage generate. The event package already imports types, so no
+// new import cycle is introduced.
+
+var (
+ // *types.OpenEvent is the most common event type; it carries open-syscall
+ // enter-event data (fd, flags, pathname).
+ _ Event = (*types.OpenEvent)(nil)
+
+ // *types.NullEvent is used for tracepoints that carry no extra payload
+ // beyond the base header fields.
+ _ Event = (*types.NullEvent)(nil)
+
+ // *types.FdEvent carries a single file-descriptor field (close, dup, etc.).
+ _ Event = (*types.FdEvent)(nil)
+
+ // *types.RetEvent is the exit-side event for all syscalls; it carries the
+ // kernel return value.
+ _ Event = (*types.RetEvent)(nil)
+
+ // *types.NameEvent carries a single filename field (unlink, mkdir, etc.).
+ _ Event = (*types.NameEvent)(nil)
+
+ // *types.PathEvent carries a pathname field for path-only syscalls.
+ _ Event = (*types.PathEvent)(nil)
+
+ // *types.FcntlEvent carries the fcntl command and argument fields.
+ _ Event = (*types.FcntlEvent)(nil)
+
+ // *types.Dup3Event carries the old and new file-descriptor fields for dup3.
+ _ Event = (*types.Dup3Event)(nil)
+
+ // *types.OpenByHandleAtEvent carries the mount-fd and flags for
+ // open_by_handle_at syscalls.
+ _ Event = (*types.OpenByHandleAtEvent)(nil)
+)