Skip to main content

FlowEventNdjsonWriter

Struct FlowEventNdjsonWriter 

Source
pub struct FlowEventNdjsonWriter<W: Write> { /* private fields */ }
Available on crate features emit-ndjson and emit only.
Expand description

Newline-delimited JSON writer for FlowEvent streams.

Implementations§

Source§

impl<W: Write> FlowEventNdjsonWriter<W>

Source

pub fn new(sink: W) -> Self

Construct with default options.

Source

pub fn with_options(sink: W, options: NdjsonOptions) -> Self

Construct with custom options.

Source

pub fn write_lifecycle<T, K>(&mut self, ev: &T) -> Result<()>
where T: LifecycleEvent<K>, K: Serialize + Clone,

Emit any LifecycleEvent — both the tracker’s FlowEvent and the typed driver’s Event (issue #97). The Event is projected to its FlowEvent form first, so NDJSON output keeps one schema regardless of source. Events with no projection (e.g. Event::ParserClosed) are skipped.

Source

pub fn write_event<K>(&mut self, ev: &FlowEvent<K>) -> Result<()>
where K: Serialize,

Write one event to the sink. Skipped variants (per NdjsonOptions) produce no output.

Source

pub fn write_owned_anomaly(&mut self, a: &OwnedAnomaly) -> Result<()>

Write a canonical crate::OwnedAnomaly as one NDJSON record.

Requires the serde feature on flowscope; OwnedAnomaly derives Serialize behind that feature. Output shape:

{
  "kind": "PortScanTRW",
  "severity": "warning",
  "ts": { "sec": 1700000000, "nsec": 0 },
  "src_ip": "10.0.0.1",
  "src_port": 33000,
  ...,
  "observations": [["verdict", "scanner"]],
  "metrics": [["log_likelihood", 3.7]],
  "flowscope_kind": null
}
Source

pub fn write_flow_record(&mut self, rec: &FlowRecord) -> Result<()>

Available on crate feature ipfix only.

Write one finalised crate::FlowRecord as a JSON line. The serialization is whatever FlowRecord’s #[derive(Serialize)] produces — the full IPFIX IE field set, IE-named keys.

Issue #16 — emitter unification at the FlowRecord layer. Pairs with write_event for the FlowEvent shape. The two outputs have different schemas: write_event(Ended) emits the flowscope FlowEvent::Ended JSON shape; write_flow_record emits the IPFIX-keyed shape that downstream IPFIX-consuming pipelines expect.

Requires the ipfix feature.

Source

pub fn flush(&mut self) -> Result<()>

Flush buffered output to the sink.

Source

pub fn finish(self) -> Result<W>

Flush and recover the underlying sink.

Auto Trait Implementations§

§

impl<W> Freeze for FlowEventNdjsonWriter<W>
where W: Freeze,

§

impl<W> RefUnwindSafe for FlowEventNdjsonWriter<W>
where W: RefUnwindSafe,

§

impl<W> Send for FlowEventNdjsonWriter<W>
where W: Send,

§

impl<W> Sync for FlowEventNdjsonWriter<W>
where W: Sync,

§

impl<W> Unpin for FlowEventNdjsonWriter<W>
where W: Unpin,

§

impl<W> UnsafeUnpin for FlowEventNdjsonWriter<W>
where W: UnsafeUnpin,

§

impl<W> UnwindSafe for FlowEventNdjsonWriter<W>
where W: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more