// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package spanlog provides span and event logger interfaces.
package spanlog

// SpanLogger is something that has the CreateSpan method, which
// creates a event spanning some duration which will eventually be
// logged and visualized.
type Logger interface {
	// CreateSpan logs the start of an event.
	// optText is 0 or 1 strings.
	CreateSpan(event string, optText ...string) Span
}

// Span is a handle that can eventually be closed.
// Typical usage:
//
//   sp := sl.CreateSpan("slow_operation")
//   result, err := doSlowOperation()
//   sp.Done(err)
//   // do something with result, err
type Span interface {
	// Done marks a span as done.
	// The err is returned unmodified for convenience at callsites.
	Done(err error) error
}
