From a73b7973531f2b8632269a8c8359acf69ee61f45 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 13 May 2026 14:28:43 +0300 Subject: add compile-time interface assertions for public types (task c4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- internal/event/interface_assertions.go | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 internal/event/interface_assertions.go (limited to 'internal/event/interface_assertions.go') 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) +) -- cgit v1.2.3