func NewServerContract(logFunc LogFunc) *ServerContract {
	return &ServerContract{
		logFunc:           logFunc,
		unaryRPCCalls:     make(map[string]map[string][]*UnaryRPCCall),
		callCnt:           make(map[string]int),
		unaryRPCContracts: make(map[string]*UnaryRPCContract),
	}
}
NewServerContract creates a ServerContract that has no contracts registered.
It requires a logger function to log the violation of its contracts.
package contracts
import (
	"context"
	"errors"
	"sync"
	"google.golang.org/grpc"
)
type LogFunc func(args ...interface{})
type ServerContract struct {
	logFunc LogFunc
	callsLock     sync.RWMutex
	unaryRPCCalls map[string]map[string][]*UnaryRPCCall
	callCnt       map[string]int
	contractsLock     sync.Mutex
	unaryRPCContracts map[string]*UnaryRPCContract
	serve             bool
}