mirror of
https://github.com/rwinkhart/go-winio.git
synced 2026-09-02 15:17:38 -04:00
41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package etw
|
|
|
|
// FieldOpt defines the option function type that can be passed to
|
|
// Provider.WriteEvent to add fields to the event.
|
|
type FieldOpt func(em *EventMetadata, ed *EventData)
|
|
|
|
// WithFields returns the variadic arguments as a single slice.
|
|
func WithFields(opts ...FieldOpt) []FieldOpt {
|
|
return opts
|
|
}
|
|
|
|
// StringField adds a single string field to the event.
|
|
func StringField(name string, value string) FieldOpt {
|
|
return func(em *EventMetadata, ed *EventData) {
|
|
em.WriteField(name, InTypeANSIString, OutTypeUTF8, 0)
|
|
ed.WriteString(value)
|
|
}
|
|
}
|
|
|
|
// StringArray adds an array of strings to the event.
|
|
func StringArray(name string, values []string) FieldOpt {
|
|
return func(em *EventMetadata, ed *EventData) {
|
|
em.WriteArray(name, InTypeANSIString, OutTypeUTF8, 0)
|
|
ed.WriteUint16(uint16(len(values)))
|
|
for _, v := range values {
|
|
ed.WriteString(v)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Struct adds a nested struct to the event, the FieldOpts in the opts argument
|
|
// are used to specify the fields of the struct.
|
|
func Struct(name string, opts ...FieldOpt) FieldOpt {
|
|
return func(em *EventMetadata, ed *EventData) {
|
|
em.WriteStruct(name, uint8(len(opts)), 0)
|
|
for _, opt := range opts {
|
|
opt(em, ed)
|
|
}
|
|
}
|
|
}
|