package log

import 

// Helper wraps a Logger with leveled convenience methods for call sites. It is a
// thin value type; adapters implement Logger, not Helper.
//
// Build one with For; the zero Helper logs to Nop.
type Helper struct {
	l Logger
}

// For returns a Helper writing to l, or to Nop if l is nil.
func ( Logger) Helper {
	return Helper{l: OrNop()}
}

func ( Helper) () Logger {
	if .l == nil {
		return Nop
	}
	return .l
}

// Logger returns the underlying Logger, never nil.
func ( Helper) () Logger {
	return .logger()
}

// With returns a Helper whose logger attaches attrs to every record. See With.
func ( Helper) ( ...Attr) Helper {
	return Helper{l: With(.logger(), ...)}
}

// Named returns a Helper whose logger is tagged with name. See Named.
func ( Helper) ( string) Helper {
	return Helper{l: Named(.logger(), )}
}

// Enabled reports whether a record at level would be recorded.
func ( Helper) ( context.Context,  Level) bool {
	return .logger().Enabled(, )
}

// Debug logs at LevelDebug.
func ( Helper) ( context.Context,  string,  ...Attr) {
	.logger().Log(, LevelDebug, , ...)
}

// Info logs at LevelInfo.
func ( Helper) ( context.Context,  string,  ...Attr) {
	.logger().Log(, LevelInfo, , ...)
}

// Warn logs at LevelWarn.
func ( Helper) ( context.Context,  string,  ...Attr) {
	.logger().Log(, LevelWarn, , ...)
}

// Error logs at LevelError.
func ( Helper) ( context.Context,  string,  ...Attr) {
	.logger().Log(, LevelError, , ...)
}