code: func ContextWithLoggable(ctx context.Context, l Loggable) context.Context {
  	existing, err := MetadataFromContext(ctx)
  	if err != nil {
  		// context does not contain meta. just set the new metadata
  		child := context.WithValue(ctx, metadataKey, Metadata(l.Loggable()))
  		return child
  	}
  
  	merged := DeepMerge(existing, l.Loggable())
  	child := context.WithValue(ctx, metadataKey, merged)
  	return child
  }
docs: // ContextWithLoggable returns a derived context which contains the provided
  // Loggable. Any Events logged with the derived context will include the
  // provided Loggable.